From mboxrd@z Thu Jan 1 00:00:00 1970 From: Julien Grall Subject: Re: Multiple issues with event channel on Xen on ARM Date: Wed, 05 Feb 2014 13:44:29 +0000 Message-ID: <52F2403D.7080006@linaro.org> References: <52F1753C.3010508@linaro.org> <52F2163C.1000202@citrix.com> <52F23DEE.7080601@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <52F23DEE.7080601@citrix.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: David Vrabel Cc: Stefano Stabellini , Ian Campbell , xen-devel List-Id: xen-devel@lists.xenproject.org On 02/05/2014 01:34 PM, David Vrabel wrote: Hello David, > I think the following patch should fix the 2-level problems. > > You can force the use of 2-level events by using the xen.fifo_events=0 > Linux command line option. Thanks for the patch, I'm now able to use 2-level events without issue for a guest. Now, I need to look at the fifo events when the domain is killed. > 8<------------------------------------------------- > xen/events: bind all new interdomain events to VCPU0 > > From: David Vrabel > > Commit fc087e10734a4d3e40693fc099461ec1270b3fff (xen/events: remove > unnecessary init_evtchn_cpu_bindings()) causes a regression. > > The kernel-side VCPU binding was not being correctly set for newly > allocated or bound interdomain events. In ARM guests where 2-level > events were used, this would result in no interdomain events being > handled because the local VCPU masks would all be clear. > > x86 guests would work because the irq affinity was set during irq > setup and this would set the correct kernel-side VCPU binding. > > Fix this by by properly initializing the kernel-side VCPU binding in > bind_evtchn_to_irq(). > > Reported-by: Julian Grall s/Julian/Julien/ > Signed-off-by: David Vrabel Tested-by: Julien Grall Regards, > --- > drivers/xen/events/events_base.c | 3 +++ > 1 files changed, 3 insertions(+), 0 deletions(-) > > diff --git a/drivers/xen/events/events_base.c b/drivers/xen/events/events_base.c > index 4672e00..5cc1f78 100644 > --- a/drivers/xen/events/events_base.c > +++ b/drivers/xen/events/events_base.c > @@ -862,6 +862,9 @@ int bind_evtchn_to_irq(unsigned int evtchn) > irq = ret; > goto out; > } > + > + /* Newly bound event channels start off on VCPU0. */ > + bind_evtchn_to_cpu(evtchn, 0); > } else { > struct irq_info *info = info_for_irq(irq); > WARN_ON(info == NULL || info->type != IRQT_EVTCHN); > -- Julien Grall