From mboxrd@z Thu Jan 1 00:00:00 1970 From: Boris Ostrovsky Subject: Re: [PATCH] x86/xen: resume timer irqs early Date: Fri, 08 Aug 2014 10:04:19 -0400 Message-ID: <53E4D8E3.3070805@oracle.com> References: <1407431785-21394-1-git-send-email-david.vrabel@citrix.com> <53E3B797.9060701@oracle.com> <53E4A93F.6030704@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii"; Format="flowed" Content-Transfer-Encoding: 7bit Return-path: Received: from mail6.bemta4.messagelabs.com ([85.158.143.247]) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1XFkmL-0000BH-Kz for xen-devel@lists.xenproject.org; Fri, 08 Aug 2014 14:04:21 +0000 In-Reply-To: <53E4A93F.6030704@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 , xen-devel@lists.xenproject.org List-Id: xen-devel@lists.xenproject.org On 08/08/2014 06:41 AM, David Vrabel wrote: > On 07/08/14 18:29, Boris Ostrovsky wrote: >> On 08/07/2014 01:16 PM, David Vrabel wrote: >>> If the timer irqs are resumed during device resume it is possible in >>> certain circumstances for the resume to hang early on, before device >>> interrupts are resumed. >>> >>> It is not entirely clear what is occuring the point of the hang but I >>> think a task necessary for the resume calls schedule_timeout(), >>> waiting for a timer interrupt (which never arrives). This failure may >>> require specific tasks to be running on the other VCPUs to trigger >>> (processes are not frozen during a suspend/resume if PREEMPT is >>> disabled). >>> >>> Add IRQF_EARLY_RESUME to the timer interrupts so they are resumed in >>> syscore_resume(). >>> >>> Also add IRQF_NO_SUSPEND as it is not necessary to suspend the timer >>> interrupts and IRQF_FORCE_RESUME was already set. >> >> IRQF_NO_SUSPEND is a component of IRQF_TIMER. > So it is. How about this instead? The change makes sense so Reviewed-by: Boris Ostrovsky but I am curious whether you actually were able to prove that it in fact fixes the hang (the description doesn't make it clear). -boris > > 8<---------------------------- > x86/xen: resume timer irqs early > > If the timer irqs are resumed during device resume it is possible in > certain circumstances for the resume to hang early on, before device > interrupts are resumed. > > It is not entirely clear what is occuring the point of the hang but I > think a task necessary for the resume calls schedule_timeout(), > waiting for a timer interrupt (which never arrives). This failure may > require specific tasks to be running on the other VCPUs to trigger > (processes are not frozen during a suspend/resume if PREEMPT is > disabled). > > Add IRQF_EARLY_RESUME to the timer interrupts so they are resumed in > syscore_resume(). > > Signed-off-by: David Vrabel > --- > arch/x86/xen/time.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/arch/x86/xen/time.c b/arch/x86/xen/time.c > index 7b78f88..5718b0b 100644 > --- a/arch/x86/xen/time.c > +++ b/arch/x86/xen/time.c > @@ -444,7 +444,7 @@ void xen_setup_timer(int cpu) > > irq = bind_virq_to_irqhandler(VIRQ_TIMER, cpu, xen_timer_interrupt, > IRQF_PERCPU|IRQF_NOBALANCING|IRQF_TIMER| > - IRQF_FORCE_RESUME, > + IRQF_FORCE_RESUME|IRQF_EARLY_RESUME, > name, NULL); > (void)xen_set_irq_priority(irq, XEN_IRQ_PRIORITY_MAX); >