[RFC PATCH v2 112/137] hw/i386, hw/xen: Give allocated IRQs an owner and name

Alexander Graf <[email protected]>
Newsgroups org.nongnu.qemu-arm,org.nongnu.qemu-devel,org.nongnu.qemu-riscv
Message-ID <[email protected]>
Convert the IRQ allocation calls in hw/i386 and the Xen accelerator
to the parented form.  Thread an Object *parent through the small
helpers that had none:

  pc_gsi_create()               -> +Object *parent
  x86_allocate_cpu_irq()        -> +Object *parent
  xen_interrupt_controller_init() -> +Object *parent

Per-site owner/name:

  pc.c pc_gsi_create()          | parent          | "gsi"
  pc.c a20 line                 | parent          | "a20"
  pc_piix.c smi                 | OBJECT(machine) | "smi"
  x86-cpu.c CPU IRQ             | parent          | "pic-cpu-irq"
  microvm.c gsi                 | OBJECT(mms)     | "gsi"
  kvm/i8259.c                   | parent          | "kvm-pic-irq"
  xen-hvm.c                     | parent          | "xen-irq"

AI-used-for: code (refactoring)
Signed-off-by: Alexander Graf <[email protected]>
---
 hw/i386/isapc.c       |  2 +-
 hw/i386/kvm/i8259.c   |  2 +-
 hw/i386/microvm.c     |  4 ++--
 hw/i386/pc.c          | 10 +++++-----
 hw/i386/pc_piix.c     |  5 +++--
 hw/i386/pc_q35.c      |  2 +-
 hw/i386/x86-cpu.c     |  4 ++--
 hw/i386/xen/xen-hvm.c |  4 ++--
 include/hw/i386/pc.h  |  2 +-
 include/hw/i386/x86.h |  2 +-
 include/hw/xen/xen.h  |  2 +-
 stubs/xen-hw-stub.c   |  2 +-
 12 files changed, 21 insertions(+), 20 deletions(-)

diff --git a/hw/i386/isapc.c b/hw/i386/isapc.c
index e8d5767b80..c9f2f14123 100644
--- a/hw/i386/isapc.c
+++ b/hw/i386/isapc.c
@@ -106,7 +106,7 @@ static void pc_init_isa(MachineState *machine)
         }
     }
 
-    gsi_state = pc_gsi_create(&x86ms->gsi, false);
+    gsi_state = pc_gsi_create(OBJECT(machine), &x86ms->gsi, false);
 
     isa_bus = isa_bus_new_bridge(OBJECT(machine), system_memory, system_io,
                           &error_abort);
diff --git a/hw/i386/kvm/i8259.c b/hw/i386/kvm/i8259.c
index 7ef7a0b487..db2847686b 100644
--- a/hw/i386/kvm/i8259.c
+++ b/hw/i386/kvm/i8259.c
@@ -136,7 +136,7 @@ qemu_irq *kvm_i8259_init(Object *parent, ISABus *bus)
     i8259_init_chip(parent, TYPE_KVM_I8259, bus, true);
     i8259_init_chip(parent, TYPE_KVM_I8259, bus, false);
 
-    return qemu_allocate_irqs_orphan(kvm_pic_set_irq, NULL, ISA_NUM_IRQS);
+    return qemu_allocate_irqs(parent, "kvm-pic-irq", kvm_pic_set_irq, NULL, ISA_NUM_IRQS);
 }
 
 static void kvm_i8259_class_init(ObjectClass *klass, const void *data)
diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c
index 07dbe3a18b..4c1a4d5661 100644
--- a/hw/i386/microvm.c
+++ b/hw/i386/microvm.c
@@ -168,7 +168,7 @@ static void microvm_devices_init(MicrovmMachineState *mms)
     /* Core components */
     ioapics = microvm_ioapics(mms);
     gsi_state = g_malloc0(sizeof(*gsi_state));
-    x86ms->gsi = qemu_allocate_irqs_orphan(gsi_handler, gsi_state,
+    x86ms->gsi = qemu_allocate_irqs(OBJECT(mms), "gsi", gsi_handler, gsi_state,
                                     IOAPIC_NUM_PINS * ioapics);
 
     isa_bus = isa_bus_new_bridge(OBJECT(mms), get_system_memory(), get_system_io(),
@@ -252,7 +252,7 @@ static void microvm_devices_init(MicrovmMachineState *mms)
     if (x86ms->pic == ON_OFF_AUTO_ON || x86ms->pic == ON_OFF_AUTO_AUTO) {
         qemu_irq *i8259;
 
-        i8259 = i8259_init(OBJECT(mms), isa_bus, x86_allocate_cpu_irq());
+        i8259 = i8259_init(OBJECT(mms), isa_bus, x86_allocate_cpu_irq(OBJECT(mms)));
         for (i = 0; i < ISA_NUM_IRQS; i++) {
             gsi_state->i8259_irq[i] = i8259[i];
         }
diff --git a/hw/i386/pc.c b/hw/i386/pc.c
index 249fa699c7..398371ff6f 100644
--- a/hw/i386/pc.c
+++ b/hw/i386/pc.c
@@ -192,7 +192,7 @@ const size_t pc_compat_4_1_len = G_N_ELEMENTS(pc_compat_4_1);
  */
 #define PC_FW_DATA (0x20000 + 0x8000)
 
-GSIState *pc_gsi_create(qemu_irq **irqs, bool pci_enabled)
+GSIState *pc_gsi_create(Object *parent, qemu_irq **irqs, bool pci_enabled)
 {
     GSIState *s;
 
@@ -200,7 +200,7 @@ GSIState *pc_gsi_create(qemu_irq **irqs, bool pci_enabled)
     if (kvm_ioapic_in_kernel()) {
         kvm_pc_setup_irq_routing(pci_enabled);
     }
-    *irqs = qemu_allocate_irqs_orphan(gsi_handler, s, IOAPIC_NUM_PINS);
+    *irqs = qemu_allocate_irqs(parent, "gsi", gsi_handler, s, IOAPIC_NUM_PINS);
 
     return s;
 }
@@ -1028,7 +1028,7 @@ static void pc_superio_init(Object *parent, ISABus *isa_bus, bool create_fdctrl,
     }
     port92 = isa_create_simple(parent, "port92", isa_bus, TYPE_PORT92);
 
-    a20_line = qemu_allocate_irqs_orphan(handle_a20_line_change, first_cpu, 2);
+    a20_line = qemu_allocate_irqs(parent, "a20", handle_a20_line_change, first_cpu, 2);
     qdev_connect_gpio_out_named(DEVICE(i8042),
                                 I8042_A20_LINE, 0, a20_line[0]);
     qdev_connect_gpio_out_named(DEVICE(port92),
@@ -1167,9 +1167,9 @@ void pc_i8259_create(Object *parent, ISABus *isa_bus, qemu_irq *i8259_irqs)
     if (kvm_pic_in_kernel()) {
         i8259 = kvm_i8259_init(parent, isa_bus);
     } else if (xen_enabled()) {
-        i8259 = xen_interrupt_controller_init();
+        i8259 = xen_interrupt_controller_init(parent);
     } else {
-        i8259 = i8259_init(parent, isa_bus, x86_allocate_cpu_irq());
+        i8259 = i8259_init(parent, isa_bus, x86_allocate_cpu_irq(parent));
     }
 
     for (size_t i = 0; i < ISA_NUM_IRQS; i++) {
diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
index f76d684d6b..976c646822 100644
--- a/hw/i386/pc_piix.c
+++ b/hw/i386/pc_piix.c
@@ -233,7 +233,7 @@ static void pc_init1(MachineState *machine, const char *pci_type)
         }
     }
 
-    gsi_state = pc_gsi_create(&x86ms->gsi, true);
+    gsi_state = pc_gsi_create(OBJECT(machine), &x86ms->gsi, true);
 
     pci_dev = pci_new_multifunction(OBJECT(machine), "south-bridge", -1,
                                     pcms->south_bridge);
@@ -299,7 +299,8 @@ static void pc_init1(MachineState *machine, const char *pci_type)
     pc_nic_init(pcmc, isa_bus, pcms->pcibus);
 
     if (piix4_pm) {
-        smi_irq = qemu_allocate_irq_orphan(pc_acpi_smi_interrupt, first_cpu, 0);
+        smi_irq = qemu_allocate_irq(OBJECT(machine), "smi",
+                                    pc_acpi_smi_interrupt, first_cpu, 0);
 
         qdev_connect_gpio_out_named(DEVICE(piix4_pm), "smi-irq", 0, smi_irq);
         pcms->smbus = I2C_BUS(qdev_get_child_bus(DEVICE(piix4_pm), "i2c"));
diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c
index b2cdca8ade..b6a79d2e13 100644
--- a/hw/i386/pc_q35.c
+++ b/hw/i386/pc_q35.c
@@ -233,7 +233,7 @@ static void pc_q35_init(MachineState *machine)
     pcms->pcibus = PCI_BUS(qdev_get_child_bus(DEVICE(phb), "pcie.0"));
 
     /* irq lines */
-    gsi_state = pc_gsi_create(&x86ms->gsi, true);
+    gsi_state = pc_gsi_create(OBJECT(machine), &x86ms->gsi, true);
 
     /* create ISA bus */
     lpc = pci_new_multifunction(OBJECT(machine), "lpc",
diff --git a/hw/i386/x86-cpu.c b/hw/i386/x86-cpu.c
index 6d010291cf..f92acf2778 100644
--- a/hw/i386/x86-cpu.c
+++ b/hw/i386/x86-cpu.c
@@ -61,9 +61,9 @@ static void pic_irq_request(void *opaque, int irq, int level)
     }
 }
 
-qemu_irq x86_allocate_cpu_irq(void)
+qemu_irq x86_allocate_cpu_irq(Object *parent)
 {
-    return qemu_allocate_irq_orphan(pic_irq_request, NULL, 0);
+    return qemu_allocate_irq(parent, "pic-cpu-irq", pic_irq_request, NULL, 0);
 }
 
 int cpu_get_pic_interrupt(CPUX86State *env)
diff --git a/hw/i386/xen/xen-hvm.c b/hw/i386/xen/xen-hvm.c
index e87c8237ea..e19c9723da 100644
--- a/hw/i386/xen/xen-hvm.c
+++ b/hw/i386/xen/xen-hvm.c
@@ -112,9 +112,9 @@ static void xen_set_irq(void *opaque, int irq, int level)
     xen_set_isa_irq_level(xen_domid, irq, level);
 }
 
-qemu_irq *xen_interrupt_controller_init(void)
+qemu_irq *xen_interrupt_controller_init(Object *parent)
 {
-    return qemu_allocate_irqs_orphan(xen_set_irq, NULL, 16);
+    return qemu_allocate_irqs(parent, "xen-irq", xen_set_irq, NULL, 16);
 }
 
 /* Memory Ops */
diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
index a059409243..15e4cca288 100644
--- a/include/hw/i386/pc.h
+++ b/include/hw/i386/pc.h
@@ -126,7 +126,7 @@ OBJECT_DECLARE_TYPE(PCMachineState, PCMachineClass, PC_MACHINE)
 
 /* ioapic.c */
 
-GSIState *pc_gsi_create(qemu_irq **irqs, bool pci_enabled);
+GSIState *pc_gsi_create(Object *parent, qemu_irq **irqs, bool pci_enabled);
 
 /* pc.c */
 
diff --git a/include/hw/i386/x86.h b/include/hw/i386/x86.h
index 9d5d7694d4..a21b5d1384 100644
--- a/include/hw/i386/x86.h
+++ b/include/hw/i386/x86.h
@@ -145,7 +145,7 @@ typedef struct GSIState {
     qemu_irq ioapic2_irq[IOAPIC_NUM_PINS];
 } GSIState;
 
-qemu_irq x86_allocate_cpu_irq(void);
+qemu_irq x86_allocate_cpu_irq(Object *parent);
 void gsi_handler(void *opaque, int n, int level);
 void ioapic_init_gsi(GSIState *gsi_state, Object *parent);
 DeviceState *ioapic_init_secondary(Object *parent, GSIState *gsi_state);
diff --git a/include/hw/xen/xen.h b/include/hw/xen/xen.h
index e94c6e5a31..83b7f6c3aa 100644
--- a/include/hw/xen/xen.h
+++ b/include/hw/xen/xen.h
@@ -42,7 +42,7 @@ void xen_intx_set_irq(void *opaque, int irq_num, int level);
 void xen_hvm_inject_msi(uint64_t addr, uint32_t data);
 int xen_is_pirq_msi(uint32_t msi_data);
 
-qemu_irq *xen_interrupt_controller_init(void);
+qemu_irq *xen_interrupt_controller_init(Object *parent);
 
 void xen_register_framebuffer(struct MemoryRegion *mr);
 
diff --git a/stubs/xen-hw-stub.c b/stubs/xen-hw-stub.c
index 6cf0e9a4c1..4ea666cac8 100644
--- a/stubs/xen-hw-stub.c
+++ b/stubs/xen-hw-stub.c
@@ -29,7 +29,7 @@ int xen_is_pirq_msi(uint32_t msi_data)
     return 0;
 }
 
-qemu_irq *xen_interrupt_controller_init(void)
+qemu_irq *xen_interrupt_controller_init(Object *parent)
 {
     return NULL;
 }
-- 
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.