linux/drivers/usb/host
Pete Zaitcev 6deb270b5c USB: ohci_hcd hang: submit vs. rmmod race
If we do rmmod ohci_hcd while an application is doing something, the
following may happen:

- a control URB completes (in finish_urb) and the ohci's endpoint is
  set into ED_UNLINK in ed_deschedule
- same URB is (re)submitted because of the open/close loop or other
  such application behaviour
- rmmod sets the state to HC_STATE_QUESCING
- finish_unlinks happens at next SOF; normally it would set ed into
  ED_IDLE and immediately call ed_schedule (since URB had extra TDs
  queued), which sets it into ED_OPER. But the check in ed_schedule
  makes it fail with -EAGAIN (which is ignored)
- from now on we have a dead URB stuck; it cannot even be unlinked
  because the ed status is not ED_OPER, and thus start_ed_unlink is
  not invoked.

This patch removes the check. In 2.6.25, all callers check for
__ACTIVE bit before invoking ed_schedule, which is more appropriate.

Alan Stern and David Brownell approved of this (cautiously).

Signed-off-by: Pete Zaitcev <zaitcev@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2008-07-21 15:16:25 -07:00
..
ehci-au1xxx.c USB: EHCI: suppress unwanted error messages 2008-05-29 13:59:03 -07:00
ehci-dbg.c USB: usb dev_name() instead of dev->bus_id 2008-07-21 15:15:46 -07:00
ehci-fsl.c USB: usb dev_name() instead of dev->bus_id 2008-07-21 15:15:46 -07:00
ehci-fsl.h ehci-fsl: fix cache coherency problem on system with large memory 2007-05-23 20:14:15 -07:00
ehci-hcd.c Revert "USB: EHCI: fix performance regression" 2008-05-29 19:43:27 -07:00
ehci-hub.c USB: EHCI: fix remote-wakeup regression 2008-05-29 13:59:04 -07:00
ehci-ixp4xx.c USB: usb dev_name() instead of dev->bus_id 2008-07-21 15:15:46 -07:00
ehci-mem.c Revert "USB: EHCI cpufreq fix" 2007-08-20 23:38:44 -07:00
ehci-orion.c USB: usb dev_name() instead of dev->bus_id 2008-07-21 15:15:46 -07:00
ehci-pci.c USB: EHCI: suppress unwanted error messages 2008-05-29 13:59:03 -07:00
ehci-ppc-of.c USB: EHCI: suppress unwanted error messages 2008-05-29 13:59:03 -07:00
ehci-ppc-soc.c USB: EHCI: suppress unwanted error messages 2008-05-29 13:59:03 -07:00
ehci-ps3.c USB: usb dev_name() instead of dev->bus_id 2008-07-21 15:15:46 -07:00
ehci-q.c Revert "USB: EHCI: fix performance regression" 2008-05-29 19:43:27 -07:00
ehci-sched.c USB: EHCI: fix bug in Iso scheduling 2008-05-29 13:59:04 -07:00
ehci.h USB: ehci - fix timer regression 2008-07-03 18:20:36 -07:00
isp116x-hcd.c USB: usb dev_name() instead of dev->bus_id 2008-07-21 15:15:46 -07:00
isp116x.h USB: isp116x: fix enumeration on boot 2008-03-04 14:57:43 -08:00
isp1760-hcd.c USB: isp1760-hcd.c: make 2 functions static 2008-07-21 15:15:54 -07:00
isp1760-hcd.h USB: ISP1760 HCD driver 2008-05-02 10:25:50 -07:00
isp1760-if.c USB: usb dev_name() instead of dev->bus_id 2008-07-21 15:15:46 -07:00
Kconfig usb: r8a66597-hcd: Add support for SH7723 USB host 2008-06-09 16:04:12 +09:00
Makefile USB: ISP1760 HCD driver 2008-05-02 10:25:50 -07:00
ohci-at91.c USB: missing usb_put_hcd to ohci-at91 2008-07-21 15:16:24 -07:00
ohci-au1xxx.c Fix name of Russell King in various comments 2008-07-10 18:04:43 -07:00
ohci-dbg.c USB: usb dev_name() instead of dev->bus_id 2008-07-21 15:15:46 -07:00
ohci-ep93xx.c Revert "USB: don't explicitly reenable root-hub status interrupts" 2008-07-06 10:27:25 -07:00
ohci-hcd.c USB: make SA1111 OHCI driver SA11x0 specific 2008-07-21 15:16:24 -07:00
ohci-hub.c Revert "USB: don't explicitly reenable root-hub status interrupts" 2008-07-06 10:27:25 -07:00
ohci-lh7a404.c Fix name of Russell King in various comments 2008-07-10 18:04:43 -07:00
ohci-mem.c USB: OHCI handles more ZFMicro quirks 2007-10-12 14:54:59 -07:00
ohci-omap.c USB: usb dev_name() instead of dev->bus_id 2008-07-21 15:15:46 -07:00
ohci-pci.c Revert "USB: don't explicitly reenable root-hub status interrupts" 2008-07-06 10:27:25 -07:00
ohci-pnx4008.c USB: usb dev_name() instead of dev->bus_id 2008-07-21 15:15:46 -07:00
ohci-pnx8550.c Revert "USB: don't explicitly reenable root-hub status interrupts" 2008-07-06 10:27:25 -07:00
ohci-ppc-of.c USB: ohci-ppc-of: use linux/of_platform.h instead of asm 2008-07-21 15:16:22 -07:00
ohci-ppc-soc.c Revert "USB: don't explicitly reenable root-hub status interrupts" 2008-07-06 10:27:25 -07:00
ohci-ps3.c USB: usb dev_name() instead of dev->bus_id 2008-07-21 15:15:46 -07:00
ohci-pxa27x.c Merge branch 'for-linus' of master.kernel.org:/home/rmk/linux-2.6-arm 2008-07-14 16:06:58 -07:00
ohci-q.c USB: ohci_hcd hang: submit vs. rmmod race 2008-07-21 15:16:25 -07:00
ohci-s3c2410.c Fix name of Russell King in various comments 2008-07-10 18:04:43 -07:00
ohci-sa1111.c Fix name of Russell King in various comments 2008-07-10 18:04:43 -07:00
ohci-sh.c Revert "USB: don't explicitly reenable root-hub status interrupts" 2008-07-06 10:27:25 -07:00
ohci-sm501.c USB: usb dev_name() instead of dev->bus_id 2008-07-21 15:15:46 -07:00
ohci-ssb.c USB: usb dev_name() instead of dev->bus_id 2008-07-21 15:15:46 -07:00
ohci.h USB: convert ohci debug files to use debugfs instead of sysfs 2008-02-01 14:34:52 -08:00
pci-quirks.c USB: replace remaining __FUNCTION__ occurrences 2008-04-24 21:16:55 -07:00
pci-quirks.h
r8a66597-hcd.c drivers/usb annotations and fixes 2008-04-28 10:03:31 -07:00
r8a66597.h USB: r8a66597-hcd: Add support for SH7366 USB host 2008-04-24 21:16:49 -07:00
sl811_cs.c some kmalloc/memset ->kzalloc (tree wide) 2007-07-19 10:04:50 -07:00
sl811-hcd.c USB: usb dev_name() instead of dev->bus_id 2008-07-21 15:15:46 -07:00
sl811.h
u132-hcd.c USB: usb dev_name() instead of dev->bus_id 2008-07-21 15:15:46 -07:00
uhci-debug.c USB: add urb->unlinked field 2007-10-12 14:55:19 -07:00
uhci-hcd.c USB: UHCI: disable remote wakeup when it's not needed 2008-05-02 10:25:57 -07:00
uhci-hcd.h USB: UHCI: disable remote wakeup when it's not needed 2008-05-02 10:25:57 -07:00
uhci-hub.c UHCI: fix port resume problem 2007-03-09 19:52:23 -08:00
uhci-q.c USB: replace remaining __FUNCTION__ occurrences 2008-04-24 21:16:55 -07:00