linux/drivers/usb/class
Sebastian Andrzej Siewior 2df6948428 USB: cdc-wdm: don't enable interrupts in USB-giveback
In the code path
  __usb_hcd_giveback_urb()
  -> wdm_in_callback()
   -> service_outstanding_interrupt()

The function service_outstanding_interrupt() will unconditionally enable
interrupts during unlock and invoke usb_submit_urb() with GFP_KERNEL.
If the HCD completes in BH (like ehci does) then the context remains
atomic due local_bh_disable() and enabling interrupts does not change
this.

Defer the error case handling to a workqueue as suggested by Oliver
Neukum. In case of an error the worker performs the read out and wakes
the user.

Fixes: c1da59dad0 ("cdc-wdm: Clear read pipeline in case of error")
Cc: Robert Foss <robert.foss@collabora.com>
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Acked-by: Oliver Neukum <oneukum@suse.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2018-06-28 19:36:07 +09:00
..
cdc-acm.c usb: cdc-acm: use irqsave() in USB's complete callback 2018-06-28 19:36:06 +09:00
cdc-acm.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
cdc-wdm.c USB: cdc-wdm: don't enable interrupts in USB-giveback 2018-06-28 19:36:07 +09:00
Kconfig usb: fix some references for /proc/bus/usb 2017-04-18 16:54:19 +02:00
Makefile USB: add SPDX identifiers to all remaining Makefiles 2017-11-07 15:53:48 +01:00
usblp.c usb: usblp: use irqsave() in USB's complete callback 2018-06-28 19:36:06 +09:00
usbtmc.c usb: usbtmc: Remove rigol_quirk 2018-05-18 15:56:40 +02:00