[virt-tools-list] [PATCH v2 3/3] Add support for cpu host-passthrough mode
Hu Tao
hutao at cn.fujitsu.com
Thu Apr 11 05:45:47 UTC 2013
From: Ken ICHIKAWA <ichikawa.ken at jp.fujitsu.com>
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 at jp.fujitsu.com>
---
ui/vmm-details.ui | 21 +++++++++++++++++++--
virtManager/details.py | 23 ++++++++++++++++++++++-
virtManager/domain.py | 13 ++++++++++---
3 files changed, 51 insertions(+), 6 deletions(-)
diff --git a/ui/vmm-details.ui b/ui/vmm-details.ui
index ad0652d..b1a70b3 100644
--- a/ui/vmm-details.ui
+++ b/ui/vmm-details.ui
@@ -2314,6 +2314,23 @@ I/O:</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>
<property name="can_focus">False</property>
@@ -2428,7 +2445,7 @@ I/O:</property>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
- <property name="position">0</property>
+ <property name="position">1</property>
</packing>
</child>
<child>
@@ -2499,7 +2516,7 @@ I/O:</property>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
- <property name="position">1</property>
+ <property name="position">2</property>
</packing>
</child>
</object>
diff --git a/virtManager/details.py b/virtManager/details.py
index bd772ce..1e07047 100644
--- a/virtManager/details.py
+++ b/virtManager/details.py
@@ -424,6 +424,7 @@ class vmmDetails(vmmGObjectUI):
"on_cpu_threads_changed": lambda *x: self.enable_apply(x, 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,
@@ -1822,6 +1823,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()
@@ -2108,10 +2116,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()
@@ -2835,6 +2847,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/virtManager/domain.py b/virtManager/domain.py
index 4222553..b47feac 100644
--- a/virtManager/domain.py
+++ b/virtManager/domain.py
@@ -458,7 +458,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()
@@ -467,8 +468,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
--
1.8.1.4
More information about the virt-tools-list
mailing list