diff --git a/qubes/tools/qmemmand.py b/qubes/tools/qmemmand.py index df61f172f..c3c8a7e2f 100644 --- a/qubes/tools/qmemmand.py +++ b/qubes/tools/qmemmand.py @@ -128,6 +128,12 @@ def domain_list_changed(self, refresh_only=False): self.watch_token_dict[i]) self.watch_token_dict.pop(i) system_state.del_domain(i) + + if not refresh_only: + try: + system_state.do_balance() + except: # pylint: disable=bare-except + self.log.exception('do_balance() failed') except: # pylint: disable=bare-except self.log.exception('Updating domain list failed') finally: @@ -135,13 +141,6 @@ def domain_list_changed(self, refresh_only=False): global_lock.release() self.log.debug('global_lock released') - if not refresh_only: - try: - system_state.do_balance() - except: # pylint: disable=bare-except - self.log.exception('do_balance() failed') - - def meminfo_changed(self, domain_id): self.log.debug('meminfo_changed(domain_id={!r})'.format(domain_id)) untrusted_meminfo_key = self.handle.read( diff --git a/qubes/vm/qubesvm.py b/qubes/vm/qubesvm.py index dd76c4a00..ab059a969 100644 --- a/qubes/vm/qubesvm.py +++ b/qubes/vm/qubesvm.py @@ -1761,10 +1761,12 @@ def request_memory(self, mem_required=None): try: mem_required_with_overhead = mem_required + MEM_OVERHEAD_BASE \ + self.vcpus * MEM_OVERHEAD_PER_VCPU - if self.use_memory_hotplug: - # extra overhead to account future hotplug memory - # 1 page per 1MB of RAM, see libxl__get_required_paging_memory() - mem_required_with_overhead += self.maxmem * 4096 + maxmem = self.maxmem if self.maxmem else self.memory + if self.virt_mode != "pv": + # extra overhead to account (possibly future hotplug) memory + # 2 pages per 1MB of RAM, see + # libxl__get_required_paging_memory() + mem_required_with_overhead += maxmem * 8192 got_memory = qmemman_client.request_memory( mem_required_with_overhead)