[virt-tools-list] [PATCH] Revert "check cpu host-model mode support"

Cole Robinson crobinso at redhat.com
Fri Apr 26 19:57:51 UTC 2013


On 04/26/2013 12:40 AM, Guannan Ren wrote:
> 'git revert <commit-id>' to revert the following commit id
> 'git rebase' to combine them into one patch
> 
> This reverts commit 15f72a84abcf2f295ab0366b4637f993b567df5a.
> Revert "cpu: add helper function to reset cpu related variables to none"
> This reverts commit e941a9e92b9bf9565e1d7367fe7d46d0135ad52a.
> Revert "add a checkbox for cpu host-model mode, remove 'copy' button"
> This reverts commit 17f43e47fb4022093a047b27d2ec60458e5dfcef.

Actually, I'm just going to revert the UI bit, so when in the future we use
host_model some of the infrastructure bits are already in place.

- Cole

> ---
>  ui/vmm-details.ui         | 121 +++++++++++++++++++++++++++++++++-------------
>  virtManager/connection.py |   7 ---
>  virtManager/details.py    |  37 +++++++-------
>  virtManager/domain.py     |  17 +++----
>  virtinst/CPU.py           |   9 ----
>  virtinst/support.py       |   5 --
>  6 files changed, 112 insertions(+), 84 deletions(-)
> 
> diff --git a/ui/vmm-details.ui b/ui/vmm-details.ui
> index 631d58f..99789c2 100644
> --- a/ui/vmm-details.ui
> +++ b/ui/vmm-details.ui
> @@ -2314,66 +2314,121 @@ 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>
> -                                                <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"/>
> -                                              </object>
> -                                              <packing>
> -                                                <property name="expand">False</property>
> -                                                <property name="fill">True</property>
> -                                                <property name="position">0</property>
> -                                              </packing>
> -                                            </child>
> -                                            <child>
> -                                              <object class="GtkHBox" id="hbox14">
> +                                              <object class="GtkTable" id="table15">
>                                                  <property name="visible">True</property>
>                                                  <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="expand">False</property>
> -                                                    <property name="fill">False</property>
> -                                                    <property name="position">0</property>
> +                                                    <property name="x_options">GTK_FILL</property>
> +                                                    <property name="y_options">GTK_FILL</property>
>                                                    </packing>
>                                                  </child>
>                                                  <child>
> -                                                  <object class="GtkAlignment" id="alignment12">
> +                                                  <object class="GtkHBox" id="hbox21">
>                                                      <property name="visible">True</property>
>                                                      <property name="can_focus">False</property>
>                                                      <child>
> -                                                      <object class="GtkComboBox" id="cpu-model">
> +                                                      <object class="GtkAlignment" id="alignment33">
>                                                          <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">
> +                                                        <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>
> -                                                        </object>
> +                                                        <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="expand">False</property>
> -                                                    <property name="fill">False</property>
> -                                                    <property name="position">1</property>
> +                                                    <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>
>                                                  <property name="fill">True</property>
> -                                                <property name="position">1</property>
> +                                                <property name="position">0</property>
>                                                </packing>
>                                              </child>
>                                              <child>
> @@ -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>
> diff --git a/virtManager/connection.py b/virtManager/connection.py
> index e6058e3..8fcea73 100644
> --- a/virtManager/connection.py
> +++ b/virtManager/connection.py
> @@ -547,13 +547,6 @@ class vmmConnection(vmmGObject):
>              else:
>                  logging.debug("Domain XML secure flag not supported.")
>  
> -            if virtinst.support.check_domain_support(vm,
> -                                virtinst.support.SUPPORT_DOMAIN_CPU_HOST_MODEL):
> -                inact |= libvirt.VIR_DOMAIN_XML_UPDATE_CPU
> -                act |= libvirt.VIR_DOMAIN_XML_UPDATE_CPU
> -            else:
> -                logging.debug("Domain XML update flag not supported.")
> -
>              return inact, act
>  
>          return self._get_flags_helper(vm, key, check_func)
> diff --git a/virtManager/details.py b/virtManager/details.py
> index cd18aa8..01511d1 100644
> --- a/virtManager/details.py
> +++ b/virtManager/details.py
> @@ -360,6 +360,7 @@ class vmmDetails(vmmGObjectUI):
>  
>          self.ignorePause = False
>          self.ignoreDetails = False
> +        self._cpu_copy_host = False
>  
>          self.console = vmmConsolePages(self.vm, self.builder, self.topwin)
>  
> @@ -430,7 +431,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,
> @@ -917,8 +918,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)
> @@ -1813,11 +1812,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()
> @@ -2112,14 +2117,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()
> @@ -2134,6 +2135,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):
> @@ -2813,8 +2816,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
> @@ -2834,11 +2835,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)
> @@ -2860,6 +2856,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()
> diff --git a/virtManager/domain.py b/virtManager/domain.py
> index 823e17b..f958c4b 100644
> --- a/virtManager/domain.py
> +++ b/virtManager/domain.py
> @@ -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
> diff --git a/virtinst/CPU.py b/virtinst/CPU.py
> index 092bc65..b3d451d 100644
> --- a/virtinst/CPU.py
> +++ b/virtinst/CPU.py
> @@ -187,15 +187,6 @@ class CPU(XMLBuilderDomain.XMLBuilderDomain):
>                              get_converter=lambda s, x: _int_or_none(x),
>                              xpath="./cpu/topology/@threads")
>  
> -    def clear_attrs(self):
> -        self.match = None
> -        self.mode = None
> -        self.vendor = None
> -        self.model = None
> -
> -        for feature in self.features:
> -            self.remove_feature(feature)
> -
>      def copy_host_cpu(self):
>          """
>          Enact the equivalent of qemu -cpu host, pulling all info
> diff --git a/virtinst/support.py b/virtinst/support.py
> index f998aff..614ae30 100644
> --- a/virtinst/support.py
> +++ b/virtinst/support.py
> @@ -45,7 +45,6 @@ SUPPORT_DOMAIN_JOB_INFO = 1005
>  SUPPORT_DOMAIN_MAXVCPUS_XML = 1006
>  SUPPORT_DOMAIN_CONSOLE_STREAM = 1007
>  SUPPORT_DOMAIN_SET_METADATA = 1008
> -SUPPORT_DOMAIN_CPU_HOST_MODEL = 1009
>  
>  # Flags for check_pool_support
>  SUPPORT_STORAGE_CREATEVOLFROM = 2000
> @@ -201,10 +200,6 @@ _support_dict = {
>          "version" : 9010,
>     },
>  
> -   SUPPORT_DOMAIN_CPU_HOST_MODEL : {
> -        "version" : 9010,
> -   },
> -
>  
>      # Pool checks
>      # This can't ever require a pool object for back compat reasons
> 




More information about the virt-tools-list mailing list