2
0
mirror of https://github.com/edk2-porting/linux-next.git synced 2024-12-22 20:23:57 +08:00
linux-next/drivers/usb/gadget
Robert Jarzmik 5e23e90f33 USB: pxa27x_udc: Fix deadlocks on request queueing
As reported by Antonio, there are cases where the ep->lock
can be taken twice, triggering a deadlock.
The typical sequence is :
 irq_handler
   \
    -> gadget.complete()
       \
        -> pxa27x_udc.pxa_ep_queue() : ep->lock is taken
           \
            -> gadget.complete()
               \
                -> pxa27x_udc.pxa_ep_queue() : ep->lock is taken
                                               ==> *deadlock*
The patch fixes this by :
 - releasing the lock each time gadget.complete() is called
 - adding a check in handle_ep() to detect a recursive call,
   in which case the function becomes on no-op.

The patch is still not good enough for ep0. For this unique
endpoint, another well thought over patch will be needed.

Reported-by: Antonio Ospite <ospite@studenti.unina.it>
Tested-by: Antonio Ospite <ospite@studenti.unina.it>
Signed-off-by: Robert Jarzmik <robert.jarzmik@free.fr>
Cc: David Brownell <dbrownell@users.sourceforge.net>
Cc: Eric Miao <eric.y.miao@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2010-03-02 14:54:47 -08:00
..
amd5536udc.c usb: amd5536udc: fixed shared interrupt bug and warning oops 2009-11-30 16:43:15 -08:00
amd5536udc.h
at91_udc.c USB: at91_udc.c: use resource_size() 2010-03-02 14:53:17 -08:00
at91_udc.h
atmel_usba_udc.c USB: atmel_usba_udc.c: use resource_size() 2010-03-02 14:53:17 -08:00
atmel_usba_udc.h
audio.c USB: audio gadget: free alsa devices when unloading 2009-12-23 11:34:20 -08:00
cdc2.c USB: replace uses of __constant_{endian} 2009-03-24 16:20:33 -07:00
ci13xxx_udc.c USB: ci13xxx_udc: use helper functions to determine endpoint type and direction 2009-06-15 21:44:41 -07:00
ci13xxx_udc.h USB: gadget: MIPS ci13xxx_udc 2009-01-07 09:59:58 -08:00
composite.c USB: composite: usb_composite_unregister() no longer __exit 2009-12-11 11:55:23 -08:00
config.c
dummy_hcd.c USB: dummy-hcd: accept mismatch between wLength and transfer length 2009-09-23 06:46:30 -07:00
epautoconf.c USB: gadget: add INT support for Blackfin musb 2010-03-02 14:53:28 -08:00
ether.c USB: Correct CONFIG variable typo. 2010-03-02 14:53:40 -08:00
f_acm.c USB: Interface Association Descriptors added to CDC & RNDIS 2009-12-11 11:55:19 -08:00
f_audio.c usb/gadget/{f_audio,gmidi}.c: follow recent changes in audio.h 2010-02-23 12:02:11 +01:00
f_ecm.c USB: replace uses of __constant_{endian} 2009-03-24 16:20:33 -07:00
f_eem.c USB: gadget: fix EEM gadget CRC usage 2010-02-16 15:11:10 -08:00
f_loopback.c headers: utsname.h redux 2009-09-23 18:13:10 -07:00
f_mass_storage.c USB: g_mass_storage: thread_exits callback added 2009-12-11 11:55:23 -08:00
f_obex.c headers: utsname.h redux 2009-09-23 18:13:10 -07:00
f_phonet.c f_phonet: use page-sized rather than MTU-sized RX buffers 2009-08-12 20:44:49 -07:00
f_rndis.c USB: Interface Association Descriptors added to CDC & RNDIS 2009-12-11 11:55:19 -08:00
f_serial.c USB: replace uses of __constant_{endian} 2009-03-24 16:20:33 -07:00
f_sourcesink.c headers: utsname.h redux 2009-09-23 18:13:10 -07:00
f_subset.c USB: replace uses of __constant_{endian} 2009-03-24 16:20:33 -07:00
file_storage.c Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs-2.6 2009-12-11 15:31:13 -08:00
fsl_mx3_udc.c USB: gadget: Add i.MX3x support to the fsl_usb2_udc driver 2009-06-15 21:44:47 -07:00
fsl_qe_udc.c USB gadget: make Open Firmware device id constant 2010-03-02 14:54:18 -08:00
fsl_qe_udc.h powerpc/qe&cpm: Implement static inline stubs for non-QE/CPM builds 2009-11-11 21:43:20 -06:00
fsl_udc_core.c USB: fsl_udc_core: Fix kernel oops on module removal 2009-10-30 14:57:33 -07:00
fsl_usb2_udc.h USB: gadget: Add i.MX3x support to the fsl_usb2_udc driver 2009-06-15 21:44:47 -07:00
g_zero.h USB: gadget: gadget zero uses new suspend/resume hooks 2009-03-24 16:20:45 -07:00
gadget_chips.h usb: gadget: R8A66597 peripheral controller support. 2009-08-20 10:25:30 +09:00
gmidi.c usb/gadget/{f_audio,gmidi}.c: follow recent changes in audio.h 2010-02-23 12:02:11 +01:00
goku_udc.c USB goku_udc: make PCI device id constant 2010-03-02 14:54:19 -08:00
goku_udc.h
imx_udc.c USB: gadget: imx_udc: Use resource size 2009-10-09 13:52:07 -07:00
imx_udc.h USB: imx_udc: Fix IMX UDC gadget general irq handling 2009-03-24 16:20:29 -07:00
inode.c headers: remove sched.h from poll.h 2009-10-04 15:05:10 -07:00
Kconfig USB: gadget: introduce g_nokia gadget driver 2010-03-02 14:54:02 -08:00
langwell_udc.c headers: smp_lock.h redux 2009-07-12 12:22:34 -07:00
langwell_udc.h USB: Add Intel Langwell USB Device Controller driver 2009-06-15 21:44:47 -07:00
lh7a40x_udc.c USB: add missing KERN_* constants to printks 2009-03-24 16:20:30 -07:00
lh7a40x_udc.h
m66592-udc.c usb: gadget: m66592-udc needs linux/err.h. 2009-08-24 22:45:15 +09:00
m66592-udc.h usb: m66592-udc platform data on_chip support 2009-07-23 13:04:15 +09:00
Makefile USB: gadget: introduce g_nokia gadget driver 2010-03-02 14:54:02 -08:00
mass_storage.c USB: g_mass_storage: thread_exits callback added 2009-12-11 11:55:23 -08:00
multi.c USB: g_multi: fix CONFIG_USB_G_MULTI_RNDIS usage 2010-02-16 15:11:08 -08:00
ndis.h
net2280.c USB: replace uses of __constant_{endian} 2009-03-24 16:20:33 -07:00
net2280.h
nokia.c USB: gadget: introduce g_nokia gadget driver 2010-03-02 14:54:02 -08:00
omap_udc.c omap1: omap_udc: Add clocking and disable vbus sense for omap7xx 2009-11-22 10:24:32 -08:00
omap_udc.h
printer.c const: constify remaining file_operations 2009-10-01 16:11:11 -07:00
pxa25x_udc.c USB: gadget: pxa25x: basic transceiver support 2009-09-23 06:46:23 -07:00
pxa25x_udc.h USB: gadget: pxa25x: basic transceiver support 2009-09-23 06:46:23 -07:00
pxa27x_udc.c USB: pxa27x_udc: Fix deadlocks on request queueing 2010-03-02 14:54:47 -08:00
pxa27x_udc.h USB: pxa27x_udc: Fix deadlocks on request queueing 2010-03-02 14:54:47 -08:00
r8a66597-udc.c USB: r8a66597-udc: Prototype IS_ERR() and PTR_ERR() 2010-02-16 15:11:03 -08:00
r8a66597-udc.h usb: r8a66597-udc unaligned fifo fix 2009-10-06 10:59:03 +09:00
rndis.c USB: gadget: Add EEM gadget driver 2009-09-23 06:46:35 -07:00
rndis.h USB: gadget: Add EEM gadget driver 2009-09-23 06:46:35 -07:00
s3c2410_udc.c USB: s3c2410: unregister should call unbind, not disconnect 2009-09-23 06:46:35 -07:00
s3c2410_udc.h
s3c-hsotg.c USB: s3c-hsotg: replace deprecated dma_sync_single() 2010-03-02 14:54:46 -08:00
serial.c USB: replace uses of __constant_{endian} 2009-03-24 16:20:33 -07:00
storage_common.c USB: g_mass_storage: code cleaned up and comments updated 2009-12-11 11:55:22 -08:00
u_audio.c USB: audio gadget: free alsa devices when unloading 2009-12-23 11:34:20 -08:00
u_audio.h USB: audio gadget: free alsa devices when unloading 2009-12-23 11:34:20 -08:00
u_ether.c USB: gadget: Add DEVTYPE support for Ethernet functions 2010-03-02 14:54:33 -08:00
u_ether.h USB: Added USB_ETH_RNDIS to use instead of CONFIG_USB_ETH_RNDIS 2009-12-11 11:55:27 -08:00
u_phonet.h Phonet: USB CDC Phonet function for gadget framework 2008-12-17 15:49:09 -08:00
u_serial.c USB: double put_tty_driver(gs_tty_driver) in gserial_setup() 2009-09-23 06:46:37 -07:00
u_serial.h
usbstring.c USB: Gadget: fix UTF conversion in the usbstring library 2009-05-08 19:34:56 -07:00
zero.c USB: gadget: gadget zero uses new suspend/resume hooks 2009-03-24 16:20:45 -07:00