[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v6 17/31] xen/arm: ITS: Store LPIs allocated and IRQ ID bits per domain



On Thu, Sep 3, 2015 at 9:55 PM, Julien Grall <julien.grall@xxxxxxxxxx> wrote:
> Hi Vijay,
>
> On 31/08/15 12:06, vijay.kilari@xxxxxxxxx wrote:
>> From: Vijaya Kumar K <Vijaya.Kumar@xxxxxxxxxxxxxxxxxx>
>>
>> Store number of lpis and number of id bits
>> in vgic structure
>>
>> Signed-off-by: Vijaya Kumar K <Vijaya.Kumar@xxxxxxxxxxxxxxxxxx>
>> ---
>>  xen/arch/arm/irq.c           |    9 +++++++++
>>  xen/arch/arm/vgic-v3-its.c   |    2 ++
>>  xen/arch/arm/vgic.c          |   12 ++++++++++++
>>  xen/include/asm-arm/domain.h |    3 +++
>>  xen/include/asm-arm/irq.h    |    3 +++
>>  5 files changed, 29 insertions(+)
>>
>> diff --git a/xen/arch/arm/irq.c b/xen/arch/arm/irq.c
>> index 24c4f24..93e9411 100644
>> --- a/xen/arch/arm/irq.c
>> +++ b/xen/arch/arm/irq.c
>> @@ -31,6 +31,15 @@
>>  static unsigned int local_irqs_type[NR_LOCAL_IRQS];
>>  static DEFINE_SPINLOCK(local_irqs_type_lock);
>>
>> +/* Number of LPI supported in XEN */
>> +/*
>
> Number of LPI supported by Xen.
>
> Also, it's not necessary to have a separate comment for this. It could
> be included in the next one. I.e:
>
> /*
>  * Number of LPI supported by Xen
>  *
>  * LPI ....
>
>> + * LPI number start from 8192. Minimum number of bits
>> + * required to represent 8192 is 13 bits. So to Support LPIs minimum
>> + * 14 bits are required which can represent maximum LPI 16384.
>> + * 16384 - 8192 = 8192. Minimum number of LPIs supported is 8192
>> + */
>
> The explanation is hard to understand. I would rewrite like:
>
> "The LPI identifier starts from 8192. Given that the hardware is
> providing the number of identifier bits, supporting LPIs requires at
> least 14 bits. This will represent 16384 interrupt ID of which 8192
> LPIs. So the minimum of LPIs supported when the hardware supports LPIs
> is 8192 ".
>
>> +unsigned int nr_lpis = 8192;
>> +
>
> I still don't think that it makes sense to introduce the number of LPIs
> variable in a patch for vITS. As you describe it, it should be part of
> an ITS/GICv3 patch.
>
> Although, I think you should use the field nr_irq_ids in the gic
> structure (see patch #10) to avoid problem you currently have with this
> solution.
>
> For instance, gic_is_lpi is relying on the number of ID bits exposed by
> the hardware but you allocate the IRQ desc for LPIs based on nr_lpis.
>

You mean to restrict nr_irq_ids to FIRST_GIC_LPI + 8192 (nr_lpis)
instead of HW supported value?
and let gic_is_lpi() always check for Xen supported lpi number instead of hw
supported value?

> It's fine to restrict the value in the GIC compare to hardware.
>
> Furthermore this value should be 0 on platform where LPIs is not
> supported in order to make confusion and introduce possible problem with
> the code later. I could add that, AFAICT, this new variable (nr_lpis) is
> not that often within the code.

 nr_lpis is global variable that we define to tell number of LPIs supported
by Xen. If platform does not support LPIs, then vgic.nr_lpis is set to 0.

>
> Lastly, on a previous version (don't remember which one) we said that
> the user should be able to change the value on the command line. What's
> your plan for that?

Yes, it was part of our discussion on chat. I will fix it.

>
>>  /* Describe an IRQ assigned to a guest */
>>  struct irq_guest
>>  {
>> diff --git a/xen/arch/arm/vgic-v3-its.c b/xen/arch/arm/vgic-v3-its.c
>> index fabbad0..cef6139 100644
>> --- a/xen/arch/arm/vgic-v3-its.c
>> +++ b/xen/arch/arm/vgic-v3-its.c
>> @@ -547,6 +547,8 @@ int vits_domain_init(struct domain *d)
>>
>>      ASSERT(is_hardware_domain(d));
>>
>> +    d->arch.vgic.nr_lpis = nr_lpis;
>> +
>
> With  my suggestion, this would turn into gic_nr_irq_ids() - 8192;

As suggested above, if we restrict nr_irq_ids to Xen supported
value (FIRST_GIC_LPI + 8192(nr_lpis) then you suggestion is right.

Regards
Vijay

_______________________________________________
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®.