diff options
-rw-r--r-- | drivers/base/power/opp.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/drivers/base/power/opp.c b/drivers/base/power/opp.c index aac7abcf74f8..106c69359306 100644 --- a/drivers/base/power/opp.c +++ b/drivers/base/power/opp.c | |||
@@ -216,9 +216,7 @@ EXPORT_SYMBOL_GPL(dev_pm_opp_get_freq); | |||
216 | * This function returns the number of available opps if there are any, | 216 | * This function returns the number of available opps if there are any, |
217 | * else returns 0 if none or the corresponding error value. | 217 | * else returns 0 if none or the corresponding error value. |
218 | * | 218 | * |
219 | * Locking: This function must be called under rcu_read_lock(). This function | 219 | * Locking: This function takes rcu_read_lock(). |
220 | * internally references two RCU protected structures: device_opp and opp which | ||
221 | * are safe as long as we are under a common RCU locked section. | ||
222 | */ | 220 | */ |
223 | int dev_pm_opp_get_opp_count(struct device *dev) | 221 | int dev_pm_opp_get_opp_count(struct device *dev) |
224 | { | 222 | { |
@@ -226,13 +224,14 @@ int dev_pm_opp_get_opp_count(struct device *dev) | |||
226 | struct dev_pm_opp *temp_opp; | 224 | struct dev_pm_opp *temp_opp; |
227 | int count = 0; | 225 | int count = 0; |
228 | 226 | ||
229 | opp_rcu_lockdep_assert(); | 227 | rcu_read_lock(); |
230 | 228 | ||
231 | dev_opp = find_device_opp(dev); | 229 | dev_opp = find_device_opp(dev); |
232 | if (IS_ERR(dev_opp)) { | 230 | if (IS_ERR(dev_opp)) { |
233 | int r = PTR_ERR(dev_opp); | 231 | count = PTR_ERR(dev_opp); |
234 | dev_err(dev, "%s: device OPP not found (%d)\n", __func__, r); | 232 | dev_err(dev, "%s: device OPP not found (%d)\n", |
235 | return r; | 233 | __func__, count); |
234 | goto out_unlock; | ||
236 | } | 235 | } |
237 | 236 | ||
238 | list_for_each_entry_rcu(temp_opp, &dev_opp->opp_list, node) { | 237 | list_for_each_entry_rcu(temp_opp, &dev_opp->opp_list, node) { |
@@ -240,6 +239,8 @@ int dev_pm_opp_get_opp_count(struct device *dev) | |||
240 | count++; | 239 | count++; |
241 | } | 240 | } |
242 | 241 | ||
242 | out_unlock: | ||
243 | rcu_read_unlock(); | ||
243 | return count; | 244 | return count; |
244 | } | 245 | } |
245 | EXPORT_SYMBOL_GPL(dev_pm_opp_get_opp_count); | 246 | EXPORT_SYMBOL_GPL(dev_pm_opp_get_opp_count); |