mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
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:
1 parent
e3305043b2
commit
494de59f04
3 files changed
+21
-5
No files matched your search
+7
-3
@@ -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",
|
||||
|
||||
@@ -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 )
|
||||
|
||||
@@ -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__ */
|
||||