• David Brownell's avatar
    [PATCH] genirq: {en,dis}able_irq_wake() need refcounting too · 15a647eb
    David Brownell authored
    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: default avatarDavid Brownell <dbrownell@users.sourceforge.net>
    Acked-by: default avatarIngo Molnar <mingo@elte.hu>
    Acked-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Cc: Russell King <rmk@arm.linux.org.uk>
    Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    15a647eb
manage.c 11.9 KB