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>

authored by Kevin Hilman and committed by Ingo Molnar b019e573 cdc6f27d

+7
+7
include/linux/irq.h
··· 339 __set_irq_handler(unsigned int irq, irq_flow_handler_t handle, int is_chained, 340 const char *name); 341 342 /* 343 * Set a highlevel flow handler for a given IRQ: 344 */
··· 339 __set_irq_handler(unsigned int irq, irq_flow_handler_t handle, int is_chained, 340 const char *name); 341 342 + /* caller has locked the irq_desc and both params are valid */ 343 + static inline void __set_irq_handler_unlocked(int irq, 344 + irq_flow_handler_t handler) 345 + { 346 + irq_desc[irq].handle_irq = handler; 347 + } 348 + 349 /* 350 * Set a highlevel flow handler for a given IRQ: 351 */