Now that all callers of pci_vga_init(), pci_init_nic_in_slot() and
isa_vga_init() live in already-converted board files, thread an
Object *parent through these three convenience helpers so that the
default VGA and default NIC created via -vga and -net become proper
children of their machine instead of landing under
/machine/unattached.

pc_vga_init() and the two static network_init() helpers in
hw/mips/{fuloong2e,malta}.c gain the parent argument as well and
pass it through.

Link: https://lore.kernel.org/qemu-devel/[email protected]/
Assisted-by: Kiro
Signed-off-by: Alexander Graf <[email protected]>
---
 hw/alpha/dp264.c         |  2 +-
 hw/i386/isapc.c          |  2 +-
 hw/i386/pc.c             |  6 +++---
 hw/i386/pc_piix.c        |  2 +-
 hw/i386/pc_q35.c         |  2 +-
 hw/isa/isa-bus.c         |  6 +++---
 hw/mips/fuloong2e.c      |  6 +++---
 hw/mips/loongson3_virt.c |  2 +-
 hw/mips/malta.c          |  8 ++++----
 hw/pci/pci.c             | 18 +++++++++---------
 hw/ppc/amigaone.c        |  2 +-
 hw/ppc/mac_newworld.c    |  2 +-
 hw/ppc/mac_oldworld.c    |  2 +-
 hw/ppc/pegasos.c         |  2 +-
 hw/ppc/prep.c            |  4 ++--
 hw/ppc/spapr.c           |  6 +++---
 hw/riscv/boston-aia.c    |  3 ++-
 hw/sh4/r2d.c             |  2 +-
 include/hw/i386/pc.h     |  2 +-
 include/hw/isa/isa.h     |  2 +-
 include/hw/pci/pci.h     |  4 ++--
 21 files changed, 43 insertions(+), 42 deletions(-)

diff --git a/hw/alpha/dp264.c b/hw/alpha/dp264.c
index 40dee88f2d..d7d4fe3e8b 100644
--- a/hw/alpha/dp264.c
+++ b/hw/alpha/dp264.c
@@ -122,7 +122,7 @@ static void clipper_init(MachineState *machine)
     mc146818_rtc_init(mo, isa_bus, 1900, rtc_irq);
 
     /* VGA setup.  Don't bother loading the bios.  */
-    pci_vga_init(pci_bus);
+    pci_vga_init(OBJECT(machine), pci_bus);
 
     /* Network setup.  e1000 is good enough, failing Tulip support.  */
     pci_init_nic_devices(pci_bus, mc->default_nic);
diff --git a/hw/i386/isapc.c b/hw/i386/isapc.c
index c5bba66967..842ae94acb 100644
--- a/hw/i386/isapc.c
+++ b/hw/i386/isapc.c
@@ -130,7 +130,7 @@ static void pc_init_isa(MachineState *machine)
         x86_register_ferr_irq(x86ms->gsi[13]);
     }
 
-    pc_vga_init(isa_bus, NULL);
+    pc_vga_init(OBJECT(machine), isa_bus, NULL);
 
     /* init basic PC hardware */
     pc_basic_device_init(pcms, isa_bus, x86ms->gsi, x86ms->rtc,
diff --git a/hw/i386/pc.c b/hw/i386/pc.c
index 1073888b42..0c89310ab7 100644
--- a/hw/i386/pc.c
+++ b/hw/i386/pc.c
@@ -946,15 +946,15 @@ uint64_t pc_pci_hole64_start(void)
     return ROUND_UP(hole64_start, 1 * GiB);
 }
 
-DeviceState *pc_vga_init(ISABus *isa_bus, PCIBus *pci_bus)
+DeviceState *pc_vga_init(Object *parent, ISABus *isa_bus, PCIBus *pci_bus)
 {
     DeviceState *dev = NULL;
 
     if (pci_bus) {
-        PCIDevice *pcidev = pci_vga_init(pci_bus);
+        PCIDevice *pcidev = pci_vga_init(parent, pci_bus);
         dev = pcidev ? &pcidev->qdev : NULL;
     } else if (isa_bus) {
-        ISADevice *isadev = isa_vga_init(isa_bus);
+        ISADevice *isadev = isa_vga_init(parent, isa_bus);
         dev = isadev ? DEVICE(isadev) : NULL;
     }
 
diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
index 8ae2108e73..c9e6c61734 100644
--- a/hw/i386/pc_piix.c
+++ b/hw/i386/pc_piix.c
@@ -290,7 +290,7 @@ static void pc_init1(MachineState *machine, const char 
*pci_type)
         x86_register_ferr_irq(x86ms->gsi[13]);
     }
 
-    pc_vga_init(isa_bus, pcms->pcibus);
+    pc_vga_init(OBJECT(machine), isa_bus, pcms->pcibus);
 
     /* init basic PC hardware */
     pc_basic_device_init(pcms, isa_bus, x86ms->gsi, x86ms->rtc,
diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c
index 1a65811fae..62625abed8 100644
--- a/hw/i386/pc_q35.c
+++ b/hw/i386/pc_q35.c
@@ -325,7 +325,7 @@ static void pc_q35_init(MachineState *machine)
     }
 
     /* the rest devices to which pci devfn is automatically assigned */
-    pc_vga_init(isa_bus, pcms->pcibus);
+    pc_vga_init(OBJECT(machine), isa_bus, pcms->pcibus);
     pc_nic_init(pcmc, isa_bus, pcms->pcibus);
 
     if (machine->nvdimms_state->is_enabled) {
diff --git a/hw/isa/isa-bus.c b/hw/isa/isa-bus.c
index c15cf53469..fb20c43869 100644
--- a/hw/isa/isa-bus.c
+++ b/hw/isa/isa-bus.c
@@ -200,17 +200,17 @@ ISABus *isa_bus_from_device(ISADevice *dev)
     return ISA_BUS(qdev_get_parent_bus(DEVICE(dev)));
 }
 
-ISADevice *isa_vga_init(ISABus *bus)
+ISADevice *isa_vga_init(Object *parent, ISABus *bus)
 {
     vga_interface_created = true;
     switch (vga_interface_type) {
     case VGA_CIRRUS:
-        return isa_create_simple_orphan(bus, "isa-cirrus-vga");
+        return isa_create_simple(parent, "vga", bus, "isa-cirrus-vga");
     case VGA_QXL:
         error_report("%s: qxl: no PCI bus", __func__);
         return NULL;
     case VGA_STD:
-        return isa_create_simple_orphan(bus, "isa-vga");
+        return isa_create_simple(parent, "vga", bus, "isa-vga");
     case VGA_VMWARE:
         error_report("%s: vmware_vga: no PCI bus", __func__);
         return NULL;
diff --git a/hw/mips/fuloong2e.c b/hw/mips/fuloong2e.c
index 88d2901829..477ad99c87 100644
--- a/hw/mips/fuloong2e.c
+++ b/hw/mips/fuloong2e.c
@@ -201,10 +201,10 @@ static void main_cpu_reset(void *opaque)
 }
 
 /* Network support */
-static void network_init(PCIBus *pci_bus)
+static void network_init(Object *parent, PCIBus *pci_bus)
 {
     /* The Fuloong board has a RTL8139 card using PCI SLOT 7 */
-    pci_init_nic_in_slot(pci_bus, "rtl8139", NULL, "07");
+    pci_init_nic_in_slot(parent, pci_bus, "rtl8139", NULL, "07");
     pci_init_nic_devices(pci_bus, "rtl8139");
 }
 
@@ -326,7 +326,7 @@ static void mips_fuloong2e_init(MachineState *machine)
     smbus_eeprom_init_one(OBJECT(machine), smbus, 0x50, spd_data);
 
     /* Network card: RTL8139D */
-    network_init(pci_bus);
+    network_init(OBJECT(machine), pci_bus);
 }
 
 static void mips_fuloong2e_machine_init(MachineClass *mc)
diff --git a/hw/mips/loongson3_virt.c b/hw/mips/loongson3_virt.c
index 9ab1edceb2..99d2016ef1 100644
--- a/hw/mips/loongson3_virt.c
+++ b/hw/mips/loongson3_virt.c
@@ -460,7 +460,7 @@ static inline void loongson3_virt_devices_init(MachineState 
*machine,
     }
     msi_nonbroken = true;
 
-    pci_vga_init(pci_bus);
+    pci_vga_init(OBJECT(machine), pci_bus);
 
     if (defaults_enabled() && object_class_by_name("pci-ohci")) {
         USBBus *usb_bus;
diff --git a/hw/mips/malta.c b/hw/mips/malta.c
index ebd1456657..e8c130d5bb 100644
--- a/hw/mips/malta.c
+++ b/hw/mips/malta.c
@@ -602,10 +602,10 @@ static MaltaFPGAState *malta_fpga_init(Object *parent, 
MemoryRegion *address_spa
 }
 
 /* Network support */
-static void network_init(PCIBus *pci_bus)
+static void network_init(Object *parent, PCIBus *pci_bus)
 {
     /* The malta board has a PCNet card using PCI SLOT 11 */
-    pci_init_nic_in_slot(pci_bus, "pcnet", NULL, "0b");
+    pci_init_nic_in_slot(parent, pci_bus, "pcnet", NULL, "0b");
     pci_init_nic_devices(pci_bus, "pcnet");
 }
 
@@ -1259,10 +1259,10 @@ void mips_malta_init(MachineState *machine)
                       TYPE_FDC37M81X_SUPERIO);
 
     /* Network card */
-    network_init(pci_bus);
+    network_init(OBJECT(machine), pci_bus);
 
     /* Optional PCI video card */
-    pci_vga_init(pci_bus);
+    pci_vga_init(OBJECT(machine), pci_bus);
 }
 
 static void mips_malta_instance_init(Object *obj)
diff --git a/hw/pci/pci.c b/hw/pci/pci.c
index 61b9f2a230..ca5882ba59 100644
--- a/hw/pci/pci.c
+++ b/hw/pci/pci.c
@@ -2083,7 +2083,7 @@ void pci_init_nic_devices(PCIBus *bus, const char 
*default_model)
                                 "virtio", "virtio-net-pci");
 }
 
-bool pci_init_nic_in_slot(PCIBus *rootbus, const char *model,
+bool pci_init_nic_in_slot(Object *parent, PCIBus *rootbus, const char *model,
                           const char *alias, const char *devaddr)
 {
     NICInfo *nd = qemu_find_nic_info(model, true, alias);
@@ -2118,26 +2118,26 @@ bool pci_init_nic_in_slot(PCIBus *rootbus, const char 
*model,
         exit(1);
     }
 
-    pci_dev = pci_new_orphan(devfn, model);
+    pci_dev = pci_new(parent, "nic[*]", devfn, model);
     qdev_set_nic_properties(&pci_dev->qdev, nd);
-    pci_realize_and_unref(pci_dev, bus, &error_fatal);
+    qdev_realize(DEVICE(pci_dev), BUS(bus), &error_fatal);
     return true;
 }
 
-PCIDevice *pci_vga_init(PCIBus *bus)
+PCIDevice *pci_vga_init(Object *parent, PCIBus *bus)
 {
     vga_interface_created = true;
     switch (vga_interface_type) {
     case VGA_CIRRUS:
-        return pci_create_simple_orphan(bus, -1, "cirrus-vga");
+        return pci_create_simple(parent, "vga", bus, -1, "cirrus-vga");
     case VGA_QXL:
-        return pci_create_simple_orphan(bus, -1, "qxl-vga");
+        return pci_create_simple(parent, "vga", bus, -1, "qxl-vga");
     case VGA_STD:
-        return pci_create_simple_orphan(bus, -1, "VGA");
+        return pci_create_simple(parent, "vga", bus, -1, "VGA");
     case VGA_VMWARE:
-        return pci_create_simple_orphan(bus, -1, "vmware-svga");
+        return pci_create_simple(parent, "vga", bus, -1, "vmware-svga");
     case VGA_VIRTIO:
-        return pci_create_simple_orphan(bus, -1, "virtio-vga");
+        return pci_create_simple(parent, "vga", bus, -1, "virtio-vga");
     case VGA_NONE:
     default: /* Other non-PCI types. Checking for unsupported types is already
                 done in vl.c. */
diff --git a/hw/ppc/amigaone.c b/hw/ppc/amigaone.c
index faf76f12be..60aed15a6e 100644
--- a/hw/ppc/amigaone.c
+++ b/hw/ppc/amigaone.c
@@ -370,7 +370,7 @@ static void amigaone_init(MachineState *machine)
                                                              "pirq", i));
     }
     pci_ide_create_devs(PCI_DEVICE(object_resolve_path_component(via, "ide")));
-    pci_vga_init(pci_bus);
+    pci_vga_init(OBJECT(machine), pci_bus);
 
     if (!machine->kernel_filename) {
         return;
diff --git a/hw/ppc/mac_newworld.c b/hw/ppc/mac_newworld.c
index e9ee44a2f1..a6af53e21a 100644
--- a/hw/ppc/mac_newworld.c
+++ b/hw/ppc/mac_newworld.c
@@ -435,7 +435,7 @@ static void ppc_core99_init(MachineState *machine)
         }
     }
 
-    pci_vga_init(pci_bus);
+    pci_vga_init(OBJECT(machine), pci_bus);
 
     if (!graphic_width) {
         graphic_width = 800;
diff --git a/hw/ppc/mac_oldworld.c b/hw/ppc/mac_oldworld.c
index 6ef8207f96..f9b62a518a 100644
--- a/hw/ppc/mac_oldworld.c
+++ b/hw/ppc/mac_oldworld.c
@@ -267,7 +267,7 @@ static void ppc_heathrow_init(MachineState *machine)
         }
     }
 
-    pci_vga_init(pci_bus);
+    pci_vga_init(OBJECT(machine), pci_bus);
 
     pci_init_nic_devices(pci_bus, mc->default_nic);
 
diff --git a/hw/ppc/pegasos.c b/hw/ppc/pegasos.c
index 6ce1e3f174..4917d8137a 100644
--- a/hw/ppc/pegasos.c
+++ b/hw/ppc/pegasos.c
@@ -267,7 +267,7 @@ static void pegasos_init(MachineState *machine)
     smbus_eeprom_init_one(OBJECT(machine), i2c_bus, 0x57, spd_data);
 
     /* other PC hardware */
-    pci_vga_init(pci_bus);
+    pci_vga_init(OBJECT(machine), pci_bus);
 
     /* pci interrupt routing */
     switch (pm->type) {
diff --git a/hw/ppc/prep.c b/hw/ppc/prep.c
index ff85a4e64b..52f94b206a 100644
--- a/hw/ppc/prep.c
+++ b/hw/ppc/prep.c
@@ -357,10 +357,10 @@ static void ibm_40p_init(MachineState *machine)
         qdev_connect_gpio_out(dev, 0, qdev_get_gpio_in(i82378_dev, 13));
 
         /* XXX: s3-trio at PCI_DEVFN(2, 0) */
-        pci_vga_init(pci_bus);
+        pci_vga_init(OBJECT(machine), pci_bus);
 
         /* First PCNET device at PCI_DEVFN(3, 0) */
-        pci_init_nic_in_slot(pci_bus, mc->default_nic, NULL, "3");
+        pci_init_nic_in_slot(OBJECT(machine), pci_bus, mc->default_nic, NULL, 
"3");
         pci_init_nic_devices(pci_bus, mc->default_nic);
     }
 
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index fbf6c59516..9b6b5e7257 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -1909,7 +1909,7 @@ static void spapr_rtc_create(SpaprMachineState *spapr)
 }
 
 /* Returns whether we want to use VGA or not */
-static bool spapr_vga_init(PCIBus *pci_bus, Error **errp)
+static bool spapr_vga_init(Object *parent, PCIBus *pci_bus, Error **errp)
 {
     vga_interface_created = true;
     switch (vga_interface_type) {
@@ -1920,7 +1920,7 @@ static bool spapr_vga_init(PCIBus *pci_bus, Error **errp)
     case VGA_STD:
     case VGA_VIRTIO:
     case VGA_CIRRUS:
-        return pci_vga_init(pci_bus) != NULL;
+        return pci_vga_init(parent, pci_bus) != NULL;
     default:
         error_setg(errp,
                    "Unsupported VGA mode, only -vga std or -vga virtio is 
supported");
@@ -3066,7 +3066,7 @@ static void spapr_machine_init(MachineState *machine)
     }
 
     /* Graphics */
-    has_vga = spapr_vga_init(phb->bus, &error_fatal);
+    has_vga = spapr_vga_init(OBJECT(machine), phb->bus, &error_fatal);
     if (has_vga) {
         spapr->want_stdout_path = !machine->enable_graphics;
         machine->usb |= defaults_enabled() && !machine->usb_disabled;
diff --git a/hw/riscv/boston-aia.c b/hw/riscv/boston-aia.c
index 3b0eba00a7..5a9ec28068 100644
--- a/hw/riscv/boston-aia.c
+++ b/hw/riscv/boston-aia.c
@@ -428,7 +428,8 @@ static void boston_mach_init(MachineState *machine)
     ahci_ide_create_devs(&ich9->ahci, hd);
 
     /* Create e1000e using slot 0 func 1 */
-    pci_init_nic_in_slot(&PCI_BRIDGE(&pcie2->root)->sec_bus, "e1000e", NULL,
+    pci_init_nic_in_slot(OBJECT(machine), &PCI_BRIDGE(&pcie2->root)->sec_bus,
+                         "e1000e", NULL,
                          "00.1");
     pci_init_nic_devices(&PCI_BRIDGE(&pcie2->root)->sec_bus, "e1000e");
 
diff --git a/hw/sh4/r2d.c b/hw/sh4/r2d.c
index c03df91aca..6154aed2c4 100644
--- a/hw/sh4/r2d.c
+++ b/hw/sh4/r2d.c
@@ -315,7 +315,7 @@ static void r2d_init(MachineState *machine)
                           0x555, 0x2aa, 0);
 
     /* NIC: rtl8139 on-board, and 2 slots. */
-    pci_init_nic_in_slot(pci_bus, mc->default_nic, NULL, "2");
+    pci_init_nic_in_slot(OBJECT(machine), pci_bus, mc->default_nic, NULL, "2");
     pci_init_nic_devices(pci_bus, mc->default_nic);
 
     /* USB keyboard */
diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
index dbaf61bcf1..a059409243 100644
--- a/include/hw/i386/pc.h
+++ b/include/hw/i386/pc.h
@@ -183,7 +183,7 @@ void pc_memory_init(PCMachineState *pcms,
                     MemoryRegion *rom_memory,
                     uint64_t pci_hole64_size);
 uint64_t pc_pci_hole64_start(void);
-DeviceState *pc_vga_init(ISABus *isa_bus, PCIBus *pci_bus);
+DeviceState *pc_vga_init(Object *parent, ISABus *isa_bus, PCIBus *pci_bus);
 void pc_basic_device_init(struct PCMachineState *pcms,
                           ISABus *isa_bus, qemu_irq *gsi,
                           ISADevice *rtc_state,
diff --git a/include/hw/isa/isa.h b/include/hw/isa/isa.h
index af8e07c253..9e35d88b1e 100644
--- a/include/hw/isa/isa.h
+++ b/include/hw/isa/isa.h
@@ -89,7 +89,7 @@ ISADevice *isa_try_new_orphan(const char *name);
 bool isa_realize_and_unref(ISADevice *dev, ISABus *bus, Error **errp);
 ISADevice *isa_create_simple_orphan(ISABus *bus, const char *name);
 
-ISADevice *isa_vga_init(ISABus *bus);
+ISADevice *isa_vga_init(Object *parent, ISABus *bus);
 
 qemu_irq isa_get_irq(ISADevice *dev, unsigned isairq);
 void isa_connect_gpio_out(ISADevice *isadev, int gpioirq, unsigned isairq);
diff --git a/include/hw/pci/pci.h b/include/hw/pci/pci.h
index cbbb6a3756..9c6bcc0b96 100644
--- a/include/hw/pci/pci.h
+++ b/include/hw/pci/pci.h
@@ -337,9 +337,9 @@ void pci_device_set_intx_routing_notifier(PCIDevice *dev,
 void pci_device_reset(PCIDevice *dev);
 
 void pci_init_nic_devices(PCIBus *bus, const char *default_model);
-bool pci_init_nic_in_slot(PCIBus *rootbus, const char *default_model,
+bool pci_init_nic_in_slot(Object *parent, PCIBus *rootbus, const char 
*default_model,
                           const char *alias, const char *devaddr);
-PCIDevice *pci_vga_init(PCIBus *bus);
+PCIDevice *pci_vga_init(Object *parent, PCIBus *bus);
 
 static inline PCIBus *pci_get_bus(const PCIDevice *dev)
 {
-- 
2.47.1


Reply via email to