From nobody Sat May 11 23:35:20 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) client-ip=170.10.129.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail(p=none dis=none) header.from=gmail.com Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by mx.zohomail.com with SMTPS id 1644219674303710.6830045003684; Sun, 6 Feb 2022 23:41:14 -0800 (PST) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-19-YZ0gnNHuO4-i71VVk7s_PQ-1; Mon, 07 Feb 2022 02:41:06 -0500 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id BF99E1572B; Mon, 7 Feb 2022 07:41:01 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id A01175ED55; Mon, 7 Feb 2022 07:41:01 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 6E7F94A7C8; Mon, 7 Feb 2022 07:41:01 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.rdu2.redhat.com [10.11.54.7]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 2177cTXi012067 for ; Mon, 7 Feb 2022 02:38:30 -0500 Received: by smtp.corp.redhat.com (Postfix) id C66C91454543; Mon, 7 Feb 2022 07:38:29 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast10.extmail.prod.ext.rdu2.redhat.com [10.11.55.26]) by smtp.corp.redhat.com (Postfix) with ESMTPS id C27601454538 for ; Mon, 7 Feb 2022 07:38:29 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-2.mimecast.com [207.211.31.81]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id A9A7E1C05AAD for ; Mon, 7 Feb 2022 07:38:29 +0000 (UTC) Received: from mail-pf1-f170.google.com (mail-pf1-f170.google.com [209.85.210.170]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-263-vgz1VulgMymAP84OwxkINg-1; Mon, 07 Feb 2022 02:38:27 -0500 Received: by mail-pf1-f170.google.com with SMTP id 192so11543422pfz.3 for ; Sun, 06 Feb 2022 23:38:27 -0800 (PST) Received: from localhost ([38.94.108.206]) by smtp.gmail.com with ESMTPSA id g12sm10394457pfm.119.2022.02.06.23.38.25 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 06 Feb 2022 23:38:26 -0800 (PST) X-MC-Unique: YZ0gnNHuO4-i71VVk7s_PQ-1 X-MC-Unique: vgz1VulgMymAP84OwxkINg-1 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=inoyiNOoZQCGyxYLJViMAg/QSdRoNjEq8dP1P3RiAxs=; b=YZCS291+Jp8T3xgU3D3N0z7kFev3tKNGHEt+lYhCG1Vr0UxsQNJIac9vYcNlqcgQei sR5v6b/SXOaNP8BmIoYUnmKYmAgDzy0lLtc1VjgZUatnXGqSYPbDbi5ZIZaibWwVBvXW 4oXPGuKNghOBir88v+/MAwpNHSQkjlL3B20xWu3my1UcYRRAk6T7W1qqbixr7rNRJlG/ tO2fexJdCcYAD3ant1Fo3QNxHseHNVnrUZhr3OoSc7MZ2irhyf1LHFVIYY9Thd/AhLTB cObZFiP3KCJB71M/G2wq46NDJS3hyX2FI2Q3apOp2frwyjDGzbVlLSQeIEWfY7EriG2B AygA== X-Gm-Message-State: AOAM531TwccTdOjtKsYCyqAPtkfHq8ptr2E+x7AnySekXw5apaqOKwtT QSS+EYVzAaQpg4tGmbTDfBmgi49gJECpAZFm6PM= X-Google-Smtp-Source: ABdhPJw1bTTL7j1Dhvox7JM6gHL87f1zDRiOdzx1PmrcdZfnguNR0lcvRKAZ4/TDYisOUo0L+fKhEQ== X-Received: by 2002:a05:6a00:170d:: with SMTP id h13mr14623118pfc.11.1644219506519; Sun, 06 Feb 2022 23:38:26 -0800 (PST) From: Luke Yue To: libvir-list@redhat.com Subject: [PATCH v5 1/8] conf: Introduce virDomainInputDefRemove and fix memory leak Date: Mon, 7 Feb 2022 15:38:11 +0800 Message-Id: <20220207073818.356659-2-lukedyue@gmail.com> In-Reply-To: <20220207073818.356659-1-lukedyue@gmail.com> References: <20220207073818.356659-1-lukedyue@gmail.com> MIME-Version: 1.0 X-Mimecast-Impersonation-Protect: Policy=CLT - Impersonation Protection Definition; Similar Internal Domain=false; Similar Monitored External Domain=false; Custom External Domain=false; Mimecast External Domain=false; Newly Observed Domain=false; Internal User Name=false; Custom Display Name List=false; Reply-to Address Mismatch=false; Targeted Threat Dictionary=false; Mimecast Threat Dictionary=false; Custom Threat Dictionary=false X-Scanned-By: MIMEDefang 2.85 on 10.11.54.7 X-loop: libvir-list@redhat.com X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZM-MESSAGEID: 1644219675378100001 Content-Type: text/plain; charset="utf-8" Signed-off-by: Luke Yue --- src/conf/domain_conf.c | 12 ++++++++++++ src/conf/domain_conf.h | 2 ++ src/libvirt_private.syms | 1 + src/qemu/qemu_driver.c | 3 ++- 4 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index d66496c9b7..c8c2f13f8b 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -16734,6 +16734,18 @@ virDomainInputDefFind(const virDomainDef *def, } =20 =20 +virDomainInputDef * +virDomainInputDefRemove(virDomainDef *def, + size_t idx) +{ + virDomainInputDef *ret =3D def->inputs[idx]; + + VIR_DELETE_ELEMENT(def->inputs, idx, def->ninputs); + + return ret; +} + + bool virDomainVsockDefEquals(const virDomainVsockDef *a, const virDomainVsockDef *b) diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index b2922e8cff..c0167eee85 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -3888,6 +3888,8 @@ virDomainShmemDef *virDomainShmemDefRemove(virDomainD= ef *def, size_t idx) ssize_t virDomainInputDefFind(const virDomainDef *def, const virDomainInputDef *input) ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) G_GNUC_WARN_UNUSED_RESULT; +virDomainInputDef *virDomainInputDefRemove(virDomainDef *def, size_t idx) + ATTRIBUTE_NONNULL(1); bool virDomainVsockDefEquals(const virDomainVsockDef *a, const virDomainVsockDef *b) ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) G_GNUC_WARN_UNUSED_RESULT; diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 398cc79ee3..abdc8eaef7 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -480,6 +480,7 @@ virDomainInputBusTypeToString; virDomainInputDefFind; virDomainInputDefFree; virDomainInputDefGetPath; +virDomainInputDefRemove; virDomainInputSourceGrabToggleTypeFromString; virDomainInputSourceGrabToggleTypeToString; virDomainInputSourceGrabTypeFromString; diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 698f57f00e..864ea10685 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -7502,7 +7502,8 @@ qemuDomainDetachDeviceConfig(virDomainDef *vmdef, _("matching input device not found")); return -1; } - VIR_DELETE_ELEMENT(vmdef->inputs, idx, vmdef->ninputs); + + virDomainInputDefFree(virDomainInputDefRemove(vmdef, idx)); break; =20 case VIR_DOMAIN_DEVICE_VSOCK: --=20 2.35.1 From nobody Sat May 11 23:35:20 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) client-ip=170.10.133.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail(p=none dis=none) header.from=gmail.com Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by mx.zohomail.com with SMTPS id 16442195658231016.9549477326201; Sun, 6 Feb 2022 23:39:25 -0800 (PST) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-252-LeDKDsu6NfWAH_bNllrx5w-1; Mon, 07 Feb 2022 02:39:19 -0500 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 5C51210247A6; Mon, 7 Feb 2022 07:39:14 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 36EED62D57; Mon, 7 Feb 2022 07:39:14 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 52EE51809CBF; Mon, 7 Feb 2022 07:39:13 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 2177cZac012081 for ; Mon, 7 Feb 2022 02:38:35 -0500 Received: by smtp.corp.redhat.com (Postfix) id B37122026D64; Mon, 7 Feb 2022 07:38:35 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast01.extmail.prod.ext.rdu2.redhat.com [10.11.55.17]) by smtp.corp.redhat.com (Postfix) with ESMTPS id ADEF42026D60 for ; Mon, 7 Feb 2022 07:38:32 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-delivery-1.mimecast.com [207.211.31.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id AFAFB85A5BE for ; Mon, 7 Feb 2022 07:38:32 +0000 (UTC) Received: from mail-pf1-f177.google.com (mail-pf1-f177.google.com [209.85.210.177]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-137-FAiWC1cQM6GuUzv-QCpsmQ-1; Mon, 07 Feb 2022 02:38:30 -0500 Received: by mail-pf1-f177.google.com with SMTP id v74so11555919pfc.1 for ; Sun, 06 Feb 2022 23:38:30 -0800 (PST) Received: from localhost ([38.94.108.206]) by smtp.gmail.com with ESMTPSA id h6sm11241678pfc.96.2022.02.06.23.38.28 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 06 Feb 2022 23:38:28 -0800 (PST) X-MC-Unique: LeDKDsu6NfWAH_bNllrx5w-1 X-MC-Unique: FAiWC1cQM6GuUzv-QCpsmQ-1 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=mePnj3RAt+8AeqLmTDUNA0se8zus15XhEO9POXv+JTM=; b=fYJJZ8c9Qc8QSWH/SGPtukd5SZ4YKd7PDmqjMSGxqVzscJtydvdf6SU9jmp00UNFQD 6vKL2LEGG2kix0VjN3DMqecFy8+8HikB2Vp9lip5tfyQ8eBhOPS7rkMwdMzNj/mYUruZ dkCn7siav+dbonbzEP2SX4gIeeJ3xU3/7FdqfOz7CCtNUIC1BWTAZwEPaeb7s0m3Jbub N94bw+YyntLosmWD1BvlanYWVXLfeVGJzbmB3IapmbBC5L6A+kWA8MlDwUyc46YNTnIk ECeZ1Bx2If5z0TCtomC1RMSk+62ieywGmxj22zYrC0EZ+BAGx8mfZiqoPfEK9txeS5Ky 6XQQ== X-Gm-Message-State: AOAM533TgZdLS64n+gZ99SNIhn9H6L4b5yJ18NaepNNUj9/PhlOmumVK SiuJ0tUzKjPGIrexzZMJlGTQlTdUmil7Tn3QVLo= X-Google-Smtp-Source: ABdhPJwV7EeTRf/XHmDc4TxBG0iWxZKH7hOR7xYRqdWH6sFBGp/EOK03wB4LYET1BQVbI1B/9RvDzg== X-Received: by 2002:a05:6a00:2181:: with SMTP id h1mr14420915pfi.50.1644219509323; Sun, 06 Feb 2022 23:38:29 -0800 (PST) From: Luke Yue To: libvir-list@redhat.com Subject: [PATCH v5 2/8] conf: Introduce virDomainDeviceDefOperationsCallbacks to xmlopt Date: Mon, 7 Feb 2022 15:38:12 +0800 Message-Id: <20220207073818.356659-3-lukedyue@gmail.com> In-Reply-To: <20220207073818.356659-1-lukedyue@gmail.com> References: <20220207073818.356659-1-lukedyue@gmail.com> MIME-Version: 1.0 X-Mimecast-Impersonation-Protect: Policy=CLT - Impersonation Protection Definition; Similar Internal Domain=false; Similar Monitored External Domain=false; Custom External Domain=false; Mimecast External Domain=false; Newly Observed Domain=false; Internal User Name=false; Custom Display Name List=false; Reply-to Address Mismatch=false; Targeted Threat Dictionary=false; Mimecast Threat Dictionary=false; Custom Threat Dictionary=false X-Scanned-By: MIMEDefang 2.78 on 10.11.54.4 X-loop: libvir-list@redhat.com X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZM-MESSAGEID: 1644219567683100001 Content-Type: text/plain; charset="utf-8" virDomainDeviceDefOperationsCallbacks would enable virDomainXMLOption to gain driver specific callback for attaching / detaching / updating devices, also it can store flags for attachable / detachable / updatable devices that driver supported (currently only add flags for detachable devices). This would be useful when de-duplicate related functions. Signed-off-by: Luke Yue --- I am not pretty sure whether these functions could be put into virDomainXMLPrivateDataCallbacks or not, so I just create a new one to store them. --- src/bhyve/bhyve_domain.c | 2 +- src/ch/ch_conf.c | 2 +- src/conf/domain_conf.c | 6 +++++- src/conf/domain_conf.h | 18 +++++++++++++++++- src/conf/virconftypes.h | 2 ++ src/hyperv/hyperv_driver.c | 3 ++- src/libxl/libxl_conf.c | 2 +- src/lxc/lxc_conf.c | 2 +- src/openvz/openvz_conf.c | 2 +- src/qemu/qemu_conf.c | 3 ++- src/qemu/qemu_process.c | 2 +- src/security/virt-aa-helper.c | 2 +- src/test/test_driver.c | 3 ++- src/vbox/vbox_common.c | 2 +- src/vmware/vmware_driver.c | 2 +- src/vmx/vmx.c | 2 +- src/vz/vz_driver.c | 2 +- tests/bhyveargv2xmltest.c | 2 +- tests/testutils.c | 2 +- 19 files changed, 43 insertions(+), 18 deletions(-) diff --git a/src/bhyve/bhyve_domain.c b/src/bhyve/bhyve_domain.c index b526235a4e..1b7986ffff 100644 --- a/src/bhyve/bhyve_domain.c +++ b/src/bhyve/bhyve_domain.c @@ -217,7 +217,7 @@ virBhyveDriverCreateXMLConf(struct _bhyveConn *driver) return virDomainXMLOptionNew(&virBhyveDriverDomainDefParserConfig, &virBhyveDriverPrivateDataCallbacks, &virBhyveDriverDomainXMLNamespace, - NULL, NULL); + NULL, NULL, NULL); } =20 =20 diff --git a/src/ch/ch_conf.c b/src/ch/ch_conf.c index 88a23a59cd..fc1313584b 100644 --- a/src/ch/ch_conf.c +++ b/src/ch/ch_conf.c @@ -111,7 +111,7 @@ chDomainXMLConfInit(virCHDriver *driver) virCHDriverDomainDefParserConfig.priv =3D driver; return virDomainXMLOptionNew(&virCHDriverDomainDefParserConfig, &virCHDriverPrivateDataCallbacks, - NULL, NULL, NULL); + NULL, NULL, NULL, NULL); } =20 virCHDriverConfig * diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index c8c2f13f8b..e19e3deb17 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -1579,7 +1579,8 @@ virDomainXMLOptionNew(virDomainDefParserConfig *confi= g, virDomainXMLPrivateDataCallbacks *priv, virXMLNamespace *xmlns, virDomainABIStability *abi, - virSaveCookieCallbacks *saveCookie) + virSaveCookieCallbacks *saveCookie, + virDomainDeviceDefOperationsCallbacks *deviceOps) { virDomainXMLOption *xmlopt; =20 @@ -1604,6 +1605,9 @@ virDomainXMLOptionNew(virDomainDefParserConfig *confi= g, if (saveCookie) xmlopt->saveCookie =3D *saveCookie; =20 + if (deviceOps) + xmlopt->deviceOps =3D *deviceOps; + /* Technically this forbids to use one of Xerox's MAC address prefixes= in * our hypervisor drivers. This shouldn't ever be a problem. * diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index c0167eee85..14fb9777de 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -3208,7 +3208,8 @@ virDomainXMLOption *virDomainXMLOptionNew(virDomainDe= fParserConfig *config, virDomainXMLPrivateDataCallbacks= *priv, virXMLNamespace *xmlns, virDomainABIStability *abi, - virSaveCookieCallbacks *saveCook= ie); + virSaveCookieCallbacks *saveCook= ie, + virDomainDeviceDefOperationsCall= backs *deviceOps); =20 virSaveCookieCallbacks * virDomainXMLOptionGetSaveCookie(virDomainXMLOption *xmlopt); @@ -3226,6 +3227,18 @@ virXMLNamespace * virDomainXMLOptionGetNamespace(virDomainXMLOption *xmlopt) ATTRIBUTE_NONNULL(1); =20 +typedef int (*virDomainDeviceDetachFunc)(virDomainDef *vmdef, + virDomainDeviceDef *dev, + unsigned int flags); + +struct _virDomainDeviceDefOperationsCallbacks { + virDomainDeviceDetachFunc detachChr; + virDomainDeviceDetachFunc detachMemballoon; + + /* Flags for detachable devices that driver supported */ + unsigned int detachFlags; +}; + /* This structure holds various callbacks and data needed * while parsing and creating domain XMLs */ struct _virDomainXMLOption { @@ -3248,6 +3261,9 @@ struct _virDomainXMLOption { =20 /* Snapshot postparse callbacks */ virDomainMomentPostParseCallback momentPostParse; + + /* domain specific device operation callbacks */ + virDomainDeviceDefOperationsCallbacks deviceOps; }; G_DEFINE_AUTOPTR_CLEANUP_FUNC(virDomainXMLOption, virObjectUnref); =20 diff --git a/src/conf/virconftypes.h b/src/conf/virconftypes.h index 21420ba8ea..d3bb720c52 100644 --- a/src/conf/virconftypes.h +++ b/src/conf/virconftypes.h @@ -251,3 +251,5 @@ typedef struct _virDomainXMLOption virDomainXMLOption; typedef struct _virDomainXMLPrivateDataCallbacks virDomainXMLPrivateDataCa= llbacks; =20 typedef struct _virDomainXenbusControllerOpts virDomainXenbusControllerOpt= s; + +typedef struct _virDomainDeviceDefOperationsCallbacks virDomainDeviceDefOp= erationsCallbacks; diff --git a/src/hyperv/hyperv_driver.c b/src/hyperv/hyperv_driver.c index 288c01ad14..732cf4a163 100644 --- a/src/hyperv/hyperv_driver.c +++ b/src/hyperv/hyperv_driver.c @@ -1766,7 +1766,8 @@ hypervConnectOpen(virConnectPtr conn, virConnectAuthP= tr auth, goto cleanup; =20 /* init xmlopt for domain XML */ - priv->xmlopt =3D virDomainXMLOptionNew(&hypervDomainDefParserConfig, N= ULL, NULL, NULL, NULL); + priv->xmlopt =3D virDomainXMLOptionNew(&hypervDomainDefParserConfig, + NULL, NULL, NULL, NULL, NULL); =20 if (hypervGetOperatingSystem(priv, &os) < 0) goto cleanup; diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c index f062f8e958..032f7196c2 100644 --- a/src/libxl/libxl_conf.c +++ b/src/libxl/libxl_conf.c @@ -2486,5 +2486,5 @@ libxlCreateXMLConf(libxlDriverPrivate *driver) return virDomainXMLOptionNew(&libxlDomainDefParserConfig, &libxlDomainXMLPrivateDataCallbacks, &libxlDriverDomainXMLNamespace, - NULL, NULL); + NULL, NULL, NULL); } diff --git a/src/lxc/lxc_conf.c b/src/lxc/lxc_conf.c index 8955578d54..01a159438e 100644 --- a/src/lxc/lxc_conf.c +++ b/src/lxc/lxc_conf.c @@ -190,7 +190,7 @@ lxcDomainXMLConfInit(virLXCDriver *driver, const char *= defsecmodel) return virDomainXMLOptionNew(&virLXCDriverDomainDefParserConfig, &virLXCDriverPrivateDataCallbacks, &virLXCDriverDomainXMLNamespace, - NULL, NULL); + NULL, NULL, NULL); } =20 =20 diff --git a/src/openvz/openvz_conf.c b/src/openvz/openvz_conf.c index 191c79e1e2..5bcb9c584b 100644 --- a/src/openvz/openvz_conf.c +++ b/src/openvz/openvz_conf.c @@ -1063,5 +1063,5 @@ virDomainXMLOption *openvzXMLOption(struct openvz_dri= ver *driver) { openvzDomainDefParserConfig.priv =3D driver; return virDomainXMLOptionNew(&openvzDomainDefParserConfig, - NULL, NULL, NULL, NULL); + NULL, NULL, NULL, NULL, NULL); } diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c index 81449b8b77..8b2926f766 100644 --- a/src/qemu/qemu_conf.c +++ b/src/qemu/qemu_conf.c @@ -1296,7 +1296,8 @@ virQEMUDriverCreateXMLConf(virQEMUDriver *driver, &virQEMUDriverPrivateDataCallbacks, &virQEMUDriverDomainXMLNamespace, &virQEMUDriverDomainABIStability, - &virQEMUDriverDomainSaveCookie); + &virQEMUDriverDomainSaveCookie, + NULL); } =20 =20 diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index ea586e54c1..42a3062cb9 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -9342,7 +9342,7 @@ qemuProcessQMPConnectMonitor(qemuProcessQMP *proc) monConfig.data.nix.path =3D proc->monpath; monConfig.data.nix.listen =3D false; =20 - if (!(xmlopt =3D virDomainXMLOptionNew(NULL, NULL, NULL, NULL, NULL)) = || + if (!(xmlopt =3D virDomainXMLOptionNew(NULL, NULL, NULL, NULL, NULL, N= ULL)) || !(proc->vm =3D virDomainObjNew(xmlopt)) || !(proc->vm->def =3D virDomainDefNew(xmlopt))) return -1; diff --git a/src/security/virt-aa-helper.c b/src/security/virt-aa-helper.c index 1f1cce8b3d..ead785ee57 100644 --- a/src/security/virt-aa-helper.c +++ b/src/security/virt-aa-helper.c @@ -632,7 +632,7 @@ get_definition(vahControl * ctl, const char *xmlStr) } =20 if (!(ctl->xmlopt =3D virDomainXMLOptionNew(&virAAHelperDomainDefParse= rConfig, - NULL, NULL, NULL, NULL))) { + NULL, NULL, NULL, NULL, NULL= ))) { vah_error(ctl, 0, _("Failed to create XML config object")); return -1; } diff --git a/src/test/test_driver.c b/src/test/test_driver.c index f900123941..e4eb0e87d2 100644 --- a/src/test/test_driver.c +++ b/src/test/test_driver.c @@ -462,7 +462,8 @@ testDriverNew(void) if (!(ret =3D virObjectLockableNew(testDriverClass))) return NULL; =20 - if (!(ret->xmlopt =3D virDomainXMLOptionNew(&config, &privatecb, &ns, = NULL, NULL)) || + if (!(ret->xmlopt =3D virDomainXMLOptionNew(&config, &privatecb, &ns, + NULL, NULL, NULL)) || !(ret->eventState =3D virObjectEventStateNew()) || !(ret->ifaces =3D virInterfaceObjListNew()) || !(ret->domains =3D virDomainObjListNew()) || diff --git a/src/vbox/vbox_common.c b/src/vbox/vbox_common.c index eec47a02fc..ce8e7203b1 100644 --- a/src/vbox/vbox_common.c +++ b/src/vbox/vbox_common.c @@ -143,7 +143,7 @@ vboxDriverObjNew(void) =20 if (!(driver->caps =3D vboxCapsInit()) || !(driver->xmlopt =3D virDomainXMLOptionNew(&vboxDomainDefParserCon= fig, - NULL, NULL, NULL, NULL))) + NULL, NULL, NULL, NULL, N= ULL))) goto cleanup; =20 return driver; diff --git a/src/vmware/vmware_driver.c b/src/vmware/vmware_driver.c index 998ecdb546..4943049df5 100644 --- a/src/vmware/vmware_driver.c +++ b/src/vmware/vmware_driver.c @@ -156,7 +156,7 @@ vmwareDomainXMLConfigInit(struct vmware_driver *driver) .free =3D vmwareDataFreeFunc= }; vmwareDomainDefParserConfig.priv =3D driver; return virDomainXMLOptionNew(&vmwareDomainDefParserConfig, &priv, - NULL, NULL, NULL); + NULL, NULL, NULL, NULL); } =20 static virDrvOpenStatus diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c index ca65caa9a1..6500ed518e 100644 --- a/src/vmx/vmx.c +++ b/src/vmx/vmx.c @@ -695,7 +695,7 @@ virVMXDomainXMLConfInit(virCaps *caps) { virVMXDomainDefParserConfig.priv =3D caps; return virDomainXMLOptionNew(&virVMXDomainDefParserConfig, NULL, - &virVMXDomainXMLNamespace, NULL, NULL); + &virVMXDomainXMLNamespace, NULL, NULL, NU= LL); } =20 char * diff --git a/src/vz/vz_driver.c b/src/vz/vz_driver.c index c16cc2be00..c7224a9cbe 100644 --- a/src/vz/vz_driver.c +++ b/src/vz/vz_driver.c @@ -330,7 +330,7 @@ vzDriverObjNew(void) if (!(driver->caps =3D vzBuildCapabilities()) || !(driver->xmlopt =3D virDomainXMLOptionNew(&vzDomainDefParserConfi= g, &vzDomainXMLPrivateDataCa= llbacksPtr, - NULL, NULL, NULL)) || + NULL, NULL, NULL, NULL)) = || !(driver->domains =3D virDomainObjListNew()) || !(driver->domainEventState =3D virObjectEventStateNew()) || (vzInitVersion(driver) < 0) || diff --git a/tests/bhyveargv2xmltest.c b/tests/bhyveargv2xmltest.c index 2ccc1379b9..92189a2e58 100644 --- a/tests/bhyveargv2xmltest.c +++ b/tests/bhyveargv2xmltest.c @@ -113,7 +113,7 @@ mymain(void) if ((driver.caps =3D virBhyveCapsBuild()) =3D=3D NULL) return EXIT_FAILURE; =20 - if ((driver.xmlopt =3D virDomainXMLOptionNew(NULL, NULL, + if ((driver.xmlopt =3D virDomainXMLOptionNew(NULL, NULL, NULL, NULL, NULL, NULL)) =3D=3D N= ULL) return EXIT_FAILURE; =20 diff --git a/tests/testutils.c b/tests/testutils.c index 2b37c1965d..949a3cae36 100644 --- a/tests/testutils.c +++ b/tests/testutils.c @@ -988,7 +988,7 @@ static virDomainDefParserConfig virTestGenericDomainDef= ParserConfig =3D { virDomainXMLOption *virTestGenericDomainXMLConfInit(void) { return virDomainXMLOptionNew(&virTestGenericDomainDefParserConfig, - NULL, NULL, NULL, NULL); + NULL, NULL, NULL, NULL, NULL); } =20 =20 --=20 2.35.1 From nobody Sat May 11 23:35:20 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) client-ip=170.10.129.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail(p=none dis=none) header.from=gmail.com Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by mx.zohomail.com with SMTPS id 164421967533912.22663235147104; Sun, 6 Feb 2022 23:41:15 -0800 (PST) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-301--b9ISz3aMGmLT-WHIw1Y1A-1; Mon, 07 Feb 2022 02:41:10 -0500 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id E14B41091DB9; Mon, 7 Feb 2022 07:41:05 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id BF3DA27BCF; Mon, 7 Feb 2022 07:41:05 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 8F69A1806D1C; Mon, 7 Feb 2022 07:41:05 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.rdu2.redhat.com [10.11.54.1]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 2177cZ2C012080 for ; Mon, 7 Feb 2022 02:38:35 -0500 Received: by smtp.corp.redhat.com (Postfix) id 9AEEB40CFD16; Mon, 7 Feb 2022 07:38:35 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast01.extmail.prod.ext.rdu2.redhat.com [10.11.55.17]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 962FF40CFD0B for ; Mon, 7 Feb 2022 07:38:35 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-2.mimecast.com [205.139.110.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 7A4B085A5A8 for ; Mon, 7 Feb 2022 07:38:35 +0000 (UTC) Received: from mail-pl1-f174.google.com (mail-pl1-f174.google.com [209.85.214.174]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-148-lQvnD61VOfiJg_1k8f2jPg-1; Mon, 07 Feb 2022 02:38:33 -0500 Received: by mail-pl1-f174.google.com with SMTP id 10so2583322plj.1 for ; Sun, 06 Feb 2022 23:38:33 -0800 (PST) Received: from localhost ([38.94.108.206]) by smtp.gmail.com with ESMTPSA id lk8sm10204140pjb.40.2022.02.06.23.38.31 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 06 Feb 2022 23:38:31 -0800 (PST) X-MC-Unique: -b9ISz3aMGmLT-WHIw1Y1A-1 X-MC-Unique: lQvnD61VOfiJg_1k8f2jPg-1 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=kI5u5BWBiKBhC5uTOrM8QXX6a9nqh1Cwq5VyceqbUQw=; b=Qg9/UgY17RX2TkkxmSn61qJndR6zjzOQjDm2uuxS9V6vnF8HsB8MhkC4QBqC6YXUbG SbJez1jEXPRpqepj41eFtMMTVl/AUzqKWU2a1ictFbisICBVWR4pFsfEW8+Kc5uKSNr1 GFLeCihEhUTu2zKYNYXTAt9ziJT1ZggYp1GkdAC7kTMkRumnBodMcA5lBzNVGqrIddhC I/t//F72CK2wByxhCxY+Cb2YOalYVroac/RNR9Pfyh2FCgAiOMkg8o221PGjwlMh6JD7 KGnJEJOCuQAgw5hlYkCMypO1JE0aPsn7LLsCPMqKTI2jUmk3Tb4/l66kHcQdDjl1PiCA XvNg== X-Gm-Message-State: AOAM532S+0EUmscL8jrENZrBRVcgxN7gBufftUjhlq75JUnsy2DeafGb eTDvDYQEaK/aBYHis2Cg3pSc9RkNj7Kz3I1Maj0= X-Google-Smtp-Source: ABdhPJxfZ8Rbp3Kr9SIPOSt5SKPGgF7ILOzVcsnMLr9ASo26k+I+ExCKzQLRlvjDPEdNw3ZLNnlDvw== X-Received: by 2002:a17:902:ecd2:: with SMTP id a18mr15218221plh.84.1644219512302; Sun, 06 Feb 2022 23:38:32 -0800 (PST) From: Luke Yue To: libvir-list@redhat.com Subject: [PATCH v5 3/8] conf: Add virDomainDeviceTypeFlags and use it in various drivers Date: Mon, 7 Feb 2022 15:38:13 +0800 Message-Id: <20220207073818.356659-4-lukedyue@gmail.com> In-Reply-To: <20220207073818.356659-1-lukedyue@gmail.com> References: <20220207073818.356659-1-lukedyue@gmail.com> MIME-Version: 1.0 X-Mimecast-Impersonation-Protect: Policy=CLT - Impersonation Protection Definition; Similar Internal Domain=false; Similar Monitored External Domain=false; Custom External Domain=false; Mimecast External Domain=false; Newly Observed Domain=false; Internal User Name=false; Custom Display Name List=false; Reply-to Address Mismatch=false; Targeted Threat Dictionary=false; Mimecast Threat Dictionary=false; Custom Threat Dictionary=false X-Scanned-By: MIMEDefang 2.84 on 10.11.54.1 X-loop: libvir-list@redhat.com X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZM-MESSAGEID: 1644219677335100003 Content-Type: text/plain; charset="utf-8" Declare and use virDomainDeviceDefOperationsCallbacks in test / QEMU / LXC / libxl drivers to store detachable devices that driver support, this would be useful in future. Also add test driver's memballoon device detach function and QEMU driver's char device detach function to their xmlopt. Signed-off-by: Luke Yue --- src/conf/domain_conf.h | 31 ++++++++++++++++++++++++++ src/libxl/libxl_conf.c | 3 ++- src/libxl/libxl_domain.c | 8 +++++++ src/libxl/libxl_domain.h | 1 + src/lxc/lxc_conf.c | 3 ++- src/lxc/lxc_domain.c | 7 ++++++ src/lxc/lxc_domain.h | 1 + src/qemu/qemu_conf.c | 2 +- src/qemu/qemu_domain.c | 39 +++++++++++++++++++++++++++++++++ src/qemu/qemu_domain.h | 6 +++++ src/test/test_driver.c | 47 +++++++++++++++++++++++++++++++++++++++- 11 files changed, 144 insertions(+), 4 deletions(-) diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 14fb9777de..3bb1092b60 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -90,6 +90,37 @@ typedef enum { VIR_DOMAIN_DEVICE_LAST } virDomainDeviceType; =20 +typedef enum { + VIR_DOMAIN_DEVICE_FLAG_NONE =3D (1 << VIR_DOMAIN_DEVICE_NONE), + VIR_DOMAIN_DEVICE_FLAG_DISK =3D (1 << VIR_DOMAIN_DEVICE_DISK), + VIR_DOMAIN_DEVICE_FLAG_LEASE =3D (1 << VIR_DOMAIN_DEVICE_LEASE), + VIR_DOMAIN_DEVICE_FLAG_FS =3D (1 << VIR_DOMAIN_DEVICE_FS), + VIR_DOMAIN_DEVICE_FLAG_NET =3D (1 << VIR_DOMAIN_DEVICE_NET), + VIR_DOMAIN_DEVICE_FLAG_INPUT =3D (1 << VIR_DOMAIN_DEVICE_INPUT), + VIR_DOMAIN_DEVICE_FLAG_SOUND =3D (1 << VIR_DOMAIN_DEVICE_SOUND), + VIR_DOMAIN_DEVICE_FLAG_VIDEO =3D (1 << VIR_DOMAIN_DEVICE_VIDEO), + VIR_DOMAIN_DEVICE_FLAG_HOSTDEV =3D (1 << VIR_DOMAIN_DEVICE_HOSTDEV), + VIR_DOMAIN_DEVICE_FLAG_WATCHDOG =3D (1 << VIR_DOMAIN_DEVICE_WATCHDOG), + VIR_DOMAIN_DEVICE_FLAG_CONTROLLER =3D (1 << VIR_DOMAIN_DEVICE_CONTROLL= ER), + VIR_DOMAIN_DEVICE_FLAG_GRAPHICS =3D (1 << VIR_DOMAIN_DEVICE_GRAPHICS), + VIR_DOMAIN_DEVICE_FLAG_HUB =3D (1 << VIR_DOMAIN_DEVICE_HUB), + VIR_DOMAIN_DEVICE_FLAG_REDIRDEV =3D (1 << VIR_DOMAIN_DEVICE_REDIRDEV), + VIR_DOMAIN_DEVICE_FLAG_SMARTCARD =3D (1 << VIR_DOMAIN_DEVICE_SMARTCARD= ), + VIR_DOMAIN_DEVICE_FLAG_CHR =3D (1 << VIR_DOMAIN_DEVICE_CHR), + VIR_DOMAIN_DEVICE_FLAG_MEMBALLOON =3D (1 << VIR_DOMAIN_DEVICE_MEMBALLO= ON), + VIR_DOMAIN_DEVICE_FLAG_NVRAM =3D (1 << VIR_DOMAIN_DEVICE_NVRAM), + VIR_DOMAIN_DEVICE_FLAG_RNG =3D (1 << VIR_DOMAIN_DEVICE_RNG), + VIR_DOMAIN_DEVICE_FLAG_SHMEM =3D (1 << VIR_DOMAIN_DEVICE_SHMEM), + VIR_DOMAIN_DEVICE_FLAG_TPM =3D (1 << VIR_DOMAIN_DEVICE_TPM), + VIR_DOMAIN_DEVICE_FLAG_PANIC =3D (1 << VIR_DOMAIN_DEVICE_PANIC), + VIR_DOMAIN_DEVICE_FLAG_MEMORY =3D (1 << VIR_DOMAIN_DEVICE_MEMORY), + VIR_DOMAIN_DEVICE_FLAG_IOMMU =3D (1 << VIR_DOMAIN_DEVICE_IOMMU), + VIR_DOMAIN_DEVICE_FLAG_VSOCK =3D (1 << VIR_DOMAIN_DEVICE_VSOCK), + VIR_DOMAIN_DEVICE_FLAG_AUDIO =3D (1 << VIR_DOMAIN_DEVICE_AUDIO), + + VIR_DOMAIN_DEVICE_FLAG_LAST =3D (1 << VIR_DOMAIN_DEVICE_LAST) +} virDomainDeviceTypeFlags; + struct _virDomainDeviceDef { int type; /* enum virDomainDeviceType */ union { diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c index 032f7196c2..aaf4a134a9 100644 --- a/src/libxl/libxl_conf.c +++ b/src/libxl/libxl_conf.c @@ -2486,5 +2486,6 @@ libxlCreateXMLConf(libxlDriverPrivate *driver) return virDomainXMLOptionNew(&libxlDomainDefParserConfig, &libxlDomainXMLPrivateDataCallbacks, &libxlDriverDomainXMLNamespace, - NULL, NULL, NULL); + NULL, NULL, + &libxlDriverDeviceDefOpsCallbacks); } diff --git a/src/libxl/libxl_domain.c b/src/libxl/libxl_domain.c index 577985b5ea..e20adfd846 100644 --- a/src/libxl/libxl_domain.c +++ b/src/libxl/libxl_domain.c @@ -1599,3 +1599,11 @@ virXMLNamespace libxlDriverDomainXMLNamespace =3D { .prefix =3D "xen", .uri =3D "http://libvirt.org/schemas/domain/xen/1.0", }; + + +virDomainDeviceDefOperationsCallbacks libxlDriverDeviceDefOpsCallbacks =3D= { + .detachFlags =3D VIR_DOMAIN_DEVICE_FLAG_DISK | + VIR_DOMAIN_DEVICE_FLAG_NET | + VIR_DOMAIN_DEVICE_FLAG_HOSTDEV | + VIR_DOMAIN_DEVICE_FLAG_CONTROLLER, +}; diff --git a/src/libxl/libxl_domain.h b/src/libxl/libxl_domain.h index 981bfc2bca..1534597cd9 100644 --- a/src/libxl/libxl_domain.h +++ b/src/libxl/libxl_domain.h @@ -68,6 +68,7 @@ struct _libxlDomainObjPrivate { extern virDomainXMLPrivateDataCallbacks libxlDomainXMLPrivateDataCallbacks; extern virDomainDefParserConfig libxlDomainDefParserConfig; extern virXMLNamespace libxlDriverDomainXMLNamespace; +extern virDomainDeviceDefOperationsCallbacks libxlDriverDeviceDefOpsCallba= cks; extern const struct libxl_event_hooks ev_hooks; =20 int diff --git a/src/lxc/lxc_conf.c b/src/lxc/lxc_conf.c index 01a159438e..49b42033d3 100644 --- a/src/lxc/lxc_conf.c +++ b/src/lxc/lxc_conf.c @@ -190,7 +190,8 @@ lxcDomainXMLConfInit(virLXCDriver *driver, const char *= defsecmodel) return virDomainXMLOptionNew(&virLXCDriverDomainDefParserConfig, &virLXCDriverPrivateDataCallbacks, &virLXCDriverDomainXMLNamespace, - NULL, NULL, NULL); + NULL, NULL, + &virLXCDriverDeviceDefOpsCallbacks); } =20 =20 diff --git a/src/lxc/lxc_domain.c b/src/lxc/lxc_domain.c index 0920e91fd1..5c3bc89c1c 100644 --- a/src/lxc/lxc_domain.c +++ b/src/lxc/lxc_domain.c @@ -496,3 +496,10 @@ virLXCDomainSetRunlevel(virDomainObj *vm, data.st_valid =3D NULL; return ret; } + + +virDomainDeviceDefOperationsCallbacks virLXCDriverDeviceDefOpsCallbacks = =3D { + .detachFlags =3D VIR_DOMAIN_DEVICE_FLAG_DISK | + VIR_DOMAIN_DEVICE_FLAG_NET | + VIR_DOMAIN_DEVICE_FLAG_HOSTDEV, +}; diff --git a/src/lxc/lxc_domain.h b/src/lxc/lxc_domain.h index 766837bdf1..2bdd67886e 100644 --- a/src/lxc/lxc_domain.h +++ b/src/lxc/lxc_domain.h @@ -92,6 +92,7 @@ struct _virLXCDomainObjPrivate { extern virXMLNamespace virLXCDriverDomainXMLNamespace; extern virDomainXMLPrivateDataCallbacks virLXCDriverPrivateDataCallbacks; extern virDomainDefParserConfig virLXCDriverDomainDefParserConfig; +extern virDomainDeviceDefOperationsCallbacks virLXCDriverDeviceDefOpsCallb= acks; =20 int virLXCDomainObjBeginJob(virLXCDriver *driver, diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c index 8b2926f766..aad361034a 100644 --- a/src/qemu/qemu_conf.c +++ b/src/qemu/qemu_conf.c @@ -1297,7 +1297,7 @@ virQEMUDriverCreateXMLConf(virQEMUDriver *driver, &virQEMUDriverDomainXMLNamespace, &virQEMUDriverDomainABIStability, &virQEMUDriverDomainSaveCookie, - NULL); + &virQEMUDriverDeviceDefOpsCallbacks); } =20 =20 diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 14b585c6e9..bbf9804f09 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -29,6 +29,7 @@ #include "qemu_process.h" #include "qemu_capabilities.h" #include "qemu_hostdev.h" +#include "qemu_hotplug.h" #include "qemu_migration.h" #include "qemu_migration_params.h" #include "qemu_security.h" @@ -11563,6 +11564,24 @@ qemuDomainDeviceBackendChardevForeachOne(virDomain= DeviceDef *dev, return 0; } =20 + +int +qemuDomainDetachDeviceChrConfig(virDomainDef *vmdef, + virDomainDeviceDef *dev, + unsigned int flags) +{ + virDomainChrDef *chr; + + virCheckFlags(VIR_DOMAIN_AFFECT_CONFIG, -1); + + if (!(chr =3D qemuDomainChrRemove(vmdef, dev->data.chr))) + return -1; + + virDomainChrDefFree(chr); + + return 0; +} + struct qemuDomainDeviceBackendChardevIterData { qemuDomainDeviceBackendChardevForeachCallback cb; void *cbdata; @@ -11605,3 +11624,23 @@ qemuDomainDeviceBackendChardevForeach(virDomainDef= *def, DOMAIN_DEVICE_ITERATE_MISSING_I= NFO, &data); } + + +virDomainDeviceDefOperationsCallbacks virQEMUDriverDeviceDefOpsCallbacks = =3D { + .detachChr =3D qemuDomainDetachDeviceChrConfig, + .detachFlags =3D VIR_DOMAIN_DEVICE_FLAG_DISK | + VIR_DOMAIN_DEVICE_FLAG_NET | + VIR_DOMAIN_DEVICE_FLAG_SOUND | + VIR_DOMAIN_DEVICE_FLAG_HOSTDEV | + VIR_DOMAIN_DEVICE_FLAG_LEASE | + VIR_DOMAIN_DEVICE_FLAG_CONTROLLER | + VIR_DOMAIN_DEVICE_FLAG_CHR | + VIR_DOMAIN_DEVICE_FLAG_FS | + VIR_DOMAIN_DEVICE_FLAG_RNG | + VIR_DOMAIN_DEVICE_FLAG_MEMORY | + VIR_DOMAIN_DEVICE_FLAG_REDIRDEV | + VIR_DOMAIN_DEVICE_FLAG_SHMEM | + VIR_DOMAIN_DEVICE_FLAG_WATCHDOG | + VIR_DOMAIN_DEVICE_FLAG_INPUT | + VIR_DOMAIN_DEVICE_FLAG_VSOCK, +}; diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h index 78474b3f73..79c0fcfe33 100644 --- a/src/qemu/qemu_domain.h +++ b/src/qemu/qemu_domain.h @@ -723,6 +723,7 @@ void qemuDomainObjPrivateDataClear(qemuDomainObjPrivate= *priv); extern virDomainXMLPrivateDataCallbacks virQEMUDriverPrivateDataCallbacks; extern virXMLNamespace virQEMUDriverDomainXMLNamespace; extern virDomainDefParserConfig virQEMUDriverDomainDefParserConfig; +extern virDomainDeviceDefOperationsCallbacks virQEMUDriverDeviceDefOpsCall= backs; extern virDomainABIStability virQEMUDriverDomainABIStability; extern virSaveCookieCallbacks virQEMUDriverDomainSaveCookie; =20 @@ -1058,3 +1059,8 @@ int qemuDomainDeviceBackendChardevForeach(virDomainDef *def, qemuDomainDeviceBackendChardevForeac= hCallback cb, void *opaque); + +int +qemuDomainDetachDeviceChrConfig(virDomainDef *vmdef, + virDomainDeviceDef *dev, + unsigned int flags); diff --git a/src/test/test_driver.c b/src/test/test_driver.c index e4eb0e87d2..2380c37ddb 100644 --- a/src/test/test_driver.c +++ b/src/test/test_driver.c @@ -431,6 +431,31 @@ testDomainObjPrivateFree(void *data) } =20 =20 +static int +testDomainDetachMemballoonDevice(virDomainDef *vmdef, + virDomainDeviceDef *dev G_GNUC_UNUSED, + unsigned int flags) +{ + if (flags & VIR_DOMAIN_AFFECT_LIVE) { + virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", + _("detach memballon device on running domain " + "is not supported")); + return -1; + } + + if (!vmdef->memballoon) { + virReportError(VIR_ERR_DEVICE_MISSING, "%s", + _("no memballoon device was found")); + return -1; + } + + virDomainMemballoonDefFree(vmdef->memballoon); + vmdef->memballoon =3D NULL; + + return 0; +} + + static testDriver * testDriverNew(void) { @@ -454,6 +479,26 @@ testDriverNew(void) .alloc =3D testDomainObjPrivateAlloc, .free =3D testDomainObjPrivateFree, }; + virDomainDeviceDefOperationsCallbacks deviceOps =3D { + .detachMemballoon =3D testDomainDetachMemballoonDevice, + .detachFlags =3D VIR_DOMAIN_DEVICE_FLAG_DISK | + VIR_DOMAIN_DEVICE_FLAG_NET | + VIR_DOMAIN_DEVICE_FLAG_SOUND | + VIR_DOMAIN_DEVICE_FLAG_HOSTDEV | + VIR_DOMAIN_DEVICE_FLAG_LEASE | + VIR_DOMAIN_DEVICE_FLAG_CONTROLLER | + VIR_DOMAIN_DEVICE_FLAG_CHR | + VIR_DOMAIN_DEVICE_FLAG_FS | + VIR_DOMAIN_DEVICE_FLAG_RNG | + VIR_DOMAIN_DEVICE_FLAG_MEMORY | + VIR_DOMAIN_DEVICE_FLAG_REDIRDEV | + VIR_DOMAIN_DEVICE_FLAG_SHMEM | + VIR_DOMAIN_DEVICE_FLAG_WATCHDOG | + VIR_DOMAIN_DEVICE_FLAG_INPUT | + VIR_DOMAIN_DEVICE_FLAG_VSOCK | + VIR_DOMAIN_DEVICE_FLAG_TPM | + VIR_DOMAIN_DEVICE_FLAG_MEMBALLOON, + }; testDriver *ret; =20 if (testDriverInitialize() < 0) @@ -463,7 +508,7 @@ testDriverNew(void) return NULL; =20 if (!(ret->xmlopt =3D virDomainXMLOptionNew(&config, &privatecb, &ns, - NULL, NULL, NULL)) || + NULL, NULL, &deviceOps)) || !(ret->eventState =3D virObjectEventStateNew()) || !(ret->ifaces =3D virInterfaceObjListNew()) || !(ret->domains =3D virDomainObjListNew()) || --=20 2.35.1 From nobody Sat May 11 23:35:20 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) client-ip=170.10.129.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail(p=none dis=none) header.from=gmail.com Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by mx.zohomail.com with SMTPS id 1644219568725348.38922777927075; Sun, 6 Feb 2022 23:39:28 -0800 (PST) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-441-ai876ECCNP-4ED9E5UMCDA-1; Mon, 07 Feb 2022 02:39:26 -0500 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id CAA34874983; Mon, 7 Feb 2022 07:39:21 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id A3F644F84C; Mon, 7 Feb 2022 07:39:21 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 70DB8180B654; Mon, 7 Feb 2022 07:39:21 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 2177cdcV012102 for ; Mon, 7 Feb 2022 02:38:39 -0500 Received: by smtp.corp.redhat.com (Postfix) id A2593C159B3; Mon, 7 Feb 2022 07:38:39 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast02.extmail.prod.ext.rdu2.redhat.com [10.11.55.18]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 9E16CC08090 for ; Mon, 7 Feb 2022 07:38:39 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-2.mimecast.com [205.139.110.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 85B5E802319 for ; Mon, 7 Feb 2022 07:38:39 +0000 (UTC) Received: from mail-pj1-f54.google.com (mail-pj1-f54.google.com [209.85.216.54]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-534-45OOMyZWMaWT-lku8vWcEQ-1; Mon, 07 Feb 2022 02:38:37 -0500 Received: by mail-pj1-f54.google.com with SMTP id v13-20020a17090ac90d00b001b87bc106bdso5610555pjt.4 for ; Sun, 06 Feb 2022 23:38:37 -0800 (PST) Received: from localhost ([38.94.108.206]) by smtp.gmail.com with ESMTPSA id c18sm10571201pfp.181.2022.02.06.23.38.35 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 06 Feb 2022 23:38:35 -0800 (PST) X-MC-Unique: ai876ECCNP-4ED9E5UMCDA-1 X-MC-Unique: 45OOMyZWMaWT-lku8vWcEQ-1 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=lFjqcEXKJhZUun0BGCtBvTOlrqKqPz9rS1sLCpVTMP4=; b=48Gdopo0EeODOUX1eiOFwTBmPuAlxUPAPc9ZvYuq+dbO3Y509NGZoYftqQRS84YY4i toGUDOCE7HoZzh7qIPayJvfIWFZX8tqjQWZm1ZWYQnAZZoFkY/tvrU1COdK6RVMZ+wkh HMBoGqGfBt+z804Gsfztva+/m2M/vfatug+rxEFVwZNOZ+po8qrkHvQtIBx021qqqK9L fK38V08Al9ZJ9dmFAjTXkxVP8zKQSRcfZoBJXbednF+sRZv6YLBimPEf9l517zStDHUl f5bNQlCSI5DO5T2rGHh5y/Jo0TdN5nV2++N35fl9PuIy+b7eBzH4Ajxhip4BXOQDBQt5 LLdA== X-Gm-Message-State: AOAM530ZtBai2AL4lPZchKF+ySMz5RfgNX+h3Xs3S9uW/qSphVvdlSx9 p0HlvUtidhV7V8CIIGsyvuIlA0H7jYsxXJDCPbM= X-Google-Smtp-Source: ABdhPJwWvobUXh/hY12oZjklWAHmD9DErArwCvv5LbX+toeUtf0btuH7/k31QiYOwdMYUPS94JhIMQ== X-Received: by 2002:a17:90b:3146:: with SMTP id ip6mr17257582pjb.208.1644219516106; Sun, 06 Feb 2022 23:38:36 -0800 (PST) From: Luke Yue To: libvir-list@redhat.com Subject: [PATCH v5 4/8] conf: Add tpm helpers for future use Date: Mon, 7 Feb 2022 15:38:14 +0800 Message-Id: <20220207073818.356659-5-lukedyue@gmail.com> In-Reply-To: <20220207073818.356659-1-lukedyue@gmail.com> References: <20220207073818.356659-1-lukedyue@gmail.com> MIME-Version: 1.0 X-Mimecast-Impersonation-Protect: Policy=CLT - Impersonation Protection Definition; Similar Internal Domain=false; Similar Monitored External Domain=false; Custom External Domain=false; Mimecast External Domain=false; Newly Observed Domain=false; Internal User Name=false; Custom Display Name List=false; Reply-to Address Mismatch=false; Targeted Threat Dictionary=false; Mimecast Threat Dictionary=false; Custom Threat Dictionary=false X-Scanned-By: MIMEDefang 2.85 on 10.11.54.8 X-loop: libvir-list@redhat.com X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZM-MESSAGEID: 1644219579667100001 Content-Type: text/plain; charset="utf-8" Signed-off-by: Luke Yue --- As persistent_state and is bool type and its default value is false, so I guess it's fine that it's not explicitly assigned with false. link to context: https://listman.redhat.com/archives/libvir-list/2021-Novem= ber/msg00874.html --- src/conf/domain_conf.c | 67 ++++++++++++++++++++++++++++++++++++++++ src/conf/domain_conf.h | 6 ++++ src/libvirt_private.syms | 2 ++ 3 files changed, 75 insertions(+) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index e19e3deb17..27643cab16 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -16768,6 +16768,73 @@ virDomainVsockDefEquals(const virDomainVsockDef *a, } =20 =20 +static bool +virDomainTPMDefEquals(const virDomainTPMDef *a, + const virDomainTPMDef *b) +{ + if (a->type !=3D b->type) + return false; + + if (a->model !=3D b->model && a->model !=3D VIR_DOMAIN_TPM_MODEL_DEFAU= LT) + return false; + + if (a->version !=3D b->version && a->version !=3D VIR_DOMAIN_TPM_MODEL= _DEFAULT) + return false; + + if (a->type =3D=3D VIR_DOMAIN_TPM_TYPE_PASSTHROUGH) { + if (STRNEQ_NULLABLE(a->data.passthrough.source->data.file.path, + b->data.passthrough.source->data.file.path)) + return false; + } else { + if (a->data.emulator.hassecretuuid !=3D b->data.emulator.hassecret= uuid) + return false; + + if (a->data.emulator.hassecretuuid =3D=3D true && + memcmp(a->data.emulator.secretuuid, + b->data.emulator.secretuuid, + VIR_UUID_BUFLEN)) + return false; + + if (a->data.emulator.persistent_state !=3D + b->data.emulator.persistent_state) + return false; + } + + if (a->info.type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE && + !virDomainDeviceInfoAddressIsEqual(&a->info, &b->info)) + return false; + + return true; +} + + +ssize_t +virDomainTPMDefFind(const virDomainDef *def, + const virDomainTPMDef *tpm) +{ + size_t i; + + for (i =3D 0; i < def->ntpms; i++) { + if (virDomainTPMDefEquals(tpm, def->tpms[i])) + return i; + } + + return -1; +} + + +virDomainTPMDef * +virDomainTPMDefRemove(virDomainDef *def, + size_t idx) +{ + virDomainTPMDef *ret =3D def->tpms[idx]; + + VIR_DELETE_ELEMENT(def->tpms, idx, def->ntpms); + + return ret; +} + + char * virDomainDefGetDefaultEmulator(virDomainDef *def, virCaps *caps) diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 3bb1092b60..89031639cb 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -3941,6 +3941,12 @@ bool virDomainVsockDefEquals(const virDomainVsockDef= *a, const virDomainVsockDef *b) ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) G_GNUC_WARN_UNUSED_RESULT; =20 +ssize_t virDomainTPMDefFind(const virDomainDef *def, + const virDomainTPMDef *tpm) + ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) G_GNUC_WARN_UNUSED_RESULT; +virDomainTPMDef *virDomainTPMDefRemove(virDomainDef *def, size_t idx) + ATTRIBUTE_NONNULL(1); + VIR_ENUM_DECL(virDomainTaint); VIR_ENUM_DECL(virDomainTaintMessage); VIR_ENUM_DECL(virDomainVirt); diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index abdc8eaef7..b6b8606063 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -667,7 +667,9 @@ virDomainTimerTrackTypeFromString; virDomainTimerTrackTypeToString; virDomainTPMBackendTypeFromString; virDomainTPMBackendTypeToString; +virDomainTPMDefFind; virDomainTPMDefFree; +virDomainTPMDefRemove; virDomainTPMModelTypeFromString; virDomainTPMModelTypeToString; virDomainTPMPcrBankTypeFromString; --=20 2.35.1 From nobody Sat May 11 23:35:20 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) client-ip=170.10.133.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail(p=none dis=none) header.from=gmail.com Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by mx.zohomail.com with SMTPS id 1644219680910131.24373467661997; Sun, 6 Feb 2022 23:41:20 -0800 (PST) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-604-8fIBwhPhMPKBbEg0W77tWg-1; Mon, 07 Feb 2022 02:41:16 -0500 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 690BD84DA49; Mon, 7 Feb 2022 07:41:10 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 45EF85E4B8; Mon, 7 Feb 2022 07:41:10 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 1567918095C9; Mon, 7 Feb 2022 07:41:10 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 2177chhi012112 for ; Mon, 7 Feb 2022 02:38:43 -0500 Received: by smtp.corp.redhat.com (Postfix) id 28CC7C1914B; Mon, 7 Feb 2022 07:38:43 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast05.extmail.prod.ext.rdu2.redhat.com [10.11.55.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 2448FC1914A for ; Mon, 7 Feb 2022 07:38:43 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-delivery-1.mimecast.com [205.139.110.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 03637801E8D for ; Mon, 7 Feb 2022 07:38:43 +0000 (UTC) Received: from mail-pj1-f51.google.com (mail-pj1-f51.google.com [209.85.216.51]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-306-q8wSkmgTP-e8tsh5dCtUsA-1; Mon, 07 Feb 2022 02:38:41 -0500 Received: by mail-pj1-f51.google.com with SMTP id v5-20020a17090a4ec500b001b8b702df57so2235560pjl.2 for ; Sun, 06 Feb 2022 23:38:40 -0800 (PST) Received: from localhost ([38.94.108.206]) by smtp.gmail.com with ESMTPSA id om18sm10156917pjb.39.2022.02.06.23.38.38 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 06 Feb 2022 23:38:38 -0800 (PST) X-MC-Unique: 8fIBwhPhMPKBbEg0W77tWg-1 X-MC-Unique: q8wSkmgTP-e8tsh5dCtUsA-1 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=5nmcdFOru6mQvZE8cKNqbmxJxF6dgSF1AAjrSjPGsn4=; b=o9GUKYz/FnW9d0LlVC3p7Am/vcNVmAZ4umeJGokMtQzo1l03AiDDM1lQ7yPOhJwHrq 4IoE4VSG1gQH4u2KybQyftd0e/c1gGCV90+Ep4g82wAwLJqqLy8LQ8i1trnTxX0AIEL4 G9E3+hxZ8S2bOZgJo9DDysh/Geu6dFzKEmTUt+AYDDmpJEJBiQ40dpV0selVHa++4cPB SAZCzzqJIhBN+nSYD2jO2ovZiKyTTOd91K5pe0iGDQFvsmz/BICwoxYIy6dRbANacVoC LwZd3NSmTk9Fkko/0RWTViAMfC968JzRH47fF508QV8lR42XZkEwoHtZHsskZg5ozZ9e Nd1A== X-Gm-Message-State: AOAM530zr7Ax2W5BX5/r8yZVP9qe2wUa6fHrjHYFSDsmgNPhpxzP4iov YzlkIWoDxNruJKCVhwKeuLXCuXNl+bBdj5S0mtY= X-Google-Smtp-Source: ABdhPJxU/yeExxKUzgRJgJIsLW6D9tLB+Qm0Y2RUIYRhiPPUKbcZxhaz5a00+heegHgwfM9yHSoHcw== X-Received: by 2002:a17:90a:2fc5:: with SMTP id n5mr12579982pjm.67.1644219519139; Sun, 06 Feb 2022 23:38:39 -0800 (PST) From: Luke Yue To: libvir-list@redhat.com Subject: [PATCH v5 5/8] domain_driver: extract DetachXXXDeviceConfig related functions and use them Date: Mon, 7 Feb 2022 15:38:15 +0800 Message-Id: <20220207073818.356659-6-lukedyue@gmail.com> In-Reply-To: <20220207073818.356659-1-lukedyue@gmail.com> References: <20220207073818.356659-1-lukedyue@gmail.com> MIME-Version: 1.0 X-Mimecast-Impersonation-Protect: Policy=CLT - Impersonation Protection Definition; Similar Internal Domain=false; Similar Monitored External Domain=false; Custom External Domain=false; Mimecast External Domain=false; Newly Observed Domain=false; Internal User Name=false; Custom Display Name List=false; Reply-to Address Mismatch=false; Targeted Threat Dictionary=false; Mimecast Threat Dictionary=false; Custom Threat Dictionary=false X-Scanned-By: MIMEDefang 2.85 on 10.11.54.8 X-loop: libvir-list@redhat.com X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZM-MESSAGEID: 1644219682357100001 Content-Type: text/plain; charset="utf-8" libxl / LXC / QEMU drivers share some common codes in their DomainDetachDeviceConfig functions, so extract them to domain_conf and use them with xmlopt etc to deduplicate the bigger function. At the same time, this will enable test driver to test these functions in the future. Signed-off-by: Luke Yue --- Compare to the v3, I remove the random comments, and align the error messages, also add virDomainDetachChrDeviceConfig by using xmlopt. Th= en I got a lot of choices here: 1. Just cleanup these functions and using them in drivers, just like what I= did in the previous patch. 2. Add a bigger de-duplicated function to de-duplicate the function in libx= l / LXC / QEMU drivers, and this is what I choose in this patch. 3. Merge all the functions into the bigger one, instead of splitting them This would still de-duplicate the functions in libxl / LXC / QEMU driver= s. I choose the second here as I think there would be a situation that both these single device detach functions and the bigger function would be used in drivers. --- src/conf/domain_conf.c | 487 +++++++++++++++++++++++++++++++++++++++ src/conf/domain_conf.h | 78 +++++++ src/libvirt_private.syms | 18 ++ src/libxl/libxl_driver.c | 73 +----- src/lxc/lxc_driver.c | 62 +---- src/qemu/qemu_driver.c | 207 +---------------- 6 files changed, 610 insertions(+), 315 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 27643cab16..ab2e1f2e36 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -31576,3 +31576,490 @@ virDomainObjGetMessages(virDomainObj *vm, =20 return rv; } + + +int +virDomainDetachDiskDeviceConfig(virDomainDef *vmdef, + virDomainDeviceDef *dev) +{ + virDomainDiskDef *disk; + virDomainDiskDef *det_disk; + + disk =3D dev->data.disk; + if (!(det_disk =3D virDomainDiskRemoveByName(vmdef, disk->dst))) { + virReportError(VIR_ERR_DEVICE_MISSING, + _("no matching disk device %s was found"), + disk->dst); + return -1; + } + + virDomainDiskDefFree(det_disk); + + return 0; +} + + +int +virDomainDetachNetDeviceConfig(virDomainDef *vmdef, + virDomainDeviceDef *dev) +{ + virDomainNetDef *net; + int idx; + + net =3D dev->data.net; + if ((idx =3D virDomainNetFindIdx(vmdef, net)) < 0) { + virReportError(VIR_ERR_DEVICE_MISSING, "%s", + _("no matching net device was found")); + return -1; + } + + virDomainNetDefFree(virDomainNetRemove(vmdef, idx)); + + return 0; +} + + +int +virDomainDetachSoundDeviceConfig(virDomainDef *vmdef, + virDomainDeviceDef *dev) +{ + virDomainSoundDef *sound; + int idx; + + sound =3D dev->data.sound; + if ((idx =3D virDomainSoundDefFind(vmdef, sound)) < 0) { + virReportError(VIR_ERR_DEVICE_MISSING, "%s", + _("no matching sound device was found")); + return -1; + } + + virDomainSoundDefFree(virDomainSoundDefRemove(vmdef, idx)); + + return 0; +} + + +int +virDomainDetachHostdevDeviceConfig(virDomainDef *vmdef, + virDomainDeviceDef *dev) +{ + virDomainHostdevDef *hostdev; + virDomainHostdevDef *det_hostdev; + int idx; + + hostdev =3D dev->data.hostdev; + if ((idx =3D virDomainHostdevFind(vmdef, hostdev, &det_hostdev)) < 0) { + virReportError(VIR_ERR_DEVICE_MISSING, "%s", + _("no matching hostdev device was found")); + return -1; + } + + virDomainHostdevDefFree(virDomainHostdevRemove(vmdef, idx)); + + return 0; +} + + +int +virDomainDetachLeaseDeviceConfig(virDomainDef *vmdef, + virDomainDeviceDef *dev) +{ + virDomainLeaseDef *lease; + virDomainLeaseDef *det_lease; + + lease =3D dev->data.lease; + if (!(det_lease =3D virDomainLeaseRemove(vmdef, lease))) { + virReportError(VIR_ERR_DEVICE_MISSING, + _("no matching lease %s in lockspace %s was found"), + lease->key, NULLSTR(lease->lockspace)); + return -1; + } + + virDomainLeaseDefFree(det_lease); + + return 0; +} + + +int +virDomainDetachControllerDeviceConfig(virDomainDef *vmdef, + virDomainDeviceDef *dev) +{ + virDomainControllerDef *cont; + int idx; + + cont =3D dev->data.controller; + if ((idx =3D virDomainControllerFind(vmdef, cont->type, cont->idx)) < = 0) { + virReportError(VIR_ERR_DEVICE_MISSING, "%s", + _("no matching controller device was found")); + return -1; + } + + virDomainControllerDefFree(virDomainControllerRemove(vmdef, idx)); + + return 0; +} + + +int +virDomainDetachFSDeviceConfig(virDomainDef *vmdef, + virDomainDeviceDef *dev) +{ + virDomainFSDef *fs; + int idx; + + fs =3D dev->data.fs; + if ((idx =3D virDomainFSIndexByName(vmdef, fs->dst)) < 0) { + virReportError(VIR_ERR_DEVICE_MISSING, "%s", + _("no matching filesystem device was found")); + return -1; + } + + virDomainFSDefFree(virDomainFSRemove(vmdef, idx)); + + return 0; +} + + +int +virDomainDetachRNGDeviceConfig(virDomainDef *vmdef, + virDomainDeviceDef *dev) +{ + int idx; + + if ((idx =3D virDomainRNGFind(vmdef, dev->data.rng)) < 0) { + virReportError(VIR_ERR_DEVICE_MISSING, "%s", + _("no matching RNG device was found")); + return -1; + } + + virDomainRNGDefFree(virDomainRNGRemove(vmdef, idx)); + + return 0; +} + + +int +virDomainDetachMemoryDeviceConfig(virDomainDef *vmdef, + virDomainDeviceDef *dev) +{ + virDomainMemoryDef *mem; + int idx; + + if ((idx =3D virDomainMemoryFindInactiveByDef(vmdef, + dev->data.memory)) < 0) { + virReportError(VIR_ERR_DEVICE_MISSING, "%s", + _("no matching memory device was found")); + return -1; + } + + mem =3D virDomainMemoryRemove(vmdef, idx); + vmdef->mem.cur_balloon -=3D mem->size; + virDomainMemoryDefFree(mem); + + return 0; +} + + +int +virDomainDetachRedirdevDeviceConfig(virDomainDef *vmdef, + virDomainDeviceDef *dev) +{ + int idx; + + if ((idx =3D virDomainRedirdevDefFind(vmdef, + dev->data.redirdev)) < 0) { + virReportError(VIR_ERR_DEVICE_MISSING, "%s", + _("no matching redirdev was found")); + return -1; + } + + virDomainRedirdevDefFree(virDomainRedirdevDefRemove(vmdef, idx)); + + return 0; +} + + +int +virDomainDetachShmemDeviceConfig(virDomainDef *vmdef, + virDomainDeviceDef *dev) +{ + int idx; + + if ((idx =3D virDomainShmemDefFind(vmdef, dev->data.shmem)) < 0) { + virReportError(VIR_ERR_DEVICE_MISSING, "%s", + _("no matching shmem device was found")); + return -1; + } + + virDomainShmemDefFree(virDomainShmemDefRemove(vmdef, idx)); + + return 0; +} + + +int +virDomainDetachWatchdogDeviceConfig(virDomainDef *vmdef) +{ + if (!vmdef->watchdog) { + virReportError(VIR_ERR_DEVICE_MISSING, "%s", + _("no matching watch dog device was found")); + return -1; + } + + virDomainWatchdogDefFree(vmdef->watchdog); + vmdef->watchdog =3D NULL; + + return 0; +} + + +int +virDomainDetachInputDeviceConfig(virDomainDef *vmdef, + virDomainDeviceDef *dev) +{ + int idx; + + if ((idx =3D virDomainInputDefFind(vmdef, dev->data.input)) < 0) { + virReportError(VIR_ERR_DEVICE_MISSING, "%s", + _("no matching input device was found")); + return -1; + } + + virDomainInputDefFree(virDomainInputDefRemove(vmdef, idx)); + + return 0; +} + + +int +virDomainDetachVsockDeviceConfig(virDomainDef *vmdef, + virDomainDeviceDef *dev) +{ + if (!vmdef->vsock || + !virDomainVsockDefEquals(dev->data.vsock, vmdef->vsock)) { + virReportError(VIR_ERR_DEVICE_MISSING, "%s", + _("no matching vsock device was found")); + return -1; + } + + virDomainVsockDefFree(vmdef->vsock); + vmdef->vsock =3D NULL; + + return 0; +} + + +int +virDomainDetachTPMDeviceConfig(virDomainDef *vmdef, + virDomainDeviceDef *dev) +{ + int idx; + + if ((idx =3D virDomainTPMDefFind(vmdef, dev->data.tpm)) < 0) { + virReportError(VIR_ERR_DEVICE_MISSING, "%s", + _("no matching tpm device was found")); + return -1; + } + + virDomainTPMDefFree(virDomainTPMDefRemove(vmdef, idx)); + + return 0; +} + + +int +virDomainDetachChrDeviceConfig(virDomainDef *vmdef, + virDomainDeviceDef *dev, + virDomainXMLOption *xmlopt, + unsigned int flags) +{ + virDomainChrDef *chr; + + if (xmlopt && xmlopt->deviceOps.detachChr) { + return xmlopt->deviceOps.detachChr(vmdef, dev, flags); + } + + if (!(chr =3D virDomainChrRemove(vmdef, dev->data.chr))) { + virReportError(VIR_ERR_DEVICE_MISSING, "%s", + _("no matching char device was found")); + return -1; + } + + virDomainChrDefFree(chr); + + return 0; +} + + +int +virDomainDetachMemballoonDeviceConfig(virDomainDef *vmdef, + virDomainXMLOption *xmlopt, + unsigned int flags) +{ + if (xmlopt && xmlopt->deviceOps.detachMemballoon) { + return xmlopt->deviceOps.detachMemballoon(vmdef, NULL, flags); + } + + if (!vmdef->memballoon) { + virReportError(VIR_ERR_DEVICE_MISSING, "%s", + _("no matching memballoon device was found")); + return -1; + } + + virDomainMemballoonDefFree(vmdef->memballoon); + vmdef->memballoon =3D NULL; + + return 0; +} + + +int +virDomainDetachDeviceConfig(virDomainDef *vmdef, + virDomainDeviceDef *dev, + void *parseOpaque, + unsigned int flags, + unsigned int parse_flags, + virDomainXMLOption *xmlopt) +{ + int ret =3D 0; + + if (!(xmlopt->deviceOps.detachFlags & (1 << dev->type))) { + ret =3D -1; + goto error; + } + + switch ((virDomainDeviceType) dev->type) { + case VIR_DOMAIN_DEVICE_DISK: + if (virDomainDetachDiskDeviceConfig(vmdef, dev) < 0) + return -1; + + break; + + case VIR_DOMAIN_DEVICE_NET: + if (virDomainDetachNetDeviceConfig(vmdef, dev) < 0) + return -1; + + break; + + case VIR_DOMAIN_DEVICE_SOUND: + if (virDomainDetachSoundDeviceConfig(vmdef, dev) < 0) + return -1; + + break; + + case VIR_DOMAIN_DEVICE_HOSTDEV: + if (virDomainDetachHostdevDeviceConfig(vmdef, dev) < 0) + return -1; + + break; + + case VIR_DOMAIN_DEVICE_LEASE: + if (virDomainDetachLeaseDeviceConfig(vmdef, dev) < 0) + return -1; + + break; + + case VIR_DOMAIN_DEVICE_CONTROLLER: + if (virDomainDetachControllerDeviceConfig(vmdef, dev) < 0) + return -1; + + break; + + case VIR_DOMAIN_DEVICE_FS: + if (virDomainDetachFSDeviceConfig(vmdef, dev) < 0) + return -1; + + break; + + case VIR_DOMAIN_DEVICE_RNG: + if (virDomainDetachRNGDeviceConfig(vmdef, dev) < 0) + return -1; + + break; + + case VIR_DOMAIN_DEVICE_MEMORY: + if (virDomainDetachMemoryDeviceConfig(vmdef, dev) < 0) + return -1; + + break; + + case VIR_DOMAIN_DEVICE_REDIRDEV: + if (virDomainDetachRedirdevDeviceConfig(vmdef, dev) < 0) + return -1; + + break; + + case VIR_DOMAIN_DEVICE_SHMEM: + if (virDomainDetachShmemDeviceConfig(vmdef, dev) < 0) + return -1; + + break; + + case VIR_DOMAIN_DEVICE_WATCHDOG: + if (virDomainDetachWatchdogDeviceConfig(vmdef) < 0) + return -1; + + break; + + case VIR_DOMAIN_DEVICE_INPUT: + if (virDomainDetachInputDeviceConfig(vmdef, dev) < 0) + return -1; + + break; + + case VIR_DOMAIN_DEVICE_VSOCK: + if (virDomainDetachVsockDeviceConfig(vmdef, dev) < 0) + return -1; + + break; + + case VIR_DOMAIN_DEVICE_CHR: + if (virDomainDetachChrDeviceConfig(vmdef, dev, xmlopt, flags) < 0) + return -1; + + break; + + case VIR_DOMAIN_DEVICE_TPM: + if (virDomainDetachTPMDeviceConfig(vmdef, dev) < 0) + return -1; + + break; + + case VIR_DOMAIN_DEVICE_MEMBALLOON: + if (virDomainDetachMemballoonDeviceConfig(vmdef, xmlopt, flags) < = 0) + return -1; + + break; + + case VIR_DOMAIN_DEVICE_VIDEO: + case VIR_DOMAIN_DEVICE_GRAPHICS: + case VIR_DOMAIN_DEVICE_HUB: + case VIR_DOMAIN_DEVICE_SMARTCARD: + case VIR_DOMAIN_DEVICE_NVRAM: + case VIR_DOMAIN_DEVICE_NONE: + case VIR_DOMAIN_DEVICE_PANIC: + case VIR_DOMAIN_DEVICE_IOMMU: + case VIR_DOMAIN_DEVICE_AUDIO: + case VIR_DOMAIN_DEVICE_LAST: + ret =3D -1; + goto error; + } + + if (parseOpaque) { + if (virDomainDefPostParse(vmdef, parse_flags, xmlopt, parseOpaque)= < 0) + return -1; + } + + error: + if (ret < 0) { + /* When using in test driver, flags may + contain VIR_DOMAIN_AFFECT_LIVE */ + virReportError(VIR_ERR_OPERATION_UNSUPPORTED, + _("%sdetach of device '%s' is not supported"), + (!(flags & VIR_DOMAIN_AFFECT_LIVE)) ? "persistent "= : "", + virDomainDeviceTypeToString(dev->type)); + return -1; + } + return 0; +} diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 89031639cb..5348773668 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -4311,3 +4311,81 @@ int virDomainObjGetMessages(virDomainObj *vm, char ***msgs, unsigned int flags); + +int +virDomainDetachDiskDeviceConfig(virDomainDef *vmdef, + virDomainDeviceDef *dev); + +int +virDomainDetachNetDeviceConfig(virDomainDef *vmdef, + virDomainDeviceDef *dev); + +int +virDomainDetachSoundDeviceConfig(virDomainDef *vmdef, + virDomainDeviceDef *dev); + +int +virDomainDetachHostdevDeviceConfig(virDomainDef *vmdef, + virDomainDeviceDef *dev); + +int +virDomainDetachLeaseDeviceConfig(virDomainDef *vmdef, + virDomainDeviceDef *dev); + +int +virDomainDetachControllerDeviceConfig(virDomainDef *vmdef, + virDomainDeviceDef *dev); + +int +virDomainDetachFSDeviceConfig(virDomainDef *vmdef, + virDomainDeviceDef *dev); + +int +virDomainDetachRNGDeviceConfig(virDomainDef *vmdef, + virDomainDeviceDef *dev); + +int +virDomainDetachMemoryDeviceConfig(virDomainDef *vmdef, + virDomainDeviceDef *dev); + +int +virDomainDetachRedirdevDeviceConfig(virDomainDef *vmdef, + virDomainDeviceDef *dev); + +int +virDomainDetachShmemDeviceConfig(virDomainDef *vmdef, + virDomainDeviceDef *dev); + +int +virDomainDetachWatchdogDeviceConfig(virDomainDef *vmdef); + +int +virDomainDetachInputDeviceConfig(virDomainDef *vmdef, + virDomainDeviceDef *dev); + +int +virDomainDetachVsockDeviceConfig(virDomainDef *vmdef, + virDomainDeviceDef *dev); + +int +virDomainDetachTPMDeviceConfig(virDomainDef *vmdef, + virDomainDeviceDef *dev); + +int +virDomainDetachMemballoonDeviceConfig(virDomainDef *vmdef, + virDomainXMLOption *xmlopt, + unsigned int flags); + +int +virDomainDetachChrDeviceConfig(virDomainDef *vmdef, + virDomainDeviceDef *dev, + virDomainXMLOption *xmlopt, + unsigned int flags); + +int +virDomainDetachDeviceConfig(virDomainDef *vmdef, + virDomainDeviceDef *dev, + void *parseOpaque, + unsigned int flags, + unsigned int parse_flags, + virDomainXMLOption *xmlopt); diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index b6b8606063..1b0b3d357d 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -352,6 +352,24 @@ virDomainDefSetVcpus; virDomainDefSetVcpusMax; virDomainDefVcpuOrderClear; virDomainDeleteConfig; +virDomainDetachChrDeviceConfig; +virDomainDetachControllerDeviceConfig; +virDomainDetachDeviceConfig; +virDomainDetachDiskDeviceConfig; +virDomainDetachFSDeviceConfig; +virDomainDetachHostdevDeviceConfig; +virDomainDetachInputDeviceConfig; +virDomainDetachLeaseDeviceConfig; +virDomainDetachMemballoonDeviceConfig; +virDomainDetachMemoryDeviceConfig; +virDomainDetachNetDeviceConfig; +virDomainDetachRedirdevDeviceConfig; +virDomainDetachRNGDeviceConfig; +virDomainDetachShmemDeviceConfig; +virDomainDetachSoundDeviceConfig; +virDomainDetachTPMDeviceConfig; +virDomainDetachVsockDeviceConfig; +virDomainDetachWatchdogDeviceConfig; virDomainDeviceAliasIsUserAlias; virDomainDeviceDefCopy; virDomainDeviceDefFree; diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c index 2d9385654c..26e02497b4 100644 --- a/src/libxl/libxl_driver.c +++ b/src/libxl/libxl_driver.c @@ -3897,68 +3897,14 @@ libxlDomainDetachDeviceLive(libxlDriverPrivate *dri= ver, =20 =20 static int -libxlDomainDetachDeviceConfig(virDomainDef *vmdef, virDomainDeviceDef *dev) +libxlDomainDetachDeviceConfig(virDomainDef *vmdef, + virDomainDeviceDef *dev, + unsigned int flags, + unsigned int parse_flags, + virDomainXMLOption *xmlopt) { - virDomainDiskDef *disk; - virDomainDiskDef *detach; - virDomainHostdevDef *hostdev; - virDomainHostdevDef *det_hostdev; - virDomainControllerDef *cont; - virDomainControllerDef *det_cont; - virDomainNetDef *net; - int idx; - - switch (dev->type) { - case VIR_DOMAIN_DEVICE_DISK: - disk =3D dev->data.disk; - if (!(detach =3D virDomainDiskRemoveByName(vmdef, disk->dst)))= { - virReportError(VIR_ERR_INVALID_ARG, - _("no target device %s"), disk->dst); - return -1; - } - virDomainDiskDefFree(detach); - break; - - case VIR_DOMAIN_DEVICE_CONTROLLER: - cont =3D dev->data.controller; - if ((idx =3D virDomainControllerFind(vmdef, cont->type, - cont->idx)) < 0) { - virReportError(VIR_ERR_INVALID_ARG, "%s", - _("device not present in domain configurati= on")); - return -1; - } - det_cont =3D virDomainControllerRemove(vmdef, idx); - virDomainControllerDefFree(det_cont); - break; - - case VIR_DOMAIN_DEVICE_NET: - net =3D dev->data.net; - if ((idx =3D virDomainNetFindIdx(vmdef, net)) < 0) - return -1; - - /* this is guaranteed to succeed */ - virDomainNetDefFree(virDomainNetRemove(vmdef, idx)); - break; - - case VIR_DOMAIN_DEVICE_HOSTDEV: { - hostdev =3D dev->data.hostdev; - if ((idx =3D virDomainHostdevFind(vmdef, hostdev, &det_hostdev= )) < 0) { - virReportError(VIR_ERR_INVALID_ARG, "%s", - _("device not present in domain configurati= on")); - return -1; - } - virDomainHostdevRemove(vmdef, idx); - virDomainHostdevDefFree(det_hostdev); - break; - } - - default: - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("persistent detach of device is not supported= ")); - return -1; - } - - return 0; + return virDomainDetachDeviceConfig(vmdef, dev, NULL, flags, + parse_flags, xmlopt); } =20 static int @@ -4190,7 +4136,10 @@ libxlDomainDetachDeviceFlags(virDomainPtr dom, const= char *xml, if (!(vmdef =3D virDomainObjCopyPersistentDef(vm, driver->xmlopt, = NULL))) goto endjob; =20 - if (libxlDomainDetachDeviceConfig(vmdef, dev) < 0) + if (libxlDomainDetachDeviceConfig(vmdef, dev, flags, + VIR_DOMAIN_DEF_PARSE_INACTIVE | + VIR_DOMAIN_DEF_PARSE_SKIP_VALIDA= TE, + driver->xmlopt) < 0) goto endjob; } =20 diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c index 3d17b87e8c..b6eb839f4f 100644 --- a/src/lxc/lxc_driver.c +++ b/src/lxc/lxc_driver.c @@ -3093,58 +3093,13 @@ lxcDomainUpdateDeviceConfig(virDomainDef *vmdef, =20 static int lxcDomainDetachDeviceConfig(virDomainDef *vmdef, - virDomainDeviceDef *dev) + virDomainDeviceDef *dev, + unsigned int flags, + unsigned int parse_flags, + virDomainXMLOption *xmlopt) { - int ret =3D -1; - virDomainDiskDef *disk; - virDomainDiskDef *det_disk; - virDomainNetDef *net; - virDomainHostdevDef *hostdev; - virDomainHostdevDef *det_hostdev; - int idx; - - switch (dev->type) { - case VIR_DOMAIN_DEVICE_DISK: - disk =3D dev->data.disk; - if (!(det_disk =3D virDomainDiskRemoveByName(vmdef, disk->dst))) { - virReportError(VIR_ERR_INVALID_ARG, - _("no target device %s"), disk->dst); - return -1; - } - virDomainDiskDefFree(det_disk); - ret =3D 0; - break; - - case VIR_DOMAIN_DEVICE_NET: - net =3D dev->data.net; - if ((idx =3D virDomainNetFindIdx(vmdef, net)) < 0) - return -1; - - /* this is guaranteed to succeed */ - virDomainNetDefFree(virDomainNetRemove(vmdef, idx)); - ret =3D 0; - break; - - case VIR_DOMAIN_DEVICE_HOSTDEV: { - hostdev =3D dev->data.hostdev; - if ((idx =3D virDomainHostdevFind(vmdef, hostdev, &det_hostdev)) <= 0) { - virReportError(VIR_ERR_INVALID_ARG, "%s", - _("device not present in domain configuration")= ); - return -1; - } - virDomainHostdevRemove(vmdef, idx); - virDomainHostdevDefFree(det_hostdev); - ret =3D 0; - break; - } - - default: - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("persistent detach of device is not supported")); - break; - } - - return ret; + return virDomainDetachDeviceConfig(vmdef, dev, NULL, flags, + parse_flags, xmlopt); } =20 =20 @@ -4475,7 +4430,10 @@ static int lxcDomainDetachDeviceFlags(virDomainPtr d= om, if (!vmdef) goto endjob; =20 - if ((ret =3D lxcDomainDetachDeviceConfig(vmdef, dev_copy)) < 0) + if ((ret =3D lxcDomainDetachDeviceConfig(vmdef, dev, flags, + VIR_DOMAIN_DEF_PARSE_INACTI= VE | + VIR_DOMAIN_DEF_PARSE_SKIP_V= ALIDATE, + driver->xmlopt)) < 0) goto endjob; } =20 diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 864ea10685..d625c9be0e 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -7338,207 +7338,12 @@ static int qemuDomainDetachDeviceConfig(virDomainDef *vmdef, virDomainDeviceDef *dev, virQEMUCaps *qemuCaps, + unsigned int flags, unsigned int parse_flags, virDomainXMLOption *xmlopt) { - virDomainDiskDef *disk; - virDomainDiskDef *det_disk; - virDomainNetDef *net; - virDomainSoundDef *sound; - virDomainHostdevDef *hostdev; - virDomainHostdevDef *det_hostdev; - virDomainLeaseDef *lease; - virDomainLeaseDef *det_lease; - virDomainControllerDef *cont; - virDomainControllerDef *det_cont; - virDomainChrDef *chr; - virDomainFSDef *fs; - virDomainMemoryDef *mem; - int idx; - - switch ((virDomainDeviceType)dev->type) { - case VIR_DOMAIN_DEVICE_DISK: - disk =3D dev->data.disk; - if (!(det_disk =3D virDomainDiskRemoveByName(vmdef, disk->dst))) { - virReportError(VIR_ERR_DEVICE_MISSING, - _("no target device %s"), disk->dst); - return -1; - } - virDomainDiskDefFree(det_disk); - break; - - case VIR_DOMAIN_DEVICE_NET: - net =3D dev->data.net; - if ((idx =3D virDomainNetFindIdx(vmdef, net)) < 0) - return -1; - - /* this is guaranteed to succeed */ - virDomainNetDefFree(virDomainNetRemove(vmdef, idx)); - break; - - case VIR_DOMAIN_DEVICE_SOUND: - sound =3D dev->data.sound; - if ((idx =3D virDomainSoundDefFind(vmdef, sound)) < 0) { - virReportError(VIR_ERR_DEVICE_MISSING, "%s", - _("device not present in domain configuration")= ); - return -1; - } - virDomainSoundDefFree(virDomainSoundDefRemove(vmdef, idx)); - break; - - case VIR_DOMAIN_DEVICE_HOSTDEV: { - hostdev =3D dev->data.hostdev; - if ((idx =3D virDomainHostdevFind(vmdef, hostdev, &det_hostdev)) <= 0) { - virReportError(VIR_ERR_DEVICE_MISSING, "%s", - _("device not present in domain configuration")= ); - return -1; - } - virDomainHostdevRemove(vmdef, idx); - virDomainHostdevDefFree(det_hostdev); - break; - } - - case VIR_DOMAIN_DEVICE_LEASE: - lease =3D dev->data.lease; - if (!(det_lease =3D virDomainLeaseRemove(vmdef, lease))) { - virReportError(VIR_ERR_DEVICE_MISSING, - _("Lease %s in lockspace %s does not exist"), - lease->key, NULLSTR(lease->lockspace)); - return -1; - } - virDomainLeaseDefFree(det_lease); - break; - - case VIR_DOMAIN_DEVICE_CONTROLLER: - cont =3D dev->data.controller; - if ((idx =3D virDomainControllerFind(vmdef, cont->type, - cont->idx)) < 0) { - virReportError(VIR_ERR_DEVICE_MISSING, "%s", - _("device not present in domain configuration")= ); - return -1; - } - det_cont =3D virDomainControllerRemove(vmdef, idx); - virDomainControllerDefFree(det_cont); - - break; - - case VIR_DOMAIN_DEVICE_CHR: - if (!(chr =3D qemuDomainChrRemove(vmdef, dev->data.chr))) - return -1; - - virDomainChrDefFree(chr); - break; - - case VIR_DOMAIN_DEVICE_FS: - fs =3D dev->data.fs; - idx =3D virDomainFSIndexByName(vmdef, fs->dst); - if (idx < 0) { - virReportError(VIR_ERR_DEVICE_MISSING, "%s", - _("no matching filesystem device was found")); - return -1; - } - - fs =3D virDomainFSRemove(vmdef, idx); - virDomainFSDefFree(fs); - break; - - case VIR_DOMAIN_DEVICE_RNG: - if ((idx =3D virDomainRNGFind(vmdef, dev->data.rng)) < 0) { - virReportError(VIR_ERR_DEVICE_MISSING, "%s", - _("no matching RNG device was found")); - return -1; - } - - virDomainRNGDefFree(virDomainRNGRemove(vmdef, idx)); - break; - - case VIR_DOMAIN_DEVICE_MEMORY: - if ((idx =3D virDomainMemoryFindInactiveByDef(vmdef, - dev->data.memory)) < 0= ) { - virReportError(VIR_ERR_DEVICE_MISSING, "%s", - _("matching memory device was not found")); - return -1; - } - mem =3D virDomainMemoryRemove(vmdef, idx); - vmdef->mem.cur_balloon -=3D mem->size; - virDomainMemoryDefFree(mem); - break; - - case VIR_DOMAIN_DEVICE_REDIRDEV: - if ((idx =3D virDomainRedirdevDefFind(vmdef, - dev->data.redirdev)) < 0) { - virReportError(VIR_ERR_DEVICE_MISSING, "%s", - _("no matching redirdev was not found")); - return -1; - } - - virDomainRedirdevDefFree(virDomainRedirdevDefRemove(vmdef, idx)); - break; - - case VIR_DOMAIN_DEVICE_SHMEM: - if ((idx =3D virDomainShmemDefFind(vmdef, dev->data.shmem)) < 0) { - virReportError(VIR_ERR_DEVICE_MISSING, "%s", - _("matching shmem device was not found")); - return -1; - } - - virDomainShmemDefFree(virDomainShmemDefRemove(vmdef, idx)); - break; - - - case VIR_DOMAIN_DEVICE_WATCHDOG: - if (!vmdef->watchdog) { - virReportError(VIR_ERR_DEVICE_MISSING, "%s", - _("domain has no watchdog")); - return -1; - } - virDomainWatchdogDefFree(vmdef->watchdog); - vmdef->watchdog =3D NULL; - break; - - case VIR_DOMAIN_DEVICE_INPUT: - if ((idx =3D virDomainInputDefFind(vmdef, dev->data.input)) < 0) { - virReportError(VIR_ERR_DEVICE_MISSING, "%s", - _("matching input device not found")); - return -1; - } - - virDomainInputDefFree(virDomainInputDefRemove(vmdef, idx)); - break; - - case VIR_DOMAIN_DEVICE_VSOCK: - if (!vmdef->vsock || - !virDomainVsockDefEquals(dev->data.vsock, vmdef->vsock)) { - virReportError(VIR_ERR_OPERATION_FAILED, "%s", - _("matching vsock device not found")); - return -1; - } - virDomainVsockDefFree(vmdef->vsock); - vmdef->vsock =3D NULL; - break; - - case VIR_DOMAIN_DEVICE_VIDEO: - case VIR_DOMAIN_DEVICE_GRAPHICS: - case VIR_DOMAIN_DEVICE_HUB: - case VIR_DOMAIN_DEVICE_SMARTCARD: - case VIR_DOMAIN_DEVICE_MEMBALLOON: - case VIR_DOMAIN_DEVICE_NVRAM: - case VIR_DOMAIN_DEVICE_NONE: - case VIR_DOMAIN_DEVICE_TPM: - case VIR_DOMAIN_DEVICE_PANIC: - case VIR_DOMAIN_DEVICE_IOMMU: - case VIR_DOMAIN_DEVICE_AUDIO: - case VIR_DOMAIN_DEVICE_LAST: - virReportError(VIR_ERR_OPERATION_UNSUPPORTED, - _("persistent detach of device '%s' is not supporte= d"), - virDomainDeviceTypeToString(dev->type)); - return -1; - } - - if (virDomainDefPostParse(vmdef, parse_flags, xmlopt, qemuCaps) < 0) - return -1; - - return 0; + return virDomainDetachDeviceConfig(vmdef, dev, qemuCaps, flags, + parse_flags, xmlopt); } =20 static int @@ -7982,8 +7787,8 @@ qemuDomainDetachDeviceLiveAndConfig(virQEMUDriver *dr= iver, if (!vmdef) goto cleanup; =20 - if (qemuDomainDetachDeviceConfig(vmdef, dev_copy, priv->qemuCaps, - parse_flags, + if (qemuDomainDetachDeviceConfig(vmdef, dev, priv->qemuCaps, + flags, parse_flags, driver->xmlopt) < 0) goto cleanup; } @@ -8052,7 +7857,7 @@ qemuDomainDetachDeviceAliasLiveAndConfig(virQEMUDrive= r *driver, if (virDomainDefFindDevice(vmdef, alias, &dev, true) < 0) return -1; =20 - if (qemuDomainDetachDeviceConfig(vmdef, &dev, priv->qemuCaps, + if (qemuDomainDetachDeviceConfig(vmdef, &dev, priv->qemuCaps, flag= s, parse_flags, driver->xmlopt) < 0) return -1; } --=20 2.35.1 From nobody Sat May 11 23:35:20 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) client-ip=170.10.133.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail(p=none dis=none) header.from=gmail.com Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by mx.zohomail.com with SMTPS id 1644219681863104.84085816208233; Sun, 6 Feb 2022 23:41:21 -0800 (PST) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-606-CbKiZXDPP9-ATXa9WtpAjA-1; Mon, 07 Feb 2022 02:41:18 -0500 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 4553C839A5B; Mon, 7 Feb 2022 07:41:13 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 256B378C2A; Mon, 7 Feb 2022 07:41:13 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id EAA8D4BB7B; Mon, 7 Feb 2022 07:41:12 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 2177cjEd012124 for ; Mon, 7 Feb 2022 02:38:45 -0500 Received: by smtp.corp.redhat.com (Postfix) id 429DDC1914B; Mon, 7 Feb 2022 07:38:45 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast09.extmail.prod.ext.rdu2.redhat.com [10.11.55.25]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 3EB13C1914A for ; Mon, 7 Feb 2022 07:38:45 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-delivery-1.mimecast.com [205.139.110.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 27ACF2B16862 for ; Mon, 7 Feb 2022 07:38:45 +0000 (UTC) Received: from mail-pf1-f177.google.com (mail-pf1-f177.google.com [209.85.210.177]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-322-d8EGfhOMNe-uHgzFI3preg-1; Mon, 07 Feb 2022 02:38:43 -0500 Received: by mail-pf1-f177.google.com with SMTP id c194so11507442pfb.12 for ; Sun, 06 Feb 2022 23:38:43 -0800 (PST) Received: from localhost ([38.94.108.206]) by smtp.gmail.com with ESMTPSA id e2sm7573792pgr.52.2022.02.06.23.38.41 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 06 Feb 2022 23:38:41 -0800 (PST) X-MC-Unique: CbKiZXDPP9-ATXa9WtpAjA-1 X-MC-Unique: d8EGfhOMNe-uHgzFI3preg-1 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=c3K6dHdhUUMwp1cx12Y60C/dVfBw/ocVlkbNDzSwO8g=; b=CwL40gLF7WGi3NPoCc1LUALJbYKxic5j8bx+78VUqYupa+2kmUkl7u3UDPnVDTrq3Q 2n0v7O/ats3N2s5rer9l70jcHHlDNGg15QpMBtAioWRP1+oq444nDN0kz1CmzIq02YDw v1I50jKQ74YGIkx0Ah+4ZdnsrMoC4QluQV9MyIEP2UpR48hSLRAihTEptJdLVjvggfrT SqzLbMtxGlCwHUq0r3mhJ1euvozSiPAOVJSVIWA2JH928/ORWtNOxzPh6SXL1xTpLz8V D7dBdESpW3jNqLjbVUx+BjOKQsR8nZ2BshlQMpZMcLtdmTQj6zpUNKe6WhoV25JdBjkd rcTA== X-Gm-Message-State: AOAM532gt4nEjgVlJy22pkLvtr82H5o62iFn3FJHrWF3cJqjXBvQIvTw kn7r8OvXQUD2tWPaBsIpjVKetnn2BOcX0Lb6xBQ= X-Google-Smtp-Source: ABdhPJycA/qP1pklQ16gDliTa0xDBtDr03+zj42e3bjkGsAKsoy2QNsxcva1pdgyRPGXWmiCsLlbKg== X-Received: by 2002:a05:6a00:190a:: with SMTP id y10mr14341648pfi.52.1644219521869; Sun, 06 Feb 2022 23:38:41 -0800 (PST) From: Luke Yue To: libvir-list@redhat.com Subject: [PATCH v5 6/8] test_driver: Implement virDomainDetachDeviceFlags Date: Mon, 7 Feb 2022 15:38:16 +0800 Message-Id: <20220207073818.356659-7-lukedyue@gmail.com> In-Reply-To: <20220207073818.356659-1-lukedyue@gmail.com> References: <20220207073818.356659-1-lukedyue@gmail.com> MIME-Version: 1.0 X-Mimecast-Impersonation-Protect: Policy=CLT - Impersonation Protection Definition; Similar Internal Domain=false; Similar Monitored External Domain=false; Custom External Domain=false; Mimecast External Domain=false; Newly Observed Domain=false; Internal User Name=false; Custom Display Name List=false; Reply-to Address Mismatch=false; Targeted Threat Dictionary=false; Mimecast Threat Dictionary=false; Custom Threat Dictionary=false X-Scanned-By: MIMEDefang 2.85 on 10.11.54.8 X-loop: libvir-list@redhat.com X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZM-MESSAGEID: 1644219702922100001 Content-Type: text/plain; charset="utf-8" Introduce testDomainChgDevice for further development (just like what we did for IOThread). And introduce testDomainDetachDeviceLiveAndConfig for detaching devices. Also as we implement testDomainChgDevice for both DetachDeviceFlags and DetachDeviceAlias, we could easily implement virDomainDetachDeviceAlias and virDomainDetachDevice. Signed-off-by: Luke Yue --- src/test/test_driver.c | 149 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 149 insertions(+) diff --git a/src/test/test_driver.c b/src/test/test_driver.c index 2380c37ddb..65ab412b36 100644 --- a/src/test/test_driver.c +++ b/src/test/test_driver.c @@ -10014,6 +10014,152 @@ testConnectGetAllDomainStats(virConnectPtr conn, return ret; } =20 + +static int +testDomainDetachDeviceLiveAndConfig(virDomainDef *vmdef, + virDomainDeviceDef *dev, + unsigned int flags, + unsigned int parse_flags, + virDomainXMLOption *xmlopt) +{ + /* Though the function called virDomainDetachDeviceConfig, for + test driver, it could be for both live and config */ + return virDomainDetachDeviceConfig(vmdef, dev, NULL, flags, + parse_flags, xmlopt); +} + +static int +testDomainDoChgDevice(testDriver *driver, + virDomainDeviceAction action, + const char *xml, + const char *alias, + virDomainDef *def, + unsigned int flags) +{ + virDomainDeviceDef *dev =3D NULL; + unsigned int parse_flags =3D VIR_DOMAIN_DEF_PARSE_INACTIVE; + int ret =3D -1; + + if (action =3D=3D VIR_DOMAIN_DEVICE_ACTION_DETACH) + parse_flags |=3D VIR_DOMAIN_DEF_PARSE_SKIP_VALIDATE; + + if (xml) { + if (!(dev =3D virDomainDeviceDefParse(xml, def, driver->xmlopt, + driver->caps, parse_flags))) + goto cleanup; + } else if (alias) { + dev =3D g_new0(virDomainDeviceDef, 1); + if (virDomainDefFindDevice(def, alias, dev, true) < 0) + goto cleanup; + } + + if (dev =3D=3D NULL) + goto cleanup; + + switch (action) { + case VIR_DOMAIN_DEVICE_ACTION_ATTACH: + virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", + _("attaching devices is not supported")); + goto cleanup; + break; + + case VIR_DOMAIN_DEVICE_ACTION_DETACH: + if (testDomainDetachDeviceLiveAndConfig(def, dev, flags, parse_fla= gs, + driver->xmlopt) < 0) + goto cleanup; + break; + + case VIR_DOMAIN_DEVICE_ACTION_UPDATE: + virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", + _("updating devices is not supported")); + goto cleanup; + break; + } + + ret =3D 0; + + cleanup: + if (xml) { + virDomainDeviceDefFree(dev); + } else { + g_free(dev); + } + return ret; +} + +static int +testDomainChgDevice(virDomainPtr dom, + virDomainDeviceAction action, + const char *xml, + const char *alias, + unsigned int flags) +{ + testDriver *driver =3D dom->conn->privateData; + virDomainObj *vm =3D NULL; + virDomainDef *def; + virDomainDef *persistentDef; + + int ret =3D -1; + + virCheckFlags(VIR_DOMAIN_AFFECT_LIVE | + VIR_DOMAIN_AFFECT_CONFIG, -1); + + if (!(vm =3D testDomObjFromDomain(dom))) + goto cleanup; + + if (virDomainObjUpdateModificationImpact(vm, &flags) < 0) + goto cleanup; + + if (virDomainObjGetDefs(vm, flags, &def, &persistentDef) < 0) + goto cleanup; + + if (def) { + if (testDomainDoChgDevice(driver, action, xml, + alias, def, flags) < 0) { + goto cleanup; + } + } + + if (persistentDef) { + if (testDomainDoChgDevice(driver, action, xml, + alias, persistentDef, flags) < 0) { + goto cleanup; + } + } + + ret =3D 0; + + cleanup: + virDomainObjEndAPI(&vm); + return ret; +} + +static int +testDomainDetachDeviceFlags(virDomainPtr dom, + const char *xml, + unsigned int flags) +{ + return testDomainChgDevice(dom, VIR_DOMAIN_DEVICE_ACTION_DETACH, + xml, NULL, flags); +} + +static int +testDomainDetachDeviceAlias(virDomainPtr dom, + const char *alias, + unsigned int flags) +{ + return testDomainChgDevice(dom, VIR_DOMAIN_DEVICE_ACTION_DETACH, + NULL, alias, flags); +} + +static int +testDomainDetachDevice(virDomainPtr dom, + const char *xml) +{ + return testDomainDetachDeviceFlags(dom, xml, + VIR_DOMAIN_AFFECT_LIVE); +} + /* * Test driver */ @@ -10111,6 +10257,9 @@ static virHypervisorDriver testHypervisorDriver =3D= { .domainFSFreeze =3D testDomainFSFreeze, /* 5.7.0 */ .domainFSThaw =3D testDomainFSThaw, /* 5.7.0 */ .domainFSTrim =3D testDomainFSTrim, /* 5.7.0 */ + .domainDetachDevice =3D testDomainDetachDevice, /* 8.1.0 */ + .domainDetachDeviceAlias =3D testDomainDetachDeviceAlias, /* 8.1.0 */ + .domainDetachDeviceFlags =3D testDomainDetachDeviceFlags, /* 8.1.0 */ .domainGetAutostart =3D testDomainGetAutostart, /* 0.3.2 */ .domainSetAutostart =3D testDomainSetAutostart, /* 0.3.2 */ .domainGetDiskErrors =3D testDomainGetDiskErrors, /* 5.4.0 */ --=20 2.35.1 From nobody Sat May 11 23:35:20 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) client-ip=170.10.129.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail(p=none dis=none) header.from=gmail.com Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by mx.zohomail.com with SMTPS id 1644219574701956.5750497919655; Sun, 6 Feb 2022 23:39:34 -0800 (PST) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-629-AkclaDXvOGau7yOtCHfvkQ-1; Mon, 07 Feb 2022 02:39:30 -0500 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 4DAA3190A7A0; Mon, 7 Feb 2022 07:39:25 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 06AF25ED43; Mon, 7 Feb 2022 07:39:25 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id C26714BB7C; Mon, 7 Feb 2022 07:39:24 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.rdu2.redhat.com [10.11.54.2]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 2177cmfP012134 for ; Mon, 7 Feb 2022 02:38:49 -0500 Received: by smtp.corp.redhat.com (Postfix) id C9585400E13A; Mon, 7 Feb 2022 07:38:48 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast08.extmail.prod.ext.rdu2.redhat.com [10.11.55.24]) by smtp.corp.redhat.com (Postfix) with ESMTPS id C475E40D1B98 for ; Mon, 7 Feb 2022 07:38:48 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-delivery-1.mimecast.com [205.139.110.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 2E0E13804520 for ; Mon, 7 Feb 2022 07:38:48 +0000 (UTC) Received: from mail-pj1-f54.google.com (mail-pj1-f54.google.com [209.85.216.54]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-608-gT5lMe7yOzOg705cp_ZR1w-1; Mon, 07 Feb 2022 02:38:46 -0500 Received: by mail-pj1-f54.google.com with SMTP id h20-20020a17090adb9400b001b518bf99ffso19592236pjv.1 for ; Sun, 06 Feb 2022 23:38:46 -0800 (PST) Received: from localhost ([38.94.108.206]) by smtp.gmail.com with ESMTPSA id s6sm7422491pgh.86.2022.02.06.23.38.43 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 06 Feb 2022 23:38:44 -0800 (PST) X-MC-Unique: AkclaDXvOGau7yOtCHfvkQ-1 X-MC-Unique: gT5lMe7yOzOg705cp_ZR1w-1 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=wChpWImTc4ZKIk/0aWFJpQzoXarRi/0j3JObfGF9nT0=; b=8K2ERpTsICis00Sl5DPhcNDXL/ce1GVg7a7bvzK04klRrfJ2P9iPBWt8wS4nVw4s9m 5+TQ2eA4tPJGxlvLcaMF4d0juGKg3Ck/aeWWvHIjAJHd/yuLnfyIv3811q76UmVh2err dTclkJ1PrpYwZKSKFzycTRHQYDOerVUt/BQ9MuVM9Hfa4QPtYSCRhnN0hZVnqkdLMqut RcFfRF3c2dEvvAabyzu+LghGABAAznSV9xNsk7/pOcmt+2SgdMNXdOE/4B8OY4RABZWu Ld823RiScJDME3VupVuaSZjvJAlvkBvbcqr1RlWdFCsphWYH2CqdHgV4bJHFqnOIbPuV 5Nzg== X-Gm-Message-State: AOAM533UReLsp+OPI8apQdNRfJS7Rv2+fSK4SelMg94XKOyDPfpiEXGi LGVORqTo9xDBR6ddfcGpHsOVbMckPZRHhQ31kko= X-Google-Smtp-Source: ABdhPJx8L7K/Rr7RGoAZ10nJQfS0cpSv9344jaGM3h5pQS4GcY5HWWY1oTEPMeVSy7xLf3/05+Sw/A== X-Received: by 2002:a17:90a:6881:: with SMTP id a1mr4726350pjd.123.1644219524718; Sun, 06 Feb 2022 23:38:44 -0800 (PST) From: Luke Yue To: libvir-list@redhat.com Subject: [PATCH v5 7/8] examples: xml: test: add xml for testing devices related APIs Date: Mon, 7 Feb 2022 15:38:17 +0800 Message-Id: <20220207073818.356659-8-lukedyue@gmail.com> In-Reply-To: <20220207073818.356659-1-lukedyue@gmail.com> References: <20220207073818.356659-1-lukedyue@gmail.com> MIME-Version: 1.0 X-Mimecast-Impersonation-Protect: Policy=CLT - Impersonation Protection Definition; Similar Internal Domain=false; Similar Monitored External Domain=false; Custom External Domain=false; Mimecast External Domain=false; Newly Observed Domain=false; Internal User Name=false; Custom Display Name List=false; Reply-to Address Mismatch=false; Targeted Threat Dictionary=false; Mimecast Threat Dictionary=false; Custom Threat Dictionary=false X-Scanned-By: MIMEDefang 2.84 on 10.11.54.2 X-loop: libvir-list@redhat.com X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZM-MESSAGEID: 1644219576634100001 Content-Type: text/plain; charset="utf-8" Also add some device xml to generichotplugdata for testing purpose, and add the forgotten testdomfc5.xml to meson.build. Signed-off-by: Luke Yue --- examples/xml/test/meson.build | 1 + examples/xml/test/testdomfc5.xml | 54 +++++++++++++++++++ examples/xml/test/testnodeinline.xml | 54 +++++++++++++++++++ .../generichotplug-controller.xml | 1 + .../generichotplug-disk-cdrom.xml | 5 ++ .../generichotplug-filesystem.xml | 6 +++ .../generichotplug-hostdev.xml | 5 ++ .../generichotplug-input.xml | 1 + .../generichotplug-interface.xml | 6 +++ .../generichotplug-lease.xml | 5 ++ .../generichotplug-memballoon.xml | 3 ++ .../generichotplug-memory.xml | 6 +++ .../generichotplugdata/generichotplug-rng.xml | 4 ++ .../generichotplug-shmem.xml | 4 ++ .../generichotplug-sound.xml | 3 ++ .../generichotplugdata/generichotplug-tpm.xml | 5 ++ .../generichotplug-vsock.xml | 3 ++ .../generichotplug-watchdog.xml | 1 + 18 files changed, 167 insertions(+) create mode 100644 tests/generichotplugdata/generichotplug-controller.xml create mode 100644 tests/generichotplugdata/generichotplug-disk-cdrom.xml create mode 100644 tests/generichotplugdata/generichotplug-filesystem.xml create mode 100644 tests/generichotplugdata/generichotplug-hostdev.xml create mode 100644 tests/generichotplugdata/generichotplug-input.xml create mode 100644 tests/generichotplugdata/generichotplug-interface.xml create mode 100644 tests/generichotplugdata/generichotplug-lease.xml create mode 100644 tests/generichotplugdata/generichotplug-memballoon.xml create mode 100644 tests/generichotplugdata/generichotplug-memory.xml create mode 100644 tests/generichotplugdata/generichotplug-rng.xml create mode 100644 tests/generichotplugdata/generichotplug-shmem.xml create mode 100644 tests/generichotplugdata/generichotplug-sound.xml create mode 100644 tests/generichotplugdata/generichotplug-tpm.xml create mode 100644 tests/generichotplugdata/generichotplug-vsock.xml create mode 100644 tests/generichotplugdata/generichotplug-watchdog.xml diff --git a/examples/xml/test/meson.build b/examples/xml/test/meson.build index 89ebf03a7b..4a7e357d47 100644 --- a/examples/xml/test/meson.build +++ b/examples/xml/test/meson.build @@ -3,6 +3,7 @@ install_data( 'testdev.xml', 'testnodeinline.xml', 'testdomfc4.xml', + 'testdomfc5.xml', 'testdomfv0.xml', 'testnode.xml', 'testnetdef.xml', diff --git a/examples/xml/test/testdomfc5.xml b/examples/xml/test/testdomfc= 5.xml index a8afc211f6..3b9edb9da9 100644 --- a/examples/xml/test/testdomfc5.xml +++ b/examples/xml/test/testdomfc5.xml @@ -29,6 +29,12 @@