|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v2 03/11] xen/x86: introduce "cpufreq=amd-cppc" xen cmdline
On 17.02.2025 11:17, Penny, Zheng wrote:
> [AMD Official Use Only - AMD Internal Distribution Only]
>
> Hi,
>
>> -----Original Message-----
>> From: Jan Beulich <jbeulich@xxxxxxxx>
>> Sent: Tuesday, February 11, 2025 8:09 PM
>> To: Penny, Zheng <penny.zheng@xxxxxxx>
>> Cc: Huang, Ray <Ray.Huang@xxxxxxx>; Andryuk, Jason
>> <Jason.Andryuk@xxxxxxx>; Andrew Cooper <andrew.cooper3@xxxxxxxxxx>;
>> Anthony PERARD <anthony.perard@xxxxxxxxxx>; Orzel, Michal
>> <Michal.Orzel@xxxxxxx>; Julien Grall <julien@xxxxxxx>; Roger Pau Monné
>> <roger.pau@xxxxxxxxxx>; Stefano Stabellini <sstabellini@xxxxxxxxxx>; xen-
>> devel@xxxxxxxxxxxxxxxxxxxx
>> Subject: Re: [PATCH v2 03/11] xen/x86: introduce "cpufreq=amd-cppc" xen
>> cmdline
>>
>> On 06.02.2025 09:32, Penny Zheng wrote:
>>> --- a/xen/arch/x86/acpi/cpufreq/cpufreq.c
>>> +++ b/xen/arch/x86/acpi/cpufreq/cpufreq.c
>>> @@ -148,6 +148,9 @@ static int __init cf_check cpufreq_driver_init(void)
>>> case CPUFREQ_none:
>>> ret = 0;
>>> break;
>>> + default:
>>> + printk(XENLOG_WARNING "Unsupported cpufreq driver
>>> + for vendor Intel\n");
>>
>> Same here. The string along overruning line length is fine. But this cal
>> then still be
>> wrapped as
>>
>> printk(XENLOG_WARNING
>> "Unsupported cpufreq driver for vendor Intel\n");
>>
>> to respect the line length limit as much as possible.
>>
>>> @@ -131,6 +131,15 @@ static int __init cf_check setup_cpufreq_option(const
>> char *str)
>>> if ( arg[0] && arg[1] )
>>> ret = hwp_cmdline_parse(arg + 1, end);
>>> }
>>> + else if ( choice < 0 && !cmdline_strcmp(str, "amd-cppc") )
>>> + {
>>> + xen_processor_pmbits |= XEN_PROCESSOR_PM_CPPC;
>>> + cpufreq_controller = FREQCTL_xen;
>>> + cpufreq_xen_opts[cpufreq_xen_cnt++] = CPUFREQ_amd_cppc;
>>
>> While apparently again a pre-existing problem, the risk of array overrun
>> will become
>> more manifest with this addition: People may plausibly want to pass a
>> universal
>> option to Xen on all their instances:
>> "cpufreq=hwp,amd-cppc,xen". I think this wants taking care of in a prereq
>> patch, i.e.
>> before you further extend it. Here you will then further want to bump
>> cpufreq_xen_opts[]'es dimension, to account for the now sensible three-fold
>> option.
>>
>
> Correct me if I'm wrong, We are missing dealing the scenario which looks like
> the following:
> "cpufreq=amd-cppc,hwp,verbose".
Not so much this one (can it even overflow). It's "cpufreq=amd-cppc,hwp,xen"
that I'm concerned about (or, prior to your change something redundant like
"cpufreq=hwp,hwp,xen").
> `verbose` is an overrun flag when parsing amd-cppc.
> I've written the following fix:
> ```
> diff --git a/xen/drivers/cpufreq/cpufreq.c b/xen/drivers/cpufreq/cpufreq.c
> index 860ae32c8a..0fe633d4bc 100644
> --- a/xen/drivers/cpufreq/cpufreq.c
> +++ b/xen/drivers/cpufreq/cpufreq.c
> @@ -71,6 +71,22 @@ unsigned int __initdata cpufreq_xen_cnt = 1;
>
> static int __init cpufreq_cmdline_parse(const char *s, const char *e);
>
> +static int __initdata nr_cpufreq_avail_opts = 3;
> +static const char * __initdata cpufreq_avail_opts[nr_cpufreq_avail_opts] = {
> "xen", "hwp", "amd-cppc" };
Does this even build? If it does, it likely won't be what you mean. You
want a constant array dimension (which could actually be omitted, given
the initializer), as ...
> +static void __init cpufreq_cmdline_trim(const char *s)
> +{
> + unsigned int i = 0;
> +
> + do
> + {
> + if ( strncmp(s, cpufreq_avail_opts[i], strlen(cpufreq_avail_opts[i]
> - 1) == 0 )
> + return false;
> + } while ( ++i < nr_cpufreq_avail_opts )
... you can use ARRAY_SIZE() here. (Style note: "do {" goes on a single line.)
> +
> + return true;
> +}
> +
> static int __init cf_check setup_cpufreq_option(const char *str)
> {
> const char *arg = strpbrk(str, ",:;");
> @@ -118,7 +134,7 @@ static int __init cf_check setup_cpufreq_option(const
> char *str)
> cpufreq_controller = FREQCTL_xen;
> cpufreq_xen_opts[cpufreq_xen_cnt++] = CPUFREQ_xen;
> ret = 0;
> - if ( arg[0] && arg[1] )
> + if ( arg[0] && arg[1] && cpufreq_cmdline_trim(arg + 1) )
> ret = cpufreq_cmdline_parse(arg + 1, end);
> }
> else if ( IS_ENABLED(CONFIG_INTEL) && choice < 0 &&
> ```
For the rest of this, I guess I'd prefer to see this in context. Also with
regard to the helper function's name.
Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |