From nobody Tue May 7 14:56:26 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 163853555365188.7328455420635; Fri, 3 Dec 2021 04:45:53 -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-480-rPdD6Z89PKShIu9tCPN0LQ-1; Fri, 03 Dec 2021 07:45:49 -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 0D49193931; Fri, 3 Dec 2021 12:45:43 +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 8DA4C45D7A; Fri, 3 Dec 2021 12:45:40 +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 CA99E1809CB8; Fri, 3 Dec 2021 12:45:35 +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 1B3CjYEg017035 for ; Fri, 3 Dec 2021 07:45:34 -0500 Received: by smtp.corp.redhat.com (Postfix) id 8E2F82026D4D; Fri, 3 Dec 2021 12:45:34 +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 89D4A2026D46 for ; Fri, 3 Dec 2021 12:45:31 +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 9771C85A5B9 for ; Fri, 3 Dec 2021 12:45:31 +0000 (UTC) Received: from mail-pj1-f46.google.com (mail-pj1-f46.google.com [209.85.216.46]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-558-QaAmtc3uMQO8Xty9VWT4jg-1; Fri, 03 Dec 2021 07:45:30 -0500 Received: by mail-pj1-f46.google.com with SMTP id y14-20020a17090a2b4e00b001a5824f4918so5062139pjc.4 for ; Fri, 03 Dec 2021 04:45:29 -0800 (PST) Received: from localhost ([2400:ddc0:1000::b373:390c]) by smtp.gmail.com with ESMTPSA id e10sm3573185pfv.140.2021.12.03.04.45.27 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Dec 2021 04:45:28 -0800 (PST) X-MC-Unique: rPdD6Z89PKShIu9tCPN0LQ-1 X-MC-Unique: QaAmtc3uMQO8Xty9VWT4jg-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=bej1AIrHyaMJVA1Fv1rbG5HwPitM8K00U6KjU8/KymE=; b=g7GJXHS7BG8E2AeNAf74y6e4SQBApJp7KmY6wz1ymfLth0nQFAIlqGuXR6mjYKTyDS 1Vx3pYP/BvAAPnP4uW3xpKVu+bU0rzNvcMMUh4lsLTnAf9RhKdGGTf5XWle4tnFRylmY ikuyZKZ9D0jNcILRTg1UQtSgZpaRe+9xHzXhGij7JnHj0DCx+CinQffmt9cVIvxvzUgv /jA+eor5L4lJtj7WwniFvk4Ea5ktIBJBFVuG12mM+Qd2ZL4f5Rutyqb1T+z/+g2J1Nj2 C/LMkmXlrOf2JqoTxYZTv366KW5FvL1twtpB2Z62Jbti9Q2218nXTKtDCLZF6ukj7Vps ViQA== X-Gm-Message-State: AOAM533mNwWyPhKTis0GPvoCs8EXxYfSYjRFpSr8rT+ATNBPq0UrKB3l c7Wx2DJgFYyOXF0eeY5X+jtWkEluVcQzaCLE X-Google-Smtp-Source: ABdhPJxwfa7eKHKytDVl8M7Pj7ilbbfeMqj4b33wAZWScz2ouFHevfyccByYvwYmLHH8oWPQvIl1GQ== X-Received: by 2002:a17:902:ced0:b0:142:189a:4284 with SMTP id d16-20020a170902ced000b00142189a4284mr22789442plg.79.1638535528685; Fri, 03 Dec 2021 04:45:28 -0800 (PST) From: Luke Yue To: libvir-list@redhat.com Subject: [PATCH v4 1/8] conf: Introduce virDomainInputDefRemove and fix memory leak Date: Fri, 3 Dec 2021 20:45:10 +0800 Message-Id: <20211203124517.571524-2-lukedyue@gmail.com> In-Reply-To: <20211203124517.571524-1-lukedyue@gmail.com> References: <20211203124517.571524-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: 1638535554294100001 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 bdcc3dc2c1..d6f69b3ace 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -16874,6 +16874,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 c0c07ea6ba..e4259bf890 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -3852,6 +3852,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 7be5b51100..338207b235 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -479,6 +479,7 @@ virDomainInputBusTypeToString; virDomainInputDefFind; virDomainInputDefFree; virDomainInputDefGetPath; +virDomainInputDefRemove; virDomainInputSourceGrabToggleTypeFromString; virDomainInputSourceGrabToggleTypeToString; virDomainInputSourceGrabTypeFromString; diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 6333d0af36..bef2465e57 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -7632,7 +7632,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.34.1 From nobody Tue May 7 14:56:26 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 1638535659852812.5789790740602; Fri, 3 Dec 2021 04:47:39 -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-465-4LW0lrOgNeCe0nt_VSzzpQ-1; Fri, 03 Dec 2021 07:47:37 -0500 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 248CA1015DCD; Fri, 3 Dec 2021 12:47:08 +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 06C3D100EBBF; Fri, 3 Dec 2021 12:47:08 +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 CC6414BB7C; Fri, 3 Dec 2021 12:47:07 +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 1B3CjZwD017040 for ; Fri, 3 Dec 2021 07:45:35 -0500 Received: by smtp.corp.redhat.com (Postfix) id B19FB1402408; Fri, 3 Dec 2021 12:45: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 ACFF41402406 for ; Fri, 3 Dec 2021 12:45:35 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-1.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 81C5685A5B9 for ; Fri, 3 Dec 2021 12:45:35 +0000 (UTC) Received: from mail-pl1-f173.google.com (mail-pl1-f173.google.com [209.85.214.173]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-315-XkgshFVUMHq8ISglpRAWYg-1; Fri, 03 Dec 2021 07:45:33 -0500 Received: by mail-pl1-f173.google.com with SMTP id z6so2031703plk.6 for ; Fri, 03 Dec 2021 04:45:33 -0800 (PST) Received: from localhost ([2400:ddc0:1000::b373:390c]) by smtp.gmail.com with ESMTPSA id z4sm3174465pfg.101.2021.12.03.04.45.31 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Dec 2021 04:45:31 -0800 (PST) X-MC-Unique: 4LW0lrOgNeCe0nt_VSzzpQ-1 X-MC-Unique: XkgshFVUMHq8ISglpRAWYg-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=2Lwucnpw33GoziRM25hiW++aYQOpgeH7Y2SFiKGv6i0=; b=LtGWURnygxR4oi3P3C2ciSqxuTnDhXy1vEh38yD88LvWmCSpv4iO6Tt6Ky2CDwX+qT 9iQZeZx3Rm0K25FOfCvEG9aBBOki3652HbQAnEymmr9J8ADmxHzV2vgfeOKITuBL6sfM hvd5hM5a4rh6p0M7OrlpL5aRJlJgVzef189RLpYHMJfVlhNKib0CC6oChlj56TzG3oq0 9yURWgJXTllaeGAalxNGEC/woH3iffiFj/DIJ6JWsqf7XGA8mYZZhHARM7KwiMf6AXoN Pf+JEIFJ78aKehjgaxE/x0QfjXnC5vSvuYjMOWVUKL92O/7JPKYUpSwXYQc9ewvVvlat 5WtQ== X-Gm-Message-State: AOAM530GFeCoAwcE8uoYJvYoD/A7HRGnjUUdeRpaKIiWogaGpcv9lY6g RI/EVzPT2Z7DC9OeFORckVQpye4y6AJzTHku X-Google-Smtp-Source: ABdhPJwvMF8NxoyvPkw04/RXjF0Tl3QrZli8fQKnYvjvuTeLJRmEQFJMOxx3W0XENpAFQ/+t3hSiUQ== X-Received: by 2002:a17:90b:38c7:: with SMTP id nn7mr13880141pjb.105.1638535532333; Fri, 03 Dec 2021 04:45:32 -0800 (PST) From: Luke Yue To: libvir-list@redhat.com Subject: [PATCH v4 2/8] conf: Introduce virDomainDeviceDefOperationsCallbacks to xmlopt Date: Fri, 3 Dec 2021 20:45:11 +0800 Message-Id: <20211203124517.571524-3-lukedyue@gmail.com> In-Reply-To: <20211203124517.571524-1-lukedyue@gmail.com> References: <20211203124517.571524-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.84 on 10.5.11.22 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: 1638535660889100001 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); } diff --git a/src/ch/ch_conf.c b/src/ch/ch_conf.c index ef6f4b5ba8..a2affd5c02 100644 --- a/src/ch/ch_conf.c +++ b/src/ch/ch_conf.c @@ -115,7 +115,7 @@ chDomainXMLConfInit(virCHDriver *driver) virCHDriverDomainDefParserConfig.priv =3D driver; return virDomainXMLOptionNew(&virCHDriverDomainDefParserConfig, &virCHDriverPrivateDataCallbacks, - NULL, NULL, NULL); + NULL, NULL, NULL, NULL); } virCHDriverConfig * diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index d6f69b3ace..44f1428f80 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -1564,7 +1564,8 @@ virDomainXMLOptionNew(virDomainDefParserConfig *confi= g, virDomainXMLPrivateDataCallbacks *priv, virXMLNamespace *xmlns, virDomainABIStability *abi, - virSaveCookieCallbacks *saveCookie) + virSaveCookieCallbacks *saveCookie, + virDomainDeviceDefOperationsCallbacks *deviceOps) { virDomainXMLOption *xmlopt; @@ -1589,6 +1590,9 @@ virDomainXMLOptionNew(virDomainDefParserConfig *confi= g, if (saveCookie) xmlopt->saveCookie =3D *saveCookie; + 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 e4259bf890..1b092b2ee5 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -3173,7 +3173,8 @@ virDomainXMLOption *virDomainXMLOptionNew(virDomainDe= fParserConfig *config, virDomainXMLPrivateDataCallbacks= *priv, virXMLNamespace *xmlns, virDomainABIStability *abi, - virSaveCookieCallbacks *saveCook= ie); + virSaveCookieCallbacks *saveCook= ie, + virDomainDeviceDefOperationsCall= backs *deviceOps); virSaveCookieCallbacks * virDomainXMLOptionGetSaveCookie(virDomainXMLOption *xmlopt); @@ -3191,6 +3192,18 @@ virXMLNamespace * virDomainXMLOptionGetNamespace(virDomainXMLOption *xmlopt) ATTRIBUTE_NONNULL(1); +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 { @@ -3213,6 +3226,9 @@ struct _virDomainXMLOption { /* Snapshot postparse callbacks */ virDomainMomentPostParseCallback momentPostParse; + + /* domain specific device operation callbacks */ + virDomainDeviceDefOperationsCallbacks deviceOps; }; G_DEFINE_AUTOPTR_CLEANUP_FUNC(virDomainXMLOption, virObjectUnref); 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; 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 bafec27a88..57d2eb9ec6 100644 --- a/src/hyperv/hyperv_driver.c +++ b/src/hyperv/hyperv_driver.c @@ -1784,7 +1784,8 @@ hypervConnectOpen(virConnectPtr conn, virConnectAuthP= tr auth, goto cleanup; /* 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); if (hypervGetOperatingSystem(priv, &os) < 0) goto cleanup; diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c index f37c228139..a586454f23 100644 --- a/src/libxl/libxl_conf.c +++ b/src/libxl/libxl_conf.c @@ -2505,5 +2505,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 73156f15a3..c1d695e97b 100644 --- a/src/lxc/lxc_conf.c +++ b/src/lxc/lxc_conf.c @@ -194,7 +194,7 @@ lxcDomainXMLConfInit(virLXCDriver *driver, const char *= defsecmodel) return virDomainXMLOptionNew(&virLXCDriverDomainDefParserConfig, &virLXCDriverPrivateDataCallbacks, &virLXCDriverDomainXMLNamespace, - NULL, NULL); + NULL, NULL, NULL); } diff --git a/src/openvz/openvz_conf.c b/src/openvz/openvz_conf.c index e2fbc28abc..b9522acd59 100644 --- a/src/openvz/openvz_conf.c +++ b/src/openvz/openvz_conf.c @@ -1087,5 +1087,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 7eb04e66a0..ec85b6f5a6 100644 --- a/src/qemu/qemu_conf.c +++ b/src/qemu/qemu_conf.c @@ -1290,7 +1290,8 @@ virQEMUDriverCreateXMLConf(virQEMUDriver *driver, &virQEMUDriverPrivateDataCallbacks, &virQEMUDriverDomainXMLNamespace, &virQEMUDriverDomainABIStability, - &virQEMUDriverDomainSaveCookie); + &virQEMUDriverDomainSaveCookie, + NULL); } diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 6b83a571b9..a2e4066158 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -9238,7 +9238,7 @@ qemuProcessQMPConnectMonitor(qemuProcessQMP *proc) monConfig.data.nix.path =3D proc->monpath; monConfig.data.nix.listen =3D false; - 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 b7ffb5e2c3..afb884e5d8 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) } 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 b6bca884f0..7febb4f5a6 100644 --- a/src/test/test_driver.c +++ b/src/test/test_driver.c @@ -466,7 +466,8 @@ testDriverNew(void) if (!(ret =3D virObjectLockableNew(testDriverClass))) return NULL; - 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 72f1b9c466..5d6f5e77c2 100644 --- a/src/vbox/vbox_common.c +++ b/src/vbox/vbox_common.c @@ -143,7 +143,7 @@ vboxDriverObjNew(void) if (!(driver->caps =3D vboxCapsInit()) || !(driver->xmlopt =3D virDomainXMLOptionNew(&vboxDomainDefParserCon= fig, - NULL, NULL, NULL, NULL))) + NULL, NULL, NULL, NULL, N= ULL))) goto cleanup; return driver; diff --git a/src/vmware/vmware_driver.c b/src/vmware/vmware_driver.c index e6843ee745..700bb41232 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); } static virDrvOpenStatus diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c index d3540acd84..9de20d8024 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); } char * diff --git a/src/vz/vz_driver.c b/src/vz/vz_driver.c index 23b7795035..01671c6cf4 100644 --- a/src/vz/vz_driver.c +++ b/src/vz/vz_driver.c @@ -334,7 +334,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; - 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; diff --git a/tests/testutils.c b/tests/testutils.c index e460c9ecc5..3215dc981b 100644 --- a/tests/testutils.c +++ b/tests/testutils.c @@ -986,7 +986,7 @@ static virDomainDefParserConfig virTestGenericDomainDef= ParserConfig =3D { virDomainXMLOption *virTestGenericDomainXMLConfInit(void) { return virDomainXMLOptionNew(&virTestGenericDomainDefParserConfig, - NULL, NULL, NULL, NULL); + NULL, NULL, NULL, NULL, NULL); } -- 2.34.1 From nobody Tue May 7 14:56:26 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 16385355534701009.5202441262282; Fri, 3 Dec 2021 04:45:53 -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-146-3sPBXUXpOVixaE_BrXUiiw-1; Fri, 03 Dec 2021 07:45:51 -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 018801023F4D; Fri, 3 Dec 2021 12:45:46 +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 BD4B645D9C; Fri, 3 Dec 2021 12:45:44 +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 52CA31809CBA; Fri, 3 Dec 2021 12:45:44 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 1B3CjgZL017059 for ; Fri, 3 Dec 2021 07:45:42 -0500 Received: by smtp.corp.redhat.com (Postfix) id 4EFCF51E3; Fri, 3 Dec 2021 12:45:42 +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 499B451E2 for ; Fri, 3 Dec 2021 12:45:39 +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 69AB385A5AA for ; Fri, 3 Dec 2021 12:45:39 +0000 (UTC) Received: from mail-pg1-f172.google.com (mail-pg1-f172.google.com [209.85.215.172]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-491-rDVCgjsuM_aKSGz4FAEQDg-1; Fri, 03 Dec 2021 07:45:37 -0500 Received: by mail-pg1-f172.google.com with SMTP id r5so2902952pgi.6 for ; Fri, 03 Dec 2021 04:45:37 -0800 (PST) Received: from localhost ([2400:ddc0:1000::b373:390c]) by smtp.gmail.com with ESMTPSA id z71sm2436850pgz.52.2021.12.03.04.45.35 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Dec 2021 04:45:35 -0800 (PST) X-MC-Unique: 3sPBXUXpOVixaE_BrXUiiw-1 X-MC-Unique: rDVCgjsuM_aKSGz4FAEQDg-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=L854e1iby4JA6bg4B8fYZLI8AHtPd2DelwkPkOdo9RY=; b=S0vR07vIBVCWsXAyfdAU0KOfuMB1QeoL7gQlSo9E/mZ00ys6GlT+FrPMWO4z143g8F miwQovJN6P2Q2CUwFGeoDKj39c5O8TUvOprtriQneBrWtEMzzVayaEKvzbxKhXv2ovpl vcHqIartttzPCr8WAkrCwQAsQZtGUnvWlo/JfIG7r4pR+Pkj9qumRh7vZGu/pqprrL43 buOr88vEX6cWoNrIfagORwJ8PmoPGylxETswwpDw2inV6nRBaWby3qRc5miIAKpV+ws9 73jSGq4efyWpcE3LakVtQsTFGyJ2vw/4CIv6/7M6eFfQBBiabt4aB1hBh8zdM1xuFAij Sdbg== X-Gm-Message-State: AOAM533ShrdzAbTmn9gOie8LHAe1oGeU6J/Z0pM/DQqNS4EyE6LWKzNc //CBf8nbCshk9UqiZl1OmlkdGtHuMs24z0Ri X-Google-Smtp-Source: ABdhPJwNaRGw5qoQjJKhGC+rLh6RO3BGkjLxHTAEswVXUfVE2EJyYrRCIY18yFbnf1ZKtnH6T1b+9Q== X-Received: by 2002:a63:5813:: with SMTP id m19mr4239470pgb.451.1638535536256; Fri, 03 Dec 2021 04:45:36 -0800 (PST) From: Luke Yue To: libvir-list@redhat.com Subject: [PATCH v4 3/8] conf: Add virDomainDeviceTypeFlags and use it in various drivers Date: Fri, 3 Dec 2021 20:45:12 +0800 Message-Id: <20211203124517.571524-4-lukedyue@gmail.com> In-Reply-To: <20211203124517.571524-1-lukedyue@gmail.com> References: <20211203124517.571524-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.79 on 10.11.54.5 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: 1638535554425100003 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 1b092b2ee5..070cb40509 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 a586454f23..4ff790ecfe 100644 --- a/src/libxl/libxl_conf.c +++ b/src/libxl/libxl_conf.c @@ -2505,5 +2505,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 366e3b9263..55152f9405 100644 --- a/src/libxl/libxl_domain.c +++ b/src/libxl/libxl_domain.c @@ -1603,3 +1603,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 c1d695e97b..31546aaeb5 100644 --- a/src/lxc/lxc_conf.c +++ b/src/lxc/lxc_conf.c @@ -194,7 +194,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 ec85b6f5a6..41ad081079 100644 --- a/src/qemu/qemu_conf.c +++ b/src/qemu/qemu_conf.c @@ -1291,7 +1291,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 2c10f185f8..050baa7c2c 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" @@ -11455,3 +11456,41 @@ qemuDomainGetVHostUserFSSocketPath(qemuDomainObjPr= ivate *priv, =20 return virFileBuildPath(priv->libDir, fs->info.alias, "-fs.sock"); } + + +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; +} + + +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 f2a303d8a7..87a36b232f 100644 --- a/src/qemu/qemu_domain.h +++ b/src/qemu/qemu_domain.h @@ -712,6 +712,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 @@ -1032,3 +1033,8 @@ qemuDomainNamePathsCleanup(virQEMUDriverConfig *cfg, char * qemuDomainGetVHostUserFSSocketPath(qemuDomainObjPrivate *priv, const virDomainFSDef *fs); + +int +qemuDomainDetachDeviceChrConfig(virDomainDef *vmdef, + virDomainDeviceDef *dev, + unsigned int flags); diff --git a/src/test/test_driver.c b/src/test/test_driver.c index 7febb4f5a6..21caa83be7 100644 --- a/src/test/test_driver.c +++ b/src/test/test_driver.c @@ -435,6 +435,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) { @@ -458,6 +483,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) @@ -467,7 +512,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.34.1 From nobody Tue May 7 14:56:26 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 1638535574632547.6303567204328; Fri, 3 Dec 2021 04:46: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-414-Y-D4hYgIPKuTROpnFp76uQ-1; Fri, 03 Dec 2021 07:46:12 -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 266031017979; Fri, 3 Dec 2021 12:46:07 +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 7F5307FB43; Fri, 3 Dec 2021 12:46: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 D7148180B617; Fri, 3 Dec 2021 12:46:00 +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 1B3Cjhg0017064 for ; Fri, 3 Dec 2021 07:45:43 -0500 Received: by smtp.corp.redhat.com (Postfix) id 92161C202CC; Fri, 3 Dec 2021 12:45:43 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast03.extmail.prod.ext.rdu2.redhat.com [10.11.55.19]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 8D56BC202C7 for ; Fri, 3 Dec 2021 12:45:43 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-1.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 734DE811E78 for ; Fri, 3 Dec 2021 12:45:43 +0000 (UTC) Received: from mail-pf1-f182.google.com (mail-pf1-f182.google.com [209.85.210.182]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-392-CoC0YUDFNUmzKrUkiMYqaw-1; Fri, 03 Dec 2021 07:45:41 -0500 Received: by mail-pf1-f182.google.com with SMTP id r130so2841008pfc.1 for ; Fri, 03 Dec 2021 04:45:41 -0800 (PST) Received: from localhost ([2400:ddc0:1000::b373:390c]) by smtp.gmail.com with ESMTPSA id o16sm3649912pfu.72.2021.12.03.04.45.39 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Dec 2021 04:45:39 -0800 (PST) X-MC-Unique: Y-D4hYgIPKuTROpnFp76uQ-1 X-MC-Unique: CoC0YUDFNUmzKrUkiMYqaw-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=ocBL5yzGI8YzrYwXxQhapeW9srYfDiLp+2UgCxaNXh4=; b=LGsaW7ZOEphfUJfub0pwhgHluqTxX44WIgGDTXyFRLRjsJRpBNPE+WlMmjebKzn+Zs yAl5kbVP/pRahJ7Ix2dgMy/E0oO+b5dnMa6KJh9zMLk/Uq7C4HpQusnimcoBgjH6Htcr 7qsaZMx2pA7laawpvtWXxp2xYG16EXrR55RfLQbU0R4RIHo6jo7LmiX7HU/FjDIZMlwR Wg9HreZ9d009XD/KN7qL2cXCpDX9T8XfyqSdQRBIB4A9+QG+3FOckz/FoNsoVnv0ezsa 9pwbs8+brv7p4PIKqfG23CeHXzO53qKcqbLD4xEjatBmwECijKP/mgZCHWXmtn0cH21D 00Fw== X-Gm-Message-State: AOAM533zjzjKQFDLHYz6TixovpA6nfEh1bIHFUJS4UStf/BRMBB4ZPxo uapv5ZHxZKgqc2tO0HykedD6oH/c31dz9qHD X-Google-Smtp-Source: ABdhPJxQlI++YVXXPYo20PwiyFmwBV7ZwmLoMLEIl8ad66iunjq7/qi0pd3ICkYYcyVuR0gzLdqCiA== X-Received: by 2002:a63:6342:: with SMTP id x63mr4367522pgb.295.1638535540283; Fri, 03 Dec 2021 04:45:40 -0800 (PST) From: Luke Yue To: libvir-list@redhat.com Subject: [PATCH v4 4/8] conf: Add tpm helpers for future use Date: Fri, 3 Dec 2021 20:45:13 +0800 Message-Id: <20211203124517.571524-5-lukedyue@gmail.com> In-Reply-To: <20211203124517.571524-1-lukedyue@gmail.com> References: <20211203124517.571524-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.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: 1638535576916100001 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 on default. --- 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 44f1428f80..30b06c45e5 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -16908,6 +16908,73 @@ virDomainVsockDefEquals(const virDomainVsockDef *a, } +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 070cb40509..08b6965ef5 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -3905,6 +3905,12 @@ bool virDomainVsockDefEquals(const virDomainVsockDef= *a, const virDomainVsockDef *b) ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) G_GNUC_WARN_UNUSED_RESULT; +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 338207b235..9b1e6a0d2a 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -666,7 +666,9 @@ virDomainTimerTrackTypeFromString; virDomainTimerTrackTypeToString; virDomainTPMBackendTypeFromString; virDomainTPMBackendTypeToString; +virDomainTPMDefFind; virDomainTPMDefFree; +virDomainTPMDefRemove; virDomainTPMModelTypeFromString; virDomainTPMModelTypeToString; virDomainTPMPcrBankTypeFromString; -- 2.34.1 From nobody Tue May 7 14:56:26 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 1638535622813364.3310044091455; Fri, 3 Dec 2021 04:47:02 -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-132-BKYzHpmqO1eSMmvTc_wx4g-1; Fri, 03 Dec 2021 07:46:10 -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 5EDC2835E2B; Fri, 3 Dec 2021 12:46:05 +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 E00ED5E26D; Fri, 3 Dec 2021 12:46:04 +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 A63894BB7C; Fri, 3 Dec 2021 12:46:04 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx10.intmail.prod.int.rdu2.redhat.com [10.11.54.10]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 1B3CjmpN017081 for ; Fri, 3 Dec 2021 07:45:49 -0500 Received: by smtp.corp.redhat.com (Postfix) id BA5D5401E3E; Fri, 3 Dec 2021 12:45:48 +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 ACB05401E38 for ; Fri, 3 Dec 2021 12:45:48 +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 7920E85A5AA for ; Fri, 3 Dec 2021 12:45:48 +0000 (UTC) Received: from mail-pg1-f176.google.com (mail-pg1-f176.google.com [209.85.215.176]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-81-wn03oBPCPeSNDoR4UF0Aig-1; Fri, 03 Dec 2021 07:45:46 -0500 Received: by mail-pg1-f176.google.com with SMTP id 137so2926793pgg.3 for ; Fri, 03 Dec 2021 04:45:46 -0800 (PST) Received: from localhost ([2400:ddc0:1000::b373:390c]) by smtp.gmail.com with ESMTPSA id v13sm3444459pfu.38.2021.12.03.04.45.43 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Dec 2021 04:45:44 -0800 (PST) X-MC-Unique: BKYzHpmqO1eSMmvTc_wx4g-1 X-MC-Unique: wn03oBPCPeSNDoR4UF0Aig-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=EKG8ptkDK9OOYnAmFkaveOO7XVD2ztn13cS2xShBatM=; b=1ESmuizVJM3wnA/HPJJdGUnTykuYtHZr02f/hkq6yfRdLVfER7j6xTnYIfEbUjQgyo LLPd7xiHq/8XcDaplMaSsa97e2pZa+dZKG5KLNwXb993WU5EgX+iVyKdEt9unqmWsTIV ArtxKiR38geIr8iK6qn9HPaU8woXpb3B8q2rMEfvahybpqxFghV2Il7SScXUNPulWVje OGYf+/KcnZSGwFhbf69rX+mvaKCKcv/GPZkL5lMT7os0/WVZeU4K3glpNn+mWeUnP1Hs rNQNLyL8GHexwsIdfO9kxwPRTaHIiHI2aaalAWHiYIp/HRo1gWIuU5hQXaGVqEBBzIRo wGfA== X-Gm-Message-State: AOAM53332mXQZUIjLtUQVbHiUiMJnHAdFA8IqK9FkQTNCw3Z5w5sdbUT oxDm1z4xV+6XjDZK2b3kThEmiJUESHX459M4 X-Google-Smtp-Source: ABdhPJygF1OayYcNY3+Uqvn5DgpKnijD+ZqnQI3qHfLly2kFBs/dR/O0B9EnX4OuFJmKqKgLbKa0Gw== X-Received: by 2002:a65:5641:: with SMTP id m1mr4261578pgs.310.1638535544767; Fri, 03 Dec 2021 04:45:44 -0800 (PST) From: Luke Yue To: libvir-list@redhat.com Subject: [PATCH v4 5/8] domain_driver: extract DetachXXXDeviceConfig related functions and use them Date: Fri, 3 Dec 2021 20:45:14 +0800 Message-Id: <20211203124517.571524-6-lukedyue@gmail.com> In-Reply-To: <20211203124517.571524-1-lukedyue@gmail.com> References: <20211203124517.571524-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.10 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: 1638535623669100001 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 previous version, 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 | 205 +--------------- 6 files changed, 609 insertions(+), 314 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 30b06c45e5..8017896fd0 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -31656,3 +31656,490 @@ virDomainObjGetMessages(virDomainObj *vm, 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 08b6965ef5..12b2996538 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -4275,3 +4275,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 9b1e6a0d2a..d6f1da5e95 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 23a28dc124..dd123412ac 100644 --- a/src/libxl/libxl_driver.c +++ b/src/libxl/libxl_driver.c @@ -3905,68 +3905,14 @@ libxlDomainDetachDeviceLive(libxlDriverPrivate *dri= ver, 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); } static int @@ -4199,7 +4145,10 @@ libxlDomainDetachDeviceFlags(virDomainPtr dom, const= char *xml, if (!(vmdef =3D virDomainObjCopyPersistentDef(vm, driver->xmlopt, = NULL))) goto endjob; - 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; } diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c index 3cdf73c69f..545fc9c9e2 100644 --- a/src/lxc/lxc_driver.c +++ b/src/lxc/lxc_driver.c @@ -3124,58 +3124,13 @@ lxcDomainUpdateDeviceConfig(virDomainDef *vmdef, 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); } @@ -4510,7 +4465,10 @@ static int lxcDomainDetachDeviceFlags(virDomainPtr d= om, if (!vmdef) goto endjob; - if ((ret =3D lxcDomainDetachDeviceConfig(vmdef, dev)) < 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; } diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index bef2465e57..503b0973ab 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -7468,207 +7468,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); } static int @@ -8113,7 +7918,7 @@ qemuDomainDetachDeviceLiveAndConfig(virQEMUDriver *dr= iver, goto cleanup; if (qemuDomainDetachDeviceConfig(vmdef, dev, priv->qemuCaps, - parse_flags, + flags, parse_flags, driver->xmlopt) < 0) goto cleanup; } @@ -8182,7 +7987,7 @@ qemuDomainDetachDeviceAliasLiveAndConfig(virQEMUDrive= r *driver, if (virDomainDefFindDevice(vmdef, alias, &dev, true) < 0) return -1; - if (qemuDomainDetachDeviceConfig(vmdef, &dev, priv->qemuCaps, + if (qemuDomainDetachDeviceConfig(vmdef, &dev, priv->qemuCaps, flag= s, parse_flags, driver->xmlopt) < 0) return -1; } -- 2.34.1 From nobody Tue May 7 14:56:26 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 1638535575615327.67372388117144; Fri, 3 Dec 2021 04:46: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-519-0PeqBSZwO3-VNFLR5p18mA-1; Fri, 03 Dec 2021 07:46:13 -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 CD5571927806; Fri, 3 Dec 2021 12:46:07 +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 98D1A22DF9; Fri, 3 Dec 2021 12:46:07 +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 5F2491806D03; Fri, 3 Dec 2021 12:46:07 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx09.intmail.prod.int.rdu2.redhat.com [10.11.54.9]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 1B3Cjq4I017095 for ; Fri, 3 Dec 2021 07:45:52 -0500 Received: by smtp.corp.redhat.com (Postfix) id 16503492C3B; Fri, 3 Dec 2021 12:45:52 +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 117C1492C38 for ; Fri, 3 Dec 2021 12:45:51 +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 890FA805B0A for ; Fri, 3 Dec 2021 12:45:51 +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-207-oiT8YCReO-2IMrjnVttF5g-1; Fri, 03 Dec 2021 07:45:50 -0500 Received: by mail-pj1-f54.google.com with SMTP id w33-20020a17090a6ba400b001a722a06212so5157416pjj.0 for ; Fri, 03 Dec 2021 04:45:49 -0800 (PST) Received: from localhost ([2400:ddc0:1000::b373:390c]) by smtp.gmail.com with ESMTPSA id j6sm3201818pfu.205.2021.12.03.04.45.47 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Dec 2021 04:45:48 -0800 (PST) X-MC-Unique: 0PeqBSZwO3-VNFLR5p18mA-1 X-MC-Unique: oiT8YCReO-2IMrjnVttF5g-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=v6fuzdS7t/7ihgT0yEh86FiRshQRUxSPZJeOINf1naA=; b=HLBaSp1RQZ0ZZn30iE98k925AUrJeRaZnqrRSqkPOXrVHHcTs0FXEY+MKkVfLtvfd0 hDwQtrLoHoXloAWt5AGK8OURWPh0An7XhRlFyp8CkGTUILk7DgSpz6QyTknuyrT6maH2 oygrFytgf5tSudA+JLjbzgwfjcSxqhM5hrYxwKmQjMLWrhLrq2v+M7vctSWIU6VExe69 s3YpZPSpqiX26ux9dd53IYNILtRkDzLlSbLC8H0UOz0acb4YmCd975dqC2kb9unUHBcr MlhD7dtbrIUqclz2PhRQXQnTNK8UyBdn+s3Uth3nPmliNa0M8SP7LSdZWg7yXR/R9R4T uJTQ== X-Gm-Message-State: AOAM531zRrAmg77XYKWo9+W1aERIrZa6YJvxQqC5f2PpO3/naDdwVij3 ds3bUKaLffuSdj7X50s+JssCcS4PEJsDoEiN X-Google-Smtp-Source: ABdhPJzU8qekqHxYPxpKvWzXrtDSHjwKhTTJv6DBWFMZ9fNc2C0v6waPw16sWmvHhYF+s6kRVqSWmQ== X-Received: by 2002:a17:90a:4142:: with SMTP id m2mr13964540pjg.80.1638535548405; Fri, 03 Dec 2021 04:45:48 -0800 (PST) From: Luke Yue To: libvir-list@redhat.com Subject: [PATCH v4 6/8] test_driver: Implement virDomainDetachDeviceFlags Date: Fri, 3 Dec 2021 20:45:15 +0800 Message-Id: <20211203124517.571524-7-lukedyue@gmail.com> In-Reply-To: <20211203124517.571524-1-lukedyue@gmail.com> References: <20211203124517.571524-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.9 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: 1638535576931100002 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 21caa83be7..6cd1e75771 100644 --- a/src/test/test_driver.c +++ b/src/test/test_driver.c @@ -10022,6 +10022,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 */ @@ -10119,6 +10265,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.0.0 */ + .domainDetachDeviceAlias =3D testDomainDetachDeviceAlias, /* 8.0.0 */ + .domainDetachDeviceFlags =3D testDomainDetachDeviceFlags, /* 8.0.0 */ .domainGetAutostart =3D testDomainGetAutostart, /* 0.3.2 */ .domainSetAutostart =3D testDomainSetAutostart, /* 0.3.2 */ .domainGetDiskErrors =3D testDomainGetDiskErrors, /* 5.4.0 */ --=20 2.34.1 From nobody Tue May 7 14:56:26 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 1638535661717341.4044732425857; Fri, 3 Dec 2021 04:47:41 -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-248-x0T8rC55MBqDSsHA5sM5aw-1; Fri, 03 Dec 2021 07:47:39 -0500 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 3944C85EE6F; Fri, 3 Dec 2021 12:47:11 +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 196F410074FD; Fri, 3 Dec 2021 12:47:11 +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 DF4121806D1C; Fri, 3 Dec 2021 12:47:10 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx09.intmail.prod.int.rdu2.redhat.com [10.11.54.9]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 1B3Cju9Z017106 for ; Fri, 3 Dec 2021 07:45:56 -0500 Received: by smtp.corp.redhat.com (Postfix) id 85E54492C3B; Fri, 3 Dec 2021 12:45:56 +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 81716492C38 for ; Fri, 3 Dec 2021 12:45:56 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-1.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 64C04801212 for ; Fri, 3 Dec 2021 12:45:56 +0000 (UTC) Received: from mail-pj1-f48.google.com (mail-pj1-f48.google.com [209.85.216.48]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-257-dk9WhDSqNja0zzCM1JmsiQ-1; Fri, 03 Dec 2021 07:45:54 -0500 Received: by mail-pj1-f48.google.com with SMTP id w33-20020a17090a6ba400b001a722a06212so5157543pjj.0 for ; Fri, 03 Dec 2021 04:45:54 -0800 (PST) Received: from localhost ([2400:ddc0:1000::b373:390c]) by smtp.gmail.com with ESMTPSA id t131sm2375719pgb.31.2021.12.03.04.45.51 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Dec 2021 04:45:52 -0800 (PST) X-MC-Unique: x0T8rC55MBqDSsHA5sM5aw-1 X-MC-Unique: dk9WhDSqNja0zzCM1JmsiQ-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=HrMqkCmWOUrNGhJ2ByhI1jfdDamvjdkaXyJvnSFHHFE=; b=7+mVy1pk4qBIpiwf9v2OTSD3PPmYXcqDotVGTLn1fPQWsh2gsgUeMMMu2Rfjoahn7O eHlHXtIb+N1E1y9hUqrvSB55uoL4ShV4s65//2zCZAQmI0VUwTP+wQ6jY7UWlOMlkNbz VGHb58ejI6T2YpJan/UONjVexi3aIt/kr6BLBnlo+n+4r8dVlgXW/85rE+TBu2KGQKCq BFIxw0H/FzCxb0LrP5uc9JftxSUY4QKisdCcWWUWK6q8xRWhQ7r5p019Tic1eXrIi2eo /8svL++7tc8NkGbmI+I10bx7WSs/kExwt6rROxCAB+nJI3fyJLPpfvD0FZVUXiOWTciT tGVA== X-Gm-Message-State: AOAM531iynD5fC0GT0PHhfKL1fY+Fev7X62yhlBUkVGloP4V4lh+ieDn +cY/3nueA4c+Jd13s8pKQaBPDNbZAxH+52Gw X-Google-Smtp-Source: ABdhPJwXstp3Pos5RJrc+uyuWIA1JYrL/vr5KwPw7gRvFMaQYtUoll+v4KSS7nWPnnb3vj84PfVo5g== X-Received: by 2002:a17:902:b581:b0:144:e601:de7 with SMTP id a1-20020a170902b58100b00144e6010de7mr22395478pls.71.1638535553007; Fri, 03 Dec 2021 04:45:53 -0800 (PST) From: Luke Yue To: libvir-list@redhat.com Subject: [PATCH v4 7/8] examples: xml: test: add xml for testing devices related APIs Date: Fri, 3 Dec 2021 20:45:16 +0800 Message-Id: <20211203124517.571524-8-lukedyue@gmail.com> In-Reply-To: <20211203124517.571524-1-lukedyue@gmail.com> References: <20211203124517.571524-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.9 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.22 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: 1638535663491100001 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 @@