黑名单 xhci_hcd

黑名单 xhci_hcd

我需要为 qemu 下的 VM 传递 USB 3.0 控制器。

我的 lspci -nnk 是:

...
02:00.0 USB controller [0c03]: Renesas Technology Corp. uPD720201 USB 3.0 Host Controller [1912:0014] (rev 03)
    Kernel driver in use: xhci_hcd
03:00.0 USB controller [0c03]: VIA Technologies, Inc. VL805 USB 3.0 Host Controller [1106:3483] (rev 01)
    Subsystem: Gigabyte Technology Co., Ltd VL805 USB 3.0 Host Controller [1458:5007]
    Kernel driver in use: xhci_hcd
...

我想要通过的是 uPD720201,它在 IOMMU 组中很孤独。

我的 vfio.conf 是:

options vfio-pci ids=1002:68f9,1002:aa68,1912:0014 disable_vga=1
#Note : the 1002:68f9 and 1002:aa68 are the gpu card, which is correctly pass trough

但现在的问题似乎是 xhci_hcd 驱动程序覆盖了 vfio 驱动程序,因为它似乎在启动时正确加载:

$ dmesg | grep "vfio"
[    4.475492] vfio: unknown parameter 'vfio_iommu_type1' ignored
[    4.476319] vfio: unknown parameter 'vfio_virqfd' ignored
[    4.477177] vfio: unknown parameter 'vfio_pci' ignored
[    4.478023] vfio: unknown parameter 'ids' ignored
[   21.546903] vfio-pci 0000:05:00.0: vgaarb: changed VGA decodes: olddecodes=io+mem,decodes=none:owns=none
[   21.568068] vfio_pci: add [1002:68f9[ffff:ffff]] class 0x000000/00000000
[   21.588151] vfio_pci: add [1002:aa68[ffff:ffff]] class 0x000000/00000000
[   21.588824] vfio_pci: add [1912:0014[ffff:ffff]] class 0x000000/00000000
[   27.296307] vfio-pci 0000:05:00.0: vgaarb: changed VGA decodes: olddecodes=none,decodes=none:owns=none

我已经尝试在 blacklist.conf 和 grub 中将 xhci_hcd 列入黑名单:

/etc/modprobe.d/blacklist.conf
...
blacklist xhci_hcd
...

/etc/default/grub
...
GRUB_CMDLINE_LINUX_DEFAULT="amd_iommu=on iommu=pt kvm_amd.npt=1 modprobe.blacklist=xhci_hcd"
...

当然,在进行这些修改后,我执行了 update-initramfs -u 和 update-grub2。在所有情况下,它都没有效果,我总是看到“正在使用的内核驱动程序:xhci_hcd”我发现禁用 xhci_hcd 的唯一方法是通过以下方式解除我的卡的绑定:

$ echo '0000:02:00.0' | tee /sys/bus/pci/devices/0000:02:00.0/driver/unbind

但我不知道如何在启动时执行它(可能在 vfio 分配之前)。

您知道禁用 xhci_hcd(或其他方法)以使其工作的解决方案吗?


我试过了,我有这个:

grub_cmd_blacklist

命令已经出现,但都在一行上,所以我只需在它们之间输入回车符。

现在我的板载 USB3 控制器已被禁用(我试图在其上放置一个 USB 设备但它确实被禁用了)但我添加的控制器没有被禁用。

我的 lspci -nnk 是:

...
02:00.0 USB controller [0c03]: Renesas Technology Corp. uPD720201 USB 3.0 Host Controller [1912:0014] (rev 03)
    Kernel driver in use: xhci_hcd
03:00.0 USB controller [0c03]: VIA Technologies, Inc. VL805 USB 3.0 Host Controller [1106:3483] (rev 01)
    Subsystem: Gigabyte Technology Co., Ltd VL805 USB 3.0 Host Controller [1458:5007]
...

注意:现在我的 grub 文件是(并且它使我上面描述的内容持久):

/etc/default/grub
...
GRUB_CMDLINE_LINUX="amd_iommu=on iommu=pt kvm_amd.npt=1"
GRUB_CMDLINE_LINUX="modprobe.blacklist=xhci_hcd"
...

答案1

我最终选择从 kernel.org 源完全重建内核,并将 xhci_hcd 设为加载模块而不是内置模块。现在我可以通过以下方式禁用 xhci_hcd:

modprobe -r xhci_pci
modprobe -r xhci_hcd

随后是:

modprobe vfio
modprobe vfio_pci

现在我可以将控制器连接到虚拟机并获得:

lspci -nnk
...
02:00.0 USB controller [0c03]: Renesas Technology Corp. uPD720201 USB 3.0 Host Controller [1912:0014] (rev 03)
    Kernel driver in use: vfio-pci
    Kernel modules: xhci_pci
03:00.0 USB controller [0c03]: VIA Technologies, Inc. VL805 USB 3.0 Host Controller [1106:3483] (rev 01)
    Subsystem: Gigabyte Technology Co., Ltd VL805 USB 3.0 Host Controller [1458:5007]
    Kernel modules: xhci_pci
...

但不幸的是我的板载 USB 3.0 控制器(VL805)被禁用,所以我只能执行以下操作:

...
modprobe xhci_pci
modprobe xhci_hcd
...

所以现在两个控制器都可以在好的机器上运行,但这有点复杂

注意:grub和blacklist.conf中的所有配置都是无用的。

答案2

您能否调出 GRUB 启动菜单并编辑命令行选项,类似于 @matsuzaki 在这个帖子

如果是这样,那么您可能能够将黑名单添加modprobe.blacklist=xhci_hcd为参数。

根据您可能想尝试F1打开启动菜单:askubuntu.com/questions/1014626/how-to-access-grub-menu

相关内容