Proxmox. USB passthrough. Zmiana sterownika na vfio-pci.

Jeśli chcemy dołączyć do maszyny wirtualnej kontroler usb, który jest w oddzielej grupie iommu a pomimo tego nadal występuję problem to najprawdopodobniej sterownik xhci_hcd przejął kontroler USB zamiast vfio-pci.

Sprawdzamy jaki sterownik jest podpięty pod nasz kontroler usb

 lspci -v 

W moim przypadku kontroler usb jest pod adresem 0000:0c:00.3 i używa xhci_hcd

0c:00.3 USB controller: Advanced Micro Devices, Inc. [AMD] Matisse USB 3.0 Host Controller (prog-if 30 [XHCI])
        Subsystem: Gigabyte Technology Co., Ltd Matisse USB 3.0 Host Controller
        Flags: bus master, fast devsel, latency 0, IRQ 121, IOMMU group 20
        Memory at fc800000 (64-bit, non-prefetchable) [size=1M]
        Capabilities: [48] Vendor Specific Information: Len=08 <?>
        Capabilities: [50] Power Management version 3
        Capabilities: [64] Express Endpoint, MSI 00
        Capabilities: [a0] MSI: Enable+ Count=1/8 Maskable- 64bit+
        Capabilities: [c0] MSI-X: Enable- Count=8 Masked-
        Capabilities: [100] Vendor Specific Information: ID=0001 Rev=1 Len=010 <?>
        Capabilities: [150] Advanced Error Reporting
        Capabilities: [2a0] Access Control Services
        Capabilities: [370] Transaction Processing Hints
        Kernel driver in use: xhci_hcd 
        Kernel modules: xhci_pci

Problem można rozwiązać w prosty sposób używając narzędzia driverctl:

Jeśli proxmox nie posiada driverctl to doinstalowujemy

apt install driverctl

Wprowadzamy komendę

driverctl set-override 0000:0c:00.3 vfio-pci

Po restarcie jest już vfio-pci.

0c:00.3 USB controller: Advanced Micro Devices, Inc. [AMD] Matisse USB 3.0 Host Controller (prog-if 30 [XHCI])
        Subsystem: Gigabyte Technology Co., Ltd Matisse USB 3.0 Host Controller
        Flags: bus master, fast devsel, latency 0, IRQ 121, IOMMU group 20
        Memory at fc800000 (64-bit, non-prefetchable) [size=1M]
        Capabilities: [48] Vendor Specific Information: Len=08 <?>
        Capabilities: [50] Power Management version 3
        Capabilities: [64] Express Endpoint, MSI 00
        Capabilities: [a0] MSI: Enable+ Count=1/8 Maskable- 64bit+
        Capabilities: [c0] MSI-X: Enable- Count=8 Masked-
        Capabilities: [100] Vendor Specific Information: ID=0001 Rev=1 Len=010 <?>
        Capabilities: [150] Advanced Error Reporting
        Capabilities: [2a0] Access Control Services
        Capabilities: [370] Transaction Processing Hints
        Kernel driver in use: vfio-pci
        Kernel modules: xhci_pci

Teraz można już dodać kontroler do maszyny wirtualnej