Hello, The goal behind this series is to simplify the XICS interface by moving back in the machine the way the ICS and ICP objects interact together. It's up to the machine to implement this "fabric" logic by providing a set of handlers of a QOM interface. These handlers are used to grab an ICS or an ICP object and also do irq resends. The idea was suggested by David Gibson.
The patchset is organised as follow. It starts with a preliminary cleanup to get rid of the set_nr_irqs() and set_nr_servers() handlers. It also moves the creation of the ICS and ICP objects from the XICS object to the sPAPR machine. This simplifies the code significantly and prepares ground for future changes. As the sPAPR machine only makes use of a single ICS, we can store it at the machine level. This lets us remove dependencies on the list of ICS of the XICS object and simplify even more the code for the following changes. The QOM interface to interact with the ICS and ICP objects is then introduced. These are moved under the machine and cleanups are done accordingly. Finally, the XICSState classes are removed as they have been deprecated by the QOM interface. After the initial cleanups, which are rather big, each patch are small and simple. The make target 'check-qtest-ppc64' runs succesfully for each of them and so does migration of HV and TCG guests. The tree is available here : https://github.com/legoater/qemu/tree/ppc-2.9 Thanks, C. Caveats: - The kernel ICP file descriptor 'kernel_xics_fd' was made static to ease changes but that could be an issue. We could move it under the sPAPR machine if needed. Changes since v3: - reintroduced 'xics' backlinks to remove useless calls to qdev_get_machine() - moved InterruptStatsProvider to the sPAPR machine for a better output - moved move ics-simple post_load under the machine and removed the icp_resend() XICSFabric handler Changes since v2: - renamed QOM Interface to XICSFabric Cédric Le Goater (25): ppc/xics: fix ICP and ICS reset ppc/xics: remove set_nr_irqs() handler from XICSStateClass ppc/xics: remove set_nr_servers() handler from XICSStateClass ppc/xics: store the ICS object under the sPAPR machine ppc/xics: add an InterruptStatsProvider interface to ICS and ICP objects ppc/xics: introduce a XICSFabric QOM interface to handle ICSs ppc/xics: use the QOM interface under the sPAPR machine ppc/xics: use the QOM interface to get irqs ppc/xics: use the QOM interface to resend irqs ppc/xics: remove xics_find_source() ppc/xics: register the reset handler of ICS objects ppc/xics: remove the XICS list of ICS ppc/xics: extend the QOM interface to handle ICPs ppc/xics: move kernel_xics_fd out of KVMXICSState ppc/xics: simplify the cpu_setup() handler ppc/xics: move the cpu_setup() handler under the ICPState class ppc/xics: use the QOM interface to grab an ICP ppc/xics: simplify spapr_dt_xics() interface ppc/xics: register the reset handler of ICP objects ppc/xics: move the ICP array under the sPAPR machine ppc/xics: export the XICS init routines ppc/xics: remove the XICSState classes ppc/xics: move ics-simple post_load under the machine ppc/xics: move InterruptStatsProvider to the sPAPR machine ppc/xics: rename 'ICPState *' variables to 'icp' David Gibson (1): xics: XICS should not be a SysBusDevice hw/intc/xics.c | 461 +++++++++++++++++--------------------------- hw/intc/xics_kvm.c | 184 +++++------------- hw/intc/xics_spapr.c | 128 +++--------- hw/ppc/spapr.c | 134 ++++++++++--- hw/ppc/spapr_cpu_core.c | 4 +- hw/ppc/spapr_events.c | 10 +- hw/ppc/spapr_pci.c | 10 +- hw/ppc/spapr_vio.c | 2 +- include/hw/pci-host/spapr.h | 2 +- include/hw/ppc/spapr.h | 5 +- include/hw/ppc/spapr_vio.h | 2 +- include/hw/ppc/xics.h | 97 ++++------ 12 files changed, 424 insertions(+), 615 deletions(-) -- 2.7.4