linux-uconsole/drivers/usb/host
Weitao Wang 23b0711fcd USB: Fix xhci event ring dequeue pointer ERDP update issue
[ Upstream commit e91ac20889 ]

In some situations software handles TRB events slower than adding TRBs.
If the number of TRB events to be processed in a given interrupt is exactly
the same as the event ring size 256, then the local variable
"event_ring_deq" that holds the initial dequeue position is equal to
software_dequeue after handling all 256 interrupts.

It will cause driver to not update ERDP to hardware,

Software dequeue pointer is out of sync with ERDP on interrupt exit.
On the next interrupt, the event ring may full but driver will not
update ERDP as software_dequeue is equal to ERDP.

[  536.377115] xhci_hcd 0000:00:12.0: ERROR unknown event type 37
[  566.933173] sd 8:0:0:0: [sdb] tag#27 uas_eh_abort_handler 0 uas-tag 7 inflight: CMD OUT
[  566.933181] sd 8:0:0:0: [sdb] tag#27 CDB: Write(10) 2a 00 17 71 e6 78 00 00 08 00
[  572.041186] xhci_hcd On some situataions,the0000:00:12.0: xHCI host not responding to stop endpoint command.
[  572.057193] xhci_hcd 0000:00:12.0: Host halt failed, -110
[  572.057196] xhci_hcd 0000:00:12.0: xHCI host controller not responding, assume dead
[  572.057236] sd 8:0:0:0: [sdb] tag#26 uas_eh_abort_handler 0 uas-tag 6 inflight: CMD
[  572.057240] sd 8:0:0:0: [sdb] tag#26 CDB: Write(10) 2a 00 38 eb cc d8 00 00 08 00
[  572.057244] sd 8:0:0:0: [sdb] tag#25 uas_eh_abort_handler 0 uas-tag 5 inflight: CMD

Hardware ERDP is updated mid event handling if there are more than 128
events in an interrupt (half of ring size).
Fix this by updating the software local variable at the same time as
hardware ERDP.

[commit message rewording -Mathias]

Fixes: dc0ffbea57 ("usb: host: xhci: update event ring dequeue pointer on purpose")
Reviewed-by: Peter Chen <peter.chen@kernel.org>
Signed-off-by: Weitao Wang <WeitaoWang-oc@zhaoxin.com>
Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
Link: https://lore.kernel.org/r/20220408134823.2527272-2-mathias.nyman@linux.intel.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2022-05-09 09:05:00 +02:00
..
bcma-hcd.c Revert "USB: bcma: Add a check for devm_gpiod_get" 2021-09-30 10:10:59 +02:00
ehci-atmel.c
ehci-brcm.c usb: ehci: Add new EHCI driver for Broadcom STB SoC's 2020-05-13 14:28:01 +02:00
ehci-dbg.c usb: host: Use fallthrough pseudo-keyword 2020-07-10 08:55:18 +02:00
ehci-exynos.c usb: host: ehci-exynos: Fix error check in exynos_ehci_probe() 2020-06-18 10:40:57 +02:00
ehci-fsl.c usb: host: Use fallthrough pseudo-keyword 2020-07-10 08:55:18 +02:00
ehci-fsl.h USB: host: Use the correct style for SPDX License Identifier 2020-04-16 14:32:46 +02:00
ehci-grlib.c
ehci-hcd.c usb: ehci: handshake CMD_RUN instead of STS_HALT 2021-11-12 14:58:32 +01:00
ehci-hub.c USB: ehci: fix an interrupt calltrace error 2021-01-27 11:55:16 +01:00
ehci-mem.c
ehci-mv.c USB: EHCI: ehci-mv: improve error handling in mv_ehci_enable() 2021-09-18 13:40:19 +02:00
ehci-mxc.c USB: host: ehci-mxc: Add error handling in ehci_mxc_drv_probe() 2020-05-19 15:12:21 +02:00
ehci-npcm7xx.c usb/host: ehci-npcm7xx: Use pm_ptr() macro 2020-09-04 16:54:47 +02:00
ehci-omap.c usb: ehci-omap: Fix PM disable depth umbalance in ehci_hcd_omap_probe 2020-12-30 11:53:44 +01:00
ehci-orion.c usb: ehci-orion: Handle errors of clk_prepare_enable() in probe 2021-09-15 09:50:44 +02:00
ehci-pci.c usb: ehci: add pci device support for Aspeed platforms 2022-04-13 21:00:56 +02:00
ehci-platform.c usb: ehci: handshake CMD_RUN instead of STS_HALT 2021-11-12 14:58:32 +01:00
ehci-pmcmsp.c
ehci-ppc-of.c
ehci-ps3.c
ehci-q.c usb: host: Use fallthrough pseudo-keyword 2020-07-10 08:55:18 +02:00
ehci-sched.c usb: host: ehci-sched: Remove ununsed function tt_start_uframe() 2020-09-14 16:50:24 +02:00
ehci-sh.c
ehci-spear.c usb/host: ehci-spear: Use pm_ptr() macro 2020-09-04 16:54:45 +02:00
ehci-st.c
ehci-sysfs.c
ehci-tegra.c usb: host: ehci-tegra: Fix error handling in tegra_ehci_probe() 2020-10-28 13:23:07 +01:00
ehci-timer.c
ehci-xilinx-of.c
ehci.h usb: ehci: handshake CMD_RUN instead of STS_HALT 2021-11-12 14:58:32 +01:00
fhci-dbg.c
fhci-hcd.c usb: host: fhci-hcd: annotate PIPE_CONTROL switch case with fallthrough 2020-02-19 11:08:52 +01:00
fhci-hub.c
fhci-mem.c
fhci-q.c
fhci-sched.c USB/Thunderbolt patches for 5.9-rc1 2020-08-05 12:13:10 -07:00
fhci-tds.c usb: host: fhci-tds: Remove unused variables 'buf' and 'extra_data' 2020-07-09 17:19:59 +02:00
fhci.h USB: host: Use the correct style for SPDX License Identifier 2020-04-16 14:32:46 +02:00
fotg210-hcd.c usb: host: fotg210: fix the actual_length of an iso packet 2021-09-18 13:40:19 +02:00
fotg210.h usb: host: fotg210: fix the actual_length of an iso packet 2021-09-18 13:40:19 +02:00
fsl-mph-dr-of.c usb: host: fsl-mph-dr-of: check return of dma_set_mask() 2020-10-28 13:19:31 +01:00
imx21-dbg.c
imx21-hcd.c usb: host: imx21-hcd: Demote function header which is clearly not kerneldoc 2020-07-09 17:19:57 +02:00
imx21-hcd.h USB: host: Use the correct style for SPDX License Identifier 2020-04-16 14:32:46 +02:00
isp116x-hcd.c treewide: Use fallthrough pseudo-keyword 2020-08-23 17:36:59 -05:00
isp116x.h
isp1362-hcd.c usb: Use fallthrough pseudo-keyword 2020-07-10 08:55:17 +02:00
isp1362.h usb: host: isp1362: Mark the many unused ISP1362_REG entries as __maybe_unused 2020-07-03 10:18:40 +02:00
Kconfig usb: xhci: fix spelling mistake in Kconfig "firwmare" -> "firmware" 2020-06-18 16:03:46 +02:00
Makefile usb: renesas-xhci: Add the renesas xhci driver 2020-05-15 15:44:35 +02:00
max3421-hcd.c usb: max-3421: Use driver data instead of maintaining a list of bound devices 2021-11-26 10:39:21 +01:00
ohci-at91.c usb: host: ohci-at91: suspend/resume ports after/before OHCI accesses 2021-08-12 13:22:11 +02:00
ohci-da8xx.c
ohci-dbg.c
ohci-exynos.c usb: host: ohci-exynos: Fix error handling in exynos_ohci_probe() 2020-08-27 09:25:58 +02:00
ohci-hcd.c usb: ohci: Make distrust_firmware param default to false 2020-09-14 16:48:26 +02:00
ohci-hub.c USB: OHCI: Use fallthrough pseudo-keyword 2020-07-10 08:55:18 +02:00
ohci-mem.c
ohci-nxp.c
ohci-omap.c usb: ohci-omap: Fix descriptor conversion 2020-12-04 16:03:52 +01:00
ohci-pci.c USB: OHCI: remove obsolete FIXME comment 2020-06-19 08:58:44 +02:00
ohci-platform.c usb/ohci-platform: Fix a warning when hibernating 2020-05-18 18:15:39 +02:00
ohci-ppc-of.c
ohci-ps3.c
ohci-pxa27x.c
ohci-q.c USB: OHCI: Use fallthrough pseudo-keyword 2020-07-10 08:55:18 +02:00
ohci-s3c2410.c usb: host: ohci-s3c2410: Demote obvious misuse of kerneldoc to standard comment block 2020-07-09 16:46:57 +02:00
ohci-sa1111.c
ohci-sm501.c USB: ohci-sm501: Add missed iounmap() in remove 2020-06-18 10:42:53 +02:00
ohci-spear.c
ohci-st.c
ohci-tmio.c usb: host: ohci-tmio: check return value after calling platform_get_resource() 2021-11-26 10:39:10 +01:00
ohci.h usb: host: ohci: Mark cc_to_error as __maybe_unused 2020-07-03 10:18:40 +02:00
oxu210hp-hcd.c usb: oxu210hp-hcd: Fix memory leak in oxu_create 2020-12-30 11:53:44 +01:00
pci-quirks.c usb: pci-quirks: convert to readl_poll_timeout_atomic() 2020-09-25 16:30:05 +02:00
pci-quirks.h
r8a66597-hcd.c usb: host: r8a66597-hcd: Remove set, then over-written, but never used variable 'tmp' 2020-07-09 17:19:57 +02:00
r8a66597.h USB: host: Use the correct style for SPDX License Identifier 2020-04-16 14:32:46 +02:00
sl811-hcd.c usb: sl811-hcd: improve misleading indentation 2021-05-22 11:40:51 +02:00
sl811.h
sl811_cs.c
ssb-hcd.c
u132-hcd.c usb: host: u132-hcd: Remove u132_static_list and list head u132_list 2020-04-16 14:32:46 +02:00
uhci-debug.c
uhci-grlib.c
uhci-hcd.c
uhci-hcd.h
uhci-hub.c
uhci-pci.c usb: hci: add hc_driver as argument for usb_hcd_pci_probe 2020-05-15 15:44:34 +02:00
uhci-platform.c usb: uhci: add aspeed ast2600 uhci support 2022-01-27 10:54:14 +01:00
uhci-q.c
xhci-dbg.c
xhci-dbgcap.c treewide: Use fallthrough pseudo-keyword 2020-08-23 17:36:59 -05:00
xhci-dbgcap.h xhci: dbc: remove tty specific port structure from struct xhci_dbc 2020-07-23 17:05:29 +02:00
xhci-dbgtty.c USB: xhci: dbc: fix tty registration race 2021-10-20 11:44:59 +02:00
xhci-debugfs.c xhci: fix unsafe memory usage in xhci tracing 2021-09-12 08:58:28 +02:00
xhci-debugfs.h usb: xhci: add debugfs support for ep with stream 2020-09-20 16:18:00 +02:00
xhci-ext-caps.c
xhci-ext-caps.h usb: xhci: Increase timeout for HC halt 2021-05-19 10:13:15 +02:00
xhci-histb.c xhci: hisilicon: fix refercence leak in xhci_histb_probe 2020-11-13 14:32:43 +01:00
xhci-hub.c xhci: increase usb U3 -> U0 link resume timeout from 100ms to 500ms 2022-05-09 09:04:57 +02:00
xhci-mem.c xhci: make xhci_handshake timeout for xhci_reset() adjustable 2022-04-08 14:39:49 +02:00
xhci-mtk-sch.c usb: xhci-mtk: improve bandwidth scheduling with TT 2021-05-14 09:49:57 +02:00
xhci-mtk.c usb: xhci-mtk: support quirk to disable usb2 lpm 2021-05-11 14:47:19 +02:00
xhci-mtk.h usb: xhci-mtk: improve bandwidth scheduling with TT 2021-05-14 09:49:57 +02:00
xhci-mvebu.c usb: host: xhci: mvebu: make USB 3.0 PHY optional for Armada 3720 2021-02-10 09:29:10 +01:00
xhci-mvebu.h usb: host: xhci: mvebu: make USB 3.0 PHY optional for Armada 3720 2021-02-10 09:29:10 +01:00
xhci-pci-renesas.c usb: renesas-xhci: Prefer firmware loading on unknown ROM state 2021-09-03 10:09:23 +02:00
xhci-pci.c xhci: Enable runtime PM on second Alderlake controller 2022-05-09 09:04:57 +02:00
xhci-pci.h usb: xhci: make symbols static 2020-05-19 14:11:55 +02:00
xhci-plat.c usb: xhci-plat: fix crash when suspend if remote wake enable 2022-02-01 17:25:41 +01:00
xhci-plat.h usb: host: xhci: mvebu: make USB 3.0 PHY optional for Armada 3720 2021-02-10 09:29:10 +01:00
xhci-rcar.c usb: host: xhci-rcar: Don't reload firmware after the completion 2021-09-12 08:58:28 +02:00
xhci-rcar.h USB: host: Use the correct style for SPDX License Identifier 2020-04-16 14:32:46 +02:00
xhci-ring.c USB: Fix xhci event ring dequeue pointer ERDP update issue 2022-05-09 09:05:00 +02:00
xhci-tegra.c xhci: tegra: Delay for disabling LFPS detector 2021-01-27 11:55:18 +01:00
xhci-trace.c
xhci-trace.h xhci: fix unsafe memory usage in xhci tracing 2021-09-12 08:58:28 +02:00
xhci.c xhci: stop polling roothubs after shutdown 2022-05-09 09:04:57 +02:00
xhci.h xhci: fix uninitialized string returned by xhci_decode_ctrl_ctx() 2022-04-08 14:39:49 +02:00