[libvirt] [PATCHv2 04/16] qemu: Query hvf capability on macOS

Roman Bolshakov r.bolshakov at yadro.com
Wed Nov 21 14:01:47 UTC 2018


There's no QMP command for querying if hvf is supported, therefore we
use sysctl interface that tells if Hypervisor.framwork works/available
on the host.

Signed-off-by: Roman Bolshakov <r.bolshakov at yadro.com>
---
 src/qemu/qemu_capabilities.c | 34 ++++++++++++++++++++++++++++++++++
 1 file changed, 34 insertions(+)

diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index 0bbda80782..5ebe3f1afe 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -54,6 +54,10 @@
 #include <sys/wait.h>
 #include <stdarg.h>
 #include <sys/utsname.h>
+#ifdef __APPLE__
+# include <sys/types.h>
+# include <sys/sysctl.h>
+#endif
 
 #define VIR_FROM_THIS VIR_FROM_QEMU
 
@@ -2599,6 +2603,33 @@ virQEMUCapsProbeQMPKVMState(virQEMUCapsPtr qemuCaps,
     return 0;
 }
 
+#ifdef __APPLE__
+static int
+virQEMUCapsProbeHVF(virQEMUCapsPtr qemuCaps)
+{
+    int hv_support;
+    size_t len = sizeof(hv_support);
+    if (sysctlbyname("kern.hv_support", &hv_support, &len, NULL, 0))
+        hv_support = 0;
+
+    if (qemuCaps->version >= 2012000 &&
+        ARCH_IS_X86(qemuCaps->arch) &&
+        hv_support) {
+        virQEMUCapsSet(qemuCaps, QEMU_CAPS_HVF);
+    }
+
+    return 0;
+}
+#else
+static int
+virQEMUCapsProbeHVF(virQEMUCapsPtr qemuCaps)
+{
+  (void) qemuCaps;
+
+  return 0;
+}
+#endif
+
 struct virQEMUCapsCommandLineProps {
     const char *option;
     const char *param;
@@ -4150,6 +4181,9 @@ virQEMUCapsInitQMPMonitor(virQEMUCapsPtr qemuCaps,
     if (virQEMUCapsProbeQMPKVMState(qemuCaps, mon) < 0)
         goto cleanup;
 
+    if (virQEMUCapsProbeHVF(qemuCaps) < 0)
+        goto cleanup;
+
     if (virQEMUCapsProbeQMPEvents(qemuCaps, mon) < 0)
         goto cleanup;
     if (virQEMUCapsProbeQMPDevices(qemuCaps, mon) < 0)
-- 
2.19.1




More information about the libvir-list mailing list