android_kernel_samsung_sm8650/drivers/base/power
Rafael J. Wysocki 7eedea7abf BACKPORT: PM: sleep: Fix possible deadlocks in core system-wide PM code
It is reported that in low-memory situations the system-wide resume core
code deadlocks, because async_schedule_dev() executes its argument
function synchronously if it cannot allocate memory (and not only in
that case) and that function attempts to acquire a mutex that is already
held.  Executing the argument function synchronously from within
dpm_async_fn() may also be problematic for ordering reasons (it may
cause a consumer device's resume callback to be invoked before a
requisite supplier device's one, for example).

Address this by changing the code in question to use
async_schedule_dev_nocall() for scheduling the asynchronous
execution of device suspend and resume functions and to directly
run them synchronously if async_schedule_dev_nocall() returns false.


Link: https://lore.kernel.org/linux-pm/ZYvjiqX6EsL15moe@perf/
Reported-by: Youngmin Nam <youngmin.nam@samsung.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Reviewed-by: Stanislaw Gruszka <stanislaw.gruszka@linux.intel.com>
Tested-by: Youngmin Nam <youngmin.nam@samsung.com>
Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>
Cc: 5.7+ <stable@vger.kernel.org> # 5.7+: 6aa09a5bccd8 async: Split async_schedule_node_domain()
Cc: 5.7+ <stable@vger.kernel.org> # 5.7+: 7d4b5d7a37bd async: Introduce async_schedule_dev_nocall()
Cc: 5.7+ <stable@vger.kernel.org> # 5.7+
Bug: 319759660
Change-Id: I1164a6a0b9899ab2f01d5efb413827b9d0983d98
(cherry picked from commit 7839d0078e0d5e6cc2fa0b0dfbee71de74f1e557)
[Youngmin: Resolved minor conflict in drivers/base/power/main.c]
Signed-off-by: Youngmin Nam <youngmin.nam@samsung.com>
2024-01-19 09:02:31 +00:00
..
clock_ops.c PM: runtime: add devm_pm_clk_create helper 2021-08-26 11:28:07 -07:00
common.c PM: domains: Extend dev_pm_domain_detach() doc 2022-04-13 17:07:58 +02:00
domain_governor.c Merge 09583dfed2 ("Merge tag 'pm-5.19-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm") into android-mainline 2022-06-07 18:10:15 +02:00
domain.c PM: domains: Move the verification of in-params from genpd_add_device() 2023-07-19 16:21:01 +02:00
generic_ops.c
main.c BACKPORT: PM: sleep: Fix possible deadlocks in core system-wide PM code 2024-01-19 09:02:31 +00:00
Makefile
power.h PM: sleep: wakeirq: fix wake irq arming 2023-08-03 10:24:16 +02:00
qos-test.c
qos.c ANDROID: GKI: export dev_pm_qos_read_value 2020-11-28 05:52:16 +00:00
runtime.c PM: runtime: Do not call __rpm_callback() from rpm_idle() 2022-12-31 13:31:59 +01:00
sysfs.c drivers core: Miscellaneous changes for sysfs_emit 2020-10-02 13:12:07 +02:00
trace.c rtc: Check return value from mc146818_get_time() 2021-12-16 21:50:06 +01:00
wakeirq.c PM: sleep: wakeirq: fix wake irq arming 2023-08-03 10:24:16 +02:00
wakeup_stats.c PM: wakeup: remove redundant assignment to variable retval 2021-04-22 15:22:38 +02:00
wakeup.c Merge c79e6fa98c ("Merge tag 'pm-6.1-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm") into android-mainline 2022-10-04 14:40:09 +02:00