linux/drivers/usb/dwc3
Badhri Jagan Sridharan 656a99b581 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 12:58:34 +01:00
..
core.c usb: dwc3: gadget: Prevent irq storm when TH re-executes 2025-03-13 12:58:34 +01:00
core.h usb: dwc3: Set SUSPENDENABLE soon after phy init 2025-03-13 12:58:34 +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 12:58:34 +01:00
dwc3-am62.c usb: dwc3-am62: Fix an OF node leak in phy_syscon_pll_refclk() 2025-02-08 09:52:36 +01:00
dwc3-exynos.c usb: dwc3: exynos: Add support for Exynos850 variant 2023-08-22 14:47:22 +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: remove unnecessary platform_set_drvdata() 2023-08-22 14:45:19 +02: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 just cleanups and fixes 2023-09-07 10:35:14 -07:00
dwc3-of-simple.c usb: dwc3: dwc3-octeon: Convert to glue driver 2023-08-04 14:52:15 +02:00
dwc3-omap.c usb: dwc3: omap: add missing depopulate in probe error path 2024-09-04 13:28:29 +02:00
dwc3-pci.c usb: dwc3: pci: add support for the Intel Panther Lake 2024-07-18 13:21:19 +02:00
dwc3-qcom.c USB: dwc3: qcom: fix wakeup after probe deferral 2023-12-03 07:33:10 +01:00
dwc3-st.c usb: dwc3: st: add missing depopulate in probe error path 2024-09-04 13:28:29 +02:00
dwc3-xilinx.c usb: dwc3: xilinx: make sure pipe clock is deselected in usb2 only mode 2024-12-19 18:11:24 +01:00
ep0.c usb: dwc3: ep0: Don't reset resource alloc flag 2024-12-14 20:00:22 +01:00
gadget.c usb: dwc3: gadget: Prevent irq storm when TH re-executes 2025-03-13 12:58:34 +01:00
gadget.h usb: dwc3: gadget: Rewrite endpoint allocation flow 2024-12-14 19:59:42 +01:00
host.c usb: dwc3: core: Prevent phy suspend during init 2024-05-17 12:02:29 +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: dwc3-octeon: Convert to glue driver 2023-08-04 14:52:15 +02:00
Makefile usb: dwc3: dwc3-octeon: Convert to glue driver 2023-08-04 14:52:15 +02:00
trace.c usb: dwc3: fix incorrect kernel-doc comment syntax in files 2021-04-02 15:20:51 +02:00
trace.h usb: dwc3: change some trace event __dynamic_array() to __get_buf() 2023-03-09 15:35:03 +01:00
ulpi.c usb: dwc3: ulpi: Fix USB2.0 HS/FS/LS PHY suspend regression 2020-12-28 15:55:44 +01:00