Skip to content

Commit 5c7d3b4

Browse files
committed
Revert "USB: gadget core: Issue ->disconnect() callback from usb_gadget_disconnect()"
This reverts commit 0a55187. The commit triggers the following warning when removing a gadget module from the kernel: WARNING: CPU: 0 PID: 462 at drivers/usb/gadget/composite.c:2030 __composite_unbind+0xcc/0xd0 [libcomposite] Modules linked in: cfg80211 usb_f_acm u_serial g_serial libcomposite atmel_usba_udc(-) CPU: 0 PID: 462 Comm: rmmod Not tainted 5.4.32-linux4sam-2020.04-rc2 #1 Hardware name: Atmel SAMA5 [<c010da74>] (unwind_backtrace) from [<c010ae84>] (show_stack+0x10/0x14) [<c010ae84>] (show_stack) from [<c011822c>] (__warn+0xb8/0xd0) [<c011822c>] (__warn) from [<c01182f4>] (warn_slowpath_fmt+0xb0/0xb8) [<c01182f4>] (warn_slowpath_fmt) from [<bf00b514>] (__composite_unbind+0xcc/0xd0 [libcomposite]) [<bf00b514>] (__composite_unbind [libcomposite]) from [<c0546988>] (usb_gadget_remove_driver+0x2c/0x54) [<c0546988>] (usb_gadget_remove_driver) from [<c0546a8c>] (usb_del_gadget_udc+0x58/0xbc) [<c0546a8c>] (usb_del_gadget_udc) from [<bf000840>] (usba_udc_remove+0x1c/0x24 [atmel_usba_udc]) [<bf000840>] (usba_udc_remove [atmel_usba_udc]) from [<c047c734>] (platform_drv_remove+0x20/0x40) [<c047c734>] (platform_drv_remove) from [<c047b1bc>] (device_release_driver_internal+0xe8/0x1b8) [<c047b1bc>] (device_release_driver_internal) from [<c047b2dc>] (driver_detach+0x38/0x60) [<c047b2dc>] (driver_detach) from [<c0479edc>] (bus_remove_driver+0x4c/0xa0) [<c0479edc>] (bus_remove_driver) from [<c016fbe0>] (sys_delete_module+0x164/0x204) [<c016fbe0>] (sys_delete_module) from [<c0101000>] (ret_fast_syscall+0x0/0x54) Exception stack(0xd5557fa8 to 0xd5557ff0) 7fa0: 00000000 00000002 0044f184 00000800 f92b1100 beadabbc 7fc0: 00000000 00000002 beadac10 00000081 00000000 beadadfc 0044f148 00000001 7fe0: 0044cf70 beadabc4 004336fb b6e63668 There is no functionity issue related to this warning.
1 parent 5f75839 commit 5c7d3b4

1 file changed

Lines changed: 3 additions & 6 deletions

File tree

drivers/usb/gadget/udc/core.c

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -701,9 +701,6 @@ EXPORT_SYMBOL_GPL(usb_gadget_connect);
701701
* as a disconnect (when a VBUS session is active). Not all systems
702702
* support software pullup controls.
703703
*
704-
* Following a successful disconnect, invoke the ->disconnect() callback
705-
* for the current gadget driver so that UDC drivers don't need to.
706-
*
707704
* Returns zero on success, else negative errno.
708705
*/
709706
int usb_gadget_disconnect(struct usb_gadget *gadget)
@@ -725,10 +722,8 @@ int usb_gadget_disconnect(struct usb_gadget *gadget)
725722
}
726723

727724
ret = gadget->ops->pullup(gadget, 0);
728-
if (!ret) {
725+
if (!ret)
729726
gadget->connected = 0;
730-
gadget->udc->driver->disconnect(gadget);
731-
}
732727

733728
out:
734729
trace_usb_gadget_disconnect(gadget, ret);
@@ -1297,6 +1292,7 @@ static void usb_gadget_remove_driver(struct usb_udc *udc)
12971292
kobject_uevent(&udc->dev.kobj, KOBJ_CHANGE);
12981293

12991294
usb_gadget_disconnect(udc->gadget);
1295+
udc->driver->disconnect(udc->gadget);
13001296
udc->driver->unbind(udc->gadget);
13011297
usb_gadget_udc_stop(udc);
13021298

@@ -1486,6 +1482,7 @@ static ssize_t soft_connect_store(struct device *dev,
14861482
usb_gadget_connect(udc->gadget);
14871483
} else if (sysfs_streq(buf, "disconnect")) {
14881484
usb_gadget_disconnect(udc->gadget);
1485+
udc->driver->disconnect(udc->gadget);
14891486
usb_gadget_udc_stop(udc);
14901487
} else {
14911488
dev_err(dev, "unsupported command '%s'\n", buf);

0 commit comments

Comments
 (0)