[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v2 15/33] spapr: Handle freeing of multiple irqs in frontend only
From: |
David Gibson |
Subject: |
[PATCH v2 15/33] spapr: Handle freeing of multiple irqs in frontend only |
Date: |
Fri, 27 Sep 2019 15:50:10 +1000 |
spapr_irq_free() can be used to free multiple irqs at once. That's useful
for its callers, but there's no need to make the individual backend hooks
handle this. We can loop across the irqs in spapr_irq_free() itself and
have the hooks just do one at time.
Signed-off-by: David Gibson <address@hidden>
Reviewed-by: Cédric Le Goater <address@hidden>
Reviewed-by: Greg Kurz <address@hidden>
---
hw/ppc/spapr_irq.c | 27 ++++++++++++---------------
include/hw/ppc/spapr_irq.h | 2 +-
2 files changed, 13 insertions(+), 16 deletions(-)
diff --git a/hw/ppc/spapr_irq.c b/hw/ppc/spapr_irq.c
index 9919910a86..37c51c96ae 100644
--- a/hw/ppc/spapr_irq.c
+++ b/hw/ppc/spapr_irq.c
@@ -133,16 +133,13 @@ static int spapr_irq_claim_xics(SpaprMachineState *spapr,
int irq, bool lsi,
return 0;
}
-static void spapr_irq_free_xics(SpaprMachineState *spapr, int irq, int num)
+static void spapr_irq_free_xics(SpaprMachineState *spapr, int irq)
{
ICSState *ics = spapr->ics;
uint32_t srcno = irq - ics->offset;
- int i;
if (ics_valid_irq(ics, irq)) {
- for (i = srcno; i < srcno + num; ++i) {
- memset(&ics->irqs[i], 0, sizeof(ICSIRQState));
- }
+ memset(&ics->irqs[srcno], 0, sizeof(ICSIRQState));
}
}
@@ -269,13 +266,9 @@ static int spapr_irq_claim_xive(SpaprMachineState *spapr,
int irq, bool lsi,
return 0;
}
-static void spapr_irq_free_xive(SpaprMachineState *spapr, int irq, int num)
+static void spapr_irq_free_xive(SpaprMachineState *spapr, int irq)
{
- int i;
-
- for (i = irq; i < irq + num; ++i) {
- spapr_xive_irq_free(spapr->xive, i);
- }
+ spapr_xive_irq_free(spapr->xive, irq);
}
static void spapr_irq_print_info_xive(SpaprMachineState *spapr,
@@ -433,10 +426,10 @@ static int spapr_irq_claim_dual(SpaprMachineState *spapr,
int irq, bool lsi,
return ret;
}
-static void spapr_irq_free_dual(SpaprMachineState *spapr, int irq, int num)
+static void spapr_irq_free_dual(SpaprMachineState *spapr, int irq)
{
- spapr_irq_xics.free(spapr, irq, num);
- spapr_irq_xive.free(spapr, irq, num);
+ spapr_irq_xics.free(spapr, irq);
+ spapr_irq_xive.free(spapr, irq);
}
static void spapr_irq_print_info_dual(SpaprMachineState *spapr, Monitor *mon)
@@ -635,7 +628,11 @@ int spapr_irq_claim(SpaprMachineState *spapr, int irq,
bool lsi, Error **errp)
void spapr_irq_free(SpaprMachineState *spapr, int irq, int num)
{
- spapr->irq->free(spapr, irq, num);
+ int i;
+
+ for (i = irq; i < (irq + num); i++) {
+ spapr->irq->free(spapr, irq);
+ }
}
qemu_irq spapr_qirq(SpaprMachineState *spapr, int irq)
diff --git a/include/hw/ppc/spapr_irq.h b/include/hw/ppc/spapr_irq.h
index 9b60378e28..ed88b4599a 100644
--- a/include/hw/ppc/spapr_irq.h
+++ b/include/hw/ppc/spapr_irq.h
@@ -43,7 +43,7 @@ typedef struct SpaprIrq {
void (*init)(SpaprMachineState *spapr, Error **errp);
int (*claim)(SpaprMachineState *spapr, int irq, bool lsi, Error **errp);
- void (*free)(SpaprMachineState *spapr, int irq, int num);
+ void (*free)(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);
--
2.21.0
- [PATCH v2 04/33] xics: Eliminate reset hook, (continued)
- [PATCH v2 04/33] xics: Eliminate reset hook, David Gibson, 2019/09/27
- [PATCH v2 21/33] spapr, xics, xive: Move cpu_intc_create from SpaprIrq to SpaprInterruptController, David Gibson, 2019/09/27
- Re: [PATCH v2 21/33] spapr, xics, xive: Move cpu_intc_create from SpaprIrq to SpaprInterruptController, Greg Kurz, 2019/09/27
- Re: [PATCH v2 21/33] spapr, xics, xive: Move cpu_intc_create from SpaprIrq to SpaprInterruptController, David Gibson, 2019/09/30
- Re: [PATCH v2 21/33] spapr, xics, xive: Move cpu_intc_create from SpaprIrq to SpaprInterruptController, David Gibson, 2019/09/30
- Re: [PATCH v2 21/33] spapr, xics, xive: Move cpu_intc_create from SpaprIrq to SpaprInterruptController, Cédric Le Goater, 2019/09/30
- Re: [PATCH v2 21/33] spapr, xics, xive: Move cpu_intc_create from SpaprIrq to SpaprInterruptController, Cédric Le Goater, 2019/09/30
- [PATCH v2 11/33] spapr: Fix indexing of XICS irqs, David Gibson, 2019/09/27
- [PATCH v2 08/33] spapr: Replace spapr_vio_qirq() helper with spapr_vio_irq_pulse() helper, David Gibson, 2019/09/27
- [PATCH v2 15/33] spapr: Handle freeing of multiple irqs in frontend only,
David Gibson <=
- [PATCH v2 20/33] spapr, xics, xive: Introduce SpaprInterruptController QOM interface, David Gibson, 2019/09/27
- [PATCH v2 13/33] spapr: Eliminate SpaprIrq:get_nodename method, David Gibson, 2019/09/27
- [PATCH v2 09/33] spapr: Clarify and fix handling of nr_irqs, David Gibson, 2019/09/27
- [PATCH v2 12/33] spapr: Simplify spapr_qirq() handling, David Gibson, 2019/09/27
- [PATCH v2 16/33] spapr, xics, xive: Better use of assert()s on irq claim/free paths, David Gibson, 2019/09/27
- [PATCH v2 23/33] spapr: Formalize notion of active interrupt controller, David Gibson, 2019/09/27