diff -r 9049b0b62e08 tools/python/xen/xend/XendDomain.py --- a/tools/python/xen/xend/XendDomain.py Fri Feb 29 10:30:28 2008 +0000 +++ b/tools/python/xen/xend/XendDomain.py Mon Mar 03 16:19:04 2008 +0900 @@ -1364,13 +1364,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 -r 9049b0b62e08 tools/python/xen/xend/XendDomainInfo.py --- a/tools/python/xen/xend/XendDomainInfo.py Fri Feb 29 10:30:28 2008 +0000 +++ b/tools/python/xen/xend/XendDomainInfo.py Mon Mar 03 16:07:18 2008 +0900 @@ -1394,6 +1394,12 @@ class XendDomainInfo: def setResume(self, isresume): self._resume = isresume + def getCpus(self): + return self.info['cpus'] + + def setCpus(self, cpumap): + self.info['cpus'] = cpumap + def getCap(self): return self.info['vcpus_params']['cap']