Skip to contentSkip to conversation

soc: ti: Use list_first_entry_or_null() at appropriate places

PATCH In review Axel Lin 2 participants 4 messages Oct 26, 2014 – Oct 27, 2014 TI Keystone multicore navigator drivers

lore
Share & tools
lore

Axel Lin

author
#0 lore raw

PATCH 1/3 soc: ti: Use list_first_entry_or_null() at appropriate places

Use list_first_entry_or_null() for first_region() and first_queue_range().

list_first_entry() expects the list is not empty, so first_region() and first_queue_range() never return NULL.
Thus use list_first_entry_or_null() instead.

---
 drivers/soc/ti/knav_qmss.h | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)
drivers/soc/ti/knav_qmss.h +4 -4
index bc9dcc8..51da234 100644
@@ -348,15 +348,15 @@ struct knav_range_info {
 	list_for_each_entry(region, &kdev->regions, list)
 
 #define first_region(kdev)					\
-	list_first_entry(&kdev->regions, \
-			struct knav_region, list)
+	list_first_entry_or_null(&kdev->regions, \
+				 struct knav_region, list)
 
 #define for_each_queue_range(kdev, range)			\
 	list_for_each_entry(range, &kdev->queue_ranges, list)
 
 #define first_queue_range(kdev)					\
-	list_first_entry(&kdev->queue_ranges, \
-			struct knav_range_info, list)
+	list_first_entry_or_null(&kdev->queue_ranges, \
+				 struct knav_range_info, list)
 
 #define for_each_pool(kdev, pool)				\
 	list_for_each_entry(pool, &kdev->pools, list)
Signature · 1 line
1.9.1
author
#1 lore raw

PATCH 2/3 soc: ti: knav_qmss_queue: Fix unbalanced locking in knav_pool_create()

Don't call mutex_unlock() in the error patch if the mutex_lock() is not called.

---
 drivers/soc/ti/knav_qmss_queue.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)
drivers/soc/ti/knav_qmss_queue.c +4 -3
index 0a2c863..d66aaf2 100644
@@ -785,7 +785,7 @@ void *knav_pool_create(const char *name,
 		dev_err(kdev->dev, "out of descs in region(%d) for pool(%s)\n",
 			region_id, name);
 		ret = -ENOMEM;
-		goto err;
+		goto err_unlock;
 	}
 
 	/* Region maintains a sorted (by region offset) list of pools
@@ -815,15 +815,16 @@ void *knav_pool_create(const char *name,
 		dev_err(kdev->dev, "pool(%s) create failed: fragmented desc pool in region(%d)\n",
 			name, region_id);
 		ret = -ENOMEM;
-		goto err;
+		goto err_unlock;
 	}
 
 	mutex_unlock(&knav_dev_lock);
 	kdesc_fill_pool(pool);
 	return pool;
 
-err:
+err_unlock:
 	mutex_unlock(&knav_dev_lock);
+err:
 	kfree(pool->name);
 	devm_kfree(kdev->dev, pool);
 	return ERR_PTR(ret);
Signature · 1 line
1.9.1
author
#2 lore raw

PATCH 3/3 soc: ti: knav_qmss_queue: Return proper error if devm_kzalloc fails

In reply to Axel Lin

Return -ENOMEM if devm_kzalloc fails.

---
 drivers/soc/ti/knav_qmss_queue.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/soc/ti/knav_qmss_queue.c +1 -1
index d66aaf2..6f22d56 100644
@@ -1640,7 +1640,7 @@ static int knav_queue_init_queues(struct knav_device *kdev)
 	size = (1 << kdev->inst_shift) * kdev->num_queues_in_use;
 	kdev->instances = devm_kzalloc(kdev->dev, size, GFP_KERNEL);
 	if (!kdev->instances)
-		return -1;
+		return -ENOMEM;
 
 	for_each_queue_range(kdev, range) {
 		if (range->ops && range->ops->init_range)
Signature · 1 line
1.9.1
#3 lore raw
In reply to Axel Lin

Alex,

Quoted 8 lines · Axel Lin

Use list_first_entry_or_null() for first_region() and first_queue_range().

list_first_entry() expects the list is not empty, so first_region() and first_queue_range() never return NULL.
Thus use list_first_entry_or_null() instead.

---

Thanks. I will pick the $subject and other two patches and queue them up for next merge window.

Regards,
Santosh