linux/drivers/base/power
Pin-yen Lin 7b0778d11e PM: sleep: Do not wait on SYNC_STATE_ONLY device links
[ Upstream commit 632d31067b ]

Device links with DL_FLAG_SYNC_STATE_ONLY should not affect system
suspend and resume, and functions like device_reorder_to_tail() and
device_link_add() don't try to reorder the consumers with that flag.

However, dpm_wait_for_consumers() and dpm_wait_for_suppliers() don't
check thas flag before triggering dpm_wait(), leading to potential hang
during suspend/resume.

This can be reproduced on MT8186 Corsola Chromebook with devicetree like:

usb-a-connector {
        compatible = "usb-a-connector";
        port {
                usb_a_con: endpoint {
                        remote-endpoint = <&usb_hs>;
                };
        };
};

usb_host {
        compatible = "mediatek,mt8186-xhci", "mediatek,mtk-xhci";
        port {
                usb_hs: endpoint {
                        remote-endpoint = <&usb_a_con>;
                };
        };
};

In this case, the two nodes form a cycle and a SYNC_STATE_ONLY devlink
between usb_host (supplier) and usb-a-connector (consumer) is created.

Address this by exporting device_link_flag_is_sync_state_only() and
making dpm_wait_for_consumers() and dpm_wait_for_suppliers() use it
when deciding if dpm_wait() should be called.

Fixes: 05ef983e0d ("driver core: Add device link support for SYNC_STATE_ONLY flag")
Signed-off-by: Pin-yen Lin <treapking@chromium.org>
Link: https://patch.msgid.link/20250926102320.4053167-1-treapking@chromium.org
[ rjw: Subject and changelog edits ]
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
History 2025-10-19 16:37:07 +02:00
..
clock_ops.c PM: clk: Remove unused pm_clk_remove() 2025-03-12 21:28:48 +01:00
common.c PM: domains: Detach on device_unbind_cleanup() 2025-07-07 20:41:21 +02:00
generic_ops.c PM: sleep: Remove unused pm_generic_ wrappers 2025-03-12 21:02:50 +01:00
main.c PM: sleep: Do not wait on SYNC_STATE_ONLY device links 2025-10-19 16:37:07 +02:00
Makefile PM: domains: Move genpd and its governor to the pmdomain subsystem 2023-12-18 12:49:48 +01:00
power.h PM: sleep: wakeirq: fix wake irq arming 2023-07-24 09:51:51 +02:00
qos-test.c kunit: allow kunit tests to be loaded as a module 2020-01-09 16:42:29 -07:00
qos.c PM: QoS: Export dev_pm_qos_read_value 2024-10-25 10:17:37 -05:00
runtime.c PM: core: Add two macros for walking device links 2025-10-19 16:37:07 +02:00
sysfs.c PM: sysfs: Move debug runtime PM attributes to runtime_attrs[] 2025-05-09 15:59:27 +02:00
trace.c rtc: Extend timeout for waiting for UIP to clear to 1s 2023-12-17 22:33:55 +01:00
wakeirq.c PM: sleep: wakeirq: Introduce device-managed variant of dev_pm_set_wake_irq() 2025-01-17 20:27:46 +01:00
wakeup.c treewide, timers: Rename from_timer() to timer_container_of() 2025-06-08 09:07:37 +02:00
wakeup_stats.c PM: wakeup: Add missing wakeup source attribute relax_count 2025-05-09 15:41:34 +02:00