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>
This commit is contained in:
parent
9aec9082bf
commit
3ea3217cf9
1 changed files with 9 additions and 2 deletions
|
@ -393,13 +393,20 @@ static int get_static_power(struct cpufreq_cooling_device *cpufreq_device,
|
|||
|
||||
opp = dev_pm_opp_find_freq_exact(cpufreq_device->cpu_dev, freq_hz,
|
||||
true);
|
||||
if (IS_ERR(opp)) {
|
||||
dev_warn_ratelimited(cpufreq_device->cpu_dev,
|
||||
"Failed to find OPP for frequency %lu: %ld\n",
|
||||
freq_hz, PTR_ERR(opp));
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
voltage = dev_pm_opp_get_voltage(opp);
|
||||
dev_pm_opp_put(opp);
|
||||
|
||||
if (voltage == 0) {
|
||||
dev_err_ratelimited(cpufreq_device->cpu_dev,
|
||||
"Failed to get voltage for frequency %lu: %ld\n",
|
||||
freq_hz, IS_ERR(opp) ? PTR_ERR(opp) : 0);
|
||||
"Failed to get voltage for frequency %lu\n",
|
||||
freq_hz);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue