[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v6 07/12] xen: enable Dom0 to use SVE feature
> On 24 Apr 2023, at 15:05, Jan Beulich <jbeulich@xxxxxxxx> wrote: > > On 24.04.2023 16:00, Luca Fancellu wrote: >>> On 24 Apr 2023, at 12:34, Jan Beulich <jbeulich@xxxxxxxx> wrote: >>> On 24.04.2023 08:02, Luca Fancellu wrote: >>>> @@ -30,9 +37,11 @@ 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); >>>> +bool sve_domctl_vl_param(int val, unsigned int *out); >>>> >>>> #else /* !CONFIG_ARM64_SVE */ >>>> >>>> +#define opt_dom0_sve (0) >>>> #define is_sve_domain(d) (0) >>>> >>>> static inline register_t compute_max_zcr(void) >>>> @@ -59,6 +68,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 bool sve_domctl_vl_param(int val, unsigned int *out) >>>> +{ >>>> + return false; >>>> +} >>> >>> Once again I don't see the need for this stub: opt_dom0_sve is #define-d >>> to plain zero when !ARM64_SVE, so the only call site merely requires a >>> visible declaration, and DCE will take care of eliminating the actual call. >> >> I’ve tried to do that, I’ve put the declaration outside the ifdef so that it >> was always included >> and I removed the stub, but I got errors on compilation because of undefined >> function. >> For that reason I left that change out. > > Interesting. I don't see where the reference would be coming from. Could it be because the declaration is visible, outside the ifdef, but the definition is not compiled in? >>>> --- 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; >>>> + >>>> + slen = e ? ({ ASSERT(e >= s); e - s; }) : strlen(s); >>> >>> As per this "e" may come in as NULL, meaning that ... >>> >>>> + nlen = strlen(name); >>>> + >>>> + /* Check that this is the name we're looking for and a value was >>>> provided */ >>>> + if ( (slen <= nlen) || strncmp(s, name, nlen) || (s[nlen] != '=') ) >>>> + return -1; >>>> + >>>> + pval = simple_strtoll(&s[nlen + 1], &str, 0); >>>> + >>>> + /* Number not recognised */ >>>> + if ( str != e ) >>>> + return -2; >>> >>> ... this is always going to lead to failure in that case. (I guess I could >>> have spotted this earlier, sorry.) >>> >>> As a nit, I'd also appreciate if style here (parenthesization in particular) >>> could match that of parse_boolean(), which doesn't put parentheses around >>> the operands of comparison operators (a few lines up from here). With the >>> other function in mind, I'm then not going to pick on the seemingly >>> redundant (with the subsequent strncmp()) "slen <= nlen", which has an >>> equivalent there as well. >> >> You are right, do you think this will be ok: > > It'll do, I guess. > >> --- a/xen/common/kernel.c >> +++ b/xen/common/kernel.c >> @@ -324,11 +324,14 @@ int __init parse_signed_integer(const char *name, >> const char *s, const char *e, >> slen = e ? ({ ASSERT(e >= s); e - s; }) : strlen(s); >> nlen = strlen(name); >> >> + if ( !e ) >> + e = s + slen; >> + >> /* Check that this is the name we're looking for and a value was >> provided */ >> - if ( (slen <= nlen) || strncmp(s, name, nlen) || (s[nlen] != '=') ) >> + if ( slen <= nlen || strncmp(s, name, nlen) || s[nlen] != '=' ) >> return -1; >> >> - pval = simple_strtoll(&s[nlen + 1], &str, 0); >> + pval = simple_strtoll(&s[nlen + 1], &str, 10); >> >> /* Number not recognised */ >> if ( str != e ) >> >> >> Please note that I’ve also included your comment about the base, which I >> forgot to add, apologies for that. >> >> slen <= nlen doesn’t seems redundant to me, I have that because I’m >> accessing s[nlen] and I would like >> the string s to be at least > nlen > > Right, but doesn't strncmp() guarantee that already? I thought strncmp() guarantees s contains at least nlen chars, meaning from 0 to nlen-1, is my understanding wrong? > > Jan
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |