<pre style='margin:0'>
Dan Villiom Podlaski Christiansen (danchr) pushed a commit to branch virt-hackery
in repository macports-ports.

</pre>
<p><a href="https://github.com/macports/macports-ports/commit/825d98eaf505b134742c147d8298e787f9039696">https://github.com/macports/macports-ports/commit/825d98eaf505b134742c147d8298e787f9039696</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 825d98eaf505b134742c147d8298e787f9039696
</span>Author: Dan Villiom Podlaski Christiansen <danchr@macports.org>
AuthorDate: Fri Jun 19 20:07:34 2020 +0200

<span style='display:block; white-space:pre;color:#404040;'>    libvirt: add qemu support
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    When I rebuilt the port, I ran into some build issues: phyp isn't
</span><span style='display:block; white-space:pre;color:#404040;'>    there any more, and the creation resulted in a build directory owned
</span><span style='display:block; white-space:pre;color:#404040;'>    by root.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    There's no need to have QEMU support in a separate variant, as it adds
</span><span style='display:block; white-space:pre;color:#404040;'>    no dependencies.
</span>---
 sysutils/libvirt/Portfile       |  17 +-
 sysutils/libvirt/files/hvf.diff | 448 ++++++++++++++++++++++++++++++++++++++++
 2 files changed, 458 insertions(+), 7 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/sysutils/libvirt/Portfile b/sysutils/libvirt/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index f7c9c585d2e..38210206397 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/sysutils/libvirt/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/sysutils/libvirt/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -83,10 +83,11 @@ configure.args      ac_cv_path_RST2HTML=${prefix}/bin/rst2html-3.8.py \
</span>                     --without-numactl \
                     --without-openvz \
                     --without-openwsman \
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                    --without-phyp \
</span>                     --without-pm-utils \
                     --without-polkit \
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                    --without-qemu \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    --with-qemu \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    --with-qemu-user=libvirt \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    --with-qemu-group=libvirt \
</span>                     --with-readline \
                     --with-remote \
                     --without-sanlock \
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -104,12 +105,14 @@ configure.args      ac_cv_path_RST2HTML=${prefix}/bin/rst2html-3.8.py \
</span>                     --without-wireshark-dissector \
                     --with-yajl
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+add_users           libvirt group=libvirt realname=${description} home=${prefix}/var/lib/libvirt shell=/sbin/nologin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> # As of 5.10.0, an out-of-source build is required.
 configure.cmd       ../${worksrcdir}/configure
 configure.dir       ${workpath}/build
 build.dir           ${configure.dir}
 post-extract {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    file mkdir ${configure.dir}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    xinstall -d -o ${macportsuser} ${configure.dir}
</span> }
 
 # As of 5.10.0, pregenerated files are no longer included in the tarball,
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -125,6 +128,10 @@ configure.args-append \
</span> # Upstream will not fix this; instead, they will switch to meson.
 configure.universal_args-delete --disable-dependency-tracking
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+# this patch is a rebase the hvf-domain branch from
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# https://github.com/roolebo/libvirt -- and it appears to work!
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+patchfiles-append   hvf.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> variant fuse description {FUSE support} {
     depends_lib-append      port:osxfuse
     configure.args-replace  --without-fuse --with-fuse
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -135,10 +142,6 @@ variant libssh2 description {Enable the libssh2 transport} {
</span>     configure.args-replace  --without-ssh2 --with-ssh2
 }
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-variant phyp requires libssh2 description {Phyp driver support} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    configure.args-replace  --without-phyp --with-phyp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span> variant sasl description {Use Cyrus SASL for authentication} {
     depends_lib-append      port:cyrus-sasl2
     configure.args-replace  --without-sasl --with-sasl
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/sysutils/libvirt/files/hvf.diff b/sysutils/libvirt/files/hvf.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..1cc19fc9539
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/sysutils/libvirt/files/hvf.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,448 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git src/conf/domain_conf.c src/conf/domain_conf.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/conf/domain_conf.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/conf/domain_conf.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -130,6 +130,7 @@ VIR_ENUM_IMPL(virDomainVirt,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+               "parallels",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+               "bhyve",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+               "vz",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++              "hvf",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ VIR_ENUM_IMPL(virDomainOS,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -160,6 +161,7 @@ VIR_ENUM_IMPL(virDomainFeature,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+               "privnet",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+               "hyperv",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+               "kvm",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++              "hvf",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+               "pvspinlock",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+               "capabilities",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+               "pmu",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -210,6 +212,10 @@ VIR_ENUM_IMPL(virDomainKVM,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+               "hint-dedicated",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++VIR_ENUM_IMPL(virDomainHVF,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++              VIR_DOMAIN_HVF_LAST,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ VIR_ENUM_IMPL(virDomainXen,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+               VIR_DOMAIN_XEN_LAST,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+               "e820_host",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -19339,6 +19345,7 @@ virDomainFeaturesDefParse(virDomainDefPt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         case VIR_DOMAIN_FEATURE_PRIVNET:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         case VIR_DOMAIN_FEATURE_HYPERV:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         case VIR_DOMAIN_FEATURE_KVM:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        case VIR_DOMAIN_FEATURE_HVF:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         case VIR_DOMAIN_FEATURE_MSRS:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         case VIR_DOMAIN_FEATURE_XEN:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             def->features[val] = VIR_TRISTATE_SWITCH_ON;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -23448,6 +23455,7 @@ virDomainDefFeaturesCheckABIStability(vi
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         case VIR_DOMAIN_FEATURE_PRIVNET:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         case VIR_DOMAIN_FEATURE_HYPERV:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         case VIR_DOMAIN_FEATURE_KVM:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        case VIR_DOMAIN_FEATURE_HVF:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         case VIR_DOMAIN_FEATURE_XEN:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         case VIR_DOMAIN_FEATURE_PVSPINLOCK:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         case VIR_DOMAIN_FEATURE_PMU:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -29333,6 +29341,24 @@ virDomainDefFormatFeatures(virBufferPtr 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             virBufferAddLit(&childBuf, "</kvm>\n");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        case VIR_DOMAIN_FEATURE_HVF:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            if (def->features[i] != VIR_TRISTATE_SWITCH_ON)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            virBufferAddLit(&childBuf, "<hvf>\n");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            virBufferAdjustIndent(&childBuf, 2);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            for (j = 0; j < VIR_DOMAIN_HVF_LAST; j++) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                switch ((virDomainHVF) j) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                /* coverity[dead_error_begin] */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                case VIR_DOMAIN_HVF_LAST:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                    break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            virBufferAdjustIndent(&childBuf, -2);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            virBufferAddLit(&childBuf, "</hvf>\n");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         case VIR_DOMAIN_FEATURE_XEN:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             if (def->features[i] != VIR_TRISTATE_SWITCH_ON)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git src/conf/domain_conf.h src/conf/domain_conf.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/conf/domain_conf.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/conf/domain_conf.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -137,6 +137,7 @@ typedef enum {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     VIR_DOMAIN_VIRT_PARALLELS,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     VIR_DOMAIN_VIRT_BHYVE,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     VIR_DOMAIN_VIRT_VZ,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    VIR_DOMAIN_VIRT_HVF,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     VIR_DOMAIN_VIRT_LAST
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } virDomainVirtType;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1823,6 +1824,7 @@ typedef enum {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     VIR_DOMAIN_FEATURE_CFPC,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     VIR_DOMAIN_FEATURE_SBBC,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     VIR_DOMAIN_FEATURE_IBS,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    VIR_DOMAIN_FEATURE_HVF,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     VIR_DOMAIN_FEATURE_LAST
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } virDomainFeature;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1856,6 +1858,10 @@ typedef enum {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } virDomainKVM;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ typedef enum {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    VIR_DOMAIN_HVF_LAST
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++} virDomainHVF;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++typedef enum {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     VIR_DOMAIN_MSRS_UNKNOWN = 0,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     VIR_DOMAIN_MSRS_LAST
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2542,6 +2548,7 @@ struct _virDomainDef {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     int caps_features[VIR_DOMAIN_PROCES_CAPS_FEATURE_LAST];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     int hyperv_features[VIR_DOMAIN_HYPERV_LAST];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     int kvm_features[VIR_DOMAIN_KVM_LAST];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    int hvf_features[VIR_DOMAIN_HVF_LAST];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     int msrs_features[VIR_DOMAIN_MSRS_LAST];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     int xen_features[VIR_DOMAIN_XEN_LAST];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     int xen_passthrough_mode;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -3593,6 +3600,7 @@ VIR_ENUM_DECL(virDomainGraphicsSpiceMous
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ VIR_ENUM_DECL(virDomainGraphicsVNCSharePolicy);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ VIR_ENUM_DECL(virDomainHyperv);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ VIR_ENUM_DECL(virDomainKVM);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++VIR_ENUM_DECL(virDomainHVF);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ VIR_ENUM_DECL(virDomainXen);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ VIR_ENUM_DECL(virDomainXenPassthroughMode);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ VIR_ENUM_DECL(virDomainMsrsUnknown);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git src/qemu/qemu_capabilities.c src/qemu/qemu_capabilities.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/qemu/qemu_capabilities.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/qemu/qemu_capabilities.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -55,6 +55,10 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <unistd.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <stdarg.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <sys/utsname.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef __APPLE__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# include <sys/types.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# include <sys/sysctl.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define VIR_FROM_THIS VIR_FROM_QEMU
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -513,6 +517,7 @@ VIR_ENUM_IMPL(virQEMUCaps,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+               "memory-backend-memfd",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+               "memory-backend-memfd.hugetlb",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+               "iothread.poll-max-ns",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++              "hvf",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+               /* 320 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+               "machine.pseries.cap-nested-hv",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -696,6 +701,7 @@ struct _virQEMUCaps {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     /* Capabilities which may differ depending on the accelerator. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     virQEMUCapsAccel kvm;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    virQEMUCapsAccel hvf;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     virQEMUCapsAccel tcg;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -746,6 +752,42 @@ const char *virQEMUCapsArchToString(virA
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     return virArchToString(arch);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static bool
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++virQEMUCapsTypeIsAccelerated(virDomainVirtType type)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    return type == VIR_DOMAIN_VIRT_KVM ||
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++           type == VIR_DOMAIN_VIRT_HVF;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static bool
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++virQEMUCapsHaveAccel(virQEMUCapsPtr qemuCaps)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    return virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM) ||
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++           virQEMUCapsGet(qemuCaps, QEMU_CAPS_HVF);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static virDomainVirtType
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++virQEMUCapsToVirtType(virQEMUCapsPtr qemuCaps)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        return VIR_DOMAIN_VIRT_KVM;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    else if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_HVF))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        return VIR_DOMAIN_VIRT_HVF;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        return VIR_DOMAIN_VIRT_QEMU;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static const char *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++virQEMUCapsAccelStr(virDomainVirtType type)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (type == VIR_DOMAIN_VIRT_KVM) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        return "kvm";
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    } else if (type == VIR_DOMAIN_VIRT_HVF) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        return "hvf";
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        return "tcg";
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /* Checks whether a domain with @guest arch can run natively on @host.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -799,6 +841,8 @@ virQEMUCapsGetAccel(virQEMUCapsPtr qemuC
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (type == VIR_DOMAIN_VIRT_KVM)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         return &qemuCaps->kvm;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    else if (type == VIR_DOMAIN_VIRT_HVF)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        return &qemuCaps->hvf;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     return &qemuCaps->tcg;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -928,6 +972,8 @@ virQEMUCapsGetMachineTypesCaps(virQEMUCa
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+      * take the set of machine types we probed first. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         accel = &qemuCaps->kvm;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    else if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_HVF))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        accel = &qemuCaps->hvf;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         accel = &qemuCaps->tcg;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1058,6 +1104,17 @@ virQEMUCapsInitGuestFromBinary(virCapsPt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             goto cleanup;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_HVF)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        if (virCapabilitiesAddGuestDomain(guest,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                          VIR_DOMAIN_VIRT_HVF,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                          NULL,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                          NULL,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                          0,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                          NULL) == NULL) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            goto cleanup;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if ((ARCH_IS_X86(guestarch) || guestarch == VIR_ARCH_AARCH64))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         virCapabilitiesAddGuestFeatureWithToggle(guest, VIR_CAPS_GUEST_FEATURE_TYPE_ACPI,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1934,6 +1991,7 @@ virQEMUCapsPtr virQEMUCapsNewCopy(virQEM
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     ret->arch = qemuCaps->arch;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (virQEMUCapsAccelCopy(&ret->kvm, &qemuCaps->kvm) < 0 ||
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        virQEMUCapsAccelCopy(&ret->hvf, &qemuCaps->hvf) < 0 ||
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         virQEMUCapsAccelCopy(&ret->tcg, &qemuCaps->tcg) < 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         goto error;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1990,6 +2048,7 @@ void virQEMUCapsDispose(void *obj)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     virSEVCapabilitiesFree(qemuCaps->sevCapabilities);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     virQEMUCapsAccelClear(&qemuCaps->kvm);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    virQEMUCapsAccelClear(&qemuCaps->hvf);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     virQEMUCapsAccelClear(&qemuCaps->tcg);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2373,6 +2432,10 @@ virQEMUCapsIsVirtTypeSupported(virQEMUCa
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (virtType == VIR_DOMAIN_VIRT_KVM &&
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         return true;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (virtType == VIR_DOMAIN_VIRT_HVF &&
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        virQEMUCapsGet(qemuCaps, QEMU_CAPS_HVF))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        return true;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     return false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2406,7 +2469,7 @@ virQEMUCapsIsCPUModeSupported(virQEMUCap
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     switch (mode) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     case VIR_CPU_MODE_HOST_PASSTHROUGH:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        return type == VIR_DOMAIN_VIRT_KVM &&
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        return (type == VIR_DOMAIN_VIRT_KVM || type == VIR_DOMAIN_VIRT_HVF) &&
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                virQEMUCapsGuestIsNative(hostarch, qemuCaps->arch);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     case VIR_CPU_MODE_HOST_MODEL:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -3031,7 +3094,7 @@ virQEMUCapsProbeQMPHostCPU(virQEMUCapsPt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            qemuMonitorPtr mon,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            virDomainVirtType virtType)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    const char *model = virtType == VIR_DOMAIN_VIRT_KVM ? "host" : "max";
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    const char *model = virtType == VIR_DOMAIN_VIRT_KVM || virtType == VIR_DOMAIN_VIRT_HVF ? "host" : "max";
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     qemuMonitorCPUModelInfoPtr modelInfo = NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     qemuMonitorCPUModelInfoPtr nonMigratable = NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     virHashTablePtr hash = NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -3258,6 +3321,33 @@ virQEMUCapsProbeQMPKVMState(virQEMUCapsP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef __APPLE__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static int
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++virQEMUCapsProbeHVF(virQEMUCapsPtr qemuCaps)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    int hv_support;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    size_t len = sizeof(hv_support);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (sysctlbyname("kern.hv_support", &hv_support, &len, NULL, 0))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        hv_support = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (qemuCaps->version >= 2012000 &&
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        ARCH_IS_X86(qemuCaps->arch) &&
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        hv_support) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        virQEMUCapsSet(qemuCaps, QEMU_CAPS_HVF);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static int
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++virQEMUCapsProbeHVF(virQEMUCapsPtr qemuCaps)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  (void) qemuCaps;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ struct virQEMUCapsCommandLineProps {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     const char *option;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     const char *param;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -3737,7 +3827,7 @@ virQEMUCapsInitHostCPUModel(virQEMUCapsP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                   virArchToString(qemuCaps->arch),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                   virDomainVirtTypeToString(type));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         goto error;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    } else if (type == VIR_DOMAIN_VIRT_KVM &&
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    } else if ((type == VIR_DOMAIN_VIRT_KVM || type == VIR_DOMAIN_VIRT_HVF) &&
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                virCPUGetHostIsSupported(qemuCaps->arch)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         if (!(fullCPU = virQEMUCapsProbeHostCPU(qemuCaps->arch, NULL)))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             goto error;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -4093,7 +4183,7 @@ virQEMUCapsLoadAccel(virQEMUCapsPtr qemu
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                      virDomainVirtType type)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     virQEMUCapsAccelPtr caps = virQEMUCapsGetAccel(qemuCaps, type);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    const char *typeStr = type == VIR_DOMAIN_VIRT_KVM ? "kvm" : "tcg";
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    const char *typeStr = type == VIR_DOMAIN_VIRT_KVM ? "kvm" : type == VIR_DOMAIN_VIRT_HVF ? "hvf" : "tcg";
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (virQEMUCapsLoadHostCPUModelInfo(caps, ctxt, typeStr) < 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         return -1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -4337,6 +4427,7 @@ virQEMUCapsLoadCache(virArch hostArch,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     VIR_FREE(str);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (virQEMUCapsLoadAccel(qemuCaps, ctxt, VIR_DOMAIN_VIRT_KVM) < 0 ||
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        virQEMUCapsLoadAccel(qemuCaps, ctxt, VIR_DOMAIN_VIRT_HVF) < 0 ||
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         virQEMUCapsLoadAccel(qemuCaps, ctxt, VIR_DOMAIN_VIRT_QEMU) < 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         goto cleanup;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -4409,7 +4500,10 @@ virQEMUCapsLoadCache(virArch hostArch,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (virQEMUCapsParseSEVInfo(qemuCaps, ctxt) < 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         goto cleanup;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    virQEMUCapsInitHostCPUModel(qemuCaps, hostArch, VIR_DOMAIN_VIRT_KVM);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        virQEMUCapsInitHostCPUModel(qemuCaps, hostArch, VIR_DOMAIN_VIRT_KVM);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_HVF))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        virQEMUCapsInitHostCPUModel(qemuCaps, hostArch, VIR_DOMAIN_VIRT_HVF);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     virQEMUCapsInitHostCPUModel(qemuCaps, hostArch, VIR_DOMAIN_VIRT_QEMU);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (virXPathBoolean("boolean(./kvmSupportsNesting)", ctxt) > 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -4556,7 +4650,7 @@ virQEMUCapsFormatAccel(virQEMUCapsPtr qe
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        virDomainVirtType type)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     virQEMUCapsAccelPtr caps = virQEMUCapsGetAccel(qemuCaps, type);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    const char *typeStr = type == VIR_DOMAIN_VIRT_KVM ? "kvm" : "tcg";
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    const char *typeStr = type == VIR_DOMAIN_VIRT_KVM ? "kvm" : type == VIR_DOMAIN_VIRT_HVF ?  "hvf" : "tcg";
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     virQEMUCapsFormatHostCPUModelInfo(caps, buf, typeStr);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     virQEMUCapsFormatCPUModels(caps, buf, typeStr);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -4629,7 +4723,8 @@ virQEMUCapsFormatCache(virQEMUCapsPtr qe
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     virBufferAsprintf(&buf, "<arch>%s</arch>\n",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                       virArchToString(qemuCaps->arch));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    virQEMUCapsFormatAccel(qemuCaps, &buf, VIR_DOMAIN_VIRT_HVF);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     virQEMUCapsFormatAccel(qemuCaps, &buf, VIR_DOMAIN_VIRT_KVM);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     virQEMUCapsFormatAccel(qemuCaps, &buf, VIR_DOMAIN_VIRT_QEMU);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -5220,6 +5315,8 @@ virQEMUCapsGetVirtType(virQEMUCapsPtr qe
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     virDomainVirtType type;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         type = VIR_DOMAIN_VIRT_KVM;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_HVF))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        type = VIR_DOMAIN_VIRT_HVF;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     else if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_TCG))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         type = VIR_DOMAIN_VIRT_QEMU;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -5271,6 +5368,9 @@ virQEMUCapsInitQMPMonitor(virQEMUCapsPtr
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     /* Some capabilities may differ depending on KVM state */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (virQEMUCapsProbeQMPKVMState(qemuCaps, mon) < 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         return -1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (virQEMUCapsProbeHVF(qemuCaps) < 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        return -1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     type = virQEMUCapsGetVirtType(qemuCaps);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     accel = virQEMUCapsGetAccel(qemuCaps, type);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -5448,7 +5548,10 @@ virQEMUCapsNewForBinaryInternal(virArch 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     qemuCaps->libvirtCtime = virGetSelfLastChanged();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     qemuCaps->libvirtVersion = LIBVIR_VERSION_NUMBER;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    virQEMUCapsInitHostCPUModel(qemuCaps, hostArch, VIR_DOMAIN_VIRT_KVM);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        virQEMUCapsInitHostCPUModel(qemuCaps, hostArch, VIR_DOMAIN_VIRT_KVM);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_HVF))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        virQEMUCapsInitHostCPUModel(qemuCaps, hostArch, VIR_DOMAIN_VIRT_HVF);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     virQEMUCapsInitHostCPUModel(qemuCaps, hostArch, VIR_DOMAIN_VIRT_QEMU);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -5782,13 +5885,20 @@ virQEMUCapsCacheLookupDefault(virFileCac
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (virttype == VIR_DOMAIN_VIRT_NONE)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         virttype = capsType;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    if (virttype == VIR_DOMAIN_VIRT_KVM && capsType == VIR_DOMAIN_VIRT_QEMU) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (virttype == VIR_DOMAIN_VIRT_KVM && capsType != VIR_DOMAIN_VIRT_KVM) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         virReportError(VIR_ERR_INVALID_ARG,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        _("KVM is not supported by '%s' on this host"),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        binary);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         goto cleanup;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (virttype == VIR_DOMAIN_VIRT_HVF && capsType != VIR_DOMAIN_VIRT_HVF) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        virReportError(VIR_ERR_INVALID_ARG,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                       _("Hypervisor.framework is not supported by '%s' on this host"),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                       binary);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        goto cleanup;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (machine) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         /* Turn @machine into canonical name */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         machine = virQEMUCapsGetCanonicalMachine(qemuCaps, virttype, machine);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -6397,6 +6507,7 @@ virQEMUCapsStripMachineAliasesForVirtTyp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ void
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ virQEMUCapsStripMachineAliases(virQEMUCapsPtr qemuCaps)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    virQEMUCapsStripMachineAliasesForVirtType(qemuCaps, VIR_DOMAIN_VIRT_HVF);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     virQEMUCapsStripMachineAliasesForVirtType(qemuCaps, VIR_DOMAIN_VIRT_KVM);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     virQEMUCapsStripMachineAliasesForVirtType(qemuCaps, VIR_DOMAIN_VIRT_QEMU);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git src/qemu/qemu_capabilities.h src/qemu/qemu_capabilities.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/qemu/qemu_capabilities.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/qemu/qemu_capabilities.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -493,6 +493,7 @@ typedef enum { /* virQEMUCapsFlags group
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     QEMU_CAPS_OBJECT_MEMORY_MEMFD, /* -object memory-backend-memfd */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     QEMU_CAPS_OBJECT_MEMORY_MEMFD_HUGETLB, /* -object memory-backend-memfd.hugetlb */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     QEMU_CAPS_IOTHREAD_POLLING, /* -object iothread.poll-max-ns */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    QEMU_CAPS_HVF, /* Whether Hypervisor.framework is available */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     /* 320 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     QEMU_CAPS_MACHINE_PSERIES_CAP_NESTED_HV, /* -machine pseries.cap-nested-hv */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git src/qemu/qemu_command.c src/qemu/qemu_command.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/qemu/qemu_command.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/qemu/qemu_command.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -6739,6 +6739,10 @@ qemuBuildMachineCommandLine(virCommandPt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         virBufferAddLit(&buf, ",accel=kvm");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    case VIR_DOMAIN_VIRT_HVF:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        virBufferAddLit(&buf, ",accel=hvf");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     case VIR_DOMAIN_VIRT_KQEMU:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     case VIR_DOMAIN_VIRT_XEN:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     case VIR_DOMAIN_VIRT_LXC:
</span></pre><pre style='margin:0'>

</pre>