From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 64766C43458 for ; Sat, 11 Jul 2026 22:47:44 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wigTY-0008PW-Np; Sat, 11 Jul 2026 18:47:12 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wigTV-0008Mx-N8; Sat, 11 Jul 2026 18:47:09 -0400 Received: from pdx-out-006.esa.us-west-2.outbound.mail-perimeter.amazon.com ([52.26.1.71]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wigTT-0007Pe-8A; Sat, 11 Jul 2026 18:47:09 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amazon.com; i=@amazon.com; q=dns/txt; s=amazoncorp2; t=1783810027; x=1815346027; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=qrYU/6J9K1fxb4U0qKmY9Ctb2pPuWEVVahf8vltU/98=; b=jaxT+XebPBZf4q2mP4nb4H92Lm4EDYzWct3iEZFPmQoucJn8C3dCi5JD tl20tOWvZPJux4+FcZpUQVRPXR09N8kS4/r0vkHm7DNpUcUpky+gj11b8 ghqphEYwmdju5boj3nuhD57EbGimsm/8I3bFb0SVnH3tpFvCBY0bCwxYg 0Qma1gU9WJ/gHJAtY9GhxEAwFuO35/qH2LL5rygtHJ0APSdcUABvOtJWY 6INCClbCMpS3YrupR00QDkFLgLTxJAO601cZWizw84cAIhU5BLIyD/BDG T3g5Qmf+pLI8jWkT9zs+f4eaxr4Xp37e+wH7C1NsE+NCG1Qg12RGqdegG Q==; X-CSE-ConnectionGUID: LO/MXiafRO23K8nPh9ACug== X-CSE-MsgGUID: MGRPoYV+TcO1LqeTHP7r8A== X-IronPort-AV: E=Sophos;i="6.25,154,1779148800"; d="scan'208";a="23522206" Received: from ip-10-5-0-115.us-west-2.compute.internal (HELO smtpout.naws.us-west-2.prod.farcaster.email.amazon.dev) ([10.5.0.115]) by internal-pdx-out-006.esa.us-west-2.outbound.mail-perimeter.amazon.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 Jul 2026 22:47:03 +0000 Received: from EX19MTAUWC001.ant.amazon.com [205.251.233.53:5753] by smtpin.naws.us-west-2.prod.farcaster.email.amazon.dev [10.0.47.135:2525] with esmtp (Farcaster) id 4c311944-0553-4620-a794-e087afeeb4e7; Sat, 11 Jul 2026 22:47:03 +0000 (UTC) X-Farcaster-Flow-ID: 4c311944-0553-4620-a794-e087afeeb4e7 Received: from EX19D001UWA001.ant.amazon.com (10.13.138.214) by EX19MTAUWC001.ant.amazon.com (10.250.64.174) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA) id 15.2.2562.43; Sat, 11 Jul 2026 22:47:03 +0000 Received: from ip-10-253-83-51.amazon.com (172.19.99.218) by EX19D001UWA001.ant.amazon.com (10.13.138.214) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA) id 15.2.2562.43; Sat, 11 Jul 2026 22:46:54 +0000 From: Alexander Graf To: CC: , , , , Song Gao <17746591750@163.com>, Aditya Gupta , Alexey Kardashevskiy , Farhan Ali , Alistair Francis , "Alistair Francis" , Antony Pavlov , Markus Armbruster , Artyom Tarasenko , BALATON Zoltan , Felipe Balbi , Christian Borntraeger , "Brian Cain" , Hendrik Brueckner , Chao Liu , "Huacai Chen" , =?UTF-8?q?Cl=C3=A9ment=20Chigot?= , =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= , Helge Deller , Dorjoy Chowdhury , "Edgar E . Iglesias" , Alexandre Iooss , Eric Farman , Francisco Iglesias , Gaurav Sharma , "Gautam Gala" , Harsh Prateek Bora , =?UTF-8?q?Herv=C3=A9=20Poussineau?= , Jan Kiszka , Max Filippov , Joel Stanley , Jared Rossi , Tyrone Ting , Frederic Konrad , "Laurent Vivier" , Manos Pitsidianakis , Bibo Mao , "Mark Cave-Ayland" , Glenn Miles , Matthew Rosato , "Michael Rolnik" , "Michael S . Tsirkin" , "Niek Linnenbank" , Nicholas Piggin , Palmer Dabbelt , Halil Pasic , "Paolo Bonzini" , Peter Maydell , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , "Pierrick Bouvier" , Richard Henderson , Sai Pavan Boddu , Samuel Tardieu , Bernhard Beschow , Stafford Horne , Sergio Lopez , "Subbaraya Sundeep" , Thomas Huth , "Ran Wang" , Hao Wu , =?UTF-8?q?Daniel=20P=20=2E=20Berrang=C3=A9?= Subject: [RFC PATCH 038/134] hw/net: Give onboard devices a QOM parent Date: Sat, 11 Jul 2026 22:35:31 +0000 Message-ID: <20260711223707.42139-39-graf@amazon.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20260711223707.42139-1-graf@amazon.com> References: <20260711223707.42139-1-graf@amazon.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-Originating-IP: [172.19.99.218] X-ClientProxiedBy: EX19D031UWC001.ant.amazon.com (10.13.139.241) To EX19D001UWA001.ant.amazon.com (10.13.138.214) Received-SPF: pass client-ip=52.26.1.71; envelope-from=prvs=645f258d4=graf@amazon.de; helo=pdx-out-006.esa.us-west-2.outbound.mail-perimeter.amazon.com X-Spam_score_int: -28 X-Spam_score: -2.9 X-Spam_bar: -- X-Spam_report: (-2.9 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HEADER_FROM_DIFFERENT_DOMAINS=0.249, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, T_SPF_PERMERROR=0.01, UNPARSEABLE_RELAY=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-arm@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-arm-bounces+qemu-arm=archiver.kernel.org@nongnu.org Sender: qemu-arm-bounces+qemu-arm=archiver.kernel.org@nongnu.org Convert the *_orphan() device-creation calls in hw/net to the new parented API introduced earlier in this series, so every onboard device gets a stable path in the composition tree instead of landing in /machine/unattached with an unstable device[N] name. The parent for each device is the object that owns its lifetime: the machine for board-created devices, the containing device for composite children. Names follow existing QOM conventions. Per-site rationale (reviewers: dispute the modeling here): hw/net/lan9118.c:1342 | qdev_new | parent | "eth" | thread Object *parent as first arg; 5 board-init callers pass OBJECT(machine) hw/net/smc91c111.c:957 | qdev_new | parent | "eth" | thread Object *parent as first arg; 3 board-init callers pass OBJECT(machine) hw/net/spapr_llan.c:374 | qdev_new | parent | "vlan[*]" | thread Object *parent as first arg; single caller in hw/ppc/spapr.c board-init loop passes OBJECT(spapr) hw/net/xen_nic.c:622 | qdev_new | ORPHAN-JUSTIFIED | - | XenBackendOps.create hotplug callback driven by xenstore watch; dynamic device with no board owner (same pattern as xen-block/xen_console) Link: https://lore.kernel.org/qemu-devel/87jyr3w9tc.fsf@pond.sub.org/ Assisted-by: Kiro Signed-off-by: Alexander Graf --- hw/arm/integratorcp.c | 2 +- hw/arm/kzm.c | 2 +- hw/arm/mps2.c | 2 +- hw/arm/mps3r.c | 2 +- hw/arm/realview.c | 4 ++-- hw/arm/versatilepb.c | 2 +- hw/arm/vexpress.c | 2 +- hw/net/lan9118.c | 6 +++--- hw/net/smc91c111.c | 6 +++--- hw/net/spapr_llan.c | 6 +++--- hw/ppc/spapr.c | 2 +- include/hw/net/lan9118.h | 2 +- include/hw/net/smc91c111.h | 2 +- include/hw/ppc/spapr_vio.h | 2 +- 14 files changed, 21 insertions(+), 21 deletions(-) diff --git a/hw/arm/integratorcp.c b/hw/arm/integratorcp.c index 3df488921a..163012a7bf 100644 --- a/hw/arm/integratorcp.c +++ b/hw/arm/integratorcp.c @@ -670,7 +670,7 @@ static void integratorcp_init(MachineState *machine) sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0, pic[25]); if (qemu_find_nic_info("smc91c111", true, NULL)) { - smc91c111_init(0xc8000000, pic[27]); + smc91c111_init(OBJECT(machine), 0xc8000000, pic[27]); } dev = qdev_new_orphan("pl110"); diff --git a/hw/arm/kzm.c b/hw/arm/kzm.c index 168ecf35d0..de9919c8cb 100644 --- a/hw/arm/kzm.c +++ b/hw/arm/kzm.c @@ -115,7 +115,7 @@ static void kzm_init(MachineState *machine) } if (qemu_find_nic_info("lan9118", true, NULL)) { - lan9118_init(KZM_LAN9118_ADDR, + lan9118_init(OBJECT(machine), KZM_LAN9118_ADDR, qdev_get_gpio_in(DEVICE(&s->soc.avic), 52)); } diff --git a/hw/arm/mps2.c b/hw/arm/mps2.c index 5a0384a412..e646c7c71e 100644 --- a/hw/arm/mps2.c +++ b/hw/arm/mps2.c @@ -461,7 +461,7 @@ static void mps2_common_init(MachineState *machine) /* In hardware this is a LAN9220; the LAN9118 is software compatible * except that it doesn't support the checksum-offload feature. */ - lan9118_init(mmc->ethernet_base, + lan9118_init(OBJECT(machine), mmc->ethernet_base, qdev_get_gpio_in(armv7m, mmc->fpga_type == FPGA_AN511 ? 47 : 13)); diff --git a/hw/arm/mps3r.c b/hw/arm/mps3r.c index caad820d3b..8e249c9b9d 100644 --- a/hw/arm/mps3r.c +++ b/hw/arm/mps3r.c @@ -549,7 +549,7 @@ static void mps3r_common_init(MachineState *machine) * In hardware this is a LAN9220; the LAN9118 is software compatible * except that it doesn't support the checksum-offload feature. */ - lan9118_init(0xe0300000, + lan9118_init(OBJECT(machine), 0xe0300000, qdev_get_gpio_in(gicdev, 18)); create_unimplemented_device("usb", 0xe0301000, 0x1000); diff --git a/hw/arm/realview.c b/hw/arm/realview.c index f37ddf8073..f51730c487 100644 --- a/hw/arm/realview.c +++ b/hw/arm/realview.c @@ -309,9 +309,9 @@ static void realview_init(MachineState *machine, if (qemu_find_nic_info(is_pb ? "lan9118" : "smc91c111", true, NULL)) { if (is_pb) { - lan9118_init(0x4e000000, pic[28]); + lan9118_init(OBJECT(machine), 0x4e000000, pic[28]); } else { - smc91c111_init(0x4e000000, pic[28]); + smc91c111_init(OBJECT(machine), 0x4e000000, pic[28]); } } diff --git a/hw/arm/versatilepb.c b/hw/arm/versatilepb.c index dcc7b7debd..5de99cb854 100644 --- a/hw/arm/versatilepb.c +++ b/hw/arm/versatilepb.c @@ -265,7 +265,7 @@ static void versatile_init(MachineState *machine, int board_id) pci_bus = (PCIBus *)qdev_get_child_bus(dev, "pci"); if (qemu_find_nic_info("smc91c111", true, NULL)) { - smc91c111_init(0x10010000, sic[25]); + smc91c111_init(OBJECT(machine), 0x10010000, sic[25]); } pci_init_nic_devices(pci_bus, "rtl8139"); diff --git a/hw/arm/vexpress.c b/hw/arm/vexpress.c index ffd3c52d4f..5cbb2c44cb 100644 --- a/hw/arm/vexpress.c +++ b/hw/arm/vexpress.c @@ -694,7 +694,7 @@ static void vexpress_common_init(MachineState *machine) /* 0x4e000000 LAN9118 Ethernet */ if (qemu_find_nic_info("lan9118", true, NULL)) { - lan9118_init(map[VE_ETHERNET], pic[15]); + lan9118_init(OBJECT(machine), map[VE_ETHERNET], pic[15]); } /* VE_USB: not modelled */ diff --git a/hw/net/lan9118.c b/hw/net/lan9118.c index 87213c0d8d..91c3533702 100644 --- a/hw/net/lan9118.c +++ b/hw/net/lan9118.c @@ -1334,15 +1334,15 @@ static void lan9118_register_types(void) /* Legacy helper function. Should go away when machine config files are implemented. */ -void lan9118_init(uint32_t base, qemu_irq irq) +void lan9118_init(Object *parent, uint32_t base, qemu_irq irq) { DeviceState *dev; SysBusDevice *s; - dev = qdev_new_orphan(TYPE_LAN9118); + dev = qdev_new(parent, "eth", TYPE_LAN9118); qemu_configure_nic_device(dev, true, NULL); s = SYS_BUS_DEVICE(dev); - sysbus_realize_and_unref(s, &error_fatal); + sysbus_realize(s, &error_fatal); sysbus_mmio_map(s, 0, base); sysbus_connect_irq(s, 0, irq); } diff --git a/hw/net/smc91c111.c b/hw/net/smc91c111.c index 6186d88717..85f3d4d34a 100644 --- a/hw/net/smc91c111.c +++ b/hw/net/smc91c111.c @@ -949,15 +949,15 @@ static void smc91c111_register_types(void) /* Legacy helper function. Should go away when machine config files are implemented. */ -void smc91c111_init(uint32_t base, qemu_irq irq) +void smc91c111_init(Object *parent, uint32_t base, qemu_irq irq) { DeviceState *dev; SysBusDevice *s; - dev = qdev_new_orphan(TYPE_SMC91C111); + dev = qdev_new(parent, "eth", TYPE_SMC91C111); qemu_configure_nic_device(dev, true, NULL); s = SYS_BUS_DEVICE(dev); - sysbus_realize_and_unref(s, &error_fatal); + sysbus_realize(s, &error_fatal); sysbus_mmio_map(s, 0, base); sysbus_connect_irq(s, 0, irq); } diff --git a/hw/net/spapr_llan.c b/hw/net/spapr_llan.c index f10ea64798..1d5637f294 100644 --- a/hw/net/spapr_llan.c +++ b/hw/net/spapr_llan.c @@ -367,15 +367,15 @@ static void spapr_vlan_instance_finalize(Object *obj) } } -void spapr_vlan_create(SpaprVioBus *bus, NICInfo *nd) +void spapr_vlan_create(Object *parent, SpaprVioBus *bus, NICInfo *nd) { DeviceState *dev; - dev = qdev_new_orphan("spapr-vlan"); + dev = qdev_new(parent, "vlan[*]", "spapr-vlan"); qdev_set_nic_properties(dev, nd); - qdev_realize_and_unref(dev, &bus->bus, &error_fatal); + qdev_realize(dev, &bus->bus, &error_fatal); } static int spapr_vlan_devnode(SpaprVioDevice *dev, void *fdt, int node_off) diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index 91f9d873b8..b81db9e8f3 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -3056,7 +3056,7 @@ static void spapr_machine_init(MachineState *machine) phb = spapr_create_default_phb(); while ((nd = qemu_find_nic_info("spapr-vlan", true, "ibmveth"))) { - spapr_vlan_create(spapr->vio_bus, nd); + spapr_vlan_create(OBJECT(spapr), spapr->vio_bus, nd); } pci_init_nic_devices(phb->bus, NULL); diff --git a/include/hw/net/lan9118.h b/include/hw/net/lan9118.h index 4bf9da7a63..b199f1912f 100644 --- a/include/hw/net/lan9118.h +++ b/include/hw/net/lan9118.h @@ -15,6 +15,6 @@ #define TYPE_LAN9118 "lan9118" -void lan9118_init(uint32_t, qemu_irq); +void lan9118_init(Object *parent, uint32_t, qemu_irq); #endif diff --git a/include/hw/net/smc91c111.h b/include/hw/net/smc91c111.h index dba32a233f..788f12678e 100644 --- a/include/hw/net/smc91c111.h +++ b/include/hw/net/smc91c111.h @@ -13,6 +13,6 @@ #include "net/net.h" -void smc91c111_init(uint32_t, qemu_irq); +void smc91c111_init(Object *parent, uint32_t, qemu_irq); #endif diff --git a/include/hw/ppc/spapr_vio.h b/include/hw/ppc/spapr_vio.h index 72baef6919..fcb29aebff 100644 --- a/include/hw/ppc/spapr_vio.h +++ b/include/hw/ppc/spapr_vio.h @@ -138,7 +138,7 @@ int spapr_vio_send_crq(SpaprVioDevice *dev, uint8_t *crq); SpaprVioDevice *vty_lookup(SpaprMachineState *spapr, target_ulong reg); void vty_putchars(SpaprVioDevice *sdev, uint8_t *buf, int len); void spapr_vty_create(SpaprVioBus *bus, Chardev *chardev); -void spapr_vlan_create(SpaprVioBus *bus, NICInfo *nd); +void spapr_vlan_create(Object *parent, SpaprVioBus *bus, NICInfo *nd); void spapr_vscsi_create(Object *parent, SpaprVioBus *bus); SpaprVioDevice *spapr_vty_get_default(SpaprVioBus *bus); -- 2.47.1