linux/drivers/usb/dwc3
Ray Chi 01c74aeac2 usb: dwc3: Skip resume if pm_runtime_set_active() fails
commit e3a9bd247c upstream.

When the system begins to enter suspend mode, dwc3_suspend() is called
by PM suspend. There is a problem that if someone interrupt the system
suspend process between dwc3_suspend() and pm_suspend() of its parent
device, PM suspend will be canceled and attempt to resume suspended
devices so that dwc3_resume() will be called. However, dwc3 and its
parent device (like the power domain or glue driver) may already be
suspended by runtime PM in fact. If this sutiation happened, the
pm_runtime_set_active() in dwc3_resume() will return an error since
parent device was suspended. This can lead to unexpected behavior if
DWC3 proceeds to execute dwc3_resume_common().

EX.
RPM suspend: ... -> dwc3_runtime_suspend()
                      -> rpm_suspend() of parent device
...
PM suspend: ... -> dwc3_suspend() -> pm_suspend of parent device
                                 ^ interrupt, so resume suspended device
          ...  <-  dwc3_resume()  <-/
                      ^ pm_runtime_set_active() returns error

To prevent the problem, this commit will skip dwc3_resume_common() and
return the error if pm_runtime_set_active() fails.

Fixes: 68c26fe581 ("usb: dwc3: set pm runtime active before resume common")
Cc: stable <stable@kernel.org>
Signed-off-by: Ray Chi <raychi@google.com>
Acked-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
Link: https://lore.kernel.org/r/20250106082240.3822059-1-raychi@google.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
History 2025-02-08 09:58:14 +01:00
..
core.c usb: dwc3: Skip resume if pm_runtime_set_active() fails 2025-02-08 09:58:14 +01:00
core.h usb: dwc3: gadget: fix writing NYET threshold 2025-01-17 13:40:53 +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: core: Refactor PHY logic to support Multiport Controller 2024-04-23 19:56:09 -07: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: fix writing NYET threshold 2025-01-17 13:40:53 +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