xen/cpufreq: bypass governor-related para for amd-cppc-epp

HWP and amd-cppc-epp are both governor-less driver, so we introduce
"is_governor_less" flag and cpufreq_is_governorless() to help bypass
governor-related info on dealing with cpufreq para.

Signed-off-by: Penny Zheng <Penny.Zheng@amd.com>
Acked-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Anthony PERARD <anthony.perard@vates.tech>
This commit is contained in:
Penny Zheng authored and Jan Beulich committed 2025-09-25 10:21:31 +02:00
1 parent e3305043b2
commit 494de59f04
3 files changed
+21 -5

No files matched your search

+7 -3
View File
@@ -832,9 +832,13 @@ static void print_cppc_para(unsigned int cpuid,
/* print out parameters about cpu frequency */
static void print_cpufreq_para(int cpuid, struct xc_get_cpufreq_para *p_cpufreq)
{
bool hwp = strcmp(p_cpufreq->scaling_driver, XEN_HWP_DRIVER_NAME) == 0;
bool is_governor_less = false;
int i;
if ( !strcmp(p_cpufreq->scaling_driver, XEN_HWP_DRIVER_NAME) ||
!strcmp(p_cpufreq->scaling_driver, XEN_AMD_CPPC_EPP_DRIVER_NAME) )
is_governor_less = true;
printf("cpu id : %d\n", cpuid);
printf("affected_cpus :");
@@ -842,7 +846,7 @@ static void print_cpufreq_para(int cpuid, struct xc_get_cpufreq_para *p_cpufreq)
printf(" %d", p_cpufreq->affected_cpus[i]);
printf("\n");
if ( hwp )
if ( is_governor_less )
printf("cpuinfo frequency : base [%"PRIu32"] max [%"PRIu32"]\n",
p_cpufreq->cpuinfo_min_freq,
p_cpufreq->cpuinfo_max_freq);
@@ -854,7 +858,7 @@ static void print_cpufreq_para(int cpuid, struct xc_get_cpufreq_para *p_cpufreq)
printf("scaling_driver : %s\n", p_cpufreq->scaling_driver);
if ( !hwp )
if ( !is_governor_less )
{
if ( p_cpufreq->gov_num )
printf("scaling_avail_gov : %s\n",
+2 -2
View File
@@ -154,7 +154,7 @@ static int get_cpufreq_para(struct xen_sysctl_pm_op *op)
else
strlcpy(op->u.get_para.scaling_driver, "Unknown", CPUFREQ_NAME_LEN);
if ( !hwp_active() )
if ( !cpufreq_is_governorless(op->cpuid) )
{
if ( !(scaling_available_governors =
xzalloc_array(char, gov_num * CPUFREQ_NAME_LEN)) )
@@ -240,7 +240,7 @@ static int set_cpufreq_para(struct xen_sysctl_pm_op *op)
if ( !policy || !policy->governor )
return -EINVAL;
if ( hwp_active() )
if ( cpufreq_is_governorless(op->cpuid) )
return -EOPNOTSUPP;
switch( op->u.set_para.ctrl_type )
+12
View File
@@ -294,4 +294,16 @@ int acpi_cpufreq_register(void);
int amd_cppc_cmdline_parse(const char *s, const char *e);
int amd_cppc_register_driver(void);
/*
* Governor-less cpufreq driver indicates the driver doesn't rely on Xen
* governor to do performance tuning, mostly it has hardware built-in
* algorithm to calculate runtime workload and adjust cores frequency
* automatically, like Intel HWP, or CPPC in AMD.
*/
static inline bool cpufreq_is_governorless(unsigned int cpu)
{
return processor_pminfo[cpu]->init && (hwp_active() ||
cpufreq_driver.setpolicy);
}
#endif /* __XEN_CPUFREQ_PM_H__ */
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.