diff options
| author | Jakub Kicinski <kuba@kernel.org> | 2020-11-06 17:32:55 -0800 |
|---|---|---|
| committer | Jakub Kicinski <kuba@kernel.org> | 2020-11-06 17:33:38 -0800 |
| commit | ae0d0bb29b311ee3c71c8796f76d309a3779c8d9 (patch) | |
| tree | ae8e6f90d4eec5594bf42fe7aa9c3d989fc4317e /drivers/opp/core.c | |
| parent | 9f32c27eb4fc4426eedd511697d921a932f7dba6 (diff) | |
| parent | bf3e76289cd28b87f679cd53e26d67fd708d718a (diff) | |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'drivers/opp/core.c')
| -rw-r--r-- | drivers/opp/core.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/drivers/opp/core.c b/drivers/opp/core.c index 2483e765318a..0e0a5269dc82 100644 --- a/drivers/opp/core.c +++ b/drivers/opp/core.c @@ -1181,6 +1181,10 @@ static void _opp_table_kref_release(struct kref *kref) struct opp_device *opp_dev, *temp; int i; + /* Drop the lock as soon as we can */ + list_del(&opp_table->node); + mutex_unlock(&opp_table_lock); + _of_clear_opp_table(opp_table); /* Release clk */ @@ -1208,10 +1212,7 @@ static void _opp_table_kref_release(struct kref *kref) mutex_destroy(&opp_table->genpd_virt_dev_lock); mutex_destroy(&opp_table->lock); - list_del(&opp_table->node); kfree(opp_table); - - mutex_unlock(&opp_table_lock); } void dev_pm_opp_put_opp_table(struct opp_table *opp_table) @@ -1930,7 +1931,7 @@ struct opp_table *dev_pm_opp_register_set_opp_helper(struct device *dev, return ERR_PTR(-EINVAL); opp_table = dev_pm_opp_get_opp_table(dev); - if (!IS_ERR(opp_table)) + if (IS_ERR(opp_table)) return opp_table; /* This should be called before OPPs are initialized */ |