* [PATCH v8 7/8] xen/cpufreq: bypass governor-related para for amd-cppc-epp
@ 2025-08-28 10:05 Penny Zheng
2025-08-28 10:58 ` Jan Beulich
2025-08-28 13:05 ` Anthony PERARD
0 siblings, 2 replies; 3+ messages in thread
From: Penny Zheng @ 2025-08-28 10:05 UTC (permalink / raw)
To: xen-devel; +Cc: ray.huang, Penny Zheng, Anthony PERARD, Jan Beulich
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>
---
v3 -> v4:
- Include validation check fix here
---
v4 -> v5:
- validation check has beem moved to where XEN_PROCESSOR_PM_CPPC and
XEN_CPPC_INIT have been firstly introduced
- adding "cpufreq_driver.setpolicy == NULL" check to exclude governor-related
para for amd-cppc-epp driver in get/set_cpufreq_para()
---
v5 -> v6:
- add helper cpufreq_is_governorless() to tell whether cpufreq driver is
governor-less
---
v6 -> v7:
- change "hw_auto" to "is_goverless"
- complement comment
- wrap around with PM_OP to avoid violating Misra rule 2.1
---
v7 -> v8:
- change "is_goverless" to "is_governor_less"
- make cpufreq_is_governorless() inline function
---
tools/misc/xenpm.c | 10 +++++++---
xen/drivers/acpi/pm-op.c | 4 ++--
xen/include/acpi/cpufreq/cpufreq.h | 12 ++++++++++++
3 files changed, 21 insertions(+), 5 deletions(-)
diff --git a/tools/misc/xenpm.c b/tools/misc/xenpm.c
index e83dd0d80c..893a0afe11 100644
--- a/tools/misc/xenpm.c
+++ b/tools/misc/xenpm.c
@@ -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",
diff --git a/xen/drivers/acpi/pm-op.c b/xen/drivers/acpi/pm-op.c
index 19aedf6b0b..371deaf678 100644
--- a/xen/drivers/acpi/pm-op.c
+++ b/xen/drivers/acpi/pm-op.c
@@ -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 )
diff --git a/xen/include/acpi/cpufreq/cpufreq.h b/xen/include/acpi/cpufreq/cpufreq.h
index 9ef7c4683a..7caeae26cf 100644
--- a/xen/include/acpi/cpufreq/cpufreq.h
+++ b/xen/include/acpi/cpufreq/cpufreq.h
@@ -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 cpuid)
+{
+ return processor_pminfo[cpuid]->init && (hwp_active() ||
+ cpufreq_driver.setpolicy);
+}
+
#endif /* __XEN_CPUFREQ_PM_H__ */
--
2.34.1
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH v8 7/8] xen/cpufreq: bypass governor-related para for amd-cppc-epp
2025-08-28 10:05 [PATCH v8 7/8] xen/cpufreq: bypass governor-related para for amd-cppc-epp Penny Zheng
@ 2025-08-28 10:58 ` Jan Beulich
2025-08-28 13:05 ` Anthony PERARD
1 sibling, 0 replies; 3+ messages in thread
From: Jan Beulich @ 2025-08-28 10:58 UTC (permalink / raw)
To: Penny Zheng; +Cc: ray.huang, Anthony PERARD, xen-devel
On 28.08.2025 12:05, Penny Zheng wrote:
> 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>
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH v8 7/8] xen/cpufreq: bypass governor-related para for amd-cppc-epp
2025-08-28 10:05 [PATCH v8 7/8] xen/cpufreq: bypass governor-related para for amd-cppc-epp Penny Zheng
2025-08-28 10:58 ` Jan Beulich
@ 2025-08-28 13:05 ` Anthony PERARD
1 sibling, 0 replies; 3+ messages in thread
From: Anthony PERARD @ 2025-08-28 13:05 UTC (permalink / raw)
To: Penny Zheng; +Cc: xen-devel, ray.huang, Jan Beulich
On Thu, Aug 28, 2025 at 06:05:34PM +0800, Penny Zheng wrote:
> 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: Anthony PERARD <anthony.perard@vates.tech>
Thanks,
--
| Vates
XCP-ng & Xen Orchestra - Vates solutions
web: https://vates.tech
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2025-08-28 13:05 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-08-28 10:05 [PATCH v8 7/8] xen/cpufreq: bypass governor-related para for amd-cppc-epp Penny Zheng
2025-08-28 10:58 ` Jan Beulich
2025-08-28 13:05 ` Anthony PERARD
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.