On Wed, 24 Mar 2021, Philippe Mathieu-Daudé wrote:
Instead of creating an input IRQ with qemu_allocate_irqs() to pass it as output IRQ of the PIC, with its handler simply dispatching into the "intr" output IRQ, simplify by directly connecting the PIC to the "intr" named output.
I think I've tried to do it that way first but it did not work for some reason, that's why I had to add the additional handler, but this was about a year ago so I don't remember the details. Did you test it still works or expect me to test it? (Note that testing with firmware only may not be enough as some firmwares don't use interrupts so only booting a guest might reveal a problem. Not sure about pegasos2 firmware but sam460ex U-Boot seems to poll instead of using IRQs.)
Regards, BALATON Zoltan
Fixes: 3dc31cb8490 ("vt82c686: Move creation of ISA devices to the ISA bridge") Signed-off-by: Philippe Mathieu-Daudé <f4...@amsat.org> --- hw/isa/vt82c686.c | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/hw/isa/vt82c686.c b/hw/isa/vt82c686.c index 87473ec121f..3dc3454858e 100644 --- a/hw/isa/vt82c686.c +++ b/hw/isa/vt82c686.c @@ -323,12 +323,6 @@ struct VT82C686BISAState { SuperIOConfig superio_cfg; }; -static void via_isa_request_i8259_irq(void *opaque, int irq, int level) -{ - VT82C686BISAState *s = opaque; - qemu_set_irq(s->cpu_intr, level); -} - static void vt82c686b_write_config(PCIDevice *d, uint32_t addr, uint32_t val, int len) { @@ -384,14 +378,12 @@ static void vt82c686b_realize(PCIDevice *d, Error **errp) VT82C686BISAState *s = VT82C686B_ISA(d); DeviceState *dev = DEVICE(d); ISABus *isa_bus; - qemu_irq *isa_irq; int i; qdev_init_gpio_out_named(dev, &s->cpu_intr, "intr", 1); - isa_irq = qemu_allocate_irqs(via_isa_request_i8259_irq, s, 1); isa_bus = isa_bus_new(dev, get_system_memory(), pci_address_space_io(d), &error_fatal); - isa_bus_irqs(isa_bus, i8259_init(isa_bus, *isa_irq)); + isa_bus_irqs(isa_bus, i8259_init(isa_bus, s->cpu_intr)); i8254_pit_init(isa_bus, 0x40, 0, NULL); i8257_dma_init(isa_bus, 0); isa_create_simple(isa_bus, TYPE_VT82C686B_SUPERIO);