cpufreq: Rearrange locking in cpufreq_remove_dev()
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>
Wed, 11 May 2022 15:51:39 +0000 (17:51 +0200)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Thu, 12 May 2022 15:11:57 +0000 (17:11 +0200)
commitf339f3541701d824a0256ad4bf14c26ceb6d79c3
tree018563397be7130f81c61a13db0e456463461d46
parentfddd8f86dff4a24742a7f0322ccbb34c6c1c9850
cpufreq: Rearrange locking in cpufreq_remove_dev()

Currently, cpufreq_remove_dev() invokes the ->exit() driver callback
without holding the policy rwsem which is inconsistent with what
happens if ->exit() is invoked directly from cpufreq_offline().

It also manipulates the real_cpus mask and removes the CPU device
symlink without holding the policy rwsem, but cpufreq_offline() holds
the rwsem around the modifications thereof.

For consistency, modify cpufreq_remove_dev() to hold the policy rwsem
until the ->exit() callback has been called (or it has been determined
that it is not necessary to call it).

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Acked-by: Viresh Kumar <viresh.kumar@linaro.org>
drivers/cpufreq/cpufreq.c