On 8/26/24 10:37, daggs via Users wrote:
Greetings,
I have the following combo device:
dagg@NCC-5001D ~ $ lsusb -d8087:0029
Bus 001 Device 002: ID 8087:0029 Intel Corp. AX200 Bluetooth
dagg@NCC-5001D ~ $ lspci -vv -s 03:00.0
03:00.0 Network controller: Intel Corporation Wi-Fi 6 AX200 (rev 1a)
Subsystem: Intel Corporation Wi-Fi 6 AX200NGW
Control: I/O- Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping-
SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort-
<MAbort- >SERR- <PERR- INTx-
Interrupt: pin A routed to IRQ 34
IOMMU group: 13
Region 0: Memory at fc600000 (64-bit, non-prefetchable) [size=16K]
Capabilities: <access denied>
Kernel modules: iwlwifi
I want to pass each of them to a different vm.
should I expect problems?
If you assign a PCI device to a VM then the host has to release it.
You're not showing the full PCI device config (I assume bluetooth is
another PCI function), but I'd assume it's all or nothing. I don't think
I've seen a PCI device that allows detaching a single PCI function
(apart from SRIO-V, which are specifically designed to do this). IOW, if
you assign the 03:00.0 PCI device to a VM then the other function
(bluetooth) has to be detached too at which point it can not be assigned
to another VM.
This can be verified via virsh:
virsh nodedev-dumpxml pci_0000_03_00_0
in the printed XML you'll find <iommuGroup/> element, e.g.:
<iommuGroup number='14'>
<address domain='0x0000' bus='0x03' slot='0x00'
function='0x0'/>
</iommuGroup>
If there's just one <address/> child element, then the device is in its
own iommu group and can be detached alone. If there are multiple child
elements, e.g.:
<iommuGroup number='16'>
<address domain='0x0000' bus='0x07' slot='0x01'
function='0x0'/>
<address domain='0x0000' bus='0x07' slot='0x04'
function='0x0'/>
<address domain='0x0000' bus='0x08' slot='0x00'
function='0x0'/>
<address domain='0x0000' bus='0x07' slot='0x00'
function='0x0'/>
<address domain='0x0000' bus='0x06' slot='0x00'
function='0x0'/>
<address domain='0x0000' bus='0x04' slot='0x01'
function='0x0'/>
</iommuGroup>
then all devices within the iommu group have to be detached from the
host before giving any device to a VM.
Michal