From 610858d282ab40e210848f98aab107bf39ebec9b Mon Sep 17 00:00:00 2001 From: Michal Privoznik Date: Mon, 24 Jun 2019 10:01:16 +0200 Subject: [PATCH] qemu_domain: Separate VFIO code This piece of code will be re-used later. Signed-off-by: Michal Privoznik ACKed-by: Peter Krempa --- src/conf/domain_conf.c | 17 +++++++++++++++++ src/conf/domain_conf.h | 3 +++ src/libvirt_private.syms | 1 + src/qemu/qemu_domain.c | 13 ++----------- 4 files changed, 23 insertions(+), 11 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 5cd9939031..e930ec485d 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -31346,6 +31346,23 @@ virDomainDefHasManagedPR(const virDomainDef *def) } +bool +virDomainDefHasVFIOHostdev(const virDomainDef *def) +{ + size_t i; + + for (i = 0; i < def->nhostdevs; i++) { + const virDomainHostdevDef *tmp = def->hostdevs[i]; + if (tmp->mode == VIR_DOMAIN_HOSTDEV_MODE_SUBSYS && + tmp->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI && + tmp->source.subsys.u.pci.backend == VIR_DOMAIN_HOSTDEV_PCI_BACKEND_VFIO) + return true; + } + + return false; +} + + /** * virDomainGraphicsDefHasOpenGL: * @def: domain definition diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 8a4425df64..57ca2a8ad1 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -3627,6 +3627,9 @@ virDomainDiskGetDetectZeroesMode(virDomainDiskDiscard discard, bool virDomainDefHasManagedPR(const virDomainDef *def); +bool +virDomainDefHasVFIOHostdev(const virDomainDef *def); + bool virDomainGraphicsDefHasOpenGL(const virDomainDef *def); diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 98c166f397..42779ddc8c 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -298,6 +298,7 @@ virDomainDefHasMemballoon; virDomainDefHasMemoryHotplug; virDomainDefHasUSB; virDomainDefHasVcpusOffline; +virDomainDefHasVFIOHostdev; virDomainDefLifecycleActionAllowed; virDomainDefMaybeAddController; virDomainDefMaybeAddInput; diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index c45eadf4be..4bafb35a28 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -12359,7 +12359,7 @@ qemuDomainGetHostdevPath(virDomainDefPtr def, bool includeVFIO = false; char **tmpPaths = NULL; int *tmpPerms = NULL; - size_t i, tmpNpaths = 0; + size_t tmpNpaths = 0; int perm = 0; *npaths = 0; @@ -12382,16 +12382,7 @@ qemuDomainGetHostdevPath(virDomainDefPtr def, perm = VIR_CGROUP_DEVICE_RW; if (teardown) { - size_t nvfios = 0; - for (i = 0; i < def->nhostdevs; i++) { - virDomainHostdevDefPtr tmp = def->hostdevs[i]; - if (tmp->mode == VIR_DOMAIN_HOSTDEV_MODE_SUBSYS && - tmp->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI && - tmp->source.subsys.u.pci.backend == VIR_DOMAIN_HOSTDEV_PCI_BACKEND_VFIO) - nvfios++; - } - - if (nvfios == 0) + if (!virDomainDefHasVFIOHostdev(def)) includeVFIO = true; } else { includeVFIO = true;