我在内核 4.14.1 上使用 qemu 版本 2.10.1 运行 Windows 10 VM,并通过 GPU。我还可以通过基于 Intel 的 USB 控制器。到目前为止,一切都很好。
我的英特尔 USB 控制器不支持重置,这会导致问题。我有另一个板载 USB 控制器 - 基于 ASMedia。据说它支持重置:
IOMMU group 12
[RESET] 04:00.0 USB controller [0c03]: ASMedia Technology Inc. Device [1b21:2142]
但是当我尝试通过它时,虚拟机无法启动,而不是我的英特尔的。 “dmesg”给了我:
[ 389.368990] device vnet0 entered promiscuous mode
[ 389.369151] virbr0: port 2(vnet0) entered blocking state
[ 389.369153] virbr0: port 2(vnet0) entered forwarding state
[ 390.360933] vfio-pci 0000:01:00.0: enabling device (0000 -> 0003)
[ 390.361265] vfio_ecap_init: 0000:01:00.0 hiding ecap 0x19@0x900
[ 391.444984] pcieport 0000:00:1c.4: AER: Uncorrected (Non-Fatal) error received: id=00e4
[ 391.444999] pcieport 0000:00:1c.4: PCIe Bus Error: severity=Uncorrected (Non-Fatal), type=Transaction Layer, id=00e4(Requester ID)
[ 391.445007] pcieport 0000:00:1c.4: device [8086:a294] error status/mask=00100000/00010000
[ 391.445012] pcieport 0000:00:1c.4: [20] Unsupported Request (First)
[ 391.445017] pcieport 0000:00:1c.4: TLP Header: 34000000 04000010 00000000 17ff17ff
[ 391.445027] pcieport 0000:00:1c.4: broadcast error_detected message
[ 391.445034] pcieport 0000:00:1c.4: broadcast mmio_enabled message
[ 391.445036] pcieport 0000:00:1c.4: broadcast resume message
[ 391.445041] pcieport 0000:00:1c.4: AER: Device recovery successful
[ 391.445153] vfio_ecap_init: 0000:04:00.0 hiding ecap 0x19@0x200
[ 393.781020] pcieport 0000:00:1c.4: AER: Uncorrected (Non-Fatal) error received: id=00e4
[ 393.781033] pcieport 0000:00:1c.4: PCIe Bus Error: severity=Uncorrected (Non-Fatal), type=Transaction Layer, id=00e4(Requester ID)
[ 393.781041] pcieport 0000:00:1c.4: device [8086:a294] error status/mask=00100000/00010000
[ 393.781047] pcieport 0000:00:1c.4: [20] Unsupported Request (First)
[ 393.781052] pcieport 0000:00:1c.4: TLP Header: 34000000 04000010 00000000 17ff17ff
[ 393.781061] pcieport 0000:00:1c.4: broadcast error_detected message
[ 393.781079] pcieport 0000:00:1c.4: broadcast mmio_enabled message
[ 393.781082] pcieport 0000:00:1c.4: broadcast resume message
两个 USB 控制器都位于自己的 IOMMU 组中,不与其他任何控制器共享
为什么会发生这种情况? ASMedia 是否缺少一些我不知道的必需硬件功能?