]> git.baikalelectronics.ru Git - kernel.git/commit
genirq: Simplify wakeup mechanism
authorThomas Gleixner <tglx@linutronix.de>
Fri, 29 Aug 2014 12:00:16 +0000 (14:00 +0200)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Mon, 1 Sep 2014 11:48:59 +0000 (13:48 +0200)
commitd841064b30a143b509673b2d40b1e860a1539466
treec7f7301049b93dda90c16b1e8b09e29cdb0bc189
parent1cb3945ce2e9b10318f7f2f5f0c78372664d7bdb
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>
drivers/base/syscore.c
include/linux/interrupt.h
kernel/irq/chip.c
kernel/irq/internals.h
kernel/irq/pm.c