OpenCloudOS-Kernel/drivers/usb/host
Michal Pecio f5e7ffa926 xhci: handle isoc Babble and Buffer Overrun events properly
commit 7c4650ded49e5b88929ecbbb631efb8b0838e811 upstream.

xHCI 4.9 explicitly forbids assuming that the xHC has released its
ownership of a multi-TRB TD when it reports an error on one of the
early TRBs. Yet the driver makes such assumption and releases the TD,
allowing the remaining TRBs to be freed or overwritten by new TDs.

The xHC should also report completion of the final TRB due to its IOC
flag being set by us, regardless of prior errors. This event cannot
be recognized if the TD has already been freed earlier, resulting in
"Transfer event TRB DMA ptr not part of current TD" error message.

Fix this by reusing the logic for processing isoc Transaction Errors.
This also handles hosts which fail to report the final completion.

Fix transfer length reporting on Babble errors. They may be caused by
device malfunction, no guarantee that the buffer has been filled.

Signed-off-by: Michal Pecio <michal.pecio@gmail.com>
Cc: stable@vger.kernel.org
Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
Link: https://lore.kernel.org/r/20240125152737.2983959-5-mathias.nyman@linux.intel.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2024-02-16 19:10:55 +01:00
..
Kconfig usb: add HAS_IOPORT dependencies 2023-05-29 15:28:34 +01:00
Makefile usb: host: u132-hcd: Delete driver 2023-03-21 14:06:11 +01:00
bcma-hcd.c USB: bcma: Make GPIO explicitly optional 2022-11-08 16:39:56 +01:00
ehci-atmel.c usb: host: Do not check for 0 return after calling platform_get_irq() 2023-08-04 14:46:53 +02:00
ehci-brcm.c usb: host: Do not check for 0 return after calling platform_get_irq() 2023-08-04 14:46:53 +02:00
ehci-dbg.c
ehci-exynos.c usb: ehci-exynos: Use devm_platform_get_and_ioremap_resource() 2023-07-27 10:24:11 +02:00
ehci-fsl.c usb: ehci-fsl: Use devm_platform_get_and_ioremap_resource() 2023-07-27 10:24:10 +02:00
ehci-fsl.h
ehci-grlib.c usb: ehci-grlib: Convert to platform remove callback returning void 2023-05-28 12:36:28 +01:00
ehci-hcd.c usb: ehci: add workaround for chipidea PORTSC.PEC bug 2023-08-09 14:16:06 +02:00
ehci-hub.c usb: ehci: add workaround for chipidea PORTSC.PEC bug 2023-08-09 14:16:06 +02:00
ehci-mem.c
ehci-mv.c usb: ehci-mv: Use devm_platform_get_and_ioremap_resource() 2023-07-27 10:24:11 +02:00
ehci-npcm7xx.c usb: ehci-npcm7xx: Use devm_platform_get_and_ioremap_resource() 2023-07-27 10:24:10 +02:00
ehci-omap.c usb: ehci-omap: Use devm_platform_get_and_ioremap_resource() 2023-07-27 10:24:10 +02:00
ehci-orion.c usb: host: Do not check for 0 return after calling platform_get_irq() 2023-08-04 14:46:53 +02:00
ehci-pci.c USB: Extend pci resume function to handle PM events 2023-05-13 17:33:18 +09:00
ehci-platform.c usb: ehci-platform: Use devm_platform_get_and_ioremap_resource() 2023-07-27 10:24:09 +02:00
ehci-ppc-of.c usb: ehci-ppc-of: Convert to platform remove callback returning void 2023-05-28 12:36:29 +01:00
ehci-ps3.c
ehci-q.c usb: ehci: Use endpoint in URB to get maxpacket 2022-08-31 09:07:53 +02:00
ehci-sched.c usb: host: ehci-sched: try to turn on io watchdog as long as periodic_count > 0 2023-08-12 10:03:22 +02:00
ehci-sh.c usb: host: Do not check for 0 return after calling platform_get_irq() 2023-08-04 14:46:53 +02:00
ehci-spear.c usb: ehci-spear: Use devm_platform_get_and_ioremap_resource() 2023-07-27 10:24:09 +02:00
ehci-st.c usb: ehci-st: Use devm_platform_get_and_ioremap_resource() 2023-07-27 10:24:11 +02:00
ehci-sysfs.c
ehci-timer.c
ehci-xilinx-of.c usb: ehci-xilinx-of: Convert to platform remove callback returning void 2023-05-28 12:36:29 +01:00
ehci.h usb: ehci: add workaround for chipidea PORTSC.PEC bug 2023-08-09 14:16:06 +02:00
fhci-dbg.c
fhci-hcd.c usb: Explicitly include correct DT includes 2023-07-25 18:20:02 +02:00
fhci-hub.c USB: FHCI: Switch to GPIO descriptors 2022-09-01 16:08:29 +02:00
fhci-mem.c
fhci-q.c
fhci-sched.c
fhci-tds.c
fhci.h USB: FHCI: Switch to GPIO descriptors 2022-09-01 16:08:29 +02:00
fsl-mph-dr-of.c usb: Explicitly include correct DT includes 2023-07-25 18:20:02 +02:00
isp116x-hcd.c usb: isp116x-hcd: Convert to platform remove callback returning void 2023-05-28 12:36:29 +01:00
isp116x.h
isp1362-hcd.c usb: isp1362-hcd: Use devm_platform_get_and_ioremap_resource() 2023-07-27 10:24:09 +02:00
isp1362.h
max3421-hcd.c usb: host: max3421-hcd: drop of_match_ptr for ID table 2023-03-16 12:15:23 +01:00
octeon-hcd.c usb: octeon-hcd: Convert to platform remove callback returning void 2023-05-28 12:36:30 +01:00
octeon-hcd.h staging: octeon-usb: move driver out of staging 2022-06-21 16:43:37 +02:00
ohci-at91.c usb: ohci-at91: Fix the unhandle interrupt when resume 2023-07-30 13:26:09 +02:00
ohci-da8xx.c usb: ohci-da8xx: Use devm_platform_get_and_ioremap_resource() 2023-07-27 10:24:09 +02:00
ohci-dbg.c
ohci-exynos.c usb: ohci-exynos: Use devm_platform_get_and_ioremap_resource() 2023-07-27 10:24:10 +02:00
ohci-hcd.c usb: remove ohci-tmio driver 2023-02-01 17:23:38 +01:00
ohci-hub.c
ohci-mem.c
ohci-nxp.c usb: ohci-nxp: Use devm_platform_get_and_ioremap_resource() 2023-07-27 10:24:10 +02:00
ohci-omap.c usb: ohci-omap: Convert to platform remove callback returning void 2023-05-28 12:36:30 +01:00
ohci-pci.c USB: Extend pci resume function to handle PM events 2023-05-13 17:33:18 +09:00
ohci-platform.c usb: host: ohci-platform: Use devm_platform_get_and_ioremap_resource() 2023-07-27 10:24:09 +02:00
ohci-ppc-of.c usb: Explicitly include correct DT includes 2023-07-25 18:20:02 +02:00
ohci-ps3.c
ohci-pxa27x.c usb: ohci-pxa27x: Use devm_platform_get_and_ioremap_resource() 2023-07-27 10:24:10 +02:00
ohci-q.c
ohci-s3c2410.c usb: ohci-s3c2410: Convert to platform remove callback returning void 2023-05-28 12:36:31 +01:00
ohci-sa1111.c ARM: sa1100: remove unused board files 2023-01-12 10:53:12 +01:00
ohci-sm501.c USB: ohci-sm501: remove unnecessary check of mem 2023-08-12 10:03:16 +02:00
ohci-spear.c usb: ohci-spear: Use devm_platform_get_and_ioremap_resource() 2023-07-27 10:24:10 +02:00
ohci-st.c usb: ohci-st: Use devm_platform_get_and_ioremap_resource() 2023-07-27 10:24:11 +02:00
ohci.h
oxu210hp-hcd.c usb: oxu210hp-hcd: Use devm_platform_get_and_ioremap_resource() 2023-07-27 10:24:10 +02:00
pci-quirks.c usb: pci-quirks: Reduce the length of a spinlock section in usb_amd_find_chipset_info() 2023-03-29 09:02:19 +02:00
pci-quirks.h
r8a66597-hcd.c usb: r8a66597-hcd: Convert to platform remove callback returning void 2023-05-28 12:36:31 +01:00
r8a66597.h
sl811-hcd.c usb: sl811-hcd: Convert to platform remove callback returning void 2023-05-28 12:36:32 +01:00
sl811.h
sl811_cs.c
ssb-hcd.c
uhci-debug.c
uhci-grlib.c usb: uhci-grlib: Convert to platform remove callback returning void 2023-05-28 12:36:32 +01:00
uhci-hcd.c usb: uhci: handle HAS_IOPORT dependencies 2023-05-29 15:29:03 +01:00
uhci-hcd.h usb: uhci: handle HAS_IOPORT dependencies 2023-05-29 15:29:03 +01:00
uhci-hub.c
uhci-pci.c Merge 6.4-rc4 into usb-next 2023-05-28 15:25:53 +01:00
uhci-platform.c usb: uhci-platform: Use devm_platform_get_and_ioremap_resource() 2023-07-27 10:24:11 +02:00
uhci-q.c
xen-hcd.c xen: make remove callback of xen driver void returned 2022-12-15 16:06:10 +01:00
xhci-dbg.c
xhci-dbgcap.c xhci: dbc: Provide sysfs option to configure dbc descriptors 2023-03-23 17:25:22 +01:00
xhci-dbgcap.h xhci: dbc: Provide sysfs option to configure dbc descriptors 2023-03-23 17:25:22 +01:00
xhci-dbgtty.c tty: make tty_operations::write()'s count size_t 2023-08-11 21:12:46 +02:00
xhci-debugfs.c xhci: fix debugfs register accesses while suspended 2023-04-20 10:13:06 +02:00
xhci-debugfs.h
xhci-ext-caps.c
xhci-ext-caps.h
xhci-histb.c xhci: get rid of XHCI_PLAT quirk that used to prevent MSI setup 2023-06-13 11:34:50 +02:00
xhci-hub.c xhci: track port suspend state correctly in unsuccessful resume cases 2023-10-02 16:33:46 +02:00
xhci-mem.c xhci: Preserve RsvdP bits in ERSTBA register correctly 2023-10-02 16:33:46 +02:00
xhci-mtk-sch.c usb: xhci-mtk: fix bandwidth release issue 2022-08-19 10:39:08 +02:00
xhci-mtk.c usb: xhci-mtk: fix a short packet issue of gen1 isoc-in transfer 2024-01-25 15:35:54 -08:00
xhci-mtk.h usb: xhci-mtk: fix a short packet issue of gen1 isoc-in transfer 2024-01-25 15:35:54 -08:00
xhci-mvebu.c usb: host: xhci: mvebu: Iterate over array indexes instead of using pointer math 2023-02-06 13:46:42 +01:00
xhci-mvebu.h
xhci-pci-renesas.c usb: renesas-xhci: Do not print any log while fw verif success 2022-07-27 14:37:48 +02:00
xhci-pci.c Revert "xhci: Loosen RPM as default policy to cover for AMD xHC 1.1" 2023-12-13 18:45:32 +01:00
xhci-pci.h
xhci-plat.c usb: host: xhci-plat: Add support for XHCI_SG_TRB_CACHE_SIZE_QUIRK 2024-02-16 19:10:55 +01:00
xhci-plat.h usb: xhci-plat: Convert to platform remove callback returning void 2023-05-30 15:27:17 +01:00
xhci-rcar.c usb: Explicitly include correct DT includes 2023-07-25 18:20:02 +02:00
xhci-ring.c xhci: handle isoc Babble and Buffer Overrun events properly 2024-02-16 19:10:55 +01:00
xhci-rzv2m.c xhci: host: Add Renesas RZ/V2M SoC support 2023-01-25 15:48:17 +01:00
xhci-rzv2m.h xhci: host: Add Renesas RZ/V2M SoC support 2023-01-25 15:48:17 +01:00
xhci-tegra.c Merge 6.5-rc4 into usb-next 2023-07-31 09:36:55 +02:00
xhci-trace.c xhci: Move functions to setup msi to xhci-pci 2023-03-23 17:25:22 +01:00
xhci-trace.h xhci: Stop unnecessary tracking of free trbs in a ring 2023-06-13 11:34:50 +02:00
xhci.c usb: host: xhci: Avoid XHCI resume delay if SSUSB device is not present 2023-11-28 17:19:45 +00:00
xhci.h xhci: process isoc TD properly when there was a transaction error mid TD. 2024-02-16 19:10:55 +01:00