[virt-tools-list] [virt-manager 6/8] details: Automatically set mem access to shared for virtiofs

Lin Ma lma at suse.com
Wed Jun 30 12:11:04 UTC 2021


The virtio-fs device needs shared access of memory for talking to its
vhost-user backend. We need to set memory access mode manually in the
XML editor.

After the patch, The memory access mode will be set automatically in
memory backing element or in numa node element.

Signed-off-by: Lin Ma <lma at suse.com>
---
 virtManager/details/details.py | 16 ++++++++++++++++
 virtManager/object/domain.py   | 15 ++++++++++++++-
 2 files changed, 30 insertions(+), 1 deletion(-)

diff --git a/virtManager/details/details.py b/virtManager/details/details.py
index 27f2ecb7..6c194d2f 100644
--- a/virtManager/details/details.py
+++ b/virtManager/details/details.py
@@ -12,6 +12,7 @@ import libvirt
 
 import virtinst
 from virtinst import log
+from virtinst import DeviceFilesystem
 
 from ..lib import uiutil
 from ..addhardware import vmmAddHardware
@@ -1640,6 +1641,21 @@ class vmmDetails(vmmGObjectUI):
         kwargs = {}
 
         if self._edited(EDIT_FS):
+            fsdriver = uiutil.get_list_selection(
+                self.fsDetails.widget("fs-driver-combo"))
+            if fsdriver == DeviceFilesystem.DRIVER_VIRTIOFS:
+                guest = self.vm.xmlobj
+                if guest.cpu.has_private_memAccess_cells():
+                    embeded_kwargs = {}
+                    embeded_kwargs["memAccess"] = "shared"
+                    self._change_config(
+                            self.vm.define_cpu, embeded_kwargs)
+                elif (not guest.cpu.all_shared_memAccess_cells() and
+                      not guest.memoryBacking.is_access_shared()):
+                    embeded_kwargs = {}
+                    embeded_kwargs["access_mode"] = "shared"
+                    self._change_config(
+                            self.vm.define_memorybacking, embeded_kwargs)
             kwargs["newdev"] = self.fsDetails.update_device(devobj)
 
         return self._change_config(
diff --git a/virtManager/object/domain.py b/virtManager/object/domain.py
index 6c734df9..6e451ba0 100644
--- a/virtManager/object/domain.py
+++ b/virtManager/object/domain.py
@@ -624,7 +624,8 @@ class vmmDomain(vmmLibvirtObject):
 
     def define_cpu(self, vcpus=_SENTINEL,
             model=_SENTINEL, secure=_SENTINEL, sockets=_SENTINEL,
-            cores=_SENTINEL, threads=_SENTINEL, clear_topology=_SENTINEL):
+            cores=_SENTINEL, threads=_SENTINEL, memAccess=_SENTINEL,
+            clear_topology=_SENTINEL):
         guest = self._make_xmlobj_to_define()
 
         if vcpus != _SENTINEL:
@@ -644,6 +645,11 @@ class vmmDomain(vmmLibvirtObject):
                 guest.cpu.set_special_mode(guest, model)
             else:
                 guest.cpu.set_model(guest, model)
+
+        if memAccess != _SENTINEL:
+            for cell in guest.cpu.cells:
+                cell.memAccess = memAccess
+
         self._redefine_xmlobj(guest)
 
     def define_memory(self, memory=_SENTINEL, maxmem=_SENTINEL):
@@ -655,6 +661,13 @@ class vmmDomain(vmmLibvirtObject):
             guest.memory = int(maxmem)
         self._redefine_xmlobj(guest)
 
+    def define_memorybacking(self, access_mode=_SENTINEL):
+        guest = self._make_xmlobj_to_define()
+
+        if access_mode != _SENTINEL:
+            guest.memoryBacking.access_mode = access_mode
+        self._redefine_xmlobj(guest)
+
     def define_overview(self, machine=_SENTINEL, description=_SENTINEL,
             title=_SENTINEL, loader=_SENTINEL,
             nvram=_SENTINEL):
-- 
2.26.2





More information about the virt-tools-list mailing list