Convert pci_allocate_irq() and the qtest interceptor to the parented
qemu_allocate_irq() form so the IRQ objects land under the device
that owns their lifetime instead of /machine/unattached.

hw/usb/vt82c686-uhci-pci.c drops the IRQ set up by the base UHCI
class before installing its own; switch that from object_unref() to
qemu_free_irq() so it unparents the now-parented IRQ before freeing
it.

  hw/pci/pci.c pci_allocate_irq()  | OBJECT(pci_dev) | "intx-irq"
  system/qtest.c qtest intercept   | OBJECT(dev)     | "qtest-icpt[*]"
  hw/usb/vt82c686-uhci-pci.c       | OBJECT(s)       | "isa-irq"

Assisted-by: Kiro
Signed-off-by: Alexander Graf <[email protected]>
---
 hw/pci/pci.c               | 2 +-
 hw/usb/vt82c686-uhci-pci.c | 4 ++--
 system/qtest.c             | 2 +-
 3 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/hw/pci/pci.c b/hw/pci/pci.c
index 9ba7bfd977..d92092b233 100644
--- a/hw/pci/pci.c
+++ b/hw/pci/pci.c
@@ -1869,7 +1869,7 @@ qemu_irq pci_allocate_irq(PCIDevice *pci_dev)
     int intx = pci_intx(pci_dev);
     assert(0 <= intx && intx < PCI_NUM_PINS);
 
-    return qemu_allocate_irq_orphan(pci_irq_handler, pci_dev, intx);
+    return qemu_allocate_irq(OBJECT(pci_dev), "intx-irq", pci_irq_handler, 
pci_dev, intx);
 }
 
 void pci_set_irq(PCIDevice *pci_dev, int level)
diff --git a/hw/usb/vt82c686-uhci-pci.c b/hw/usb/vt82c686-uhci-pci.c
index b58b61e609..d8c9e98061 100644
--- a/hw/usb/vt82c686-uhci-pci.c
+++ b/hw/usb/vt82c686-uhci-pci.c
@@ -22,8 +22,8 @@ static void usb_uhci_vt82c686b_realize(PCIDevice *dev, Error 
**errp)
     pci_set_long(pci_conf + 0xc0, 0x00002000);
 
     usb_uhci_common_realize(dev, errp);
-    object_unref(s->irq);
-    s->irq = qemu_allocate_irq_orphan(uhci_isa_set_irq, s, 0);
+    qemu_free_irq(s->irq);
+    s->irq = qemu_allocate_irq(OBJECT(s), "isa-irq", uhci_isa_set_irq, s, 0);
 }
 
 static UHCIInfo uhci_info[] = {
diff --git a/system/qtest.c b/system/qtest.c
index f38feaac89..5ef99f9f23 100644
--- a/system/qtest.c
+++ b/system/qtest.c
@@ -346,7 +346,7 @@ void qtest_set_command_cb(bool (*pc_cb)(CharFrontend *chr, 
gchar **words))
 static void qtest_install_gpio_out_intercept(DeviceState *dev, const char 
*name, int n)
 {
     qemu_irq *disconnected = g_new0(qemu_irq, 1);
-    qemu_irq icpt = qemu_allocate_irq_orphan(qtest_irq_handler,
+    qemu_irq icpt = qemu_allocate_irq(OBJECT(dev), "qtest-icpt[*]", 
qtest_irq_handler,
                                       disconnected, n);
 
     *disconnected = qdev_intercept_gpio_out(dev, icpt, name, n);
-- 
2.47.1


Reply via email to