From: "Philippe Mathieu-Daudé" <philmd@redhat.com>
To: David Gibson <david@gibson.dropbear.id.au>,
qemu-ppc@nongnu.org, clg@kaod.org, qemu-devel@nongnu.org
Cc: "Jason Wang" <jasowang@redhat.com>,
"Riku Voipio" <riku.voipio@iki.fi>,
"Laurent Vivier" <laurent@vivier.eu>,
groug@kaod.org, "Marc-André Lureau" <marcandre.lureau@redhat.com>,
"Paolo Bonzini" <pbonzini@redhat.com>
Subject: Re: [PATCH 12/20] spapr: Simplify spapr_qirq() handling
Date: Thu, 26 Sep 2019 09:10:10 +0200 [thread overview]
Message-ID: <153343f3-438b-6538-fd8c-12240ac786e3@redhat.com> (raw)
In-Reply-To: <20190925064534.19155-13-david@gibson.dropbear.id.au>
On 9/25/19 8:45 AM, David Gibson wrote:
> Currently spapr_qirq() used to find the qemu_irq for an spapr global irq
> number, redirects through the SpaprIrq::qirq method. But the array of
> qemu_irqs is allocated in the PAPR layer, not the backends, and so the
> method implementations all return the same thing, just differing in the
> preliminary checks they make.
>
> So, we can remove the method, and just implement spapr_qirq() directly,
> including all the relevant checks in one place. We change all those
> checks into assert()s as well, since a failure here indicates an error in
> the calling code.
>
> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
> ---
> hw/ppc/spapr_irq.c | 47 ++++++++++----------------------------
> include/hw/ppc/spapr_irq.h | 1 -
> 2 files changed, 12 insertions(+), 36 deletions(-)
>
> diff --git a/hw/ppc/spapr_irq.c b/hw/ppc/spapr_irq.c
> index 9a9e486eb5..038bfffff4 100644
> --- a/hw/ppc/spapr_irq.c
> +++ b/hw/ppc/spapr_irq.c
> @@ -150,17 +150,6 @@ static void spapr_irq_free_xics(SpaprMachineState *spapr, int irq, int num)
> }
> }
>
> -static qemu_irq spapr_qirq_xics(SpaprMachineState *spapr, int irq)
> -{
> - ICSState *ics = spapr->ics;
> -
> - if (ics_valid_irq(ics, irq)) {
> - return spapr->qirqs[irq];
> - }
> -
> - return NULL;
> -}
> -
> static void spapr_irq_print_info_xics(SpaprMachineState *spapr, Monitor *mon)
> {
> CPUState *cs;
> @@ -242,7 +231,6 @@ SpaprIrq spapr_irq_xics = {
> .init = spapr_irq_init_xics,
> .claim = spapr_irq_claim_xics,
> .free = spapr_irq_free_xics,
> - .qirq = spapr_qirq_xics,
> .print_info = spapr_irq_print_info_xics,
> .dt_populate = spapr_dt_xics,
> .cpu_intc_create = spapr_irq_cpu_intc_create_xics,
> @@ -300,20 +288,6 @@ static void spapr_irq_free_xive(SpaprMachineState *spapr, int irq, int num)
> }
> }
>
> -static qemu_irq spapr_qirq_xive(SpaprMachineState *spapr, int irq)
> -{
> - SpaprXive *xive = spapr->xive;
> -
> - if ((irq < SPAPR_XIRQ_BASE) || (irq >= xive->nr_irqs)) {
> - return NULL;
> - }
> -
> - /* The sPAPR machine/device should have claimed the IRQ before */
> - assert(xive_eas_is_valid(&xive->eat[irq]));
> -
> - return spapr->qirqs[irq];
> -}
> -
> static void spapr_irq_print_info_xive(SpaprMachineState *spapr,
> Monitor *mon)
> {
> @@ -413,7 +387,6 @@ SpaprIrq spapr_irq_xive = {
> .init = spapr_irq_init_xive,
> .claim = spapr_irq_claim_xive,
> .free = spapr_irq_free_xive,
> - .qirq = spapr_qirq_xive,
> .print_info = spapr_irq_print_info_xive,
> .dt_populate = spapr_dt_xive,
> .cpu_intc_create = spapr_irq_cpu_intc_create_xive,
> @@ -487,11 +460,6 @@ static void spapr_irq_free_dual(SpaprMachineState *spapr, int irq, int num)
> spapr_irq_xive.free(spapr, irq, num);
> }
>
> -static qemu_irq spapr_qirq_dual(SpaprMachineState *spapr, int irq)
> -{
> - return spapr_irq_current(spapr)->qirq(spapr, irq);
> -}
> -
> static void spapr_irq_print_info_dual(SpaprMachineState *spapr, Monitor *mon)
> {
> spapr_irq_current(spapr)->print_info(spapr, mon);
> @@ -586,7 +554,6 @@ SpaprIrq spapr_irq_dual = {
> .init = spapr_irq_init_dual,
> .claim = spapr_irq_claim_dual,
> .free = spapr_irq_free_dual,
> - .qirq = spapr_qirq_dual,
> .print_info = spapr_irq_print_info_dual,
> .dt_populate = spapr_irq_dt_populate_dual,
> .cpu_intc_create = spapr_irq_cpu_intc_create_dual,
> @@ -700,7 +667,18 @@ void spapr_irq_free(SpaprMachineState *spapr, int irq, int num)
>
> qemu_irq spapr_qirq(SpaprMachineState *spapr, int irq)
> {
> - return spapr->irq->qirq(spapr, irq);
> + assert(irq >= SPAPR_XIRQ_BASE);
> + assert(irq < (spapr->irq->nr_xirqs + SPAPR_XIRQ_BASE));
> +
> + if (spapr->ics) {
> + assert(ics_valid_irq(spapr->ics, irq));
> + }
> + if (spapr->xive) {
> + assert(irq < spapr->xive->nr_irqs);
> + assert(xive_eas_is_valid(&spapr->xive->eat[irq]));
> + }
> +
> + return spapr->qirqs[irq];
> }
>
> int spapr_irq_post_load(SpaprMachineState *spapr, int version_id)
> @@ -803,7 +781,6 @@ SpaprIrq spapr_irq_xics_legacy = {
> .init = spapr_irq_init_xics,
> .claim = spapr_irq_claim_xics,
> .free = spapr_irq_free_xics,
> - .qirq = spapr_qirq_xics,
> .print_info = spapr_irq_print_info_xics,
> .dt_populate = spapr_dt_xics,
> .cpu_intc_create = spapr_irq_cpu_intc_create_xics,
> diff --git a/include/hw/ppc/spapr_irq.h b/include/hw/ppc/spapr_irq.h
> index 7e26288fcd..a4e790ef60 100644
> --- a/include/hw/ppc/spapr_irq.h
> +++ b/include/hw/ppc/spapr_irq.h
> @@ -44,7 +44,6 @@ 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);
> - qemu_irq (*qirq)(SpaprMachineState *spapr, int irq);
Yay, cleanup!
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
> void (*print_info)(SpaprMachineState *spapr, Monitor *mon);
> void (*dt_populate)(SpaprMachineState *spapr, uint32_t nr_servers,
> void *fdt, uint32_t phandle);
>
next prev parent reply other threads:[~2019-09-26 7:13 UTC|newest]
Thread overview: 93+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-09-25 6:45 [PATCH 00/20] spapr: IRQ subsystem cleanups David Gibson
2019-09-25 6:45 ` [PATCH 01/20] xics: Use incomplete type for XICSFabric David Gibson
2019-09-25 6:55 ` Cédric Le Goater
2019-09-25 7:48 ` Greg Kurz
2019-09-25 7:45 ` Greg Kurz
2019-09-25 6:45 ` [PATCH 02/20] xics: Eliminate 'reject', 'resend' and 'eoi' class hooks David Gibson
2019-09-25 6:45 ` [PATCH 03/20] xics: Rename misleading ics_simple_*() functions David Gibson
2019-09-25 6:45 ` [PATCH 04/20] xics: Eliminate reset hook David Gibson
2019-09-25 7:33 ` Cédric Le Goater
2019-09-25 7:59 ` Greg Kurz
2019-09-26 2:54 ` David Gibson
2019-09-25 6:45 ` [PATCH 05/20] xics: Merge TYPE_ICS_BASE and TYPE_ICS_SIMPLE classes David Gibson
2019-09-25 8:16 ` Greg Kurz
2019-09-25 8:31 ` Greg Kurz
2019-09-26 0:55 ` David Gibson
2019-09-26 0:52 ` David Gibson
2019-09-25 12:47 ` Cédric Le Goater
2019-09-25 6:45 ` [PATCH 06/20] xics: Create sPAPR specific ICS subtype David Gibson
2019-09-25 7:34 ` Cédric Le Goater
2019-09-25 8:40 ` Greg Kurz
2019-09-25 8:55 ` Cédric Le Goater
2019-09-25 9:07 ` Greg Kurz
2019-09-26 0:56 ` David Gibson
2019-09-26 7:09 ` Cédric Le Goater
2019-09-27 16:05 ` Greg Kurz
2019-09-30 8:45 ` David Gibson
2019-09-30 17:00 ` Greg Kurz
2019-10-01 1:45 ` David Gibson
2019-09-25 6:45 ` [PATCH 07/20] spapr: Fold spapr_phb_lsi_qirq() into its single caller David Gibson
2019-09-25 6:58 ` Cédric Le Goater
2019-09-25 8:56 ` Greg Kurz
2019-09-26 7:08 ` Philippe Mathieu-Daudé
2019-09-25 6:45 ` [PATCH 08/20] spapr: Replace spapr_vio_qirq() helper with spapr_vio_irq_pulse() helper David Gibson
2019-09-25 6:58 ` Cédric Le Goater
2019-09-25 8:57 ` Greg Kurz
2019-09-26 7:08 ` Philippe Mathieu-Daudé
2019-09-25 6:45 ` [PATCH 09/20] spapr: Clarify and fix handling of nr_irqs David Gibson
2019-09-25 7:05 ` Cédric Le Goater
2019-09-26 1:03 ` David Gibson
2019-09-26 7:02 ` Cédric Le Goater
2019-09-25 17:13 ` Greg Kurz
2019-09-25 6:45 ` [PATCH 10/20] spapr: Eliminate nr_irqs parameter to SpaprIrq::init David Gibson
2019-09-25 7:06 ` Cédric Le Goater
2019-09-25 17:16 ` Greg Kurz
2019-09-25 6:45 ` [PATCH 11/20] spapr: Fix indexing of XICS irqs David Gibson
2019-09-25 7:11 ` Cédric Le Goater
2019-09-25 20:17 ` Greg Kurz
2019-09-26 1:31 ` David Gibson
2019-09-26 7:21 ` Greg Kurz
2019-09-26 11:32 ` David Gibson
2019-09-26 14:44 ` Greg Kurz
2019-09-25 6:45 ` [PATCH 12/20] spapr: Simplify spapr_qirq() handling David Gibson
2019-09-25 7:16 ` Cédric Le Goater
2019-09-25 20:30 ` Greg Kurz
2019-09-26 7:10 ` Philippe Mathieu-Daudé [this message]
2019-09-25 6:45 ` [PATCH 13/20] spapr: Eliminate SpaprIrq:get_nodename method David Gibson
2019-09-25 7:19 ` Cédric Le Goater
2019-09-26 7:11 ` Philippe Mathieu-Daudé
2019-09-26 7:48 ` Greg Kurz
2019-09-26 11:36 ` David Gibson
2019-09-25 6:45 ` [PATCH 14/20] spapr: Remove unhelpful tracepoints from spapr_irq_free_xics() David Gibson
2019-09-25 7:20 ` Cédric Le Goater
2019-09-26 7:11 ` Philippe Mathieu-Daudé
2019-09-26 7:50 ` Greg Kurz
2019-09-25 6:45 ` [PATCH 15/20] spapr: Handle freeing of multiple irqs in frontend only David Gibson
2019-09-25 7:21 ` Cédric Le Goater
2019-09-26 7:52 ` Greg Kurz
2019-09-25 6:45 ` [PATCH 16/20] spapr, xics, xive: Better use of assert()s on irq claim/free paths David Gibson
2019-09-25 7:22 ` Cédric Le Goater
2019-09-26 8:08 ` Greg Kurz
2019-09-26 11:39 ` David Gibson
2019-09-25 6:45 ` [PATCH 17/20] spapr: Remove unused return value in claim path David Gibson
2019-09-25 7:23 ` Cédric Le Goater
2019-09-26 7:13 ` Philippe Mathieu-Daudé
2019-09-26 8:36 ` Greg Kurz
2019-09-27 1:47 ` David Gibson
2019-09-25 6:45 ` [PATCH 18/20] xive: Improve irq claim/free path David Gibson
2019-09-25 7:25 ` Cédric Le Goater
2019-09-26 1:05 ` David Gibson
2019-09-25 6:45 ` [PATCH 19/20] spapr: Use less cryptic representation of which irq backends are supported David Gibson
2019-09-25 7:28 ` Cédric Le Goater
2019-09-26 9:16 ` Greg Kurz
2019-09-25 6:45 ` [PATCH 20/20] spapr: Eliminate SpaprIrq::init hook David Gibson
2019-09-25 7:31 ` Cédric Le Goater
2019-09-26 1:13 ` David Gibson
2019-09-26 7:05 ` Cédric Le Goater
2019-09-26 11:29 ` David Gibson
2019-09-26 15:35 ` Greg Kurz
2019-09-27 5:51 ` David Gibson
2019-09-27 6:23 ` Greg Kurz
2019-09-26 15:39 ` Greg Kurz
2019-09-27 14:12 ` Greg Kurz
2019-09-29 9:34 ` David Gibson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=153343f3-438b-6538-fd8c-12240ac786e3@redhat.com \
--to=philmd@redhat.com \
--cc=clg@kaod.org \
--cc=david@gibson.dropbear.id.au \
--cc=groug@kaod.org \
--cc=jasowang@redhat.com \
--cc=laurent@vivier.eu \
--cc=marcandre.lureau@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
--cc=riku.voipio@iki.fi \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).