You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
208 lines
5.6 KiB
Diff
208 lines
5.6 KiB
Diff
From d36a6b361a3a181559daebcf32e11ab18431a854 Mon Sep 17 00:00:00 2001
|
|
From: Cihangir Akturk <cakturk@gmail.com>
|
|
Date: Sat, 9 Apr 2016 21:45:18 +0300
|
|
Subject: [PATCH 164/226] staging: fsl-mc: get rid of mutex_locked variables
|
|
|
|
Remove mutex_locked variables which are used to determine whether mutex is
|
|
locked, instead add another label to unlock mutex on premature exits due to
|
|
an error.
|
|
|
|
This patch also addresses the folowing warnings reported by coccinelle:
|
|
|
|
drivers/staging/fsl-mc/bus/mc-allocator.c:237:1-7: preceding lock on line 204
|
|
drivers/staging/fsl-mc/bus/mc-allocator.c:89:1-7: preceding lock on line 57
|
|
drivers/staging/fsl-mc/bus/mc-allocator.c:157:1-7: preceding lock on line 124
|
|
|
|
Signed-off-by: Cihangir Akturk <cakturk@gmail.com>
|
|
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
|
---
|
|
drivers/staging/fsl-mc/bus/mc-allocator.c | 61 ++++++++++++-----------------
|
|
1 file changed, 24 insertions(+), 37 deletions(-)
|
|
|
|
--- a/drivers/staging/fsl-mc/bus/mc-allocator.c
|
|
+++ b/drivers/staging/fsl-mc/bus/mc-allocator.c
|
|
@@ -39,7 +39,6 @@ static int __must_check fsl_mc_resource_
|
|
struct fsl_mc_resource *resource;
|
|
struct fsl_mc_device *mc_bus_dev = &mc_bus->mc_dev;
|
|
int error = -EINVAL;
|
|
- bool mutex_locked = false;
|
|
|
|
if (WARN_ON(pool_type < 0 || pool_type >= FSL_MC_NUM_POOL_TYPES))
|
|
goto out;
|
|
@@ -55,13 +54,12 @@ static int __must_check fsl_mc_resource_
|
|
goto out;
|
|
|
|
mutex_lock(&res_pool->mutex);
|
|
- mutex_locked = true;
|
|
|
|
if (WARN_ON(res_pool->max_count < 0))
|
|
- goto out;
|
|
+ goto out_unlock;
|
|
if (WARN_ON(res_pool->free_count < 0 ||
|
|
res_pool->free_count > res_pool->max_count))
|
|
- goto out;
|
|
+ goto out_unlock;
|
|
|
|
resource = devm_kzalloc(&mc_bus_dev->dev, sizeof(*resource),
|
|
GFP_KERNEL);
|
|
@@ -69,7 +67,7 @@ static int __must_check fsl_mc_resource_
|
|
error = -ENOMEM;
|
|
dev_err(&mc_bus_dev->dev,
|
|
"Failed to allocate memory for fsl_mc_resource\n");
|
|
- goto out;
|
|
+ goto out_unlock;
|
|
}
|
|
|
|
resource->type = pool_type;
|
|
@@ -82,10 +80,9 @@ static int __must_check fsl_mc_resource_
|
|
res_pool->free_count++;
|
|
res_pool->max_count++;
|
|
error = 0;
|
|
+out_unlock:
|
|
+ mutex_unlock(&res_pool->mutex);
|
|
out:
|
|
- if (mutex_locked)
|
|
- mutex_unlock(&res_pool->mutex);
|
|
-
|
|
return error;
|
|
}
|
|
|
|
@@ -106,7 +103,6 @@ static int __must_check fsl_mc_resource_
|
|
struct fsl_mc_resource_pool *res_pool;
|
|
struct fsl_mc_resource *resource;
|
|
int error = -EINVAL;
|
|
- bool mutex_locked = false;
|
|
|
|
if (WARN_ON(!FSL_MC_IS_ALLOCATABLE(mc_dev->obj_desc.type)))
|
|
goto out;
|
|
@@ -122,13 +118,12 @@ static int __must_check fsl_mc_resource_
|
|
goto out;
|
|
|
|
mutex_lock(&res_pool->mutex);
|
|
- mutex_locked = true;
|
|
|
|
if (WARN_ON(res_pool->max_count <= 0))
|
|
- goto out;
|
|
+ goto out_unlock;
|
|
if (WARN_ON(res_pool->free_count <= 0 ||
|
|
res_pool->free_count > res_pool->max_count))
|
|
- goto out;
|
|
+ goto out_unlock;
|
|
|
|
/*
|
|
* If the device is currently allocated, its resource is not
|
|
@@ -139,7 +134,7 @@ static int __must_check fsl_mc_resource_
|
|
dev_err(&mc_bus_dev->dev,
|
|
"Device %s cannot be removed from resource pool\n",
|
|
dev_name(&mc_dev->dev));
|
|
- goto out;
|
|
+ goto out_unlock;
|
|
}
|
|
|
|
list_del(&resource->node);
|
|
@@ -150,10 +145,9 @@ static int __must_check fsl_mc_resource_
|
|
devm_kfree(&mc_bus_dev->dev, resource);
|
|
mc_dev->resource = NULL;
|
|
error = 0;
|
|
+out_unlock:
|
|
+ mutex_unlock(&res_pool->mutex);
|
|
out:
|
|
- if (mutex_locked)
|
|
- mutex_unlock(&res_pool->mutex);
|
|
-
|
|
return error;
|
|
}
|
|
|
|
@@ -188,21 +182,19 @@ int __must_check fsl_mc_resource_allocat
|
|
struct fsl_mc_resource *resource;
|
|
struct fsl_mc_device *mc_bus_dev = &mc_bus->mc_dev;
|
|
int error = -EINVAL;
|
|
- bool mutex_locked = false;
|
|
|
|
BUILD_BUG_ON(ARRAY_SIZE(fsl_mc_pool_type_strings) !=
|
|
FSL_MC_NUM_POOL_TYPES);
|
|
|
|
*new_resource = NULL;
|
|
if (WARN_ON(pool_type < 0 || pool_type >= FSL_MC_NUM_POOL_TYPES))
|
|
- goto error;
|
|
+ goto out;
|
|
|
|
res_pool = &mc_bus->resource_pools[pool_type];
|
|
if (WARN_ON(res_pool->mc_bus != mc_bus))
|
|
- goto error;
|
|
+ goto out;
|
|
|
|
mutex_lock(&res_pool->mutex);
|
|
- mutex_locked = true;
|
|
resource = list_first_entry_or_null(&res_pool->free_list,
|
|
struct fsl_mc_resource, node);
|
|
|
|
@@ -212,28 +204,26 @@ int __must_check fsl_mc_resource_allocat
|
|
dev_err(&mc_bus_dev->dev,
|
|
"No more resources of type %s left\n",
|
|
fsl_mc_pool_type_strings[pool_type]);
|
|
- goto error;
|
|
+ goto out_unlock;
|
|
}
|
|
|
|
if (WARN_ON(resource->type != pool_type))
|
|
- goto error;
|
|
+ goto out_unlock;
|
|
if (WARN_ON(resource->parent_pool != res_pool))
|
|
- goto error;
|
|
+ goto out_unlock;
|
|
if (WARN_ON(res_pool->free_count <= 0 ||
|
|
res_pool->free_count > res_pool->max_count))
|
|
- goto error;
|
|
+ goto out_unlock;
|
|
|
|
list_del(&resource->node);
|
|
INIT_LIST_HEAD(&resource->node);
|
|
|
|
res_pool->free_count--;
|
|
+ error = 0;
|
|
+out_unlock:
|
|
mutex_unlock(&res_pool->mutex);
|
|
*new_resource = resource;
|
|
- return 0;
|
|
-error:
|
|
- if (mutex_locked)
|
|
- mutex_unlock(&res_pool->mutex);
|
|
-
|
|
+out:
|
|
return error;
|
|
}
|
|
EXPORT_SYMBOL_GPL(fsl_mc_resource_allocate);
|
|
@@ -241,26 +231,23 @@ EXPORT_SYMBOL_GPL(fsl_mc_resource_alloca
|
|
void fsl_mc_resource_free(struct fsl_mc_resource *resource)
|
|
{
|
|
struct fsl_mc_resource_pool *res_pool;
|
|
- bool mutex_locked = false;
|
|
|
|
res_pool = resource->parent_pool;
|
|
if (WARN_ON(resource->type != res_pool->type))
|
|
- goto out;
|
|
+ return;
|
|
|
|
mutex_lock(&res_pool->mutex);
|
|
- mutex_locked = true;
|
|
if (WARN_ON(res_pool->free_count < 0 ||
|
|
res_pool->free_count >= res_pool->max_count))
|
|
- goto out;
|
|
+ goto out_unlock;
|
|
|
|
if (WARN_ON(!list_empty(&resource->node)))
|
|
- goto out;
|
|
+ goto out_unlock;
|
|
|
|
list_add_tail(&resource->node, &res_pool->free_list);
|
|
res_pool->free_count++;
|
|
-out:
|
|
- if (mutex_locked)
|
|
- mutex_unlock(&res_pool->mutex);
|
|
+out_unlock:
|
|
+ mutex_unlock(&res_pool->mutex);
|
|
}
|
|
EXPORT_SYMBOL_GPL(fsl_mc_resource_free);
|
|
|