| From c59886d82cc588ea86ba901ab99b56d65cf80df1 Mon Sep 17 00:00:00 2001 |
| From: Leonard Crestez <leonard.crestez@nxp.com> |
| Date: Thu, 14 Nov 2019 01:21:31 +0200 |
| Subject: [PATCH] PM / devfreq: Don't fail devfreq_dev_release if not in list |
| |
| commit 42a6b25e67df6ee6675e8d1eaf18065bd73328ba upstream. |
| |
| Right now devfreq_dev_release will print a warning and abort the rest of |
| the cleanup if the devfreq instance is not part of the global |
| devfreq_list. But this is a valid scenario, for example it can happen if |
| the governor can't be found or on any other init error that happens |
| after device_register. |
| |
| Initialize devfreq->node to an empty list head in devfreq_add_device so |
| that list_del becomes a safe noop inside devfreq_dev_release and we can |
| continue the rest of the cleanup. |
| |
| Signed-off-by: Leonard Crestez <leonard.crestez@nxp.com> |
| Reviewed-by: Matthias Kaehlcke <mka@chromium.org> |
| Reviewed-by: Chanwoo Choi <cw00.choi@samsung.com> |
| Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/devfreq/devfreq.c b/drivers/devfreq/devfreq.c |
| index 9f995ed5fb67..bdc7ca235211 100644 |
| --- a/drivers/devfreq/devfreq.c |
| +++ b/drivers/devfreq/devfreq.c |
| @@ -588,11 +588,6 @@ static void devfreq_dev_release(struct device *dev) |
| struct devfreq *devfreq = to_devfreq(dev); |
| |
| mutex_lock(&devfreq_list_lock); |
| - if (IS_ERR(find_device_devfreq(devfreq->dev.parent))) { |
| - mutex_unlock(&devfreq_list_lock); |
| - dev_warn(&devfreq->dev, "releasing devfreq which doesn't exist\n"); |
| - return; |
| - } |
| list_del(&devfreq->node); |
| mutex_unlock(&devfreq_list_lock); |
| |
| @@ -647,6 +642,7 @@ struct devfreq *devfreq_add_device(struct device *dev, |
| devfreq->dev.parent = dev; |
| devfreq->dev.class = devfreq_class; |
| devfreq->dev.release = devfreq_dev_release; |
| + INIT_LIST_HEAD(&devfreq->node); |
| devfreq->profile = profile; |
| strncpy(devfreq->governor_name, governor_name, DEVFREQ_NAME_LEN); |
| devfreq->previous_freq = profile->initial_freq; |
| -- |
| 2.7.4 |
| |