On 03/22/2017 11:27 AM, Erik Skultety wrote: > Format the mediated devices on the qemu command line as > -device vfio-pci,sysfsdev='/path/to/device/in/syfs'. > > Signed-off-by: Erik Skultety <eskultet@xxxxxxxxxx> > --- > src/qemu/qemu_command.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ > src/qemu/qemu_command.h | 5 +++++ > 2 files changed, 50 insertions(+) > > diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c > index 2045c2e7cf..2a2ab3e9b0 100644 > --- a/src/qemu/qemu_command.c > +++ b/src/qemu/qemu_command.c > @@ -58,6 +58,7 @@ > #include "virscsi.h" > #include "virnuma.h" > #include "virgic.h" > +#include "virmdev.h" > #if defined(__linux__) > # include <linux/capability.h> > #endif > @@ -5220,6 +5221,31 @@ qemuBuildChrChardevStr(virLogManagerPtr logManager, > return ret; > } > > +char * > +qemuBuildHostdevMediatedDevStr(const virDomainDef *def, > + virDomainHostdevDefPtr dev, > + virQEMUCapsPtr qemuCaps) > +{ > + virBuffer buf = VIR_BUFFER_INITIALIZER; > + virDomainHostdevSubsysMediatedDevPtr mdevsrc = &dev->source.subsys.u.mdev; > + char *ret = NULL; > + > + virBufferAddLit(&buf, "vfio-pci"); > + virBufferAsprintf(&buf, ",sysfsdev=%s", > + virMediatedDeviceGetSysfsPath(mdevsrc->uuidstr)); > + > + if (qemuBuildDeviceAddressStr(&buf, def, dev->info, qemuCaps) < 0) > + goto cleanup; > + > + if (virBufferCheckError(&buf) < 0) > + goto cleanup; > + > + ret = virBufferContentAndReset(&buf); > + > + cleanup: > + virBufferFreeAndReset(&buf); > + return ret; > +} > > static int > qemuBuildHostdevCommandLine(virCommandPtr cmd, > @@ -5408,6 +5434,25 @@ qemuBuildHostdevCommandLine(virCommandPtr cmd, > VIR_FREE(devstr); > } > } > + > + /* MDEV */ > + if (hostdev->mode == VIR_DOMAIN_HOSTDEV_MODE_SUBSYS && > + subsys->type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_MDEV) { > + > + if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VFIO_PCI)) { > + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", > + _("VFIO PCI device assignment is not " > + "supported by this version of qemu")); > + return -1; > + } > + > + virCommandAddArg(cmd, "-device"); > + if (!(devstr = > + qemuBuildHostdevMediatedDevStr(def, hostdev, qemuCaps))) > + return -1; > + virCommandAddArg(cmd, devstr); > + VIR_FREE(devstr); > + } > } > > return 0; > diff --git a/src/qemu/qemu_command.h b/src/qemu/qemu_command.h > index f3ed9e7e4e..7da92c8c98 100644 > --- a/src/qemu/qemu_command.h > +++ b/src/qemu/qemu_command.h > @@ -168,6 +168,11 @@ qemuBuildSCSIVHostHostdevDevStr(const virDomainDef *def, > virQEMUCapsPtr qemuCaps, > char *vhostfdName); > > +char * > +qemuBuildHostdevMediatedDevStr(const virDomainDef *def, > + virDomainHostdevDefPtr dev, > + virQEMUCapsPtr qemuCaps); > + > char *qemuBuildRedirdevDevStr(const virDomainDef *def, > virDomainRedirdevDefPtr dev, > virQEMUCapsPtr qemuCaps); > ACK. -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list