|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [XEN VMID PATCH 2/2 v4] xen/arm: Add support for 16 bit VMIDs
Hi Julien,
>> -#define MAX_VMID 256
>> -#define INVALID_VMID 0 /* VMID 0 is reserved */
>>
>> static spinlock_t vmid_alloc_lock = SPIN_LOCK_UNLOCKED;
>>
>> /*
>> - * VTTBR_EL2 VMID field is 8 bits. Using a bitmap here limits us to
>> - * 256 concurrent domains.
>> + * VTTBR_EL2 VMID field is 8 or 16 bits. Aarch64 supports 16-bit VMID.
>
>
> s/Aarch64/AArch64/
ok.
>
> Also I would say "may support" because this is not true for all AArch64
> platform.
>
>> + * Using a bitmap here limits us to 256 or 65536 (for Aarch64) concurrent
>
>
> s/Aarch64/AArch64/
>
ok.
>> + * domains. The bitmap space will be allocated dynamically based on
>> + * whether 8 or 16 bit VMIDs are supported.
>
>
> I am wondering if it would be better to comment #define MAX_VMID instead.
> E.g
>
> /* VMID is by default 8 bit width on AArch64 */
> static unsigned int max_vmid = ....;
> #define MAX_VMID max_vmid
>
> /* VMID is always 8 bit width on AArch32 */
> #define MAX_VMID MAX_VMID_8_BIT
>
> What do you think?
Looks fine. I will modify.
>
>> */
>> -static DECLARE_BITMAP(vmid_mask, MAX_VMID);
>> +static unsigned long *vmid_mask;
>>
>> static void p2m_vmid_allocator_init(void)
>> {
>> + /*
>> + * allocate space for vmid_mask based on MAX_VMID
>> + */
>> + vmid_mask = xzalloc_array(unsigned long, BITS_TO_LONGS(MAX_VMID));
>> +
>> + if ( !vmid_mask )
>> + panic("Could not allocate VMID bitmap space");
>> +
>> set_bit(INVALID_VMID, vmid_mask);
>> }
>>
>> @@ -1632,20 +1649,36 @@ void __init setup_virt_paging(void)
>>
>> unsigned int cpu;
>> unsigned int pa_range = 0x10; /* Larger than any possible value */
>> + bool vmid_8_bit = false;
>
>
> Only one space between bool and vmid_8_bit please.
>
ok.
>>
>> for_each_online_cpu ( cpu )
>> {
>> const struct cpuinfo_arm *info = &cpu_data[cpu];
>> if ( info->mm64.pa_range < pa_range )
>> pa_range = info->mm64.pa_range;
>> +
>> + /* set a flag if the current cpu does not suppot 16 bit VMIDs */
>
>
> s/set/Set/
> s/suppot/support/
>
> Please also add a full stop at the end of the sentence.
>
ok.
>
>> + if ( info->mm64.vmid_bits != MM64_VMID_16_BITS_SUPPORT )
>> + vmid_8_bit = true;
>> }
>>
>> + /*
>> + * if the flag is not set then it means all CPUs support 16-bit
>
>
> s/if/If/
>
ok.
>> + * VMIDs.
>> + */
>> + if ( !vmid_8_bit )
>> + max_vmid = MAX_VMID_16_BIT;
>> +
>> /* pa_range is 4 bits, but the defined encodings are only 3 bits */
>> if ( pa_range&0x8 || !pa_range_info[pa_range].pabits )
>> panic("Unknown encoding of ID_AA64MMFR0_EL1.PARange %x\n",
>> pa_range);
>
>
> This code has changed in xen upstream and the platform will unlikely apply.
> Please rebase your code on staging.
>
I checked with the staging branch. This code is same. I re-based my
code on staging branch but there is no change in this code fragment.
>>
>> val |= VTCR_PS(pa_range);
>> val |= VTCR_TG0_4K;
>> +
>> + /* set the VS bit only if 16 bit VMID is supported */
>
>
> s/set/Set/ + full stop
ok.
>
>> + if ( MAX_VMID == MAX_VMID_16_BIT )
>> + val |= VTCR_VS;
>
>
> Sorry, I have only spotted until now. Can you print a message to advertise
> the width of VMID?
>
> See the printk("P2M: %d-bit levels...");
>
ok. I will add the VMID size in this printk.
>> val |= VTCR_SL0(pa_range_info[pa_range].sl0);
>> val |= VTCR_T0SZ(pa_range_info[pa_range].t0sz);
>
>
> Cheers,
>
> --
> Julien Grall
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |