|
@@ -418,10 +418,14 @@ out:
|
|
*/
|
|
*/
|
|
int devfreq_remove_device(struct devfreq *devfreq)
|
|
int devfreq_remove_device(struct devfreq *devfreq)
|
|
{
|
|
{
|
|
|
|
+ bool central_polling;
|
|
|
|
+
|
|
if (!devfreq)
|
|
if (!devfreq)
|
|
return -EINVAL;
|
|
return -EINVAL;
|
|
|
|
|
|
- if (!devfreq->governor->no_central_polling) {
|
|
|
|
|
|
+ central_polling = !devfreq->governor->no_central_polling;
|
|
|
|
+
|
|
|
|
+ if (central_polling) {
|
|
mutex_lock(&devfreq_list_lock);
|
|
mutex_lock(&devfreq_list_lock);
|
|
while (wait_remove_device == devfreq) {
|
|
while (wait_remove_device == devfreq) {
|
|
mutex_unlock(&devfreq_list_lock);
|
|
mutex_unlock(&devfreq_list_lock);
|
|
@@ -433,7 +437,7 @@ int devfreq_remove_device(struct devfreq *devfreq)
|
|
mutex_lock(&devfreq->lock);
|
|
mutex_lock(&devfreq->lock);
|
|
_remove_devfreq(devfreq, false); /* it unlocks devfreq->lock */
|
|
_remove_devfreq(devfreq, false); /* it unlocks devfreq->lock */
|
|
|
|
|
|
- if (!devfreq->governor->no_central_polling)
|
|
|
|
|
|
+ if (central_polling)
|
|
mutex_unlock(&devfreq_list_lock);
|
|
mutex_unlock(&devfreq_list_lock);
|
|
|
|
|
|
return 0;
|
|
return 0;
|