mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-24 20:54:10 +08:00
bus: fsl-mc: fsl-mc-allocator: Improve error reporting
Instead of silently returning an error in the remove callback (which yields a generic and little informing error message), annotate each error path of fsl_mc_resource_pool_remove_device() with an error message and return zero in the remove callback to suppress the error message. Note that changing the return value has no other effect than suppressing the error message by the fsl_mc bus driver. Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> Reviewed-by: Ioana Ciornei <ioana.ciornei@nxp.com> Tested-by: Ioana Ciornei <ioana.ciornei@nxp.com> # sanity checks Reviewed-by: Laurentiu Tudor <laurentiu.tudor@nxp.com> Tested-by: Laurentiu Tudor <laurentiu.tudor@nxp.com> Signed-off-by: Li Yang <leoyang.li@nxp.com>
This commit is contained in:
parent
e0ac89361c
commit
b3134039c5
@ -104,22 +104,30 @@ static int __must_check fsl_mc_resource_pool_remove_device(struct fsl_mc_device
|
|||||||
int error = -EINVAL;
|
int error = -EINVAL;
|
||||||
|
|
||||||
resource = mc_dev->resource;
|
resource = mc_dev->resource;
|
||||||
if (!resource || resource->data != mc_dev)
|
if (!resource || resource->data != mc_dev) {
|
||||||
|
dev_err(&mc_bus_dev->dev, "resource mismatch\n");
|
||||||
goto out;
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
mc_bus_dev = to_fsl_mc_device(mc_dev->dev.parent);
|
mc_bus_dev = to_fsl_mc_device(mc_dev->dev.parent);
|
||||||
mc_bus = to_fsl_mc_bus(mc_bus_dev);
|
mc_bus = to_fsl_mc_bus(mc_bus_dev);
|
||||||
res_pool = resource->parent_pool;
|
res_pool = resource->parent_pool;
|
||||||
if (res_pool != &mc_bus->resource_pools[resource->type])
|
if (res_pool != &mc_bus->resource_pools[resource->type]) {
|
||||||
|
dev_err(&mc_bus_dev->dev, "pool mismatch\n");
|
||||||
goto out;
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
mutex_lock(&res_pool->mutex);
|
mutex_lock(&res_pool->mutex);
|
||||||
|
|
||||||
if (res_pool->max_count <= 0)
|
if (res_pool->max_count <= 0) {
|
||||||
|
dev_err(&mc_bus_dev->dev, "max_count underflow\n");
|
||||||
goto out_unlock;
|
goto out_unlock;
|
||||||
|
}
|
||||||
if (res_pool->free_count <= 0 ||
|
if (res_pool->free_count <= 0 ||
|
||||||
res_pool->free_count > res_pool->max_count)
|
res_pool->free_count > res_pool->max_count) {
|
||||||
|
dev_err(&mc_bus_dev->dev, "free_count mismatch\n");
|
||||||
goto out_unlock;
|
goto out_unlock;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If the device is currently allocated, its resource is not
|
* If the device is currently allocated, its resource is not
|
||||||
@ -613,7 +621,7 @@ static int fsl_mc_allocator_remove(struct fsl_mc_device *mc_dev)
|
|||||||
if (mc_dev->resource) {
|
if (mc_dev->resource) {
|
||||||
error = fsl_mc_resource_pool_remove_device(mc_dev);
|
error = fsl_mc_resource_pool_remove_device(mc_dev);
|
||||||
if (error < 0)
|
if (error < 0)
|
||||||
return error;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
dev_dbg(&mc_dev->dev,
|
dev_dbg(&mc_dev->dev,
|
||||||
|
Loading…
Reference in New Issue
Block a user