diff --git a/hw/isa/piix.c b/hw/isa/piix.c index 04b2be2cc3..31fa53e6a4 100644 --- a/hw/isa/piix.c +++ b/hw/isa/piix.c @@ -315,12 +315,13 @@ static void pci_piix_realize(PCIDevice *dev, const char *uhci_type, /* PIC */ if (d->has_pic) { - qemu_irq *i8259_out_irq = qemu_allocate_irqs(piix_request_i8259_irq, d, - 1); - qemu_irq *i8259 = i8259_init(isa_bus, *i8259_out_irq); - size_t i; + qemu_irq *i8259; - for (i = 0; i < ISA_NUM_IRQS; i++) { + qemu_init_irq_child(OBJECT(dev), "i8259-irq", &d->i8259_irq, + piix_request_i8259_irq, d, 0); + i8259 = i8259_init(isa_bus, &d->i8259_irq); + + for (size_t i = 0; i < ISA_NUM_IRQS; i++) { d->isa_irqs_in[i] = i8259[i]; } diff --git a/include/hw/southbridge/piix.h b/include/hw/southbridge/piix.h index 86709ba2e4..a296b1205a 100644 --- a/include/hw/southbridge/piix.h +++ b/include/hw/southbridge/piix.h @@ -17,6 +17,7 @@ #include "hw/ide/pci.h" #include "hw/rtc/mc146818rtc.h" #include "hw/usb/hcd-uhci.h" +#include "hw/core/irq.h" /* PIRQRC[A:D]: PIRQx Route Control Registers */ #define PIIX_PIRQCA 0x60 @@ -52,6 +53,8 @@ struct PIIXState { qemu_irq cpu_intr; qemu_irq isa_irqs_in[ISA_NUM_IRQS]; + IRQState i8259_irq; + /* This member isn't used. Just for save/load compatibility */ int32_t pci_irq_levels_vmstate[PIIX_NUM_PIRQS];