Suspend crash in nvEvoDisableVblankSemControl (610.43.03) — Legion Pro 7i Gen 8, matches existing report #377732

Summary
Before setting NVreg_TemporaryFilePath, suspend itself succeeded but resume failed with a kernel oops in nvEvoDisableVblankSemControl.
After setting NVreg_TemporaryFilePath=/var/tmp, suspend itself now fails: the screen turns off but the system never actually sleeps — fans ramp to full speed, and the machine is unresponsive until a key is pressed, at which point the same crash is printed to console.

This appears to match this existing report:

RIP in both my crashes (pre- and post-config change): nvEvoDisableVblankSemControl+0x34/0xd0 [nvidia_modeset]

Hardware
Lenovo Legion Pro 7i Gen 8 (82WQ / Legion Pro 7 16IRX8H)
CPU: Intel Core i9-13900HX
GPU: NVIDIA GeForce RTX 4080 Laptop GPU
BIOS: KWCN54WW

Software
Fedora Linux 44, KDE Plasma 6.7.3, Wayland
Kernel: 7.1.4-204.fc44.x86_64
NVIDIA Driver: 610.43.03 (KMD 610.43.03)
System supports both s2idle and deep (S3); deep is currently selected/active

Reproduction

  1. Boot normally.
  2. Trigger suspend (KDE power menu or systemctl suspend).
    a. (NVreg_TemporaryFilePath default, not set) System sleeps.
    b. (NVreg_TemporaryFilePath set to /var/tmp) Screen turns off; system does not actually suspend, fans ramp to full.
  3. When key is pressed
    a. (NVreg_TemporaryFilePath default, not set) System wakes, then the oops below prints to console.
    b. (NVreg_TemporaryFilePath set to /var/tmp) The oops below prints to console.

Troubleshooting performed

  • Confirmed NVreg_UseKernelSuspendNotifiers=1 active by default.
  • Added NVreg_TemporaryFilePath=/var/tmp — this changed the failure point from resume to suspend itself, without fixing the underlying crash.
  • Reverted the config change; behavior returned to original (suspend succeeds, resume crashes).
  • Confirmed nvidia-suspend/resume/hibernate systemd services enabled.

Attachments

I have been able to circumvent this bug by changing the bios graphics settings to Discrete Graphics Only instead of Dynamic. With Discrete Only selected, suspend and resume works correctly again.