diff options
author | Kevin Hilman <khilman@mvista.com> | 2007-12-18 18:05:58 +0100 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2007-12-18 18:05:58 +0100 |
commit | b019e57321f3e006c0ec7a54f13efc377bcb6451 (patch) | |
tree | 9ed37924d702981a04f86db0300d9c3aff709ca9 | |
parent | cdc6f27d9e3c2f7ca1a3e19c6eabb1ad6a2add5d (diff) | |
download | linux-b019e57321f3e006c0ec7a54f13efc377bcb6451.tar.bz2 |
genirq: add unlocked version of set_irq_handler()
Add unlocked version for use by irq_chip.set_type handlers which may
wish to change handler to level or edge handler when IRQ type is
changed.
The normal set_irq_handler() call cannot be used because it tries to
take irq_desc.lock which is already held when the irq_chip.set_type
hook is called.
Signed-off-by: Kevin Hilman <khilman@mvista.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-rw-r--r-- | include/linux/irq.h | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/include/linux/irq.h b/include/linux/irq.h index efc88538b2ba..4669be080617 100644 --- a/include/linux/irq.h +++ b/include/linux/irq.h @@ -339,6 +339,13 @@ extern void __set_irq_handler(unsigned int irq, irq_flow_handler_t handle, int is_chained, const char *name); +/* caller has locked the irq_desc and both params are valid */ +static inline void __set_irq_handler_unlocked(int irq, + irq_flow_handler_t handler) +{ + irq_desc[irq].handle_irq = handler; +} + /* * Set a highlevel flow handler for a given IRQ: */ |