Optimus Said No: A Laptop GPU Passthrough Tragedy in Proxmox

imagen

The first I was optimistic and blame my ignorance (still is today) why it failed. The second time, I did my research but still did anyway it to satisfy my curiosity.

This is the last time, please just buy a desktop GPU and save yourself from headache.

Table of Contents

Setup

I built a Proxmox Node using an old Laptop-Thinkpad P51.

 1         .://:`              `://:.             root@marilag
 2       `hMMMMMMd/          /dMMMMMMh`           ------------
 3        `sMMMMMMMd:      :mMMMMMMMs`            OS: Proxmox VE 9.1.1 x86_64
 4`-/+oo+/:`.yMMMMMMMh-  -hMMMMMMMy.`:/+oo+/-`    Host: 20HJS16P08 (ThinkPad P51)
 5`:oooooooo/`-hMMMMMMMyyMMMMMMMh-`/oooooooo:`    Kernel: Linux 6.17.2-1-pve
 6  `/oooooooo:`:mMMMMMMMMMMMMm:`:oooooooo/`      Uptime: 3 hours, 43 mins
 7    ./ooooooo+- +NMMMMMMMMN+ -+ooooooo/.        Packages: 891 (dpkg)
 8      .+ooooooo+-`oNMMMMNo`-+ooooooo+.          Shell: bash 5.2.37
 9        -+ooooooo/.`sMMs`./ooooooo+-            Display (LGD0538): 1920x1080 @ 60 Hz in 15" [Built-in]
10          :oooooooo/`..`/oooooooo:              Terminal: /dev/pts/1
11          :oooooooo/`..`/oooooooo:              CPU: Intel(R) Core(TM) i7-7820HQ (8) @ 3.90 GHz
12        -+ooooooo/.`sMMs`./ooooooo+-            GPU 1: NVIDIA Quadro M1200 Mobile [Discrete]
13      .+ooooooo+-`oNMMMMNo`-+ooooooo+.          GPU 2: Intel HD Graphics 630 @ 1.10 GHz [Integrated]
14    ./ooooooo+- +NMMMMMMMMN+ -+ooooooo/.        Memory: 18.23 GiB / 46.77 GiB (39%)
15  `/oooooooo:`:mMMMMMMMMMMMMm:`:oooooooo/`      Swap: 0 B / 8.00 GiB (0%)
16`:oooooooo/`-hMMMMMMMyyMMMMMMMh-`/oooooooo:`    Disk (/): 5.52 GiB / 67.73 GiB (8%) - ext4
17`-/+oo+/:`.yMMMMMMMh-  -hMMMMMMMy.`:/+oo+/-`    Disk (/mnt/pve/ssd-dir): 22.56 GiB / 109.48 GiB (21%) - ext4
18        `sMMMMMMMm:      :dMMMMMMMs`            Local IP (vmbr0): 192.168.69.69/24
19       `hMMMMMMd/          /dMMMMMMh`           Battery (00NY493): 66% [AC Connected]
20         `://:`              `://:`             Locale: en_US.UTF-8

The plan is to passthrough NVIDIA Quadro M1200 GPU to an Arch Linux VM and run LLM and Jellyfin.

Config

These are the config. I may have used different setup why testing configuration I find in forums. This is the final version where i conclude that it is madness to continue.

/etc/pve/qemu-server/204.conf

 1#arch nvidia
 2agent: 1
 3balloon: 0
 4bios: ovmf
 5boot: c
 6bootdisk: scsi0
 7cicustom:  
 8ciupgrade: 1
 9cores: 4
10cpu: host
11efidisk0: nvme-lvm:vm-204-disk-1,efitype=4m,size=4M
12hostpci0: 0000:01:00,pcie=1
13hotplug: network,disk,usb
14ide1: nvme-lvm:vm-204-cloudinit,media=cdrom,size=4M
15ipconfig0: ip=192.168.69.69/24,gw=192.168.69.1
16kvm: 1
17machine: q35
18memory: 16384
19meta: creation-qemu=10.1.2,ctime=1777956272
20name: mrlgarch3dnvidia
21nameserver: 1.1.1.1 8.8.8.8
22net0: virtio=BC:24:11:74:61:CC,bridge=vmbr0,firewall=1

/etc/default/grub

1GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"

/etc/modprobe.d/blacklist.conf

1blacklist nouveau
2blacklist nvidia

/etc/modules

1vifio
2vifio_iommu_type1
3vifio_pci
4vifio_virqfd

The Bullshit

Seem’s okay at first, was able to install driver and the VM can detect the GPU.

 101:00.0 3D controller: NVIDIA Corporation GM107GLM [Quadro M1200 Mobile] (rev a2)
 2	Physical Slot: 0
 3	Flags: bus master, fast devsel, latency 0, IRQ 16
 4	Memory at 80000000 (32-bit, non-prefetchable) [size=16M]
 5	Memory at 7000000000 (64-bit, prefetchable) [size=256M]
 6	Memory at 7010000000 (64-bit, prefetchable) [size=32M]
 7	I/O ports at 7000 [size=128]
 8	Expansion ROM at 81080000 [disabled] [size=512K]
 9	Capabilities: [60] Power Management version 3
10	Capabilities: [68] MSI: Enable- Count=1/1 Maskable- 64bit+
11	Capabilities: [78] Express Endpoint, IntMsgNum 0
12	Capabilities: [100] Virtual Channel
13	Capabilities: [250] Latency Tolerance Reporting
14	Capabilities: [128] Power Budgeting <?>
15	Capabilities: [600] Vendor Specific Information: ID=0001 Rev=1 Len=024 <?>
16	Kernel driver in use: nvidia
17	Kernel modules: nouveau, nvidia_drm, nvidia
18
1901:00.1 Audio device: NVIDIA Corporation GM107 High Definition Audio Controller [GeForce 940MX] (rev a1) (prog-if 00 [HDA compatible])
20	Physical Slot: 0
21	Flags: bus master, fast devsel, latency 0, IRQ 17
22	Memory at 81000000 (32-bit, non-prefetchable) [size=16K]
23	Capabilities: [60] Power Management version 3
24	Capabilities: [68] MSI: Enable- Count=1/1 Maskable- 64bit+
25	Capabilities: [78] Express Endpoint, IntMsgNum 0
26	Kernel driver in use: snd_hda_intel
27	Kernel modules: snd_hda_intel

The bullshit that persist.

  • NVML sees zero GPUs.
  • The driver cannot successfully load or execute the GPU firmware (VBIOS), so RM initialization aborts.
1[root@mrlgarch3dnvidia ~]# nvidia-smi
2No devices were found
1[root@mrlgarch3dnvidia ~]# dmesg | grep -i nvrm | tail -50
2[    6.290618] NVRM: loading NVIDIA UNIX x86_64 Kernel Module  580.159.03  Fri Apr 24 06:16:47 UTC 2026
3[   29.908481] NVRM: GPU 0000:01:00.0: Failed to copy vbios to system memory.
4[   29.908635] NVRM: GPU 0000:01:00.0: RmInitAdapter failed! (0x30:0xffff:1129)
5[   29.908640] NVRM: GPU 0000:01:00.0: rm_init_adapter failed, device minor number 0
6[ 2857.191740] NVRM: GPU 0000:01:00.0: Failed to copy vbios to system memory.
7[ 2857.191897] NVRM: GPU 0000:01:00.0: RmInitAdapter failed! (0x30:0xffff:1129)
8[ 2857.191905] NVRM: GPU 0000:01:00.0: rm_init_adapter failed, device minor number 0

Conclusion

Just buy a desktop GPU, don’t buy NVIDIA if you are using Linux as your main setup. Even in desktop environment NVIDIA Optimus is just a pain in the butt to setup.

Check this blog for more detail explanation.