linux/drivers/cpufreq
Richa Bharti b03136582a cpufreq: intel_pstate: Check IDA only before MSR_IA32_PERF_CTL writes
[ Upstream commit 4b747cc628 ]

Commit ac4e04d9e3 ("cpufreq: intel_pstate: Unchecked MSR aceess in
legacy mode") introduced a check for feature X86_FEATURE_IDA to verify
turbo mode support. Although this is the correct way to check for turbo
mode support, it causes issues on some platforms that disable turbo
during OS boot, but enable it later [1]. Before adding this feature
check, users were able to get turbo mode frequencies by writing 0 to
/sys/devices/system/cpu/intel_pstate/no_turbo post-boot.

To restore the old behavior on the affected systems while still
addressing the unchecked MSR issue on some Skylake-X systems, check
X86_FEATURE_IDA only immediately before updates of MSR_IA32_PERF_CTL
that may involve setting the Turbo Engage Bit (bit 32).

Fixes: ac4e04d9e3 ("cpufreq: intel_pstate: Unchecked MSR aceess in legacy mode")
Reported-by: Aaron Rainbolt <arainbolt@kfocus.org>
Closes: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/2122531 [1]
Tested-by: Aaron Rainbolt <arainbolt@kfocus.org>
Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
[ rjw: Subject adjustment, changelog edits ]
Link: https://patch.msgid.link/20251111010840.141490-1-srinivas.pandruvada@linux.intel.com
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
[ richa: Backport to 6.12.y with context adjustments ]
Signed-off-by: Richa Bharti <richa.bharti@siemens.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
History 2026-01-11 15:25:21 +01:00
..
acpi-cpufreq.c acpi-cpufreq: Fix nominal_freq units to KHz in get_max_boost_ratio() 2025-06-10 07:12:58 -04:00
amd-pstate-trace.c cpufreq: amd-pstate: Add trace for AMD P-State module 2021-12-30 18:51:39 +01:00
amd-pstate-trace.h cpufreq: amd-pstate: Add more tracepoint for AMD P-State module 2022-03-09 19:53:01 +01:00
amd-pstate-ut.c second round of amd-pstate changes for 6.12 (second try): 2024-09-11 18:22:23 +02:00
amd-pstate.c cpufreq/amd-pstate: Call cppc_set_auto_sel() only for online CPUs 2025-12-18 13:54:56 +01:00
amd-pstate.h cpufreq/amd-pstate: Export symbols for changing modes 2024-09-11 10:23:23 -05:00
amd_freq_sensitivity.c cpufreq: amd_freq_sensitivity: Add missing pci_dev_put() 2022-11-30 19:50:04 +01:00
apple-soc-cpufreq.c cpufreq: apple-soc: Fix null-ptr-deref in apple_soc_cpufreq_get_rate() 2025-05-02 07:58:59 +02:00
armada-8k-cpufreq.c cpufreq: armada-8k: Fix off by one in armada_8k_cpufreq_free_table() 2025-08-28 16:30:53 +02:00
armada-37xx-cpufreq.c cpufreq: Explicitly include correct DT includes 2023-07-20 16:01:57 +05:30
bmips-cpufreq.c cpufreq: Make cpufreq_driver->exit() return void 2024-07-09 08:45:30 +05:30
brcmstb-avs-cpufreq.c cpufreq: brcmstb-avs-cpufreq: ISO C90 forbids mixed declarations 2024-04-25 10:36:40 +05:30
cppc_cpufreq.c cpufreq: CPPC: Avoid using CPUFREQ_ETERNAL as transition delay 2025-10-23 16:20:26 +02:00
cpufreq-dt-platdev.c cpufreq: dt-platdev: Add JH7110S SOC to the allowlist 2026-01-08 10:13:56 +01:00
cpufreq-dt.c cpufreq: Make drivers using CPUFREQ_ETERNAL specify transition latency 2025-10-19 16:34:02 +02:00
cpufreq-dt.h cpufreq: dt: Allow platform specific intermediate callbacks 2020-03-12 15:43:52 +05:30
cpufreq-nforce2.c cpufreq: nforce2: fix reference count leak in nforce2 2026-01-08 10:14:19 +01:00
cpufreq.c cpufreq: Initialize cpufreq-based invariance before subsys 2025-10-02 13:44:08 +02:00
cpufreq_conservative.c cpufreq: conservative: Simplify the condition of storing 'down_threshold' 2023-10-06 21:55:13 +02:00
cpufreq_governor.c cpufreq: governor: Fix negative 'idle_time' handling in dbs_update() 2025-04-10 14:39:10 +02:00
cpufreq_governor.h cpufreq: governor: Use kobject release() method to free dbs_data 2022-04-13 15:22:41 +02:00
cpufreq_governor_attr_set.c cpufreq: Move to_gov_attr_set() to cpufreq.h 2022-02-04 19:22:34 +01:00
cpufreq_ondemand.c cpufreq: ondemand: Update the efficient idle check for Intel extended Families 2025-11-13 15:34:05 -05:00
cpufreq_ondemand.h cpufreq: ondemand: Update the efficient idle check for Intel extended Families 2025-11-13 15:34:05 -05:00
cpufreq_performance.c cpufreq: Introduce CPUFREQ_GOV_STRICT_TARGET 2020-11-10 18:31:17 +01:00
cpufreq_powersave.c cpufreq: Introduce CPUFREQ_GOV_STRICT_TARGET 2020-11-10 18:31:17 +01:00
cpufreq_stats.c cpufreq: stats: Fix buffer overflow detection in trans_stats() 2023-10-24 22:02:06 +02:00
cpufreq_userspace.c cpufreq: userspace: Move is_managed indicator into per-policy structure 2023-10-06 22:01:26 +02:00
davinci-cpufreq.c cpufreq: davinci: Convert to platform remove callback returning void 2023-07-20 16:02:13 +05:30
e_powersaver.c cpufreq: Make cpufreq_driver->exit() return void 2024-07-09 08:45:30 +05:30
elanfreq.c cpufreq: Convert to new X86 CPU match macros 2020-03-24 21:31:27 +01:00
freq_table.c cpufreq: Fix setting policy limits when frequency tables are used 2025-05-09 09:50:35 +02:00
gx-suspmod.c cpufreq: Avoid creating excessively large stack frames 2020-01-27 10:33:33 +01:00
highbank-cpufreq.c cpufreq: Add __init annotation to module init funcs 2022-09-26 11:15:04 +05:30
imx-cpufreq-dt.c cpufreq: imx-cpufreq-dt: Convert to platform remove callback returning void 2023-07-20 16:02:13 +05:30
imx6q-cpufreq.c cpufreq: Make drivers using CPUFREQ_ETERNAL specify transition latency 2025-10-19 16:34:02 +02:00
intel_pstate.c cpufreq: intel_pstate: Check IDA only before MSR_IA32_PERF_CTL writes 2026-01-11 15:25:21 +01:00
Kconfig cpufreq: fix using cpufreq-dt as module 2025-02-17 10:05:02 +01:00
Kconfig.arm cpufreq: fix compile-test defaults 2025-05-02 07:59:00 +02:00
Kconfig.powerpc cpufreq: Fix Kconfig indentation 2019-11-29 11:52:02 +01:00
Kconfig.x86 cpufreq: amd-pstate: Make amd-pstate unit tests depend on amd-pstate 2024-06-24 13:17:56 -05:00
kirkwood-cpufreq.c cpufreq: kirkwood: Convert to platform remove callback returning void 2023-07-20 16:02:13 +05:30
longhaul.c cpufreq/longhaul: handle NULL policy in longhaul_exit 2025-11-13 15:34:03 -05:00
longhaul.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 166 2019-05-30 11:26:39 -07:00
longrun.c cpufreq: Convert to new X86 CPU match macros 2020-03-24 21:31:27 +01:00
loongson2_cpufreq.c cpufreq: loongson2: Unregister platform_driver on failure 2024-12-05 14:02:04 +01:00
loongson3_cpufreq.c cpufreq: loongson3: Check for error code from devm_mutex_init() call 2024-12-05 14:02:12 +01:00
Makefile cpufreq: Add Loongson-3 CPUFreq driver support 2024-07-09 08:45:43 +05:30
maple-cpufreq.c cpufreq: powerpc: add missing MODULE_DESCRIPTION() macros 2024-08-02 14:45:20 +02:00
mediatek-cpufreq-hw.c cpufreq: Make drivers using CPUFREQ_ETERNAL specify transition latency 2025-10-19 16:34:02 +02:00
mediatek-cpufreq.c cpufreq: Fix warning on unused of_device_id tables for !CONFIG_OF 2024-09-04 20:43:59 +05:30
mvebu-cpufreq.c treewide: Replace GPLv2 boilerplate/reference with SPDX - gpl-2.0_56.RULE (part 2) 2022-06-10 14:51:35 +02:00
omap-cpufreq.c cpufreq: omap: Drop asm includes 2024-08-07 12:11:46 +05:30
p4-clockmod.c treewide: Use fallthrough pseudo-keyword 2020-08-23 17:36:59 -05:00
pasemi-cpufreq.c cpufreq: powerpc: add missing MODULE_DESCRIPTION() macros 2024-08-02 14:45:20 +02:00
pcc-cpufreq.c cpufreq: pcc: Remove empty exit() callback 2024-07-05 11:42:00 +05:30
pmac32-cpufreq.c powerpc: rename SPRN_HID2 define to SPRN_HID2_750FX 2024-05-08 00:25:00 +10:00
pmac64-cpufreq.c ARM cpufreq updates for 6.12 2024-09-06 20:50:46 +02:00
powernow-k6.c cpufreq: Make cpufreq_driver->exit() return void 2024-07-09 08:45:30 +05:30
powernow-k7.c cpufreq: Make cpufreq_driver->exit() return void 2024-07-09 08:45:30 +05:30
powernow-k7.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 166 2019-05-30 11:26:39 -07:00
powernow-k8.c cpufreq: Make cpufreq_driver->exit() return void 2024-07-09 08:45:30 +05:30
powernow-k8.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 347 2019-06-05 17:37:08 +02:00
powernv-cpufreq.c ARM cpufreq updates for 6.12 2024-09-06 20:50:46 +02:00
ppc_cbe_cpufreq.c cpufreq: powerpc: add missing MODULE_DESCRIPTION() macros 2024-08-02 14:45:20 +02:00
ppc_cbe_cpufreq.h cpufreq: powerpc_cbe: Switch to QoS requests for freq limits 2019-08-26 10:02:01 +02:00
ppc_cbe_cpufreq_pervasive.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 153 2019-05-30 11:26:32 -07:00
ppc_cbe_cpufreq_pmi.c cpufreq: Explicitly include correct DT includes 2023-07-20 16:01:57 +05:30
pxa2xx-cpufreq.c cpufreq: pxa3: move clk register access to clk driver 2022-05-07 22:55:49 +02:00
pxa3xx-cpufreq.c cpufreq: pxa3: move clk register access to clk driver 2022-05-07 22:55:49 +02:00
qcom-cpufreq-hw.c cpufreq: qcom: Implement clk_ops::determine_rate() for qcom_cpufreq* clocks 2025-02-08 09:57:07 +01:00
qcom-cpufreq-nvmem.c cpufreq: Fix warning on unused of_device_id tables for !CONFIG_OF 2024-09-04 20:43:59 +05:30
qoriq-cpufreq.c cpufreq: Make cpufreq_driver->exit() return void 2024-07-09 08:45:30 +05:30
raspberrypi-cpufreq.c cpufreq: raspberrypi: Convert to platform remove callback returning void 2023-07-20 16:02:13 +05:30
s3c64xx-cpufreq.c cpufreq: s3c64xx: Fix compilation warning 2025-02-17 10:05:02 +01:00
s5pv210-cpufreq.c cpufreq: s5pv210: fix refcount leak 2026-01-08 10:13:56 +01:00
sa1110-cpufreq.c ARM: sa1100: remove unused board files 2023-01-12 10:53:12 +01:00
sc520_freq.c cpufreq: sc520_freq: add 'fallthrough' to one case 2021-05-21 18:52:13 +02:00
scmi-cpufreq.c cpufreq: Make drivers using CPUFREQ_ETERNAL specify transition latency 2025-10-19 16:34:02 +02:00
scpi-cpufreq.c cpufreq: Make drivers using CPUFREQ_ETERNAL specify transition latency 2025-10-19 16:34:02 +02:00
sh-cpufreq.c cpufreq: Make cpufreq_driver->exit() return void 2024-07-09 08:45:30 +05:30
sparc-us2e-cpufreq.c cpufreq: Make cpufreq_driver->exit() return void 2024-07-09 08:45:30 +05:30
sparc-us3-cpufreq.c cpufreq: Make cpufreq_driver->exit() return void 2024-07-09 08:45:30 +05:30
spear-cpufreq.c cpufreq: Make drivers using CPUFREQ_ETERNAL specify transition latency 2025-10-19 16:34:02 +02:00
speedstep-centrino.c ARM cpufreq updates for 6.11 2024-07-09 17:58:20 +02:00
speedstep-ich.c cpufreq: Convert to new X86 CPU match macros 2020-03-24 21:31:27 +01:00
speedstep-lib.c cpufreq: speedstep: remove unneeded semicolon 2020-10-28 18:04:07 +01:00
speedstep-lib.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 166 2019-05-30 11:26:39 -07:00
speedstep-smi.c cpufreq: Convert to new X86 CPU match macros 2020-03-24 21:31:27 +01:00
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-05-02 07:58:59 +02:00
tegra20-cpufreq.c Devicetree updates for v6.4, part 2: 2023-04-27 10:09:05 -07:00
tegra124-cpufreq.c cpupfreq: tegra124: eliminate uses of of_node_put() 2024-04-19 11:55:44 +05:30
tegra186-cpufreq.c cpufreq: tegra186: Initialize all cores to max frequencies 2025-11-13 15:34:34 -05:00
tegra194-cpufreq.c cpufreq: Make cpufreq_driver->exit() return void 2024-07-09 08:45:30 +05:30
ti-cpufreq.c cpufreq: ti: Add support for AM62D2 2025-11-13 15:34:02 -05:00
vexpress-spc-cpufreq.c cpufreq: Make cpufreq_driver->exit() return void 2024-07-09 08:45:30 +05:30