|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 06/15] xen/arm: vgic-v3: Set stride during domain initialization
On 02/02/15 15:40, Ian Campbell wrote:
> On Thu, 2015-01-29 at 18:25 +0000, Julien Grall wrote:
>> The stride may not be set if the hardware GIC is using the default
>> layout. It happens on the Foundation model.
>>
>> On GICv3, the default stride is 2 * 64K. Therefore it's possible to avoid
>> checking at every redistributor MMIO access if the stride is not set.
>
> Can this defaulting not be pulled further to the initialisation of
> gicv3.rdist_stride?
With the upcoming GICv4, the stride may be different for each
distributor (see the check on GICR_TYPER.VLPIS in gicv3_populate_rdist).
So I'd like to avoid the check of rdist_stride.
>> This is only happening for DOM0,
>
> Please say instead "Because domU uses a static stride configuration this
> only happens for dom0..." or similar (i.e. include the reason why domU
> is excluded)
I will do.
>> so we can move this code in
>> gicv_v3_init. Take the opportunity to move the stride setting a bit ealier
>
> "earlier".
>
>> because the loop to set regions will require the stride.
>>
>> Also, use 2 * 64K rather than 128K and explain the reason.
>>
>> Signed-off-by: Julien Grall <julien.grall@xxxxxxxxxx>
>>
>> ---
>> I wasn't not sure where to move this code. I find very confusion the
>> splitting between vgic and gicv. Maybe we should introduce a
>> hwdom_gicv_init and giccc_map callbacks. Then move most of the
>> initialization in the vgic one.
>>
>> Changes in v2:
>> - Patch added
>> ---
>> xen/arch/arm/gic-v3.c | 11 ++++++++++-
>> xen/arch/arm/vgic-v3.c | 6 +-----
>> 2 files changed, 11 insertions(+), 6 deletions(-)
>>
>> diff --git a/xen/arch/arm/gic-v3.c b/xen/arch/arm/gic-v3.c
>> index 47452ca..7b33ff7 100644
>> --- a/xen/arch/arm/gic-v3.c
>> +++ b/xen/arch/arm/gic-v3.c
>> @@ -897,12 +897,21 @@ static int gicv_v3_init(struct domain *d)
>> {
>> d->arch.vgic.dbase = gicv3.dbase;
>> d->arch.vgic.dbase_size = gicv3.dbase_size;
>> +
>> + d->arch.vgic.rdist_stride = gicv3.rdist_stride;
>> + /*
>> + * If the stride is not set, the default stride for GICv3 is 2 *
>> 64K:
>> + * - first 64k page for Control and Physical LPIs
>> + * - second 64k page for Control and Generation of SGIs
>> + */
>> + if ( !d->arch.vgic.rdist_stride )
>> + d->arch.vgic.rdist_stride = 2 * SZ_64K;
>> +
>> for ( i = 0; i < gicv3.rdist_count; i++ )
>> {
>> d->arch.vgic.rbase[i] = gicv3.rdist_regions[i].base;
>> d->arch.vgic.rbase_size[i] = gicv3.rdist_regions[i].size;
>> }
>> - d->arch.vgic.rdist_stride = gicv3.rdist_stride;
>> d->arch.vgic.rdist_count = gicv3.rdist_count;
>> }
>> else
>> diff --git a/xen/arch/arm/vgic-v3.c b/xen/arch/arm/vgic-v3.c
>> index 2c14717..db6b514 100644
>> --- a/xen/arch/arm/vgic-v3.c
>> +++ b/xen/arch/arm/vgic-v3.c
>> @@ -625,11 +625,7 @@ static int vgic_v3_rdistr_mmio_read(struct vcpu *v,
>> mmio_info_t *info)
>
> Why not the write case too?
By mistake it has been dropped in a following patch ("Emulate correctly
the re-distributor"). I will move the changes here.
Regards,
--
Julien Grall
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |