linux/drivers/cpufreq
Srinivas Pandruvada ac4e04d9e3 cpufreq: intel_pstate: Unchecked MSR aceess in legacy mode
When turbo mode is unavailable on a Skylake-X system, executing the
command:

 # echo 1 > /sys/devices/system/cpu/intel_pstate/no_turbo

results in an unchecked MSR access error:

 WRMSR to 0x199 (attempted to write 0x0000000100001300).

This issue was reproduced on an OEM (Original Equipment Manufacturer)
system and is not a common problem across all Skylake-X systems.

This error occurs because the MSR 0x199 Turbo Engage Bit (bit 32) is set
when turbo mode is disabled. The issue arises when intel_pstate fails to
detect that turbo mode is disabled. Here intel_pstate relies on
MSR_IA32_MISC_ENABLE bit 38 to determine the status of turbo mode.
However, on this system, bit 38 is not set even when turbo mode is
disabled.

According to the Intel Software Developer's Manual (SDM), the BIOS sets
this bit during platform initialization to enable or disable
opportunistic processor performance operations. Logically, this bit
should be set in such cases. However, the SDM also specifies that "OS
and applications must use CPUID leaf 06H to detect processors with
opportunistic processor performance operations enabled."

Therefore, in addition to checking MSR_IA32_MISC_ENABLE bit 38, verify
that CPUID.06H:EAX[1] is 0 to accurately determine if turbo mode is
disabled.

Fixes: 4521e1a0ce ("cpufreq: intel_pstate: Reflect current no_turbo state correctly")
Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Cc: All applicable <stable@vger.kernel.org>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2025-04-30 16:27:34 +02:00
..
Kconfig ARM cpufreq updates for 6.14 2025-01-20 12:53:59 +01:00
Kconfig.arm cpufreq: fix compile-test defaults 2025-04-17 13:36:29 +05:30
Kconfig.powerpc cpufreq: ppc_cbe: Remove powerpc Cell driver 2025-02-26 21:15:09 +05:30
Kconfig.x86 cpufreq: Introduce an optional cpuinfo_avg_freq sysfs entry 2025-02-17 18:09:31 +00:00
Makefile cpufreq: ppc_cbe: Remove powerpc Cell driver 2025-02-26 21:15:09 +05:30
acpi-cpufreq.c cpufreq: ACPI: Re-sync CPU boost state on system resume 2025-04-25 18:22:46 +02:00
airoha-cpufreq.c cpufreq: airoha: Add EN7581 CPUFreq SMCCC driver 2025-01-17 09:05:07 +05:30
amd-pstate-trace.c
amd-pstate-trace.h cpufreq/amd-pstate: Move all EPP tracing into *_update_perf and *_set_epp functions 2025-03-06 13:01:25 -06:00
amd-pstate-ut.c cpufreq/amd-pstate: Replace all AMD_CPPC_* macros with masks 2025-03-06 13:01:25 -06:00
amd-pstate.c cpufreq/amd-pstate: Enable ITMT support after initializing core rankings 2025-04-11 12:49:57 -05:00
amd-pstate.h cpufreq/amd-pstate: Stop caching EPP 2025-03-06 13:01:26 -06:00
amd_freq_sensitivity.c
apple-soc-cpufreq.c cpufreq: apple-soc: Fix null-ptr-deref in apple_soc_cpufreq_get_rate() 2025-04-10 10:07:32 +05:30
armada-8k-cpufreq.c cpufreq: Init cpufreq only for present CPUs 2025-03-17 11:29:18 +05:30
armada-37xx-cpufreq.c cpufreq: enable 1200Mhz clock speed for armada-37xx 2025-02-19 11:21:46 +05:30
bmips-cpufreq.c cpufreq: bmips: Stop setting cpufreq_driver->attr field 2025-02-07 09:45:11 +05:30
brcmstb-avs-cpufreq.c cpufreq: brcmstb: Stop setting common freq attributes 2025-02-07 09:45:11 +05:30
cppc_cpufreq.c cpufreq: cppc: Fix invalid return value in .get() callback 2025-04-16 13:37:44 +05:30
cpufreq-dt-platdev.c cpufreq: Add SM8650 to cpufreq-dt-platdev blocklist 2025-04-08 11:36:32 +05:30
cpufreq-dt.c cpufreq: Init cpufreq only for present CPUs 2025-03-17 11:29:18 +05:30
cpufreq-dt.h
cpufreq-nforce2.c cpufreq: nforce2: Remove empty exit() callback 2024-07-05 11:41:30 +05:30
cpufreq.c cpufreq: Fix setting policy limits when frequency tables are used 2025-04-28 14:36:41 +02:00
cpufreq_conservative.c
cpufreq_governor.c cpufreq: governor: Fix negative 'idle_time' handling in dbs_update() 2025-02-20 20:27:19 +01:00
cpufreq_governor.h
cpufreq_governor_attr_set.c
cpufreq_ondemand.c cpufreq: Fix setting policy limits when frequency tables are used 2025-04-28 14:36:41 +02:00
cpufreq_ondemand.h
cpufreq_performance.c
cpufreq_powersave.c
cpufreq_stats.c
cpufreq_userspace.c
davinci-cpufreq.c cpufreq: davinci: Stop setting cpufreq_driver->attr field 2025-02-07 09:45:12 +05:30
e_powersaver.c cpufreq: e_powersaver: Stop setting cpufreq_driver->attr field 2025-02-07 09:45:12 +05:30
elanfreq.c cpufreq: elanfreq: Stop setting cpufreq_driver->attr field 2025-02-07 09:45:12 +05:30
freq_table.c cpufreq: Fix setting policy limits when frequency tables are used 2025-04-28 14:36:41 +02:00
gx-suspmod.c
highbank-cpufreq.c
imx-cpufreq-dt.c cpufreq: Switch back to struct platform_driver::remove() 2024-10-28 12:24:39 +01:00
imx6q-cpufreq.c cpufreq: imx6q: Stop setting cpufreq_driver->attr field 2025-02-07 09:45:12 +05:30
intel_pstate.c cpufreq: intel_pstate: Unchecked MSR aceess in legacy mode 2025-04-30 16:27:34 +02:00
kirkwood-cpufreq.c cpufreq: kirkwood: Stop setting cpufreq_driver->attr field 2025-02-07 09:45:12 +05:30
longhaul.c cpufreq: longhaul: Stop setting cpufreq_driver->attr field 2025-02-07 09:45:12 +05:30
longhaul.h
longrun.c
loongson2_cpufreq.c cpufreq: loongson: Stop setting cpufreq_driver->attr field 2025-02-07 09:45:12 +05:30
loongson3_cpufreq.c cpufreq: loongson: Set .set_boost directly 2025-02-07 09:45:15 +05:30
mediatek-cpufreq-hw.c cpufreq: Init cpufreq only for present CPUs 2025-03-17 11:29:18 +05:30
mediatek-cpufreq.c cpufreq: Init cpufreq only for present CPUs 2025-03-17 11:29:18 +05:30
mvebu-cpufreq.c cpufreq: Init cpufreq only for present CPUs 2025-03-17 11:29:18 +05:30
omap-cpufreq.c cpufreq: omap: Stop setting cpufreq_driver->attr field 2025-02-07 09:45:12 +05:30
p4-clockmod.c cpufreq: p4: Stop setting cpufreq_driver->attr field 2025-02-07 09:45:12 +05:30
pasemi-cpufreq.c cpufreq: pasemi: Stop setting cpufreq_driver->attr field 2025-02-07 09:45:12 +05:30
pcc-cpufreq.c cpufreq: Switch back to struct platform_driver::remove() 2024-10-28 12:24:39 +01:00
pmac32-cpufreq.c cpufreq: pmac: Stop setting cpufreq_driver->attr field 2025-02-07 09:45:13 +05:30
pmac64-cpufreq.c cpufreq: pmac: Stop setting cpufreq_driver->attr field 2025-02-07 09:45:13 +05:30
powernow-k6.c cpufreq: powernow: Stop setting cpufreq_driver->attr field 2025-02-07 09:45:13 +05:30
powernow-k7.c cpufreq: powernow: Stop setting cpufreq_driver->attr field 2025-02-07 09:45:13 +05:30
powernow-k7.h
powernow-k8.c cpufreq: powernow: Stop setting cpufreq_driver->attr field 2025-02-07 09:45:13 +05:30
powernow-k8.h
powernv-cpufreq.c treewide: Switch/rename to timer_delete[_sync]() 2025-04-05 10:30:12 +02:00
pxa2xx-cpufreq.c
pxa3xx-cpufreq.c
qcom-cpufreq-hw.c cpufreq: Init cpufreq only for present CPUs 2025-03-17 11:29:18 +05:30
qcom-cpufreq-nvmem.c cpufreq: Init cpufreq only for present CPUs 2025-03-17 11:29:18 +05:30
qoriq-cpufreq.c cpufreq: qoriq: Stop setting cpufreq_driver->attr field 2025-02-07 09:45:13 +05:30
raspberrypi-cpufreq.c cpufreq: Switch back to struct platform_driver::remove() 2024-10-28 12:24:39 +01:00
s3c64xx-cpufreq.c cpufreq: s3c64xx: Fix compilation warning 2025-01-23 20:47:32 +01:00
s5pv210-cpufreq.c
sa1110-cpufreq.c
sc520_freq.c cpufreq: sc520_freq: Stop setting cpufreq_driver->attr field 2025-02-07 09:45:13 +05:30
scmi-cpufreq.c cpufreq: scmi: Fix null-ptr-deref in scmi_cpufreq_get_rate() 2025-04-10 10:08:47 +05:30
scpi-cpufreq.c cpufreq: scpi: Fix null-ptr-deref in scpi_cpufreq_get_rate() 2025-04-10 10:09:03 +05:30
sh-cpufreq.c cpufreq: sh: Stop setting cpufreq_driver->attr field 2025-02-07 09:45:13 +05:30
sparc-us2e-cpufreq.c cpufreq: sparc: change kzalloc to kcalloc 2024-12-24 09:48:58 +05:30
sparc-us3-cpufreq.c cpufreq: sparc: change kzalloc to kcalloc 2024-12-24 09:48:58 +05:30
spear-cpufreq.c cpufreq: spear: Stop setting cpufreq_driver->attr field 2025-02-07 09:45:13 +05:30
speedstep-centrino.c cpufreq: speedstep: Stop setting cpufreq_driver->attr field 2025-02-07 09:45:14 +05:30
speedstep-ich.c cpufreq: speedstep: Stop setting cpufreq_driver->attr field 2025-02-07 09:45:14 +05:30
speedstep-lib.c
speedstep-lib.h
speedstep-smi.c cpufreq: speedstep: Stop setting cpufreq_driver->attr field 2025-02-07 09:45:14 +05:30
sti-cpufreq.c cpufreq: Use of_property_present() 2024-08-07 12:11:45 +05:30
sun50i-cpufreq-nvmem.c cpufreq: sun50i: prevent out-of-bounds access 2025-04-08 11:35:30 +05:30
tegra20-cpufreq.c
tegra124-cpufreq.c cpupfreq: tegra124: eliminate uses of of_node_put() 2024-04-19 11:55:44 +05:30
tegra186-cpufreq.c cpufreq: tegra186: Share policy per cluster 2025-03-10 11:20:05 +05:30
tegra194-cpufreq.c cpufreq: tegra: Stop setting cpufreq_driver->attr field 2025-02-07 09:45:14 +05:30
ti-cpufreq.c cpufreq: ti-cpufreq: Remove revision offsets in AM62 family 2024-10-10 12:54:42 +05:30
vexpress-spc-cpufreq.c cpufreq: vexpress: Stop setting cpufreq_driver->attr field 2025-02-07 09:45:14 +05:30
virtual-cpufreq.c cpufreq: Init cpufreq only for present CPUs 2025-03-17 11:29:18 +05:30