Messages in this thread Patch in this message | | | From | Abhijit Gangurde <> | Subject | [PATCH v5 2/5] cdx: Introduce lock to protect controller ops | Date | Fri, 22 Sep 2023 15:48:25 +0530 |
| |
Add a mutex lock to prevent race between controller ops initiated by the bus subsystem and the controller registration/unregistration.
Signed-off-by: Abhijit Gangurde <abhijit.gangurde@amd.com> --- Changes in v5: - None
Changes in v4: - None
Changes in v3: - None
Changes in v2: - New patch in the series - Introduce new lock
drivers/cdx/cdx.c | 12 ++++++++++++ 1 file changed, 12 insertions(+)
diff --git a/drivers/cdx/cdx.c b/drivers/cdx/cdx.c index 600482694161..cbfe9a2f3646 100644 --- a/drivers/cdx/cdx.c +++ b/drivers/cdx/cdx.c @@ -72,6 +72,8 @@ /* IDA for CDX controllers registered with the CDX bus */ static DEFINE_IDA(cdx_controller_ida); +/* Lock to protect controller ops */ +static DEFINE_MUTEX(cdx_controller_lock); static char *compat_node_name = "xlnx,versal-net-cdx"; @@ -396,6 +398,8 @@ static ssize_t rescan_store(const struct bus_type *bus, if (!val) return -EINVAL; + mutex_lock(&cdx_controller_lock); + /* Unregister all the devices on the bus */ cdx_unregister_devices(&cdx_bus_type); @@ -415,6 +419,8 @@ static ssize_t rescan_store(const struct bus_type *bus, put_device(&pd->dev); } + mutex_unlock(&cdx_controller_lock); + return count; } static BUS_ATTR_WO(rescan); @@ -538,11 +544,13 @@ int cdx_register_controller(struct cdx_controller *cdx) return ret; } + mutex_lock(&cdx_controller_lock); cdx->id = ret; /* Scan all the devices */ cdx->ops->scan(cdx); cdx->controller_registered = true; + mutex_unlock(&cdx_controller_lock); return 0; } @@ -553,9 +561,13 @@ void cdx_unregister_controller(struct cdx_controller *cdx) if (cdx->id >= MAX_CDX_CONTROLLERS) return; + mutex_lock(&cdx_controller_lock); + cdx->controller_registered = false; device_for_each_child(cdx->dev, NULL, cdx_unregister_device); ida_free(&cdx_controller_ida, cdx->id); + + mutex_unlock(&cdx_controller_lock); } EXPORT_SYMBOL_GPL(cdx_unregister_controller); -- 2.25.1
| |