From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: [PATCH] xend: disallow multiple destroy() call Date: Tue, 19 Mar 2013 13:41:47 -0400 Message-ID: <20130319174147.GA20048@phenom.dumpdata.com> References: <510F14CF.6050801@oracle.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Content-Disposition: inline In-Reply-To: <510F14CF.6050801@oracle.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Joe Jin Cc: Ian Campbell , xen-devel List-Id: xen-devel@lists.xenproject.org On Mon, Feb 04, 2013 at 09:54:23AM +0800, Joe Jin wrote: > Current Xend allowing multiple call destroy() for same domain, this lead > multiple hard resets(FLR) for pci pass-through, and some controller might > failed. > > In our test, we pass through 2 LSI HAB controllers to the PVHVM guest, after > guest brought up, call xm-destroy twice, the adapters's BIOS will hung, and > we had to reboot the server to recovery it. > > Signed-off-by: Joe Jin > Cc: Konrad Rzeszutek Wilk Reviewed-by: Konrad Rzeszutek Wilk The other bugs (the kernel ones) are a nice find and should also be fixed - but I think with the upstream kernel they have been mostly fixed. > Cc: Ian Campbell > --- > tools/python/xen/xend/XendDomainInfo.py | 11 +++++++++++ > 1 file changed, 11 insertions(+) > > diff --git a/tools/python/xen/xend/XendDomainInfo.py b/tools/python/xen/xend/XendDomainInfo.py > index e9d3e7e..658c3b6 100644 > --- a/tools/python/xen/xend/XendDomainInfo.py > +++ b/tools/python/xen/xend/XendDomainInfo.py > @@ -367,6 +367,8 @@ class XendDomainInfo: > @type refresh_shutdown_lock: threading.Condition > @ivar _deviceControllers: device controller cache for this domain > @type _deviceControllers: dict 'string' to DevControllers > + @ivar destroying: Is this domain destroying > + @type destroying: bool > """ > > def __init__(self, info, domid = None, dompath = None, augment = False, > @@ -455,6 +457,8 @@ class XendDomainInfo: > self._checkName(self.info['name_label']) > > self.metrics = XendVMMetrics(uuid.createString(), self) > + > + self.destroying = False > > > # > @@ -3073,6 +3077,12 @@ class XendDomainInfo: > > if self.domid is None: > return > + > + if self.destroying == False: > + self.destroying = True > + else: > + raise VmError("Domain (domid=%s) is destroying, please wait!", str(self.domid)) > + > from xen.xend import XendDomain > log.debug("XendDomainInfo.destroy: domid=%s", str(self.domid)) > > @@ -3088,6 +3098,7 @@ class XendDomainInfo: > self.info[state] = 0 > self._stateSet(DOM_STATE_HALTED) > except: > + self.destroying = False > log.exception("XendDomainInfo.destroy: domain destruction failed.") > > XendDomain.instance().remove_domain(self) > -- > 1.8.1 > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xen.org > http://lists.xen.org/xen-devel >