bus: fsl-mc: fsl-mc-allocator: Improve error reporting
authorUwe Kleine-König <u.kleine-koenig@pengutronix.de>
Fri, 10 Mar 2023 22:41:26 +0000 (23:41 +0100)
committerLi Yang <leoyang.li@nxp.com>
Tue, 30 May 2023 23:58:42 +0000 (18:58 -0500)
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>
drivers/bus/fsl-mc/fsl-mc-allocator.c

index e60faf8edaa12251b429ac6990d53cd268d5c4c0..36f70e5e418bfcebed1d57cd09d800f1b0e491f9 100644 (file)
@@ -104,22 +104,30 @@ static int __must_check fsl_mc_resource_pool_remove_device(struct fsl_mc_device
        int error = -EINVAL;
 
        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;
+       }
 
        mc_bus_dev = to_fsl_mc_device(mc_dev->dev.parent);
        mc_bus = to_fsl_mc_bus(mc_bus_dev);
        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;
+       }
 
        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;
+       }
        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;
+       }
 
        /*
         * 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) {
                error = fsl_mc_resource_pool_remove_device(mc_dev);
                if (error < 0)
-                       return error;
+                       return 0;
        }
 
        dev_dbg(&mc_dev->dev,