From: Yi Sun Date: Fri, 22 Sep 2017 14:28:35 +0000 (+0200) Subject: x86/PSR: fix cmdline option handling X-Git-Tag: archive/raspbian/4.11.1-1+rpi1~1^2~66^2~1360 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=77f80409e086ee320b092847c915427d2eac9317;p=xen.git x86/PSR: fix cmdline option handling Commit 0ade5e causes a bug that the psr features presented in cmdline cannot be correctly enumerated. 1. If there is only 'psr=', then CMT is enumerated which is not right. 2. If cmdline is 'psr=cmt,cat,cdp,mba', only the last feature is enumerated. This patch fixes the issues. Signed-off-by: Yi Sun Reviewed-by: Juergen Gross --- diff --git a/xen/arch/x86/psr.c b/xen/arch/x86/psr.c index 4515100785..daa2aeb9b2 100644 --- a/xen/arch/x86/psr.c +++ b/xen/arch/x86/psr.c @@ -422,9 +422,10 @@ static bool __init parse_psr_bool(const char *s, const char *delim, const char *ss, const char *feature, unsigned int mask) { - if ( !strncmp(s, feature, delim - s) ) + /* If cmdline is 'psr=', we need make sure delim != s */ + if ( delim != s && !strncmp(s, feature, delim - s) ) { - if ( !*delim ) + if ( !*delim || *delim == ',' ) opt_psr |= mask; else { @@ -457,6 +458,10 @@ static int __init parse_psr_param(const char *s) if ( !val_delim ) val_delim = strchr(s, '\0'); + /* E.g. 'psr=cmt,rmid_max:200' */ + if ( val_delim > ss ) + val_delim = ss; + if ( *val_delim && !strncmp(s, "rmid_max", val_delim - s) ) { opt_rmid_max = simple_strtoul(val_delim + 1, &q, 0);