From nobody Sun Feb 8 22:48:52 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) client-ip=170.10.129.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail(p=none dis=none) header.from=gmail.com Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by mx.zohomail.com with SMTPS id 164421967533912.22663235147104; Sun, 6 Feb 2022 23:41:15 -0800 (PST) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-301--b9ISz3aMGmLT-WHIw1Y1A-1; Mon, 07 Feb 2022 02:41:10 -0500 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id E14B41091DB9; Mon, 7 Feb 2022 07:41:05 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id BF3DA27BCF; Mon, 7 Feb 2022 07:41:05 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 8F69A1806D1C; Mon, 7 Feb 2022 07:41:05 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.rdu2.redhat.com [10.11.54.1]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 2177cZ2C012080 for ; Mon, 7 Feb 2022 02:38:35 -0500 Received: by smtp.corp.redhat.com (Postfix) id 9AEEB40CFD16; Mon, 7 Feb 2022 07:38:35 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast01.extmail.prod.ext.rdu2.redhat.com [10.11.55.17]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 962FF40CFD0B for ; Mon, 7 Feb 2022 07:38:35 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-2.mimecast.com [205.139.110.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 7A4B085A5A8 for ; Mon, 7 Feb 2022 07:38:35 +0000 (UTC) Received: from mail-pl1-f174.google.com (mail-pl1-f174.google.com [209.85.214.174]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-148-lQvnD61VOfiJg_1k8f2jPg-1; Mon, 07 Feb 2022 02:38:33 -0500 Received: by mail-pl1-f174.google.com with SMTP id 10so2583322plj.1 for ; Sun, 06 Feb 2022 23:38:33 -0800 (PST) Received: from localhost ([38.94.108.206]) by smtp.gmail.com with ESMTPSA id lk8sm10204140pjb.40.2022.02.06.23.38.31 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 06 Feb 2022 23:38:31 -0800 (PST) X-MC-Unique: -b9ISz3aMGmLT-WHIw1Y1A-1 X-MC-Unique: lQvnD61VOfiJg_1k8f2jPg-1 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=kI5u5BWBiKBhC5uTOrM8QXX6a9nqh1Cwq5VyceqbUQw=; b=Qg9/UgY17RX2TkkxmSn61qJndR6zjzOQjDm2uuxS9V6vnF8HsB8MhkC4QBqC6YXUbG SbJez1jEXPRpqepj41eFtMMTVl/AUzqKWU2a1ictFbisICBVWR4pFsfEW8+Kc5uKSNr1 GFLeCihEhUTu2zKYNYXTAt9ziJT1ZggYp1GkdAC7kTMkRumnBodMcA5lBzNVGqrIddhC I/t//F72CK2wByxhCxY+Cb2YOalYVroac/RNR9Pfyh2FCgAiOMkg8o221PGjwlMh6JD7 KGnJEJOCuQAgw5hlYkCMypO1JE0aPsn7LLsCPMqKTI2jUmk3Tb4/l66kHcQdDjl1PiCA XvNg== X-Gm-Message-State: AOAM532S+0EUmscL8jrENZrBRVcgxN7gBufftUjhlq75JUnsy2DeafGb eTDvDYQEaK/aBYHis2Cg3pSc9RkNj7Kz3I1Maj0= X-Google-Smtp-Source: ABdhPJxfZ8Rbp3Kr9SIPOSt5SKPGgF7ILOzVcsnMLr9ASo26k+I+ExCKzQLRlvjDPEdNw3ZLNnlDvw== X-Received: by 2002:a17:902:ecd2:: with SMTP id a18mr15218221plh.84.1644219512302; Sun, 06 Feb 2022 23:38:32 -0800 (PST) From: Luke Yue To: libvir-list@redhat.com Subject: [PATCH v5 3/8] conf: Add virDomainDeviceTypeFlags and use it in various drivers Date: Mon, 7 Feb 2022 15:38:13 +0800 Message-Id: <20220207073818.356659-4-lukedyue@gmail.com> In-Reply-To: <20220207073818.356659-1-lukedyue@gmail.com> References: <20220207073818.356659-1-lukedyue@gmail.com> MIME-Version: 1.0 X-Mimecast-Impersonation-Protect: Policy=CLT - Impersonation Protection Definition; Similar Internal Domain=false; Similar Monitored External Domain=false; Custom External Domain=false; Mimecast External Domain=false; Newly Observed Domain=false; Internal User Name=false; Custom Display Name List=false; Reply-to Address Mismatch=false; Targeted Threat Dictionary=false; Mimecast Threat Dictionary=false; Custom Threat Dictionary=false X-Scanned-By: MIMEDefang 2.84 on 10.11.54.1 X-loop: libvir-list@redhat.com X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZM-MESSAGEID: 1644219677335100003 Content-Type: text/plain; charset="utf-8" Declare and use virDomainDeviceDefOperationsCallbacks in test / QEMU / LXC / libxl drivers to store detachable devices that driver support, this would be useful in future. Also add test driver's memballoon device detach function and QEMU driver's char device detach function to their xmlopt. Signed-off-by: Luke Yue --- src/conf/domain_conf.h | 31 ++++++++++++++++++++++++++ src/libxl/libxl_conf.c | 3 ++- src/libxl/libxl_domain.c | 8 +++++++ src/libxl/libxl_domain.h | 1 + src/lxc/lxc_conf.c | 3 ++- src/lxc/lxc_domain.c | 7 ++++++ src/lxc/lxc_domain.h | 1 + src/qemu/qemu_conf.c | 2 +- src/qemu/qemu_domain.c | 39 +++++++++++++++++++++++++++++++++ src/qemu/qemu_domain.h | 6 +++++ src/test/test_driver.c | 47 +++++++++++++++++++++++++++++++++++++++- 11 files changed, 144 insertions(+), 4 deletions(-) diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 14fb9777de..3bb1092b60 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -90,6 +90,37 @@ typedef enum { VIR_DOMAIN_DEVICE_LAST } virDomainDeviceType; =20 +typedef enum { + VIR_DOMAIN_DEVICE_FLAG_NONE =3D (1 << VIR_DOMAIN_DEVICE_NONE), + VIR_DOMAIN_DEVICE_FLAG_DISK =3D (1 << VIR_DOMAIN_DEVICE_DISK), + VIR_DOMAIN_DEVICE_FLAG_LEASE =3D (1 << VIR_DOMAIN_DEVICE_LEASE), + VIR_DOMAIN_DEVICE_FLAG_FS =3D (1 << VIR_DOMAIN_DEVICE_FS), + VIR_DOMAIN_DEVICE_FLAG_NET =3D (1 << VIR_DOMAIN_DEVICE_NET), + VIR_DOMAIN_DEVICE_FLAG_INPUT =3D (1 << VIR_DOMAIN_DEVICE_INPUT), + VIR_DOMAIN_DEVICE_FLAG_SOUND =3D (1 << VIR_DOMAIN_DEVICE_SOUND), + VIR_DOMAIN_DEVICE_FLAG_VIDEO =3D (1 << VIR_DOMAIN_DEVICE_VIDEO), + VIR_DOMAIN_DEVICE_FLAG_HOSTDEV =3D (1 << VIR_DOMAIN_DEVICE_HOSTDEV), + VIR_DOMAIN_DEVICE_FLAG_WATCHDOG =3D (1 << VIR_DOMAIN_DEVICE_WATCHDOG), + VIR_DOMAIN_DEVICE_FLAG_CONTROLLER =3D (1 << VIR_DOMAIN_DEVICE_CONTROLL= ER), + VIR_DOMAIN_DEVICE_FLAG_GRAPHICS =3D (1 << VIR_DOMAIN_DEVICE_GRAPHICS), + VIR_DOMAIN_DEVICE_FLAG_HUB =3D (1 << VIR_DOMAIN_DEVICE_HUB), + VIR_DOMAIN_DEVICE_FLAG_REDIRDEV =3D (1 << VIR_DOMAIN_DEVICE_REDIRDEV), + VIR_DOMAIN_DEVICE_FLAG_SMARTCARD =3D (1 << VIR_DOMAIN_DEVICE_SMARTCARD= ), + VIR_DOMAIN_DEVICE_FLAG_CHR =3D (1 << VIR_DOMAIN_DEVICE_CHR), + VIR_DOMAIN_DEVICE_FLAG_MEMBALLOON =3D (1 << VIR_DOMAIN_DEVICE_MEMBALLO= ON), + VIR_DOMAIN_DEVICE_FLAG_NVRAM =3D (1 << VIR_DOMAIN_DEVICE_NVRAM), + VIR_DOMAIN_DEVICE_FLAG_RNG =3D (1 << VIR_DOMAIN_DEVICE_RNG), + VIR_DOMAIN_DEVICE_FLAG_SHMEM =3D (1 << VIR_DOMAIN_DEVICE_SHMEM), + VIR_DOMAIN_DEVICE_FLAG_TPM =3D (1 << VIR_DOMAIN_DEVICE_TPM), + VIR_DOMAIN_DEVICE_FLAG_PANIC =3D (1 << VIR_DOMAIN_DEVICE_PANIC), + VIR_DOMAIN_DEVICE_FLAG_MEMORY =3D (1 << VIR_DOMAIN_DEVICE_MEMORY), + VIR_DOMAIN_DEVICE_FLAG_IOMMU =3D (1 << VIR_DOMAIN_DEVICE_IOMMU), + VIR_DOMAIN_DEVICE_FLAG_VSOCK =3D (1 << VIR_DOMAIN_DEVICE_VSOCK), + VIR_DOMAIN_DEVICE_FLAG_AUDIO =3D (1 << VIR_DOMAIN_DEVICE_AUDIO), + + VIR_DOMAIN_DEVICE_FLAG_LAST =3D (1 << VIR_DOMAIN_DEVICE_LAST) +} virDomainDeviceTypeFlags; + struct _virDomainDeviceDef { int type; /* enum virDomainDeviceType */ union { diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c index 032f7196c2..aaf4a134a9 100644 --- a/src/libxl/libxl_conf.c +++ b/src/libxl/libxl_conf.c @@ -2486,5 +2486,6 @@ libxlCreateXMLConf(libxlDriverPrivate *driver) return virDomainXMLOptionNew(&libxlDomainDefParserConfig, &libxlDomainXMLPrivateDataCallbacks, &libxlDriverDomainXMLNamespace, - NULL, NULL, NULL); + NULL, NULL, + &libxlDriverDeviceDefOpsCallbacks); } diff --git a/src/libxl/libxl_domain.c b/src/libxl/libxl_domain.c index 577985b5ea..e20adfd846 100644 --- a/src/libxl/libxl_domain.c +++ b/src/libxl/libxl_domain.c @@ -1599,3 +1599,11 @@ virXMLNamespace libxlDriverDomainXMLNamespace =3D { .prefix =3D "xen", .uri =3D "http://libvirt.org/schemas/domain/xen/1.0", }; + + +virDomainDeviceDefOperationsCallbacks libxlDriverDeviceDefOpsCallbacks =3D= { + .detachFlags =3D VIR_DOMAIN_DEVICE_FLAG_DISK | + VIR_DOMAIN_DEVICE_FLAG_NET | + VIR_DOMAIN_DEVICE_FLAG_HOSTDEV | + VIR_DOMAIN_DEVICE_FLAG_CONTROLLER, +}; diff --git a/src/libxl/libxl_domain.h b/src/libxl/libxl_domain.h index 981bfc2bca..1534597cd9 100644 --- a/src/libxl/libxl_domain.h +++ b/src/libxl/libxl_domain.h @@ -68,6 +68,7 @@ struct _libxlDomainObjPrivate { extern virDomainXMLPrivateDataCallbacks libxlDomainXMLPrivateDataCallbacks; extern virDomainDefParserConfig libxlDomainDefParserConfig; extern virXMLNamespace libxlDriverDomainXMLNamespace; +extern virDomainDeviceDefOperationsCallbacks libxlDriverDeviceDefOpsCallba= cks; extern const struct libxl_event_hooks ev_hooks; =20 int diff --git a/src/lxc/lxc_conf.c b/src/lxc/lxc_conf.c index 01a159438e..49b42033d3 100644 --- a/src/lxc/lxc_conf.c +++ b/src/lxc/lxc_conf.c @@ -190,7 +190,8 @@ lxcDomainXMLConfInit(virLXCDriver *driver, const char *= defsecmodel) return virDomainXMLOptionNew(&virLXCDriverDomainDefParserConfig, &virLXCDriverPrivateDataCallbacks, &virLXCDriverDomainXMLNamespace, - NULL, NULL, NULL); + NULL, NULL, + &virLXCDriverDeviceDefOpsCallbacks); } =20 =20 diff --git a/src/lxc/lxc_domain.c b/src/lxc/lxc_domain.c index 0920e91fd1..5c3bc89c1c 100644 --- a/src/lxc/lxc_domain.c +++ b/src/lxc/lxc_domain.c @@ -496,3 +496,10 @@ virLXCDomainSetRunlevel(virDomainObj *vm, data.st_valid =3D NULL; return ret; } + + +virDomainDeviceDefOperationsCallbacks virLXCDriverDeviceDefOpsCallbacks = =3D { + .detachFlags =3D VIR_DOMAIN_DEVICE_FLAG_DISK | + VIR_DOMAIN_DEVICE_FLAG_NET | + VIR_DOMAIN_DEVICE_FLAG_HOSTDEV, +}; diff --git a/src/lxc/lxc_domain.h b/src/lxc/lxc_domain.h index 766837bdf1..2bdd67886e 100644 --- a/src/lxc/lxc_domain.h +++ b/src/lxc/lxc_domain.h @@ -92,6 +92,7 @@ struct _virLXCDomainObjPrivate { extern virXMLNamespace virLXCDriverDomainXMLNamespace; extern virDomainXMLPrivateDataCallbacks virLXCDriverPrivateDataCallbacks; extern virDomainDefParserConfig virLXCDriverDomainDefParserConfig; +extern virDomainDeviceDefOperationsCallbacks virLXCDriverDeviceDefOpsCallb= acks; =20 int virLXCDomainObjBeginJob(virLXCDriver *driver, diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c index 8b2926f766..aad361034a 100644 --- a/src/qemu/qemu_conf.c +++ b/src/qemu/qemu_conf.c @@ -1297,7 +1297,7 @@ virQEMUDriverCreateXMLConf(virQEMUDriver *driver, &virQEMUDriverDomainXMLNamespace, &virQEMUDriverDomainABIStability, &virQEMUDriverDomainSaveCookie, - NULL); + &virQEMUDriverDeviceDefOpsCallbacks); } =20 =20 diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 14b585c6e9..bbf9804f09 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -29,6 +29,7 @@ #include "qemu_process.h" #include "qemu_capabilities.h" #include "qemu_hostdev.h" +#include "qemu_hotplug.h" #include "qemu_migration.h" #include "qemu_migration_params.h" #include "qemu_security.h" @@ -11563,6 +11564,24 @@ qemuDomainDeviceBackendChardevForeachOne(virDomain= DeviceDef *dev, return 0; } =20 + +int +qemuDomainDetachDeviceChrConfig(virDomainDef *vmdef, + virDomainDeviceDef *dev, + unsigned int flags) +{ + virDomainChrDef *chr; + + virCheckFlags(VIR_DOMAIN_AFFECT_CONFIG, -1); + + if (!(chr =3D qemuDomainChrRemove(vmdef, dev->data.chr))) + return -1; + + virDomainChrDefFree(chr); + + return 0; +} + struct qemuDomainDeviceBackendChardevIterData { qemuDomainDeviceBackendChardevForeachCallback cb; void *cbdata; @@ -11605,3 +11624,23 @@ qemuDomainDeviceBackendChardevForeach(virDomainDef= *def, DOMAIN_DEVICE_ITERATE_MISSING_I= NFO, &data); } + + +virDomainDeviceDefOperationsCallbacks virQEMUDriverDeviceDefOpsCallbacks = =3D { + .detachChr =3D qemuDomainDetachDeviceChrConfig, + .detachFlags =3D VIR_DOMAIN_DEVICE_FLAG_DISK | + VIR_DOMAIN_DEVICE_FLAG_NET | + VIR_DOMAIN_DEVICE_FLAG_SOUND | + VIR_DOMAIN_DEVICE_FLAG_HOSTDEV | + VIR_DOMAIN_DEVICE_FLAG_LEASE | + VIR_DOMAIN_DEVICE_FLAG_CONTROLLER | + VIR_DOMAIN_DEVICE_FLAG_CHR | + VIR_DOMAIN_DEVICE_FLAG_FS | + VIR_DOMAIN_DEVICE_FLAG_RNG | + VIR_DOMAIN_DEVICE_FLAG_MEMORY | + VIR_DOMAIN_DEVICE_FLAG_REDIRDEV | + VIR_DOMAIN_DEVICE_FLAG_SHMEM | + VIR_DOMAIN_DEVICE_FLAG_WATCHDOG | + VIR_DOMAIN_DEVICE_FLAG_INPUT | + VIR_DOMAIN_DEVICE_FLAG_VSOCK, +}; diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h index 78474b3f73..79c0fcfe33 100644 --- a/src/qemu/qemu_domain.h +++ b/src/qemu/qemu_domain.h @@ -723,6 +723,7 @@ void qemuDomainObjPrivateDataClear(qemuDomainObjPrivate= *priv); extern virDomainXMLPrivateDataCallbacks virQEMUDriverPrivateDataCallbacks; extern virXMLNamespace virQEMUDriverDomainXMLNamespace; extern virDomainDefParserConfig virQEMUDriverDomainDefParserConfig; +extern virDomainDeviceDefOperationsCallbacks virQEMUDriverDeviceDefOpsCall= backs; extern virDomainABIStability virQEMUDriverDomainABIStability; extern virSaveCookieCallbacks virQEMUDriverDomainSaveCookie; =20 @@ -1058,3 +1059,8 @@ int qemuDomainDeviceBackendChardevForeach(virDomainDef *def, qemuDomainDeviceBackendChardevForeac= hCallback cb, void *opaque); + +int +qemuDomainDetachDeviceChrConfig(virDomainDef *vmdef, + virDomainDeviceDef *dev, + unsigned int flags); diff --git a/src/test/test_driver.c b/src/test/test_driver.c index e4eb0e87d2..2380c37ddb 100644 --- a/src/test/test_driver.c +++ b/src/test/test_driver.c @@ -431,6 +431,31 @@ testDomainObjPrivateFree(void *data) } =20 =20 +static int +testDomainDetachMemballoonDevice(virDomainDef *vmdef, + virDomainDeviceDef *dev G_GNUC_UNUSED, + unsigned int flags) +{ + if (flags & VIR_DOMAIN_AFFECT_LIVE) { + virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", + _("detach memballon device on running domain " + "is not supported")); + return -1; + } + + if (!vmdef->memballoon) { + virReportError(VIR_ERR_DEVICE_MISSING, "%s", + _("no memballoon device was found")); + return -1; + } + + virDomainMemballoonDefFree(vmdef->memballoon); + vmdef->memballoon =3D NULL; + + return 0; +} + + static testDriver * testDriverNew(void) { @@ -454,6 +479,26 @@ testDriverNew(void) .alloc =3D testDomainObjPrivateAlloc, .free =3D testDomainObjPrivateFree, }; + virDomainDeviceDefOperationsCallbacks deviceOps =3D { + .detachMemballoon =3D testDomainDetachMemballoonDevice, + .detachFlags =3D VIR_DOMAIN_DEVICE_FLAG_DISK | + VIR_DOMAIN_DEVICE_FLAG_NET | + VIR_DOMAIN_DEVICE_FLAG_SOUND | + VIR_DOMAIN_DEVICE_FLAG_HOSTDEV | + VIR_DOMAIN_DEVICE_FLAG_LEASE | + VIR_DOMAIN_DEVICE_FLAG_CONTROLLER | + VIR_DOMAIN_DEVICE_FLAG_CHR | + VIR_DOMAIN_DEVICE_FLAG_FS | + VIR_DOMAIN_DEVICE_FLAG_RNG | + VIR_DOMAIN_DEVICE_FLAG_MEMORY | + VIR_DOMAIN_DEVICE_FLAG_REDIRDEV | + VIR_DOMAIN_DEVICE_FLAG_SHMEM | + VIR_DOMAIN_DEVICE_FLAG_WATCHDOG | + VIR_DOMAIN_DEVICE_FLAG_INPUT | + VIR_DOMAIN_DEVICE_FLAG_VSOCK | + VIR_DOMAIN_DEVICE_FLAG_TPM | + VIR_DOMAIN_DEVICE_FLAG_MEMBALLOON, + }; testDriver *ret; =20 if (testDriverInitialize() < 0) @@ -463,7 +508,7 @@ testDriverNew(void) return NULL; =20 if (!(ret->xmlopt =3D virDomainXMLOptionNew(&config, &privatecb, &ns, - NULL, NULL, NULL)) || + NULL, NULL, &deviceOps)) || !(ret->eventState =3D virObjectEventStateNew()) || !(ret->ifaces =3D virInterfaceObjListNew()) || !(ret->domains =3D virDomainObjListNew()) || --=20 2.35.1