cpufreq: check cpufreq driver is valid and cpufreq isn't disabled in cpufreq_get()
authorViresh Kumar <[email protected]>
Fri, 20 Sep 2013 17:07:31 +0000 (22:37 +0530)
committerRafael J. Wysocki <[email protected]>
Wed, 25 Sep 2013 01:24:02 +0000 (03:24 +0200)
cpufreq_get() can be called from external drivers which might not be aware if
cpufreq driver is registered or not. And so we should actually check if cpufreq
driver is registered or not and also if cpufreq is active or disabled, at the
beginning of cpufreq_get().

Otherwise call to lock_policy_rwsem_read() might hit BUG_ON(!policy).

Reported-and-tested-by: Linus Walleij <[email protected]>
Signed-off-by: Viresh Kumar <[email protected]>
Reviewed-by: Srivatsa S. Bhat <[email protected]>
Signed-off-by: Rafael J. Wysocki <[email protected]>
drivers/cpufreq/cpufreq.c

index 89b3c52cd5c3a61a7961358dea59009c3ce2de02..04548f7023af68dee6b36fc590ec59f02c0216f7 100644 (file)
@@ -1460,6 +1460,9 @@ unsigned int cpufreq_get(unsigned int cpu)
 {
        unsigned int ret_freq = 0;
 
+       if (cpufreq_disabled() || !cpufreq_driver)
+               return -ENOENT;
+
        if (!down_read_trylock(&cpufreq_rwsem))
                return 0;