diff options
author | Viresh Kumar <viresh.kumar@linaro.org> | 2017-02-06 23:10:05 -0500 |
---|---|---|
committer | Zhang Rui <rui.zhang@intel.com> | 2017-03-12 22:06:55 -0400 |
commit | 3ea3217cf91804be6ed9b368ef4ac7911eb1dadc (patch) | |
tree | c225c4ee5949f8906fb07a31a174819d0aa40d33 | |
parent | 9aec9082bf3c0fb83020a0f562c9cc8078ac91f1 (diff) |
thermal: cpu_cooling: Check OPP for errors
It is possible for dev_pm_opp_find_freq_exact() to return errors. It was
all fine earlier as dev_pm_opp_get_voltage() had a check within it to
check for invalid OPPs, but dev_pm_opp_put() doesn't have any similar
checks and the callers need to make sure OPP is valid before calling
them.
Also update the later dev_warn_ratelimited() to not print the error
message as the OPP is guaranteed to be valid now.
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Zhang Rui <rui.zhang@intel.com>
-rw-r--r-- | drivers/thermal/cpu_cooling.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/drivers/thermal/cpu_cooling.c b/drivers/thermal/cpu_cooling.c index 59f0bd53f329..69d0f430b2d1 100644 --- a/drivers/thermal/cpu_cooling.c +++ b/drivers/thermal/cpu_cooling.c | |||
@@ -393,13 +393,20 @@ static int get_static_power(struct cpufreq_cooling_device *cpufreq_device, | |||
393 | 393 | ||
394 | opp = dev_pm_opp_find_freq_exact(cpufreq_device->cpu_dev, freq_hz, | 394 | opp = dev_pm_opp_find_freq_exact(cpufreq_device->cpu_dev, freq_hz, |
395 | true); | 395 | true); |
396 | if (IS_ERR(opp)) { | ||
397 | dev_warn_ratelimited(cpufreq_device->cpu_dev, | ||
398 | "Failed to find OPP for frequency %lu: %ld\n", | ||
399 | freq_hz, PTR_ERR(opp)); | ||
400 | return -EINVAL; | ||
401 | } | ||
402 | |||
396 | voltage = dev_pm_opp_get_voltage(opp); | 403 | voltage = dev_pm_opp_get_voltage(opp); |
397 | dev_pm_opp_put(opp); | 404 | dev_pm_opp_put(opp); |
398 | 405 | ||
399 | if (voltage == 0) { | 406 | if (voltage == 0) { |
400 | dev_err_ratelimited(cpufreq_device->cpu_dev, | 407 | dev_err_ratelimited(cpufreq_device->cpu_dev, |
401 | "Failed to get voltage for frequency %lu: %ld\n", | 408 | "Failed to get voltage for frequency %lu\n", |
402 | freq_hz, IS_ERR(opp) ? PTR_ERR(opp) : 0); | 409 | freq_hz); |
403 | return -EINVAL; | 410 | return -EINVAL; |
404 | } | 411 | } |
405 | 412 | ||