linux/drivers/cpufreq
Christian Loehle 8ffe28b4e8 cpufreq: Initialize cpufreq-based invariance before subsys
commit 2a6c727387 ("cpufreq: Initialize cpufreq-based
frequency-invariance later") postponed the frequency invariance
initialization to avoid disabling it in the error case.
This isn't locking safe, instead move the initialization up before
the subsys interface is registered (which will rebuild the
sched_domains) and add the corresponding disable on the error path.

Observed lockdep without this patch:
[    0.989686] ======================================================
[    0.989688] WARNING: possible circular locking dependency detected
[    0.989690] 6.17.0-rc4-cix-build+ #31 Tainted: G S
[    0.989691] ------------------------------------------------------
[    0.989692] swapper/0/1 is trying to acquire lock:
[    0.989693] ffff800082ada7f8 (sched_energy_mutex){+.+.}-{4:4}, at: rebuild_sched_domains_energy+0x30/0x58
[    0.989705]
               but task is already holding lock:
[    0.989706] ffff000088c89bc8 (&policy->rwsem){+.+.}-{4:4}, at: cpufreq_online+0x7f8/0xbe0
[    0.989713]
               which lock already depends on the new lock.

Fixes: 2a6c727387 ("cpufreq: Initialize cpufreq-based frequency-invariance later")
Signed-off-by: Christian Loehle <christian.loehle@arm.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2025-09-20 13:00:20 +02:00
..
Kconfig cpufreq: Add Rust-based cpufreq-dt driver 2025-05-20 11:21:11 +05:30
Kconfig.arm cpufreq: tegra124: Allow building as a module 2025-07-09 13:41:58 +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 PM: cpufreq: powernv/tracing: Move powernv_throttle trace event 2025-07-21 16:40:56 -04:00
acpi-cpufreq.c Merge branch 'pm-cpufreq' 2025-05-30 20:11:09 +02:00
airoha-cpufreq.c cpufreq: airoha: Add EN7581 CPUFreq SMCCC driver 2025-01-17 09:05:07 +05:30
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: Move all EPP tracing into *_update_perf and *_set_epp functions 2025-03-06 13:01:25 -06:00
amd-pstate-ut.c Power management updates for 6.16-rc1 2025-05-27 16:48:47 -07:00
amd-pstate.c cpufreq/amd-pstate: Fix a regression leading to EPP 0 after resume 2025-09-03 09:17:34 -05:00
amd-pstate.h amd-pstate-ut: Reset amd-pstate driver mode after running selftests 2025-05-05 12:07:42 -05:00
amd_freq_sensitivity.c x86/msr: Rename 'rdmsrl_safe()' to 'rdmsrq_safe()' 2025-04-10 11:58:38 +02:00
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: armada-8k: Fix off by one in armada_8k_cpufreq_free_table() 2025-07-02 12:08:16 +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-avs: Fully open-code compatible for grepping 2025-06-19 12:36:32 +05:30
cppc_cpufreq.c cpufreq: CPPC: Mark driver with NEED_UPDATE_LIMITS flag 2025-07-22 12:13:12 +02:00
cpufreq-dt-platdev.c drivers: cpufreq: add Tegra114 support 2025-07-15 08:37:35 +05:30
cpufreq-dt.c cpufreq: dt: Add register helper 2025-07-09 13:41:33 +05:30
cpufreq-dt.h cpufreq: dt: Add register helper 2025-07-09 13:41:33 +05:30
cpufreq-nforce2.c cpufreq: nforce2: Remove empty exit() callback 2024-07-05 11:41:30 +05:30
cpufreq.c cpufreq: Initialize cpufreq-based invariance before subsys 2025-09-20 13:00:20 +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-02-20 20:27:19 +01: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: Fix setting policy limits when frequency tables are used 2025-04-28 14:36:41 +02:00
cpufreq_ondemand.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02: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: set CPUFREQ_GOV_STRICT_TARGET flag 2025-06-18 21:33:01 +02:00
davinci-cpufreq.c cpufreq: davinci: Stop setting cpufreq_driver->attr field 2025-02-07 09:45:12 +05:30
e_powersaver.c x86/msr: Rename 'wrmsrl()' to 'wrmsrq()' 2025-04-10 11:58:33 +02:00
elanfreq.c x86/msr: Add explicit includes of <asm/msr.h> 2025-05-02 10:23:47 +02:00
freq_table.c cpufreq: Fix setting policy limits when frequency tables are used 2025-04-28 14:36:41 +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: 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 PM: EM: Add function for registering a PD without capacity update 2025-09-10 12:03:19 +02:00
kirkwood-cpufreq.c cpufreq: kirkwood: Stop setting cpufreq_driver->attr field 2025-02-07 09:45:12 +05:30
longhaul.c x86/msr: Rename 'wrmsrl()' to 'wrmsrq()' 2025-04-10 11:58:33 +02: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: 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 x86/msr: Rename 'wrmsrl()' to 'wrmsrq()' 2025-04-10 11:58:33 +02:00
powernow-k7.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 166 2019-05-30 11:26:39 -07:00
powernow-k8.c powernow: use pr_info_once 2025-05-11 17:54:05 -07:00
powernow-k8.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 347 2019-06-05 17:37:08 +02:00
powernv-cpufreq.c PM: cpufreq: powernv/tracing: Move powernv_throttle trace event 2025-07-21 16:40:56 -04:00
powernv-trace.h PM: cpufreq: powernv/tracing: Move powernv_throttle trace event 2025-07-21 16:40:56 -04:00
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: 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
rcpufreq_dt.rs Rust changes for v6.17 2025-08-03 13:49:10 -07:00
s3c64xx-cpufreq.c cpufreq: s3c64xx: Fix compilation warning 2025-01-23 20:47:32 +01:00
s5pv210-cpufreq.c cpufreq: Introducing CPUFREQ_RELATION_E 2021-10-05 16:33:05 +02:00
sa1110-cpufreq.c ARM: sa1100: remove unused board files 2023-01-12 10:53:12 +01:00
sc520_freq.c x86/msr: Add explicit includes of <asm/msr.h> 2025-05-02 10:23:47 +02:00
scmi-cpufreq.c cpufreq: scmi: Skip SCMI devices that aren't used by the CPUs 2025-05-20 11:24:18 +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 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: 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 Devicetree updates for v6.4, part 2: 2023-04-27 10:09:05 -07:00
tegra124-cpufreq.c drivers: cpufreq: add Tegra114 support 2025-07-15 08:37:35 +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