
On Sat, Oct 20, 2018 at 05:19:48PM +0300, Roman Bolshakov wrote:
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@yadro.com> --- src/qemu/qemu_capabilities.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+)
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 65cf5b5c03..8da0a8476b 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
@@ -2577,6 +2581,27 @@ virQEMUCapsProbeQMPKVMState(virQEMUCapsPtr qemuCaps, return 0; }
+static int +virQEMUCapsProbeHVF(virQEMUCapsPtr qemuCaps, + qemuMonitorPtr mon) +{ + (void)mon; + int hv_support = 0; +#ifdef __APPLE__
I think i'd prefer the ifdef to surround the entire method, and then provide a separate impl that just does 'return 0' for non-apple platforms, since none of the code here is useful for non-apple
+ size_t len = sizeof(hv_support); + if (sysctlbyname("kern.hv_support", &hv_support, &len, NULL, 0)) + hv_support = 0; +#endif + + if (qemuCaps->version >= 2012000 && + ARCH_IS_X86(qemuCaps->arch) && + hv_support) { + virQEMUCapsSet(qemuCaps, QEMU_CAPS_HVF); + } + + return 0; +}
Regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|