From nobody Sun Dec 14 02:17:06 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1751547091; cv=none; d=zohomail.com; s=zohoarc; b=eabopUO3wrnnnrnN2neHlFt4S8xVaExv7jHoWDYo4mA4Wqjimqga2bIVJlCGqEIB4cUOQS5ZCSt/BrNG3AVyRAJYjCWXKPRQPInBIl2dHDNnagoH9hAiJH6FR45pPicETMGrDN4B87mMbQUdw8qla3QDlMaCxbIRFF+COCS4te0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751547091; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id:Cc; bh=xxHU/PN/XwrA1Vugm0Focu0fkP/vuMuM1Zl1LMjzNVM=; b=YuIJBgNo50I36sD5qnKs7MeZjYRQVIRLNXDYZMwDVQ2rVJcUtOGSNt3eu/G9SCBtL/xWDWliNOeKcED+Rh4sCZaKxxNWStVEzS10qp+uKIOY9eald/40g7ZYyqxEb3hUpdSezmX7x5qwdGHakc3jlkWw0giUt1KO5eVSEtDS0n0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 17515470919891007.4319537250037; Thu, 3 Jul 2025 05:51:31 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 0B43613A5; Thu, 3 Jul 2025 08:51:30 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 79E3C12B8; Thu, 3 Jul 2025 08:50:44 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 461F4CD0; Thu, 3 Jul 2025 08:50:40 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id D4478D3D for ; Thu, 3 Jul 2025 08:50:39 -0400 (EDT) Received: from mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-491-f-6V_JGsMRGG0xj2p_77fQ-1; Thu, 03 Jul 2025 08:50:38 -0400 Received: from mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.17]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 8BC961808984 for ; Thu, 3 Jul 2025 12:50:37 +0000 (UTC) Received: from speedmetal.redhat.com (unknown [10.45.242.5]) by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 9FEB1195608F for ; Thu, 3 Jul 2025 12:50:36 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H5, RCVD_IN_MSPIKE_WL,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1751547039; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=nO2rARhk/GKy5NZZ0sypa7pq4LtIJeEl9UkgyCHqgDE=; b=RFSbpyCNf+pHpGqkJe6vsgujmEIFLhECg99GyqL7O9LZHqA2ngONUTMg51AP0/feyZH3BQ UcK8fM+K7jCRPkLMBjtztgbA47LKVm31KxUh9F3cHvL/PFZFrIpP1jRsC1QNB3ZSU1wyqW VDCz9MwRkH71CAkUwbZApYPrVnCdw6o= X-MC-Unique: f-6V_JGsMRGG0xj2p_77fQ-1 X-Mimecast-MFC-AGG-ID: f-6V_JGsMRGG0xj2p_77fQ_1751547037 To: devel@lists.libvirt.org Subject: [PATCH 01/10] virSystemdCreateMachine: Document @maxthreds Date: Thu, 3 Jul 2025 14:50:24 +0200 Message-ID: <4a56695bdb57fb61e75a8b2de5cab720176479fc.1751546915.git.pkrempa@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.17 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: cxomOhv3eKsxKLyFKihcHhf_q-4tASoYytWf5oq1P54_1751547037 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: XBJTU4YHAARGZZOXL2O673Q7QMQPYH5W X-Message-ID-Hash: XBJTU4YHAARGZZOXL2O673Q7QMQPYH5W X-MailFrom: pkrempa@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Peter Krempa via Devel Reply-To: Peter Krempa X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1751547093684116600 Content-Type: text/plain; charset="utf-8" From: Peter Krempa The parameter overrides the maximum number of threads for the machine. Fixes: d5572f62e32 Signed-off-by: Peter Krempa Reviewed-by: Pavel Hrdina --- src/util/virsystemd.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/util/virsystemd.c b/src/util/virsystemd.c index 92d2890360..4f8424ae32 100644 --- a/src/util/virsystemd.c +++ b/src/util/virsystemd.c @@ -357,6 +357,7 @@ virSystemdGetMachineUnitByPID(pid_t pid) * @nnicindexes: number of network interface indexes in list * @nicindexes: list of network interface indexes * @partition: name of the slice to place the machine in + * @maxthreads: maximum number of threads the VM process can use * * Returns 0 on success, -1 on fatal error, or -2 if systemd-machine is no= t available */ --=20 2.49.0 From nobody Sun Dec 14 02:17:06 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1751547114; cv=none; d=zohomail.com; s=zohoarc; b=bcUneeQesmv8MMjcSADI6LXB/YUT4CjMfrmwJfch9QgWHsCToXde1qKdbA7jPA6UBFyQ4/TJF28o/kS1cmz+X9JB1OkTIBoXpJM0+HNgyMN7HCz57XAsXbFjgNm5fhf6HWcvdDP+VKoC32XmL8qBvD0NFOUilT2WYUCsMWRq+gg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751547114; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id:Cc; bh=bNcJ+KtUo5sg6sYIe6yYtDndwHAeJ6jQ91WpqFrNIbI=; b=L8I2/r6HJFG0cS36yZ5Skw5MNoctG1Dt4fmPyz7wgYItPRVO7h8waoVrEg3WKeJojNaoZ940gNXzk2MJqNYvF69y/QO/UgKug8AgAxpCV0TeuaA0LbXhPmdYduA+teRGvFaULGdsso33KpM43hsVCmZ9HK02SXC43Aq+JXTeavE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 175154711463381.27837404795957; Thu, 3 Jul 2025 05:51:54 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id B661413DF; Thu, 3 Jul 2025 08:51:53 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id C04FD12BE; Thu, 3 Jul 2025 08:50:44 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id B120BCD0; Thu, 3 Jul 2025 08:50:41 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 3927FA79 for ; Thu, 3 Jul 2025 08:50:41 -0400 (EDT) Received: from mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-587-hAOlH7JyNSuSTcmyR0T0fg-1; Thu, 03 Jul 2025 08:50:39 -0400 Received: from mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.17]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id E13C518089B5 for ; Thu, 3 Jul 2025 12:50:38 +0000 (UTC) Received: from speedmetal.redhat.com (unknown [10.45.242.5]) by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 20B15195608F for ; Thu, 3 Jul 2025 12:50:37 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H5, RCVD_IN_MSPIKE_WL,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1751547040; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=nkKwubg0XDOP9Kdxtpr12OLhPvxAm2ftOOUBlsNaZNA=; b=a5iSyivzsuXZcP1gxxJVAjj++SxbHUyNuupphCXa0TrE/UzB+/iRmj0YogjSPnBGK1qsi5 m5qPMtoNYAMrQZ7AiLCsrMmkZIvWgPAlWBN6Vgv0iT79n1GLNaDAcq98nLqtMus2a/sVD3 kUxziFAklYnA+Ji9GiWV2f+tTwZGmWY= X-MC-Unique: hAOlH7JyNSuSTcmyR0T0fg-1 X-Mimecast-MFC-AGG-ID: hAOlH7JyNSuSTcmyR0T0fg_1751547039 To: devel@lists.libvirt.org Subject: [PATCH 02/10] cgroup: Unexport 'virDomainCgroupInitCgroup' Date: Thu, 3 Jul 2025 14:50:25 +0200 Message-ID: In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.17 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: IHqr-oxejIHOMObbjlrZG9xrI8fs9RstzK5RJ8PgedE_1751547039 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: DJCSSYOZWUINW3Y74ZLDCFOFT2AQWRAY X-Message-ID-Hash: DJCSSYOZWUINW3Y74ZLDCFOFT2AQWRAY X-MailFrom: pkrempa@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Peter Krempa via Devel Reply-To: Peter Krempa X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1751547115896116600 Content-Type: text/plain; charset="utf-8" From: Peter Krempa The function is called just from one place within the module where it's defined. Signed-off-by: Peter Krempa Reviewed-by: Pavel Hrdina --- src/hypervisor/domain_cgroup.c | 2 +- src/hypervisor/domain_cgroup.h | 10 ---------- src/libvirt_private.syms | 1 - 3 files changed, 1 insertion(+), 12 deletions(-) diff --git a/src/hypervisor/domain_cgroup.c b/src/hypervisor/domain_cgroup.c index fda495faf5..fecc0f7966 100644 --- a/src/hypervisor/domain_cgroup.c +++ b/src/hypervisor/domain_cgroup.c @@ -342,7 +342,7 @@ virDomainCgroupSetupCpuCgroup(virDomainObj *vm, } -int +static int virDomainCgroupInitCgroup(const char *prefix, virDomainObj *vm, size_t nnicindexes, diff --git a/src/hypervisor/domain_cgroup.h b/src/hypervisor/domain_cgroup.h index f8d261a080..6e5c98004e 100644 --- a/src/hypervisor/domain_cgroup.h +++ b/src/hypervisor/domain_cgroup.h @@ -52,16 +52,6 @@ virDomainCgroupSetupCpusetCgroup(virCgroup *cgroup); int virDomainCgroupSetupCpuCgroup(virDomainObj *vm, virCgroup *cgroup); -int -virDomainCgroupInitCgroup(const char *prefix, - virDomainObj *vm, - size_t nnicindexes, - int *nicindexes, - virCgroup **cgroup, - int cgroupControllers, - unsigned int maxThreadsPerProc, - bool privileged, - char *machineName); void virDomainCgroupRestoreCgroupState(virDomainObj *vm, virCgroup *cgroup); diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index a8ebf9efd8..8f1489ecc8 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1641,7 +1641,6 @@ virSetConnectStorage; virDomainCgroupConnectCgroup; virDomainCgroupEmulatorAllNodesAllow; virDomainCgroupEmulatorAllNodesRestore; -virDomainCgroupInitCgroup; virDomainCgroupRemoveCgroup; virDomainCgroupSetMemoryLimitParameters; virDomainCgroupSetupBlkio; --=20 2.49.0 From nobody Sun Dec 14 02:17:06 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1751547141; cv=none; d=zohomail.com; s=zohoarc; b=HS5dP9ucUsjb/4C60Dl+stLRBTTJQd15zaiTobC2UAb2vxM6KhL8LmSs3vMxlw3GTYn81GPG6fT32aurDqZPIKYWMAllLzb//i1ohhxguC7gG8nsnjpVmGy5/gRRHnv5pK4Q3fnka6Ay/XIEr/JReWmLNwEkptQB1reYRk6ivaE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751547141; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id:Cc; bh=RnhBMZ6wsTi+WJkYYhOW1Z6Oimwo9RIzzjWnzzSFWKE=; b=cBhA4MpKrio3mZ6qKp22xeBrV3ExG1P0UhXmgA52pFdM8UIs+wk4/tVFTFehiUYarX+U/P5wUFfXjxx+gDgyH2lYMZi8quJ6e1IIoI0L8HfhJUNbncS67GEhFwTT68uMAysPUCt9jGvSUSVcVWPsGQsY83QyXygdO0ikU+HyZUo= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1751547141438616.3920007752884; Thu, 3 Jul 2025 05:52:21 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 795941280; Thu, 3 Jul 2025 08:52:20 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 77CF61375; Thu, 3 Jul 2025 08:50:53 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 8A8B1121C; Thu, 3 Jul 2025 08:50:49 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 516D11210 for ; Thu, 3 Jul 2025 08:50:43 -0400 (EDT) Received: from mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-630-UJ6ux5M0OECfoUGheuOMPA-1; Thu, 03 Jul 2025 08:50:41 -0400 Received: from mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.17]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 27869180029E for ; Thu, 3 Jul 2025 12:50:40 +0000 (UTC) Received: from speedmetal.redhat.com (unknown [10.45.242.5]) by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 60E45195608F for ; Thu, 3 Jul 2025 12:50:39 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H5, RCVD_IN_MSPIKE_WL,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1751547042; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=JiXidyDF/zLttTxE+AQOFwMW/BaxT6u/WlarPzH1vPk=; b=g7Pz/grSt59VGyswWS5McPNZDCHk4vdqcSJbUnW3VlR3CWpUkCURaPsJF/TffIBMkXWVC1 O5d5WsbufT8WWr1aw2f+BhA2OZGBObfABmGK1hzftRZXaQ5BNA9/Oaog7q7fuSHle5cESP hcNqOSYlo6MBOBzUVNpldyEmH7PY81A= X-MC-Unique: UJ6ux5M0OECfoUGheuOMPA-1 X-Mimecast-MFC-AGG-ID: UJ6ux5M0OECfoUGheuOMPA_1751547040 To: devel@lists.libvirt.org Subject: [PATCH 03/10] qemu: conf: Store 'autoShutdown' config in virDomainDriverAutoShutdownConfig Date: Thu, 3 Jul 2025 14:50:26 +0200 Message-ID: <967e8d0dc2f296899a83502a06f1a9e54c05769a.1751546915.git.pkrempa@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.17 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: rP9tKe6nf72-4fV2CJdzZqhq4aaD3sn3JWTHgFDIo_k_1751547040 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: AVFURVGVIDL55F4BQCCMQEC6N4U7B6YC X-Message-ID-Hash: AVFURVGVIDL55F4BQCCMQEC6N4U7B6YC X-MailFrom: pkrempa@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Peter Krempa via Devel Reply-To: Peter Krempa X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1751547142475116600 Content-Type: text/plain; charset="utf-8" From: Peter Krempa Rather than having a bunch of extra variables save the configuration of the daemon auto shutdown in virDomainDriverAutoShutdownConfig which is also used when initiating the shutdown. Signed-off-by: Peter Krempa Reviewed-by: Pavel Hrdina --- src/qemu/qemu_conf.c | 30 +++++++++++++++--------------- src/qemu/qemu_conf.h | 7 +------ src/qemu/qemu_driver.c | 12 +++--------- 3 files changed, 19 insertions(+), 30 deletions(-) diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c index 9bf12fc179..482e19b502 100644 --- a/src/qemu/qemu_conf.c +++ b/src/qemu/qemu_conf.c @@ -320,15 +320,15 @@ virQEMUDriverConfig *virQEMUDriverConfigNew(bool priv= ileged, * * XXX, or query if libvirt-guests.service is enabled perhaps ? */ - cfg->autoShutdownTrySave =3D VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_SCOPE= _NONE; - cfg->autoShutdownTryShutdown =3D VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_S= COPE_NONE; - cfg->autoShutdownPoweroff =3D VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_SCOP= E_NONE; + cfg->autoShutdown.trySave =3D VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_SCOP= E_NONE; + cfg->autoShutdown.tryShutdown =3D VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_= SCOPE_NONE; + cfg->autoShutdown.poweroff =3D VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_SCO= PE_NONE; } else { - cfg->autoShutdownTrySave =3D VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_SCOPE= _PERSISTENT; - cfg->autoShutdownTryShutdown =3D VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_S= COPE_ALL; - cfg->autoShutdownPoweroff =3D VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_SCOP= E_ALL; + cfg->autoShutdown.trySave =3D VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_SCOP= E_PERSISTENT; + cfg->autoShutdown.tryShutdown =3D VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_= SCOPE_ALL; + cfg->autoShutdown.poweroff =3D VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_SCO= PE_ALL; } - cfg->autoShutdownRestore =3D true; + cfg->autoShutdown.autoRestore =3D true; return g_steal_pointer(&cfg); } @@ -719,11 +719,11 @@ virQEMUDriverConfigLoadSaveEntry(virQEMUDriverConfig = *cfg, autoShutdownTrySave); return -1; } - cfg->autoShutdownTrySave =3D autoShutdownVal; + cfg->autoShutdown.trySave =3D autoShutdownVal; } - if (cfg->autoShutdownTrySave =3D=3D VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_SC= OPE_ALL || - cfg->autoShutdownTrySave =3D=3D VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_SC= OPE_TRANSIENT) { + if (cfg->autoShutdown.trySave =3D=3D VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_S= COPE_ALL || + cfg->autoShutdown.trySave =3D=3D VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_S= COPE_TRANSIENT) { virReportError(VIR_ERR_INVALID_ARG, "%s", _("managed save cannot be requested for transient d= omains")); return -1; @@ -740,7 +740,7 @@ virQEMUDriverConfigLoadSaveEntry(virQEMUDriverConfig *c= fg, autoShutdownTryShutdown); return -1; } - cfg->autoShutdownTryShutdown =3D autoShutdownVal; + cfg->autoShutdown.tryShutdown =3D autoShutdownVal; } if (virConfGetValueString(conf, "auto_shutdown_poweroff", &autoShutdow= nPoweroff) < 0) @@ -754,16 +754,16 @@ virQEMUDriverConfigLoadSaveEntry(virQEMUDriverConfig = *cfg, autoShutdownPoweroff); return -1; } - cfg->autoShutdownPoweroff =3D autoShutdownVal; + cfg->autoShutdown.poweroff =3D autoShutdownVal; } if (virConfGetValueUInt(conf, "auto_shutdown_wait", - &cfg->autoShutdownWait) < 0) + &cfg->autoShutdown.waitShutdownSecs) < 0) return -1; - if (virConfGetValueBool(conf, "auto_shutdown_restore", &cfg->autoShutd= ownRestore) < 0) + if (virConfGetValueBool(conf, "auto_shutdown_restore", &cfg->autoShutd= own.autoRestore) < 0) return -1; if (virConfGetValueBool(conf, "auto_save_bypass_cache", - &cfg->autoSaveBypassCache) < 0) + &cfg->autoShutdown.saveBypassCache) < 0) return -1; return 0; diff --git a/src/qemu/qemu_conf.h b/src/qemu/qemu_conf.h index 1ce9dbe4a8..ff376aed4d 100644 --- a/src/qemu/qemu_conf.h +++ b/src/qemu/qemu_conf.h @@ -208,12 +208,7 @@ struct _virQEMUDriverConfig { bool autoDumpBypassCache; bool autoStartBypassCache; unsigned int autoStartDelayMS; - virDomainDriverAutoShutdownScope autoShutdownTrySave; - virDomainDriverAutoShutdownScope autoShutdownTryShutdown; - virDomainDriverAutoShutdownScope autoShutdownPoweroff; - unsigned int autoShutdownWait; - bool autoShutdownRestore; - bool autoSaveBypassCache; + virDomainDriverAutoShutdownConfig autoShutdown; char *lockManagerName; diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 9b583ad7aa..4dbd5ec2fc 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -964,15 +964,9 @@ static int qemuStateStop(void) { g_autoptr(virQEMUDriverConfig) cfg =3D virQEMUDriverGetConfig(qemu_dri= ver); - virDomainDriverAutoShutdownConfig ascfg =3D { - .uri =3D cfg->uri, - .trySave =3D cfg->autoShutdownTrySave, - .tryShutdown =3D cfg->autoShutdownTryShutdown, - .poweroff =3D cfg->autoShutdownPoweroff, - .waitShutdownSecs =3D cfg->autoShutdownWait, - .saveBypassCache =3D cfg->autoSaveBypassCache, - .autoRestore =3D cfg->autoShutdownRestore, - }; + virDomainDriverAutoShutdownConfig ascfg =3D cfg->autoShutdown; + + ascfg.uri =3D cfg->uri; virDomainDriverAutoShutdown(&ascfg); --=20 2.49.0 From nobody Sun Dec 14 02:17:06 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1751547169; cv=none; d=zohomail.com; s=zohoarc; b=S9XXF3NIPAqkafg1LBIHImihUNZOZpCFZ+SzO7Xx5ffoiaciuUQBfv05ipP2htNJ6/F+ak8yEr2F5/OHhJKtvl/1OYXYTWPv91Of55Aba0T4Ug2TUNCCnY7sWUM8JU8Hb/CuaSvzPQf9ni1XyFraLvkmFYwGJNGhbYjgqWX1Cl8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751547169; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id:Cc; bh=eNbdeLp419aVuOpWLR4uKlHuHRwZLk9qmQYwCRpVcKE=; b=LeESVFLZOmSxV+vPBK1RbHw5iJUdhNWBAcOovjTN2tePMKGVNwx6MfmmQNoIH5icUvFwEHNfQ8Iv3KDXWBwIxXnJAv+dK8tMuhzTQwe0PVkkizIbbzg8Y08FFslMwd6RWc1yoBBXyvEvZg60BB05oF5lmTPgC1k1Fmhyx/He3Vs= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1751547169289524.9615145830436; Thu, 3 Jul 2025 05:52:49 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 34F4212AC; Thu, 3 Jul 2025 08:52:48 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 31A781398; Thu, 3 Jul 2025 08:50:58 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 08209CD0; Thu, 3 Jul 2025 08:50:53 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id C40F21238 for ; Thu, 3 Jul 2025 08:50:43 -0400 (EDT) Received: from mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-692-Zz8Yg7CVNguuH95ehbIYWQ-1; Thu, 03 Jul 2025 08:50:42 -0400 Received: from mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.17]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 6991D18DA380 for ; Thu, 3 Jul 2025 12:50:41 +0000 (UTC) Received: from speedmetal.redhat.com (unknown [10.45.242.5]) by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 9EBA6195608F for ; Thu, 3 Jul 2025 12:50:40 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: ** X-Spam-Status: No, score=2.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H5, RCVD_IN_MSPIKE_WL,RCVD_IN_SBL_CSS,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_NONE autolearn=no autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1751547043; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=+DnNKuXhBI+GQJ2Qw9XpKWSZ9kPihermU5p+YkkOjlc=; b=b99knwKdsYOr+lki+Xs6/qOetS1R30QZjJCCQwqbpR/0c8s6gvk+P9MIfZjyPJu3iIbXAy kcUu9t+mAXuKtKAH2BIj37mFCAimJoAjQf65CaFyDpg2VoGqxzXakaiED0P6RYtCLdUugN uQSceXIEk8zKULIECf1u8ZEr7uqA3DU= X-MC-Unique: Zz8Yg7CVNguuH95ehbIYWQ-1 X-Mimecast-MFC-AGG-ID: Zz8Yg7CVNguuH95ehbIYWQ_1751547041 To: devel@lists.libvirt.org Subject: [PATCH 04/10] hypervisor: domain: Extract logic for auto shutdown to virDomainDriverAutoShutdownActive Date: Thu, 3 Jul 2025 14:50:27 +0200 Message-ID: <11355abddee1ed9ea971cbfcdf4443b8a3f018ba.1751546915.git.pkrempa@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.17 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: pNU87ey-J3CE8rqvLnCcPXB6-11gmEbnQhtbelZrB84_1751547041 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: 5UPZWCWWCIO5X7FSK6HC3EMLD4MUILZH X-Message-ID-Hash: 5UPZWCWWCIO5X7FSK6HC3EMLD4MUILZH X-MailFrom: pkrempa@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Peter Krempa via Devel Reply-To: Peter Krempa X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1751547170742116600 Content-Type: text/plain; charset="utf-8" From: Peter Krempa Extract the checker that determines whether the daemon auto shutdown functionality is active to a separate helper 'virDomainDriverAutoShutdownActive'. Signed-off-by: Peter Krempa Reviewed-by: Pavel Hrdina --- src/hypervisor/domain_driver.c | 13 ++++++++++--- src/hypervisor/domain_driver.h | 1 + src/libvirt_private.syms | 1 + 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/hypervisor/domain_driver.c b/src/hypervisor/domain_driver.c index 62bbe176ae..353b8875ec 100644 --- a/src/hypervisor/domain_driver.c +++ b/src/hypervisor/domain_driver.c @@ -729,6 +729,15 @@ virDomainDriverAutoStart(virDomainObjList *domains, } +bool +virDomainDriverAutoShutdownActive(virDomainDriverAutoShutdownConfig *cfg) +{ + return cfg->trySave !=3D VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_SCOPE_NONE || + cfg->tryShutdown !=3D VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_SCOPE_NONE || + cfg->poweroff !=3D VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_SCOPE_NONE; +} + + void virDomainDriverAutoShutdown(virDomainDriverAutoShutdownConfig *cfg) { @@ -773,9 +782,7 @@ virDomainDriverAutoShutdown(virDomainDriverAutoShutdown= Config *cfg) } /* Short-circuit if all actions are disabled */ - if (cfg->trySave =3D=3D VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_SCOPE_NONE && - cfg->tryShutdown =3D=3D VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_SCOPE_NONE= && - cfg->poweroff =3D=3D VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_SCOPE_NONE) + if (!virDomainDriverAutoShutdownActive(cfg)) return; if (!(conn =3D virConnectOpen(cfg->uri))) diff --git a/src/hypervisor/domain_driver.h b/src/hypervisor/domain_driver.h index d90466b942..af1c4eaed6 100644 --- a/src/hypervisor/domain_driver.h +++ b/src/hypervisor/domain_driver.h @@ -116,4 +116,5 @@ typedef struct _virDomainDriverAutoShutdownConfig { bool autoRestore; } virDomainDriverAutoShutdownConfig; +bool virDomainDriverAutoShutdownActive(virDomainDriverAutoShutdownConfig *= cfg); void virDomainDriverAutoShutdown(virDomainDriverAutoShutdownConfig *cfg); diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 8f1489ecc8..1b9be478e4 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1658,6 +1658,7 @@ virDomainCgroupSetupVcpuBW; # hypervisor/domain_driver.h virDomainDriverAddIOThreadCheck; virDomainDriverAutoShutdown; +virDomainDriverAutoShutdownActive; virDomainDriverAutoShutdownScopeTypeFromString; virDomainDriverAutoShutdownScopeTypeToString; virDomainDriverAutoStart; --=20 2.49.0 From nobody Sun Dec 14 02:17:06 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1751547197; cv=none; d=zohomail.com; s=zohoarc; b=Hdx2UQRok059LQo7KTk6jnSONEkDYBVvzYqeu5D2u+9N1X1Qxz1IPxjqKkqH1y2km58WyEBIabwLkflLZ2G/LrI63tb1KcOasurP8uqnA2CXmdmip9ShJIyEhsS9GjpRvBb8AGHNYNWbX6faG+bUJZZRJ4/7qm7CHfHt8ebAs2w= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751547197; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id:Cc; bh=+KvD0DePf0D6pFkl5mLm/d9pibNfU4jrYCNg06uuOfc=; b=aToo3lfi7vgTYXQP2S9Z0XoftDeHA3xQsJ1WZ4p9hi5J/r/j+qtpTXHVQp8ebXPjW/feBVX0Cqhw7DgBeXBcXWg8mi7Apkm9QdoN+EryIuLaP+yUzOZ9tFzm9h9gznr+/DZgDDvYVT8FEjVoxPC3Uyjo1XQ9MbJBxTPi8jkizfg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1751547197271219.33535849788996; Thu, 3 Jul 2025 05:53:17 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 3644912AC; Thu, 3 Jul 2025 08:53:16 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 37BF31358; Thu, 3 Jul 2025 08:51:01 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 165391279; Thu, 3 Jul 2025 08:50:55 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 3325212C7 for ; Thu, 3 Jul 2025 08:50:45 -0400 (EDT) Received: from mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-28-PRU8xw1qNwCQQB37svCb_A-1; Thu, 03 Jul 2025 08:50:43 -0400 Received: from mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.17]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id A3D7218DA5C7 for ; Thu, 3 Jul 2025 12:50:42 +0000 (UTC) Received: from speedmetal.redhat.com (unknown [10.45.242.5]) by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id DC514195608F for ; Thu, 3 Jul 2025 12:50:41 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: ** X-Spam-Status: No, score=2.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H5, RCVD_IN_MSPIKE_WL,RCVD_IN_SBL_CSS,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_NONE autolearn=no autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1751547044; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=cYe7PdRdt+ahv3Ql4nykgGTczjf2w7ZcUGnI0NSEeGc=; b=OAvqXpKEdCjlH854z0K73r6qP/KilWJFNo8moXRjzKOJu8rphqHmdiU8ZLKag4zLtspr/6 dj3XVOIOe0AXhb8pj15vUXCjmOUWm8lJloJcSDJsyeQGPIfrVMWO8jrUNqGtJkOAKxqqBd GLW7LmmIGmbbWcKgQTvWLmhq10/azFs= X-MC-Unique: PRU8xw1qNwCQQB37svCb_A-1 X-Mimecast-MFC-AGG-ID: PRU8xw1qNwCQQB37svCb_A_1751547042 To: devel@lists.libvirt.org Subject: [PATCH 05/10] virSystemdCreateMachine: Add flag to invert machined unit dependencies Date: Thu, 3 Jul 2025 14:50:28 +0200 Message-ID: In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.17 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: LoJ-68Jamt1q7OgPagiBdGz3qZPjwQjjeVIbF6_Qqs8_1751547042 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: EQU6IOAHWDHXA5RBEGPFBTOBPI6G7F7K X-Message-ID-Hash: EQU6IOAHWDHXA5RBEGPFBTOBPI6G7F7K X-MailFrom: pkrempa@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Peter Krempa via Devel Reply-To: Peter Krempa X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1751547199061116600 Content-Type: text/plain; charset="utf-8" From: Peter Krempa The existing dependency order of the 'machined' unit file for the domain we're starting ("After libvirtd/virtqemud"->thus shuts down *before* the daemon) is intended to work with 'libvirt-guests.service' which requires the daemon to be around to shut down the VMs. If we want to use the integrated auto shutdown done by the daemon itself we need to be able to instruct the domains (thus the corresponding machined units to shut down *after* virtqemud/libvirt. This means that we need to be able to invert the ordering relationship to "Before". This patch adds a parameter to virSystemdCreateMachine so that when starting the VM we'll be able to tell the daemon to use the proper relationship. Signed-off-by: Peter Krempa Reviewed-by: Pavel Hrdina --- src/util/vircgroup.c | 3 ++- src/util/virsystemd.c | 27 +++++++++++++++++++++------ src/util/virsystemd.h | 3 ++- tests/virsystemdtest.c | 15 +++++++++------ 4 files changed, 34 insertions(+), 14 deletions(-) diff --git a/src/util/vircgroup.c b/src/util/vircgroup.c index 1daa95e178..fc5dca4858 100644 --- a/src/util/vircgroup.c +++ b/src/util/vircgroup.c @@ -1293,7 +1293,8 @@ virCgroupNewMachineSystemd(const char *name, nnicindexes, nicindexes, partition, - maxthreads)) < 0) + maxthreads, + false)) < 0) return rv; if (controllers !=3D -1) diff --git a/src/util/virsystemd.c b/src/util/virsystemd.c index 4f8424ae32..bd174c683e 100644 --- a/src/util/virsystemd.c +++ b/src/util/virsystemd.c @@ -358,6 +358,8 @@ virSystemdGetMachineUnitByPID(pid_t pid) * @nicindexes: list of network interface indexes * @partition: name of the slice to place the machine in * @maxthreads: maximum number of threads the VM process can use + * @daemonDomainShutdown: shutdown of domains on host shutdown is done by = the + * daemon instead of the libvirt-guests script * * Returns 0 on success, -1 on fatal error, or -2 if systemd-machine is no= t available */ @@ -370,7 +372,8 @@ int virSystemdCreateMachine(const char *name, size_t nnicindexes, int *nicindexes, const char *partition, - unsigned int maxthreads) + unsigned int maxthreads, + bool daemonDomainShutdown) { int rc; GDBusConnection *conn; @@ -462,11 +465,23 @@ int virSystemdCreateMachine(const char *name, uuid, 16, sizeof(unsigned char)); gnicindexes =3D g_variant_new_fixed_array(G_VARIANT_TYPE("i"), nicindexes, nnicindexes, s= izeof(int)); - gprops =3D g_variant_new_parsed("[('Slice', <%s>)," - " ('After', <['libvirtd.service', %s= ]>)," - " ('Before', <['virt-guest-shutdown.= target']>)]", - slicename, - servicename); + + if (daemonDomainShutdown) { + /* When domains are shut down by the daemon rather than the + * "libvirt-guests" script we need ensure that their unit + * is ordered so that it's shutdown after the libvirt daemon i= tself */ + gprops =3D g_variant_new_parsed("[('Slice', <%s>)," + " ('Before', <['libvirtd.service= ', %s]>)]", + slicename, + servicename); + } else { + gprops =3D g_variant_new_parsed("[('Slice', <%s>)," + " ('After', <['libvirtd.service'= , %s]>)," + " ('Before', <['virt-guest-shutd= own.target']>)]", + slicename, + servicename); + } + message =3D g_variant_new("(s@ayssus@ai@a(sv))", name, guuid, diff --git a/src/util/virsystemd.h b/src/util/virsystemd.h index 98460dbc3a..620d9a9645 100644 --- a/src/util/virsystemd.h +++ b/src/util/virsystemd.h @@ -40,7 +40,8 @@ int virSystemdCreateMachine(const char *name, size_t nnicindexes, int *nicindexes, const char *partition, - unsigned int maxthreads); + unsigned int maxthreads, + bool daemonDomainShutdown); int virSystemdTerminateMachine(const char *name); diff --git a/tests/virsystemdtest.c b/tests/virsystemdtest.c index 004b0549ce..24c118a409 100644 --- a/tests/virsystemdtest.c +++ b/tests/virsystemdtest.c @@ -170,7 +170,8 @@ static int testCreateContainer(const void *opaque G_GNU= C_UNUSED) 123, true, 0, NULL, - "highpriority.slice", 0) < 0) { + "highpriority.slice", 0, + false) < 0) { fprintf(stderr, "%s", "Failed to create LXC machine\n"); return -1; } @@ -203,7 +204,9 @@ static int testCreateMachine(const void *opaque G_GNUC_= UNUSED) 123, false, 0, NULL, - NULL, 0) < 0) { + NULL, + 0, + true) < 0) { fprintf(stderr, "%s", "Failed to create KVM machine\n"); return -1; } @@ -240,7 +243,7 @@ static int testCreateNoSystemd(const void *opaque G_GNU= C_UNUSED) 123, false, 0, NULL, - NULL, 0)) =3D=3D 0) { + NULL, 0, false)) =3D=3D 0) { g_unsetenv("FAIL_NO_SERVICE"); fprintf(stderr, "%s", "Unexpected create machine success\n"); return -1; @@ -274,7 +277,7 @@ static int testCreateSystemdNotRunning(const void *opaq= ue G_GNUC_UNUSED) 123, false, 0, NULL, - NULL, 0)) =3D=3D 0) { + NULL, 0, false)) =3D=3D 0) { g_unsetenv("FAIL_NOT_REGISTERED"); fprintf(stderr, "%s", "Unexpected create machine success\n"); return -1; @@ -308,7 +311,7 @@ static int testCreateBadSystemd(const void *opaque G_GN= UC_UNUSED) 123, false, 0, NULL, - NULL, 0)) =3D=3D 0) { + NULL, 0, false)) =3D=3D 0) { g_unsetenv("FAIL_BAD_SERVICE"); fprintf(stderr, "%s", "Unexpected create machine success\n"); return -1; @@ -343,7 +346,7 @@ static int testCreateNetwork(const void *opaque G_GNUC_= UNUSED) 123, true, nnicindexes, nicindexes, - "highpriority.slice", 2) < 0) { + "highpriority.slice", 2, false) < 0) { fprintf(stderr, "%s", "Failed to create LXC machine\n"); return -1; } --=20 2.49.0 From nobody Sun Dec 14 02:17:06 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1751547223; cv=none; d=zohomail.com; s=zohoarc; b=aQulwMyyaw3eoGRv7CZ9VVlQzLJmHqcsxdYHi85AUvVOsGrFrnbVYehp8UhTa9W8oOUAxF2Aoso/65ns/bJoyYYxTKgmMNkj8HRRUQYgQjGh28XnaSVhCc3E5Dr/9UrVVSeQTzr4I+SrNNc9r+dmmfNQNyRTvgisk6WNKrfuOqQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751547223; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id:Cc; bh=csa8gABoLkDAjKnQ9o60iGwypsmVM6rLsUBL3W04K9w=; b=Sn8WwE3NIwQky/AcBvA+f0YX6fcAynVI05A/jIFr4jlWXsat09+7YQRcD6/ikjXyrg3um3Y78BaXsTpEN8mEAYI+Bbf+KtnyIgWnWbtRiZxGgjYmvzA8BLGVRYxoOuzjFGeHKJdz859pJHA4rcj/It4gltScYKc6pCsGxltjRSw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1751547223660317.08430522453443; Thu, 3 Jul 2025 05:53:43 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id AB22810F4; Thu, 3 Jul 2025 08:53:42 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id A5BF01266; Thu, 3 Jul 2025 08:51:04 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id A8E63136D; Thu, 3 Jul 2025 08:51:00 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 2A50712B1 for ; Thu, 3 Jul 2025 08:50:46 -0400 (EDT) Received: from mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-136-X7RrgGxHMFGatgoPcwe3Vg-1; Thu, 03 Jul 2025 08:50:44 -0400 Received: from mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.17]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id DFD2918002E4 for ; Thu, 3 Jul 2025 12:50:43 +0000 (UTC) Received: from speedmetal.redhat.com (unknown [10.45.242.5]) by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 25D4D195608F for ; Thu, 3 Jul 2025 12:50:42 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H5, RCVD_IN_MSPIKE_WL,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1751547045; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=e1Ll98KQw4qeWzikfj3CpdDbE1KcE4iDzgFbDjRhj48=; b=CT75ATJ4030Z69wVzXzffvp5Fqajy36TsnoCd2WIOtnc81glQ9RHH+vDsABVsnJS9mlLHA jZpG7zS6jqDYU30RCqrpc/tVciDoV5WkDjUMOuJXr9MQgAb2ed5Tx0JmXhDLKjN1M/I2I+ y+d5qGIjLWGWL1YL8A1eoCLC6/CazHA= X-MC-Unique: X7RrgGxHMFGatgoPcwe3Vg-1 X-Mimecast-MFC-AGG-ID: X7RrgGxHMFGatgoPcwe3Vg_1751547044 To: devel@lists.libvirt.org Subject: [PATCH 06/10] cgroup: Plumb the 'daemonDomainShutdown' parameter of 'virSystemdCreateMachine' to drivers Date: Thu, 3 Jul 2025 14:50:29 +0200 Message-ID: In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.17 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: uNpdNgOwoYwnIj-_tc4Wf_AX7nP6EsUoA3VzybzvYcE_1751547044 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: 3XGQXZZP2FAD2RR72ODSWG4CM3NWZL47 X-Message-ID-Hash: 3XGQXZZP2FAD2RR72ODSWG4CM3NWZL47 X-MailFrom: pkrempa@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Peter Krempa via Devel Reply-To: Peter Krempa X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1751547225425116600 Content-Type: text/plain; charset="utf-8" From: Peter Krempa Plumb the new argument across the cgroup helpers up to the domain driver code. Signed-off-by: Peter Krempa Reviewed-by: Pavel Hrdina --- src/ch/ch_process.c | 2 ++ src/hypervisor/domain_cgroup.c | 4 ++++ src/hypervisor/domain_cgroup.h | 1 + src/lxc/lxc_cgroup.c | 1 + src/qemu/qemu_cgroup.c | 1 + src/util/vircgroup.c | 6 +++++- src/util/vircgroup.h | 1 + 7 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/ch/ch_process.c b/src/ch/ch_process.c index 95c808cb41..cc84823fdc 100644 --- a/src/ch/ch_process.c +++ b/src/ch/ch_process.c @@ -973,6 +973,7 @@ virCHProcessStart(virCHDriver *driver, cfg->cgroupControllers, 0, /*maxThreadsPerProc*/ priv->driver->privileged, + false, priv->machineName) < 0) goto cleanup; @@ -1147,6 +1148,7 @@ virCHProcessStartRestore(virCHDriver *driver, virDoma= inObj *vm, const char *from cfg->cgroupControllers, 0, /*maxThreadsPerProc*/ priv->driver->privileged, + false, priv->machineName) < 0) goto cleanup; diff --git a/src/hypervisor/domain_cgroup.c b/src/hypervisor/domain_cgroup.c index fecc0f7966..8787165f48 100644 --- a/src/hypervisor/domain_cgroup.c +++ b/src/hypervisor/domain_cgroup.c @@ -351,6 +351,7 @@ virDomainCgroupInitCgroup(const char *prefix, int cgroupControllers, unsigned int maxThreadsPerProc, bool privileged, + bool daemonDomainShutdown, char *machineName) { if (!privileged) @@ -384,6 +385,7 @@ virDomainCgroupInitCgroup(const char *prefix, vm->def->resource->partition, cgroupControllers, maxThreadsPerProc, + daemonDomainShutdown, cgroup) < 0) { if (virCgroupNewIgnoreError()) return 0; @@ -513,6 +515,7 @@ virDomainCgroupSetupCgroup(const char *prefix, int cgroupControllers, unsigned int maxThreadsPerProc, bool privileged, + bool daemonDomainShutdown, char *machineName) { if (vm->pid =3D=3D 0) { @@ -529,6 +532,7 @@ virDomainCgroupSetupCgroup(const char *prefix, cgroupControllers, maxThreadsPerProc, privileged, + daemonDomainShutdown, machineName) < 0) return -1; diff --git a/src/hypervisor/domain_cgroup.h b/src/hypervisor/domain_cgroup.h index 6e5c98004e..7769572a2c 100644 --- a/src/hypervisor/domain_cgroup.h +++ b/src/hypervisor/domain_cgroup.h @@ -71,6 +71,7 @@ virDomainCgroupSetupCgroup(const char *prefix, int cgroupControllers, unsigned int maxThreadsPerProc, bool privileged, + bool daemonDomainShutdown, char *machineName); void virDomainCgroupEmulatorAllNodesDataFree(virCgroupEmulatorAllNodesData *dat= a); diff --git a/src/lxc/lxc_cgroup.c b/src/lxc/lxc_cgroup.c index 7c889667ba..f566a5468e 100644 --- a/src/lxc/lxc_cgroup.c +++ b/src/lxc/lxc_cgroup.c @@ -400,6 +400,7 @@ virCgroup *virLXCCgroupCreate(virDomainDef *def, def->resource->partition, -1, 0, + false, &cgroup) < 0) return NULL; diff --git a/src/qemu/qemu_cgroup.c b/src/qemu/qemu_cgroup.c index 48af467bf9..04d6370011 100644 --- a/src/qemu/qemu_cgroup.c +++ b/src/qemu/qemu_cgroup.c @@ -919,6 +919,7 @@ qemuSetupCgroup(virDomainObj *vm, cfg->cgroupControllers, cfg->maxThreadsPerProc, priv->driver->privileged, + false, priv->machineName) < 0) return -1; diff --git a/src/util/vircgroup.c b/src/util/vircgroup.c index fc5dca4858..532a7e5690 100644 --- a/src/util/vircgroup.c +++ b/src/util/vircgroup.c @@ -1274,6 +1274,7 @@ virCgroupNewMachineSystemd(const char *name, const char *partition, int controllers, unsigned int maxthreads, + bool daemonDomainShutdown, virCgroup **group) { int rv; @@ -1294,7 +1295,7 @@ virCgroupNewMachineSystemd(const char *name, nicindexes, partition, maxthreads, - false)) < 0) + daemonDomainShutdown)) < 0) return rv; if (controllers !=3D -1) @@ -1407,6 +1408,7 @@ virCgroupNewMachine(const char *name, const char *partition, int controllers, unsigned int maxthreads, + bool daemonDomainShutdown, virCgroup **group) { int rv; @@ -1424,6 +1426,7 @@ virCgroupNewMachine(const char *name, partition, controllers, maxthreads, + daemonDomainShutdown, group)) =3D=3D 0) return 0; @@ -3144,6 +3147,7 @@ virCgroupNewMachine(const char *name G_GNUC_UNUSED, const char *partition G_GNUC_UNUSED, int controllers G_GNUC_UNUSED, unsigned int maxthreads G_GNUC_UNUSED, + bool daemonDomainShutdown G_GNUC_UNUSED, virCgroup **group G_GNUC_UNUSED) { virReportSystemError(ENXIO, "%s", diff --git a/src/util/vircgroup.h b/src/util/vircgroup.h index adf3850b22..2a7aa3306c 100644 --- a/src/util/vircgroup.h +++ b/src/util/vircgroup.h @@ -101,6 +101,7 @@ int virCgroupNewMachine(const char *name, const char *partition, int controllers, unsigned int maxthreads, + bool daemonDomainShutdown, virCgroup **group) ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3); --=20 2.49.0 From nobody Sun Dec 14 02:17:06 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1751547246; cv=none; d=zohomail.com; s=zohoarc; b=b5g3tzrRRzQJ9JTj99U3TOMlRpwF8AdE+0UwtZ+stbBskg0Z5xD/mIDdnXStm6mpZ8Wi5ipTQRs5QdDAVevHXeGl+/gFlql8cjZq7epH4ZtrmG8zE3oC5QLzX3Jp8b8JT5yEkXKljI4UvMRvnQ2iyyZvzfSK1PCYBkHcdipduXI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751547246; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id:Cc; bh=a1af8Nu/ynFi8wKOnasn9q0cbgPqLCy1mSTv2hQMCgs=; b=fYhIAliox7QYywFlbMcS6cgEjRcEArMcwt6ZLgPoLHa1g/sqokWSwxXA1j7KvmDkz8ua/WgGYxGFWe7pW02gz4gDlGjen9Xd9gsAh9TYQCs1otN/DnYy6Pt/2NY9H6S3PmWIhqmmiD3O3JQbkoES4lv8hOB6EwiAmtVUPrR/s5g= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 175154724689649.557806220674934; Thu, 3 Jul 2025 05:54:06 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id D91A6973; Thu, 3 Jul 2025 08:54:05 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id DCF08130D; Thu, 3 Jul 2025 08:51:04 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 30F0D1268; Thu, 3 Jul 2025 08:51:01 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 773D212C9 for ; Thu, 3 Jul 2025 08:50:47 -0400 (EDT) Received: from mx-prod-mc-04.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-637-qHYaXS6eNIKFzmryLPRi2w-1; Thu, 03 Jul 2025 08:50:45 -0400 Received: from mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.17]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-04.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 24F241979057 for ; Thu, 3 Jul 2025 12:50:45 +0000 (UTC) Received: from speedmetal.redhat.com (unknown [10.45.242.5]) by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 5EAA4195608F for ; Thu, 3 Jul 2025 12:50:44 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: ** X-Spam-Status: No, score=2.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H5, RCVD_IN_MSPIKE_WL,RCVD_IN_SBL_CSS,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_NONE autolearn=no autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1751547047; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=7WF+019XT5VibaUPnIS+kw9OaEF5qFkTamTMirF4cD8=; b=arCW0dFRx1LEg+cbT5Qm828W628Trs8h4IFJaITmgtBm7jlzhYntd3/jvK1Qu3snxk4G/h RR0LW1o9FFsYhFXN4fCyGrlHOM2P6gvpkbetbgOQbYqrSo1C8zXsWjU3LoCQPG3Y42Ut3Q 6/1bhAAFgwAcykuaqLzffOEv+CP2hJc= X-MC-Unique: qHYaXS6eNIKFzmryLPRi2w-1 X-Mimecast-MFC-AGG-ID: qHYaXS6eNIKFzmryLPRi2w_1751547045 To: devel@lists.libvirt.org Subject: [PATCH 07/10] qemu: Fix auto-shutdown of qemu VMs by the qemu driver Date: Thu, 3 Jul 2025 14:50:30 +0200 Message-ID: <8e2f59d9d78f5cae2a98f8b179ee1e29accd760d.1751546915.git.pkrempa@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.17 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: BQg7HQ5_0mE7Lg1onhoL-E_QxaIqHCh_aSOQo7tqNzo_1751547045 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: X34AGBABJHQHR3KBF7LD3BBHMGCT7ZXC X-Message-ID-Hash: X34AGBABJHQHR3KBF7LD3BBHMGCT7ZXC X-MailFrom: pkrempa@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Peter Krempa via Devel Reply-To: Peter Krempa X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1751547247473116600 Content-Type: text/plain; charset="utf-8" From: Peter Krempa When auto-shutdown via the qemu driver is requested (rather than via libvirt guests) we need to start the VMs in a way that they will be kept around for libvirt to terminate them. This involves inverting the dependancy relationship for the machined unit file. Since the setup is done at startup of the VM, add a disclaimer to qemu.conf that switching between the two modes with VMs running will not work properly. Signed-off-by: Peter Krempa Reviewed-by: Pavel Hrdina --- src/qemu/qemu.conf.in | 15 ++++++++++++++- src/qemu/qemu_cgroup.c | 8 +++++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/qemu/qemu.conf.in b/src/qemu/qemu.conf.in index 221bfa8095..6358a45ae2 100644 --- a/src/qemu/qemu.conf.in +++ b/src/qemu/qemu.conf.in @@ -663,7 +663,10 @@ # implemented for transient VMs. # # If 'libvirt-guests.service' is enabled, then this must be -# set to 'none' for system daemons to avoid dueling actions +# set to 'none' for system daemons to avoid dueling actions. +# Warning: Switching between 'libvirt-guests.service' and this option +# causes VMs running at that point to misbehave on host shutdown unless +# they are restarted, or saved and restored. #auto_shutdown_try_save =3D "persistent" # As above, but with a graceful shutdown action instead of @@ -675,6 +678,9 @@ # # If 'libvirt-guests.service' is enabled, then this must be # set to 'none' for system daemons to avoid dueling actions +# Warning: Switching between 'libvirt-guests.service' and this option +# causes VMs running at that point to misbehave on host shutdown unless +# they are restarted, or saved and restored. #auto_shutdown_try_shutdown =3D "all" # As above, but with a forced poweroff instead of managed @@ -687,6 +693,13 @@ # # If 'libvirt-guests.service' is enabled, then this must be # set to 'none' for system daemons to avoid dueling actions +# +# Warning: Switching between 'libvirt-guests.service' and this option +# causes VMs running at that point to misbehave on host shutdown unless +# they are restarted, or saved and restored. +# +# When using any 'auto_shutdown_try_save', 'auto_shutdown_try_shutdown' th= is +# feature should to be enabled as well to ensure proper cleanup of the VMs. #auto_shutdown_poweroff =3D "all" # How may seconds to wait for running VMs to gracefully shutdown diff --git a/src/qemu/qemu_cgroup.c b/src/qemu/qemu_cgroup.c index 04d6370011..25e42ebfc6 100644 --- a/src/qemu/qemu_cgroup.c +++ b/src/qemu/qemu_cgroup.c @@ -910,6 +910,12 @@ qemuSetupCgroup(virDomainObj *vm, { qemuDomainObjPrivate *priv =3D vm->privateData; g_autoptr(virQEMUDriverConfig) cfg =3D virQEMUDriverGetConfig(priv->dr= iver); + /* When users wants to auto-shutdown the VMs via the qemu daemon itself + * we need to instruct machined to create dependencies for the units + * in such way that the VMs will not be killed before the auto shutdown + * code is reached. + */ + bool daemonAutoShutdown =3D virDomainDriverAutoShutdownActive(&cfg->au= toShutdown); if (virDomainCgroupSetupCgroup("qemu", vm, @@ -919,7 +925,7 @@ qemuSetupCgroup(virDomainObj *vm, cfg->cgroupControllers, cfg->maxThreadsPerProc, priv->driver->privileged, - false, + daemonAutoShutdown, priv->machineName) < 0) return -1; --=20 2.49.0 From nobody Sun Dec 14 02:17:06 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1751547279; cv=none; d=zohomail.com; s=zohoarc; b=Y5s7fIq0UvZ0LjRew/VizrIyaTOZIJxK4w2+ZSYzXc4EULmchCyxaGHV9EmeXE9gXZycUGkpdR6SmK9fVs1mrRyyLJTvORwW+7aPj6ql6H3IjgCGRYgzdWsIBn8JlJXP93pCJjvRYO/C2zPiTMZt5bmMh9XoZH2oP+uGSM0PNWg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751547279; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id:Cc; bh=ntRYiGFVJ5mhP+HvYzVCRoQ3YN4smqb6oARdqTXms4s=; b=eSw+PPjujrKgxP75zb9FWzYMZEmIEftRvJRsLMkzYJakal5+3HhwTJLJZMrsbS6b/u8BUN8z1Ds5MNEfiqmaYO0hgskbTJjtoQM789240O0vl7NXlmCBMBqCExBsdLcxzTOR6wUtbukLwgIcbJavURh0Inhp9x91k5Zpe7TjODU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1751547279909317.1924925725324; Thu, 3 Jul 2025 05:54:39 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id C36CF11DF; Thu, 3 Jul 2025 08:54:38 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 4C180128E; Thu, 3 Jul 2025 08:51:06 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id E391E125D; Thu, 3 Jul 2025 08:51:02 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id B048A11B7 for ; Thu, 3 Jul 2025 08:50:48 -0400 (EDT) Received: from mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-439-b9j3oRXeNzu3ORuCpBptXQ-1; Thu, 03 Jul 2025 08:50:47 -0400 Received: from mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.17]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 61FD81808993 for ; Thu, 3 Jul 2025 12:50:46 +0000 (UTC) Received: from speedmetal.redhat.com (unknown [10.45.242.5]) by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 9BFC1195608F for ; Thu, 3 Jul 2025 12:50:45 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H5, RCVD_IN_MSPIKE_WL,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1751547048; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=tMao4iUHSAlbtJF9AkWLdVWPBz8cfMV6B5RgGrFOuR0=; b=ExUZl4xF49dbCd4iT2X1Wo8F5GCd3+vb19flHnQSVUcS+P6fImGHYtKCUPbY8FwZ9Npc3E 1KuQmshVayPCHVCETGkemmaexuZtPd+o5QcoJaL3XUQUKOUtoec6m+Tex3blYecvuzxtg7 m/R60I/U//ahQ/NFScWIqbv0wIgevTw= X-MC-Unique: b9j3oRXeNzu3ORuCpBptXQ-1 X-Mimecast-MFC-AGG-ID: b9j3oRXeNzu3ORuCpBptXQ_1751547046 To: devel@lists.libvirt.org Subject: [PATCH 08/10] hypervisor: Split out individual steps out of virDomainDriverAutoShutdown Date: Thu, 3 Jul 2025 14:50:31 +0200 Message-ID: <798789ba2dfbdc8d90e3d8269a25f68d64b58ed0.1751546915.git.pkrempa@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.17 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: rAle92UYoHGJtmmeAAFzJ2QlWABU0BU2a4vpT5B6wo0_1751547046 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: JGUO5RRDGO472USIUBVLRIMMBXPSGUMM X-Message-ID-Hash: JGUO5RRDGO472USIUBVLRIMMBXPSGUMM X-MailFrom: pkrempa@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Peter Krempa via Devel Reply-To: Peter Krempa X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1751547282081116600 Content-Type: text/plain; charset="utf-8" From: Peter Krempa 'virDomainDriverAutoShutdown' grew into an unwieldy function. Extract the code for each of the save/shutdown/poweroff steps into helpers and call them. Signed-off-by: Peter Krempa Reviewed-by: Pavel Hrdina --- src/hypervisor/domain_driver.c | 285 +++++++++++++++++++-------------- 1 file changed, 161 insertions(+), 124 deletions(-) diff --git a/src/hypervisor/domain_driver.c b/src/hypervisor/domain_driver.c index 353b8875ec..cce6c64d1b 100644 --- a/src/hypervisor/domain_driver.c +++ b/src/hypervisor/domain_driver.c @@ -738,6 +738,164 @@ virDomainDriverAutoShutdownActive(virDomainDriverAuto= ShutdownConfig *cfg) } +static void +virDomainDriverAutoShutdownDoSave(virDomainPtr *domains, + bool *transient, + size_t numDomains, + virDomainDriverAutoShutdownConfig *cfg) +{ + g_autofree unsigned int *flags =3D g_new0(unsigned int, numDomains); + size_t i; + + if (cfg->trySave =3D=3D VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_SCOPE_NONE) + return; + + for (i =3D 0; i < numDomains; i++) { + int state; + + if ((transient[i] && cfg->trySave =3D=3D VIR_DOMAIN_DRIVER_AUTO_SH= UTDOWN_SCOPE_PERSISTENT) || + (!transient[i] && cfg->trySave =3D=3D VIR_DOMAIN_DRIVER_AUTO_S= HUTDOWN_SCOPE_TRANSIENT)) + continue; + + virSystemdNotifyStatus("Suspending '%s' (%zu of %zu)", + virDomainGetName(domains[i]), i + 1, numDom= ains); + VIR_INFO("Suspending '%s'", virDomainGetName(domains[i])); + + /* + * Pause all VMs to make them stop dirtying pages, + * so save is quicker. We remember if any VMs were + * paused so we can restore that on resume. + */ + flags[i] =3D VIR_DOMAIN_SAVE_RUNNING; + if (virDomainGetState(domains[i], &state, NULL, 0) =3D=3D 0) { + if (state =3D=3D VIR_DOMAIN_PAUSED) + flags[i] =3D VIR_DOMAIN_SAVE_PAUSED; + } + if (cfg->saveBypassCache) + flags[i] |=3D VIR_DOMAIN_SAVE_BYPASS_CACHE; + + if (flags[i] & VIR_DOMAIN_SAVE_RUNNING) + virDomainSuspend(domains[i]); + } + + for (i =3D 0; i < numDomains; i++) { + virSystemdNotifyStatus("Saving '%s' (%zu of %zu)", + virDomainGetName(domains[i]), i + 1, numDom= ains); + VIR_INFO("Saving '%s'", virDomainGetName(domains[i])); + + if (virDomainManagedSave(domains[i], flags[i]) < 0) { + VIR_WARN("auto-shutdown: unable to perform managed save of '%s= ': %s", + domains[i]->name, + virGetLastErrorMessage()); + if (flags[i] & VIR_DOMAIN_SAVE_RUNNING) + virDomainResume(domains[i]); + continue; + } + virObjectUnref(domains[i]); + domains[i] =3D NULL; + } +} + + +static void +virDomainDriverAutoShutdownDoShutdown(virDomainPtr *domains, + bool *transient, + size_t numDomains, + virDomainDriverAutoShutdownConfig *c= fg) +{ + GTimer *timer =3D NULL; + size_t i; + + if (cfg->tryShutdown =3D=3D VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_SCOPE_NONE) + return; + + for (i =3D 0; i < numDomains; i++) { + if (domains[i] =3D=3D NULL) + continue; + + if ((transient[i] && cfg->tryShutdown =3D=3D VIR_DOMAIN_DRIVER_AUT= O_SHUTDOWN_SCOPE_PERSISTENT) || + (!transient[i] && cfg->tryShutdown =3D=3D VIR_DOMAIN_DRIVER_AU= TO_SHUTDOWN_SCOPE_TRANSIENT)) + continue; + + virSystemdNotifyStatus("Shutting down '%s' (%zu of %zu)", + virDomainGetName(domains[i]), i + 1, numDom= ains); + VIR_INFO("Shutting down '%s'", virDomainGetName(domains[i])); + + if (virDomainShutdown(domains[i]) < 0) { + VIR_WARN("auto-shutdown: unable to request graceful shutdown o= f '%s': %s", + domains[i]->name, + virGetLastErrorMessage()); + break; + } + } + + timer =3D g_timer_new(); + virSystemdNotifyStatus("Waiting %u secs for VM shutdown completion", + cfg->waitShutdownSecs); + VIR_INFO("Waiting %u secs for VM shutdown completion", cfg->waitShutdo= wnSecs); + while (1) { + bool anyRunning =3D false; + for (i =3D 0; i < numDomains; i++) { + if (!domains[i]) + continue; + + if ((transient[i] && cfg->tryShutdown =3D=3D VIR_DOMAIN_DRIVER= _AUTO_SHUTDOWN_SCOPE_PERSISTENT) || + (!transient[i] && cfg->tryShutdown =3D=3D VIR_DOMAIN_DRIVE= R_AUTO_SHUTDOWN_SCOPE_TRANSIENT)) + continue; + + if (virDomainIsActive(domains[i]) =3D=3D 1) { + anyRunning =3D true; + } else { + virObjectUnref(domains[i]); + domains[i] =3D NULL; + } + } + + if (!anyRunning) + break; + if (g_timer_elapsed(timer, NULL) > cfg->waitShutdownSecs) + break; + g_usleep(1000*500); + } + g_timer_destroy(timer); +} + + +static void +virDomainDriverAutoShutdownDoPoweroff(virDomainPtr *domains, + bool *transient, + size_t numDomains, + virDomainDriverAutoShutdownConfig *c= fg) +{ + size_t i; + + if (cfg->poweroff =3D=3D VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_SCOPE_NONE) + return; + + for (i =3D 0; i < numDomains; i++) { + if (domains[i] =3D=3D NULL) + continue; + + if ((transient[i] && cfg->poweroff =3D=3D VIR_DOMAIN_DRIVER_AUTO_S= HUTDOWN_SCOPE_PERSISTENT) || + (!transient[i] && cfg->poweroff =3D=3D VIR_DOMAIN_DRIVER_AUTO_= SHUTDOWN_SCOPE_TRANSIENT)) + continue; + + virSystemdNotifyStatus("Destroying '%s' (%zu of %zu)", + virDomainGetName(domains[i]), i + 1, numDom= ains); + VIR_INFO("Destroying '%s'", virDomainGetName(domains[i])); + /* + * NB might fail if we gave up on waiting for + * virDomainShutdown, but it then completed anyway, + * hence we're not checking for failure + */ + virDomainDestroy(domains[i]); + + virObjectUnref(domains[i]); + domains[i] =3D NULL; + } +} + + void virDomainDriverAutoShutdown(virDomainDriverAutoShutdownConfig *cfg) { @@ -816,130 +974,9 @@ virDomainDriverAutoShutdown(virDomainDriverAutoShutdo= wnConfig *cfg) } } - if (cfg->trySave !=3D VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_SCOPE_NONE) { - g_autofree unsigned int *flags =3D g_new0(unsigned int, numDomains= ); - for (i =3D 0; i < numDomains; i++) { - int state; - - if ((transient[i] && cfg->trySave =3D=3D VIR_DOMAIN_DRIVER_AUT= O_SHUTDOWN_SCOPE_PERSISTENT) || - (!transient[i] && cfg->trySave =3D=3D VIR_DOMAIN_DRIVER_AU= TO_SHUTDOWN_SCOPE_TRANSIENT)) - continue; - - virSystemdNotifyStatus("Suspending '%s' (%zu of %d)", - virDomainGetName(domains[i]), i + 1, nu= mDomains); - VIR_INFO("Suspending '%s'", virDomainGetName(domains[i])); - - /* - * Pause all VMs to make them stop dirtying pages, - * so save is quicker. We remember if any VMs were - * paused so we can restore that on resume. - */ - flags[i] =3D VIR_DOMAIN_SAVE_RUNNING; - if (virDomainGetState(domains[i], &state, NULL, 0) =3D=3D 0) { - if (state =3D=3D VIR_DOMAIN_PAUSED) - flags[i] =3D VIR_DOMAIN_SAVE_PAUSED; - } - if (cfg->saveBypassCache) - flags[i] |=3D VIR_DOMAIN_SAVE_BYPASS_CACHE; - - if (flags[i] & VIR_DOMAIN_SAVE_RUNNING) - virDomainSuspend(domains[i]); - } - - for (i =3D 0; i < numDomains; i++) { - virSystemdNotifyStatus("Saving '%s' (%zu of %d)", - virDomainGetName(domains[i]), i + 1, nu= mDomains); - VIR_INFO("Saving '%s'", virDomainGetName(domains[i])); - - if (virDomainManagedSave(domains[i], flags[i]) < 0) { - VIR_WARN("auto-shutdown: unable to perform managed save of= '%s': %s", - domains[i]->name, - virGetLastErrorMessage()); - if (flags[i] & VIR_DOMAIN_SAVE_RUNNING) - virDomainResume(domains[i]); - continue; - } - virObjectUnref(domains[i]); - domains[i] =3D NULL; - } - } - - if (cfg->tryShutdown !=3D VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_SCOPE_NONE) { - GTimer *timer =3D NULL; - for (i =3D 0; i < numDomains; i++) { - if (domains[i] =3D=3D NULL) - continue; - - if ((transient[i] && cfg->tryShutdown =3D=3D VIR_DOMAIN_DRIVER= _AUTO_SHUTDOWN_SCOPE_PERSISTENT) || - (!transient[i] && cfg->tryShutdown =3D=3D VIR_DOMAIN_DRIVE= R_AUTO_SHUTDOWN_SCOPE_TRANSIENT)) - continue; - - virSystemdNotifyStatus("Shutting down '%s' (%zu of %d)", - virDomainGetName(domains[i]), i + 1, nu= mDomains); - VIR_INFO("Shutting down '%s'", virDomainGetName(domains[i])); - - if (virDomainShutdown(domains[i]) < 0) { - VIR_WARN("auto-shutdown: unable to request graceful shutdo= wn of '%s': %s", - domains[i]->name, - virGetLastErrorMessage()); - break; - } - } - - timer =3D g_timer_new(); - virSystemdNotifyStatus("Waiting %u secs for VM shutdown completion= ", - cfg->waitShutdownSecs); - VIR_INFO("Waiting %u secs for VM shutdown completion", cfg->waitSh= utdownSecs); - while (1) { - bool anyRunning =3D false; - for (i =3D 0; i < numDomains; i++) { - if (!domains[i]) - continue; - - if ((transient[i] && cfg->tryShutdown =3D=3D VIR_DOMAIN_DR= IVER_AUTO_SHUTDOWN_SCOPE_PERSISTENT) || - (!transient[i] && cfg->tryShutdown =3D=3D VIR_DOMAIN_D= RIVER_AUTO_SHUTDOWN_SCOPE_TRANSIENT)) - continue; - - if (virDomainIsActive(domains[i]) =3D=3D 1) { - anyRunning =3D true; - } else { - virObjectUnref(domains[i]); - domains[i] =3D NULL; - } - } - - if (!anyRunning) - break; - if (g_timer_elapsed(timer, NULL) > cfg->waitShutdownSecs) - break; - g_usleep(1000*500); - } - g_timer_destroy(timer); - } - - if (cfg->poweroff !=3D VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_SCOPE_NONE) { - for (i =3D 0; i < numDomains; i++) { - if (domains[i] =3D=3D NULL) - continue; - - if ((transient[i] && cfg->poweroff =3D=3D VIR_DOMAIN_DRIVER_AU= TO_SHUTDOWN_SCOPE_PERSISTENT) || - (!transient[i] && cfg->poweroff =3D=3D VIR_DOMAIN_DRIVER_A= UTO_SHUTDOWN_SCOPE_TRANSIENT)) - continue; - - virSystemdNotifyStatus("Destroying '%s' (%zu of %d)", - virDomainGetName(domains[i]), i + 1, nu= mDomains); - VIR_INFO("Destroying '%s'", virDomainGetName(domains[i])); - /* - * NB might fail if we gave up on waiting for - * virDomainShutdown, but it then completed anyway, - * hence we're not checking for failure - */ - virDomainDestroy(domains[i]); - - virObjectUnref(domains[i]); - domains[i] =3D NULL; - } - } + virDomainDriverAutoShutdownDoSave(domains, transient, numDomains, cfg); + virDomainDriverAutoShutdownDoShutdown(domains, transient, numDomains, = cfg); + virDomainDriverAutoShutdownDoPoweroff(domains, transient, numDomains, = cfg); virSystemdNotifyStatus("Processed %d domains", numDomains); VIR_INFO("Processed %d domains", numDomains); --=20 2.49.0 From nobody Sun Dec 14 02:17:06 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1751547305; cv=none; d=zohomail.com; s=zohoarc; b=HdbJFIYlC5LTarfSszrJE76DBWVyt9uCf5VyS1hxIunxP0cbSv/WKveOVTe7+SZpUZqtBwYNwCzHmL4/rUCcYM4g/fykai3lALzgCosNnMmZlehWOj9EJHK3fU/7/z4fnJWqTq3UU7Y00LM7AWJeIWqqJkWUS7UHQfxCmxacsuc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751547305; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id:Cc; bh=XW/9AVTSVPwGgMKJb4rTc/LKRzs0jo4ssZlTmtvW5a8=; b=J1eZ5Hwl3zimEZIwsTbZGlOjTYBByUEToocg1gB7D6iiHSXzL4Gvvi+70IXpomsq6fEWhAxH+9ls9ThnIa5v8nO+MZMG5ckQh4bQ6bHh7/5JYrqr/ed7Wd6mizWKu07ijc+0TBN+QhujGHHzDJ+tS5WVfrsDR769tJYXTOfZfRc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1751547305246708.9087621664439; Thu, 3 Jul 2025 05:55:05 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 3E0E111F2; Thu, 3 Jul 2025 08:55:04 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id CF4921240; Thu, 3 Jul 2025 08:51:12 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id BF37312A4; Thu, 3 Jul 2025 08:51:07 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 3115DE72 for ; Thu, 3 Jul 2025 08:50:50 -0400 (EDT) Received: from mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-47-ZWK3kGUkOleEHg1HyoOJvw-1; Thu, 03 Jul 2025 08:50:48 -0400 Received: from mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.17]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id A0411180034E for ; Thu, 3 Jul 2025 12:50:47 +0000 (UTC) Received: from speedmetal.redhat.com (unknown [10.45.242.5]) by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id D4CD11956048 for ; Thu, 3 Jul 2025 12:50:46 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H5, RCVD_IN_MSPIKE_WL,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1751547049; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=75AJ2PyK/zrCQLdDJLmiSkQl35Sw1SCmL14LAoHmJuU=; b=ijlc9NX107PcV2ib/V2Y092VX+CDQUh3z4R+sV7bIUFskm+EvH20HZo0KyrDYmlbkGXpHK ZegctanwJMyU/TAxKQnBukXzXLTWFclyw2DS8rNjDZHEtRxJZYo09/ITy6dTbab+PxXysJ I3iXc6Qo9PPTh6dttjzO5EsVdKTseLk= X-MC-Unique: ZWK3kGUkOleEHg1HyoOJvw-1 X-Mimecast-MFC-AGG-ID: ZWK3kGUkOleEHg1HyoOJvw_1751547047 To: devel@lists.libvirt.org Subject: [PATCH 09/10] virDomainDriverAutoShutdownDoSave: Don't attempt to save transient VMs Date: Thu, 3 Jul 2025 14:50:32 +0200 Message-ID: <798352ba725d863968541f9ca185cea7135d4bdc.1751546915.git.pkrempa@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.17 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: KDciPr7gLc9mtgS3CgAudcIKNxU3Jolxjva0-YPpcWY_1751547047 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: KE63KIDEEOL6MC5QWNV7STPTMYVU7PFM X-Message-ID-Hash: KE63KIDEEOL6MC5QWNV7STPTMYVU7PFM X-MailFrom: pkrempa@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Peter Krempa via Devel Reply-To: Peter Krempa X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1751547306174116600 Content-Type: text/plain; charset="utf-8" From: Peter Krempa Commit 84bb136c31e added code that intended to skip the save of transient domains but did so only in the setup part where we pause the VMS. The second loop that actually attempts to save the VM was not modified so we'd still try saving them: Jul 03 14:15:13 andariel virtqemud[247210]: auto-shutdown: unable to perfo= rm managed save of 'cd3': Requested operation is not valid: cannot do manag= ed save for transient domain Fixes: 84bb136c31e Signed-off-by: Peter Krempa Reviewed-by: Pavel Hrdina --- src/hypervisor/domain_driver.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/hypervisor/domain_driver.c b/src/hypervisor/domain_driver.c index cce6c64d1b..d8ccee40d5 100644 --- a/src/hypervisor/domain_driver.c +++ b/src/hypervisor/domain_driver.c @@ -779,6 +779,10 @@ virDomainDriverAutoShutdownDoSave(virDomainPtr *domain= s, } for (i =3D 0; i < numDomains; i++) { + if ((transient[i] && cfg->trySave =3D=3D VIR_DOMAIN_DRIVER_AUTO_SH= UTDOWN_SCOPE_PERSISTENT) || + (!transient[i] && cfg->trySave =3D=3D VIR_DOMAIN_DRIVER_AUTO_S= HUTDOWN_SCOPE_TRANSIENT)) + continue; + virSystemdNotifyStatus("Saving '%s' (%zu of %zu)", virDomainGetName(domains[i]), i + 1, numDom= ains); VIR_INFO("Saving '%s'", virDomainGetName(domains[i])); --=20 2.49.0 From nobody Sun Dec 14 02:17:06 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1751547340; cv=none; d=zohomail.com; s=zohoarc; b=RXJgjP9G9zI0jcdpIPOh0Z/lFMTAIi+FGjG1OPs6iodkcS9YUbQkB8nK0jhBnoAggo74lixS8QYra0JHWPgHR/06HZsyNM9mPvCK8+X5dpyLBhME6v5L7RSfRULmjWMi1rTB+ZjEEszX9bwtfNzUOH/Ksb59/qe2UZRCUQXrQwA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751547340; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id:Cc; bh=y/KI61ctMFGX/KAQc3iWo2wsaxaDqz1jn/wHf+R6Mjk=; b=SGN8iiN08/9TdLhknp4XVLOZsCIVlDZt3RRlxZHg6S6obF7cwZRBxaJpFzOGzy8w/2kBcbxUnFe2Oo3FkSXg4qGC8eYypC1BZfeoWZkle4d72zSORWsbWpmvL3aP/FJvPkZtNIIJvOBR6QtheRdGMQYigHQHEvF03m7R9DgMrmg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1751547340213208.04466628247326; Thu, 3 Jul 2025 05:55:40 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 3D336A46; Thu, 3 Jul 2025 08:55:39 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id A2EB811EF; Thu, 3 Jul 2025 08:51:15 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 379D7A79; Thu, 3 Jul 2025 08:51:09 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 572B511C4 for ; Thu, 3 Jul 2025 08:50:51 -0400 (EDT) Received: from mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-17-3906mbzpPlGfzNuyZp1oRA-1; Thu, 03 Jul 2025 08:50:49 -0400 Received: from mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.17]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id D9FBD1808985 for ; Thu, 3 Jul 2025 12:50:48 +0000 (UTC) Received: from speedmetal.redhat.com (unknown [10.45.242.5]) by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 1FE45195608F for ; Thu, 3 Jul 2025 12:50:47 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H5, RCVD_IN_MSPIKE_WL,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1751547051; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=hV1WGN17cjtsvZIi6o0se0yqjvQWomCebvKEyKxX23Y=; b=VvdueWVzt7r/aPlCs2kFCnd92xXOZaIqIqMotR1lbPmyeZI2VUcMtUJe0kUiii/hFH7+N7 WpeQKnIhMZMvarm1FF2Ic3/H9QqzxXf0YnJf2KVolgeZ6+S3dAux6PaFCRnfMaXIa9l7XD 9e2s5wqmmHFzf+LATmZPoEBvIOkrVCI= X-MC-Unique: 3906mbzpPlGfzNuyZp1oRA-1 X-Mimecast-MFC-AGG-ID: 3906mbzpPlGfzNuyZp1oRA_1751547049 To: devel@lists.libvirt.org Subject: [PATCH 10/10] virDomainDriverAutoShutdown: Refactor selection logic for VMs Date: Thu, 3 Jul 2025 14:50:33 +0200 Message-ID: <44335670757faca58cec48c7dac36472c1912f4e.1751546915.git.pkrempa@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.17 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: r3Vr8skWxAvxwr85EotwGUlP9j1csD-kF7y6aWS2XoU_1751547049 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: RCNG3WDYHGB4M7EO5NGR264W3RRQWB7F X-Message-ID-Hash: RCNG3WDYHGB4M7EO5NGR264W3RRQWB7F X-MailFrom: pkrempa@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Peter Krempa via Devel Reply-To: Peter Krempa X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1751547340947116600 Content-Type: text/plain; charset="utf-8" From: Peter Krempa Decide separately and record what shutdown modes are to be applied on given VM object rather than spreading out the logic through the code. This centralization simplifies the conditions in the worker functions and also: - provides easy way to check if the auto-shutdown code will be acting on domain object (will be used to fix attempt to auto-restore of VMs which were not selected to be acted on - will simplify further work where the desired shutdown action will be picked per-VM This refactor also fixes a bug where if restoring of the state is applied also on VMs that are not selected for action based on current logic. Signed-off-by: Peter Krempa Reviewed-by: Pavel Hrdina --- src/hypervisor/domain_driver.c | 176 +++++++++++++++++++-------------- 1 file changed, 100 insertions(+), 76 deletions(-) diff --git a/src/hypervisor/domain_driver.c b/src/hypervisor/domain_driver.c index d8ccee40d5..7f958c087f 100644 --- a/src/hypervisor/domain_driver.c +++ b/src/hypervisor/domain_driver.c @@ -738,25 +738,32 @@ virDomainDriverAutoShutdownActive(virDomainDriverAuto= ShutdownConfig *cfg) } +enum { + VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_MODE_SAVE =3D 1 >> 1, + VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_MODE_SHUTDOWN =3D 1 >> 2, + VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_MODE_POWEROFF =3D 1 >> 3, + VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_MODE_RESTORE =3D 1 >> 4, +} virDomainDriverAutoShutdownModeFlag; + + static void virDomainDriverAutoShutdownDoSave(virDomainPtr *domains, - bool *transient, + unsigned int *modes, size_t numDomains, virDomainDriverAutoShutdownConfig *cfg) { g_autofree unsigned int *flags =3D g_new0(unsigned int, numDomains); + bool hasSave =3D false; size_t i; - if (cfg->trySave =3D=3D VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_SCOPE_NONE) - return; - for (i =3D 0; i < numDomains; i++) { int state; - if ((transient[i] && cfg->trySave =3D=3D VIR_DOMAIN_DRIVER_AUTO_SH= UTDOWN_SCOPE_PERSISTENT) || - (!transient[i] && cfg->trySave =3D=3D VIR_DOMAIN_DRIVER_AUTO_S= HUTDOWN_SCOPE_TRANSIENT)) + if (!(modes[i] & VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_MODE_SAVE)) continue; + hasSave =3D true; + virSystemdNotifyStatus("Suspending '%s' (%zu of %zu)", virDomainGetName(domains[i]), i + 1, numDom= ains); VIR_INFO("Suspending '%s'", virDomainGetName(domains[i])); @@ -778,9 +785,11 @@ virDomainDriverAutoShutdownDoSave(virDomainPtr *domain= s, virDomainSuspend(domains[i]); } + if (!hasSave) + return; + for (i =3D 0; i < numDomains; i++) { - if ((transient[i] && cfg->trySave =3D=3D VIR_DOMAIN_DRIVER_AUTO_SH= UTDOWN_SCOPE_PERSISTENT) || - (!transient[i] && cfg->trySave =3D=3D VIR_DOMAIN_DRIVER_AUTO_S= HUTDOWN_SCOPE_TRANSIENT)) + if (!(modes[i] & VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_MODE_SAVE)) continue; virSystemdNotifyStatus("Saving '%s' (%zu of %zu)", @@ -795,31 +804,27 @@ virDomainDriverAutoShutdownDoSave(virDomainPtr *domai= ns, virDomainResume(domains[i]); continue; } - virObjectUnref(domains[i]); - domains[i] =3D NULL; + + modes[i] =3D 0; } } static void virDomainDriverAutoShutdownDoShutdown(virDomainPtr *domains, - bool *transient, + unsigned int *modes, size_t numDomains, virDomainDriverAutoShutdownConfig *c= fg) { GTimer *timer =3D NULL; + bool hasShutdown =3D false; size_t i; - if (cfg->tryShutdown =3D=3D VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_SCOPE_NONE) - return; - for (i =3D 0; i < numDomains; i++) { - if (domains[i] =3D=3D NULL) + if (!(modes[i] & VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_MODE_SHUTDOWN)) continue; - if ((transient[i] && cfg->tryShutdown =3D=3D VIR_DOMAIN_DRIVER_AUT= O_SHUTDOWN_SCOPE_PERSISTENT) || - (!transient[i] && cfg->tryShutdown =3D=3D VIR_DOMAIN_DRIVER_AU= TO_SHUTDOWN_SCOPE_TRANSIENT)) - continue; + hasShutdown =3D true; virSystemdNotifyStatus("Shutting down '%s' (%zu of %zu)", virDomainGetName(domains[i]), i + 1, numDom= ains); @@ -833,25 +838,24 @@ virDomainDriverAutoShutdownDoShutdown(virDomainPtr *d= omains, } } + if (!hasShutdown) + return; + timer =3D g_timer_new(); virSystemdNotifyStatus("Waiting %u secs for VM shutdown completion", cfg->waitShutdownSecs); VIR_INFO("Waiting %u secs for VM shutdown completion", cfg->waitShutdo= wnSecs); + while (1) { bool anyRunning =3D false; for (i =3D 0; i < numDomains; i++) { - if (!domains[i]) - continue; - - if ((transient[i] && cfg->tryShutdown =3D=3D VIR_DOMAIN_DRIVER= _AUTO_SHUTDOWN_SCOPE_PERSISTENT) || - (!transient[i] && cfg->tryShutdown =3D=3D VIR_DOMAIN_DRIVE= R_AUTO_SHUTDOWN_SCOPE_TRANSIENT)) + if (!(modes[i] & VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_MODE_SHUTDOWN= )) continue; if (virDomainIsActive(domains[i]) =3D=3D 1) { anyRunning =3D true; } else { - virObjectUnref(domains[i]); - domains[i] =3D NULL; + modes[i] =3D 0; } } @@ -867,21 +871,13 @@ virDomainDriverAutoShutdownDoShutdown(virDomainPtr *d= omains, static void virDomainDriverAutoShutdownDoPoweroff(virDomainPtr *domains, - bool *transient, - size_t numDomains, - virDomainDriverAutoShutdownConfig *c= fg) + unsigned int *modes, + size_t numDomains) { size_t i; - if (cfg->poweroff =3D=3D VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_SCOPE_NONE) - return; - for (i =3D 0; i < numDomains; i++) { - if (domains[i] =3D=3D NULL) - continue; - - if ((transient[i] && cfg->poweroff =3D=3D VIR_DOMAIN_DRIVER_AUTO_S= HUTDOWN_SCOPE_PERSISTENT) || - (!transient[i] && cfg->poweroff =3D=3D VIR_DOMAIN_DRIVER_AUTO_= SHUTDOWN_SCOPE_TRANSIENT)) + if (!(modes[i] & VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_MODE_POWEROFF)) continue; virSystemdNotifyStatus("Destroying '%s' (%zu of %zu)", @@ -894,11 +890,49 @@ virDomainDriverAutoShutdownDoPoweroff(virDomainPtr *d= omains, */ virDomainDestroy(domains[i]); - virObjectUnref(domains[i]); - domains[i] =3D NULL; + modes[i] =3D 0; } } +static unsigned int +virDomainDriverAutoShutdownGetMode(virDomainPtr domain, + virDomainDriverAutoShutdownConfig *cfg) +{ + unsigned int mode =3D 0; + + if (virDomainIsPersistent(domain) =3D=3D 0) { + if (cfg->trySave =3D=3D VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_SCOPE_ALL = || + cfg->trySave =3D=3D VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_SCOPE_PERS= ISTENT) + mode |=3D VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_MODE_SAVE; + + if (cfg->tryShutdown =3D=3D VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_SCOPE_= ALL || + cfg->tryShutdown =3D=3D VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_SCOPE_= PERSISTENT) + mode |=3D VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_MODE_SHUTDOWN; + + if (cfg->poweroff =3D=3D VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_SCOPE_ALL= || + cfg->poweroff =3D=3D VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_SCOPE_PER= SISTENT) + mode |=3D VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_MODE_POWEROFF; + + /* Don't restore VMs which weren't selected for auto-shutdown */ + if (mode !=3D 0 && cfg->autoRestore) + mode |=3D VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_MODE_RESTORE; + } else { + if (cfg->tryShutdown =3D=3D VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_SCOPE_= ALL || + cfg->tryShutdown =3D=3D VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_SCOPE_= TRANSIENT) + mode |=3D VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_MODE_SHUTDOWN; + + if (cfg->poweroff =3D=3D VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_SCOPE_ALL= || + cfg->poweroff =3D=3D VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_SCOPE_TRA= NSIENT) + mode |=3D VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_MODE_POWEROFF; + + if (cfg->autoRestore) + VIR_DEBUG("Cannot auto-restore transient VM '%s'", + virDomainGetName(domain)); + } + + return mode; +} + void virDomainDriverAutoShutdown(virDomainDriverAutoShutdownConfig *cfg) @@ -907,7 +941,7 @@ virDomainDriverAutoShutdown(virDomainDriverAutoShutdown= Config *cfg) int numDomains =3D 0; size_t i; virDomainPtr *domains =3D NULL; - g_autofree bool *transient =3D NULL; + g_autofree unsigned int *modes =3D NULL; VIR_DEBUG("Run autoshutdown uri=3D%s trySave=3D%s tryShutdown=3D%s pow= eroff=3D%s waitShutdownSecs=3D%u saveBypassCache=3D%d autoRestore=3D%d", cfg->uri, @@ -948,58 +982,48 @@ virDomainDriverAutoShutdown(virDomainDriverAutoShutdo= wnConfig *cfg) return; if (!(conn =3D virConnectOpen(cfg->uri))) - goto cleanup; + return; if ((numDomains =3D virConnectListAllDomains(conn, &domains, VIR_CONNECT_LIST_DOMAINS_AC= TIVE)) < 0) - goto cleanup; + return; VIR_DEBUG("Auto shutdown with %d running domains", numDomains); - transient =3D g_new0(bool, numDomains); + modes =3D g_new0(unsigned int, numDomains); + for (i =3D 0; i < numDomains; i++) { - if (virDomainIsPersistent(domains[i]) =3D=3D 0) - transient[i] =3D true; + modes[i] =3D virDomainDriverAutoShutdownGetMode(domains[i], cfg); - if (cfg->autoRestore) { - if (transient[i]) { - VIR_DEBUG("Cannot auto-restore transient VM %s", - virDomainGetName(domains[i])); - } else { - VIR_DEBUG("Mark %s for autostart on next boot", - virDomainGetName(domains[i])); - if (virDomainSetAutostartOnce(domains[i], 1) < 0) { - VIR_WARN("Unable to mark domain '%s' for auto restore:= %s", - virDomainGetName(domains[i]), - virGetLastErrorMessage()); - } + if (modes[i] =3D=3D 0) { + /* VM wasn't selected for any of the shutdown modes. There's n= ot + * much we can do about that as the host is powering off, logg= ing + * at least lets admins know */ + VIR_WARN("auto-shutdown: domain '%s' not successfully shut off= by any action", + domains[i]->name); + } + + if (modes[i] & VIR_DOMAIN_DRIVER_AUTO_SHUTDOWN_MODE_RESTORE) { + VIR_DEBUG("Mark %s for autostart on next boot", + virDomainGetName(domains[i])); + if (virDomainSetAutostartOnce(domains[i], 1) < 0) { + VIR_WARN("Unable to mark domain '%s' for auto restore: %s", + virDomainGetName(domains[i]), + virGetLastErrorMessage()); } } } - virDomainDriverAutoShutdownDoSave(domains, transient, numDomains, cfg); - virDomainDriverAutoShutdownDoShutdown(domains, transient, numDomains, = cfg); - virDomainDriverAutoShutdownDoPoweroff(domains, transient, numDomains, = cfg); + virDomainDriverAutoShutdownDoSave(domains, modes, numDomains, cfg); + virDomainDriverAutoShutdownDoShutdown(domains, modes, numDomains, cfg); + virDomainDriverAutoShutdownDoPoweroff(domains, modes, numDomains); virSystemdNotifyStatus("Processed %d domains", numDomains); VIR_INFO("Processed %d domains", numDomains); - cleanup: - if (domains) { - /* Anything non-NULL in this list indicates none of - * the configured ations were successful in processing - * the domain. There's not much we can do about that - * as the host is powering off, logging at least lets - * admins know - */ - for (i =3D 0; i < numDomains; i++) { - if (domains[i] =3D=3D NULL) - continue; - VIR_WARN("auto-shutdown: domain '%s' not successfully shut off= by any action", - domains[i]->name); - virObjectUnref(domains[i]); - } - VIR_FREE(domains); - } + for (i =3D 0; i < numDomains; i++) + virObjectUnref(domains[i]); + + VIR_FREE(domains); } --=20 2.49.0