All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Rafael J. Wysocki" <rjw@rjwysocki.net>
To: Thomas Gleixner <tglx@linutronix.de>
Cc: "Li, Aubrey" <aubrey.li@linux.intel.com>,
	Dmitry Torokhov <dmitry.torokhov@gmail.com>,
	"linux-input@vger.kernel.org" <linux-input@vger.kernel.org>,
	LKML <linux-kernel@vger.kernel.org>,
	One Thousand Gnomes <gnomes@lxorguk.ukuu.org.uk>,
	Linux PM list <linux-pm@vger.kernel.org>
Subject: [PATCH] PM / sleep / irq: Do not suspend wakeup interrupts
Date: Thu, 10 Jul 2014 23:37:54 +0200	[thread overview]
Message-ID: <4679574.kGUnqAuNl9@vostro.rjw.lan> (raw)
In-Reply-To: <1614271.1peg23gJZx@vostro.rjw.lan>

From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

If an IRQ has been configured for wakeup via enable_irq_wake(), the
driver who has done that must be prepared for receiving interrupts
after suspend_device_irqs() has returned, so there is no need to
"suspend" such IRQs.  Moreover, if drivers using enable_irq_wake()
actually want to receive interrupts after suspend_device_irqs() has
returned, they need to add IRQF_NO_SUSPEND to the IRQ flags while
requesting the IRQs, which shouldn't be necessary (it also goes a bit
too far, as IRQF_NO_SUSPEND causes the IRQ to be ignored by
suspend_device_irqs() all the time regardless of whether or not it
has been configured for signaling wakeup).

For the above reasons, make __disable_irq() ignore IRQ descriptors
with IRQD_WAKEUP_STATE set when its suspend argument is true which
effectively causes them to behave like IRQs with IRQF_NO_SUSPEND
set.

This also allows IRQs configured for wakeup via enable_irq_wake()
to work as wakeup interrupts for the "freeze" (suspend-to-idle)
sleep mode automatically just like for any other sleep states.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
---
 kernel/irq/manage.c |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Index: linux-pm/kernel/irq/manage.c
===================================================================
--- linux-pm.orig/kernel/irq/manage.c
+++ linux-pm/kernel/irq/manage.c
@@ -385,7 +385,8 @@ setup_affinity(unsigned int irq, struct
 void __disable_irq(struct irq_desc *desc, unsigned int irq, bool suspend)
 {
 	if (suspend) {
-		if (!desc->action || (desc->action->flags & IRQF_NO_SUSPEND))
+		if (!desc->action || (desc->action->flags & IRQF_NO_SUSPEND)
+		    || irqd_has_set(&desc->irq_data, IRQD_WAKEUP_STATE))
 			return;
 		desc->istate |= IRQS_SUSPENDED;
 	}


  reply	other threads:[~2014-07-10 21:19 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-06-19  0:51 [PATCH] GPIO button wth wakeup attribute is supposed to wake the system up Li, Aubrey
2014-06-19 10:40 ` One Thousand Gnomes
2014-06-23 23:35   ` Li, Aubrey
2014-07-08 20:52 ` Rafael J. Wysocki
2014-07-08 20:45   ` Dmitry Torokhov
2014-07-08 21:06     ` Rafael J. Wysocki
2014-07-08 21:12       ` Dmitry Torokhov
2014-07-08 21:47         ` Rafael J. Wysocki
2014-07-08 22:11           ` Dmitry Torokhov
2014-07-08 23:06             ` Rafael J. Wysocki
2014-07-09  0:15               ` Dmitry Torokhov
2014-07-09  0:59                 ` Rafael J. Wysocki
2014-07-09  0:54                   ` Dmitry Torokhov
2014-07-09 12:45                     ` Rafael J. Wysocki
2014-07-10  2:27                       ` Li, Aubrey
2014-07-10 11:27                         ` Rafael J. Wysocki
2014-07-10 21:37                           ` Rafael J. Wysocki [this message]
2014-07-15 11:01                             ` [tip:irq/core] PM / sleep / irq: Do not suspend wakeup interrupts tip-bot for Rafael J. Wysocki
2014-07-31  2:24                               ` Rafael J. Wysocki
2014-07-15 12:22                             ` [PATCH] " Alexander Stein
2014-07-15 12:50                               ` Rafael J. Wysocki
2014-07-15 12:36                                 ` Alexander Stein
2014-07-16  0:45                                   ` Rafael J. Wysocki

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4679574.kGUnqAuNl9@vostro.rjw.lan \
    --to=rjw@rjwysocki.net \
    --cc=aubrey.li@linux.intel.com \
    --cc=dmitry.torokhov@gmail.com \
    --cc=gnomes@lxorguk.ukuu.org.uk \
    --cc=linux-input@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=tglx@linutronix.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.