[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2] x86/cpuid: Extend the cpuid= option to support all named features
On 06.09.2019 17:27, Andrew Cooper wrote: > On 06/09/2019 16:18, Jan Beulich wrote: >> On 05.09.2019 21:49, Andrew Cooper wrote: >>> --- a/xen/arch/x86/cpuid.c >>> +++ b/xen/arch/x86/cpuid.c >>> @@ -21,45 +21,62 @@ static const uint32_t deep_features[] = >>> INIT_DEEP_FEATURES; >>> >>> static int __init parse_xen_cpuid(const char *s) >>> { >>> + static const struct feature { >>> + const char *name; >>> + unsigned int bit; >>> + } features[] __initconst = INIT_FEATURE_NAMES, *lhs, *mid, *rhs; >> The pointer field want this to use __initconstrel. > > Ok. > >> And I don't think you mean lhs, mid, and rhs to also be static? > > No - not intentional. > >> Albeit ... >> >>> const char *ss; >>> int val, rc = 0; >>> >>> do { >>> + const char *feat; >>> + >>> ss = strchr(s, ','); >>> if ( !ss ) >>> ss = strchr(s, '\0'); >>> >>> - if ( (val = parse_boolean("md-clear", s, ss)) >= 0 ) >>> - { >>> - if ( !val ) >>> - setup_clear_cpu_cap(X86_FEATURE_MD_CLEAR); >>> - } >>> - else if ( (val = parse_boolean("ibpb", s, ss)) >= 0 ) >>> - { >>> - if ( !val ) >>> - setup_clear_cpu_cap(X86_FEATURE_IBPB); >>> - } >>> - else if ( (val = parse_boolean("ibrsb", s, ss)) >= 0 ) >>> - { >>> - if ( !val ) >>> - setup_clear_cpu_cap(X86_FEATURE_IBRSB); >>> - } >>> - else if ( (val = parse_boolean("stibp", s, ss)) >= 0 ) >>> - { >>> - if ( !val ) >>> - setup_clear_cpu_cap(X86_FEATURE_STIBP); >>> - } >>> - else if ( (val = parse_boolean("l1d-flush", s, ss)) >= 0 ) >>> - { >>> - if ( !val ) >>> - setup_clear_cpu_cap(X86_FEATURE_L1D_FLUSH); >>> - } >>> - else if ( (val = parse_boolean("ssbd", s, ss)) >= 0 ) >>> + /* Skip the 'no-' prefix for name comparisons. */ >>> + feat = s; >>> + if ( strncmp(s, "no-", 3) == 0 ) >>> + feat += 3; >>> + >>> + /* (Re)initalise lhs and rhs for binary search. */ >>> + lhs = features; >>> + rhs = features + ARRAY_SIZE(features); >> ... the comment here suggests you do, but I don't currently see why. > > We are inside a do { } () while loop, parsing something such as > cpuid=avx512,ss,smx > > The binary search over the feature names needs to start again from > scratch for each new cpuid= list item. > > Otherwise, the while ( lhs < rhs ) binary search will never be entered > for the second cpuid= item. In which case, why don't you move the three variables into the do/while scope? Anyway, with the annotation correction and the variables non- static (in whichever scope) Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx> Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |