[RFC PATCH v2 056/137] hw/pci, hw/isa: Give VGA and slot-NIC helpers a QOM parent

Alexander Graf <[email protected]>
Newsgroups org.nongnu.qemu-arm,org.nongnu.qemu-devel,org.nongnu.qemu-riscv
Message-ID <[email protected]>
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]/
AI-used-for: code (refactoring)
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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.