Assign host's USB PCIe controller to vm - not separate usb controller card

Oct 25, 2020
35
3
13
44
I'm currently trying to assign a/the USB controller to a virtual machine.
I know the process of assigning a pci device to a machine, but in my case I would like to try to assign the usb controller of the host to the vm - will that cause any troubles? Currently I don't have any separate usb cards available and I would need the usb connection only once.
(passthrough of the device doesn't work - only passing on the whole card)

What will happen if I assign the host's usb controller to the vm (00:14.0 USB controller)?

Bash:
lspci -k
find /sys/kernel/iommu_groups/ -type l | sort -n -t "/" -k 5
pveversion -v
00:00.0 Host bridge: Intel Corporation Device 9b33 (rev 05)
        DeviceName: Onboard - Other
        Subsystem: ASUSTeK Computer Inc. Device 8694
        Kernel driver in use: skl_uncore
00:01.0 PCI bridge: Intel Corporation 6th-10th Gen Core Processor PCIe Controller (x16) (rev 05)
        Kernel driver in use: pcieport
00:01.2 PCI bridge: Intel Corporation Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor PCIe Controller (x4) (rev 05)
        Kernel driver in use: pcieport
00:02.0 VGA compatible controller: Intel Corporation CometLake-S GT2 [UHD Graphics 630] (rev 05)
        DeviceName: Onboard - Video
        Subsystem: ASUSTeK Computer Inc. Device 8694
        Kernel driver in use: i915
        Kernel modules: i915
00:14.0 USB controller: Intel Corporation Device 43ed (rev 11)
        DeviceName: Onboard - Other
        Subsystem: ASUSTeK Computer Inc. Device 8694
        Kernel driver in use: xhci_hcd
        Kernel modules: xhci_pci
00:14.2 RAM memory: Intel Corporation Device 43ef (rev 11)
        DeviceName: Onboard - Other
        Subsystem: ASUSTeK Computer Inc. Device 8694
00:15.0 Serial bus controller [0c80]: Intel Corporation Device 43e8 (rev 11)
        DeviceName: Onboard - Other
        Subsystem: ASUSTeK Computer Inc. Device 8694
        Kernel driver in use: intel-lpss
        Kernel modules: intel_lpss_pci
00:15.1 Serial bus controller [0c80]: Intel Corporation Device 43e9 (rev 11)
        DeviceName: Onboard - Other
        Subsystem: ASUSTeK Computer Inc. Device 8694
        Kernel driver in use: intel-lpss
        Kernel modules: intel_lpss_pci
00:16.0 Communication controller: Intel Corporation Device 43e0 (rev 11)
        DeviceName: Onboard - Other
        Subsystem: ASUSTeK Computer Inc. Device 8694
        Kernel driver in use: mei_me
        Kernel modules: mei_me
00:17.0 SATA controller: Intel Corporation Device 43d2 (rev 11)
        DeviceName: Onboard - SATA
        Subsystem: ASUSTeK Computer Inc. Device 8694
        Kernel driver in use: ahci
        Kernel modules: ahci
00:1b.0 PCI bridge: Intel Corporation Device 43c0 (rev 11)
        Kernel driver in use: pcieport
00:1b.2 PCI bridge: Intel Corporation Device 43c2 (rev 11)
        Kernel driver in use: pcieport
00:1b.3 PCI bridge: Intel Corporation Device 43c3 (rev 11)
        Kernel driver in use: pcieport
00:1b.4 PCI bridge: Intel Corporation Device 43c4 (rev 11)
        Kernel driver in use: pcieport
00:1c.0 PCI bridge: Intel Corporation Device 43b8 (rev 11)
        Kernel driver in use: pcieport
00:1d.0 PCI bridge: Intel Corporation Device 43b0 (rev 11)
        Kernel driver in use: pcieport
00:1f.0 ISA bridge: Intel Corporation Device 4385 (rev 11)
        DeviceName: Onboard - Other
        Subsystem: ASUSTeK Computer Inc. Device 8694
00:1f.3 Audio device: Intel Corporation Device f0c8 (rev 11)
        DeviceName: Onboard - Sound
        Subsystem: ASUSTeK Computer Inc. Device 8694
        Kernel modules: snd_hda_intel
00:1f.4 SMBus: Intel Corporation Device 43a3 (rev 11)
        DeviceName: Onboard - Other
        Subsystem: ASUSTeK Computer Inc. Device 8694
        Kernel driver in use: i801_smbus
        Kernel modules: i2c_i801
00:1f.5 Serial bus controller [0c80]: Intel Corporation Device 43a4 (rev 11)
        DeviceName: Onboard - Other
        Subsystem: ASUSTeK Computer Inc. Device 8694
02:00.0 Non-Volatile memory controller: Kingston Technology Company, Inc. Device 500f (rev 03)
        Subsystem: Kingston Technology Company, Inc. Device 500f
        Kernel driver in use: nvme
        Kernel modules: nvme
04:00.0 Ethernet controller: Intel Corporation Ethernet Controller I225-V (rev 03)
        Subsystem: ASUSTeK Computer Inc. Ethernet Controller I225-V
        Kernel driver in use: igc
        Kernel modules: igc
06:00.0 Non-Volatile memory controller: Kingston Technology Company, Inc. Device 500f (rev 03)
        Subsystem: Kingston Technology Company, Inc. Device 500f
        Kernel driver in use: nvme
        Kernel modules: nvme
08:00.0 Non-Volatile memory controller: Kingston Technology Company, Inc. Device 500f (rev 03)
        Subsystem: Kingston Technology Company, Inc. Device 500f
        Kernel driver in use: nvme
        Kernel modules: nvme
/sys/kernel/iommu_groups/0/devices/0000:00:00.0
/sys/kernel/iommu_groups/1/devices/0000:00:01.0
/sys/kernel/iommu_groups/1/devices/0000:00:01.2
/sys/kernel/iommu_groups/1/devices/0000:02:00.0
/sys/kernel/iommu_groups/2/devices/0000:00:02.0
/sys/kernel/iommu_groups/3/devices/0000:00:14.0
/sys/kernel/iommu_groups/3/devices/0000:00:14.2
/sys/kernel/iommu_groups/4/devices/0000:00:15.0
/sys/kernel/iommu_groups/4/devices/0000:00:15.1
/sys/kernel/iommu_groups/5/devices/0000:00:16.0
/sys/kernel/iommu_groups/6/devices/0000:00:17.0
/sys/kernel/iommu_groups/7/devices/0000:00:1b.0
/sys/kernel/iommu_groups/8/devices/0000:00:1b.2
/sys/kernel/iommu_groups/9/devices/0000:00:1b.3
/sys/kernel/iommu_groups/10/devices/0000:00:1b.4
/sys/kernel/iommu_groups/11/devices/0000:00:1c.0
/sys/kernel/iommu_groups/12/devices/0000:00:1d.0
/sys/kernel/iommu_groups/13/devices/0000:00:1f.0
/sys/kernel/iommu_groups/13/devices/0000:00:1f.3
/sys/kernel/iommu_groups/13/devices/0000:00:1f.4
/sys/kernel/iommu_groups/13/devices/0000:00:1f.5
/sys/kernel/iommu_groups/14/devices/0000:04:00.0
/sys/kernel/iommu_groups/15/devices/0000:06:00.0
/sys/kernel/iommu_groups/16/devices/0000:08:00.0
proxmox-ve: 7.2-1 (running kernel: 5.15.64-1-pve)
pve-manager: 7.2-11 (running version: 7.2-11/b76d3178)
pve-kernel-5.15: 7.2-13
pve-kernel-helper: 7.2-13
pve-kernel-5.13: 7.1-9
pve-kernel-5.15.64-1-pve: 5.15.64-1
pve-kernel-5.15.60-2-pve: 5.15.60-2
pve-kernel-5.15.60-1-pve: 5.15.60-1
pve-kernel-5.15.53-1-pve: 5.15.53-1
pve-kernel-5.15.39-4-pve: 5.15.39-4
pve-kernel-5.15.39-3-pve: 5.15.39-3
pve-kernel-5.15.35-3-pve: 5.15.35-6
pve-kernel-5.15.35-1-pve: 5.15.35-3
pve-kernel-5.13.19-6-pve: 5.13.19-15
pve-kernel-5.13.19-4-pve: 5.13.19-9
pve-kernel-5.13.19-3-pve: 5.13.19-7
pve-kernel-5.13.19-2-pve: 5.13.19-4
pve-kernel-5.13.19-1-pve: 5.13.19-3
ceph-fuse: 15.2.15-pve1
corosync: 3.1.5-pve2
criu: 3.15-1+pve-1
glusterfs-client: 9.2-1
ifupdown2: 3.1.0-1+pmx3
ksm-control-daemon: 1.4-1
libjs-extjs: 7.0.0-1
libknet1: 1.24-pve1
libproxmox-acme-perl: 1.4.2
libproxmox-backup-qemu0: 1.3.1-1
libpve-access-control: 7.2-4
libpve-apiclient-perl: 3.2-1
libpve-common-perl: 7.2-3
libpve-guest-common-perl: 4.1-4
libpve-http-server-perl: 4.1-4
libpve-storage-perl: 7.2-10
libspice-server1: 0.14.3-2.1
lvm2: 2.03.11-2.1
lxc-pve: 5.0.0-3
lxcfs: 4.0.12-pve1
novnc-pve: 1.3.0-3
proxmox-backup-client: 2.2.7-1
proxmox-backup-file-restore: 2.2.7-1
proxmox-mini-journalreader: 1.3-1
proxmox-widget-toolkit: 3.5.1
pve-cluster: 7.2-2
pve-container: 4.2-3
pve-docs: 7.2-2
pve-edk2-firmware: 3.20220526-1
pve-firewall: 4.2-6
pve-firmware: 3.5-6
pve-ha-manager: 3.4.0
pve-i18n: 2.7-2
pve-qemu-kvm: 7.0.0-4
pve-xtermjs: 4.16.0-1
qemu-server: 7.2-4
smartmontools: 7.2-pve3
spiceterm: 3.2-2
swtpm: 0.7.1~bpo11+1
vncterm: 1.7-1
zfsutils-linux: 2.1.6-pve1
 
What will happen if I assign the host's usb controller to the vm (00:14.0 USB controller)?
/sys/kernel/iommu_groups/3/devices/0000:00:14.0 /sys/kernel/iommu_groups/3/devices/0000:00:14.2
The Proxmox host will also lose the other device(s) in the same IOMMU group (3) and I don't think it's a good idea to lose 00:14.2 RAM memory but you could try. It also possible that the USB controller does not reset properly and won't work with passthrough (PCI(e) passthrouygh is always trial and error).