aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAxel Lin <axel.lin@ingics.com>2014-10-27 12:37:35 -0400
committerSantosh Shilimkar <ssantosh@kernel.org>2014-10-27 12:37:35 -0400
commitea6d4c07ca872b875b31e9a9bc99c21359c0f19c (patch)
tree99ac5afeb8e4617fd29784e47dd05242406cda4d
parent42813295dfa3689c73e93726e7ebbbdb466dd246 (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.c7
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
825err: 825err_unlock:
826 mutex_unlock(&knav_dev_lock); 826 mutex_unlock(&knav_dev_lock);
827err:
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);