Messages in this thread Patch in this message | | | From | Ioana Ciornei <> | Subject | [PATCH] bus: fsl-mc: allocate resources when there is no scan in progress | Date | Thu, 21 May 2020 19:12:03 +0300 |
| |
Allocate resources from the fsl-mc bus only when a scan of the bus is not happening. This is useful when functional devices on the bus, such as DPNI, DPSW etc, request some kind of allocatable object but the scan of the bus is still in progress, thus those resources are not yet available. Catch this early and notify the upper layer driver of the condition.
Signed-off-by: Ioana Ciornei <ioana.ciornei@nxp.com> --- drivers/bus/fsl-mc/fsl-mc-allocator.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/drivers/bus/fsl-mc/fsl-mc-allocator.c b/drivers/bus/fsl-mc/fsl-mc-allocator.c index cc7bb900f524..794ddc9589dc 100644 --- a/drivers/bus/fsl-mc/fsl-mc-allocator.c +++ b/drivers/bus/fsl-mc/fsl-mc-allocator.c @@ -184,6 +184,9 @@ int __must_check fsl_mc_resource_allocate(struct fsl_mc_bus *mc_bus, BUILD_BUG_ON(ARRAY_SIZE(fsl_mc_pool_type_strings) != FSL_MC_NUM_POOL_TYPES); + if (!mutex_trylock(&mc_bus->scan_mutex)) + return -ENXIO; + *new_resource = NULL; if (pool_type < 0 || pool_type >= FSL_MC_NUM_POOL_TYPES) goto out; @@ -197,7 +200,7 @@ int __must_check fsl_mc_resource_allocate(struct fsl_mc_bus *mc_bus, struct fsl_mc_resource, node); if (!resource) { - error = -ENXIO; + error = -ENOMEM; dev_err(&mc_bus_dev->dev, "No more resources of type %s left\n", fsl_mc_pool_type_strings[pool_type]); @@ -220,6 +223,7 @@ int __must_check fsl_mc_resource_allocate(struct fsl_mc_bus *mc_bus, mutex_unlock(&res_pool->mutex); *new_resource = resource; out: + mutex_unlock(&mc_bus->scan_mutex); return error; } EXPORT_SYMBOL_GPL(fsl_mc_resource_allocate); -- 2.17.1
| |