From mboxrd@z Thu Jan 1 00:00:00 1970 From: Michal Novotny Subject: [PATCH] Disallow setting maxmem to higher value than total physical memory size Date: Wed, 01 Sep 2010 14:31:46 +0200 Message-ID: <4C7E47B2.9010805@redhat.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------060909080503090104080601" Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: "'xen-devel@lists.xensource.com'" List-Id: xen-devel@lists.xenproject.org This is a multi-part message in MIME format. --------------060909080503090104080601 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Hi, this is the patch to disallow changing the maxmem value to higher value than total physical memory size since without this patch I was able to set dom0 maxmem to higher (invalid) value which is not correct. The check for total memory size using the xc.physinfo()['total_mem'] has been implemented in this patch and also the check for negative or zero value in setMemoryMaximum() has been added. When user enters an invalid value (no matter whether negative/zero or higher than total physical memory size) an error is returned saying that the memory size is invalid since no domain (no matter whether dom0 or domU) can have memory higher than maxmem and this prevents maxmem value to be higher than total physical memory installed on dom0. Also, on dom0/domU start the domain maxmem is being checked against whether it doesn't exceed the total physical memory configuration and if it does the value is being reduced the the physical memory size to disallow possibility to set to some higher value. You can check the patch by `xm list -l | grep maxmem` command which now returns the dom0 physical size on dom0 boot up and when you try to set maximum memory of both dom0 and domU you can't set this to higher value than dom0 total physical memory size. Since there's a sanity check on setting up new memory on domain you'll get "Error: memory_dynamic_max must be less than or equal to memory_static_max" when trying to set to higher value than domain's maxmem. Michal Signed-off-by: Michal Novotny -- Michal Novotny, RHCE Virtualization Team (xen userspace), Red Hat --------------060909080503090104080601 Content-Type: text/x-patch; name="xen-disallow-setting-max-mem-higher-than-total-phys-mem.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename*0="xen-disallow-setting-max-mem-higher-than-total-phys-mem.patc"; filename*1="h" diff --git a/tools/python/xen/xend/XendDomainInfo.py b/tools/python/xen/xend/XendDomainInfo.py index 4360ce2..b38b418 100644 --- a/tools/python/xen/xend/XendDomainInfo.py +++ b/tools/python/xen/xend/XendDomainInfo.py @@ -152,6 +152,11 @@ def recreate(info, priv): assert not info['dying'] + # Validate domain maxmem value not to be higher than dom0 physical memory + total_mem = int(xc.physinfo()['total_memory']) + if info['maxmem_kb'] > total_mem: + info['maxmem_kb'] = total_mem + xeninfo = XendConfig.XendConfig(dominfo = info) xeninfo['is_control_domain'] = priv xeninfo['is_a_template'] = False @@ -1490,6 +1495,13 @@ class XendDomainInfo: """Set the maximum memory limit of this domain @param limit: In MiB. """ + # Get total memory and convert to MiB + total_mem = int(xc.physinfo()['total_memory'] / 1024) + + if limit <= 0 or limit > total_mem: + raise XendError('Invalid memory size, only positive values ' + 'up to %s MiB are valid' % total_mem) + log.debug("Setting memory maximum of domain %s (%s) to %d MiB.", self.info['name_label'], str(self.domid), limit) --------------060909080503090104080601 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --------------060909080503090104080601--