[Public] > -----Original Message----- > From: Jan Beulich <jbeul...@suse.com> > Sent: Thursday, August 28, 2025 3:09 PM > To: Penny, Zheng <penny.zh...@amd.com> > Cc: Huang, Ray <ray.hu...@amd.com>; Anthony PERARD > <anthony.per...@vates.tech>; Andrew Cooper <andrew.coop...@citrix.com>; > Orzel, Michal <michal.or...@amd.com>; Julien Grall <jul...@xen.org>; Roger Pau > Monné <roger....@citrix.com>; Stefano Stabellini <sstabell...@kernel.org>; > xen- > de...@lists.xenproject.org > Subject: Re: [PATCH v7 13/13] xen/cpufreq: Adapt SET/GET_CPUFREQ_CPPC > xen_sysctl_pm_op for amd-cppc driver > > On 28.08.2025 08:54, Penny, Zheng wrote: > > [Public] > > > >> -----Original Message----- > >> From: Jan Beulich <jbeul...@suse.com> > >> Sent: Thursday, August 28, 2025 2:38 PM > >> To: Penny, Zheng <penny.zh...@amd.com> > >> Cc: Huang, Ray <ray.hu...@amd.com>; Anthony PERARD > >> <anthony.per...@vates.tech>; Andrew Cooper > >> <andrew.coop...@citrix.com>; Orzel, Michal <michal.or...@amd.com>; > >> Julien Grall <jul...@xen.org>; Roger Pau Monné > >> <roger....@citrix.com>; Stefano Stabellini <sstabell...@kernel.org>; > >> xen- de...@lists.xenproject.org > >> Subject: Re: [PATCH v7 13/13] xen/cpufreq: Adapt > SET/GET_CPUFREQ_CPPC > >> xen_sysctl_pm_op for amd-cppc driver > >> > >> On 28.08.2025 08:35, Jan Beulich wrote: > >>> On 28.08.2025 06:06, Penny, Zheng wrote: > >>>>> -----Original Message----- > >>>>> From: Jan Beulich <jbeul...@suse.com> > >>>>> Sent: Tuesday, August 26, 2025 12:03 AM > >>>>> > >>>>> On 22.08.2025 12:52, Penny Zheng wrote: > >>>>>> --- a/xen/include/public/sysctl.h > >>>>>> +++ b/xen/include/public/sysctl.h > >>>>>> @@ -336,8 +336,14 @@ struct xen_ondemand { > >>>>>> uint32_t up_threshold; > >>>>>> }; > >>>>>> > >>>>>> +#define CPUFREQ_POLICY_UNKNOWN 0 > >>>>>> +#define CPUFREQ_POLICY_POWERSAVE 1 > >>>>>> +#define CPUFREQ_POLICY_PERFORMANCE 2 > >>>>>> +#define CPUFREQ_POLICY_ONDEMAND 3 > >>>>> > >>>>> Without XEN_ prefixes they shouldn't appear in a public header. > >>>>> But do we need ... > >>>>> > >>>>>> struct xen_get_cppc_para { > >>>>>> /* OUT */ > >>>>>> + uint32_t policy; /* CPUFREQ_POLICY_xxx */ > >>>>> > >>>>> ... the new field at all? Can't you synthesize the > >>>>> kind-of-governor into struct xen_get_cpufreq_para's respective > >>>>> field? You invoke both sub-ops from xenpm now anyway ... > >>>>> > >>>> > >>>> Maybe I could borrow governor field to indicate policy info, like > >>>> the following in > >> print_cpufreq_para(), then we don't need to add the new filed "policy" > >>>> ``` > >>>> + /* Translate governor info to policy info in CPPC active mode */ > >>>> + if ( is_cppc_active ) > >>>> + { > >>>> + if ( !strncmp(p_cpufreq->u.s.scaling_governor, > >>>> + "ondemand", CPUFREQ_NAME_LEN) ) > >>>> + printf("cppc policy : ondemand\n"); > >>>> + else if ( !strncmp(p_cpufreq->u.s.scaling_governor, > >>>> + "performance", CPUFREQ_NAME_LEN) ) > >>>> + printf("cppc policy : performance\n"); > >>>> + > >>>> + else if ( !strncmp(p_cpufreq->u.s.scaling_governor, > >>>> + "powersave", CPUFREQ_NAME_LEN) ) > >>>> + printf("cppc policy : powersave\n"); > >>>> + else > >>>> + printf("cppc policy : unknown\n"); > >>>> + } > >>>> + > >>>> ``` > >>> > >>> Something like this is what I was thinking of, yes. > >> > >> Albeit - why the complicated if/else sequence? Why not simply print > >> the field the hypercall returned? > > > > userspace governor doesn't have according policy. I could simplify it > > to ``` > > if ( !strncmp(p_cpufreq->u.s.scaling_governor, > > "userspace", CPUFREQ_NAME_LEN) ) > > printf("policy : unknown\n"); > > else > > printf("policy : %s\n", > > p_cpufreq->u.s.scaling_governor); ``` > > But the hypervisor shouldn't report back "userspace" when the CPPC driver is > in > use. ANd I think the tool is okay to trust the hypervisor.
True, we shall make sure governor is set properly in hypervisor side even in cppc mode > > Jan