linux-stable-rt/kernel/irq
David Brownell 15a647eba9 [PATCH] genirq: {en,dis}able_irq_wake() need refcounting too
IRQs need refcounting and a state flag to track whether the the IRQ should
be enabled or disabled as a "normal IRQ" source after a series of calls to
{en,dis}able_irq().  For shared IRQs, the IRQ must be enabled so long as at
least one driver needs it active.

Likewise, IRQs need the same support to track whether the IRQ should be
enabled or disabled as a "wakeup event" source after a series of calls to
{en,dis}able_irq_wake().  For shared IRQs, the IRQ must be enabled as a
wakeup source during sleep so long as at least one driver needs it.  But
right now they _don't have_ that refcounting ...  which means sharing a
wakeup-capable IRQ can't work correctly in some configurations.

This patch adds the refcount and flag mechanisms to set_irq_wake() -- which
is what {en,dis}able_irq_wake() call -- and minimal documentation of what
the irq wake mechanism does.

Drivers relying on the older (broken) "toggle" semantics will trigger a
warning; that'll be a handful of drivers on ARM systems.

Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Ingo Molnar <mingo@elte.hu>
Acked-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Russell King <rmk@arm.linux.org.uk>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2006-07-31 13:28:36 -07:00
..
Makefile [PATCH] genirq: add irq-chip support 2006-06-29 10:26:24 -07:00
autoprobe.c [PATCH] genirq: add handle_bad_irq() 2006-06-29 10:26:24 -07:00
chip.c [PATCH] genirq: Allow fasteoi handler to retrigger disabled interrupts 2006-07-03 19:54:59 +10:00
handle.c [PATCH] lockdep: annotate enable_in_hardirq() 2006-07-03 15:27:09 -07:00
internals.h [PATCH] genirq: more verbose debugging on unexpected IRQ vectors 2006-06-29 10:26:25 -07:00
manage.c [PATCH] genirq: {en,dis}able_irq_wake() need refcounting too 2006-07-31 13:28:36 -07:00
migration.c [PATCH] genirq: cleanup: merge pending_irq_cpumask[] into irq_desc[] 2006-06-29 10:26:22 -07:00
proc.c [PATCH] genirq: cleanup: no_irq_type -> no_irq_chip rename 2006-06-29 10:26:25 -07:00
resend.c [PATCH] genirq: core 2006-06-29 10:26:24 -07:00
spurious.c [PATCH] irq-flags: generic irq: Use the new IRQF_ constants 2006-07-02 13:58:49 -07:00