You are not logged in.
Sharing this in case it saves someone else the debugging time. It took a while to pin down. Found, fixed and written with the help of AI with guidance.
Hardware: ASUS hybrid-graphics laptop (AMD Radeon 890M iGPU + NVIDIA RTX 5060 Mobile dGPU), nvidia-open-dkms 610.57.04, kernel 7.2.3-arch1-3.
Symptom: `systemctl hibernate` (and lid-close via `suspend-then-hibernate`) would sometimes leave the machine with a permanently black screen after resume, but the system itself stayed fully alive underneath (network kept working, Bluetooth reconnected, systemd-logind kept logging power-key presses). Looked exactly like a full hang, only fixable with a hard power-off. Fans would keep running and the laptop would get warm since it never actually powered off.
Root cause (from journalctl -k):
PM: hibernation: Image saving done
PM: hibernation: Wakeup event detected during hibernation, rolling back.
WARNING: nvidia/nv.c:4524 at nv_restore_user_channels+0x4e/0x1f0 [nvidia]
...
amdgpu 0000:65:00.0: GPU reset begin!
amdgpu 0000:65:00.0: ASIC reset failed with error, -5
amdgpu 0000:65:00.0: GPU Recovery Failed: -5The hibernation image is written successfully, but right at the S4/poweroff boundary the kernel detects a wakeup event and rolls back instead of powering off. The rollback calls into the NVIDIA driver's PM notifier (nv_restore_user_channels), which fails. That failed rollback then takes down the AMD iGPU (the one actually driving the display). Two GPU reset attempts both fail, leaving the display dead while the rest of the OS runs fine. No hard-lockup, no coredump, /sys/fs/pstore stays empty. A watchdog won't catch this.
Finding the wakeup source:
$ cat /proc/acpi/wakeup
Device S-state Status Sysfs node
GPP9 S4 *enabled pci:0000:00:03.1
...
$ lspci -tv
...
+-03.1-[64]--+-00.0 NVIDIA Corporation GB206M [GeForce RTX 5060 Max-Q / Mobile]GPP9 (the PCIe root port the NVIDIA GPU itself sits on) is enabled as an S4 wakeup source. USB controllers on this board are only S3-enabled — worth checking, since it's tempting to blame a connected USB device (I did, initially, tested with phone unplugged/plugged, made no difference). The GPU's own root port asserting a spurious PME right as the system tries to power off fits — it was already failing its own ACPI D-notifier / power-source-change events around the same time with status=0x11.
Fix: disable that specific root port as a wakeup source. Note /proc/acpi/wakeup toggles on write, it doesn't set:
# echo GPP9 > /proc/acpi/wakeupDoesn't survive reboot, so made it persistent with a oneshot unit that only toggles if currently enabled (idempotent, since a second write would flip it back on):
# /etc/systemd/system/nvidia-gpp-wakeup-disable.service
[Unit]
Description=Disable NVIDIA GPU PCIe root port as ACPI S4 wakeup source
ConditionPathExists=/proc/acpi/wakeup
DefaultDependencies=no
Before=sysinit.target
After=local-fs.target
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/sh -c 'grep -q "^GPP9[[:space:]].*\*enabled" /proc/acpi/wakeup && echo GPP9 > /proc/acpi/wakeup || true'
[Install]
WantedBy=sysinit.target# systemctl enable --now nvidia-gpp-wakeup-disable.serviceReplace GPP9 with whatever device name /proc/acpi/wakeup + lspci -tv shows for your own NVIDIA GPU's root port, will differ by board/BIOS.
Confirmed fixed across three separate tests: plain systemctl hibernate, the full suspend-then-hibernate path, and a real lid-close test with a phone plugged in via USB and the charger unplugged. No recurrence since.
Offline
I had this issue the last two Asus notebooks which prevented me from using Linux alltogether for a while. At last, this seems to be a solid fix for me.
Offline