mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 17:47:41 +02:00
cpufreq: cppc: mask Desired_Excursion when autonomous selection is enabled
According to the ACPI 6.6 specification, the Desired_Excursion field is not utilized when autonomous selection is enabled. In this mode, the bit is architecturally ignored and does not carry meaningful information. Currently, the kernel exposes the raw Performance Limited register value to userspace through the cpufreq sysfs interface. This may lead to misinterpretation, as userspace may assume Desired_Excursion is valid even when autonomous selection is active. To provide a stable and semantically correct ABI, mask out the Desired_Excursion bit when autonomous selection is enabled, so that userspace does not observe undefined or misleading values. Writes are left unchanged, as the field is architecturally ignored in this mode and write attempts are harmless. Signed-off-by: Xueqin Luo <luoxueqin@kylinos.cn> Reviewed-by: Pierre Gondois <pierre.gondois@arm.com> Reviewed-by: Sumit Gupta <sumitg@nvidia.com> Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
This commit is contained in:
parent
bcb8889c49
commit
9a303892ac
|
|
@ -982,7 +982,34 @@ store_energy_performance_preference_val(struct cpufreq_policy *policy,
|
|||
return count;
|
||||
}
|
||||
|
||||
CPPC_CPUFREQ_ATTR_RW_U64(perf_limited, cppc_get_perf_limited,
|
||||
static int cppc_get_perf_limited_filtered(int cpu, u64 *perf_limited)
|
||||
{
|
||||
struct cpufreq_policy *policy;
|
||||
struct cppc_cpudata *cpu_data;
|
||||
int ret;
|
||||
|
||||
ret = cppc_get_perf_limited(cpu, perf_limited);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
policy = cpufreq_cpu_get_raw(cpu);
|
||||
if (!policy)
|
||||
return -EINVAL;
|
||||
|
||||
cpu_data = policy->driver_data;
|
||||
|
||||
/*
|
||||
* Desired Excursion is ignored when autonomous selection is
|
||||
* enabled. Clear the bit to avoid exposing meaningless state
|
||||
* to userspace.
|
||||
*/
|
||||
if (cpu_data && cpu_data->perf_ctrls.auto_sel)
|
||||
*perf_limited &= ~CPPC_PERF_LIMITED_DESIRED_EXCURSION;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
CPPC_CPUFREQ_ATTR_RW_U64(perf_limited, cppc_get_perf_limited_filtered,
|
||||
cppc_set_perf_limited)
|
||||
|
||||
cpufreq_freq_attr_ro(freqdomain_cpus);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user