linux/drivers/base/power
Rafael J. Wysocki f384497a76 PM: sleep: core: Fix runtime PM enabling in device_resume_early()
Runtime PM should only be enabled in device_resume_early() if it has
been disabled for the given device by device_suspend_late().  Otherwise,
it may cause runtime PM callbacks to run prematurely in some cases
which leads to further functional issues.

Make two changes to address this problem.

First, reorder device_suspend_late() to only disable runtime PM for a
device when it is going to look for the device's callback or if the
device is a "syscore" one.  In all of the other cases, disabling runtime
PM for the device is not in fact necessary.  However, if the device's
callback returns an error and the power.is_late_suspended flag is not
going to be set, enable runtime PM so it only remains disabled when
power.is_late_suspended is set.

Second, make device_resume_early() only enable runtime PM for the
devices with the power.is_late_suspended flag set.

Fixes: 443046d1ad ("PM: sleep: Make suspend of devices more asynchronous")
Reported-by: Rose Wu <ya-jou.wu@mediatek.com>
Closes: https://lore.kernel.org/linux-pm/70b25dca6f8c2756d78f076f4a7dee7edaaffc33.camel@mediatek.com/
Cc: 6.16+ <stable@vger.kernel.org> # 6.16+
Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Link: https://patch.msgid.link/12784270.O9o76ZdvQC@rafael.j.wysocki
History 2025-11-18 15:47:55 +01: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: core: Fix runtime PM enabling in device_resume_early() 2025-11-18 15:47:55 +01:00
Makefile PM: runtime: Add basic kunit tests for API contracts 2025-09-27 13:41:47 +02: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-test.c PM: runtime: Fix error checking for kunit_device_register() 2025-10-03 21:10:48 +02:00
runtime.c Merge branches 'pm-core' and 'pm-runtime' 2025-10-07 12:20:36 +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