Message ID | 20240531230004.1334127-1-srinivas.pandruvada@linux.intel.com |
---|---|
State | Accepted |
Commit | 1e24c31351787e24b7eebe84866bd55fd62a0aef |
Headers | show |
Series | cpufreq: intel_pstate: Fix unchecked HWP MSR access | expand |
On Sat, Jun 1, 2024 at 1:00 AM Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com> wrote: > > Fix unchecked MSR access error for processors with no HWP support. On > such processors, maximum frequency can be changed by the system firmware > using ACPI event ACPI_PROCESSOR_NOTIFY_HIGEST_PERF_CHANGED. This results > in accessing HWP MSR 0x771. > > Call Trace: > <TASK> > generic_exec_single+0x58/0x120 > smp_call_function_single+0xbf/0x110 > rdmsrl_on_cpu+0x46/0x60 > intel_pstate_get_hwp_cap+0x1b/0x70 > intel_pstate_update_limits+0x2a/0x60 > acpi_processor_notify+0xb7/0x140 > acpi_ev_notify_dispatch+0x3b/0x60 > > HWP MSR 0x771 can be only read on a CPU which supports HWP and enabled. > Hence intel_pstate_get_hwp_cap() can only be called when hwp_active is > true. > > Reported-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> > Closes: https://lore.kernel.org/linux-pm/20240529155740.Hq2Hw7be@linutronix.de/ > Fixes: e8217b4bece3 ("cpufreq: intel_pstate: Update the maximum CPU frequency consistently") > Tested-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> > Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com> > --- > drivers/cpufreq/intel_pstate.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c > index 4b986c044741..65d3f79104bd 100644 > --- a/drivers/cpufreq/intel_pstate.c > +++ b/drivers/cpufreq/intel_pstate.c > @@ -1153,7 +1153,8 @@ static void intel_pstate_update_policies(void) > static void __intel_pstate_update_max_freq(struct cpudata *cpudata, > struct cpufreq_policy *policy) > { > - intel_pstate_get_hwp_cap(cpudata); > + if (hwp_active) > + intel_pstate_get_hwp_cap(cpudata); > > policy->cpuinfo.max_freq = READ_ONCE(global.no_turbo) ? > cpudata->pstate.max_freq : cpudata->pstate.turbo_freq; > -- Applied as 6.10-rc material, thanks!
diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c index 4b986c044741..65d3f79104bd 100644 --- a/drivers/cpufreq/intel_pstate.c +++ b/drivers/cpufreq/intel_pstate.c @@ -1153,7 +1153,8 @@ static void intel_pstate_update_policies(void) static void __intel_pstate_update_max_freq(struct cpudata *cpudata, struct cpufreq_policy *policy) { - intel_pstate_get_hwp_cap(cpudata); + if (hwp_active) + intel_pstate_get_hwp_cap(cpudata); policy->cpuinfo.max_freq = READ_ONCE(global.no_turbo) ? cpudata->pstate.max_freq : cpudata->pstate.turbo_freq;