linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Rafael J. Wysocki" <rjw@rjwysocki.net>
To: Thomas Gleixner <tglx@linutronix.de>
Cc: Peter Zijlstra <peterz@infradead.org>,
	Linux PM list <linux-pm@vger.kernel.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Linux PCI <linux-pci@vger.kernel.org>,
	Dmitry Torokhov <dtor@google.com>,
	Aubrey Li <aubrey.li@intel.com>
Subject: [PATCH 0/5 v3] irq / PM: Suspend-to-idle wakeup interrupts
Date: Wed, 27 Aug 2014 01:46:23 +0200	[thread overview]
Message-ID: <5320472.coYotHR1d0@vostro.rjw.lan> (raw)
In-Reply-To: <26580319.OZP7jvJnA9@vostro.rjw.lan>

Hi,

On Monday, August 11, 2014 03:56:46 PM Rafael J. Wysocki wrote:
> Hi,
> 
> I thought I'd just refresh the previous patchset, but in the meantime I found
> a way to avoid adding overhead to note_interrupt(), so I decided to change the
> approach.
> 
> Patch [2/6] fixes the problem with IRQF_NO_SUSPEND and shared interrupts.  The
> idea is to use wrapper handlers for all irqactions of the shared IRQs where at
> least one of them has IRQF_NO_SUSPEND set.  Since the wrapper handler is now
> installed for all irqactions in the given irq_desc, it can track the return
> codes from the original handlers and "suspend" the IRQ if the interrupt is going
> to be unhandled eventually.  All described in the changelog.  This is independent
> of the handling of wakeup interrupts for suspend-to-idle.
> 
> Patch [3/6] makes IRQs configured for system wakeup with enable_irq_wake() work
> for suspend to idle.  It does that by using a (different) wrapper handler for
> all irqactions in the wakeup irq_descs and that wrapper handler takes care of
> all the ugly details.  Again, all described in the changelog.
> 
> Patches [1/6], [4-5/6] are unmodified and the last one addes documentation.

It has occured to me recently that trying to address two different issues at
once in one patchset may be more confusing than it has to be, so the following
series has one and only one purpose which is to make enable_irq_wake() interrupts
wake up from suspend-to-idle while avoiding the shared interrupts pain.

The way it works is that for each IRQD_WAKEUP_STATE IRQ (a) all of the interrupt
handlers are substituted for by a special "wakeup mode" handler and (b) the
IRQ is re-enabled right before entering the suspend-to-idle loop.  After a wakeup
interrupt all is restored to the previous state left by suspend_device_irqs().

The "wakeup mode" handler triggers a system wakeup, disables the IRQ and marks
it as "suspended" and "pending".

To me, all of this is relatively straightforward and the handling of
IRQF_NO_SUSPEND for shared interrupts, which is a separate problem, can be
addressed on top of it later (make no mistake, I still think that it should be
addressed).

The patches are as follows:

[1/5] Mechanism to wake up the system or abort suspend in progress automatically.
[2/5] Wakeup interrupts support for suspend-to-idle.
[3/5] Set IRQCHIP_SKIP_SET_WAKE for x86 IOAPIC IRQ chips.
[4/5] Make PCIe PME wake up from suspend to idle.
[5/5] Documentation.

Patches [1/5] and [3-4/5] have not been changed since I posted them previously
and patch [5/5] has been updated to reflect the focus on wakeup (I removed the
paragraph on IRQF_NO_SUSPEND vs shared interrupts from it).

All tested on MSI Wind.

Rafael


  parent reply	other threads:[~2014-08-26 23:37 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-08-11 13:56 [PATCH 0/6 v2] irq / PM: Shared IRQs vs IRQF_NO_SUSPEND and suspend-to-idle wakeup interrupts Rafael J. Wysocki
2014-08-11 13:58 ` [PATCH 1/6 v2] PM / sleep: Mechanism for aborting system suspends unconditionally Rafael J. Wysocki
2014-08-11 13:59 ` [PATCH 2/6 v2] irq / PM: Make IRQF_NO_SUSPEND work with shared interrupts Rafael J. Wysocki
2014-08-11 14:00 ` [PATCH 3/6 v2] irq / PM: Make wakeup interrupts work with suspend-to-idle Rafael J. Wysocki
2014-08-11 14:01 ` [PATCH 4/6 v2] x86 / PM: Set IRQCHIP_SKIP_SET_WAKE for IOAPIC IRQ chip objects Rafael J. Wysocki
2014-08-11 14:02 ` [PATCH 5/6 v2] PCI / PM: Make PCIe PME interrupts wake up from suspend-to-idle Rafael J. Wysocki
2014-08-11 14:03 ` [PATCH 6/6 v2] irq / PM: Document rules related to system suspend and interrupts Rafael J. Wysocki
2014-08-26 23:46 ` Rafael J. Wysocki [this message]
2014-08-26 23:47   ` [PATCH 1/5 v3] PM / sleep: Mechanism for aborting system suspends unconditionally Rafael J. Wysocki
2014-08-26 23:49   ` [PATCH 2/5 v3] irq / PM: Make wakeup interrupts work with suspend-to-idle Rafael J. Wysocki
2014-08-27 20:32     ` Thomas Gleixner
2014-08-27 22:51       ` Rafael J. Wysocki
2014-08-28  9:23         ` Thomas Gleixner
2014-08-29  1:51           ` Rafael J. Wysocki
2014-08-26 23:50   ` [PATCH 3/5 v3] x86 / PM: Set IRQCHIP_SKIP_SET_WAKE for IOAPIC IRQ chip objects Rafael J. Wysocki
2014-08-26 23:51   ` [PATCH 4/5 v3] PCI / PM: Make PCIe PME interrupts wake up from suspend-to-idle Rafael J. Wysocki
2014-08-26 23:52   ` [PATCH 5/5 v3] irq / PM: Document rules related to system suspend and interrupts Rafael J. Wysocki
2014-08-28 22:44   ` [PATCH 0/5 v3] irq / PM: Suspend-to-idle wakeup interrupts Thomas Gleixner
2014-08-29  0:54     ` Rafael J. Wysocki
2014-08-29  1:09       ` Thomas Gleixner
2014-09-01 14:18   ` [PATCH 00/13] genirq / PM: Wakeup interrupts handling rework (related to suspend-to-idle) Rafael J. Wysocki
2014-09-01 14:19     ` [PATCH 01/13] PM / sleep: Mechanism for aborting system suspends unconditionally Rafael J. Wysocki
2014-09-01 14:20     ` [PATCH 02/13] genirq: Move suspend/resume logic into irq/pm code Rafael J. Wysocki
2014-09-01 14:21     ` [PATCH 03/13] genirq: Add sanity checks for PM options on shared interrupt lines Rafael J. Wysocki
2014-09-01 14:22     ` [PATCH 04/13] genirq: Make use of pm misfeature accounting Rafael J. Wysocki
2014-09-01 14:22     ` [PATCH 05/13] genirq: Move MASK_ON_SUSPEND handling into suspend_device_irqs() Rafael J. Wysocki
2014-09-01 14:23     ` [PATCH 06/13] genirq: Avoid double loop on suspend Rafael J. Wysocki
2014-09-01 14:24     ` [PATCH 07/13] genirq: Distangle edge handler entry Rafael J. Wysocki
2014-09-01 14:24     ` [PATCH 08/13] genirq: Create helper for flow handler entry check Rafael J. Wysocki
2014-09-01 14:26     ` [PATCH 09/13] genirq: Mark wakeup sources as armed on suspend Rafael J. Wysocki
2014-09-01 14:27     ` [PATCH 10/13] genirq: Simplify wakeup mechanism Rafael J. Wysocki
2014-09-01 14:28     ` [PATCH 11/13] x86 / PM: Set IRQCHIP_SKIP_SET_WAKE for IOAPIC IRQ chip objects Rafael J. Wysocki
2014-09-01 14:28     ` [PATCH 12/13] PCI / PM: Make PCIe PME interrupts wake up from suspend-to-idle Rafael J. Wysocki
2014-09-01 14:29     ` [PATCH 13/13] PM / genirq: Document rules related to system suspend and interrupts 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=5320472.coYotHR1d0@vostro.rjw.lan \
    --to=rjw@rjwysocki.net \
    --cc=aubrey.li@intel.com \
    --cc=dtor@google.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=peterz@infradead.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).