NVIDIA DKMS Fails on Proxmox Kernel 7.0 — And How to Fix It
If you run a Proxmox VE node with an NVIDIA GPU and recently ran apt full-upgrade, there's a good chance your system is now in a broken state. The new proxmox-kernel-7.0.0-3-pve was pushed as a default dependency a few days ago — and the NVIDIA DKMS module simply doesn't compile against it.
Here's what happened to me, and how I recovered cleanly.
The Setup
- Proxmox VE 9.1 on Debian Trixie
- GPU: NVIDIA GeForce GTX 1080 Ti (GP102, Pascal architecture)
- Driver: nvidia 580.105.08 via DKMS
- Previous kernel: 6.17.13-2-pve (working fine)
Pascal GPUs (GTX 900/1000 series) are locked to the 580.x driver branch — the newer 595.x series dropped support for Maxwell, Pascal, and Volta. No upgrade path there.
What Broke
After apt full-upgrade, the system pulled proxmox-kernel-7.0.0-3-pve and tried to build the NVIDIA module via DKMS. It failed with bad exit status: 2.
The make.log told the full story — multiple kernel API changes that 580.105.08 doesn't handle:
nvidia/nv-procfs.c: error: expected 'const struct proc_ops *'
but argument is of type 'const nv_proc_ops_t *'
nvidia/nv-dma.c: error: control reaches end of non-void function
nvidia/nv-backlight.c: error: implicit declaration of function
'get_backlight_device_by_name'; did you mean 'backlight_device_get_by_name'?
nv-linux.h: error: implicit declaration of function 'phys_to_dma'
nv-linux.h: error: implicit declaration of function 'dma_is_direct'
These aren't configuration issues. They're source-level incompatibilities — functions removed or renamed in kernel 7.0 that the NVIDIA driver doesn't yet patch for. The kernel 7.0 is very fresh and the NVIDIA open-source kernel module hasn't caught up yet.
The consequence: proxmox-kernel-7.0.0-3-pve-signed ended up in a half-configured state (hF in dpkg), and proxmox-default-kernel, proxmox-kernel-7.0, and even proxmox-ve were tangled in broken dependency chains.
The Recovery
The goal: get rid of the kernel 7.0 packages cleanly, restore proxmox-default-kernel to a version that points to 6.17, and make sure GRUB boots the right kernel.
Step 1 — Force-remove the broken kernel 7.0 packages
Normal apt remove won't work because of the broken dpkg state and dependency locks. Use:
dpkg --remove --force-remove-reinstreq --force-depends \
proxmox-kernel-7.0.0-3-pve-signed \
proxmox-kernel-7.0 \
proxmox-default-kernel \
proxmox-default-headers
Note: proxmox-ve will be protected by Proxmox's own apt hook — it won't let you remove it without explicit confirmation. That's a good safeguard.
Step 2 — Reinstall proxmox-default-kernel 2.0.2
Version 2.0.2 of proxmox-default-kernel depends on proxmox-kernel-6.17, not proxmox-kernel-7.0. Install it explicitly:
apt install proxmox-default-kernel=2.0.2 proxmox-default-headers=2.0.2
Step 3 — Pin to avoid re-upgrading to 2.1.0
Version 2.1.0 pulls kernel 7.0 back in. Pin both packages:
apt-mark hold proxmox-default-kernel proxmox-default-headers \
proxmox-kernel-7.0 proxmox-kernel-7.0.0-3-pve-signed
Step 4 — Verify before rebooting
# GRUB should point to 6.17 as default
grep "menuentry\|linux.*vmlinuz" /boot/grub/grub.cfg | head -6
# initramfs must exist
ls -la /boot/initrd.img-6.17.13-6-pve
# DKMS should show installed on 6.17
dkms status
# expected: nvidia/580.105.08, 6.17.13-6-pve, x86_64: installed
If all three check out, you're good to reboot.
Current State of Kernel 7.0 + NVIDIA Support
According to the Proxmox forum thread tracking the kernel 7.0 rollout, at least one user reports that driver R535 v16.14 compiles under kernel 7.0, and speculates the same may be true for 580.159.03 — but this hasn't been confirmed yet for Pascal GPUs.
The 580.159.03 release (April 29, 2026) focuses on Wayland freeze fixes and DisplayPort MST stability — not kernel 7.0 compatibility patches. Until someone confirms it builds cleanly on 7.0.0-3-pve with a Pascal GPU, staying on 6.17 is the safe call.
When to Revisit
Watch for:
- A confirmed DKMS build of
nvidia/580.xon7.0.x-pvereported on the Proxmox forum - NVIDIA changelog mentioning
proc_ops,phys_to_dma, or kernel 7.x compatibility explicitly
When that lands, the migration is straightforward:
apt-mark unhold proxmox-default-kernel proxmox-default-headers
apt install proxmox-default-kernel # will pull 2.1.0 → kernel 7.0
# watch the DKMS build output carefully before rebooting
Lessons Learned
- Never run
apt full-upgradeon a Proxmox node with NVIDIA DKMS without checking the kernel changelog first. A new default kernel version is a breaking change for GPU passthrough setups. proxmox-default-kernelis versioned — you can pin an older minor version to stay on a specific kernel branch without holding the kernel package itself.- The Proxmox apt hook is your friend — it blocked the accidental removal of
proxmox-veand saved the node. - Always verify GRUB + initramfs + dkms status before rebooting after any kernel change.
Credits
- Photo by Matheus Bertelli via Pexels