diff options
author | Axel Lin <axel.lin@ingics.com> | 2014-10-27 12:37:35 -0400 |
---|---|---|
committer | Santosh Shilimkar <ssantosh@kernel.org> | 2014-10-27 12:37:35 -0400 |
commit | ea6d4c07ca872b875b31e9a9bc99c21359c0f19c (patch) | |
tree | 99ac5afeb8e4617fd29784e47dd05242406cda4d | |
parent | 42813295dfa3689c73e93726e7ebbbdb466dd246 (diff) |
soc: ti: knav_qmss_queue: Fix unbalanced locking ins knav_pool_create()
Don't call mutex_unlock() in the error patch if the mutex_lock() is not called.
Signed-off-by: Axel Lin <axel.lin@ingics.com>
Signed-off-by: Santosh Shilimkar <ssantosh@kernel.org>
-rw-r--r-- | drivers/soc/ti/knav_qmss_queue.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/drivers/soc/ti/knav_qmss_queue.c b/drivers/soc/ti/knav_qmss_queue.c index 0a2c8634c48b..d66aaf2c2ecd 100644 --- a/drivers/soc/ti/knav_qmss_queue.c +++ b/drivers/soc/ti/knav_qmss_queue.c | |||
@@ -785,7 +785,7 @@ void *knav_pool_create(const char *name, | |||
785 | dev_err(kdev->dev, "out of descs in region(%d) for pool(%s)\n", | 785 | dev_err(kdev->dev, "out of descs in region(%d) for pool(%s)\n", |
786 | region_id, name); | 786 | region_id, name); |
787 | ret = -ENOMEM; | 787 | ret = -ENOMEM; |
788 | goto err; | 788 | goto err_unlock; |
789 | } | 789 | } |
790 | 790 | ||
791 | /* Region maintains a sorted (by region offset) list of pools | 791 | /* Region maintains a sorted (by region offset) list of pools |
@@ -815,15 +815,16 @@ void *knav_pool_create(const char *name, | |||
815 | dev_err(kdev->dev, "pool(%s) create failed: fragmented desc pool in region(%d)\n", | 815 | dev_err(kdev->dev, "pool(%s) create failed: fragmented desc pool in region(%d)\n", |
816 | name, region_id); | 816 | name, region_id); |
817 | ret = -ENOMEM; | 817 | ret = -ENOMEM; |
818 | goto err; | 818 | goto err_unlock; |
819 | } | 819 | } |
820 | 820 | ||
821 | mutex_unlock(&knav_dev_lock); | 821 | mutex_unlock(&knav_dev_lock); |
822 | kdesc_fill_pool(pool); | 822 | kdesc_fill_pool(pool); |
823 | return pool; | 823 | return pool; |
824 | 824 | ||
825 | err: | 825 | err_unlock: |
826 | mutex_unlock(&knav_dev_lock); | 826 | mutex_unlock(&knav_dev_lock); |
827 | err: | ||
827 | kfree(pool->name); | 828 | kfree(pool->name); |
828 | devm_kfree(kdev->dev, pool); | 829 | devm_kfree(kdev->dev, pool); |
829 | return ERR_PTR(ret); | 830 | return ERR_PTR(ret); |