1
0
mirror of https://gitlab.com/libvirt/libvirt.git synced 2025-03-20 07:59:00 +00:00

virpcimock: Mock the SRIOV Virtual functions

The softlink to physfn is the way to know if the device is
VF or not. So, the patch softlinks 'physfn' to the parent function.
The multifunction PCI devices dont have 'physfn' softlinks.

The patch adds few Virtual functions to the mock environment and
changes the existing VFIO test xmls using the VFs to use the newly
added VFs for their use case.

Signed-off-by: Shivaprasad G Bhat <sbhat@linux.vnet.ibm.com>
Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
Shivaprasad G Bhat 2019-08-29 16:18:59 -03:00 committed by Michal Privoznik
parent 16c9890383
commit 5a9dc4a50c
13 changed files with 28 additions and 9 deletions

@ -27,5 +27,5 @@ server,nowait \
-usb \
-drive file=/dev/HostVG/QEMUGuest2,format=raw,if=none,id=drive-ide0-0-0 \
-device ide-hd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1 \
-device vfio-pci,host=55aa:20:0f.3,id=hostdev0,bus=pci.0,addr=0x3 \
-device vfio-pci,host=0021:de:1f.1,id=hostdev0,bus=pci.0,addr=0x3 \
-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x4

@ -25,7 +25,7 @@
<hostdev mode='subsystem' type='pci' managed='yes'>
<driver name='vfio'/>
<source>
<address domain='0x55aa' bus='32' slot='15' function='3'/>
<address domain='0x0021' bus='222' slot='31' function='1'/>
</source>
</hostdev>
<memballoon model='virtio'/>

@ -27,5 +27,5 @@ server,nowait \
-usb \
-drive file=/dev/HostVG/QEMUGuest2,format=raw,if=none,id=drive-ide0-0-0 \
-device ide-hd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1 \
-device vfio-pci,host=0000:06:12.5,id=hostdev0,bus=pci.0,addr=0x3 \
-device vfio-pci,host=0000:06:12.1,id=hostdev0,bus=pci.0,addr=0x3 \
-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x4

@ -27,7 +27,7 @@
<hostdev mode='subsystem' type='pci' managed='yes'>
<driver name='vfio'/>
<source>
<address domain='0x0000' bus='0x06' slot='0x12' function='0x5'/>
<address domain='0x0000' bus='0x06' slot='0x12' function='0x1'/>
</source>
</hostdev>
<memballoon model='virtio'/>

@ -25,7 +25,7 @@
<interface type='hostdev' managed='yes'>
<mac address='00:11:22:33:44:55'/>
<source>
<address type='pci' domain='0x0000' bus='0x03' slot='0x07' function='0x1'/>
<address type='pci' domain='0x0000' bus='0x06' slot='0x12' function='0x1'/>
</source>
<model type='virtio'/>
<filterref filter='myfilter'/>

@ -27,5 +27,5 @@ server,nowait \
-usb \
-drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \
-device ide-hd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1 \
-device vfio-pci,host=0000:03:07.1,id=hostdev0,bus=pci.0,addr=0x3 \
-device vfio-pci,host=0000:06:12.1,id=hostdev0,bus=pci.0,addr=0x3 \
-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x4

@ -26,7 +26,7 @@
<mac address='00:11:22:33:44:55'/>
<driver name='vfio'/>
<source>
<address type='pci' domain='0x0000' bus='0x03' slot='0x07' function='0x1'/>
<address type='pci' domain='0x0000' bus='0x06' slot='0x12' function='0x1'/>
</source>
<vlan>
<tag id='42'/>

@ -32,7 +32,7 @@
<hostdev mode='subsystem' type='pci' managed='yes'>
<driver name='vfio'/>
<source>
<address domain='0x0000' bus='0x06' slot='0x12' function='0x5'/>
<address domain='0x0000' bus='0x06' slot='0x12' function='0x1'/>
</source>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</hostdev>

@ -31,7 +31,7 @@
<mac address='00:11:22:33:44:55'/>
<driver name='vfio'/>
<source>
<address type='pci' domain='0x0000' bus='0x03' slot='0x07' function='0x1'/>
<address type='pci' domain='0x0000' bus='0x06' slot='0x12' function='0x1'/>
</source>
<vlan>
<tag id='42'/>

@ -124,6 +124,7 @@ struct pciDevice {
int device;
int klass;
int iommuGroup;
const char *physfn;
struct pciDriver *driver; /* Driver attached. NULL if attached to no driver */
};
@ -545,6 +546,15 @@ pci_device_new_from_stub(const struct pciDevice *data)
make_symlink(devsympath, devid, tmp);
if (dev->physfn) {
if (snprintf(tmp, sizeof(tmp),
"%s%s/devices/%s", fakerootdir,
SYSFS_PCI_PREFIX, dev->physfn) < 0) {
ABORT("@tmp overflow");
}
make_symlink(devpath, "physfn", tmp);
}
if (pci_device_autobind(dev) < 0)
ABORT("Unable to bind: %s", devid);
@ -1020,6 +1030,15 @@ init_env(void)
MAKE_PCI_DEVICE("0000:0a:01.0", 0x8086, 0x0047, 8);
MAKE_PCI_DEVICE("0000:0a:02.0", 0x8286, 0x0048, 8);
MAKE_PCI_DEVICE("0000:0a:03.0", 0x8386, 0x0048, 8);
MAKE_PCI_DEVICE("0000:06:12.0", 0x8086, 0x0047, 9);
MAKE_PCI_DEVICE("0000:06:12.1", 0x8086, 0x0047, 10,
.physfn = "0000:06:12.0"); /* Virtual Function */
MAKE_PCI_DEVICE("0000:06:12.2", 0x8086, 0x0047, 11,
.physfn = "0000:06:12.0"); /* Virtual Function */
MAKE_PCI_DEVICE("0021:de:1f.0", 0x8086, 0x0047, 12);
MAKE_PCI_DEVICE("0021:de:1f.1", 0x8086, 0x0047, 13,
.physfn = "0021:de:1f.0"); /* Virtual Function */
}

Binary file not shown.

Binary file not shown.

Binary file not shown.