Thread (48 messages) 48 messages, 11 authors, 2015-03-11

[PATCH v2 5/6] watchdog: at91sam9: request the irq with IRQF_NO_SUSPEND

From: rafael@kernel.org (Rafael J. Wysocki)
Date: 2015-03-05 15:10:23
Also in: linux-pm, linux-rtc, linux-serial, linux-watchdog, lkml

On Thu, Mar 5, 2015 at 11:57 AM, Mark Rutland [off-list ref] wrote:
[...]
quoted
quoted
quoted
          err = request_irq(wdt->irq, wdt_interrupt,
-                           IRQF_SHARED | IRQF_IRQPOLL,
+                           IRQF_SHARED | IRQF_IRQPOLL |
+                           IRQF_NO_SUSPEND,
I'm a little confused by this. What happens if the watchdog fires when
we're actually in the suspended state (when IRQF_NO_SUSPEND interrupts
aren't guaranteed to be delivered).
Why wouldn't they be delivered?

If that's suspend-to-idle, we'll handle them normally.  If that's full suspend,
they may not be handled at the last stage (when we run on one CPU with interrupts
off), but that was the case before the wakeup interrupts rework already and I'd
expect it to be taken into account somehow in the existing code (or if it isn't
taken into account, we have a bug, but it is not related to this series).
There's no enable_irq_wake(wdt->irq), and I was under the impression this
is for full suspend.
enable_irq_wake() has no effect on IRQF_NO_SUSPEND interrupts, so if the
driver uses IRQF_NO_SUSPEND, it does not need to use enable_irq_wake()
in addition to that.

Drivers using IRQF_COND_SUSPEND generally should use enable_irq_wake() too
in case they end up in a situation without sharing a NO_SUSPEND interrupt, in
which case their interrupt handlers won't be called after suspend_device_irqs(),
so they need to rely on the core to do the wakeup.
I agree that if problematic, it's an existing bug. Given Boris's
comments in the other thread this may just a minor semantic issue w.r.t.
IRQF_NO_SUSPEND vs IRQF_COND_SUSPEND.
It depends on whether or not the watchdog's interrupt handler has to be
called immediately after receiving an interrupt (IRQF_NO_SUSPEND is
better then) or it can be deferred till the resume_device_irqs() time.

Rafael
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help