From: Ken ICHIKAWA <ichikawa.ken@xxxxxxxxxxxxxx> We couldn't use host-passthrough mode for virtual cpu from virt-manager so far. This patch enables virt-manager to configure host-passthrough mode. Signed-off-by: Ken ICHIKAWA <ichikawa.ken@xxxxxxxxxxxxxx> Signed-off-by: Hu Tao <hutao@xxxxxxxxxxxxxx> --- src/virtManager/details.py | 23 ++++++++++++++++++++++- src/virtManager/domain.py | 13 ++++++++++--- src/vmm-details.ui | 21 +++++++++++++++++++-- 3 files changed, 51 insertions(+), 6 deletions(-) diff --git a/src/virtManager/details.py b/src/virtManager/details.py index 2e3c8a3..02b4d62 100644 --- a/src/virtManager/details.py +++ b/src/virtManager/details.py @@ -422,6 +422,7 @@ class vmmDetails(vmmGObjectUI): "on_cpu_threads_changed": (self.enable_apply, EDIT_TOPOLOGY), "on_cpu_copy_host_clicked": self.config_cpu_copy_host, "on_cpu_topology_enable_toggled": self.config_cpu_topology_enable, + "on_host_passthrough_enable_toggled": self.config_host_passthrough_enable, "on_config_memory_changed": self.config_memory_changed, "on_config_maxmem_changed": self.config_maxmem_changed, @@ -1833,6 +1834,13 @@ class vmmDetails(vmmGObjectUI): self.widget("cpu-topology-table").set_sensitive(do_enable) self.enable_apply(EDIT_TOPOLOGY) + def config_host_passthrough_enable(self, src): + do_enable = not src.get_active() + self.widget("cpu-copy-host").set_sensitive(do_enable) + self.widget("cpu-model").set_sensitive(do_enable) + self.widget("cpu-features").set_sensitive(do_enable) + self.enable_apply(EDIT_CPU) + # Boot device / Autostart def config_bootdev_selected(self, ignore): boot_row = self.get_boot_selection() @@ -2118,10 +2126,14 @@ class vmmDetails(vmmGObjectUI): add_hotplug(self.config_vcpu_pin_cpuset, cpuset) if self.editted(EDIT_CPU): + host_passthrough = self.widget("host-passthrough-enable").get_active() + mode = "custom" + if host_passthrough: + mode = "host-passthrough" model, vendor = self.get_config_cpu_model() features = self.get_config_cpu_features() add_define(self.vm.define_cpu, - model, vendor, self._cpu_copy_host, features) + mode, model, vendor, self._cpu_copy_host, features) if self.editted(EDIT_TOPOLOGY): do_top = self.widget("cpu-topology-enable").get_active() @@ -2845,6 +2857,15 @@ class vmmDetails(vmmGObjectUI): self.widget("cpu-cores").set_value(cores) self.widget("cpu-threads").set_value(threads) + host_passthrough = False + if cpu.mode == "host-passthrough": + host_passthrough = True + + self.widget("host-passthrough-enable").set_active(host_passthrough) + self.widget("cpu-copy-host").set_sensitive(not host_passthrough) + self.widget("cpu-model").set_sensitive(not host_passthrough) + self.widget("cpu-features").set_sensitive(not host_passthrough) + def get_feature_policy(name): for f in cpu.features: if f.name == name: diff --git a/src/virtManager/domain.py b/src/virtManager/domain.py index 385fdff..99b98f2 100644 --- a/src/virtManager/domain.py +++ b/src/virtManager/domain.py @@ -449,7 +449,8 @@ class vmmDomain(vmmLibvirtObject): cpu.cores = cores cpu.threads = threads return self._redefine_guest(change) - def define_cpu(self, model, vendor, from_host, featurelist): + + def define_cpu(self, mode, model, vendor, from_host, featurelist): def change(guest): if from_host: guest.cpu.copy_host_cpu() @@ -458,8 +459,14 @@ class vmmDomain(vmmLibvirtObject): # caps value guest.cpu.vendor = vendor - guest.cpu.model = model or None - if guest.cpu.model is None: + guest.cpu.mode = mode + if mode == "custom": + guest.cpu.model = model or None + else: + guest.cpu.model = None + + if guest.cpu.model == None: + guest.cpu.vendor = None for f in guest.cpu.features: guest.cpu.remove_feature(f) return diff --git a/src/vmm-details.ui b/src/vmm-details.ui index f3004af..ed841ad 100644 --- a/src/vmm-details.ui +++ b/src/vmm-details.ui @@ -2419,6 +2419,23 @@ I/O:</property> <property name="visible">True</property> <property name="can_focus">False</property> <property name="spacing">6</property> + <child> + <object class="GtkCheckButton" id="host-passthrough-enable"> + <property name="label" translatable="yes">Use host-passthrough mode</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="use_action_appearance">False</property> + <property name="active">True</property> + <property name="draw_indicator">True</property> + <signal name="toggled" handler="on_host_passthrough_enable_toggled" swapped="no"/> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> <child> <object class="GtkTable" id="table15"> <property name="visible">True</property> @@ -2522,7 +2539,7 @@ I/O:</property> <packing> <property name="expand">True</property> <property name="fill">True</property> - <property name="position">0</property> + <property name="position">1</property> </packing> </child> <child> @@ -2594,7 +2611,7 @@ I/O:</property> <packing> <property name="expand">True</property> <property name="fill">True</property> - <property name="position">1</property> + <property name="position">2</property> </packing> </child> </object> -- 1.8.1.4 _______________________________________________ virt-tools-list mailing list virt-tools-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/virt-tools-list