diff mbox

[v1] x86: fix bug caused by commit 0ade5e

Message ID 1505981483-3885-1-git-send-email-yi.y.sun@linux.intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

Yi Sun Sept. 21, 2017, 8:11 a.m. UTC
Commit 0ade5e causes a bug that only the psr features presented in cmdline
cannot be correctly enumerated.
1. If there is only 'psr=', the 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 <yi.y.sun@linux.intel.com>
---
 xen/arch/x86/psr.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

Comments

Jürgen Groß Sept. 21, 2017, 8:44 a.m. UTC | #1
On 21/09/17 10:11, Yi Sun wrote:
> Commit 0ade5e causes a bug that only the psr features presented in cmdline
> cannot be correctly enumerated.
> 1. If there is only 'psr=', the 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 <yi.y.sun@linux.intel.com>

Reviewed-by: Juergen Gross <jgross@suse.com>


Juergen

> ---
>  xen/arch/x86/psr.c | 9 +++++++--
>  1 file changed, 7 insertions(+), 2 deletions(-)
> 
> diff --git a/xen/arch/x86/psr.c b/xen/arch/x86/psr.c
> index 4515100..daa2aeb 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);
>
Jan Beulich Sept. 21, 2017, 12:53 p.m. UTC | #2
>>> On 21.09.17 at 10:11, <yi.y.sun@linux.intel.com> wrote:

A better title for the patch is needed.

> Commit 0ade5e causes a bug that only the psr features presented in cmdline
> cannot be correctly enumerated.

To me it looks like either the "only" is wrong here, or the "cannot"
was meant to be "can"; the way it's now I can't make sense of it.

> 1. If there is only 'psr=', the CMT is enumerated which is not right.

s/,the /,then/ ?

Jan
diff mbox

Patch

diff --git a/xen/arch/x86/psr.c b/xen/arch/x86/psr.c
index 4515100..daa2aeb 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);