#include "qemu_firmware.h"
#include "virutil.h"
#include "virtpm.h"
+#include "viriommufd.h"
#include <fcntl.h>
#include <sys/stat.h>
hostdev->subsysType.report = true;
hostdev->capsType.report = true;
hostdev->pciBackend.report = true;
+ hostdev->iommufd.report = true;
/* VIR_DOMAIN_HOSTDEV_MODE_CAPABILITIES is for containers only */
VIR_DOMAIN_CAPS_ENUM_SET(hostdev->mode,
virDomainCapsEnumClear(&hostdev->capsType);
virDomainCapsEnumClear(&hostdev->pciBackend);
- if (supportsPassthroughVFIO &&
- virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VFIO_PCI)) {
- VIR_DOMAIN_CAPS_ENUM_SET(hostdev->pciBackend,
- VIR_DEVICE_HOSTDEV_PCI_DRIVER_NAME_DEFAULT,
- VIR_DEVICE_HOSTDEV_PCI_DRIVER_NAME_VFIO);
+
+ VIR_DOMAIN_CAPS_ENUM_SET(hostdev->iommufd, VIR_TRISTATE_BOOL_NO);
+
+ if (supportsPassthroughVFIO) {
+ if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VFIO_PCI)) {
+ VIR_DOMAIN_CAPS_ENUM_SET(hostdev->pciBackend,
+ VIR_DEVICE_HOSTDEV_PCI_DRIVER_NAME_DEFAULT,
+ VIR_DEVICE_HOSTDEV_PCI_DRIVER_NAME_VFIO);
+ }
+
+ if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_IOMMUFD) &&
+ virIOMMUFDSupported()) {
+ VIR_DOMAIN_CAPS_ENUM_SET(hostdev->iommufd, VIR_TRISTATE_BOOL_YES);
+ }
}
}
#include <config.h>
+#include "virfile.h"
#include "virhostcpu.h"
#include "virhostmem.h"
+#include "viriommufd.h"
+#include "virmock.h"
#if WITH_QEMU
-# include "virmock.h"
# include "qemu/qemu_capabilities.h"
#endif
*size = 2048;
return 0;
}
+
+static bool (*real_virFileExists)(const char *path);
+
+bool
+virFileExists(const char *path)
+{
+ VIR_MOCK_REAL_INIT(virFileExists);
+
+ if (STREQ(path, VIR_IOMMU_DEV_PATH))
+ return true;
+
+ return real_virFileExists(path);
+}