usb: udc: core: Use lock when write to soft_connect
Use lock to guard against concurrent access for soft-connect/disconnect
operations when writing to soft_connect sysfs.
Fixes: 2ccea03a8f
("usb: gadget: introduce UDC Class")
Cc: stable@vger.kernel.org
Acked-by: Felipe Balbi <balbi@kernel.org>
Signed-off-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
Link: https://lore.kernel.org/r/338ea01fbd69b1985ef58f0f59af02c805ddf189.1610611437.git.Thinh.Nguyen@synopsys.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Родитель
6e6aa61d81
Коммит
c28095bc99
|
@ -1529,10 +1529,13 @@ static ssize_t soft_connect_store(struct device *dev,
|
|||
struct device_attribute *attr, const char *buf, size_t n)
|
||||
{
|
||||
struct usb_udc *udc = container_of(dev, struct usb_udc, dev);
|
||||
ssize_t ret;
|
||||
|
||||
mutex_lock(&udc_lock);
|
||||
if (!udc->driver) {
|
||||
dev_err(dev, "soft-connect without a gadget driver\n");
|
||||
return -EOPNOTSUPP;
|
||||
ret = -EOPNOTSUPP;
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (sysfs_streq(buf, "connect")) {
|
||||
|
@ -1543,10 +1546,14 @@ static ssize_t soft_connect_store(struct device *dev,
|
|||
usb_gadget_udc_stop(udc);
|
||||
} else {
|
||||
dev_err(dev, "unsupported command '%s'\n", buf);
|
||||
return -EINVAL;
|
||||
ret = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
|
||||
return n;
|
||||
ret = n;
|
||||
out:
|
||||
mutex_unlock(&udc_lock);
|
||||
return ret;
|
||||
}
|
||||
static DEVICE_ATTR_WO(soft_connect);
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче