From nobody Mon Feb 9 19:04:39 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1767913485; cv=none; d=zohomail.com; s=zohoarc; b=DISsS27hmO1M/zmVnfXp44bHhzAuEZJeCNoM79J8D4vK+BPzjNDKlNuzkaG4T71AzFAAn48SuBKZVcoD1ZcihBN2njeFl445idYkY5cGjXilefOmwt8wemULyXCR6FgOmsuXqnFPiZITEgJTd3Q1D3NT4mLwz2keb1G58Qfqp84= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1767913485; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=28C1ctKTrEVdRzLWw7bIF8SA92UWDtU9p/oPvVwMmW8=; b=FvBO0vrtOs5zzakvbt0bTSTPS7km8cUkYlKVmBrABkeIHus7ZfP3qRPoYJPFdGXVoUZ/HcGrZ3z3qzjRzfGjY9kNSYTiZ/eezH2q/y+C3E1DMQWW8KGh2uSqNOmhAebR8GOwg5ETG958U1+qR/knFws2iILOJx61N4yDAJQJ2go= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1767913485704141.92360549377145; Thu, 8 Jan 2026 15:04:45 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vdz3L-00079e-Np; Thu, 08 Jan 2026 18:04:27 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vdz3K-00078x-Dw for qemu-devel@nongnu.org; Thu, 08 Jan 2026 18:04:26 -0500 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vdz3D-0003Tr-Fx for qemu-devel@nongnu.org; Thu, 08 Jan 2026 18:04:21 -0500 Received: from mail-qk1-f198.google.com (mail-qk1-f198.google.com [209.85.222.198]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-220-F0UbDV9oPJ-FDVfodI8gMw-1; Thu, 08 Jan 2026 18:04:16 -0500 Received: by mail-qk1-f198.google.com with SMTP id af79cd13be357-8b2217a9c60so751741485a.3 for ; Thu, 08 Jan 2026 15:04:16 -0800 (PST) Received: from csomani-thinkpadp1gen7.rmtusca.csb ([47.153.136.179]) by smtp.gmail.com with ESMTPSA id af79cd13be357-8c37f51b787sm680000685a.29.2026.01.08.15.04.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Jan 2026 15:04:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1767913458; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=28C1ctKTrEVdRzLWw7bIF8SA92UWDtU9p/oPvVwMmW8=; b=TYtLg3iJpVOnZsbUJPpN9bLsDvW1oK/b+xPU03cjDSr5i0lvJdW06aWz4f89N+C3UfOxoD E5RFVYShnfH4NW5SIb5FzplpSGPNhrpIS8bsKhpT7B+wymEJQZsCupRSG5jWX/tpeI7uHS EkuUkYREd5wAO7uLa3qgn9Tsf1JKdgE= X-MC-Unique: F0UbDV9oPJ-FDVfodI8gMw-1 X-Mimecast-MFC-AGG-ID: F0UbDV9oPJ-FDVfodI8gMw_1767913456 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1767913456; x=1768518256; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=28C1ctKTrEVdRzLWw7bIF8SA92UWDtU9p/oPvVwMmW8=; b=XTEUlzajpL+VkCnfvDzGXy4TcSaE9zNxT8sKBZTs5o/I3OPL03NNRc1VRGeVxSkTnI 966pMaiH76UW4osLqcossO6N2Dsw0kPOykPmyYiwzE898qOTNvIi0QuJG2idBQ28V8/J IktfwQ/JrCbqYqfGhmccCqsFXFbm2Ln+ITrh0C0QaXDMJDjmNdZ8QijX1N0GtjmYH9Gx v7uQg1+4PQwXSPnqLrSjIkCIOCstELpqSrTdMhAyUUm0kExWyicIM4T8KNRsrrSMoSN3 kWb65GbcEIam2qZz6N3alEVhyTsXgk5AnaqxS66I69A3hjK8LE9MuuM2kwOVZFkLw1U+ lUxQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767913456; x=1768518256; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=28C1ctKTrEVdRzLWw7bIF8SA92UWDtU9p/oPvVwMmW8=; b=Ya0Gmc3jUuPU3YkTD0JYseR2uTpCLGM5u40xa/1vHm4Rw5Dbbp2Nc3moDZuwXNeOD2 Vl0QbNLlS4ZuUM8ihj5jLFWwwe4MweEKyo0bmpfOL6KlxrefR3XukOntpVs556G6s5E9 OVfi1vwlEdpXdXTnlG2M8ZzagrMk6IAs9qeHAuWCm87X/BMxHZUC+bEGme2nJLBRdjeP nWkW8E8WjcIwNsZMA5kSKQfJnT8EAKT91ysK8AkS4r4n7p7sWoQDR01dXXaG3vist0l8 PxnovSDl/V8XWSJkY/aXIeb2qY+yWmluNb91Y6+fu4qhNjIkE0CNG3JPUyyA1svoJwP0 bUKQ== X-Gm-Message-State: AOJu0YztftyUlG2iAhZHaQyhwAnD7nBdDQuq/5HaQ/6oR1QM7Xf4AHwy u1WI6M4gaIKjwEHQbnth0o1+cnKkPd8mLtC0mRk8rpknyerWTBlwcULtzP6Vgzf6Z1sjerbf8IC kjUYvSCzt94LSPQ/LCL1880ha5iasVdzB3lkpSpmTj5uls1QPlp1VGQs00ArWRgCSfcCD3OgZOf 8YZyxFvO6ygn2V5ca/t02tHmJkvouyVts/mHtYKP0= X-Gm-Gg: AY/fxX4p826aS8Wu9re4xcEn6NHnx0hKYnNe/iPqJHkfYnT1aKu6bVOn6J10wX/nlJU eeey6obP8i7wAtLvrmtIVib5kIWB8Z5IttaVCYgN3NIt0FHGS/YSXhvW08fTrK7aJIOUfKWagfM 7ZsCq/TbYsbQ6ZAwuDUKPgO0ALZy2Cphexo0Wv/fdQEfGBNYjmiF30zLWt3Ajv6FrK+T5y57LWX p3cTrNTfTp+4YHZzHrRQ6KgaqRr5ge4M0ADC1VmHp6PWCK/Vj7QQ/LyIjhrfEC+AXYx3wVSrJG1 EKbwFD/Y6rTyPQtinOCj56VeCro0qZfxyMAN59rZmmuciJuMDH5EG+tmSVvfhGRcPHUh03bT6xg OVn3PzkHKkPUzcExmnK1eUV3EmuO/sKPpZAjtuXc= X-Received: by 2002:a05:620a:4089:b0:8b2:e15c:be60 with SMTP id af79cd13be357-8c389429edfmr1151530585a.88.1767913455852; Thu, 08 Jan 2026 15:04:15 -0800 (PST) X-Google-Smtp-Source: AGHT+IFEzpr1GQrEXWuyPIlt8GSQ6kEPhcXsingypDfUp1NZHGB0W62CWYumbHQlhlvJEYDaJL12rg== X-Received: by 2002:a05:620a:4089:b0:8b2:e15c:be60 with SMTP id af79cd13be357-8c389429edfmr1151524285a.88.1767913455391; Thu, 08 Jan 2026 15:04:15 -0800 (PST) From: Chandan Somani To: qemu-devel@nongnu.org Cc: stefanha@redhat.com, marcandre.lureau@gmail.com, Chandan Somani , Kevin Wolf , Hanna Reitz , Paolo Bonzini , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Eduardo Habkost , Peter Maydell , Yoshinori Sato , Jiri Pirko , Jason Wang , Alistair Francis , "Edgar E. Iglesias" , "Michael S. Tsirkin" , Eric Auger , qemu-block@nongnu.org (open list:Block layer core), qemu-arm@nongnu.org (open list:Stellaris) Subject: [PATCH v2 1/5] qdev: Free property array on release Date: Thu, 8 Jan 2026 15:03:07 -0800 Message-ID: <20260108230311.584141-2-csomani@redhat.com> X-Mailer: git-send-email 2.51.1 In-Reply-To: <20260108230311.584141-1-csomani@redhat.com> References: <20260108230311.584141-1-csomani@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=csomani@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1767913489617158500 Content-Type: text/plain; charset="utf-8" Before this patch, users of the property array would free the array themselves in their cleanup functions. This causes inconsistencies where some users leak the array and some free them. This patch makes it so that the property array's release function frees the property array (instead of just its elements). It fixes any leaks and requires less code. DEFINE_PROP_ARRAY leakers that are fixed in this patch: ebpf-rss_fds in hw/net/virtio-net.c rnmi_irqvec, rnmi_excpvec in hw/riscv/riscv_hart.c common.display_modes in hw/display/apple-gfx-mmio.m common.display_modes in hw/display/apple-gfx-pci.m Signed-off-by: Chandan Somani --- block/accounting.c | 1 - hw/core/qdev-properties.c | 21 ++++++++++----------- hw/input/stellaris_gamepad.c | 8 -------- hw/intc/arm_gicv3_common.c | 8 -------- hw/intc/rx_icu.c | 8 -------- hw/misc/arm_sysctl.c | 2 -- hw/misc/mps2-scc.c | 8 -------- hw/net/rocker/rocker.c | 1 - hw/nvram/xlnx-efuse.c | 8 -------- hw/nvram/xlnx-versal-efuse-ctrl.c | 8 -------- hw/virtio/virtio-iommu-pci.c | 8 -------- 11 files changed, 10 insertions(+), 71 deletions(-) diff --git a/block/accounting.c b/block/accounting.c index 0933c61f3a..5cf51f029b 100644 --- a/block/accounting.c +++ b/block/accounting.c @@ -73,7 +73,6 @@ bool block_acct_setup(BlockAcctStats *stats, enum OnOffAu= to account_invalid, } block_acct_add_interval(stats, stats_intervals[i]); } - g_free(stats_intervals); } return true; } diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c index 05489c8fbb..c8379fda9d 100644 --- a/hw/core/qdev-properties.c +++ b/hw/core/qdev-properties.c @@ -673,10 +673,8 @@ static Property array_elem_prop(Object *obj, const Pro= perty *parent_prop, =20 /* * Object property release callback for array properties: We call the - * underlying element's property release hook for each element. - * - * Note that it is the responsibility of the individual device's deinit - * to free the array proper. + * underlying element's property release hook for each element and free the + * property array. */ static void release_prop_array(Object *obj, const char *name, void *opaque) { @@ -686,15 +684,16 @@ static void release_prop_array(Object *obj, const cha= r *name, void *opaque) char *elem =3D *arrayptr; int i; =20 - if (!prop->arrayinfo->release) { - return; + if (prop->arrayinfo->release) { + for (i =3D 0; i < *alenptr; i++) { + Property elem_prop =3D array_elem_prop(obj, prop, name, elem); + prop->arrayinfo->release(obj, NULL, &elem_prop); + elem +=3D prop->arrayfieldsize; + } } =20 - for (i =3D 0; i < *alenptr; i++) { - Property elem_prop =3D array_elem_prop(obj, prop, name, elem); - prop->arrayinfo->release(obj, NULL, &elem_prop); - elem +=3D prop->arrayfieldsize; - } + g_clear_pointer(arrayptr, g_free); + *alenptr =3D 0; } =20 /* diff --git a/hw/input/stellaris_gamepad.c b/hw/input/stellaris_gamepad.c index f64f5ea9ce..42d43f9af5 100644 --- a/hw/input/stellaris_gamepad.c +++ b/hw/input/stellaris_gamepad.c @@ -63,13 +63,6 @@ static void stellaris_gamepad_realize(DeviceState *dev, = Error **errp) qemu_input_handler_register(dev, &stellaris_gamepad_handler); } =20 -static void stellaris_gamepad_finalize(Object *obj) -{ - StellarisGamepad *s =3D STELLARIS_GAMEPAD(obj); - - g_free(s->keycodes); -} - static void stellaris_gamepad_reset_enter(Object *obj, ResetType type) { StellarisGamepad *s =3D STELLARIS_GAMEPAD(obj); @@ -98,7 +91,6 @@ static const TypeInfo stellaris_gamepad_info[] =3D { .name =3D TYPE_STELLARIS_GAMEPAD, .parent =3D TYPE_SYS_BUS_DEVICE, .instance_size =3D sizeof(StellarisGamepad), - .instance_finalize =3D stellaris_gamepad_finalize, .class_init =3D stellaris_gamepad_class_init, }, }; diff --git a/hw/intc/arm_gicv3_common.c b/hw/intc/arm_gicv3_common.c index 0a2e5a3e2f..e5f3c3c447 100644 --- a/hw/intc/arm_gicv3_common.c +++ b/hw/intc/arm_gicv3_common.c @@ -488,13 +488,6 @@ static void arm_gicv3_common_realize(DeviceState *dev,= Error **errp) s->itslist =3D g_ptr_array_new(); } =20 -static void arm_gicv3_finalize(Object *obj) -{ - GICv3State *s =3D ARM_GICV3_COMMON(obj); - - g_free(s->redist_region_count); -} - static void arm_gicv3_common_reset_hold(Object *obj, ResetType type) { GICv3State *s =3D ARM_GICV3_COMMON(obj); @@ -644,7 +637,6 @@ static const TypeInfo arm_gicv3_common_type =3D { .instance_size =3D sizeof(GICv3State), .class_size =3D sizeof(ARMGICv3CommonClass), .class_init =3D arm_gicv3_common_class_init, - .instance_finalize =3D arm_gicv3_finalize, .abstract =3D true, .interfaces =3D (const InterfaceInfo[]) { { TYPE_ARM_LINUX_BOOT_IF }, diff --git a/hw/intc/rx_icu.c b/hw/intc/rx_icu.c index 87cdc6cbde..992b069ae2 100644 --- a/hw/intc/rx_icu.c +++ b/hw/intc/rx_icu.c @@ -334,13 +334,6 @@ static void rxicu_init(Object *obj) sysbus_init_irq(d, &icu->_swi); } =20 -static void rxicu_fini(Object *obj) -{ - RXICUState *icu =3D RX_ICU(obj); - g_free(icu->map); - g_free(icu->init_sense); -} - static const VMStateDescription vmstate_rxicu =3D { .name =3D "rx-icu", .version_id =3D 1, @@ -382,7 +375,6 @@ static const TypeInfo rxicu_info =3D { .parent =3D TYPE_SYS_BUS_DEVICE, .instance_size =3D sizeof(RXICUState), .instance_init =3D rxicu_init, - .instance_finalize =3D rxicu_fini, .class_init =3D rxicu_class_init, }; =20 diff --git a/hw/misc/arm_sysctl.c b/hw/misc/arm_sysctl.c index 2a317ac7f5..7b320f89c1 100644 --- a/hw/misc/arm_sysctl.c +++ b/hw/misc/arm_sysctl.c @@ -618,9 +618,7 @@ static void arm_sysctl_finalize(Object *obj) { arm_sysctl_state *s =3D ARM_SYSCTL(obj); =20 - g_free(s->db_voltage); g_free(s->db_clock); - g_free(s->db_clock_reset); } =20 static const Property arm_sysctl_properties[] =3D { diff --git a/hw/misc/mps2-scc.c b/hw/misc/mps2-scc.c index 350bba3dab..7877b31479 100644 --- a/hw/misc/mps2-scc.c +++ b/hw/misc/mps2-scc.c @@ -405,13 +405,6 @@ static void mps2_scc_realize(DeviceState *dev, Error *= *errp) s->oscclk =3D g_new0(uint32_t, s->num_oscclk); } =20 -static void mps2_scc_finalize(Object *obj) -{ - MPS2SCC *s =3D MPS2_SCC(obj); - - g_free(s->oscclk_reset); -} - static bool cfg7_needed(void *opaque) { MPS2SCC *s =3D opaque; @@ -489,7 +482,6 @@ static const TypeInfo mps2_scc_info =3D { .parent =3D TYPE_SYS_BUS_DEVICE, .instance_size =3D sizeof(MPS2SCC), .instance_init =3D mps2_scc_init, - .instance_finalize =3D mps2_scc_finalize, .class_init =3D mps2_scc_class_init, }; =20 diff --git a/hw/net/rocker/rocker.c b/hw/net/rocker/rocker.c index 3eb7b44511..4a7056bd45 100644 --- a/hw/net/rocker/rocker.c +++ b/hw/net/rocker/rocker.c @@ -1429,7 +1429,6 @@ static void pci_rocker_uninit(PCIDevice *dev) world_free(r->worlds[i]); } } - g_free(r->fp_ports_peers); } =20 static void rocker_reset(DeviceState *dev) diff --git a/hw/nvram/xlnx-efuse.c b/hw/nvram/xlnx-efuse.c index facbef3fc4..5531ffe550 100644 --- a/hw/nvram/xlnx-efuse.c +++ b/hw/nvram/xlnx-efuse.c @@ -224,13 +224,6 @@ static void efuse_realize(DeviceState *dev, Error **er= rp) } } =20 -static void efuse_finalize(Object *obj) -{ - XlnxEFuse *s =3D XLNX_EFUSE(obj); - - g_free(s->ro_bits); -} - static void efuse_prop_set_drive(Object *obj, Visitor *v, const char *name, void *opaque, Error **errp) { @@ -288,7 +281,6 @@ static const TypeInfo efuse_info =3D { .name =3D TYPE_XLNX_EFUSE, .parent =3D TYPE_DEVICE, .instance_size =3D sizeof(XlnxEFuse), - .instance_finalize =3D efuse_finalize, .class_init =3D efuse_class_init, }; =20 diff --git a/hw/nvram/xlnx-versal-efuse-ctrl.c b/hw/nvram/xlnx-versal-efuse= -ctrl.c index b7dc0e49e5..69acdfa304 100644 --- a/hw/nvram/xlnx-versal-efuse-ctrl.c +++ b/hw/nvram/xlnx-versal-efuse-ctrl.c @@ -724,13 +724,6 @@ static void efuse_ctrl_init(Object *obj) sysbus_init_irq(sbd, &s->irq_efuse_imr); } =20 -static void efuse_ctrl_finalize(Object *obj) -{ - XlnxVersalEFuseCtrl *s =3D XLNX_VERSAL_EFUSE_CTRL(obj); - - g_free(s->extra_pg0_lock_spec); -} - static const VMStateDescription vmstate_efuse_ctrl =3D { .name =3D TYPE_XLNX_VERSAL_EFUSE_CTRL, .version_id =3D 1, @@ -767,7 +760,6 @@ static const TypeInfo efuse_ctrl_info =3D { .instance_size =3D sizeof(XlnxVersalEFuseCtrl), .class_init =3D efuse_ctrl_class_init, .instance_init =3D efuse_ctrl_init, - .instance_finalize =3D efuse_ctrl_finalize, }; =20 static void efuse_ctrl_register_types(void) diff --git a/hw/virtio/virtio-iommu-pci.c b/hw/virtio/virtio-iommu-pci.c index f5f6ce7359..7b5ffddc1e 100644 --- a/hw/virtio/virtio-iommu-pci.c +++ b/hw/virtio/virtio-iommu-pci.c @@ -94,18 +94,10 @@ static void virtio_iommu_pci_instance_init(Object *obj) TYPE_VIRTIO_IOMMU); } =20 -static void virtio_iommu_pci_instance_finalize(Object *obj) -{ - VirtIOIOMMUPCI *dev =3D VIRTIO_IOMMU_PCI(obj); - - g_free(dev->vdev.prop_resv_regions); -} - static const VirtioPCIDeviceTypeInfo virtio_iommu_pci_info =3D { .generic_name =3D TYPE_VIRTIO_IOMMU_PCI, .instance_size =3D sizeof(VirtIOIOMMUPCI), .instance_init =3D virtio_iommu_pci_instance_init, - .instance_finalize =3D virtio_iommu_pci_instance_finalize, .class_init =3D virtio_iommu_pci_class_init, }; =20 --=20 2.51.1