You are not logged in.

#1 2025-03-16 06:28:31

violetcrime
Member
Registered: 2025-03-16
Posts: 2

[SOLVED] VFIO Passthrough- nvidia driver always loads for device

Howdy folks! I'm new to Arch, and have wanted to make a proper virtualized gaming system for over a decade. Excited to finally have the requisite hardware to properly get it going.

I'm following the Arch VFIO guide, but I can't seem to keep the nvidia drivers from loading for the card I wish to pass through.

$ sudo lspci -nnk -d 10de:2684
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation AD102 [GeForce RTX 4090] [10de:2684] (rev a1)
	Subsystem: Gigabyte Technology Co., Ltd Device [1458:40e5]
	Kernel driver in use: nvidia
	Kernel modules: nouveau, nvidia_drm, nvidia

IOMMU Script from the wiki

...
IOMMU Group 13:
	01:00.0 VGA compatible controller [0300]: NVIDIA Corporation AD102 [GeForce RTX 4090] [10de:2684] (rev a1)
	01:00.1 Audio device [0403]: NVIDIA Corporation AD102 High Definition Audio Controller [10de:22ba] (rev a1)
IOMMU Group 14:
...

Per the wiki, I've set my kernel options in my default systemd-boot entry (including amd_iommu=on even though that seems unnecessary anymore; tried without it initially, same result)

$ sudo cat /boot/loader/entries/arch.conf 
title Arch
linux /vmlinuz-linux
initrd /initramfs-linux.img
options root=PARTUUID=8f99c63b-b011-46c0-9f9c-9d33f2991425 rw amd_iommu=on vfio_pci.ids=10de:2684,10de:22ba

Ditto the modprobe.d/vfio.conf entry-

$ sudo cat /etc/modprobe.d/vfio.conf
softdep nvidia pre: vfio-pci

The wiki reads as though the modprobe route supersedes the mkinitcpio configuration, but I removed the nvidia-specific modules anyway, to no avail-

#MODULES=(nvidia nvidia_modeset nvidia_uvm nvidia_drm)
MODULES=()

So if I'm understanding the wiki correctly, this should be all I need, right? Where else might the driver be being loaded from?

$ sudo journalctl -b | grep -i nvidia
Mar 15 23:27:34 cyssor kernel: nvidia: loading out-of-tree module taints kernel.
Mar 15 23:27:34 cyssor kernel: nvidia: module license 'NVIDIA' taints kernel.
Mar 15 23:27:34 cyssor kernel: nvidia: module verification failed: signature and/or required key missing - tainting kernel
Mar 15 23:27:34 cyssor kernel: nvidia: module license taints kernel.
Mar 15 23:27:34 cyssor kernel: nvidia-nvlink: Nvlink Core is being initialized, major device number 240
Mar 15 23:27:34 cyssor kernel: nvidia 0000:01:00.0: vgaarb: VGA decodes changed: olddecodes=io+mem,decodes=none:owns=none
Mar 15 23:27:34 cyssor kernel: NVRM: loading NVIDIA UNIX x86_64 Kernel Module  570.124.04  Tue Feb 25 04:12:12 UTC 2025
Mar 15 23:27:34 cyssor kernel: nvidia-modeset: Loading NVIDIA Kernel Mode Setting Driver for UNIX platforms  570.124.04  Tue Feb 25 03:39:21 UTC 2025
Mar 15 23:27:34 cyssor kernel: nvidia_uvm: module uses symbols nvUvmInterfaceDisableAccessCntr from proprietary module nvidia, inheriting taint.
Mar 15 23:27:34 cyssor kernel: nvidia-uvm: Loaded the UVM driver, major device number 238.
Mar 15 23:27:34 cyssor kernel: [drm] [nvidia-drm] [GPU ID 0x00000100] Loading driver
Mar 15 23:27:34 cyssor kernel: [drm] Initialized nvidia-drm 0.0.0 for 0000:01:00.0 on minor 1
Mar 15 23:27:34 cyssor kernel: nvidia 0000:01:00.0: [drm] fb1: nvidia-drmdrmfb frame buffer device
Mar 15 23:27:35 cyssor kernel: input: HDA NVidia HDMI/DP,pcm=3 as /devices/pci0000:00/0000:00:01.1/0000:01:00.1/sound/card1/input19
Mar 15 23:27:35 cyssor kernel: input: HDA NVidia HDMI/DP,pcm=7 as /devices/pci0000:00/0000:00:01.1/0000:01:00.1/sound/card1/input20
Mar 15 23:27:35 cyssor kernel: input: HDA NVidia HDMI/DP,pcm=8 as /devices/pci0000:00/0000:00:01.1/0000:01:00.1/sound/card1/input21
Mar 15 23:27:35 cyssor kernel: input: HDA NVidia HDMI/DP,pcm=9 as /devices/pci0000:00/0000:00:01.1/0000:01:00.1/sound/card1/input22
Mar 15 23:27:51 cyssor kernel:  hid_glorious amdgpu hid_generic amdxcp i2c_algo_bit drm_exec gpu_sched drm_suballoc_helper drm_panel_backlight_quirks drm_buddy drm_display_helper nvme cec crc32c_intel nvme_core sr_mod usbhid crc16 cdrom nvme_auth nvidia_drm(POE) drm_ttm_helper ttm nvidia_uvm(POE) nvidia_modeset(POE) video wmi nvidia(POE)

Another thread made mention of a udev rule, apparently prescribed elsewhere in the wiki, which I don't have-

$ sudo ls /etc/udev/rules.d/ | wc -l
0

Any help would be appreciated. Loving Arch so far!

EDIT- I had updated the /etc/mkinitcpio.conf file, sure, but never regenerated the initramfs image using mkinitcpio -P

Last edited by violetcrime (2025-03-16 17:04:51)

Offline

#2 2025-03-16 08:00:18

seth
Member
Registered: 2012-09-03
Posts: 62,873

Re: [SOLVED] VFIO Passthrough- nvidia driver always loads for device

The nvidia modules might be added to the initramfs via the kms hook - check whether the nvidia modules load before nvme.
You could also add vfio and vfio_pci to the MODULES array (and regenerate the initramfs, also to include the modprobe config file there)

Offline

#3 2025-03-16 17:02:34

violetcrime
Member
Registered: 2025-03-16
Posts: 2

Re: [SOLVED] VFIO Passthrough- nvidia driver always loads for device

Seth wrote:

(and regenerate the initramfs, also to include the modprobe config file there)

:facepalm: Thank you for the prompt and precisely detailed reply. Just needed to run mkinitcpio -P and reboot and viola! -1 populated screen. Didn't even need to add the vfio flags. Thanks again!

Offline

Board footer

Powered by FluxBB