[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 |