After upgrading Proxmox from version 8 to 9 (or after a kernel upgrade), Intel iGPU passthrough for Frigate running in a Docker container inside an LXC container suddenly stopped working. OpenVINO would detect the GPU but hang indefinitely when trying to use it, forcing fallback to CPU inference.

System Configuration

  • Hardware: Intel NUC12WSHi5 (12th Gen Alder Lake with Intel UHD Graphics)
  • Host OS: Proxmox 9 with kernel 6.14.11-4-pve
  • Setup: Frigate running in Docker container inside LXC container
  • Goal: Hardware acceleration using Intel iGPU (OpenVINO + VAAPI)

Symptoms

  1. OpenVINO detects GPU but can’t use it
  2. Critical kernel errors in dmesg
  3. FFmpeg VAAPI errors

Root Cause

The kernel upgrade broke the i915-sriov-dkms module that enables Intel iGPU virtualization and SR-IOV support. DKMS modules need to be rebuilt when kernels are upgraded, but this didn’t happen automatically, leaving the GPU driver in a broken state.

The Solution

Step 1: Check DKMS Status

First, identify the problem on your Proxmox host:

1
2
3
4
5
6
# Check current DKMS modules and their build status
dkms status

# Look for i915-sriov-dkms
dpkg -l | grep i915
ls -la /usr/src/ | grep i915

Step 2: Rebuild the i915-sriov-dkms Module

If the module exists but isn’t built for your current kernel:

1
2
3
4
5
6
# Remove old builds
dkms remove -m i915-sriov-dkms -v $(dkms status | grep i915-sriov | awk -F'[,:]' '{print $2}' | xargs) --all

# Rebuild for current kernel
dkms build -m i915-sriov-dkms -v $(ls /usr/src/ | grep i915-sriov | cut -d'-' -f4)
dkms install -m i915-sriov-dkms -v $(ls /usr/src/ | grep i915-sriov | cut -d'-' -f4)

Step 3: If Module is Missing, Reinstall It

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# Install build dependencies
apt-get update
apt-get install -y build-essential dkms pve-headers-$(uname -r)

# Clone the SR-IOV driver
cd /tmp
git clone https://github.com/strongtz/i915-sriov-dkms.git
cd i915-sriov-dkms

# Install via DKMS
cp -r . /usr/src/i915-sriov-dkms-$(git describe --tags --abbrev=0)
dkms add -m i915-sriov-dkms -v $(git describe --tags --abbrev=0)
dkms build -m i915-sriov-dkms -v $(git describe --tags --abbrev=0)
dkms install -m i915-sriov-dkms -v $(git describe --tags --abbrev=0)

# Rebuild initramfs
update-initramfs -u -k all

Step 4: Verify Kernel Parameters

Ensure your kernel boot parameters are correct:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# Check current parameters
cat /proc/cmdline

# Edit if necessary
nano /etc/default/grub
# Add to GRUB_CMDLINE_LINUX_DEFAULT:
# "quiet intel_iommu=on iommu=pt i915.enable_gvt=1 i915.enable_guc=3"

# Update grub and reboot
update-grub
reboot

Step 5: Verify the Fix

After reboot, verify everything is working:

1
2
3
4
5
6
7
8
# Check module is loaded
lsmod | grep i915

# Check for GPU errors (should be none)
dmesg | grep -i "i915.*ERROR"

# Test in Frigate container
docker exec -it frigate python3 -c "import openvino as ov; cm = ov.Core().compile_model(ov.Core().read_model('/openvino-model/ssdlite_mobilenet_v2.xml'), 'GPU'); print('GPU works!')"

Conclusion

Intel iGPU passthrough on Proxmox requires the i915-sriov-dkms module for SR-IOV support. When upgrading kernels, this module must be rebuilt. If you encounter GPU hangs or TLB timeout errors after a kernel upgrade, rebuilding or reinstalling the DKMS module will restore GPU functionality.

Remember: DKMS modules are kernel-version specific. Always rebuild them after kernel upgrades to maintain hardware passthrough functionality.