diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2014-08-29 14:00:16 +0200 |
---|---|---|
committer | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2014-09-01 13:48:59 +0200 |
commit | 9ce7a25849e80cfb264f4995f832b932c1987e1a (patch) | |
tree | c7f7301049b93dda90c16b1e8b09e29cdb0bc189 /include/linux/interrupt.h | |
parent | b76f16748fa61801b1a1fd3ffb6f25ee228a35e0 (diff) | |
download | op-kernel-dev-9ce7a25849e80cfb264f4995f832b932c1987e1a.zip op-kernel-dev-9ce7a25849e80cfb264f4995f832b932c1987e1a.tar.gz |
genirq: Simplify wakeup mechanism
Currently we suspend wakeup interrupts by lazy disabling them and
check later whether the interrupt has fired, but that's not sufficient
for suspend to idle as there is no way to check that once we
transitioned into the CPU idle state.
So we change the mechanism in the following way:
1) Leave the wakeup interrupts enabled across suspend
2) Add a check to irq_may_run() which is called at the beginning of
each flow handler whether the interrupt is an armed wakeup source.
This check is basically free as it just extends the existing check
for IRQD_IRQ_INPROGRESS. So no new conditional in the hot path.
If the IRQD_WAKEUP_ARMED flag is set, then the interrupt is
disabled, marked as pending/suspended and the pm core is notified
about the wakeup event.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
[ rjw: syscore.c and put irq_pm_check_wakeup() into pm.c ]
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Diffstat (limited to 'include/linux/interrupt.h')
-rw-r--r-- | include/linux/interrupt.h | 5 |
1 files changed, 0 insertions, 5 deletions
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h index 698ad05..69517a2 100644 --- a/include/linux/interrupt.h +++ b/include/linux/interrupt.h @@ -193,11 +193,6 @@ extern void irq_wake_thread(unsigned int irq, void *dev_id); /* The following three functions are for the core kernel use only. */ extern void suspend_device_irqs(void); extern void resume_device_irqs(void); -#ifdef CONFIG_PM_SLEEP -extern int check_wakeup_irqs(void); -#else -static inline int check_wakeup_irqs(void) { return 0; } -#endif /** * struct irq_affinity_notify - context for notification of IRQ affinity changes |