[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [RFC PATCH v3 13/18] xen/arm: ITS: Add irq descriptors for LPIs
On Mon, Jun 29, 2015 at 6:41 PM, Julien Grall <julien.grall@xxxxxxxxxx> wrote: > On 29/06/15 13:58, Ian Campbell wrote: >> On Mon, 2015-06-22 at 17:31 +0530, vijay.kilari@xxxxxxxxx wrote: >>> From: Vijaya Kumar K <Vijaya.Kumar@xxxxxxxxxxxxxxxxxx> >>> >>> Add irq descriptors for LPIs and route >> >> This seems to also do interrupt injection for LPIs and more. Please >> check that your commit messages are accurately describing the contents >> of the patch. If it turns into a long list of unrelated sounding things >> then that might suggest the patch should be split up. >> >>> Signed-off-by: Vijaya Kumar K <Vijaya.Kumar@xxxxxxxxxxxxxxxxxx> >>> --- >>> xen/arch/arm/gic-v3.c | 8 +++- >>> xen/arch/arm/gic.c | 17 +++++++- >>> xen/arch/arm/irq.c | 38 +++++++++++++---- >>> xen/arch/arm/vgic-v3-its.c | 9 +++++ >>> xen/arch/arm/vgic.c | 90 >>> ++++++++++++++++++++++++++++++++++++++--- >>> xen/include/asm-arm/domain.h | 2 + >>> xen/include/asm-arm/gic-its.h | 6 +++ >>> xen/include/asm-arm/gic.h | 3 ++ >>> xen/include/asm-arm/vgic.h | 1 + >>> 9 files changed, 157 insertions(+), 17 deletions(-) >>> >>> diff --git a/xen/arch/arm/gic-v3.c b/xen/arch/arm/gic-v3.c >>> index 737646c..793f2f0 100644 >>> --- a/xen/arch/arm/gic-v3.c >>> +++ b/xen/arch/arm/gic-v3.c >>> @@ -899,9 +899,13 @@ static void gicv3_update_lr(int lr, const struct >>> pending_irq *p, >>> >>> val = (((uint64_t)state & 0x3) << GICH_LR_STATE_SHIFT) | grp; >>> val |= ((uint64_t)p->priority & 0xff) << GICH_LR_PRIORITY_SHIFT; >>> - val |= ((uint64_t)p->irq & GICH_LR_VIRTUAL_MASK) << >>> GICH_LR_VIRTUAL_SHIFT; >>> >>> - if ( p->desc != NULL ) >>> + if ( is_lpi(p->irq) ) >>> + val |= ((uint64_t)p->irq & GICH_LR_VIRTUAL_MASK) << >>> GICH_LR_VIRTUAL_SHIFT; >>> + else >>> + val |= ((uint64_t)p->irq & GICH_LR_VIRTUAL_MASK) << >>> GICH_LR_VIRTUAL_SHIFT; >> >> Is there supposed to be something different between these two cases? (Or >> am I missing it?) >> >>> + >>> + if ( p->desc != NULL && !(is_lpi(p->irq)) ) >>> val |= GICH_LR_HW | (((uint64_t)p->desc->irq & >>> GICH_LR_PHYSICAL_MASK) >>> << GICH_LR_PHYSICAL_SHIFT); >>> >>> diff --git a/xen/arch/arm/gic.c b/xen/arch/arm/gic.c >>> index cfc9c42..091f7e5 100644 >>> --- a/xen/arch/arm/gic.c >>> +++ b/xen/arch/arm/gic.c >>> @@ -124,18 +124,31 @@ void gic_route_irq_to_xen(struct irq_desc *desc, >>> const cpumask_t *cpu_mask, >>> unsigned int priority) >>> { >>> ASSERT(priority <= 0xff); /* Only 8 bits of priority */ >>> - ASSERT(desc->irq < gic_number_lines());/* Can't route interrupts that >>> don't exist */ >>> + /* Can't route interrupts that don't exist */ >>> + ASSERT(desc->irq < gic_number_lines() && is_lpi(desc->irq)); >> >> ||, surely? Otherwise doesn't this hit for every possible irq? > > Aside that, the change in the ASSERT is wrong. The goal of the helper > gic_number_lines is to return the number of IRQs (i.e PPIs, LPIs, SPIs) > present in the hardware. We use in few places to ensure the validity of > the IRQ. > > Although, this will require some extra care in places where an interrupt > is assigned to a domain in order to only allow SPIs. Today, gic_number_lines returns number of SPI+PPI supported. If we want to include number LPIs supported, then we cannot compare against with irq number because of hole in irq numbers from 1024 - 8196. Regards Vijay _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |