aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/cpufreq
diff options
context:
space:
mode:
authorchenqiwu <chenqiwu@xiaomi.com>2020-01-20 15:41:28 +0800
committerViresh Kumar <viresh.kumar@linaro.org>2020-01-20 13:23:34 +0530
commita48ac1c9f294e1a9b692d9458de6e6b58da8b07d (patch)
treee559f9035cc3279af1a1b0897b15b5bcbe0a35f4 /drivers/cpufreq
parentcpufreq: s3c: fix unbalances of cpufreq policy refcount (diff)
downloadlinux-dev-a48ac1c9f294e1a9b692d9458de6e6b58da8b07d.tar.xz
linux-dev-a48ac1c9f294e1a9b692d9458de6e6b58da8b07d.zip
cpufreq: brcmstb-avs: fix imbalance of cpufreq policy refcount
brcm_avs_cpufreq_get() calls cpufreq_cpu_get() to get the cpufreq policy, meanwhile, it also increments the kobject reference count to mark it busy. However, a corresponding call of cpufreq_cpu_put() is ignored to decrement the kobject reference count back, which may lead to a potential stuck risk that the cpuhp thread deadly waits for dropping of kobject refcount when cpufreq policy free. With this patch, the cpuhp thread can be easily exercised by attempting to force an unbind of the CPUfreq driver. Signed-off-by: chenqiwu <chenqiwu@xiaomi.com> [ Viresh: Dropped !policy check ] Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Diffstat (limited to 'drivers/cpufreq')
-rw-r--r--drivers/cpufreq/brcmstb-avs-cpufreq.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/cpufreq/brcmstb-avs-cpufreq.c b/drivers/cpufreq/brcmstb-avs-cpufreq.c
index 77b0e5d0fb13..4f86ce2db34f 100644
--- a/drivers/cpufreq/brcmstb-avs-cpufreq.c
+++ b/drivers/cpufreq/brcmstb-avs-cpufreq.c
@@ -455,6 +455,8 @@ static unsigned int brcm_avs_cpufreq_get(unsigned int cpu)
struct cpufreq_policy *policy = cpufreq_cpu_get(cpu);
struct private_data *priv = policy->driver_data;
+ cpufreq_cpu_put(policy);
+
return brcm_avs_get_frequency(priv->base);
}