Skip to content

Instantly share code, notes, and snippets.

@bmcbm
Last active April 26, 2025 15:36
Show Gist options
  • Save bmcbm/375f14eaa17f88756b4bdbbebbcfd029 to your computer and use it in GitHub Desktop.
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
@apienk
Copy link

apienk commented Nov 17, 2024

As a side note, mind that a GNOME extension or another program may interfere with suspend by failing to release the /dev/nvidia handle (you will see wait requests sent by the driver to the shell in the logs). In my case it was the Vitals GNOME extension. Once I removed it, Ubuntu 24.04.1 suspends and resumes without any issues.

@drohhyn
Copy link

drohhyn commented Jan 4, 2025

Okay, clearing things up the issue has been resolved:

  1. Either use LTS kernel (6.6) or 6.12rc.
  2. Make sure to enable nvidia-suspend, nvidia-resume and nvidia-hibernate systemd services.
  3. Make sure you have fbdev and NVreg_PreserveVideoMemoryAllocations=1 (and /var/tmp path etc)
  4. Use nvidia open dkms 565 drivers.

Finally! I had issues for a really long time, had been thru this topic several times but always failed and thus stayed with X11. Now, after upgrading to ubuntu 24.10 I had and additional reason why I needed wayland und installing the 6.12(.3) kernel fixed my problem. This kernel is not yet officially available for 24.10 but there is a decent way with this kernel maintainer's script.

@dmikushin
Copy link

This is my P500 GPU suspend error on Lenovo T580 with Linux t580 6.8.0-52-generic running Driver Version: 570.86.15:

[  570.725953] nvidia 0000:02:00.0: PM: pci_pm_suspend(): nv_pmops_suspend+0x0/0x50 [nvidia] returns -5
[  570.726746] nvidia 0000:02:00.0: PM: dpm_run_callback(): pci_pm_suspend+0x0/0x1b0 returns -5
[  570.726752] nvidia 0000:02:00.0: PM: failed to suspend async: error -5
[  573.624219] PM: Some devices failed to suspend, or early wake event detected
[  574.560997] nvidia 0000:02:00.0: PM: pci_pm_suspend(): nv_pmops_suspend+0x0/0x50 [nvidia] returns -5
[  574.561678] nvidia 0000:02:00.0: PM: dpm_run_callback(): pci_pm_suspend+0x0/0x1b0 returns -5
[  574.561684] nvidia 0000:02:00.0: PM: failed to suspend async: error -5
[  574.824971] PM: Some devices failed to suspend, or early wake event detected

@dmikushin
Copy link

This is my P500 GPU suspend error on Lenovo T580 with Linux t580 6.8.0-52-generic running Driver Version: 570.86.15:

[  570.725953] nvidia 0000:02:00.0: PM: pci_pm_suspend(): nv_pmops_suspend+0x0/0x50 [nvidia] returns -5
[  570.726746] nvidia 0000:02:00.0: PM: dpm_run_callback(): pci_pm_suspend+0x0/0x1b0 returns -5
[  570.726752] nvidia 0000:02:00.0: PM: failed to suspend async: error -5
[  573.624219] PM: Some devices failed to suspend, or early wake event detected
[  574.560997] nvidia 0000:02:00.0: PM: pci_pm_suspend(): nv_pmops_suspend+0x0/0x50 [nvidia] returns -5
[  574.561678] nvidia 0000:02:00.0: PM: dpm_run_callback(): pci_pm_suspend+0x0/0x1b0 returns -5
[  574.561684] nvidia 0000:02:00.0: PM: failed to suspend async: error -5
[  574.824971] PM: Some devices failed to suspend, or early wake event detected

This is what helped me:

sudo systemctl unmask nvidia-suspend
sudo systemctl enable nvidia-suspend
sudo systemctl unmask nvidia-resume
sudo systemctl enable nvidia-resume
sudo systemctl unmask nvidia-hibernate
sudo systemctl enable nvidia-hibernate

Crossposting on Ask Ubuntu.

@tommyyliu
Copy link

@dmikushin
Thanks, that worked for me. I have a 1080ti using driver version 570.86.15. This is on Fedora 41.

@pgbarletta
Copy link

sudo systemctl unmask nvidia-suspend
sudo systemctl enable nvidia-suspend
sudo systemctl unmask nvidia-resume
sudo systemctl enable nvidia-resume
sudo systemctl unmask nvidia-hibernate
sudo systemctl enable nvidia-hibernate

Thanks! It worked on a Lenovo P1G7 with kubuntu 24.04 and Driver Version: 570.124.06 CUDA Version: 12.8

@misterBart
Copy link

sudo systemctl unmask nvidia-suspend
sudo systemctl enable nvidia-suspend
sudo systemctl unmask nvidia-resume
sudo systemctl enable nvidia-resume
sudo systemctl unmask nvidia-hibernate
sudo systemctl enable nvidia-hibernate

Did not work for me. Using Ubuntu 24.10 and nvidia-driver-560.

As for the responses of tommyliu and pgbarletta, I am unsure whether they are helpful, because they are using driver 570, and the problem has been fixed starting from driver 565 according to ethan2009.

Also the disabling of the services and the editing of nvidia-sleep.sh suggested by bilallamal07 did not work for me.

Ubuntu 24.10 did allow me to choose the nvidia-driver-570-server, which solved the problem, probably because it contains the fix starting from driver 565.

@ahmed-aly-aut
Copy link

For me on driver 535.216.03 and GeForce RTX 2070 Mobile / Max-Q the following services where located under /usr/lib/systemd/system/:

  • nvidia-hibernate.service
  • nvidia-persistenced.service
  • nvidia-resume.service
  • nvidia-suspend.service

This meant taht I only had to enable them with

sudo systemctl enable nvidia-hibernate.service
sudo systemctl enable nvidia-persistenced.service
sudo systemctl enable nvidia-resume.service
sudo systemctl enable nvidia-suspend.service

@leber006
Copy link

This is my current setting and it's working for me (Linux Mint 22, Nvidia GeForce GTX 745 using Nvidia 550.107.02 driver)

sudo nano /etc/modprobe.d/nvidia-graphics-drivers-kms.conf

and add these lines into it:

options nvidia-drm fbdev=1 options nvidia NVreg_PreserveVideoMemoryAllocations=1 options nvidia NVreg_TemporaryFilePath=/var/tmp

This fixed my issues!
Laptop: Lenovo p16v Gen 1
System:
Kubuntu 24.04.2 LTS, noble
AMD Ryzen 7 7840HS w/ Radeon 780M Graphics
Nvidia rtx A500: Driver 570.133.07
Kernel: 6.11.0-24-generic

(Issue remaining: "unable to change power state from D3hot to D0")

I also tried the answer from dmikushin, but it didn't change anything!

sudo systemctl unmask nvidia-suspend
sudo systemctl enable nvidia-suspend
sudo systemctl unmask nvidia-resume
sudo systemctl enable nvidia-resume
sudo systemctl unmask nvidia-hibernate
sudo systemctl enable nvidia-hibernate

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