cpufreq: Register for hotplug notifier before locking hotplug
If a CPU hotplug operation occurs in parallel while a driver is
registering with the cpufreq framework it can lead to the following
deadlock scenario:
Thread A (cpufreq_register_driver()) Thread B (cpu_down())
get_online_cpus()
|
atomic_inc(&cpu_hotplug.refcount)
cpu_down()
|
mutex_lock(&cpu_add_remove_lock)
|
cpu_hotplug_begin() waits on
cpu_hotplug.refcount to reset
register_cpu_notifier()
|
mutex_lock(&cpu_add_remove_lock)
This happens because the registration for hotplug notifiers happens
inside the hotplug locked section.
This change moves hotplug registration call before get_online_cpus()
to avoid the deadlock.
Change-Id: Ia59a3e2710133d3b3608e49938e746e58af5a6d4
Signed-off-by:
Rohit Gupta <rohgup@codeaurora.org>
Loading
Please register or sign in to comment