Hi,

 static DECLARE_BITMAP(vmid_mask, MAX_VMID);
>>
>>  void p2m_vmid_allocator_init(void)
>>  {
>> +    unsigned int cpu;
>> +
>>      set_bit(INVALID_VMID, vmid_mask);
>> +
>> +    max_vmid = MAX_VMID;
>>
>
> max_vmid is only declared for ARM64 and will break compilation for ARM32.
> Please try to build each patch for both architecture before sending to the
> ML.
>
> I will compile for ARM32.


> However, in this case. It would make more sense to keep the maximum vmid
> static for ARM32 as it will never change.
>
>
I quite like what has been done for P2M_ROOT_{LEVEL,ORDER} where the define
> is a constant on ARM32 and point to a variable on ARM64.
>
> I will keep the bitmap statically defined for ARM32. For ARM64 bitmap will
be allocated dynamically.


> +
>> +#ifdef CONFIG_ARM_64
>> +    /*
>> +     * if any cpu does not support 16-bit VMID then restrict the
>> +     * max VMIDs which can be allocated to 256
>> +     */
>> +    for_each_online_cpu ( cpu )
>> +    {
>> +        const struct cpuinfo_arm *info = &cpu_data[cpu];
>> +
>> +        if ( info->mm64.vmid_bits != VMID_16_BITS_SUPPORT )
>> +        {
>> +            max_vmid = (1UL << 8);
>> +            break;
>> +        }
>> +    }
>> +#endif
>>
>
> I would rework this code to have max_vmid set to 8 bits by default and the
> turn on 16 bits if available on every CPU.
>
> I will modify the code accordingly.


>  }
>>
>>  static int p2m_alloc_vmid(struct domain *d)
>> @@ -1254,11 +1282,11 @@ static int p2m_alloc_vmid(struct domain *d)
>>
>>      spin_lock(&vmid_alloc_lock);
>>
>> -    nr = find_first_zero_bit(vmid_mask, MAX_VMID);
>> +    nr = find_first_zero_bit(vmid_mask, max_vmid);
>>
>>      ASSERT(nr != INVALID_VMID);
>>
>> -    if ( nr == MAX_VMID )
>> +    if ( nr == max_vmid )
>>      {
>>          rc = -EBUSY;
>>          printk(XENLOG_ERR "p2m.c: dom%d: VMID pool exhausted\n",
>> d->domain_id);
>> @@ -1646,6 +1674,10 @@ void __init setup_virt_paging(void)
>>
>>      val |= VTCR_PS(pa_range);
>>      val |= VTCR_TG0_4K;
>> +
>> +    /* set the VS bit only if 16 bit VMID is supported */
>> +    if ( max_vmid == MAX_VMID )
>>
>
> This check is confusing, I would be clearer to use MAX_VMID_16 or else.
>
> I will explicitly use 16 bit macro


> +        val |= VTCR_VS;
>>      val |= VTCR_SL0(pa_range_info[pa_range].sl0);
>>      val |= VTCR_T0SZ(pa_range_info[pa_range].t0sz);
>>
>> diff --git a/xen/include/asm-arm/p2m.h b/xen/include/asm-arm/p2m.h
>> index fdb6b47..bfcdbf1 100644
>> --- a/xen/include/asm-arm/p2m.h
>> +++ b/xen/include/asm-arm/p2m.h
>> @@ -30,7 +30,7 @@ struct p2m_domain {
>>      struct page_info *root;
>>
>>      /* Current VMID in use */
>> -    uint8_t vmid;
>> +    uint16_t vmid;
>>
>>      /* Current Translation Table Base Register for the p2m */
>>      uint64_t vttbr;
>> diff --git a/xen/include/asm-arm/processor.h
>> b/xen/include/asm-arm/processor.h
>> index 15bf890..4b6be3d 100644
>> --- a/xen/include/asm-arm/processor.h
>> +++ b/xen/include/asm-arm/processor.h
>> @@ -215,6 +215,7 @@
>>
>>  #define VTCR_PS(x)      ((x)<<16)
>>
>> +#define VTCR_VS        (_AC(0x1,UL)<<19)
>>
>
> Newline here please.
>
> Ok.

>  #endif
>>
>>  #define VTCR_RES1       (_AC(1,UL)<<31)
>> @@ -269,6 +270,11 @@
>>  /* FSR long format */
>>  #define FSRL_STATUS_DEBUG       (_AC(0x22,UL)<<0)
>>
>> +#ifdef CONFIG_ARM_64
>> +#define VMID_8_BITS_SUPPORT         0x0
>> +#define VMID_16_BITS_SUPPORT        0x2
>> +#endif
>>
>
> I would prefix the 2 define with MM64_ so we know how the values will be
> matched.
>
> You mean I define them like this ?
#define MM64_VMID_8_BITS_SUPPORT   0x0
#define MM64_VMID_16_BITS_SUPPORT 0x2

+
>>  #ifndef __ASSEMBLY__
>>
>>  struct cpuinfo_arm {
>> @@ -337,7 +343,16 @@ struct cpuinfo_arm {
>>              unsigned long tgranule_64K:4;
>>              unsigned long tgranule_4K:4;
>>              unsigned long __res0:32;
>> -       };
>> +
>> +            unsigned long hafdbs:4;
>> +            unsigned long vmid_bits:4;
>> +            unsigned long vh:4;
>> +            unsigned long hpds:4;
>> +            unsigned long lo:4;
>> +            unsigned long pan:4;
>> +            unsigned long __res1:8;
>> +            unsigned long __res2:32;
>> +        };
>>      } mm64;
>>
>>      struct {
>>
>>
> Regards,
>
> --
> Julien Grall
>
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

Reply via email to