Linux Power Management development
 help / color / mirror / Atom feed
From: Mario Limonciello <mario.limonciello@amd.com>
To: Fourhundred Thecat <400thecat@ik.me>,
	platform-driver-x86@vger.kernel.org
Cc: linux-pm@vger.kernel.org, Shyam-sundar.S-k@amd.com,
	hansg@kernel.org, ilpo.jarvinen@linux.intel.com,
	rafael@kernel.org
Subject: Re: [BUG] s2idle: unrecoverable sleep on ThinkPad P16s Gen 4 AMD, (Strix Point) when more than 16 logical CPUs are online
Date: Tue, 22 Sep 2026 09:47:19 -0500	[thread overview]
Message-ID: <8a5bef53-cae4-4aa6-a657-d11a6831d2b2@amd.com> (raw)
In-Reply-To: <82329b33-ba2d-ee43-d444-5fdc14af1bce@ik.me>



On 9/22/26 08:43, Fourhundred Thecat wrote:
> Hi,
> 
> On a Lenovo ThinkPad P16s Gen 4 AMD (Ryzen AI 9 HX PRO 370, Strix 
> Point), s2idle enters sleep normally but the machine can never be woken 
> again and has to be force-powered-off. The trigger is the number of 
> online logical CPUs: with all 24 threads online the failure is 100% 
> reproducible, and limiting the kernel to 16 CPUs makes suspend/resume 
> work reliably.
> 
> This platform has no S3 at all, so s2idle is the only suspend mode 
> available.
> 
> 
> Hardware
> --------
> 
>    DMI product name    21RXS07D00
>    DMI system version  ThinkPad P16s Gen 4 AMD
>    BIOS                LENOVO R2XET40W (1.20), 05/26/2026
>    CPU                 AMD Ryzen AI 9 HX PRO 370 w/ Radeon 890M
>    CPU family          26, microcode 0xb204037
>    Topology            12 cores / 24 threads
>                        4x Zen5  (core_id 0-3)
>                        8x Zen5c (core_id 8-15)
> 
>    ACPI: PM: (supports S0 S5)
>    Low-power S0 idle used by default for system suspend
>    /sys/power/mem_sleep -> [s2idle]      (no "deep"; DSDT has no _S3_)
> 
> 
> Kernel
> ------
> 
>    6.18.51 x86_64, gcc (Debian 12.2.0-14+deb12u1) 12.2.0
>    Custom monolithic build, no loadable module support.
> 
>    Relevant config:
>      CONFIG_NR_CPUS=32
>      CONFIG_SUSPEND=y, CONFIG_ACPI_SLEEP=y
>      CONFIG_AMD_PMC=y, CONFIG_AMD_PMF=y, CONFIG_PINCTRL_AMD=y
>      CONFIG_DRM_AMDGPU=y, CONFIG_DRM_ACCEL_AMDXDNA=y
>      CONFIG_THINKPAD_ACPI=y, CONFIG_ACPI_EC=y
> 
> 
> Reproducer
> ----------
> 
>    # echo mem > /sys/power/state
> 
> The system suspends cleanly. The ThinkPad power LED then shows the EC's 
> slow breathing pattern, i.e. the ACPI LPS0 _DSM entry path ran and the 
> EC considers the system asleep.
> 
> It never wakes again. Tried, with no effect:
> 
>    - opening the lid
>    - any key on the internal keyboard
>    - short press of the power button
>    - clicking a USB mouse, with power/wakeup set to "enabled" on both
>      the device (3-2) and its xHCI root hub (usb3)
> 
> The machine is also not reachable over the network while in this state, 
> so it is not a case of resuming with a dead display. The only recovery 
> is a ~10 s power button hold.
> 
> Wake sources are armed. From /proc/acpi/wakeup:
> 
>    XHC1  S3  *enabled   pci:0000:c5:00.4
>    XHC0  S3  *enabled   pci:0000:c7:00.0
>    XHC3  S3  *enabled   pci:0000:c7:00.3
>    XHC4  S3  *enabled   pci:0000:c7:00.4
>    NHI0  S3  *enabled   pci:0000:c7:00.5
>    NHI1  S3  *enabled   pci:0000:c7:00.6
>    LID   S4  *enabled   platform:PNP0C0D:00
>    SLPB  S3  *enabled   platform:PNP0C0E:00
> 
> and platform/i8042/serio0 power/wakeup is "enabled".
> 
> 
> Bisect
> ------
> 
> The regression was introduced by raising CONFIG_NR_CPUS:
> 
>    CONFIG_NR_CPUS=16   suspend/resume works
>    CONFIG_NR_CPUS=32   suspend enters, never wakes    (100% reproducible)
> 
> Booting the *same* CONFIG_NR_CPUS=32 kernel with nr_cpus=16 on the 
> command line also works. So the trigger is the number of online logical 
> CPUs at suspend time, not anything else in the build.
> 
> NR_CPUS=16 is of course wrong for this CPU -- it silently leaves 8 of 
> the 24 threads unused -- so this is a workaround, not a fix.
> 
> At nr_cpus=16 the kernel brings up every core's primary thread plus only 
> the Zen5 SMT siblings:
> 
>    cpu0-3     core_id 0-3     Zen5   primary threads
>    cpu4-11    core_id 8-15    Zen5c  primary threads
>    cpu12-15   core_id 0-3     Zen5   SMT siblings
>    (absent)   core_id 8-15    Zen5c  SMT siblings
> 
> The 8 CPUs that are absent in the working configuration are exactly the 
> SMT siblings of the 8 Zen5c cores. I have not yet narrowed down whether 
> the threshold is exactly 17 CPUs or specifically the Zen5c siblings; I 
> can bisect nr_cpus= further if that is useful.
> 
> 
> Ruled out
> ---------
> 
> None of these had any effect (still hangs with all 24 CPUs online):
> 
>    initcall_blacklist=amd_pmf_driver_init
>    initcall_blacklist=amdxdna_pci_driver_init
>    runtime unbind of amdxdna, amd-pmf and tpm_tis before suspending
> 
> 
> Possibly relevant
> -----------------
> 
> After a *successful* suspend/resume at nr_cpus=16:
> 
>    /sys/power/suspend_stats/success         1
>    /sys/power/suspend_stats/total_hw_sleep  0
>    /sys/power/suspend_stats/last_hw_sleep   0
>    /sys/power/suspend_stats/max_hw_sleep    18446744073709551615
> 
> so no hardware sleep residency is recorded even in the configuration 
> that works. It may be that the working case simply never reaches 
> hardware s0i3, and that the failure appears only once the SoC does enter 
> it. I could not confirm this: this build has CONFIG_DEBUG_FS=n and 
> CONFIG_PM_DEBUG=n, so I have no /sys/kernel/debug/amd_pmc/s0ix_stats and 
> no /sys/power/pm_test. I can rebuild with those enabled and re-run 
> whatever you would like to see.
> 
> Also, the 21RX series has no entry in the fwbug_list DMI table in 
> drivers/platform/x86/amd/pmc/pmc-quirks.c; the Lenovo entries there stop 
> at the 2021-era ThinkPads and some 2023 IdeaPads.
> 
> Happy to run further tests, bisect nr_cpus= to the exact threshold, or 
> provide full dmesg, ACPI tables or the kernel config.
> 
> Thanks,

Try this patch.

https://lore.kernel.org/all/20260826171537.4167367-1-Vishal.Badole@amd.com/

  reply	other threads:[~2026-09-22 14:47 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-22 13:43 [BUG] s2idle: unrecoverable sleep on ThinkPad P16s Gen 4 AMD, (Strix Point) when more than 16 logical CPUs are online Fourhundred Thecat
2026-09-22 14:47 ` Mario Limonciello [this message]
2026-09-23  5:58   ` Fourhundred Thecat
2026-09-23 12:41     ` Mario Limonciello
2026-09-23 13:51       ` Fourhundred Thecat
2026-09-23 14:36         ` Mario Limonciello
2026-09-23 16:12           ` Fourhundred Thecat
2026-09-23 16:15             ` Mario Limonciello
2026-09-23 16:20               ` Mario Limonciello
2026-09-23 16:37                 ` Fourhundred Thecat
2026-09-23 16:41                   ` Mario Limonciello
2026-09-23 16:54                     ` Fourhundred Thecat
2026-09-23 16:59                       ` Mario Limonciello
2026-09-23 18:02                         ` Fourhundred Thecat
2026-09-23 18:11                           ` Mario Limonciello
2026-09-23 18:14                             ` Fourhundred Thecat
2026-09-23 18:25                               ` Mario Limonciello
2026-09-23 18:39                                 ` Fourhundred Thecat
2026-09-23 18:57                                   ` Mario Limonciello
2026-09-23 19:13                                     ` Fourhundred Thecat
2026-09-23 19:20                                       ` Mario Limonciello
2026-09-23 20:26                                         ` Fourhundred Thecat
2026-09-23 20:48                                           ` Fourhundred Thecat
2026-09-23 21:10                                             ` Mario Limonciello
2026-09-24  5:36                                               ` Fourhundred Thecat
2026-09-25  7:05                                               ` Fourhundred Thecat
2026-09-25 13:30                                                 ` Mario Limonciello
2026-09-26  4:13                                                   ` Fourhundred Thecat
2026-09-26 18:29                                                     ` Mario Limonciello
2026-09-29  5:43                                                       ` Fourhundred Thecat
2026-09-29  5:57                                                         ` Fourhundred Thecat
2026-09-29 13:37                                                           ` Mario Limonciello

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=8a5bef53-cae4-4aa6-a657-d11a6831d2b2@amd.com \
    --to=mario.limonciello@amd.com \
    --cc=400thecat@ik.me \
    --cc=Shyam-sundar.S-k@amd.com \
    --cc=hansg@kernel.org \
    --cc=ilpo.jarvinen@linux.intel.com \
    --cc=linux-pm@vger.kernel.org \
    --cc=platform-driver-x86@vger.kernel.org \
    --cc=rafael@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox