[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH for-2.12 v3 03/11] spapr: introduce new XICSFabr
From: |
Greg Kurz |
Subject: |
Re: [Qemu-devel] [PATCH for-2.12 v3 03/11] spapr: introduce new XICSFabric operations for an IRQ allocator |
Date: |
Tue, 14 Nov 2017 09:52:58 +0100 |
On Fri, 10 Nov 2017 15:20:09 +0000
Cédric Le Goater <address@hidden> wrote:
> Currently, the ICSState 'ics' object of the sPAPR machine acts as the
> global interrupt source handler and also as the IRQ number allocator
> for the machine. Some IRQ numbers are allocated very early in the
> machine initialization sequence to populate the device tree, and this
> is a problem to introduce the new POWER XIVE interrupt model, as it
> needs to share the IRQ numbers with the older model.
>
> To prepare ground for XIVE, here is a set of new XICSFabric operations
> to let the machine handle directly the IRQ number allocation and to
> decorrelate the allocation from the interrupt source object :
>
> bool (*irq_test)(XICSFabric *xi, int irq);
> int (*irq_alloc_block)(XICSFabric *xi, int count, int align);
> void (*irq_free_block)(XICSFabric *xi, int irq, int num);
>
> In these prototypes, the 'irq' parameter refers to a number in the
> global IRQ number space. Indexes for arrays storing different state
> informations on the interrupts, like the ICSIRQState, are usually
> named 'srcno'.
>
> Signed-off-by: Cédric Le Goater <address@hidden>
> ---
Reviewed-by: Greg Kurz <address@hidden>
> hw/ppc/spapr.c | 19 +++++++++++++++++++
> include/hw/ppc/xics.h | 4 ++++
> 2 files changed, 23 insertions(+)
>
> diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
> index a2dcbee07214..84d68f2fdbae 100644
> --- a/hw/ppc/spapr.c
> +++ b/hw/ppc/spapr.c
> @@ -3536,6 +3536,21 @@ static ICPState *spapr_icp_get(XICSFabric *xi, int
> vcpu_id)
> return cpu ? ICP(cpu->intc) : NULL;
> }
>
> +static bool spapr_irq_test(XICSFabric *xi, int irq)
> +{
> + return false;
> +}
> +
> +static int spapr_irq_alloc_block(XICSFabric *xi, int count, int align)
> +{
> + return -1;
> +}
> +
> +static void spapr_irq_free_block(XICSFabric *xi, int irq, int num)
> +{
> + ;
> +}
> +
> static void spapr_pic_print_info(InterruptStatsProvider *obj,
> Monitor *mon)
> {
> @@ -3630,6 +3645,10 @@ static void spapr_machine_class_init(ObjectClass *oc,
> void *data)
> xic->ics_get = spapr_ics_get;
> xic->ics_resend = spapr_ics_resend;
> xic->icp_get = spapr_icp_get;
> + xic->irq_test = spapr_irq_test;
> + xic->irq_alloc_block = spapr_irq_alloc_block;
> + xic->irq_free_block = spapr_irq_free_block;
> +
> ispc->print_info = spapr_pic_print_info;
> /* Force NUMA node memory size to be a multiple of
> * SPAPR_MEMORY_BLOCK_SIZE (256M) since that's the granularity
> diff --git a/include/hw/ppc/xics.h b/include/hw/ppc/xics.h
> index 28d248abad61..30e7f2e0a7dd 100644
> --- a/include/hw/ppc/xics.h
> +++ b/include/hw/ppc/xics.h
> @@ -175,6 +175,10 @@ typedef struct XICSFabricClass {
> ICSState *(*ics_get)(XICSFabric *xi, int irq);
> void (*ics_resend)(XICSFabric *xi);
> ICPState *(*icp_get)(XICSFabric *xi, int server);
> + /* IRQ allocator helpers */
> + bool (*irq_test)(XICSFabric *xi, int irq);
> + int (*irq_alloc_block)(XICSFabric *xi, int count, int align);
> + void (*irq_free_block)(XICSFabric *xi, int irq, int num);
> } XICSFabricClass;
>
> #define XICS_IRQS_SPAPR 1024
[Qemu-devel] [PATCH for-2.12 v3 02/11] ppc/xics: remove useless if condition, Cédric Le Goater, 2017/11/10
[Qemu-devel] [PATCH for-2.12 v3 03/11] spapr: introduce new XICSFabric operations for an IRQ allocator, Cédric Le Goater, 2017/11/10
[Qemu-devel] [PATCH for-2.12 v3 04/11] spapr: move current IRQ allocation under the machine, Cédric Le Goater, 2017/11/10
[Qemu-devel] [PATCH for-2.12 v3 05/11] spapr: introduce an IRQ allocator using a bitmap, Cédric Le Goater, 2017/11/10