aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAxel Lin <axel.lin@ingics.com>2016-09-28 22:13:28 -0400
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2016-10-10 18:00:20 -0400
commit0f376c9cd86c23f37312d37748b233660ef9d9af (patch)
treeefa46f8cb94cf7e906ebfed2401d6cc34e0e1be9
parent3b91f4b361daad1f3e1c60ca5a7861e8b36f9728 (diff)
PM / devfreq: Add proper locking around list_del()
Use devfreq_list_lock around list_del() to prevent list corruption. Signed-off-by: Axel Lin <axel.lin@ingics.com> Acked-by: MyungJoo Ham <myungjoo.ham@samsung.com> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
-rw-r--r--drivers/devfreq/devfreq.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/devfreq/devfreq.c b/drivers/devfreq/devfreq.c
index 478006b7764a..66d3c7184a0f 100644
--- a/drivers/devfreq/devfreq.c
+++ b/drivers/devfreq/devfreq.c
@@ -594,17 +594,19 @@ struct devfreq *devfreq_add_device(struct device *dev,
594 if (devfreq->governor) 594 if (devfreq->governor)
595 err = devfreq->governor->event_handler(devfreq, 595 err = devfreq->governor->event_handler(devfreq,
596 DEVFREQ_GOV_START, NULL); 596 DEVFREQ_GOV_START, NULL);
597 mutex_unlock(&devfreq_list_lock);
598 if (err) { 597 if (err) {
599 dev_err(dev, "%s: Unable to start governor for the device\n", 598 dev_err(dev, "%s: Unable to start governor for the device\n",
600 __func__); 599 __func__);
601 goto err_init; 600 goto err_init;
602 } 601 }
602 mutex_unlock(&devfreq_list_lock);
603 603
604 return devfreq; 604 return devfreq;
605 605
606err_init: 606err_init:
607 list_del(&devfreq->node); 607 list_del(&devfreq->node);
608 mutex_unlock(&devfreq_list_lock);
609
608 device_unregister(&devfreq->dev); 610 device_unregister(&devfreq->dev);
609err_out: 611err_out:
610 return ERR_PTR(err); 612 return ERR_PTR(err);