diff mbox series

x86/cmdline: Interpret 'vpmu' as a positive boolean

Message ID 20220302221157.17246-1-andrew.cooper3@citrix.com (mailing list archive)
State New, archived
Headers show
Series x86/cmdline: Interpret 'vpmu' as a positive boolean | expand

Commit Message

Andrew Cooper March 2, 2022, 10:11 p.m. UTC
This makes it behave slightly more like a regular boolean option.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
---
CC: Jan Beulich <JBeulich@suse.com>
CC: Roger Pau Monné <roger.pau@citrix.com>
CC: Wei Liu <wl@xen.org>

Slightly RFC, because there is no easy way of making the opposite "normal
boolean" case work for no-vpmu.
---
 xen/arch/x86/cpu/vpmu.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

Comments

Jan Beulich March 3, 2022, 7:44 a.m. UTC | #1
On 02.03.2022 23:11, Andrew Cooper wrote:
> This makes it behave slightly more like a regular boolean option.
> 
> Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>

Reviewed-by: Jan Beulich <jbeulich@suse.com>

> Slightly RFC, because there is no easy way of making the opposite "normal
> boolean" case work for no-vpmu.

There's nothing to do to make this work afaict: Generic command line
handling converts "no-<option>" to "<option>=no" for custom params.

Jan
Andrew Cooper March 3, 2022, 10:48 a.m. UTC | #2
On 03/03/2022 07:44, Jan Beulich wrote:
> On 02.03.2022 23:11, Andrew Cooper wrote:
>> This makes it behave slightly more like a regular boolean option.
>>
>> Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
> Reviewed-by: Jan Beulich <jbeulich@suse.com>
>
>> Slightly RFC, because there is no easy way of making the opposite "normal
>> boolean" case work for no-vpmu.
> There's nothing to do to make this work afaict: Generic command line
> handling converts "no-<option>" to "<option>=no" for custom params.

Oh - I'd forgotten that, in which case this patch actually wants to be
simply:

diff --git a/xen/common/kernel.c b/xen/common/kernel.c
index adff2d2c77f3..2cea1da781ac 100644
--- a/xen/common/kernel.c
+++ b/xen/common/kernel.c
@@ -162,6 +162,11 @@ static int parse_params(const char *cmdline, const
struct kernel_param *start,
                     safe_strcpy(opt, "no");
                     optval = opt;
                 }
+                else if ( !*optval )
+                {
+                    safe_strcpy(opt, "1");
+                    optval = opt;
+                }
                 rctmp = param->par.func(optval);
                 break;
             case OPT_IGNORE:

to turn "option\0" into "option=1", no?

~Andrew
Jan Beulich March 3, 2022, 11:04 a.m. UTC | #3
On 03.03.2022 11:48, Andrew Cooper wrote:
> On 03/03/2022 07:44, Jan Beulich wrote:
>> On 02.03.2022 23:11, Andrew Cooper wrote:
>>> This makes it behave slightly more like a regular boolean option.
>>>
>>> Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
>> Reviewed-by: Jan Beulich <jbeulich@suse.com>
>>
>>> Slightly RFC, because there is no easy way of making the opposite "normal
>>> boolean" case work for no-vpmu.
>> There's nothing to do to make this work afaict: Generic command line
>> handling converts "no-<option>" to "<option>=no" for custom params.
> 
> Oh - I'd forgotten that, in which case this patch actually wants to be
> simply:
> 
> diff --git a/xen/common/kernel.c b/xen/common/kernel.c
> index adff2d2c77f3..2cea1da781ac 100644
> --- a/xen/common/kernel.c
> +++ b/xen/common/kernel.c
> @@ -162,6 +162,11 @@ static int parse_params(const char *cmdline, const
> struct kernel_param *start,
>                      safe_strcpy(opt, "no");
>                      optval = opt;
>                  }
> +                else if ( !*optval )
> +                {
> +                    safe_strcpy(opt, "1");
> +                    optval = opt;
> +                }
>                  rctmp = param->par.func(optval);
>                  break;
>              case OPT_IGNORE:
> 
> to turn "option\0" into "option=1", no?

Iirc extending this to the positive case was deliberately not done, for
the risk of breaking custom handlers not expecting the standard boolean
forms. We could likely go this route, but only after auditing all custom
handlers, I'm afraid.

Jan
Andrew Cooper March 3, 2022, 11:15 a.m. UTC | #4
On 03/03/2022 11:04, Jan Beulich wrote:
> On 03.03.2022 11:48, Andrew Cooper wrote:
>> On 03/03/2022 07:44, Jan Beulich wrote:
>>> On 02.03.2022 23:11, Andrew Cooper wrote:
>>>> This makes it behave slightly more like a regular boolean option.
>>>>
>>>> Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
>>> Reviewed-by: Jan Beulich <jbeulich@suse.com>
>>>
>>>> Slightly RFC, because there is no easy way of making the opposite "normal
>>>> boolean" case work for no-vpmu.
>>> There's nothing to do to make this work afaict: Generic command line
>>> handling converts "no-<option>" to "<option>=no" for custom params.
>> Oh - I'd forgotten that, in which case this patch actually wants to be
>> simply:
>>
>> diff --git a/xen/common/kernel.c b/xen/common/kernel.c
>> index adff2d2c77f3..2cea1da781ac 100644
>> --- a/xen/common/kernel.c
>> +++ b/xen/common/kernel.c
>> @@ -162,6 +162,11 @@ static int parse_params(const char *cmdline, const
>> struct kernel_param *start,
>>                      safe_strcpy(opt, "no");
>>                      optval = opt;
>>                  }
>> +                else if ( !*optval )
>> +                {
>> +                    safe_strcpy(opt, "1");
>> +                    optval = opt;
>> +                }
>>                  rctmp = param->par.func(optval);
>>                  break;
>>              case OPT_IGNORE:
>>
>> to turn "option\0" into "option=1", no?
> Iirc extending this to the positive case was deliberately not done, for
> the risk of breaking custom handlers not expecting the standard boolean
> forms. We could likely go this route, but only after auditing all custom
> handlers, I'm afraid.

Well - I've already audited them all once recently.  What's once more...

I'll have a go in due course; I'd definitely prefer to avoid special
casing the positive boolean form in individual handlers.

~Andrew
Jan Beulich March 3, 2022, 11:40 a.m. UTC | #5
On 03.03.2022 12:15, Andrew Cooper wrote:
> On 03/03/2022 11:04, Jan Beulich wrote:
>> On 03.03.2022 11:48, Andrew Cooper wrote:
>>> On 03/03/2022 07:44, Jan Beulich wrote:
>>>> On 02.03.2022 23:11, Andrew Cooper wrote:
>>>>> This makes it behave slightly more like a regular boolean option.
>>>>>
>>>>> Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
>>>> Reviewed-by: Jan Beulich <jbeulich@suse.com>
>>>>
>>>>> Slightly RFC, because there is no easy way of making the opposite "normal
>>>>> boolean" case work for no-vpmu.
>>>> There's nothing to do to make this work afaict: Generic command line
>>>> handling converts "no-<option>" to "<option>=no" for custom params.
>>> Oh - I'd forgotten that, in which case this patch actually wants to be
>>> simply:
>>>
>>> diff --git a/xen/common/kernel.c b/xen/common/kernel.c
>>> index adff2d2c77f3..2cea1da781ac 100644
>>> --- a/xen/common/kernel.c
>>> +++ b/xen/common/kernel.c
>>> @@ -162,6 +162,11 @@ static int parse_params(const char *cmdline, const
>>> struct kernel_param *start,
>>>                      safe_strcpy(opt, "no");
>>>                      optval = opt;
>>>                  }
>>> +                else if ( !*optval )
>>> +                {
>>> +                    safe_strcpy(opt, "1");
>>> +                    optval = opt;
>>> +                }
>>>                  rctmp = param->par.func(optval);
>>>                  break;
>>>              case OPT_IGNORE:
>>>
>>> to turn "option\0" into "option=1", no?
>> Iirc extending this to the positive case was deliberately not done, for
>> the risk of breaking custom handlers not expecting the standard boolean
>> forms. We could likely go this route, but only after auditing all custom
>> handlers, I'm afraid.
> 
> Well - I've already audited them all once recently.  What's once more...

Of course if you did an audit (for this particular property) recently,
that's definitely enough. Feel free to apply my earlier provided R-b
also to this alternative change then.

Jan

> I'll have a go in due course; I'd definitely prefer to avoid special
> casing the positive boolean form in individual handlers.
> 
> ~Andrew
diff mbox series

Patch

diff --git a/xen/arch/x86/cpu/vpmu.c b/xen/arch/x86/cpu/vpmu.c
index 4fedc7c57012..501d4f0af94e 100644
--- a/xen/arch/x86/cpu/vpmu.c
+++ b/xen/arch/x86/cpu/vpmu.c
@@ -66,7 +66,9 @@  static int __init cf_check parse_vpmu_params(const char *s)
         if ( !ss )
             ss = strchr(s, '\0');
 
-        if ( (val = parse_bool(s, ss)) >= 0 )
+        if ( s == ss )
+            opt_vpmu_enabled = true;
+        else if ( (val = parse_bool(s, ss)) >= 0 )
         {
             opt_vpmu_enabled = val;
             if ( !val )