Reference plex gpu xe driver
Root cause discovered 2026-04-30: Kernel 6.17 switched the Intel iGPU driver from i915 to the new xe driver. This renumbered the DRM card device from card0 to card1. Plex CT 101 was hardcoded to card0, causing the CT to fail to start after a reboot on the new kernel.
Note: renderD128 kept its number -- only the card device renumbered. So dev0 (renderD128) worked fine; only dev1 (card0 reference) broke.
Fix shipped:
| Before | After |
|---|---|
dev1: /dev/dri/card0,gid=44 |
dev1: /dev/dri/by-path/pci-0000:00:02.0-card,gid=44 |
The by-path symlink is anchored to PCI address 0000:00:02.0 (Intel iGPU bus location), which does not change across kernel renames.
Lesson for future kernel upgrades: Any CT with a hardcoded /dev/dri/cardN passthrough should be audited and converted to by-path before upgrading kernels. The i915 -> xe driver shift is the known trigger but other drivers could cause similar renames.
Backup of original config at /tmp/101.conf.bak.<timestamp> on Finn.
Followup discovered 2026-05-11 (Rogue One Roku stall debug): the by-path fix from 04-30 passes the -card symlink but NOT the matching -render symlink. Intel NEO compute-runtime (libigdrcl.so) enumerates GPUs by scanning /dev/dri/by-path/ for *-render entries — finds none → 0 OpenCL platforms. Plex's HDR-to-SDR transcode pipeline uses tonemap_opencl, which requires OpenCL → silent fallback to full software (4K HEVC decode + libx264 encode), buffers forever on Roku/any HDR-incapable client.
Fix shipped: persistent symlink via /etc/tmpfiles.d/intel-render-symlink.conf inside CT 101:
Plus installed intel-opencl-icd ocl-icd-libopencl1 clinfo (Ubuntu noble packages) inside CT 101. After systemctl restart plexmediaserver the full VAAPI pipeline (decode + scale + opencl tonemap + h264_vaapi encode) is back. Confirm with clinfo | grep Platforms (must show >0) and a transcoded 4K HDR play (should be <2s buffer, <5% CPU).
Why tmpfiles, not lxc.conf: Proxmox dev: syntax requires a real char device, not a symlink. Could add lxc.mount.entry to bind all of /dev/dri, but tmpfiles is self-contained in the CT and survives Plex/Finn upgrades.
[Claude Code]
[auto-memory session e4c8da19-c8d7-44e6-9ae1-b33f3f9537e0, confidence 0.85, mode direct]