Hello, Here is a proposal for a new IRQ number space layout using static numbers and a bitmap allocator for the MSIs. The previous layout is kept for compatibly in machines raising the 'xics_legacy' flag.
These are just the basics preparing ground for the new XIVE controller. I would also like to introduce a structure like below to abstract the IRQ controller in the sPAPR machine : typedef struct sPAPRIrq { uint32_t nr_irqs; uint8_t ov5; void (*init)(sPAPRMachineState *spapr, uint32_t nr_servers, Error **errp); int (*claim)(sPAPRMachineState *spapr, uint32_t range, uint32_t irq, Error **errp); void (*free)(sPAPRMachineState *spapr, int irq, int num, Error **errp); qemu_irq (*qirq)(sPAPRMachineState *spapr, int irq); void (*print_info)(sPAPRMachineState *spapr, Monitor *mon); void (*dt_populate)(sPAPRMachineState *spapr, uint32_t nr_servers, void *fdt, uint32_t phandle); Object *(*cpu_intc_create)(sPAPRMachineState *spapr, Object *cpu, Error **errp); void (*post_load)(sPAPRMachineState *spapr); } sPAPRIrq; Let's discuss ! Cheers, C. Cédric Le Goater (3): spapr: split the IRQ allocation sequence spapr: remove unused spapr_irq routines spapr: introduce a fixed IRQ number space include/hw/ppc/spapr.h | 11 +++-- include/hw/ppc/spapr_irq.h | 30 ++++++++++++ hw/ppc/spapr.c | 115 ++++++++++++++++++++++++++------------------- hw/ppc/spapr_events.c | 26 ++++++++-- hw/ppc/spapr_irq.c | 57 ++++++++++++++++++++++ hw/ppc/spapr_pci.c | 35 ++++++++++++-- hw/ppc/spapr_vio.c | 17 ++++++- hw/ppc/Makefile.objs | 2 +- 8 files changed, 232 insertions(+), 61 deletions(-) create mode 100644 include/hw/ppc/spapr_irq.h create mode 100644 hw/ppc/spapr_irq.c -- 2.13.6