soc: ti: Use list_first_entry_or_null() at appropriate places
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
@@ -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
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
@@ -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
PATCH 3/3 soc: ti: knav_qmss_queue: Return proper error if devm_kzalloc fails
In reply to Axel LinReturn -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
@@ -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
Alex,
Quoted 8 lines · Axel Lin
Use
list_first_entry_or_null()forfirst_region()andfirst_queue_range().
list_first_entry()expects the list is not empty, sofirst_region()andfirst_queue_range()never return NULL.
Thus uselist_first_entry_or_null()instead.Signed-off-by Axel Lin <[email protected]>---
Thanks. I will pick the $subject and other two patches and queue them up for next merge window.
Regards,
Santosh