From mboxrd@z Thu Jan 1 00:00:00 1970 From: Olaf Hering Subject: Re: how to prevent crashes in notify_via_xen_event_channel during shutdown/crash Date: Tue, 14 Sep 2010 23:40:39 +0200 Message-ID: <20100914214039.GA12522@aepfle.de> References: <20100907195207.GA1428@aepfle.de> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Return-path: Content-Disposition: inline In-Reply-To: <20100907195207.GA1428@aepfle.de> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: xen-devel@lists.xensource.com List-Id: xen-devel@lists.xenproject.org On Tue, Sep 07, Olaf Hering wrote: > > Hello, > > I'm seeing crashes with 4.0.1 in notify_via_xen_event_channel() after > evtchn_destroy() was already executed, the ASSERT triggers. > There are a few calls to notify_via_xen_event_channel(), only > hvm_send_assist_req() seems to check the domain->is_shutting_down flag. > xen-unstable is not much different in that area. > > How should a check for an already destroyed eventchannel look like? > Maybe like its done in free_xen_event_channel()? This patch fixes the crashes for me. --- xen-4.0.1-testing.orig/xen/common/event_channel.c +++ xen-4.0.1-testing/xen/common/event_channel.c @@ -994,6 +994,12 @@ void notify_via_xen_event_channel(struct spin_lock(&ld->event_lock); + if ( unlikely(ld->is_dying) ) + { + spin_unlock(&ld->event_lock); + return; + } + ASSERT(port_is_valid(ld, lport)); lchn = evtchn_from_port(ld, lport); ASSERT(lchn->consumer_is_xen);