spapr_pci: Fix interrupt leak in rtas_ibm_change_msi() error path

Now that IRQ allocation has been split in two (first allocate IRQ numbers,
then claim them), if the claiming fails, we must release the IRQs.

Fixes: 4fe75a8ccd "spapr: split the IRQ allocation sequence"
Signed-off-by: Greg Kurz <groug@kaod.org>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
Greg Kurz 2019-02-07 18:28:37 +01:00 committed by David Gibson
parent 27a3ea7eff
commit 925969c3e2

View File

@ -393,6 +393,12 @@ static void rtas_ibm_change_msi(PowerPCCPU *cpu, sPAPRMachineState *spapr,
for (i = 0; i < req_num; i++) { for (i = 0; i < req_num; i++) {
spapr_irq_claim(spapr, irq + i, false, &err); spapr_irq_claim(spapr, irq + i, false, &err);
if (err) { if (err) {
if (i) {
spapr_irq_free(spapr, irq, i);
}
if (!smc->legacy_irq_allocation) {
spapr_irq_msi_free(spapr, irq, req_num);
}
error_reportf_err(err, "Can't allocate MSIs for device %x: ", error_reportf_err(err, "Can't allocate MSIs for device %x: ",
config_addr); config_addr);
rtas_st(rets, 0, RTAS_OUT_HW_ERROR); rtas_st(rets, 0, RTAS_OUT_HW_ERROR);