[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] xend: fix setting vcpus > VCPUs_max
# HG changeset patch # User Keir Fraser <keir.fraser@xxxxxxxxxx> # Date 1224512244 -3600 # Node ID 6ca0656240518fd2e7b78fdcd909cca37da78875 # Parent 6eb23f7ece781a4013fb291217ca2e61756aadcb xend: fix setting vcpus > VCPUs_max >From reading xend code related to changing number of vcpus it appears setting the number of vcpus to a value greater than VCPUs_max is not allowed on a running domain. This restriction is not honored by setVCpuCount() in XendDomainInfo.py. Attached patch makes setVCpuCount() fail if vcpus > VCPUs_max and domain is running. Also, I think the changes should be reflected in managed config of running domain if in fact the domain is managed - so unconditionally call managed_config_save(). BTW, the original code is rather confusing. Essentially the same actions are taken regardless if self.info['VCPUs_max'] > vcpus, just the order of invocation is changed. But this doesn't seem to matter since self.info['VCPUs_live'] is not subsequently used. Signed-off-by: Jim Fehlig <jfehlig@xxxxxxxxxx> --- tools/python/xen/xend/XendDomainInfo.py | 23 +++++++++-------------- 1 files changed, 9 insertions(+), 14 deletions(-) diff -r 6eb23f7ece78 -r 6ca065624051 tools/python/xen/xend/XendDomainInfo.py --- a/tools/python/xen/xend/XendDomainInfo.py Mon Oct 20 15:15:19 2008 +0100 +++ b/tools/python/xen/xend/XendDomainInfo.py Mon Oct 20 15:17:24 2008 +0100 @@ -1506,23 +1506,18 @@ class XendDomainInfo: return self.info['VCPUs_max'] def setVCpuCount(self, vcpus): - if vcpus <= 0: - raise XendError('Invalid VCPUs') + def vcpus_valid(n): + if vcpus <= 0: + raise XendError('Zero or less VCPUs is invalid') + if self.domid >= 0 and vcpus > self.info['VCPUs_max']: + raise XendError('Cannot set vcpus greater than max vcpus on running domain') + vcpus_valid(vcpus) self.info['vcpu_avail'] = (1 << vcpus) - 1 if self.domid >= 0: self.storeVm('vcpu_avail', self.info['vcpu_avail']) - # update dom differently depending on whether we are adjusting - # vcpu number up or down, otherwise _vcpuDomDetails does not - # disable the vcpus - if self.info['VCPUs_max'] > vcpus: - # decreasing - self._writeDom(self._vcpuDomDetails()) - self.info['VCPUs_live'] = vcpus - else: - # same or increasing - self.info['VCPUs_live'] = vcpus - self._writeDom(self._vcpuDomDetails()) + self._writeDom(self._vcpuDomDetails()) + self.info['VCPUs_live'] = vcpus else: if self.info['VCPUs_max'] > vcpus: # decreasing @@ -1532,7 +1527,7 @@ class XendDomainInfo: for c in range(self.info['VCPUs_max'], vcpus): self.info['cpus'].append(list()) self.info['VCPUs_max'] = vcpus - xen.xend.XendDomain.instance().managed_config_save(self) + xen.xend.XendDomain.instance().managed_config_save(self) log.info("Set VCPU count on domain %s to %d", self.info['name_label'], vcpus) _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |