Skip to content

Instantly share code, notes, and snippets.

@bmcbm
Last active February 22, 2026 15:09
Show Gist options
  • Select an option

  • Save bmcbm/375f14eaa17f88756b4bdbbebbcfd029 to your computer and use it in GitHub Desktop.

Select an option

Save bmcbm/375f14eaa17f88756b4bdbbebbcfd029 to your computer and use it in GitHub Desktop.
NVIDIA Suspend fix
# Use systemd for managing NVIDIA driver suspend in drivers ====>>> PRIOR to version 470 <<<=====
# https://download.nvidia.com/XFree86/Linux-x86_64/450.66/README/powermanagement.html
# https://forums.developer.nvidia.com/t/unable-to-set-nvidia-kernel-module-parameters/161306
# Please note: In Fedora Linux you may need to just install the xorg-x11-drv-nvidia-power pakage
# as sugested by @goombah88 in the comments below.
TMP_PATH=/var/tmp
TMPL_PATH=/usr/share/doc/nvidia-driver-460/
echo "options nvidia NVreg_PreserveVideoMemoryAllocations=1 NVreg_TemporaryFilePath=${TMP_PATH}" | sudo tee /etc/modprobe.d/nvidia-power-management.conf
sudo install --mode 644 "${TMPL_PATH}/nvidia-suspend.service" /etc/systemd/system
sudo install --mode 644 "${TMPL_PATH}/nvidia-hibernate.service" /etc/systemd/system
sudo install --mode 644 "${TMPL_PATH}/nvidia-resume.service" /etc/systemd/system
sudo install "${TMPL_PATH}/nvidia" /lib/systemd/system-sleep
sudo install "${TMPL_PATH}/nvidia-sleep.sh" /usr/bin
sudo systemctl enable nvidia-suspend.service
sudo systemctl enable nvidia-hibernate.service
sudo systemctl enable nvidia-resume.service
@thandal
Copy link

thandal commented Feb 22, 2026

Ubuntu 24.04
nvidia-driver-590-open 590.48.01
NVIDIA GeForce RTX 3080

$ echo $XDG_SESSION_TYPE
x11

(not running Wayland)

The first line below (from journalctl -b -1) was key for me:

kernel: NVRM: GPU 0000:01:00.0: PreserveVideoMemoryAllocations module parameter is set. System Power Management attempted without driver procfs suspend interface. Please  refer to the 'Configuring Power Management Support' section in the driver README.
kernel: nvidia 0000:01:00.0: PM: pci_pm_suspend(): nv_pmops_suspend+0x0/0x50 [nvidia] returns -5
kernel: nvidia 0000:01:00.0: PM: dpm_run_callback(): pci_pm_suspend+0x0/0x1b0 returns -5
kernel: nvidia 0000:01:00.0: PM: failed to suspend async: error -5
kernel: PM: Some devices failed to suspend, or early wake event detected

Following that clue (and working my way through all the ideas described in this thread), I edited /etc/modprobe.d/nvidia-graphics-drivers-kms.conf to

# This file was generated by nvidia-driver-590
# Set value to 0 to disable modesetting
options nvidia_drm modeset=1

# Preserve video memory on suspend/resume
options nvidia NVreg_PreserveVideoMemoryAllocations=0  # <-- this is all I changed
options nvidia NVreg_TemporaryFilePath=/var

and ran sudo update-initramfs -u and rebooted.

... I also enabled a bunch of services, but I'm not sure it was necessary (and definitely wasn't sufficient):

$ systemctl list-unit-files | grep nvidia
nvidia-hibernate.service                     enabled         enabled
nvidia-persistenced.service                  static          -
nvidia-resume.service                        enabled         enabled
nvidia-suspend-then-hibernate.service        enabled         enabled
nvidia-suspend.service                       enabled         enabled

@simevo
Copy link

simevo commented Feb 22, 2026

On Debian 13 (Trixie) I have fiddled with nvidia CUDA toolkit installed from https://developer.nvidia.com/cuda-downloads, then uninstalled it and opted for the Debian native packages (nvidia-cuda-toolkit).

As reported by others here, after the reboot suspend is broken, and there are broken symlinks:

find /etc/systemd -type l -exec file {} \; | grep broken | grep nvidia
/etc/systemd/system/systemd-suspend.service.wants/nvidia-suspend.service: broken symbolic link to /usr/lib/systemd/system/nvidia-suspend.service
/etc/systemd/system/systemd-suspend.service.wants/nvidia-resume.service: broken symbolic link to /usr/lib/systemd/system/nvidia-resume.service
/etc/systemd/system/systemd-hibernate.service.wants/nvidia-resume.service: broken symbolic link to /usr/lib/systemd/system/nvidia-resume.service
/etc/systemd/system/systemd-hibernate.service.wants/nvidia-hibernate.service: broken symbolic link to /usr/lib/systemd/system/nvidia-hibernate.service

ls -l /etc/systemd/system/systemd-suspend.service.wants/nvidia-resume.service
lrwxrwxrwx 1 root root 45 12 set 07.16 /etc/systemd/system/systemd-suspend.service.wants/nvidia-resume.service -> /usr/lib/systemd/system/nvidia-resume.service

In my case though, I fixed not by removing the symlinks, but by restoring the targets:

sudo apt remove nvidia-suspend-common
sudo apt install nvidia-suspend-common
ls -l /usr/lib/systemd/system/nvidia*
-rw-r--r-- 1 root root  270  8 apr  2025 /usr/lib/systemd/system/nvidia-hibernate.service
-rw-r--r-- 1 root root 1501 17 dic 02.37 /usr/lib/systemd/system/nvidia-persistenced.service
-rw-r--r-- 1 root root  321  8 apr  2025 /usr/lib/systemd/system/nvidia-resume.service
-rw-r--r-- 1 root root  258  8 apr  2025 /usr/lib/systemd/system/nvidia-suspend.service

Now the symlinks are not broken anymore and suspend/resume works again! Hope this helps

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment