On Wed, Oct 02, 2019 at 12:51:34PM +1000, David Gibson wrote: > 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. Since there seems to be general agreement on that part, I've now merged the first 20 patches of this series into ppc-for-4.2, which I intend to send a PR for tomorroow. > > 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 (34): > xics: Minor fixes for XICSFabric interface > xics: Eliminate 'reject', 'resend' and 'eoi' class hooks > xics: Rename misleading ics_simple_*() functions > xics: Eliminate reset hook > xics: Merge TYPE_ICS_BASE and TYPE_ICS_SIMPLE classes > xics: Create sPAPR specific ICS subtype > spapr: Fold spapr_phb_lsi_qirq() into its single caller > spapr: Replace spapr_vio_qirq() helper with spapr_vio_irq_pulse() > helper > spapr: Clarify and fix handling of nr_irqs > spapr: Eliminate nr_irqs parameter to SpaprIrq::init > spapr: Fix indexing of XICS irqs > spapr: Simplify spapr_qirq() handling > spapr: Eliminate SpaprIrq:get_nodename method > spapr: Remove unhelpful tracepoints from spapr_irq_free_xics() > spapr: Handle freeing of multiple irqs in frontend only > spapr, xics, xive: Better use of assert()s on irq claim/free paths > xive: Improve irq claim/free path > spapr: Use less cryptic representation of which irq backends are > supported > spapr: Add return value to spapr_irq_check() > spapr: Eliminate SpaprIrq::init hook > 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 > > hw/char/spapr_vty.c | 3 +- > hw/intc/spapr_xive.c | 298 ++++++++----- > hw/intc/spapr_xive_kvm.c | 30 +- > hw/intc/trace-events | 10 +- > hw/intc/xics.c | 210 +++------ > hw/intc/xics_kvm.c | 9 +- > hw/intc/xics_spapr.c | 157 ++++++- > hw/net/spapr_llan.c | 3 +- > hw/ppc/pnv_psi.c | 6 +- > hw/ppc/spapr.c | 57 ++- > hw/ppc/spapr_caps.c | 64 +++ > hw/ppc/spapr_cpu_core.c | 3 +- > hw/ppc/spapr_hcall.c | 7 +- > hw/ppc/spapr_irq.c | 847 +++++++++++------------------------- > hw/ppc/spapr_pci.c | 10 +- > hw/ppc/spapr_vio.c | 3 +- > hw/ppc/trace-events | 4 - > include/hw/pci-host/spapr.h | 11 +- > include/hw/ppc/spapr.h | 14 +- > include/hw/ppc/spapr_irq.h | 89 ++-- > include/hw/ppc/spapr_vio.h | 5 +- > include/hw/ppc/spapr_xive.h | 9 +- > include/hw/ppc/xics.h | 33 +- > include/hw/ppc/xics_spapr.h | 10 +- > include/hw/ppc/xive.h | 2 +- > 25 files changed, 897 insertions(+), 997 deletions(-) > -- David Gibson | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_ | _way_ _around_! http://www.ozlabs.org/~dgibson