|
[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
[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". `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" };
+
+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 )
+
+ 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 &&
```
>
> Jan
Many thanks,
Penny
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |