diff options
-rw-r--r-- | virtManager/object/domain.py | 35 | ||||
-rw-r--r-- | virtinst/domain/cpu.py | 14 | ||||
-rw-r--r-- | virtinst/domain/memorybacking.py | 3 |
3 files changed, 9 insertions, 43 deletions
diff --git a/virtManager/object/domain.py b/virtManager/object/domain.py index de9639b8..e1a02ba3 100644 --- a/virtManager/object/domain.py +++ b/virtManager/object/domain.py @@ -446,23 +446,17 @@ class vmmDomain(vmmLibvirtObject): Return a value for 'Enable shared memory' UI, and an error if the value is not editable """ + is_shared = False err = None + domcaps = self.get_domain_capabilities() - # If virtiofs support is reported via domcapabilities, It's seen as - # libvirt is new enough to allow setting shared memory access without - # hugepages or numa config. - if not self.get_domain_capabilities().supports_filesystem_virtiofs(): - is_shared = self.xmlobj.cpu.all_shared_memAccess_cells() - err = _("Libvirt may not be new enough to support shared memory") - + if self.xmlobj.cpu.cells: + err = _("Can not change shared memory setting when <numa> is configured.") + elif (not domcaps.supports_filesystem_virtiofs() or + not domcaps.supports_memorybacking_memfd()): + err = _("Libvirt may not be new enough to support memfd.") else: - is_shared = (self.xmlobj.memoryBacking.is_shared_access() or - self.xmlobj.cpu.all_shared_memAccess_cells()) - # The access mode can be overridden per numa node by memAccess, So - # we need to check whether it has 'private' memAccess in numa node. - if self.xmlobj.cpu.has_private_memAccess_cells(): - is_shared = False - err = _("memory access mode 'private' is found in numa node") + is_shared = self.xmlobj.memoryBacking.source_type == "memfd" return is_shared, err @@ -680,19 +674,11 @@ class vmmDomain(vmmLibvirtObject): def _edit_shared_mem(self, guest, mem_shared): source_type = _SENTINEL access_mode = _SENTINEL - memAccess = _SENTINEL if mem_shared: - if guest.cpu.has_private_memAccess_cells(): - memAccess = "shared" - if self.get_domain_capabilities().supports_memorybacking_memfd(): - source_type = "memfd" - else: - source_type = "file" + source_type = "memfd" access_mode = "shared" else: - if guest.cpu.all_shared_memAccess_cells(): - memAccess = None source_type = None access_mode = None @@ -700,9 +686,6 @@ class vmmDomain(vmmLibvirtObject): guest.memoryBacking.source_type = source_type if access_mode != _SENTINEL: guest.memoryBacking.access_mode = access_mode - if memAccess != _SENTINEL: - for cell in guest.cpu.cells: - cell.memAccess = memAccess def define_memory(self, memory=_SENTINEL, maxmem=_SENTINEL, mem_shared=_SENTINEL): diff --git a/virtinst/domain/cpu.py b/virtinst/domain/cpu.py index fc05c5d0..22a90d3a 100644 --- a/virtinst/domain/cpu.py +++ b/virtinst/domain/cpu.py @@ -412,20 +412,6 @@ class DomainCpu(XMLBuilder): return self.topology.set_defaults_from_vcpus(vcpus) - def has_private_memAccess_cells(self): - for cell in self.cells: - if cell.memAccess == "private": - return True - return False - - def all_shared_memAccess_cells(self): - if not self.cells: - return False - for cell in self.cells: - if cell.memAccess != "shared": - return False - return True - ################## # Default config # diff --git a/virtinst/domain/memorybacking.py b/virtinst/domain/memorybacking.py index 60e97da4..c883c57d 100644 --- a/virtinst/domain/memorybacking.py +++ b/virtinst/domain/memorybacking.py @@ -36,6 +36,3 @@ class DomainMemoryBacking(XMLBuilder): allocation_mode = XMLProperty("./allocation/@mode") pages = XMLChildProperty(_HugepagesPage, relative_xpath="./hugepages") - - def is_shared_access(self): - return self.access_mode == "shared" |