[PATCH v1 1/2] usb: gadget: udc: simplify udc_lock holding using guards

From: Huisong Li

Date: Sun Apr 19 2026 - 23:57:40 EST


Use guard() and scoped_guard() to manage udc_lock to simplify the code
in gadget_bind_driver() and gadget_unbind_driver().

Signed-off-by: Huisong Li <lihuisong@xxxxxxxxxx>
---
drivers/usb/gadget/udc/core.c | 24 +++++++++++-------------
1 file changed, 11 insertions(+), 13 deletions(-)

diff --git a/drivers/usb/gadget/udc/core.c b/drivers/usb/gadget/udc/core.c
index e8861eaad907..e3f27fb39e9e 100644
--- a/drivers/usb/gadget/udc/core.c
+++ b/drivers/usb/gadget/udc/core.c
@@ -1614,14 +1614,13 @@ static int gadget_bind_driver(struct device *dev)
struct usb_gadget_driver, driver);
int ret = 0;

- mutex_lock(&udc_lock);
- if (driver->is_bound) {
- mutex_unlock(&udc_lock);
- return -ENXIO; /* Driver binds to only one gadget */
+ scoped_guard(mutex, &udc_lock) {
+ /* Driver binds to only one gadget */
+ if (driver->is_bound)
+ return -ENXIO;
+ driver->is_bound = true;
+ udc->driver = driver;
}
- driver->is_bound = true;
- udc->driver = driver;
- mutex_unlock(&udc_lock);

dev_dbg(&udc->dev, "binding gadget driver [%s]\n", driver->function);

@@ -1664,10 +1663,9 @@ static int gadget_bind_driver(struct device *dev)
dev_err(&udc->dev, "failed to start %s: %d\n",
driver->function, ret);

- mutex_lock(&udc_lock);
+ guard(mutex)(&udc_lock);
udc->driver = NULL;
driver->is_bound = false;
- mutex_unlock(&udc_lock);

return ret;
}
@@ -1695,10 +1693,10 @@ static void gadget_unbind_driver(struct device *dev)
usb_gadget_udc_stop_locked(udc);
mutex_unlock(&udc->connect_lock);

- mutex_lock(&udc_lock);
- driver->is_bound = false;
- udc->driver = NULL;
- mutex_unlock(&udc_lock);
+ scoped_guard(mutex, &udc_lock) {
+ driver->is_bound = false;
+ udc->driver = NULL;
+ }

kobject_uevent(&udc->dev.kobj, KOBJ_CHANGE);
}
--
2.33.0