Re: [REGRESSION] 6.12.y: s2idle hangs after 171ef40fce41 ("PM: sleep: Use complete() in device_pm_sleep_init()")
From: Sasha Levin
Date: Sat Aug 29 2026 - 23:02:20 EST
On Sat, Aug 29, 2026 at 11:47:47AM +0200, Marcin Dawid wrote:
> My ThinkPad P16v stopped suspending after a kernel update. I bisected
> the problem to commit 171ef40fce41 ("PM: sleep: Use complete() in
> device_pm_sleep_init()"), the 6.12.y backport of mainline commit
> 3855941f1e40. Reverting this commit fixes the problem.
Thanks for the bisect. Queued the revert for 6.12, 6.6, 6.1, 5.15 and 5.10.
> I only see the hang on 6.12.y. I also tested 6.18.45, 7.1.8 and mainline
> 7.2, which carry the same commit and the laptop suspends normally on all
> three (see the table below).
That matches what the code shows, so 6.18 and newer keep the commit. Upstream's
argument for complete() over complete_all() relies on the completion being
reinitialised for every device by dpm_clear_async_state(), which only exists
from the v6.15/v6.16 async-suspend rework. 6.12 and older have no such call
site, so a device that never reaches a phase list keeps the one-shot token and
a second waiter blocks forever - the same exposure your machine hit, on all
five of those trees.
--
Thanks,
Sasha