Re: interrupt latency while resuming.

From: Abhijeet Dharmapurikar
Date: Sat Jan 08 2011 - 14:09:51 EST


On 01/08/2011 09:13 AM, Russell King - ARM Linux wrote:
On Sat, Jan 08, 2011 at 08:58:57AM -0800, Abhijeet Dharmapurikar wrote:

I am trying to address an issue of not handling a wakeup interrupt quick
enough while resuming. It is an edge triggered interrupt with the
IRQ_WAKEUP flag set. The interrupt controller implements lazy disabling
of interrupts, IOW does not have a disable callback in the irq_chip.

So while going in to supend that interrupt is marked IRQ_DISABLED in
dpm_suspend_noirq().

On resume handle_edge_trigger is run right after
arch_suspend_enable_irqs(). It finds the interrupt marked IRQ_DISABLED
and it sets the IRQ_PENDING flag and does not call the handler.

As the resume path unrolls, non boot cpus are enabled,
dpm_resume_noirq() is run. At that time it finds the IRQ_PENDING flag is
set on this interrupt and the interrupt handler is run.

Another solution is to check whether we can run the handler before other
CPUs are online - it may mean we're breaking IRQ affinity, but any
non-boot affinity has already been broken by taking the other CPUs
offline.

Agree. I think we are breaking affinity anyways by not setting the interrupt targets to pre disable_nonboot_cpus().

We can say that for interrupts marked IRQF_LOW_SUSPEND_LATENCY we may not be honoring the affinity. They *will* run on the boot cpu, even if their affinity is set to others upon resume. Driver authors should excercise caution wrt to affinity for such interrupts.
For all the other interrupts we can restore the targets to pre disable_nonboot_cpu state. But this is a different problem.

Do you agree?

I will test the proposal of IRQF_LOW_SUSPEND_LATENCY and push out a patch soon.

--
Sent by an employee of the Qualcomm Innovation Center, Inc.
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/