[libvirt] [PATCHv3 3/3] qemu: Prefer VFIO for PCI device passthrough
Peter Krempa
pkrempa at redhat.com
Mon Oct 7 18:07:26 UTC 2013
On 10/07/13 16:19, Laine Stump wrote:
> On 10/04/2013 08:55 AM, Peter Krempa wrote:
>> Prefer using VFIO (if available) to the legacy KVM device passthrough.
>>
>> With this patch a PCI passthrough device without the driver configured
>> will be started with VFIO if it's available on the host. If not legacy
>> KVM passthrough is checked and error is reported if it's not available.
>> ---
>> docs/formatdomain.html.in | 9 ++++-----
>> src/conf/domain_conf.h | 2 +-
>> src/qemu/qemu_command.c | 3 ++-
>> src/qemu/qemu_hostdev.c | 21 +++++++++++++++++++--
>> src/qemu/qemu_hostdev.h | 3 ++-
>> src/qemu/qemu_hotplug.c | 2 +-
>> src/qemu/qemu_process.c | 15 ++++++++-------
>> tests/qemuxml2argvtest.c | 11 +++++++++++
>> 8 files changed, 48 insertions(+), 18 deletions(-)
>>
...
>> diff --git a/src/qemu/qemu_hostdev.c b/src/qemu/qemu_hostdev.c
>> index dbbc2b4..ad408d8 100644
>> --- a/src/qemu/qemu_hostdev.c
>> +++ b/src/qemu/qemu_hostdev.c
>> @@ -1366,7 +1366,8 @@ qemuHostdevHostSupportsPassthroughLegacy(void)
>>
>> bool
>> qemuHostdevHostVerifySupport(virDomainHostdevDefPtr *hostdevs,
>> - size_t nhostdevs)
>> + size_t nhostdevs,
>> + virQEMUCapsPtr qemuCaps)
>
> Aha. I guess if you follow my recommendation in 2/3, you'll need to pass
> qemuCaps down through the qemuPrepareHostDevices() call chain (and I
> don't think that's a bad thing).
Seems doable. I will post another version incorporating that.
>
>> {
>> int supportsPassthroughKVM = -1;
>> int supportsPassthroughVFIO = -1;
>> @@ -1387,6 +1388,23 @@ qemuHostdevHostVerifySupport(virDomainHostdevDefPtr *hostdevs,
>> }
>>
>> switch ((virDomainHostdevSubsysPciBackendType) *backend) {
>> + case VIR_DOMAIN_HOSTDEV_PCI_BACKEND_DEFAULT:
>> + if (supportsPassthroughVFIO &&
>> + virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VFIO_PCI)) {
>> + *backend = VIR_DOMAIN_HOSTDEV_PCI_BACKEND_VFIO;
>> + } else if (supportsPassthroughKVM &&
>> + (virQEMUCapsGet(qemuCaps, QEMU_CAPS_PCIDEVICE) ||
>> + virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE))) {
>> + *backend = VIR_DOMAIN_HOSTDEV_PCI_BACKEND_KVM;
>> + } else {
>> + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
>> + _("host doesn't support passthrough of "
>> + "host PCI devices"));
>> + return false;
>> + }
>> +
>> + break;
>> +
>
> Ah! And there is the separate case I was asking for in 2/3!
>
> But you're changing the "backend" in the data itself - that will lead to
> incorrect display when someone does a dumpxml (will it cause problems if
> someone loads the vfio driver? I guess not, since this should only be
> the "live" data, not the persistent data)
Hmm, Is this an issue? I think it might be useful to update the info in
the live XML so that the users are notified. If we don't want to do this
I will change it in the next version.
Peter
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 901 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20131007/a27c485a/attachment-0001.sig>
More information about the libvir-list
mailing list