thermal: devfreq: 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:
Родитель
8327b830f2
Коммит
afd1f4e0a7
|
@ -189,13 +189,19 @@ get_static_power(struct devfreq_cooling_device *dfc, unsigned long freq)
|
|||
if (PTR_ERR(opp) == -ERANGE)
|
||||
opp = dev_pm_opp_find_freq_exact(dev, freq, false);
|
||||
|
||||
if (IS_ERR(opp)) {
|
||||
dev_err_ratelimited(dev, "Failed to find OPP for frequency %lu: %ld\n",
|
||||
freq, PTR_ERR(opp));
|
||||
return 0;
|
||||
}
|
||||
|
||||
voltage = dev_pm_opp_get_voltage(opp) / 1000; /* mV */
|
||||
dev_pm_opp_put(opp);
|
||||
|
||||
if (voltage == 0) {
|
||||
dev_err_ratelimited(dev,
|
||||
"Failed to get voltage for frequency %lu: %ld\n",
|
||||
freq, IS_ERR(opp) ? PTR_ERR(opp) : 0);
|
||||
"Failed to get voltage for frequency %lu\n",
|
||||
freq);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче