Am 2018-07-31 02:18, schrieb David Gibson:
David, can you please drop this patch, we'll come up with a different
fix.
Done. Should have looked at that patch a bit closer.
I created a follow up patch, unfortunately, based on the previous patch,
as I did not spot your mail earlier than now. Note that the previous
patch was an improvement over the old behaviour and under normal
conditions the difference was not visible (as the OS serves both
interrupts in the same run and at least on AmigaOS the interrupt
handling is deferred but IRQs are acked quickly; it is still not correct
though). The old implementation was not correct at all, i.e., all
interrupts were missed. So it was technical an improvement (and the
easiest to come up without deep understanding QEMU) ;)
Anyway, I don't know if that follow up patch is the right approach. But
building the logical or gate seems also be very much code, especially as
in pci.c the case of multiple irqs sources are seems to be already
handled (if I understand that code correctly). The follow up patch most
likely does not model the hardware correctly, but the behaviour should
be the same. The logical or gate would model the hardware more closely.
Let me know if I should rebase to the state before my initial patch (I
just looked and the previous patch was still not dropped) if you think
that the change is fine.
There is also the possibility to make the special (num-irqs == 1) the
common case, as the Sam460ex platform is the only user of this bus so
far (and probably stays the only one). I'm not sure if it is worth all
the hassle. Also note that the entire ppc440_pcix.c source file seems to
be created for the sam board. I have no idea why that mapping function
based on slots was chosen in the first place so I kept it. I would also
be fine to remove that, which would simplify things a lot.
Let me know how to proceed.
Bye
Sebastian