linux/drivers/usb/gadget/udc
Roy Luo 399a45e523 usb: gadget: core: flush gadget workqueue after device removal
device_del() can lead to new work being scheduled in gadget->work
workqueue. This is observed, for example, with the dwc3 driver with the
following call stack:
  device_del()
    gadget_unbind_driver()
      usb_gadget_disconnect_locked()
        dwc3_gadget_pullup()
	  dwc3_gadget_soft_disconnect()
	    usb_gadget_set_state()
	      schedule_work(&gadget->work)

Move flush_work() after device_del() to ensure the workqueue is cleaned
up.

Fixes: 5702f75375 ("usb: gadget: udc-core: move sysfs_notify() to a workqueue")
Cc: stable <stable@kernel.org>
Signed-off-by: Roy Luo <royluo@google.com>
Reviewed-by: Alan Stern <stern@rowland.harvard.edu>
Reviewed-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
Link: https://lore.kernel.org/r/20250204233642.666991-1-royluo@google.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2025-02-14 09:25:12 +01:00
..
aspeed-vhub USB: gadget: Use str_enable_disable-like helpers 2025-01-15 18:28:13 +01:00
bdc Merge 6.12-rc3 into usb-next 2024-10-14 08:03:44 +02:00
cdns2 USB: gadget: Use str_enable_disable-like helpers 2025-01-15 18:28:13 +01:00
Kconfig usb: cdns2: Add main part of Cadence USBHS driver 2023-06-13 11:59:29 +02:00
Makefile usb: cdns2: Add main part of Cadence USBHS driver 2023-06-13 11:59:29 +02:00
amd5536udc.h USB: gadget: udc: Remove some dead code 2021-10-10 15:12:34 +02:00
amd5536udc_pci.c usb: gadget: udc: fix NULL dereference in remove() 2023-05-29 15:24:24 +01:00
aspeed_udc.c usb: Switch back to struct platform_driver::remove() 2024-10-04 15:13:03 +02:00
at91_udc.c USB: gadget: Use str_enable_disable-like helpers 2025-01-15 18:28:13 +01:00
at91_udc.h usb: gadget: at91_udc: Convert to GPIO descriptors 2021-11-17 14:41:15 +01:00
atmel_usba_udc.c usb: Switch back to struct platform_driver::remove() 2024-10-04 15:13:03 +02:00
atmel_usba_udc.h
bcm63xx_udc.c usb: Switch back to struct platform_driver::remove() 2024-10-04 15:13:03 +02:00
core.c usb: gadget: core: flush gadget workqueue after device removal 2025-02-14 09:25:12 +01:00
dummy_hcd.c USB: gadget: Use str_enable_disable-like helpers 2025-01-15 18:28:13 +01:00
fsl_qe_udc.c usb: Switch back to struct platform_driver::remove() 2024-10-04 15:13:03 +02:00
fsl_qe_udc.h
fsl_udc_core.c USB: gadget: Use str_enable_disable-like helpers 2025-01-15 18:28:13 +01:00
fsl_usb2_udc.h usb: gadget: fsl-udc: Replace custom log wrappers by dev_{err,warn,dbg,vdbg} 2024-03-05 13:29:03 +00:00
fusb300_udc.c usb: Switch back to struct platform_driver::remove() 2024-10-04 15:13:03 +02:00
fusb300_udc.h
goku_udc.c move asm/unaligned.h to linux/unaligned.h 2024-10-02 17:23:23 -04:00
goku_udc.h
gr_udc.c usb: Switch back to struct platform_driver::remove() 2024-10-04 15:13:03 +02:00
gr_udc.h USB: gr_udc: remove dentry storage for debugfs file 2021-06-02 16:41:00 +02:00
lpc32xx_udc.c usb: Switch back to struct platform_driver::remove() 2024-10-04 15:13:03 +02:00
m66592-udc.c usb: Switch back to struct platform_driver::remove() 2024-10-04 15:13:03 +02:00
m66592-udc.h
max3420_udc.c usb: gadget: max3420_udc: Follow renaming of SPI "master" to "controller" 2024-02-08 11:54:57 +00:00
mv_u3d.h
mv_u3d_core.c usb: Switch back to struct platform_driver::remove() 2024-10-04 15:13:03 +02:00
mv_udc.h
mv_udc_core.c Merge 6.12-rc3 into usb-next 2024-10-14 08:03:44 +02:00
net2272.c Merge 6.12-rc3 into usb-next 2024-10-14 08:03:44 +02:00
net2272.h USB: UDC: Implement udc_async_callbacks in net2272 2021-06-04 13:52:09 +02:00
net2280.c move asm/unaligned.h to linux/unaligned.h 2024-10-02 17:23:23 -04:00
net2280.h USB: UDC: Implement udc_async_callbacks in net2280 2021-06-04 13:52:06 +02:00
omap_udc.c USB: gadget: Use str_enable_disable-like helpers 2025-01-15 18:28:13 +01:00
omap_udc.h
pch_udc.c usb: gadget: pch_udc: fix an Excess kernel-doc warning 2024-01-27 17:41:26 -08:00
pxa25x_udc.c Merge 6.12-rc3 into usb-next 2024-10-14 08:03:44 +02:00
pxa25x_udc.h ARM: pxa: lubbock: pass udc irqs as resource 2022-05-07 22:55:47 +02:00
pxa27x_udc.c USB: gadget: Use str_enable_disable-like helpers 2025-01-15 18:28:13 +01:00
pxa27x_udc.h usb: gadget: pxa27x_udc: clean up comment 2022-04-21 19:20:42 +02:00
r8a66597-udc.c usb: Switch back to struct platform_driver::remove() 2024-10-04 15:13:03 +02:00
r8a66597-udc.h
renesas_usb3.c usb: gadget: udc: renesas_usb3: Fix compiler warning 2025-02-03 16:41:11 +01:00
renesas_usbf.c usb: Switch back to struct platform_driver::remove() 2024-10-04 15:13:03 +02:00
rzv2m_usb3drd.c usb: Switch back to struct platform_driver::remove() 2024-10-04 15:13:03 +02:00
snps_udc_core.c Merge 6.12-rc3 into usb-next 2024-10-14 08:03:44 +02:00
snps_udc_plat.c usb: Switch back to struct platform_driver::remove() 2024-10-04 15:13:03 +02:00
tegra-xudc.c usb: Switch back to struct platform_driver::remove() 2024-10-04 15:13:03 +02:00
trace.c USB: gadget: udc: fix kernel-doc syntax in file headers 2021-05-24 15:27:03 +02:00
trace.h tracing/treewide: Remove second parameter of __assign_str() 2024-05-22 20:14:47 -04:00
udc-xilinx.c usb: Switch back to struct platform_driver::remove() 2024-10-04 15:13:03 +02:00