linux/drivers/usb/dwc3
Badhri Jagan Sridharan 35db1f1829 usb: dwc3: gadget: Prevent irq storm when TH re-executes
commit 69c58deec1 upstream.

While commit d325a1de49 ("usb: dwc3: gadget: Prevent losing events in
event cache") makes sure that top half(TH) does not end up overwriting the
cached events before processing them when the TH gets invoked more than one
time, returning IRQ_HANDLED results in occasional irq storm where the TH
hogs the CPU. The irq storm can be prevented by the flag before event
handler busy is cleared. Default enable interrupt moderation in all
versions which support them.

ftrace event stub during dwc3 irq storm:
    irq/504_dwc3-1111  ( 1111) [000] .... 70.000866: irq_handler_exit: irq=14 ret=handled
    irq/504_dwc3-1111  ( 1111) [000] .... 70.000872: irq_handler_entry: irq=504 name=dwc3
    irq/504_dwc3-1111  ( 1111) [000] .... 70.000874: irq_handler_exit: irq=504 ret=handled
    irq/504_dwc3-1111  ( 1111) [000] .... 70.000881: irq_handler_entry: irq=504 name=dwc3
    irq/504_dwc3-1111  ( 1111) [000] .... 70.000883: irq_handler_exit: irq=504 ret=handled
    irq/504_dwc3-1111  ( 1111) [000] .... 70.000889: irq_handler_entry: irq=504 name=dwc3
    irq/504_dwc3-1111  ( 1111) [000] .... 70.000892: irq_handler_exit: irq=504 ret=handled
    irq/504_dwc3-1111  ( 1111) [000] .... 70.000898: irq_handler_entry: irq=504 name=dwc3
    irq/504_dwc3-1111  ( 1111) [000] .... 70.000901: irq_handler_exit: irq=504 ret=handled
    irq/504_dwc3-1111  ( 1111) [000] .... 70.000907: irq_handler_entry: irq=504 name=dwc3
    irq/504_dwc3-1111  ( 1111) [000] .... 70.000909: irq_handler_exit: irq=504 ret=handled
    irq/504_dwc3-1111  ( 1111) [000] .... 70.000915: irq_handler_entry: irq=504 name=dwc3
    irq/504_dwc3-1111  ( 1111) [000] .... 70.000918: irq_handler_exit: irq=504 ret=handled
    irq/504_dwc3-1111  ( 1111) [000] .... 70.000924: irq_handler_entry: irq=504 name=dwc3
    irq/504_dwc3-1111  ( 1111) [000] .... 70.000927: irq_handler_exit: irq=504 ret=handled
    irq/504_dwc3-1111  ( 1111) [000] .... 70.000933: irq_handler_entry: irq=504 name=dwc3
    irq/504_dwc3-1111  ( 1111) [000] .... 70.000935: irq_handler_exit: irq=504 ret=handled
    ....

Cc: stable <stable@kernel.org>
Suggested-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
Fixes: d325a1de49 ("usb: dwc3: gadget: Prevent losing events in event cache")
Signed-off-by: Badhri Jagan Sridharan <badhri@google.com>
Acked-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
Link: https://lore.kernel.org/r/20250216223003.3568039-1-badhri@google.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
History 2025-03-13 13:02:11 +01:00
..
core.c usb: dwc3: gadget: Prevent irq storm when TH re-executes 2025-03-13 13:02:11 +01:00
core.h usb: dwc3: Set SUSPENDENABLE soon after phy init 2025-03-13 13:02:11 +01:00
debug.h usb: dwc3: Add function suspend and function wakeup support 2023-03-29 10:27:01 +02:00
debugfs.c usb: dwc3: debugfs: Resume dwc3 before accessing registers 2023-05-13 17:56:22 +09:00
drd.c usb: dwc3: Set SUSPENDENABLE soon after phy init 2025-03-13 13:02:11 +01:00
dwc3-am62.c usb: dwc3-am62: Fix an OF node leak in phy_syscon_pll_refclk() 2025-02-08 09:58:14 +01:00
dwc3-exynos.c usb: dwc3: exynos: add support for Google Tensor gs101 2024-04-30 19:32:06 +02:00
dwc3-haps.c usb: dwc3: haps: Constify the software node 2021-02-04 15:42:06 +01:00
dwc3-imx8mp.c usb: dwc3: imx8mp: fix software node kernel dump 2024-12-19 18:13:05 +01:00
dwc3-keystone.c usb: dwc3: remove unnecessary platform_set_drvdata() 2023-08-22 14:45:19 +02:00
dwc3-meson-g12a.c usb: dwc3: meson-g12a: do post init to fix broken usb after resumption 2023-08-22 14:44:09 +02:00
dwc3-octeon.c usb: dwc3: Use of_property_read_variable_u32_array() to read "power" 2024-08-07 12:51:20 +02:00
dwc3-of-simple.c usb: dwc3: of-simple: Add compatible for hi3798mv200 DWC3 controller 2024-03-05 13:23:05 +00:00
dwc3-omap.c usb: dwc3: omap: add missing depopulate in probe error path 2024-08-22 17:29:16 +08:00
dwc3-pci.c usb: dwc3: pci: add support for the Intel Panther Lake 2024-07-03 16:06:32 +02:00
dwc3-qcom.c usb: dwc3: qcom: simplify with devm_platform_ioremap_resource 2024-09-03 09:52:46 +02:00
dwc3-rtk.c usb: dwc3: rtk: Clean up error code in __get_dwc3_maximum_speed() 2024-09-13 07:41:12 +02:00
dwc3-st.c usb: dwc3: st: simplify pdev->dev usage 2024-09-03 09:52:45 +02:00
dwc3-xilinx.c usb: dwc3: xilinx: make sure pipe clock is deselected in usb2 only mode 2024-12-19 18:13:05 +01:00
ep0.c usb: dwc3: ep0: Don't clear ep0 DWC3_EP_TRANSFER_STARTED 2024-12-05 14:03:00 +01:00
gadget.c usb: dwc3: gadget: Prevent irq storm when TH re-executes 2025-03-13 13:02:11 +01:00
gadget.h Merge 6.8-rc5 into usb-next 2024-02-19 09:13:29 +01:00
host.c usb: dwc3: Support quirk for writing high-low order 2024-06-20 19:30:30 +02:00
io.h usb: dwc3: fix incorrect kernel-doc comment syntax in files 2021-04-02 15:20:51 +02:00
Kconfig usb: dwc3: qcom: Remove ACPI support from glue driver 2024-03-05 13:06:14 +00:00
Makefile usb: dwc3: add Realtek DHC RTD SoC dwc3 glue layer driver 2023-10-02 14:05:24 +02:00
trace.c usb: dwc3: fix incorrect kernel-doc comment syntax in files 2021-04-02 15:20:51 +02:00
trace.h tracing/treewide: Remove second parameter of __assign_str() 2024-05-22 20:14:47 -04:00
ulpi.c usb: dwc3: ulpi: Fix USB2.0 HS/FS/LS PHY suspend regression 2020-12-28 15:55:44 +01:00