|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] RE: [PATCH v4 04/15] xen/cpufreq: refactor cmdline "cpufreq=xxx"
[Public]
Hi,
> -----Original Message-----
> From: Jan Beulich <jbeulich@xxxxxxxx>
> Sent: Monday, May 12, 2025 11:58 PM
> To: Penny, Zheng <penny.zheng@xxxxxxx>
> Cc: Huang, Ray <Ray.Huang@xxxxxxx>; xen-devel@xxxxxxxxxxxxxxxxxxxx
> Subject: Re: [PATCH v4 04/15] xen/cpufreq: refactor cmdline "cpufreq=xxx"
>
> On 07.05.2025 05:18, Penny, Zheng wrote:
> > [Public]
> >
> > Hi,
> >
> >> -----Original Message-----
> >> From: Jan Beulich <jbeulich@xxxxxxxx>
> >> Sent: Tuesday, April 29, 2025 7:47 PM
> >> To: Penny, Zheng <penny.zheng@xxxxxxx>
> >> Cc: Huang, Ray <Ray.Huang@xxxxxxx>; xen-devel@xxxxxxxxxxxxxxxxxxxx
> >> Subject: Re: [PATCH v4 04/15] xen/cpufreq: refactor cmdline "cpufreq=xxx"
> >>
> >> On 29.04.2025 12:36, Jan Beulich wrote:
> >>> On 14.04.2025 09:40, Penny Zheng wrote:
> >>>> --- a/xen/drivers/cpufreq/cpufreq.c
> >>>> +++ b/xen/drivers/cpufreq/cpufreq.c
> >>>> @@ -71,6 +71,49 @@ unsigned int __initdata cpufreq_xen_cnt = 1;
> >>>>
> >>>> static int __init cpufreq_cmdline_parse(const char *s, const char
> >>>> *e);
> >>>>
> >>>> +static bool __init cpufreq_opts_contain(enum cpufreq_xen_opt
> >>>> +option) {
> >>>> + unsigned int count = cpufreq_xen_cnt;
> >>>> +
> >>>> + while ( count )
> >>>> + {
> >>>> + if ( cpufreq_xen_opts[--count] == option )
> >>>> + return true;
> >>>> + }
> >>>> +
> >>>> + return false;
> >>>> +}
> >>>> +
> >>>> +static int __init handle_cpufreq_cmdline(enum cpufreq_xen_opt
> >>>> +option) {
> >>>> + int ret = 0;
> >>>> +
> >>>> + if ( cpufreq_opts_contain(option) )
> >>>> + {
> >>>> + const char *cpufreq_opts_str[] = { "CPUFREQ_xen",
> >>>> + "CPUFREQ_hwp" };
> >>>
> >>> const char *const __initconstrel cpufreq_opts_str[] = {
> >>> "CPUFREQ_xen", "CPUFREQ_hwp" };
> >>>
> >>> (line wrapped suitably, of course) Or maybe even better
> >>>
> >>> const char __initconst cpufreq_opts_str[][12] = {
> >>> "CPUFREQ_xen", "CPUFREQ_hwp" };
> >>>
> >>> for the string literals to also end up in .init.rodata.
> >>
> >> Actually, it didn't even occur to me that there might be a "static"
> >> missing here,
> too.
> >
> > Sorry, I may need more explanation, what is the "static" missing you are
> > referring?
>
> In your code cpufreq_opts_str[] is an automatic variable, which the compiler
> needs
> to emit code for in order to instantiate it on the stack. This can be avoided
> if you
> make the array a static variable, as then all construction occurs at build
> time.
>
> >> Plus I'm missing any arrangement for the array slots to remain in
> >> sync with the corresponding enumerators. With that ...
> >>
> >
> > Thanks for the detailed instructions, learned and I'll change it to
> > const char __initconst cpufreq_opts_str[][4] = { "xen", "hwp"
> > }; And for in sync with the corresponding enumerators, maybe we shall add
> comment here,
> > /* The order of cpufreq string literal must be in sync with
> > the order in "enum cpufreq_xen_opt" */
>
> Instead of a comment I has rather hoping for some use of dedicated array slot
> initializers.
Understood. I'll use "CPUFREQ_xxx" as array slot index.
static const char __initconst cpufreq_opts_str[][5] = {
[CPUFREQ_none] = "none",
[CPUFREQ_xen] = "xen",
[CPUFREQ_hwp] = "hwp",
};
>
> Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |