From nobody Mon Feb 9 09:09:38 2026 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