You are not logged in.
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
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
(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