Hello,
I'm trying to migrate a working qemu command line configuration to
libvirt.
The part I'm currently failing on is:
$ qemu-system-x86_64 -M Q35 ... -device vfio-pci,host=05:00.0,bus=pcie.0
The right way to translate this into libvirt XML seems to be using
<hostdev>, but I seem to be unable to plug it into the pcie-root port
This is how the interesting part looks like when I let "virsh edit"
generate an <address>
<controller type='pci' index='0' model='pcie-root'/>
<controller type='pci' index='1'
model='dmi-to-pci-bridge'>
<address type='pci' domain='0x0000' bus='0x00'
slot='0x02'
function='0x0'/>
</controller>
<controller type='pci' index='2' model='pci-bridge'>
<address type='pci' domain='0x0000' bus='0x01'
slot='0x01'
function='0x0'/>
</controller>
[...]
<hostdev mode='subsystem' type='pci' managed='yes'>
<driver name='vfio'/>
<source>
<address domain='0x0000' bus='0x03' slot='0x00'
function='0x0'/>
</source>
<address type='pci' domain='0x0000' bus='0x02'
slot='0x06'
function='0x0'/>
</hostdev>
[...]
To my understanding, this will plug the host device into the pci-bridge
controller.
The guest OS doesn't boot with this and resets right after bios.
Manually setting
<address type='pci' domain='0x0000' bus='0x00'
slot='0x1E'
function='0x0'/>
cause XML validation failure.
Is there any way in libvirt XML to plug a host's PCI-E device directly
into the pcie-root port, like it works on qemu command line?
I'm aware I could use something like
<qemu:commandline>
<qemu:arg value='-device'/>
<qemu:arg value='vfio-pci,host=05:00.0,bus=pcie.0'/>
</qemu:commandline>
but I insist on running the VM as non-root, and if I got that right I
need to configure at least one vfio device (or memory locking) in order
for libvirt to set a proper RLIMIT_MEMLOCK value.
Any help would be be appreciated.
Regards,
Thomas