Blame SOURCES/virt-manager-guest-Default-to-cpu-mode-host-model-if-libvirt-is-new-enough.patch

3d61c0
From faccada3d3891e8b38e5e884ddc058a5c461bd39 Mon Sep 17 00:00:00 2001
3d61c0
Message-Id: <faccada3d3891e8b38e5e884ddc058a5c461bd39@dist-git>
3d61c0
From: Pavel Hrdina <phrdina@redhat.com>
3d61c0
Date: Thu, 4 Oct 2018 12:23:32 -0400
3d61c0
Subject: [PATCH] guest: Default to cpu mode=host-model if libvirt is new
3d61c0
 enough
3d61c0
3d61c0
From: Cole Robinson <crobinso@redhat.com>
3d61c0
3d61c0
We check whether host-model is exposed in domcapabilities, which
3d61c0
indicates host-model is using the smarter new safer method in
3d61c0
cooperation with qemu
3d61c0
3d61c0
(cherry picked from commit 469fed08a04777d72cbb73e1dc948cffe31f7858)
3d61c0
3d61c0
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1525337
3d61c0
3d61c0
Reviewed-by: Cole Robinson <crobinso@redhat.com>
3d61c0
Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
3d61c0
---
3d61c0
 .../compare/virt-convert-ovf-compare.xml      |   4 +-
3d61c0
 .../compare/virt-convert-vmx-compare.xml      |   4 +-
3d61c0
 .../compare/virt-install-boot-uefi.xml        |   2 +-
3d61c0
 .../compare/virt-install-f21-kvm-remote.xml   |   4 +-
3d61c0
 .../compare/virt-install-kvm-centos7.xml      |   8 +-
3d61c0
 .../virt-install-kvm-cpu-default-fallback.xml | 146 ++++++++++++++++++
3d61c0
 .../compare/virt-install-kvm-rhel6.xml        |   8 +-
3d61c0
 .../compare/virt-install-kvm-rhel7.xml        |   8 +-
3d61c0
 .../virt-install-kvm-session-defaults.xml     |   8 +-
3d61c0
 .../compare/virt-install-kvm-win2k3-cdrom.xml |   8 +-
3d61c0
 .../compare/virt-install-location-iso.xml     |   8 +-
3d61c0
 .../compare/virt-install-location-nfs.xml     |   8 +-
3d61c0
 .../compare/virt-install-panic-default.xml    |   4 +-
3d61c0
 .../compare/virt-install-panic-isa-iobase.xml |   4 +-
3d61c0
 .../compare/virt-install-panic-isa.xml        |   4 +-
3d61c0
 .../compare/virt-install-q35-defaults.xml     |   8 +-
3d61c0
 .../virt-install-solaris10-defaults.xml       |   3 +-
3d61c0
 .../compare/virt-install-spice-gl.xml         |   4 +-
3d61c0
 .../compare/virt-install-win7-uefi.xml        |   8 +-
3d61c0
 tests/clitest.py                              |   1 +
3d61c0
 .../ovf2libvirt_ovf_directory.libvirt         |   4 +-
3d61c0
 .../libvirt_output/ovf2libvirt_test1.libvirt  |   4 +-
3d61c0
 .../ovf2libvirt_test1.libvirt.disk_qcow2      |   4 +-
3d61c0
 .../libvirt_output/ovf2libvirt_test2.libvirt  |   4 +-
3d61c0
 .../ovf2libvirt_test_gzip.libvirt             |   4 +-
3d61c0
 .../ovf2libvirt_test_gzip.libvirt.disk_raw    |   4 +-
3d61c0
 .../vmx2libvirt_test-nodisks.libvirt          |   4 +-
3d61c0
 .../vmx2libvirt_test-vmx-zip.libvirt          |   4 +-
3d61c0
 .../libvirt_output/vmx2libvirt_test1.libvirt  |   4 +-
3d61c0
 .../vmx2libvirt_test1.libvirt.disk_raw        |   4 +-
3d61c0
 .../vmx2libvirt_vmx-dir.libvirt               |   4 +-
3d61c0
 virtinst/cpu.py                               |  12 +-
3d61c0
 virtinst/domcapabilities.py                   |  10 ++
3d61c0
 virtinst/guest.py                             |   2 +-
3d61c0
 34 files changed, 207 insertions(+), 113 deletions(-)
3d61c0
 create mode 100644 tests/cli-test-xml/compare/virt-install-kvm-cpu-default-fallback.xml
3d61c0
3d61c0
diff --git a/tests/cli-test-xml/compare/virt-convert-ovf-compare.xml b/tests/cli-test-xml/compare/virt-convert-ovf-compare.xml
3d61c0
index 2d90abfc..190af176 100644
3d61c0
--- a/tests/cli-test-xml/compare/virt-convert-ovf-compare.xml
3d61c0
+++ b/tests/cli-test-xml/compare/virt-convert-ovf-compare.xml
3d61c0
@@ -14,9 +14,7 @@
3d61c0
     <apic/>
3d61c0
     <vmport state="off"/>
3d61c0
   </features>
3d61c0
-  <cpu mode="custom" match="exact">
3d61c0
-    <model>Opteron_G4</model>
3d61c0
-  </cpu>
3d61c0
+  <cpu mode="host-model"/>
3d61c0
   <clock offset="utc">
3d61c0
     <timer name="rtc" tickpolicy="catchup"/>
3d61c0
     <timer name="pit" tickpolicy="delay"/>
3d61c0
diff --git a/tests/cli-test-xml/compare/virt-convert-vmx-compare.xml b/tests/cli-test-xml/compare/virt-convert-vmx-compare.xml
3d61c0
index 21dbcd65..92a4a3c1 100644
3d61c0
--- a/tests/cli-test-xml/compare/virt-convert-vmx-compare.xml
3d61c0
+++ b/tests/cli-test-xml/compare/virt-convert-vmx-compare.xml
3d61c0
@@ -13,9 +13,7 @@
3d61c0
     <apic/>
3d61c0
     <vmport state="off"/>
3d61c0
   </features>
3d61c0
-  <cpu mode="custom" match="exact">
3d61c0
-    <model>Opteron_G4</model>
3d61c0
-  </cpu>
3d61c0
+  <cpu mode="host-model"/>
3d61c0
   <clock offset="utc">
3d61c0
     <timer name="rtc" tickpolicy="catchup"/>
3d61c0
     <timer name="pit" tickpolicy="delay"/>
3d61c0
diff --git a/tests/cli-test-xml/compare/virt-install-boot-uefi.xml b/tests/cli-test-xml/compare/virt-install-boot-uefi.xml
3d61c0
index f46b8f07..18b02ce8 100644
3d61c0
--- a/tests/cli-test-xml/compare/virt-install-boot-uefi.xml
3d61c0
+++ b/tests/cli-test-xml/compare/virt-install-boot-uefi.xml
3d61c0
@@ -15,7 +15,7 @@
3d61c0
     <smm state="on"/>
3d61c0
     <vmport state="off"/>
3d61c0
   </features>
3d61c0
-  <cpu mode="custom" match="exact"/>
3d61c0
+  <cpu mode="host-model"/>
3d61c0
   <clock offset="utc">
3d61c0
     <timer name="rtc" tickpolicy="catchup"/>
3d61c0
     <timer name="pit" tickpolicy="delay"/>
3d61c0
diff --git a/tests/cli-test-xml/compare/virt-install-f21-kvm-remote.xml b/tests/cli-test-xml/compare/virt-install-f21-kvm-remote.xml
3d61c0
index 34f95aaf..36ea03f4 100644
3d61c0
--- a/tests/cli-test-xml/compare/virt-install-f21-kvm-remote.xml
3d61c0
+++ b/tests/cli-test-xml/compare/virt-install-f21-kvm-remote.xml
3d61c0
@@ -13,9 +13,7 @@
3d61c0
     <apic/>
3d61c0
     <vmport state="off"/>
3d61c0
   </features>
3d61c0
-  <cpu mode="custom" match="exact">
3d61c0
-    <model>Opteron_G4</model>
3d61c0
-  </cpu>
3d61c0
+  <cpu mode="host-model"/>
3d61c0
   <clock offset="utc">
3d61c0
     <timer name="rtc" tickpolicy="catchup"/>
3d61c0
     <timer name="pit" tickpolicy="delay"/>
3d61c0
diff --git a/tests/cli-test-xml/compare/virt-install-kvm-centos7.xml b/tests/cli-test-xml/compare/virt-install-kvm-centos7.xml
3d61c0
index 22c81fde..2c693ad4 100644
3d61c0
--- a/tests/cli-test-xml/compare/virt-install-kvm-centos7.xml
3d61c0
+++ b/tests/cli-test-xml/compare/virt-install-kvm-centos7.xml
3d61c0
@@ -14,9 +14,7 @@
3d61c0
     <apic/>
3d61c0
     <vmport state="off"/>
3d61c0
   </features>
3d61c0
-  <cpu mode="custom" match="exact">
3d61c0
-    <model>Opteron_G4</model>
3d61c0
-  </cpu>
3d61c0
+  <cpu mode="host-model"/>
3d61c0
   <clock offset="utc">
3d61c0
     <timer name="rtc" tickpolicy="catchup"/>
3d61c0
     <timer name="pit" tickpolicy="delay"/>
3d61c0
@@ -84,9 +82,7 @@
3d61c0
     <apic/>
3d61c0
     <vmport state="off"/>
3d61c0
   </features>
3d61c0
-  <cpu mode="custom" match="exact">
3d61c0
-    <model>Opteron_G4</model>
3d61c0
-  </cpu>
3d61c0
+  <cpu mode="host-model"/>
3d61c0
   <clock offset="utc">
3d61c0
     <timer name="rtc" tickpolicy="catchup"/>
3d61c0
     <timer name="pit" tickpolicy="delay"/>
3d61c0
diff --git a/tests/cli-test-xml/compare/virt-install-kvm-cpu-default-fallback.xml b/tests/cli-test-xml/compare/virt-install-kvm-cpu-default-fallback.xml
3d61c0
new file mode 100644
3d61c0
index 00000000..29e050aa
3d61c0
--- /dev/null
3d61c0
+++ b/tests/cli-test-xml/compare/virt-install-kvm-cpu-default-fallback.xml
3d61c0
@@ -0,0 +1,146 @@
3d61c0
+<domain type="kvm">
3d61c0
+  <name>foobar</name>
3d61c0
+  <uuid>00000000-1111-2222-3333-444444444444</uuid>
3d61c0
+  <memory>65536</memory>
3d61c0
+  <currentMemory>65536</currentMemory>
3d61c0
+  <vcpu>1</vcpu>
3d61c0
+  <os>
3d61c0
+    <type arch="x86_64">hvm</type>
3d61c0
+    <boot dev="network"/>
3d61c0
+    <boot dev="hd"/>
3d61c0
+  </os>
3d61c0
+  <features>
3d61c0
+    <acpi/>
3d61c0
+    <apic/>
3d61c0
+    <vmport state="off"/>
3d61c0
+  </features>
3d61c0
+  <cpu mode="custom" match="exact">
3d61c0
+    <model>Opteron_G4</model>
3d61c0
+  </cpu>
3d61c0
+  <clock offset="utc">
3d61c0
+    <timer name="rtc" tickpolicy="catchup"/>
3d61c0
+    <timer name="pit" tickpolicy="delay"/>
3d61c0
+    <timer name="hpet" present="no"/>
3d61c0
+  </clock>
3d61c0
+  <on_reboot>destroy</on_reboot>
3d61c0
+  <pm>
3d61c0
+    <suspend-to-mem enabled="no"/>
3d61c0
+    <suspend-to-disk enabled="no"/>
3d61c0
+  </pm>
3d61c0
+  <devices>
3d61c0
+    <emulator>/usr/bin/qemu-kvm</emulator>
3d61c0
+    <disk type="file" device="disk">
3d61c0
+      <driver name="qemu" type="qcow2"/>
3d61c0
+      <source file="/dev/default-pool/testvol1.img"/>
3d61c0
+      <target dev="vda" bus="virtio"/>
3d61c0
+    </disk>
3d61c0
+    <controller type="usb" index="0" model="ich9-ehci1"/>
3d61c0
+    <controller type="usb" index="0" model="ich9-uhci1">
3d61c0
+      <master startport="0"/>
3d61c0
+    </controller>
3d61c0
+    <controller type="usb" index="0" model="ich9-uhci2">
3d61c0
+      <master startport="2"/>
3d61c0
+    </controller>
3d61c0
+    <controller type="usb" index="0" model="ich9-uhci3">
3d61c0
+      <master startport="4"/>
3d61c0
+    </controller>
3d61c0
+    <interface type="bridge">
3d61c0
+      <source bridge="eth0"/>
3d61c0
+      <mac address="00:11:22:33:44:55"/>
3d61c0
+      <model type="virtio"/>
3d61c0
+    </interface>
3d61c0
+    <input type="tablet" bus="usb"/>
3d61c0
+    <graphics type="spice" port="-1" tlsPort="-1" autoport="yes">
3d61c0
+      <image compression="off"/>
3d61c0
+    </graphics>
3d61c0
+    <console type="pty"/>
3d61c0
+    <channel type="unix">
3d61c0
+      <source mode="bind"/>
3d61c0
+      <target type="virtio" name="org.qemu.guest_agent.0"/>
3d61c0
+    </channel>
3d61c0
+    <channel type="spicevmc">
3d61c0
+      <target type="virtio" name="com.redhat.spice.0"/>
3d61c0
+    </channel>
3d61c0
+    <sound model="ich6"/>
3d61c0
+    <video>
3d61c0
+      <model type="qxl"/>
3d61c0
+    </video>
3d61c0
+    <redirdev bus="usb" type="spicevmc"/>
3d61c0
+    <redirdev bus="usb" type="spicevmc"/>
3d61c0
+    <rng model="virtio">
3d61c0
+      <backend model="random">/dev/urandom</backend>
3d61c0
+    </rng>
3d61c0
+  </devices>
3d61c0
+</domain>
3d61c0
+<domain type="kvm">
3d61c0
+  <name>foobar</name>
3d61c0
+  <uuid>00000000-1111-2222-3333-444444444444</uuid>
3d61c0
+  <memory>65536</memory>
3d61c0
+  <currentMemory>65536</currentMemory>
3d61c0
+  <vcpu>1</vcpu>
3d61c0
+  <os>
3d61c0
+    <type arch="x86_64">hvm</type>
3d61c0
+    <boot dev="hd"/>
3d61c0
+  </os>
3d61c0
+  <features>
3d61c0
+    <acpi/>
3d61c0
+    <apic/>
3d61c0
+    <vmport state="off"/>
3d61c0
+  </features>
3d61c0
+  <cpu mode="custom" match="exact">
3d61c0
+    <model>Opteron_G4</model>
3d61c0
+  </cpu>
3d61c0
+  <clock offset="utc">
3d61c0
+    <timer name="rtc" tickpolicy="catchup"/>
3d61c0
+    <timer name="pit" tickpolicy="delay"/>
3d61c0
+    <timer name="hpet" present="no"/>
3d61c0
+  </clock>
3d61c0
+  <pm>
3d61c0
+    <suspend-to-mem enabled="no"/>
3d61c0
+    <suspend-to-disk enabled="no"/>
3d61c0
+  </pm>
3d61c0
+  <devices>
3d61c0
+    <emulator>/usr/bin/qemu-kvm</emulator>
3d61c0
+    <disk type="file" device="disk">
3d61c0
+      <driver name="qemu" type="qcow2"/>
3d61c0
+      <source file="/dev/default-pool/testvol1.img"/>
3d61c0
+      <target dev="vda" bus="virtio"/>
3d61c0
+    </disk>
3d61c0
+    <controller type="usb" index="0" model="ich9-ehci1"/>
3d61c0
+    <controller type="usb" index="0" model="ich9-uhci1">
3d61c0
+      <master startport="0"/>
3d61c0
+    </controller>
3d61c0
+    <controller type="usb" index="0" model="ich9-uhci2">
3d61c0
+      <master startport="2"/>
3d61c0
+    </controller>
3d61c0
+    <controller type="usb" index="0" model="ich9-uhci3">
3d61c0
+      <master startport="4"/>
3d61c0
+    </controller>
3d61c0
+    <interface type="bridge">
3d61c0
+      <source bridge="eth0"/>
3d61c0
+      <mac address="00:11:22:33:44:55"/>
3d61c0
+      <model type="virtio"/>
3d61c0
+    </interface>
3d61c0
+    <input type="tablet" bus="usb"/>
3d61c0
+    <graphics type="spice" port="-1" tlsPort="-1" autoport="yes">
3d61c0
+      <image compression="off"/>
3d61c0
+    </graphics>
3d61c0
+    <console type="pty"/>
3d61c0
+    <channel type="unix">
3d61c0
+      <source mode="bind"/>
3d61c0
+      <target type="virtio" name="org.qemu.guest_agent.0"/>
3d61c0
+    </channel>
3d61c0
+    <channel type="spicevmc">
3d61c0
+      <target type="virtio" name="com.redhat.spice.0"/>
3d61c0
+    </channel>
3d61c0
+    <sound model="ich6"/>
3d61c0
+    <video>
3d61c0
+      <model type="qxl"/>
3d61c0
+    </video>
3d61c0
+    <redirdev bus="usb" type="spicevmc"/>
3d61c0
+    <redirdev bus="usb" type="spicevmc"/>
3d61c0
+    <rng model="virtio">
3d61c0
+      <backend model="random">/dev/urandom</backend>
3d61c0
+    </rng>
3d61c0
+  </devices>
3d61c0
+</domain>
3d61c0
diff --git a/tests/cli-test-xml/compare/virt-install-kvm-rhel6.xml b/tests/cli-test-xml/compare/virt-install-kvm-rhel6.xml
3d61c0
index 22c81fde..2c693ad4 100644
3d61c0
--- a/tests/cli-test-xml/compare/virt-install-kvm-rhel6.xml
3d61c0
+++ b/tests/cli-test-xml/compare/virt-install-kvm-rhel6.xml
3d61c0
@@ -14,9 +14,7 @@
3d61c0
     <apic/>
3d61c0
     <vmport state="off"/>
3d61c0
   </features>
3d61c0
-  <cpu mode="custom" match="exact">
3d61c0
-    <model>Opteron_G4</model>
3d61c0
-  </cpu>
3d61c0
+  <cpu mode="host-model"/>
3d61c0
   <clock offset="utc">
3d61c0
     <timer name="rtc" tickpolicy="catchup"/>
3d61c0
     <timer name="pit" tickpolicy="delay"/>
3d61c0
@@ -84,9 +82,7 @@
3d61c0
     <apic/>
3d61c0
     <vmport state="off"/>
3d61c0
   </features>
3d61c0
-  <cpu mode="custom" match="exact">
3d61c0
-    <model>Opteron_G4</model>
3d61c0
-  </cpu>
3d61c0
+  <cpu mode="host-model"/>
3d61c0
   <clock offset="utc">
3d61c0
     <timer name="rtc" tickpolicy="catchup"/>
3d61c0
     <timer name="pit" tickpolicy="delay"/>
3d61c0
diff --git a/tests/cli-test-xml/compare/virt-install-kvm-rhel7.xml b/tests/cli-test-xml/compare/virt-install-kvm-rhel7.xml
3d61c0
index 22c81fde..2c693ad4 100644
3d61c0
--- a/tests/cli-test-xml/compare/virt-install-kvm-rhel7.xml
3d61c0
+++ b/tests/cli-test-xml/compare/virt-install-kvm-rhel7.xml
3d61c0
@@ -14,9 +14,7 @@
3d61c0
     <apic/>
3d61c0
     <vmport state="off"/>
3d61c0
   </features>
3d61c0
-  <cpu mode="custom" match="exact">
3d61c0
-    <model>Opteron_G4</model>
3d61c0
-  </cpu>
3d61c0
+  <cpu mode="host-model"/>
3d61c0
   <clock offset="utc">
3d61c0
     <timer name="rtc" tickpolicy="catchup"/>
3d61c0
     <timer name="pit" tickpolicy="delay"/>
3d61c0
@@ -84,9 +82,7 @@
3d61c0
     <apic/>
3d61c0
     <vmport state="off"/>
3d61c0
   </features>
3d61c0
-  <cpu mode="custom" match="exact">
3d61c0
-    <model>Opteron_G4</model>
3d61c0
-  </cpu>
3d61c0
+  <cpu mode="host-model"/>
3d61c0
   <clock offset="utc">
3d61c0
     <timer name="rtc" tickpolicy="catchup"/>
3d61c0
     <timer name="pit" tickpolicy="delay"/>
3d61c0
diff --git a/tests/cli-test-xml/compare/virt-install-kvm-session-defaults.xml b/tests/cli-test-xml/compare/virt-install-kvm-session-defaults.xml
3d61c0
index 423c0680..cac6f727 100644
3d61c0
--- a/tests/cli-test-xml/compare/virt-install-kvm-session-defaults.xml
3d61c0
+++ b/tests/cli-test-xml/compare/virt-install-kvm-session-defaults.xml
3d61c0
@@ -14,9 +14,7 @@
3d61c0
     <apic/>
3d61c0
     <vmport state="off"/>
3d61c0
   </features>
3d61c0
-  <cpu mode="custom" match="exact">
3d61c0
-    <model>Opteron_G4</model>
3d61c0
-  </cpu>
3d61c0
+  <cpu mode="host-model"/>
3d61c0
   <clock offset="utc">
3d61c0
     <timer name="rtc" tickpolicy="catchup"/>
3d61c0
     <timer name="pit" tickpolicy="delay"/>
3d61c0
@@ -92,9 +90,7 @@
3d61c0
     <apic/>
3d61c0
     <vmport state="off"/>
3d61c0
   </features>
3d61c0
-  <cpu mode="custom" match="exact">
3d61c0
-    <model>Opteron_G4</model>
3d61c0
-  </cpu>
3d61c0
+  <cpu mode="host-model"/>
3d61c0
   <clock offset="utc">
3d61c0
     <timer name="rtc" tickpolicy="catchup"/>
3d61c0
     <timer name="pit" tickpolicy="delay"/>
3d61c0
diff --git a/tests/cli-test-xml/compare/virt-install-kvm-win2k3-cdrom.xml b/tests/cli-test-xml/compare/virt-install-kvm-win2k3-cdrom.xml
3d61c0
index 357cbd23..588fc298 100644
3d61c0
--- a/tests/cli-test-xml/compare/virt-install-kvm-win2k3-cdrom.xml
3d61c0
+++ b/tests/cli-test-xml/compare/virt-install-kvm-win2k3-cdrom.xml
3d61c0
@@ -19,9 +19,7 @@
3d61c0
       <spinlocks state="on" retries="8191"/>
3d61c0
     </hyperv>
3d61c0
   </features>
3d61c0
-  <cpu mode="custom" match="exact">
3d61c0
-    <model>Opteron_G4</model>
3d61c0
-  </cpu>
3d61c0
+  <cpu mode="host-model"/>
3d61c0
   <clock offset="localtime">
3d61c0
     <timer name="rtc" tickpolicy="catchup"/>
3d61c0
     <timer name="pit" tickpolicy="delay"/>
3d61c0
@@ -87,9 +85,7 @@
3d61c0
       <spinlocks state="on" retries="8191"/>
3d61c0
     </hyperv>
3d61c0
   </features>
3d61c0
-  <cpu mode="custom" match="exact">
3d61c0
-    <model>Opteron_G4</model>
3d61c0
-  </cpu>
3d61c0
+  <cpu mode="host-model"/>
3d61c0
   <clock offset="localtime">
3d61c0
     <timer name="rtc" tickpolicy="catchup"/>
3d61c0
     <timer name="pit" tickpolicy="delay"/>
3d61c0
diff --git a/tests/cli-test-xml/compare/virt-install-location-iso.xml b/tests/cli-test-xml/compare/virt-install-location-iso.xml
3d61c0
index 8a627629..2678831c 100644
3d61c0
--- a/tests/cli-test-xml/compare/virt-install-location-iso.xml
3d61c0
+++ b/tests/cli-test-xml/compare/virt-install-location-iso.xml
3d61c0
@@ -14,9 +14,7 @@
3d61c0
     <apic/>
3d61c0
     <vmport state="off"/>
3d61c0
   </features>
3d61c0
-  <cpu mode="custom" match="exact">
3d61c0
-    <model>Opteron_G4</model>
3d61c0
-  </cpu>
3d61c0
+  <cpu mode="host-model"/>
3d61c0
   <clock offset="utc">
3d61c0
     <timer name="rtc" tickpolicy="catchup"/>
3d61c0
     <timer name="pit" tickpolicy="delay"/>
3d61c0
@@ -75,9 +73,7 @@
3d61c0
     <apic/>
3d61c0
     <vmport state="off"/>
3d61c0
   </features>
3d61c0
-  <cpu mode="custom" match="exact">
3d61c0
-    <model>Opteron_G4</model>
3d61c0
-  </cpu>
3d61c0
+  <cpu mode="host-model"/>
3d61c0
   <clock offset="utc">
3d61c0
     <timer name="rtc" tickpolicy="catchup"/>
3d61c0
     <timer name="pit" tickpolicy="delay"/>
3d61c0
diff --git a/tests/cli-test-xml/compare/virt-install-location-nfs.xml b/tests/cli-test-xml/compare/virt-install-location-nfs.xml
3d61c0
index 5496a1d3..8e40672a 100644
3d61c0
--- a/tests/cli-test-xml/compare/virt-install-location-nfs.xml
3d61c0
+++ b/tests/cli-test-xml/compare/virt-install-location-nfs.xml
3d61c0
@@ -15,9 +15,7 @@
3d61c0
     <apic/>
3d61c0
     <vmport state="off"/>
3d61c0
   </features>
3d61c0
-  <cpu mode="custom" match="exact">
3d61c0
-    <model>Opteron_G4</model>
3d61c0
-  </cpu>
3d61c0
+  <cpu mode="host-model"/>
3d61c0
   <clock offset="utc">
3d61c0
     <timer name="rtc" tickpolicy="catchup"/>
3d61c0
     <timer name="pit" tickpolicy="delay"/>
3d61c0
@@ -74,9 +72,7 @@
3d61c0
     <apic/>
3d61c0
     <vmport state="off"/>
3d61c0
   </features>
3d61c0
-  <cpu mode="custom" match="exact">
3d61c0
-    <model>Opteron_G4</model>
3d61c0
-  </cpu>
3d61c0
+  <cpu mode="host-model"/>
3d61c0
   <clock offset="utc">
3d61c0
     <timer name="rtc" tickpolicy="catchup"/>
3d61c0
     <timer name="pit" tickpolicy="delay"/>
3d61c0
diff --git a/tests/cli-test-xml/compare/virt-install-panic-default.xml b/tests/cli-test-xml/compare/virt-install-panic-default.xml
3d61c0
index b391a290..d55cfafd 100644
3d61c0
--- a/tests/cli-test-xml/compare/virt-install-panic-default.xml
3d61c0
+++ b/tests/cli-test-xml/compare/virt-install-panic-default.xml
3d61c0
@@ -12,9 +12,7 @@
3d61c0
     <acpi/>
3d61c0
     <apic/>
3d61c0
   </features>
3d61c0
-  <cpu mode="custom" match="exact">
3d61c0
-    <model>Opteron_G4</model>
3d61c0
-  </cpu>
3d61c0
+  <cpu mode="host-model"/>
3d61c0
   <clock offset="utc">
3d61c0
     <timer name="rtc" tickpolicy="catchup"/>
3d61c0
     <timer name="pit" tickpolicy="delay"/>
3d61c0
diff --git a/tests/cli-test-xml/compare/virt-install-panic-isa-iobase.xml b/tests/cli-test-xml/compare/virt-install-panic-isa-iobase.xml
3d61c0
index 714cb56b..63e793e2 100644
3d61c0
--- a/tests/cli-test-xml/compare/virt-install-panic-isa-iobase.xml
3d61c0
+++ b/tests/cli-test-xml/compare/virt-install-panic-isa-iobase.xml
3d61c0
@@ -12,9 +12,7 @@
3d61c0
     <acpi/>
3d61c0
     <apic/>
3d61c0
   </features>
3d61c0
-  <cpu mode="custom" match="exact">
3d61c0
-    <model>Opteron_G4</model>
3d61c0
-  </cpu>
3d61c0
+  <cpu mode="host-model"/>
3d61c0
   <clock offset="utc">
3d61c0
     <timer name="rtc" tickpolicy="catchup"/>
3d61c0
     <timer name="pit" tickpolicy="delay"/>
3d61c0
diff --git a/tests/cli-test-xml/compare/virt-install-panic-isa.xml b/tests/cli-test-xml/compare/virt-install-panic-isa.xml
3d61c0
index b391a290..d55cfafd 100644
3d61c0
--- a/tests/cli-test-xml/compare/virt-install-panic-isa.xml
3d61c0
+++ b/tests/cli-test-xml/compare/virt-install-panic-isa.xml
3d61c0
@@ -12,9 +12,7 @@
3d61c0
     <acpi/>
3d61c0
     <apic/>
3d61c0
   </features>
3d61c0
-  <cpu mode="custom" match="exact">
3d61c0
-    <model>Opteron_G4</model>
3d61c0
-  </cpu>
3d61c0
+  <cpu mode="host-model"/>
3d61c0
   <clock offset="utc">
3d61c0
     <timer name="rtc" tickpolicy="catchup"/>
3d61c0
     <timer name="pit" tickpolicy="delay"/>
3d61c0
diff --git a/tests/cli-test-xml/compare/virt-install-q35-defaults.xml b/tests/cli-test-xml/compare/virt-install-q35-defaults.xml
3d61c0
index 657c5e07..2b4a0e6d 100644
3d61c0
--- a/tests/cli-test-xml/compare/virt-install-q35-defaults.xml
3d61c0
+++ b/tests/cli-test-xml/compare/virt-install-q35-defaults.xml
3d61c0
@@ -14,9 +14,7 @@
3d61c0
     <apic/>
3d61c0
     <vmport state="off"/>
3d61c0
   </features>
3d61c0
-  <cpu mode="custom" match="exact">
3d61c0
-    <model>Opteron_G4</model>
3d61c0
-  </cpu>
3d61c0
+  <cpu mode="host-model"/>
3d61c0
   <clock offset="utc">
3d61c0
     <timer name="rtc" tickpolicy="catchup"/>
3d61c0
     <timer name="pit" tickpolicy="delay"/>
3d61c0
@@ -84,9 +82,7 @@
3d61c0
     <apic/>
3d61c0
     <vmport state="off"/>
3d61c0
   </features>
3d61c0
-  <cpu mode="custom" match="exact">
3d61c0
-    <model>Opteron_G4</model>
3d61c0
-  </cpu>
3d61c0
+  <cpu mode="host-model"/>
3d61c0
   <clock offset="utc">
3d61c0
     <timer name="rtc" tickpolicy="catchup"/>
3d61c0
     <timer name="pit" tickpolicy="delay"/>
3d61c0
diff --git a/tests/cli-test-xml/compare/virt-install-solaris10-defaults.xml b/tests/cli-test-xml/compare/virt-install-solaris10-defaults.xml
3d61c0
index 6d8b9fde..2fbb82d6 100644
3d61c0
--- a/tests/cli-test-xml/compare/virt-install-solaris10-defaults.xml
3d61c0
+++ b/tests/cli-test-xml/compare/virt-install-solaris10-defaults.xml
3d61c0
@@ -13,8 +13,7 @@
3d61c0
     <apic/>
3d61c0
     <vmport state="off"/>
3d61c0
   </features>
3d61c0
-  <cpu mode="custom" match="exact">
3d61c0
-    <model>Opteron_G4</model>
3d61c0
+  <cpu mode="host-model">
3d61c0
     <feature policy="disable" name="x2apic"/>
3d61c0
   </cpu>
3d61c0
   <clock offset="localtime">
3d61c0
diff --git a/tests/cli-test-xml/compare/virt-install-spice-gl.xml b/tests/cli-test-xml/compare/virt-install-spice-gl.xml
3d61c0
index 095c43e5..b801ccbb 100644
3d61c0
--- a/tests/cli-test-xml/compare/virt-install-spice-gl.xml
3d61c0
+++ b/tests/cli-test-xml/compare/virt-install-spice-gl.xml
3d61c0
@@ -13,9 +13,7 @@
3d61c0
     <apic/>
3d61c0
     <vmport state="off"/>
3d61c0
   </features>
3d61c0
-  <cpu mode="custom" match="exact">
3d61c0
-    <model>Opteron_G4</model>
3d61c0
-  </cpu>
3d61c0
+  <cpu mode="host-model"/>
3d61c0
   <clock offset="utc">
3d61c0
     <timer name="rtc" tickpolicy="catchup"/>
3d61c0
     <timer name="pit" tickpolicy="delay"/>
3d61c0
diff --git a/tests/cli-test-xml/compare/virt-install-win7-uefi.xml b/tests/cli-test-xml/compare/virt-install-win7-uefi.xml
3d61c0
index 796ff73f..15cf997f 100644
3d61c0
--- a/tests/cli-test-xml/compare/virt-install-win7-uefi.xml
3d61c0
+++ b/tests/cli-test-xml/compare/virt-install-win7-uefi.xml
3d61c0
@@ -16,9 +16,7 @@
3d61c0
     <apic/>
3d61c0
     <vmport state="off"/>
3d61c0
   </features>
3d61c0
-  <cpu mode="custom" match="exact">
3d61c0
-    <model>Opteron_G4</model>
3d61c0
-  </cpu>
3d61c0
+  <cpu mode="host-model"/>
3d61c0
   <clock offset="localtime">
3d61c0
     <timer name="rtc" tickpolicy="catchup"/>
3d61c0
     <timer name="pit" tickpolicy="delay"/>
3d61c0
@@ -89,9 +87,7 @@
3d61c0
     <apic/>
3d61c0
     <vmport state="off"/>
3d61c0
   </features>
3d61c0
-  <cpu mode="custom" match="exact">
3d61c0
-    <model>Opteron_G4</model>
3d61c0
-  </cpu>
3d61c0
+  <cpu mode="host-model"/>
3d61c0
   <clock offset="localtime">
3d61c0
     <timer name="rtc" tickpolicy="catchup"/>
3d61c0
     <timer name="pit" tickpolicy="delay"/>
3d61c0
diff --git a/tests/clitest.py b/tests/clitest.py
3d61c0
index 18513597..23d4f109 100644
3d61c0
--- a/tests/clitest.py
3d61c0
+++ b/tests/clitest.py
3d61c0
@@ -805,6 +805,7 @@ c.add_compare("--disk none --location %(EXISTIMG3)s --nonetworks", "location-iso
3d61c0
 c.add_compare("--disk none --location nfs:example.com/fake --nonetworks", "location-nfs")  # Using --location nfs
3d61c0
 c.add_compare("--disk %(EXISTIMG1)s --pxe --os-variant rhel6.4", "kvm-rhel6")  # RHEL6 defaults
3d61c0
 c.add_compare("--disk %(EXISTIMG1)s --pxe --os-variant rhel7.0", "kvm-rhel7")  # RHEL7 defaults
3d61c0
+c.add_compare("--connect " + utils.uri_kvm_nodomcaps + " --disk %(EXISTIMG1)s --pxe --os-variant rhel7.0", "kvm-cpu-default-fallback")  # No domcaps, so mode=host-model isn't safe, so we fallback to host-model-only
3d61c0
 c.add_compare("--disk %(EXISTIMG1)s --pxe --os-variant centos7.0", "kvm-centos7")  # Centos 7 defaults
3d61c0
 c.add_compare("--os-variant win7 --cdrom %(EXISTIMG2)s --boot loader_type=pflash,loader=CODE.fd,nvram_template=VARS.fd --disk %(EXISTIMG1)s", "win7-uefi")  # no HYPER-V with UEFI
3d61c0
 c.add_compare("--machine q35 --cdrom %(EXISTIMG2)s --disk %(EXISTIMG1)s", "q35-defaults")  # proper q35 disk defaults
3d61c0
diff --git a/tests/virtconv-files/libvirt_output/ovf2libvirt_ovf_directory.libvirt b/tests/virtconv-files/libvirt_output/ovf2libvirt_ovf_directory.libvirt
3d61c0
index 92629480..b347515d 100644
3d61c0
--- a/tests/virtconv-files/libvirt_output/ovf2libvirt_ovf_directory.libvirt
3d61c0
+++ b/tests/virtconv-files/libvirt_output/ovf2libvirt_ovf_directory.libvirt
3d61c0
@@ -13,9 +13,7 @@
3d61c0
     <apic/>
3d61c0
     <vmport state="off"/>
3d61c0
   </features>
3d61c0
-  <cpu mode="custom" match="exact">
3d61c0
-    <model>Opteron_G4</model>
3d61c0
-  </cpu>
3d61c0
+  <cpu mode="host-model"/>
3d61c0
   <clock offset="utc">
3d61c0
     <timer name="rtc" tickpolicy="catchup"/>
3d61c0
     <timer name="pit" tickpolicy="delay"/>
3d61c0
diff --git a/tests/virtconv-files/libvirt_output/ovf2libvirt_test1.libvirt b/tests/virtconv-files/libvirt_output/ovf2libvirt_test1.libvirt
3d61c0
index a3d5b8d7..cb27a585 100644
3d61c0
--- a/tests/virtconv-files/libvirt_output/ovf2libvirt_test1.libvirt
3d61c0
+++ b/tests/virtconv-files/libvirt_output/ovf2libvirt_test1.libvirt
3d61c0
@@ -14,9 +14,7 @@
3d61c0
     <apic/>
3d61c0
     <vmport state="off"/>
3d61c0
   </features>
3d61c0
-  <cpu mode="custom" match="exact">
3d61c0
-    <model>Opteron_G4</model>
3d61c0
-  </cpu>
3d61c0
+  <cpu mode="host-model"/>
3d61c0
   <clock offset="utc">
3d61c0
     <timer name="rtc" tickpolicy="catchup"/>
3d61c0
     <timer name="pit" tickpolicy="delay"/>
3d61c0
diff --git a/tests/virtconv-files/libvirt_output/ovf2libvirt_test1.libvirt.disk_qcow2 b/tests/virtconv-files/libvirt_output/ovf2libvirt_test1.libvirt.disk_qcow2
3d61c0
index 60d7818b..548f586e 100644
3d61c0
--- a/tests/virtconv-files/libvirt_output/ovf2libvirt_test1.libvirt.disk_qcow2
3d61c0
+++ b/tests/virtconv-files/libvirt_output/ovf2libvirt_test1.libvirt.disk_qcow2
3d61c0
@@ -14,9 +14,7 @@
3d61c0
     <apic/>
3d61c0
     <vmport state="off"/>
3d61c0
   </features>
3d61c0
-  <cpu mode="custom" match="exact">
3d61c0
-    <model>Opteron_G4</model>
3d61c0
-  </cpu>
3d61c0
+  <cpu mode="host-model"/>
3d61c0
   <clock offset="utc">
3d61c0
     <timer name="rtc" tickpolicy="catchup"/>
3d61c0
     <timer name="pit" tickpolicy="delay"/>
3d61c0
diff --git a/tests/virtconv-files/libvirt_output/ovf2libvirt_test2.libvirt b/tests/virtconv-files/libvirt_output/ovf2libvirt_test2.libvirt
3d61c0
index b8bd1ab9..fb1f8a1a 100644
3d61c0
--- a/tests/virtconv-files/libvirt_output/ovf2libvirt_test2.libvirt
3d61c0
+++ b/tests/virtconv-files/libvirt_output/ovf2libvirt_test2.libvirt
3d61c0
@@ -14,9 +14,7 @@
3d61c0
     <apic/>
3d61c0
     <vmport state="off"/>
3d61c0
   </features>
3d61c0
-  <cpu mode="custom" match="exact">
3d61c0
-    <model>Opteron_G4</model>
3d61c0
-  </cpu>
3d61c0
+  <cpu mode="host-model"/>
3d61c0
   <clock offset="utc">
3d61c0
     <timer name="rtc" tickpolicy="catchup"/>
3d61c0
     <timer name="pit" tickpolicy="delay"/>
3d61c0
diff --git a/tests/virtconv-files/libvirt_output/ovf2libvirt_test_gzip.libvirt b/tests/virtconv-files/libvirt_output/ovf2libvirt_test_gzip.libvirt
3d61c0
index 76a5b514..5716aa61 100644
3d61c0
--- a/tests/virtconv-files/libvirt_output/ovf2libvirt_test_gzip.libvirt
3d61c0
+++ b/tests/virtconv-files/libvirt_output/ovf2libvirt_test_gzip.libvirt
3d61c0
@@ -13,9 +13,7 @@
3d61c0
     <apic/>
3d61c0
     <vmport state="off"/>
3d61c0
   </features>
3d61c0
-  <cpu mode="custom" match="exact">
3d61c0
-    <model>Opteron_G4</model>
3d61c0
-  </cpu>
3d61c0
+  <cpu mode="host-model"/>
3d61c0
   <clock offset="utc">
3d61c0
     <timer name="rtc" tickpolicy="catchup"/>
3d61c0
     <timer name="pit" tickpolicy="delay"/>
3d61c0
diff --git a/tests/virtconv-files/libvirt_output/ovf2libvirt_test_gzip.libvirt.disk_raw b/tests/virtconv-files/libvirt_output/ovf2libvirt_test_gzip.libvirt.disk_raw
3d61c0
index 3fbece09..9e5bed73 100644
3d61c0
--- a/tests/virtconv-files/libvirt_output/ovf2libvirt_test_gzip.libvirt.disk_raw
3d61c0
+++ b/tests/virtconv-files/libvirt_output/ovf2libvirt_test_gzip.libvirt.disk_raw
3d61c0
@@ -13,9 +13,7 @@
3d61c0
     <apic/>
3d61c0
     <vmport state="off"/>
3d61c0
   </features>
3d61c0
-  <cpu mode="custom" match="exact">
3d61c0
-    <model>Opteron_G4</model>
3d61c0
-  </cpu>
3d61c0
+  <cpu mode="host-model"/>
3d61c0
   <clock offset="utc">
3d61c0
     <timer name="rtc" tickpolicy="catchup"/>
3d61c0
     <timer name="pit" tickpolicy="delay"/>
3d61c0
diff --git a/tests/virtconv-files/libvirt_output/vmx2libvirt_test-nodisks.libvirt b/tests/virtconv-files/libvirt_output/vmx2libvirt_test-nodisks.libvirt
3d61c0
index f00794ce..92b278cc 100644
3d61c0
--- a/tests/virtconv-files/libvirt_output/vmx2libvirt_test-nodisks.libvirt
3d61c0
+++ b/tests/virtconv-files/libvirt_output/vmx2libvirt_test-nodisks.libvirt
3d61c0
@@ -13,9 +13,7 @@
3d61c0
     <apic/>
3d61c0
     <vmport state="off"/>
3d61c0
   </features>
3d61c0
-  <cpu mode="custom" match="exact">
3d61c0
-    <model>Opteron_G4</model>
3d61c0
-  </cpu>
3d61c0
+  <cpu mode="host-model"/>
3d61c0
   <clock offset="utc">
3d61c0
     <timer name="rtc" tickpolicy="catchup"/>
3d61c0
     <timer name="pit" tickpolicy="delay"/>
3d61c0
diff --git a/tests/virtconv-files/libvirt_output/vmx2libvirt_test-vmx-zip.libvirt b/tests/virtconv-files/libvirt_output/vmx2libvirt_test-vmx-zip.libvirt
3d61c0
index 60055b7d..1546ccfc 100644
3d61c0
--- a/tests/virtconv-files/libvirt_output/vmx2libvirt_test-vmx-zip.libvirt
3d61c0
+++ b/tests/virtconv-files/libvirt_output/vmx2libvirt_test-vmx-zip.libvirt
3d61c0
@@ -13,9 +13,7 @@
3d61c0
     <apic/>
3d61c0
     <vmport state="off"/>
3d61c0
   </features>
3d61c0
-  <cpu mode="custom" match="exact">
3d61c0
-    <model>Opteron_G4</model>
3d61c0
-  </cpu>
3d61c0
+  <cpu mode="host-model"/>
3d61c0
   <clock offset="utc">
3d61c0
     <timer name="rtc" tickpolicy="catchup"/>
3d61c0
     <timer name="pit" tickpolicy="delay"/>
3d61c0
diff --git a/tests/virtconv-files/libvirt_output/vmx2libvirt_test1.libvirt b/tests/virtconv-files/libvirt_output/vmx2libvirt_test1.libvirt
3d61c0
index 065df6da..f19b83f0 100644
3d61c0
--- a/tests/virtconv-files/libvirt_output/vmx2libvirt_test1.libvirt
3d61c0
+++ b/tests/virtconv-files/libvirt_output/vmx2libvirt_test1.libvirt
3d61c0
@@ -13,9 +13,7 @@
3d61c0
     <apic/>
3d61c0
     <vmport state="off"/>
3d61c0
   </features>
3d61c0
-  <cpu mode="custom" match="exact">
3d61c0
-    <model>Opteron_G4</model>
3d61c0
-  </cpu>
3d61c0
+  <cpu mode="host-model"/>
3d61c0
   <clock offset="utc">
3d61c0
     <timer name="rtc" tickpolicy="catchup"/>
3d61c0
     <timer name="pit" tickpolicy="delay"/>
3d61c0
diff --git a/tests/virtconv-files/libvirt_output/vmx2libvirt_test1.libvirt.disk_raw b/tests/virtconv-files/libvirt_output/vmx2libvirt_test1.libvirt.disk_raw
3d61c0
index 910de78d..0b420be3 100644
3d61c0
--- a/tests/virtconv-files/libvirt_output/vmx2libvirt_test1.libvirt.disk_raw
3d61c0
+++ b/tests/virtconv-files/libvirt_output/vmx2libvirt_test1.libvirt.disk_raw
3d61c0
@@ -13,9 +13,7 @@
3d61c0
     <apic/>
3d61c0
     <vmport state="off"/>
3d61c0
   </features>
3d61c0
-  <cpu mode="custom" match="exact">
3d61c0
-    <model>Opteron_G4</model>
3d61c0
-  </cpu>
3d61c0
+  <cpu mode="host-model"/>
3d61c0
   <clock offset="utc">
3d61c0
     <timer name="rtc" tickpolicy="catchup"/>
3d61c0
     <timer name="pit" tickpolicy="delay"/>
3d61c0
diff --git a/tests/virtconv-files/libvirt_output/vmx2libvirt_vmx-dir.libvirt b/tests/virtconv-files/libvirt_output/vmx2libvirt_vmx-dir.libvirt
3d61c0
index e72a7184..f94691cf 100644
3d61c0
--- a/tests/virtconv-files/libvirt_output/vmx2libvirt_vmx-dir.libvirt
3d61c0
+++ b/tests/virtconv-files/libvirt_output/vmx2libvirt_vmx-dir.libvirt
3d61c0
@@ -13,9 +13,7 @@
3d61c0
     <apic/>
3d61c0
     <vmport state="off"/>
3d61c0
   </features>
3d61c0
-  <cpu mode="custom" match="exact">
3d61c0
-    <model>Opteron_G4</model>
3d61c0
-  </cpu>
3d61c0
+  <cpu mode="host-model"/>
3d61c0
   <clock offset="utc">
3d61c0
     <timer name="rtc" tickpolicy="catchup"/>
3d61c0
     <timer name="pit" tickpolicy="delay"/>
3d61c0
diff --git a/virtinst/cpu.py b/virtinst/cpu.py
3d61c0
index 1f1ad7ec..2de08145 100644
3d61c0
--- a/virtinst/cpu.py
3d61c0
+++ b/virtinst/cpu.py
3d61c0
@@ -95,9 +95,11 @@ class CPU(XMLBuilder):
3d61c0
     SPECIAL_MODE_HOST_MODEL = "host-model"
3d61c0
     SPECIAL_MODE_HOST_PASSTHROUGH = "host-passthrough"
3d61c0
     SPECIAL_MODE_CLEAR = "clear"
3d61c0
+    SPECIAL_MODE_APP_DEFAULT = "default"
3d61c0
     SPECIAL_MODES = [SPECIAL_MODE_HOST_MODEL_ONLY, SPECIAL_MODE_HV_DEFAULT,
3d61c0
                      SPECIAL_MODE_HOST_COPY, SPECIAL_MODE_HOST_MODEL,
3d61c0
-                     SPECIAL_MODE_HOST_PASSTHROUGH, SPECIAL_MODE_CLEAR]
3d61c0
+                     SPECIAL_MODE_HOST_PASSTHROUGH, SPECIAL_MODE_CLEAR,
3d61c0
+                     SPECIAL_MODE_APP_DEFAULT]
3d61c0
     def set_special_mode(self, val):
3d61c0
         if (val == self.SPECIAL_MODE_HOST_MODEL or
3d61c0
             val == self.SPECIAL_MODE_HOST_PASSTHROUGH):
3d61c0
@@ -262,6 +264,14 @@ class CPU(XMLBuilder):
3d61c0
             return
3d61c0
 
3d61c0
         mode = guest.x86_cpu_default
3d61c0
+        if mode == self.SPECIAL_MODE_APP_DEFAULT:
3d61c0
+            # If libvirt is new enough to support reliable mode=host-model
3d61c0
+            # then use it, otherwise use previous default HOST_MODEL_ONLY
3d61c0
+            domcaps = guest.lookup_domcaps()
3d61c0
+            mode = self.SPECIAL_MODE_HOST_MODEL_ONLY
3d61c0
+            if domcaps.supports_safe_host_model():
3d61c0
+                mode = self.SPECIAL_MODE_HOST_MODEL
3d61c0
+
3d61c0
         self.set_special_mode(mode)
3d61c0
         if mode == self.SPECIAL_MODE_HOST_MODEL_ONLY:
3d61c0
             self._validate_default_host_model_only(guest)
3d61c0
diff --git a/virtinst/domcapabilities.py b/virtinst/domcapabilities.py
3d61c0
index 1a84ab95..7d7e2af7 100644
3d61c0
--- a/virtinst/domcapabilities.py
3d61c0
+++ b/virtinst/domcapabilities.py
3d61c0
@@ -85,6 +85,7 @@ class _CPUModel(XMLBuilder):
3d61c0
 class _CPUMode(XMLBuilder):
3d61c0
     _XML_ROOT_NAME = "mode"
3d61c0
     name = XMLProperty("./@name")
3d61c0
+    supported = XMLProperty("./@supported", is_yesno=True)
3d61c0
     models = XMLChildProperty(_CPUModel)
3d61c0
 
3d61c0
     def get_model(self, name):
3d61c0
@@ -187,6 +188,15 @@ class DomainCapabilities(XMLBuilder):
3d61c0
         return ("readonly" in self.os.loader.enum_names() and
3d61c0
                 "yes" in self.os.loader.get_enum("readonly").get_values())
3d61c0
 
3d61c0
+    def supports_safe_host_model(self):
3d61c0
+        """
3d61c0
+        Return True if domcaps reports support for cpu mode=host-model.
3d61c0
+        host-model infact predates this support, however it wasn't
3d61c0
+        general purpose safe prior to domcaps advertisement
3d61c0
+        """
3d61c0
+        return [(m.name == "host-model" and m.supported)
3d61c0
+                for m in self.cpu.modes]
3d61c0
+
3d61c0
 
3d61c0
     _XML_ROOT_NAME = "domainCapabilities"
3d61c0
     os = XMLChildProperty(_OS, is_single=True)
3d61c0
diff --git a/virtinst/guest.py b/virtinst/guest.py
3d61c0
index 9c45b1b8..a19b8999 100644
3d61c0
--- a/virtinst/guest.py
3d61c0
+++ b/virtinst/guest.py
3d61c0
@@ -128,7 +128,7 @@ class Guest(XMLBuilder):
3d61c0
         self.skip_default_usbredir = False
3d61c0
         self.skip_default_graphics = False
3d61c0
         self.skip_default_rng = False
3d61c0
-        self.x86_cpu_default = self.cpu.SPECIAL_MODE_HOST_MODEL_ONLY
3d61c0
+        self.x86_cpu_default = self.cpu.SPECIAL_MODE_APP_DEFAULT
3d61c0
 
3d61c0
         self.__os_object = None
3d61c0
         self._random_uuid = None
3d61c0
-- 
3d61c0
2.20.1
3d61c0