From mboxrd@z Thu Jan 1 00:00:00 1970 From: Julien Grall Subject: Re: [PATCH] xen/arm: Make local_events_need_delivery working with idle VPCU Date: Tue, 5 May 2015 13:00:59 +0100 Message-ID: <5548B0FB.1000900@citrix.com> References: <1430145540-31032-1-git-send-email-julien.grall@citrix.com> <553E6489.30300@citrix.com> <1430826035.2660.52.camel@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from mail6.bemta14.messagelabs.com ([193.109.254.103]) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1Ypbgf-00005W-JO for xen-devel@lists.xenproject.org; Tue, 05 May 2015 12:10:57 +0000 In-Reply-To: <1430826035.2660.52.camel@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: Ian Campbell , Julien Grall Cc: Stefano Stabellini , Andrew Cooper , Riku Voipio , Tim Deegan , stefano.stabellini@citrix.com, Jan Beulich , xen-devel@lists.xenproject.org, Tamas K Lengyel List-Id: xen-devel@lists.xenproject.org Hi Ian, On 05/05/15 12:40, Ian Campbell wrote: > On Mon, 2015-04-27 at 17:32 +0100, Julien Grall wrote: >>>> diff --git a/xen/include/asm-arm/event.h b/xen/include/asm-arm/event.h >>>> index 5330dfe..0149d06 100644 >>>> --- a/xen/include/asm-arm/event.h >>>> +++ b/xen/include/asm-arm/event.h >>>> @@ -39,7 +39,12 @@ static inline int local_events_need_delivery_nomask(void) >>>> >>>> static inline int local_events_need_delivery(void) >>>> { >>>> - if ( !vcpu_event_delivery_is_enabled(current) ) >>>> + struct vcpu *v = current; >>>> + >>>> + if ( unlikely(is_idle_vcpu(v)) ) >>>> + return 0; >>>> + >>>> + if ( !vcpu_event_delivery_is_enabled(v) ) >>>> return 0; >>>> return local_events_need_delivery_nomask(); >>>> } >>> >>> Is it actually considered correct in Xen to call hypercall_preempt_check >>> and/or local_events_need_delivery on the idle vcpu? >> >> It seems that the x86 version of hypercall_preempt_check is able to cope >> with idle VCPU. > > AFAICT that's just a coincidence, since an idle vcpu won't ever have a > pending up call. > >> Although, I'm not sure if there is path where >> hypercall_preempt_check can be called on an idle VCPU (cc x86 >> maintainers for this purpose). >> >>> Shouldn't it be avoided and maybe a BUG_ON added here instead? >> >> This patch was the simple way to fix the bug. I have other ideas in mind >> which require some rework in apply_p2m_changes. >> >> I'll wait to see what x86 maintainers think. > > I'm inclined to just go with this patch for now, unless Stefano is > nacking it. This patch seem to turn into a workaround, would it be better to move check idle_check in apply_p2m_check? I will prepare a follow-up to avoid properly the call hypercall_preempt_check with idle_vcpu. > One question first: What aspect of local_events_need_delivery relies on > the vcpu not being an idle one? I suppose something is not initialised, > but what. Everything related to the vGIC is not initialized. It's used in local_event_need_delivery_nomask (see irq_to_pending and gic_events_need_devlivery). -- Julien Grall