Revert "add a checkbox for cpu host-model mode, remove 'copy' button"

host-model is a bit more scary then previous behavior, since the
model of an existing VM can transparently change across libvirt
upgrade or HW upgrade. This will probably be improved at the libvirt
level, but for now revert.

This reverts commit 17f43e47fb.
This commit is contained in:
Cole Robinson 2013-04-26 15:58:18 -04:00
parent 5a316b9a51
commit 40cbc39a98
3 changed files with 135 additions and 86 deletions

View File

@ -2314,14 +2314,116 @@ I/O:</property>
<property name="can_focus">False</property>
<property name="spacing">6</property>
<child>
<object class="GtkCheckButton" id="cpu-host-model-checkbutton">
<property name="label" translatable="yes">Use host CPU model</property>
<property name="use_action_appearance">False</property>
<object class="GtkTable" id="table15">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="draw_indicator">True</property>
<signal name="toggled" handler="on_cpu_host_model_enable_toggled" swapped="no"/>
<property name="can_focus">False</property>
<property name="n_rows">2</property>
<property name="n_columns">2</property>
<property name="column_spacing">12</property>
<property name="row_spacing">3</property>
<child>
<object class="GtkLabel" id="label52">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Model:</property>
</object>
<packing>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkHBox" id="hbox21">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkAlignment" id="alignment33">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkComboBox" id="cpu-model">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="has_entry">True</property>
<signal name="changed" handler="on_cpu_model_changed" swapped="no"/>
<child internal-child="entry">
<object class="GtkEntry" id="combobox-entry">
<property name="can_focus">True</property>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkAlignment" id="alignment37">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkHBox" id="hbox25">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkButton" id="cpu-copy-host">
<property name="label" translatable="yes">Copy host CPU configuration</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<signal name="clicked" handler="on_cpu_copy_host_clicked" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkAlignment" id="alignment38">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
@ -2329,53 +2431,6 @@ I/O:</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkHBox" id="hbox14">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkLabel" id="label52">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Model:</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkAlignment" id="alignment12">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkComboBox" id="cpu-model">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="has_entry">True</property>
<signal name="changed" handler="on_cpu_model_changed" swapped="no"/>
<child internal-child="entry">
<object class="GtkEntry" id="combobox-entry">
<property name="can_focus">True</property>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkExpander" id="cpu-features-expander">
<property name="visible">True</property>
@ -2423,7 +2478,7 @@ I/O:</property>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
@ -2444,7 +2499,7 @@ I/O:</property>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
<property name="position">1</property>
</packing>
</child>
</object>

View File

@ -366,6 +366,7 @@ class vmmDetails(vmmGObjectUI):
self.ignorePause = False
self.ignoreDetails = False
self._cpu_copy_host = False
self.console = vmmConsolePages(self.vm, self.builder, self.topwin)
@ -436,7 +437,7 @@ class vmmDetails(vmmGObjectUI):
"on_cpu_cores_changed": lambda *x: self.enable_apply(x, EDIT_TOPOLOGY),
"on_cpu_sockets_changed": lambda *x: self.enable_apply(x, EDIT_TOPOLOGY),
"on_cpu_threads_changed": lambda *x: self.enable_apply(x, EDIT_TOPOLOGY),
"on_cpu_host_model_enable_toggled": self.config_cpu_host_model_enable,
"on_cpu_copy_host_clicked": self.config_cpu_copy_host,
"on_cpu_topology_enable_toggled": self.config_cpu_topology_enable,
"on_config_memory_changed": self.config_memory_changed,
@ -923,8 +924,6 @@ class vmmDetails(vmmGObjectUI):
feat_model.append([name, "default"])
# CPU model combo
self.widget("cpu-host-model-checkbutton").set_tooltip_text(
_("Use CPU model which most closely matches the host. This gives maximum functionality and performance."))
cpu_model = self.widget("cpu-model")
model = Gtk.ListStore(str, object)
@ -1819,11 +1818,17 @@ class vmmDetails(vmmGObjectUI):
def config_maxvcpus_changed(self, ignore):
self.enable_apply(EDIT_VCPUS)
def config_cpu_host_model_enable(self, src):
do_enable = src.get_active()
self.widget("cpu-model").set_sensitive(not bool(do_enable))
self.widget("cpu-features").set_sensitive(not bool(do_enable))
self.enable_apply(EDIT_CPU)
def config_cpu_copy_host(self, src_ignore):
# Update UI with output copied from host
try:
CPU = virtinst.CPU(self.vm.conn.vmm)
CPU.copy_host_cpu()
self._refresh_cpu_config(CPU)
self._cpu_copy_host = True
except Exception, e:
self.err.show_err(_("Error copying host CPU: %s") % str(e))
return
def config_cpu_topology_enable(self, src):
do_enable = src.get_active()
@ -2118,14 +2123,10 @@ class vmmDetails(vmmGObjectUI):
add_hotplug(self.config_vcpu_pin_cpuset, cpuset)
if self.editted(EDIT_CPU):
from_host = False
if self.widget("cpu-host-model-checkbutton").get_active():
from_host = True
model, vendor = self.get_config_cpu_model()
features = self.get_config_cpu_features()
add_define(self.vm.define_cpu,
model, vendor, from_host, features)
model, vendor, self._cpu_copy_host, features)
if self.editted(EDIT_TOPOLOGY):
do_top = self.widget("cpu-topology-enable").get_active()
@ -2140,6 +2141,8 @@ class vmmDetails(vmmGObjectUI):
add_define(self.vm.define_cpu_topology, sockets, cores, threads)
ret = self._change_config_helper(df, da, hf, ha)
if ret:
self._cpu_copy_host = False
return ret
def config_vcpu_pin(self, src_ignore, path, new_text):
@ -2819,8 +2822,6 @@ class vmmDetails(vmmGObjectUI):
def _refresh_cpu_config(self, cpu):
feature_ui = self.widget("cpu-features")
model = cpu.model or ""
mode = cpu.mode or ""
caps = self.vm.conn.get_capabilities()
capscpu = None
@ -2840,11 +2841,6 @@ class vmmDetails(vmmGObjectUI):
cores = cpu.cores or 1
threads = cpu.threads or 1
host_model = self.widget("cpu-host-model-checkbutton")
active = host_model.get_active()
if (not mode and active) or (mode == "host-model" and not active):
host_model.set_active(not bool(active))
self.widget("cpu-topology-enable").set_active(show_top)
self.widget("cpu-model").get_child().set_text(model)
self.widget("cpu-sockets").set_value(sockets)
@ -2866,6 +2862,7 @@ class vmmDetails(vmmGObjectUI):
row[1] = get_feature_policy(row[0])
def refresh_config_cpu(self):
self._cpu_copy_host = False
cpu = self.vm.get_cpu_config()
self._refresh_cpu_count()

View File

@ -468,19 +468,16 @@ class vmmDomain(vmmLibvirtObject):
def define_cpu(self, model, vendor, from_host, featurelist):
def change(guest):
if from_host:
if virtinst.support.check_domain_support(self._backend,
virtinst.support.SUPPORT_DOMAIN_CPU_HOST_MODEL):
guest.cpu.clear_attrs()
guest.cpu.mode = "host-model"
else:
guest.cpu.copy_host_cpu()
return
guest.cpu.copy_host_cpu()
elif guest.cpu.model != model:
# Since we don't expose this in the UI, have host value trump
# caps value
guest.cpu.vendor = vendor
guest.cpu.model = model or None
guest.cpu.vendor = vendor or None
if guest.cpu.model is None:
guest.cpu.clear_attrs()
for f in guest.cpu.features:
guest.cpu.remove_feature(f)
return
origfeatures = guest.cpu.features