From: Keir Fraser Date: Wed, 5 Mar 2008 16:45:06 +0000 (+0000) Subject: Fix xm vcpu-pin for inactive managed domains X-Git-Tag: 3.1.4-rc1~14 X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=a6e0362c1e4d064d53835ecaab78ac3f209a232d;p=people%2Fvhanquez%2Fxen.git Fix xm vcpu-pin for inactive managed domains We cannot currently change cpu affinity definitions of inactive managed domains by xm vcpu-pin command. This patch enables changing cpu affinity definitions of inactive managed domains. However, we cannot change cpu affinity definitions to each vcpu because we cannot currently define cpu affinity definitions to each vcpu to domain configuration definitions. Therefore, we need to specify 'all' to VCPU argument of xm vcpu-pin command. Signed-off-by: Masaki Kanno xen-unstable changeset: 17173:a142ddb40b1c77d6b8726a2b57ac324ab74c6d06 xen-unstable date: Mon Mar 03 11:09:33 2008 +0000 --- diff --git a/tools/python/xen/xend/XendDomain.py b/tools/python/xen/xend/XendDomain.py index a1590527d..1fc4bf923 100644 --- a/tools/python/xen/xend/XendDomain.py +++ b/tools/python/xen/xend/XendDomain.py @@ -1300,13 +1300,23 @@ class XendDomain: # set the same cpumask for all vcpus rc = 0 - for v in vcpus: - try: - rc = xc.vcpu_setaffinity(dominfo.getDomid(), int(v), cpumap) - except Exception, ex: - log.exception(ex) - raise XendError("Cannot pin vcpu: %s to cpu: %s - %s" % \ - (v, cpumap, str(ex))) + if dominfo._stateGet() in (DOM_STATE_RUNNING, DOM_STATE_PAUSED): + for v in vcpus: + try: + rc = xc.vcpu_setaffinity(dominfo.getDomid(), int(v), cpumap) + except Exception, ex: + log.exception(ex) + raise XendError("Cannot pin vcpu: %s to cpu: %s - %s" % \ + (v, cpumap, str(ex))) + else: + # FIXME: if we could define cpu affinity definitions to + # each vcpu, reprogram the following processing. + if str(vcpu).lower() != "all": + raise XendError("Must specify 'all' to VCPU " + "for inactive managed domains") + dominfo.setCpus(cpumap) + self.managed_config_save(dominfo) + return rc def domain_cpu_sedf_set(self, domid, period, slice_, latency, extratime, diff --git a/tools/python/xen/xend/XendDomainInfo.py b/tools/python/xen/xend/XendDomainInfo.py index ec7d0ff7a..d0f683e58 100644 --- a/tools/python/xen/xend/XendDomainInfo.py +++ b/tools/python/xen/xend/XendDomainInfo.py @@ -1094,6 +1094,12 @@ class XendDomainInfo: def getResume(self): return str(self._resume) + def getCpus(self): + return self.info['cpus'] + + def setCpus(self, cpumap): + self.info['cpus'] = cpumap + def getCap(self): return self.info.get('cpu_cap', 0)