This is a substantial rework to clean up the handling of IRQs in spapr. It includes some cleanups to both the XICS and XIVE interrupt controller backends, as well as more to the common spapr irq handling infrastructure.
The last two patches of this series, dealing with VFIO devices, are RFC only - there some problems that I'm discussing with Alex Williamson. Changes since v3: * Further minor tweaks to error handling * Other minor polishes from feedback * Added some patches to address VFIO irq routing * Removed the first ~20 patches, which are now merged Changes since v2: * Fixed a bug where the "move handling multiple irq frees" to frontend patch was actually freeing one irq over and over, rather than freeing multiple irqs * Fixed some places I missed still using only-Error * style, and flow on adjustments * New idiom to iterate across all constructed backends for the things that need that (cpu_intc_create, claim & freem), rather than open-coding a call on the xics, then xive versions. Changes since v1: * Lots of extra patches * Many minor adjustments based on feedback * Moved towards return value + Error * style, instead of just Error * style David Gibson (16): spapr, xics, xive: Introduce SpaprInterruptController QOM interface spapr, xics, xive: Move cpu_intc_create from SpaprIrq to SpaprInterruptController spapr, xics, xive: Move irq claim and free from SpaprIrq to SpaprInterruptController spapr: Formalize notion of active interrupt controller spapr, xics, xive: Move set_irq from SpaprIrq to SpaprInterruptController spapr, xics, xive: Move print_info from SpaprIrq to SpaprInterruptController spapr, xics, xive: Move dt_populate from SpaprIrq to SpaprInterruptController spapr, xics, xive: Match signatures for XICS and XIVE KVM connect routines spapr: Remove SpaprIrq::init_kvm hook spapr, xics, xive: Move SpaprIrq::reset hook logic into activate/deactivate spapr, xics, xive: Move SpaprIrq::post_load hook to backends spapr: Remove SpaprIrq::nr_msis spapr: Move SpaprIrq::nr_xirqs to SpaprMachineClass spapr: Remove last pieces of SpaprIrq spapr: Handle irq backend changes with VFIO PCI devices spapr: Work around spurious warnings from vfio INTx initialization Greg Kurz (2): xive: Make some device types not user creatable xics: Make some device types not user creatable Stefan Brankovic (1): target/ppc: Fix for optimized vsl/vsr instructions hw/intc/spapr_xive.c | 295 ++++++++---- hw/intc/spapr_xive_kvm.c | 22 +- hw/intc/xics.c | 10 + hw/intc/xics_kvm.c | 9 +- hw/intc/xics_spapr.c | 110 ++++- hw/intc/xive.c | 15 + hw/ppc/spapr.c | 52 ++- hw/ppc/spapr_caps.c | 64 +++ hw/ppc/spapr_cpu_core.c | 3 +- hw/ppc/spapr_hcall.c | 7 +- hw/ppc/spapr_irq.c | 668 +++++++++------------------- hw/ppc/spapr_pci.c | 16 +- include/hw/pci-host/spapr.h | 4 +- include/hw/ppc/spapr.h | 17 +- include/hw/ppc/spapr_irq.h | 72 +-- include/hw/ppc/spapr_xive.h | 9 +- include/hw/ppc/xics_spapr.h | 6 +- target/ppc/translate/vmx-impl.inc.c | 84 ++-- 18 files changed, 769 insertions(+), 694 deletions(-) -- 2.21.0