Blame SOURCES/virt-manager-virt-manager-Wire-up-support-for-default-mode-host-model.patch

3d61c0
From 1b24900787b6b6cb52dae323ed0c6cff7492f66a Mon Sep 17 00:00:00 2001
3d61c0
Message-Id: <1b24900787b6b6cb52dae323ed0c6cff7492f66a@dist-git>
3d61c0
From: Pavel Hrdina <phrdina@redhat.com>
3d61c0
Date: Thu, 4 Oct 2018 14:19:32 -0400
3d61c0
Subject: [PATCH] virt-manager: Wire up support for default mode=host-model
3d61c0
3d61c0
From: Cole Robinson <crobinso@redhat.com>
3d61c0
3d61c0
Simplify things a long the way
3d61c0
3d61c0
(cherry picked from commit 9edca3486abd76e9a7c2c2fe3ad12ae32fc65733)
3d61c0
3d61c0
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1525337
3d61c0
3d61c0
Conflicts:
3d61c0
    - CPU class is renamed to DomainCpu in upstream
3d61c0
3d61c0
Reviewed-by: Cole Robinson <crobinso@redhat.com>
3d61c0
Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
3d61c0
---
3d61c0
 virtManager/config.py      | 20 +++-----------------
3d61c0
 virtManager/create.py      |  3 +--
3d61c0
 virtManager/details.py     |  8 ++++----
3d61c0
 virtManager/domain.py      |  2 +-
3d61c0
 virtManager/preferences.py | 16 ++++++++++------
3d61c0
 virtinst/cli.py            |  2 +-
3d61c0
 virtinst/cpu.py            | 19 ++++++++++---------
3d61c0
 7 files changed, 30 insertions(+), 40 deletions(-)
3d61c0
3d61c0
diff --git a/virtManager/config.py b/virtManager/config.py
3d61c0
index 4d47b477..a3daf341 100644
3d61c0
--- a/virtManager/config.py
3d61c0
+++ b/virtManager/config.py
3d61c0
@@ -198,7 +198,6 @@ class vmmConfig(object):
3d61c0
                 self.hv_packages = ["qemu-kvm"]
3d61c0
 
3d61c0
         self.default_storage_format_from_config = "qcow2"
3d61c0
-        self.cpu_default_from_config = CPU.SPECIAL_MODE_HOST_MODEL_ONLY
3d61c0
         self.default_console_resizeguest = 0
3d61c0
         self.default_add_spice_usbredir = "yes"
3d61c0
 
3d61c0
@@ -531,24 +530,11 @@ class vmmConfig(object):
3d61c0
     def set_storage_format(self, typ):
3d61c0
         self.conf.set("/new-vm/storage-format", typ.lower())
3d61c0
 
3d61c0
-    def get_default_cpu_setting(self, raw=False, for_cpu=False):
3d61c0
+    def get_default_cpu_setting(self):
3d61c0
         ret = self.conf.get("/new-vm/cpu-default")
3d61c0
-        whitelist = [CPU.SPECIAL_MODE_HOST_MODEL_ONLY,
3d61c0
-                     CPU.SPECIAL_MODE_HOST_MODEL,
3d61c0
-                     CPU.SPECIAL_MODE_HV_DEFAULT]
3d61c0
-
3d61c0
-        if ret not in whitelist:
3d61c0
-            ret = "default"
3d61c0
-        if ret == "default" and not raw:
3d61c0
-            ret = self.cpu_default_from_config
3d61c0
-            if ret not in whitelist:
3d61c0
-                ret = whitelist[0]
3d61c0
-
3d61c0
-        if for_cpu and ret == CPU.SPECIAL_MODE_HOST_MODEL:
3d61c0
-            # host-model has known issues, so use our 'copy cpu'
3d61c0
-            # behavior until host-model does what we need
3d61c0
-            ret = CPU.SPECIAL_MODE_HOST_COPY
3d61c0
 
3d61c0
+        if ret not in CPU.SPECIAL_MODES:
3d61c0
+            ret = CPU.SPECIAL_MODE_APP_DEFAULT
3d61c0
         return ret
3d61c0
     def set_default_cpu_setting(self, val):
3d61c0
         self.conf.set("/new-vm/cpu-default", val.lower())
3d61c0
diff --git a/virtManager/create.py b/virtManager/create.py
3d61c0
index d5d1d5a0..3e1fc624 100644
3d61c0
--- a/virtManager/create.py
3d61c0
+++ b/virtManager/create.py
3d61c0
@@ -1880,8 +1880,7 @@ class vmmCreate(vmmGObjectUI):
3d61c0
             guest.skip_default_sound = not self.config.get_new_vm_sound()
3d61c0
             guest.skip_default_usbredir = (
3d61c0
                 self.config.get_add_spice_usbredir() == "no")
3d61c0
-            guest.x86_cpu_default = self.config.get_default_cpu_setting(
3d61c0
-                for_cpu=True)
3d61c0
+            guest.x86_cpu_default = self.config.get_default_cpu_setting()
3d61c0
 
3d61c0
             guest.add_default_devices()
3d61c0
         except Exception as e:
3d61c0
diff --git a/virtManager/details.py b/virtManager/details.py
3d61c0
index ebe010b5..be0f25c9 100644
3d61c0
--- a/virtManager/details.py
3d61c0
+++ b/virtManager/details.py
3d61c0
@@ -972,7 +972,8 @@ class vmmDetails(vmmGObjectUI):
3d61c0
         cpu_model.set_entry_text_column(0)
3d61c0
         cpu_model.set_row_separator_func(sep_func, None)
3d61c0
         model.set_sort_column_id(1, Gtk.SortType.ASCENDING)
3d61c0
-        model.append([_("Application Default"), "1", "appdefault", False])
3d61c0
+        model.append([_("Application Default"), "1",
3d61c0
+            virtinst.CPU.SPECIAL_MODE_APP_DEFAULT, False])
3d61c0
         model.append([_("Hypervisor Default"), "2",
3d61c0
             virtinst.CPU.SPECIAL_MODE_HV_DEFAULT, False])
3d61c0
         model.append([_("Clear CPU configuration"), "3",
3d61c0
@@ -1572,12 +1573,11 @@ class vmmDetails(vmmGObjectUI):
3d61c0
             if text == row[0]:
3d61c0
                 key = row[2]
3d61c0
                 break
3d61c0
-
3d61c0
         if not key:
3d61c0
             return text
3d61c0
 
3d61c0
-        if key == "appdefault":
3d61c0
-            return self.config.get_default_cpu_setting(for_cpu=True)
3d61c0
+        if key == virtinst.CPU.SPECIAL_MODE_APP_DEFAULT:
3d61c0
+            return self.config.get_default_cpu_setting()
3d61c0
         return key
3d61c0
 
3d61c0
     def inspection_refresh(self, src_ignore):
3d61c0
diff --git a/virtManager/domain.py b/virtManager/domain.py
3d61c0
index ed94cf16..50ccbdb1 100644
3d61c0
--- a/virtManager/domain.py
3d61c0
+++ b/virtManager/domain.py
3d61c0
@@ -663,7 +663,7 @@ class vmmDomain(vmmLibvirtObject):
3d61c0
 
3d61c0
         if model != _SENTINEL:
3d61c0
             if model in guest.cpu.SPECIAL_MODES:
3d61c0
-                guest.cpu.set_special_mode(model)
3d61c0
+                guest.cpu.set_special_mode(guest, model)
3d61c0
             else:
3d61c0
                 guest.cpu.model = model
3d61c0
         self._redefine_xmlobj(guest)
3d61c0
diff --git a/virtManager/preferences.py b/virtManager/preferences.py
3d61c0
index bf67590f..5739af29 100644
3d61c0
--- a/virtManager/preferences.py
3d61c0
+++ b/virtManager/preferences.py
3d61c0
@@ -23,6 +23,8 @@ import logging
3d61c0
 from gi.repository import Gtk
3d61c0
 from gi.repository import Gdk
3d61c0
 
3d61c0
+from virtinst import CPU
3d61c0
+
3d61c0
 from . import uiutil
3d61c0
 from .baseclass import vmmGObjectUI
3d61c0
 
3d61c0
@@ -160,11 +162,13 @@ class vmmPreferences(vmmGObjectUI):
3d61c0
         combo = self.widget("prefs-cpu-default")
3d61c0
         # [gsettings value, string]
3d61c0
         model = Gtk.ListStore(str, str)
3d61c0
-        for row in [["default", _("System default (%s)") %
3d61c0
-                    self.config.cpu_default_from_config],
3d61c0
-                    ["hv-default", _("Hypervisor default")],
3d61c0
-                    ["host-model-only", _("Nearest host CPU model")],
3d61c0
-                    ["host-model", _("Copy host CPU definition")]]:
3d61c0
+        for row in [
3d61c0
+            [CPU.SPECIAL_MODE_APP_DEFAULT, _("Application default")],
3d61c0
+            [CPU.SPECIAL_MODE_HV_DEFAULT, _("Hypervisor default")],
3d61c0
+            [CPU.SPECIAL_MODE_HOST_MODEL_ONLY,
3d61c0
+                _("Nearest host CPU model")],
3d61c0
+            [CPU.SPECIAL_MODE_HOST_MODEL,
3d61c0
+                _("Copy host CPU definition")]]:
3d61c0
             model.append(row)
3d61c0
         combo.set_model(model)
3d61c0
         uiutil.init_combo_text_column(combo, 1)
3d61c0
@@ -211,7 +215,7 @@ class vmmPreferences(vmmGObjectUI):
3d61c0
         uiutil.set_list_selection(combo, val)
3d61c0
     def refresh_cpu_default(self):
3d61c0
         combo = self.widget("prefs-cpu-default")
3d61c0
-        val = self.config.get_default_cpu_setting(raw=True)
3d61c0
+        val = self.config.get_default_cpu_setting()
3d61c0
         uiutil.set_list_selection(combo, val)
3d61c0
 
3d61c0
     def refresh_cpu_poll(self):
3d61c0
diff --git a/virtinst/cli.py b/virtinst/cli.py
3d61c0
index 3d3ac0ac..7e8ab536 100644
3d61c0
--- a/virtinst/cli.py
3d61c0
+++ b/virtinst/cli.py
3d61c0
@@ -1484,7 +1484,7 @@ class ParserCPU(VirtCLIParser):
3d61c0
             val = inst.SPECIAL_MODE_CLEAR
3d61c0
 
3d61c0
         if val in inst.SPECIAL_MODES:
3d61c0
-            inst.set_special_mode(val)
3d61c0
+            inst.set_special_mode(self.guest, val)
3d61c0
         else:
3d61c0
             inst.model = val
3d61c0
 
3d61c0
diff --git a/virtinst/cpu.py b/virtinst/cpu.py
3d61c0
index 2de08145..356df206 100644
3d61c0
--- a/virtinst/cpu.py
3d61c0
+++ b/virtinst/cpu.py
3d61c0
@@ -100,7 +100,15 @@ class CPU(XMLBuilder):
3d61c0
                      SPECIAL_MODE_HOST_COPY, SPECIAL_MODE_HOST_MODEL,
3d61c0
                      SPECIAL_MODE_HOST_PASSTHROUGH, SPECIAL_MODE_CLEAR,
3d61c0
                      SPECIAL_MODE_APP_DEFAULT]
3d61c0
-    def set_special_mode(self, val):
3d61c0
+    def set_special_mode(self, guest, val):
3d61c0
+        if val == 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
+            val = self.SPECIAL_MODE_HOST_MODEL_ONLY
3d61c0
+            if domcaps.supports_safe_host_model():
3d61c0
+                val = self.SPECIAL_MODE_HOST_MODEL
3d61c0
+
3d61c0
         if (val == self.SPECIAL_MODE_HOST_MODEL or
3d61c0
             val == self.SPECIAL_MODE_HOST_PASSTHROUGH):
3d61c0
             self.model = None
3d61c0
@@ -264,15 +272,8 @@ 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
+        self.set_special_mode(guest, mode)
3d61c0
         if mode == self.SPECIAL_MODE_HOST_MODEL_ONLY:
3d61c0
             self._validate_default_host_model_only(guest)
3d61c0
 
3d61c0
-- 
3d61c0
2.20.1
3d61c0