linux_dsm_epyc7002/drivers/usb/host
Alan Stern b5a3b3d985 ehci-hcd: Bug fix: don't set a QH's Halt bit
This patch (as1453) fixes a long-standing bug in the ehci-hcd driver.

There is no need to set the Halt bit in the overlay region for an
unlinked or blocked QH.  Contrary to what the comment says, setting
the Halt bit does not cause the QH to be patched later; that decision
(made in qh_refresh()) depends only on whether the QH is currently
pointing to a valid qTD.  Likewise, setting the Halt bit does not
prevent completions from activating the QH while it is "stopped"; they
are prevented by the fact that qh_completions() temporarily changes
qh->qh_state to QH_STATE_COMPLETING.

On the other hand, there are circumstances in which the QH will be
reactivated _without_ being patched; this happens after an URB beyond
the head of the queue is unlinked.  Setting the Halt bit will then
cause the hardware to see the QH with both the Active and Halt bits
set, an invalid combination that will prevent the queue from
advancing and may even crash some controllers.

Apparently the only reason this hasn't been reported before is that
unlinking URBs from the middle of a running queue is quite uncommon.
However Test 17, recently added to the usbtest driver, does exactly
this, and it confirms the presence of the bug.

In short, there is no reason to set the Halt bit for an unlinked or
blocked QH, and there is a very good reason not to set it.  Therefore
the code that sets it is removed.

Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Tested-by: Andiry Xu <andiry.xu@amd.com>
CC: David Brownell <david-b@pacbell.net>
CC: <stable@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2011-03-23 13:14:17 -07:00
..
whci USB: whci-hcd: fix compiler warning 2010-12-10 14:18:35 -08:00
ehci-atmel.c ehci-atmel: fix section mismatch warning 2011-03-11 14:18:52 -08:00
ehci-au1xxx.c USB: EHCI: fix scheduling while atomic during suspend 2011-02-03 16:57:43 -08:00
ehci-cns3xxx.c USB: cns3xxx: Add EHCI and OHCI bus glue for cns3xxx SOCs 2010-11-29 18:32:47 +03:00
ehci-dbg.c USB: EHCI: Cleanup and rewrite ehci_vdgb(). 2011-02-04 11:43:58 -08:00
ehci-fsl.c USB: ehci-fsl: Fix 'have_sysif_regs' detection 2011-01-22 18:38:58 -08:00
ehci-fsl.h USB: ehci-fsl: Fix 'have_sysif_regs' detection 2011-01-22 18:38:58 -08:00
ehci-hcd.c Merge branch 'devicetree/next' of git://git.secretlab.ca/git/linux-2.6 2011-03-16 17:28:10 -07:00
ehci-hub.c USB 3.0 Hub Changes 2011-03-13 18:07:11 -07:00
ehci-ixp4xx.c USB: EHCI: use the new clear_tt_buffer interface 2009-07-12 15:16:39 -07:00
ehci-lpm.c USB: Mark EHCI LPM functions as __maybe_unused 2011-02-17 10:47:55 -08:00
ehci-mem.c USB: EHCI: AMD periodic frame list table quirk 2010-11-16 13:36:40 -08:00
ehci-msm.c USB: EHCI: Fix compiler warnings with MSM driver 2011-02-25 11:34:35 -08:00
ehci-mxc.c ARM i.MX ehci: do ehci init in board specific functions 2011-02-11 08:40:45 +01:00
ehci-octeon.c USB: Add EHCI and OHCH glue for OCTEON II SOCs. 2010-10-29 19:08:44 +01:00
ehci-omap.c usb: host: omap: ehci and ohci simplification 2011-03-01 17:02:49 +02:00
ehci-orion.c USB: don't run ehci_reset in ehci_run for tdi device 2011-02-17 10:57:13 -08:00
ehci-pci.c USB host: Move AMD PLL quirk to pci-quirks.c 2011-03-01 16:01:45 -05:00
ehci-pmcmsp.c USB: EHCI bus glue for on-chip PMC MSP USB controller 2011-02-25 11:37:31 -08:00
ehci-ppc-of.c dt/usb: Eliminate users of of_platform_{,un}register_driver 2011-02-28 13:22:45 -07:00
ehci-ps3.c USB: EHCI: use the new clear_tt_buffer interface 2009-07-12 15:16:39 -07:00
ehci-q.c ehci-hcd: Bug fix: don't set a QH's Halt bit 2011-03-23 13:14:17 -07:00
ehci-sched.c USB host: Move AMD PLL quirk to pci-quirks.c 2011-03-01 16:01:45 -05:00
ehci-sh.c usb: ehci-sh: Add missing ehci helpers. 2010-11-26 16:48:31 +09:00
ehci-spear.c USB host: Adding USB ehci & ohci support for spear platform 2010-11-16 13:53:29 -08:00
ehci-tegra.c USB: ehci: tegra: Align DMA transfers to 32 bytes 2011-03-11 14:22:12 -08:00
ehci-vt8500.c usb: Add support for VIA VT8500 and compatibles in EHCI HCD 2010-11-11 06:24:54 -08:00
ehci-w90x900.c usb: Add in missing EHCI helpers. 2010-11-30 16:51:21 -08:00
ehci-xilinx-of.c Merge branch 'devicetree/next' of git://git.secretlab.ca/git/linux-2.6 2011-03-16 17:28:10 -07:00
ehci.h USB host: Move AMD PLL quirk to pci-quirks.c 2011-03-01 16:01:45 -05:00
fhci-dbg.c USB: make hcd.h public (drivers dependency) 2010-05-20 13:21:30 -07:00
fhci-hcd.c dt/usb: Eliminate users of of_platform_{,un}register_driver 2011-02-28 13:22:45 -07:00
fhci-hub.c USB: make hcd.h public (drivers dependency) 2010-05-20 13:21:30 -07:00
fhci-mem.c USB: make hcd.h public (drivers dependency) 2010-05-20 13:21:30 -07:00
fhci-q.c USB: make hcd.h public (drivers dependency) 2010-05-20 13:21:30 -07:00
fhci-sched.c fix comment/printk typos concerning "already" 2010-07-11 21:45:40 +02:00
fhci-tds.c drivers: fix comment typo diable -> disable. 2011-01-03 16:08:59 +01:00
fhci.h USB: FHCI: cq_get() should check kfifo_out()'s return value 2010-05-20 13:21:46 -07:00
fsl-mph-dr-of.c USB: ehci-fsl: Fix 'have_sysif_regs' detection 2011-01-22 18:38:58 -08:00
hwa-hc.c USB: convert usb_hcd bitfields into atomic flags 2010-08-10 14:35:37 -07:00
imx21-dbg.c USB: MXC: Add i.MX21 specific USB host controller driver. 2010-03-02 14:52:55 -08:00
imx21-hcd.c USB 3.0 Hub Changes 2011-03-13 18:07:11 -07:00
imx21-hcd.h USB: imx21-hcd accept arbitary transfer buffer alignement. 2010-10-22 10:22:03 -07:00
isp116x-hcd.c USB 3.0 Hub Changes 2011-03-13 18:07:11 -07:00
isp116x.h USB: add missing KERN_* constants to printks 2009-03-24 16:20:30 -07:00
isp1362-hcd.c USB 3.0 Hub Changes 2011-03-13 18:07:11 -07:00
isp1362.h USB: host: Remove dead CONFIG_ARCH_KARO 2010-08-10 14:35:40 -07:00
isp1760-hcd.c USB 3.0 Hub Changes 2011-03-13 18:07:11 -07:00
isp1760-hcd.h usb/isp1760: Consolidate printouts and remove unused code 2011-02-28 19:23:38 -08:00
isp1760-if.c dt/usb: Eliminate users of of_platform_{,un}register_driver 2011-02-28 13:22:45 -07:00
Kconfig usb: host: Add EHCI driver for NVIDIA Tegra SoCs 2011-03-11 14:22:11 -08:00
Makefile USB: Add EHCI and OHCH glue for OCTEON II SOCs. 2010-10-29 19:08:44 +01:00
octeon2-common.c USB: Add EHCI and OHCH glue for OCTEON II SOCs. 2010-10-29 19:08:44 +01:00
ohci-at91.c USB: ohci-at91: fix power management hanging 2010-04-30 09:25:12 -07:00
ohci-au1xxx.c const: constify remaining dev_pm_ops 2009-12-15 08:53:25 -08:00
ohci-cns3xxx.c USB: cns3xxx: Add EHCI and OHCI bus glue for cns3xxx SOCs 2010-11-29 18:32:47 +03:00
ohci-da8xx.c USB: OHCI: DA8xx/OMAP-L1x: fix up macro rename 2010-04-22 15:18:24 -07:00
ohci-dbg.c llseek: automatically add .llseek fop 2010-10-15 15:53:27 +02:00
ohci-ep93xx.c USB: ohci-ep93xx.c: remove unused variable 2009-09-23 06:46:34 -07:00
ohci-hcd.c Merge branch 'remove' of master.kernel.org:/home/rmk/linux-2.6-arm 2011-03-16 19:05:40 -07:00
ohci-hub.c USB 3.0 Hub Changes 2011-03-13 18:07:11 -07:00
ohci-jz4740.c USB: ohci-jz4740: Fix spelling in MODULE_ALIAS 2010-11-11 07:14:07 -08:00
ohci-mem.c
ohci-octeon.c USB: Add EHCI and OHCH glue for OCTEON II SOCs. 2010-10-29 19:08:44 +01:00
ohci-omap3.c usb: host: omap: ehci and ohci simplification 2011-03-01 17:02:49 +02:00
ohci-omap.c omap: headers: Move remaining headers from include/mach to include/plat 2009-10-20 09:40:47 -07:00
ohci-pci.c USB: OHCI: use pci_dev->revision 2011-03-07 12:15:21 -08:00
ohci-pnx4008.c i2c: Add support for custom probe function 2010-08-11 18:20:56 +02:00
ohci-pnx8550.c USB: automatically enable RHSC interrupts 2008-08-21 10:26:38 -07:00
ohci-ppc-of.c dt/usb: Eliminate users of of_platform_{,un}register_driver 2011-02-28 13:22:45 -07:00
ohci-ppc-soc.c USB: Convert concatenated __FILE__ to %s, __FILE__ 2010-03-02 14:54:59 -08:00
ohci-ps3.c usb/ps3: Add missing annotations 2009-06-16 14:17:32 +10:00
ohci-pxa27x.c ARM: ohci-pxa27x: enable OHCI over U2DC for pxa3xx 2010-10-08 16:21:17 +08:00
ohci-q.c USB host: Move AMD PLL quirk to pci-quirks.c 2011-03-01 16:01:45 -05:00
ohci-s3c2410.c USB: S3C: Move usb-control.h to platform include 2009-03-24 16:20:45 -07:00
ohci-sa1111.c USB: Convert concatenated __FILE__ to %s, __FILE__ 2010-03-02 14:54:59 -08:00
ohci-sh.c usb: ohci-sh: Set IRQ as shared. 2010-11-01 17:01:27 -04:00
ohci-sm501.c USB: ohci-sm501: add iounmap on error path 2010-10-22 10:21:35 -07:00
ohci-spear.c USB host: Adding USB ehci & ohci support for spear platform 2010-11-16 13:53:29 -08:00
ohci-ssb.c USB: Add USB 2.0 to ssb ohci driver 2010-08-10 14:35:44 -07:00
ohci-tmio.c usb: struct device - replace bus_id with dev_name(), dev_set_name() 2009-01-07 09:59:52 -08:00
ohci.h Merge branch 'remove' of master.kernel.org:/home/rmk/linux-2.6-arm 2011-03-16 19:05:40 -07:00
oxu210hp-hcd.c USB 3.0 Hub Changes 2011-03-13 18:07:11 -07:00
oxu210hp.h USB: replace uses of __constant_{endian} 2009-03-24 16:20:33 -07:00
pci-quirks.c USB host: Move AMD PLL quirk to pci-quirks.c 2011-03-01 16:01:45 -05:00
pci-quirks.h USB host: Move AMD PLL quirk to pci-quirks.c 2011-03-01 16:01:45 -05:00
r8a66597-hcd.c USB 3.0 Hub Changes 2011-03-13 18:07:11 -07:00
r8a66597.h usb: r8a66597-hcd: Change mistake of the outsw function 2010-10-22 10:22:11 -07:00
sl811_cs.c pcmcia: move driver name to struct pcmcia_driver 2010-09-29 17:20:24 +02:00
sl811-hcd.c USB 3.0 Hub Changes 2011-03-13 18:07:11 -07:00
sl811.h Rename WARN() to WARNING() to clear the namespace 2008-07-25 10:53:29 -07:00
u132-hcd.c USB 3.0 Hub Changes 2011-03-13 18:07:11 -07:00
uhci-debug.c BKL: remove extraneous #include <smp_lock.h> 2010-11-17 08:59:32 -08:00
uhci-hcd.c usb: host: uhci-hcd.c Remove one to many n's in a word. 2011-02-28 19:19:56 -08:00
uhci-hcd.h USB: UHCI: add support for Intel's wakeup flags 2010-08-10 14:35:38 -07:00
uhci-hub.c USB: controller resume should check the root hub 2010-08-10 14:35:37 -07:00
uhci-q.c USB: host: uhci-q: Fixed minor coding style issues 2010-12-10 14:18:36 -08:00
xhci-dbg.c USB: xhci: mark local functions as static 2011-02-22 17:12:58 -08:00
xhci-ext-caps.h xHCI: prolong host controller halt time limit 2011-03-13 18:07:09 -07:00
xhci-hub.c USB: Remove bogus USB_PORT_STAT_SUPER_SPEED symbol. 2011-03-13 18:23:50 -07:00
xhci-mem.c Merge branch 'usb-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6 2011-03-16 15:04:26 -07:00
xhci-pci.c xhci: Fixes for suspend/resume of shared HCDs. 2011-03-13 18:23:47 -07:00
xhci-ring.c Merge branch 'usb-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6 2011-03-16 15:04:26 -07:00
xhci.c Merge branch 'usb-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6 2011-03-16 15:04:26 -07:00
xhci.h Merge branch 'usb-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6 2011-03-16 15:04:26 -07:00