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/[email protected]/
Assisted-by: Kiro
Signed-off-by: Alexander Graf <[email protected]>
---
 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


Reply via email to