[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 07/07/15 12:00, Vijay Kilari wrote:
> 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.

I don't see any problem... All the SPI/PPI reported by the GIC may not
be implemented. This ASSERT is here for a sanity check of the IRQ value.

If the caller decides to pass an unused IRQ then it's own problem.

There is not much reason to not extend gic_number_lines. The common GIC
code should not care whether the IRQ is a LPI, SPI...

Regards,

-- 
Julien Grall

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.