On 05/31/2018 02:30 PM, Filip Alac wrote:
Make qemuHostdevHostSupportsPassthroughVFIO use
virHostHasIOMMU.
---
src/libvirt_private.syms | 2 ++
src/qemu/qemu_hostdev.c | 29 ++++-------------------------
2 files changed, 6 insertions(+), 25 deletions(-)
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 6001635916..99a14ab460 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -58,6 +58,7 @@ virCapabilitiesFreeMachines;
virCapabilitiesFreeNUMAInfo;
virCapabilitiesGetCpusForNodemask;
virCapabilitiesGetNodeInfo;
+virCapabilitiesHostInitIOMMU;
virCapabilitiesHostSecModelAddBaseLabel;
virCapabilitiesInitCaches;
virCapabilitiesInitNUMA;
This does not belong here.
@@ -3073,6 +3074,7 @@ virGetUserName;
virGetUserRuntimeDirectory;
virGetUserShell;
virHexToBin;
+virHostHasIOMMU;
virIndexToDiskName;
virIsDevMapperDevice;
virIsSUID;
As I say in review to previous patch, this should go into 1/4.
diff --git a/src/qemu/qemu_hostdev.c b/src/qemu/qemu_hostdev.c
index 955b5df1a3..25e2dcf868 100644
--- a/src/qemu/qemu_hostdev.c
+++ b/src/qemu/qemu_hostdev.c
@@ -23,7 +23,6 @@
#include <config.h>
-#include <dirent.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <errno.h>
@@ -124,33 +123,13 @@ qemuHostdevUpdateActiveDomainDevices(virQEMUDriverPtr driver,
bool
qemuHostdevHostSupportsPassthroughVFIO(void)
{
- DIR *iommuDir = NULL;
- struct dirent *iommuGroup = NULL;
- bool ret = false;
- int direrr;
-
- /* condition 1 - /sys/kernel/iommu_groups/ contains entries */
- if (virDirOpenQuiet(&iommuDir, "/sys/kernel/iommu_groups/") < 0)
- goto cleanup;
-
- while ((direrr = virDirRead(iommuDir, &iommuGroup, NULL)) > 0) {
- /* assume we found a group */
- break;
- }
-
- if (direrr < 0 || !iommuGroup)
- goto cleanup;
- /* okay, iommu is on and recognizes groups */
+ if (!virHostHasIOMMU())
+ return false;
- /* condition 2 - /dev/vfio/vfio exists */
if (!virFileExists("/dev/vfio/vfio"))
- goto cleanup;
-
- ret = true;
+ return false;
- cleanup:
- VIR_DIR_CLOSE(iommuDir);
- return ret;
+ return true;
}
This should be merged into 1/4. What seems to be correct patch
ordering/content:
1) move out parts of qemuHostdevHostSupportsPassthroughVFIO() into a
separate function (be it virHostHasIOMMU()), expose it in
libvirt_private.syms and corresponding header file.
2) Introduce caps->iommu (which is basically patch 3/4) witch all
changes you need (libvirt_private.syms change for
virCapabilitiesHostInitIOMMU(), adding bool to struct _virCapsHost, etc.)
3) document the feature in news.xml.
Michal