PHB hotplug will need to set the type of all LSIs at machine init. Prepare for that by calling xive_source_irq_set() in the callers of spapr_xive_irq_claim().
Signed-off-by: Greg Kurz <gr...@kaod.org> --- hw/intc/spapr_xive.c | 5 +---- hw/ppc/spapr_irq.c | 6 ++++-- include/hw/ppc/spapr_xive.h | 2 +- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/hw/intc/spapr_xive.c b/hw/intc/spapr_xive.c index d391177ab81f..aab63cfd1178 100644 --- a/hw/intc/spapr_xive.c +++ b/hw/intc/spapr_xive.c @@ -471,16 +471,13 @@ static void spapr_xive_register_types(void) type_init(spapr_xive_register_types) -bool spapr_xive_irq_claim(sPAPRXive *xive, uint32_t lisn, bool lsi) +bool spapr_xive_irq_claim(sPAPRXive *xive, uint32_t lisn) { - XiveSource *xsrc = &xive->source; - if (lisn >= xive->nr_irqs) { return false; } xive->eat[lisn].w |= cpu_to_be64(EAS_VALID); - xive_source_irq_set(xsrc, lisn, lsi); return true; } diff --git a/hw/ppc/spapr_irq.c b/hw/ppc/spapr_irq.c index 86c712d15382..bcd816c5a5fb 100644 --- a/hw/ppc/spapr_irq.c +++ b/hw/ppc/spapr_irq.c @@ -285,7 +285,8 @@ static void spapr_irq_init_xive(sPAPRMachineState *spapr, Error **errp) /* Enable the CPU IPIs */ for (i = 0; i < nr_servers; ++i) { - spapr_xive_irq_claim(spapr->xive, SPAPR_IRQ_IPI + i, false); + spapr_xive_irq_claim(spapr->xive, SPAPR_IRQ_IPI + i); + xive_source_irq_set(&spapr->xive->source, SPAPR_IRQ_IPI + i, false); } spapr_xive_hcall_init(spapr); @@ -294,10 +295,11 @@ static void spapr_irq_init_xive(sPAPRMachineState *spapr, Error **errp) static int spapr_irq_claim_xive(sPAPRMachineState *spapr, int irq, bool lsi, Error **errp) { - if (!spapr_xive_irq_claim(spapr->xive, irq, lsi)) { + if (!spapr_xive_irq_claim(spapr->xive, irq)) { error_setg(errp, "IRQ %d is invalid", irq); return -1; } + xive_source_irq_set(&spapr->xive->source, irq, lsi); return 0; } diff --git a/include/hw/ppc/spapr_xive.h b/include/hw/ppc/spapr_xive.h index 7fdc25057420..f8854a4a6a18 100644 --- a/include/hw/ppc/spapr_xive.h +++ b/include/hw/ppc/spapr_xive.h @@ -37,7 +37,7 @@ typedef struct sPAPRXive { MemoryRegion tm_mmio; } sPAPRXive; -bool spapr_xive_irq_claim(sPAPRXive *xive, uint32_t lisn, bool lsi); +bool spapr_xive_irq_claim(sPAPRXive *xive, uint32_t lisn); bool spapr_xive_irq_free(sPAPRXive *xive, uint32_t lisn); void spapr_xive_pic_print_info(sPAPRXive *xive, Monitor *mon);