Stefano Stabellini
2009-Oct-14 15:24 UTC
[Xen-devel] [PATCH] destroy stubdoms synchronously
Hi all, this patch makes the destruction of stubdoms a synchronous event, therefore it is no longer possible to run out of memory when rebooting a guest because the stubdom of the old guest is always destroyed before the creation of the new guest. Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com> --- diff -r a5d1420fe4af stubdom/stubdom-dm --- a/stubdom/stubdom-dm Wed Oct 14 15:29:36 2009 +0100 +++ b/stubdom/stubdom-dm Wed Oct 14 16:15:09 2009 +0100 @@ -81,12 +81,8 @@ term() { kill %1 - ( - [ -n "$vncpid" ] && kill -9 $vncpid - rm ${stubdom_configdir}/$domname-dm - xm destroy $domname-dm - ) & - # We need to exit immediately so as to let xend do the commands above + [ -n "$vncpid" ] && kill -9 $vncpid + rm ${stubdom_configdir}/$domname-dm exit 0 } diff -r a5d1420fe4af tools/python/xen/xend/XendDomainInfo.py --- a/tools/python/xen/xend/XendDomainInfo.py Wed Oct 14 15:29:36 2009 +0100 +++ b/tools/python/xen/xend/XendDomainInfo.py Wed Oct 14 16:15:09 2009 +0100 @@ -855,12 +855,10 @@ dev_config = pci_convert_sxp_to_dict(dev_sxp) dev = dev_config[''devs''][0] - dom_list = xstransact.List(''/local/domain'') - for d in dom_list: - target = xstransact.Read(''/local/domain/'' + d + ''/target'') - if target is not None and int(target) is self.domid : - from xen.xend import XendDomain - XendDomain.instance().domain_lookup(int(d)).pci_device_configure(dev_sxp[:]) + stubdomid = self.getStubdomDomid() + if stubdomid is not None : + from xen.xend import XendDomain + XendDomain.instance().domain_lookup(stubdomid).pci_device_configure(dev_sxp[:]) # Do HVM specific processing if self.info.is_hvm(): @@ -1810,6 +1808,14 @@ def getDomid(self): return self.domid + def getStubdomDomid(self): + dom_list = xstransact.List(''/local/domain'') + for d in dom_list: + target = xstransact.Read(''/local/domain/'' + d + ''/target'') + if target is not None and int(target) is self.domid : + return int(d) + return None + def setName(self, name, to_store = True): self._checkName(name) self.info[''name_label''] = name diff -r a5d1420fe4af tools/python/xen/xend/image.py --- a/tools/python/xen/xend/image.py Wed Oct 14 15:29:36 2009 +0100 +++ b/tools/python/xen/xend/image.py Wed Oct 14 16:15:09 2009 +0100 @@ -591,7 +591,11 @@ return self.sentinel_lock.acquire() try: - if self.pid: + stubdomid = self.vm.getStubdomDomid() + if stubdomid is not None : + from xen.xend import XendDomain + XendDomain.instance().domain_destroy(stubdomid) + elif self.pid: try: os.kill(self.pid, signal.SIGHUP) except OSError, exn: _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel