[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: Monday, February 17, 2025 6:34 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 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"). I misunderstood before, sorry What is the appropriate behavior when user passes an option to Xen, like "cpufreq=amd-cppc,hwp,xen" ? FWIT, amd-cppc and hwp are incompatible options. Send the error info to tell them you shall choose either of them, amd-cppc, or hwp, or xen? If user wants to add fall back scheme, when amd-cppc is hardware unavailable, we fall back to xen. user shall use ";", not "," to add, like "cpufreq=amd-cppc;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 |