[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v5 07/12] xen: enable Dom0 to use SVE feature
On 12.04.2023 11:49, Luca Fancellu wrote: > @@ -118,3 +121,21 @@ void sve_restore_state(struct vcpu *v) > > sve_load_ctx(sve_ctx_zreg_end, v->arch.vfp.fpregs, 1); > } > + > +int __init sve_sanitize_vl_param(int val, unsigned int *out) > +{ > + /* > + * Negative SVE parameter value means to use the maximum supported > + * vector length, otherwise if a positive value is provided, check if the > + * vector length is a multiple of 128 and not bigger than the maximum > value > + * 2048 > + */ > + if ( val < 0 ) > + *out = get_sys_vl_len(); > + else if ( ((val % SVE_VL_MULTIPLE_VAL) == 0) && (val <= SVE_VL_MAX_BITS) > ) > + *out = val; > + else > + return -1; > + > + return 0; > +} I think such a function wants to either return boolean, or -E... in the error case. Boolean would ... > @@ -4109,6 +4125,17 @@ void __init create_dom0(void) > if ( iommu_enabled ) > dom0_cfg.flags |= XEN_DOMCTL_CDF_iommu; > > + if ( opt_dom0_sve ) > + { > + unsigned int vl; > + > + if ( !sve_sanitize_vl_param(opt_dom0_sve, &vl) ) ... yield a slightly better call site here, imo. > + dom0_cfg.arch.sve_vl = sve_encode_vl(vl); > + else > + printk(XENLOG_WARNING > + "SVE vector length error, disable feature for Dom0\n"); I appreciate the now better behavior here, but I think the respective part of the doc is now stale? > @@ -28,9 +35,12 @@ int sve_context_init(struct vcpu *v); > void sve_context_free(struct vcpu *v); > void sve_save_state(struct vcpu *v); > void sve_restore_state(struct vcpu *v); > +int sve_sanitize_vl_param(int val, unsigned int *out); > > #else /* !CONFIG_ARM64_SVE */ > > +#define opt_dom0_sve (0) With this I don't think you need ... > @@ -55,6 +65,11 @@ static inline void sve_context_free(struct vcpu *v) {} > static inline void sve_save_state(struct vcpu *v) {} > static inline void sve_restore_state(struct vcpu *v) {} > > +static inline int sve_sanitize_vl_param(int val, unsigned int *out) > +{ > + return -1; > +} ... such a stub function; having the declaration visible should be enough for things to build (thanks to DCE, which we use for similar purposes on many other places). > --- a/xen/common/kernel.c > +++ b/xen/common/kernel.c > @@ -314,6 +314,31 @@ int parse_boolean(const char *name, const char *s, const > char *e) > return -1; > } > > +int __init parse_signed_integer(const char *name, const char *s, const char > *e, > + long long *val) > +{ > + size_t slen, nlen; > + const char *str; > + long long pval; What use is this extra variable? > + slen = e ? ({ ASSERT(e >= s); e - s; }) : strlen(s); > + nlen = strlen(name); > + > + /* Does s start with name or contains only the name? */ > + if ( (slen <= nlen) || strncmp(s, name, nlen) || (s[nlen] != '=') ) > + return -1; The comment imo wants wording consistently positive or consistently negative. IOW either you say what you're looking for, or you say what you're meaning to reject. > + pval = simple_strtoll(&s[nlen + 1], &str, 0); I wonder whether, when potentially expecting negative numbers, accepting other than decimal numbers here is useful. Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |