Re: [PATCH] x86/aperfmperf: Fix deadlock on cpu_hotplug_lock

From: Gavin Shan
Date: Mon Jul 29 2024 - 20:59:49 EST


On 7/29/24 8:55 PM, Jonathan Cameron wrote:
The broken patch results in a call to init_freq_invariance_cppc() in a CPU
hotplug handler in both the path for initially present CPUs and those
hotplugged later. That function includes a one time call to
amd_set_max_freq_ratio() which in turn calls freq_invariance_enable() that
has a static_branch_enable() which takes the cpu_hotlug_lock which is
already held.

Avoid the deadlock by using static_branch_enable_cpuslocked() as the lock
will always be already held. The equivalent path on Intel does not
already hold this lock, so take it around the call to
freq_invariance_enable(), which results in it being held over the call to
register_syscall_ops, which looks to be safe to do.

Fixes: c1385c1f0ba3 ("ACPI: processor: Simplify initial onlining to use same path for cold and hotplug")
Reported-by: Mikhail Gavrilov <mikhail.v.gavrilov@xxxxxxxxx>
Closes: https://lore.kernel.org/all/CABXGCsPvqBfL5hQDOARwfqasLRJ_eNPBbCngZ257HOe=xbWDkA@xxxxxxxxxxxxxx/
Suggested-by: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
Tested-by: Mikhail Gavrilov <mikhail.v.gavrilov@xxxxxxxxx>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@xxxxxxxxxx>
---
arch/x86/kernel/cpu/aperfmperf.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)


Reviewed-by: Gavin Shan <gshan@xxxxxxxxxx>