|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v5 02/12] xen/arm: add SVE vector length field to the domain
Hi Julien,
>> @@ -594,6 +597,7 @@ int arch_sanitise_domain_config(struct
>> xen_domctl_createdomain *config)
>> unsigned int max_vcpus;
>> unsigned int flags_required = (XEN_DOMCTL_CDF_hvm | XEN_DOMCTL_CDF_hap);
>> unsigned int flags_optional = (XEN_DOMCTL_CDF_iommu |
>> XEN_DOMCTL_CDF_vpmu);
>> + unsigned int sve_vl_bits = sve_decode_vl(config->arch.sve_vl);
>> if ( (config->flags & ~flags_optional) != flags_required )
>> {
>> @@ -602,6 +606,26 @@ int arch_sanitise_domain_config(struct
>> xen_domctl_createdomain *config)
>> return -EINVAL;
>> }
>> + /* Check feature flags */
>> + if ( sve_vl_bits > 0 )
>> + {
>> + unsigned int zcr_max_bits = get_sys_vl_len();
>> +
>> + if ( !zcr_max_bits )
>> + {
>> + dprintk(XENLOG_INFO, "SVE is unsupported on this machine.\n");
>> + return -EINVAL;
>> + }
>> +
>> + if ( sve_vl_bits > zcr_max_bits )
>> + {
>> + dprintk(XENLOG_INFO,
>> + "Requested SVE vector length (%u) > supported length
>> (%u)\n",
>> + sve_vl_bits, zcr_max_bits);
>> + return -EINVAL;
>> + }
>
> Is SVE supported for 32-bit guest? If not, then you should had a check here
> to prevent the creation of the domain if sve_vl_bits is set.
No SVE is not supported for 32 bit guests, here I think we will get “SVE is
unsupported on this machine” because get_sys_vl_len() will return 0.
I can however put everything inside #ifdef CONFIG_ARM64_SVE or CONFIG_ARM_64 if
you prefer
>>
>> diff --git a/xen/arch/arm/include/asm/domain.h
>> b/xen/arch/arm/include/asm/domain.h
>> index e776ee704b7d..78cc2da3d4e5 100644
>> --- a/xen/arch/arm/include/asm/domain.h
>> +++ b/xen/arch/arm/include/asm/domain.h
>> @@ -31,6 +31,8 @@ enum domain_type {
>> #define is_domain_direct_mapped(d) ((d)->cdf & CDF_directmap)
>> +#define is_sve_domain(d) ((d)->arch.sve_vl > 0)
>> +
>> /*
>> * Is the domain using the host memory layout?
>> *
>> @@ -67,6 +69,9 @@ struct arch_domain
>> enum domain_type type;
>> #endif
>> + /* max SVE encoded vector length */
>> + uint8_t sve_vl;
>> +
> Can we move this somewhere else to avoid adding extra padding? Also shouldn't
> this be protected with #ifdef CONFIG_ARM_64 to make clear this is not
> supported on Xen 32-bit?
Yes, I’ll move it and protect with CONFIG_ARM_64, is it ok for you if I move it
after:
/* Monitor options */
struct {
uint8_t privileged_call_enabled : 1;
} monitor;
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |