| From: Thomas Gleixner <tglx@linutronix.de> | 
 | Date: Tue, 21 Jul 2009 22:34:14 +0200 | 
 | Subject: rt: local_irq_* variants depending on RT/!RT | 
 |  | 
 | Add local_irq_*_(no)rt variant which are mainly used to break | 
 | interrupt disabled sections on PREEMPT_RT or to explicitely disable | 
 | interrupts on PREEMPT_RT. | 
 |  | 
 | Signed-off-by: Thomas Gleixner <tglx@linutronix.de> | 
 |  | 
 | --- | 
 |  include/linux/interrupt.h |    2 +- | 
 |  include/linux/irqflags.h  |   19 +++++++++++++++++++ | 
 |  2 files changed, 20 insertions(+), 1 deletion(-) | 
 |  | 
 | Index: linux-stable/include/linux/interrupt.h | 
 | =================================================================== | 
 | --- linux-stable.orig/include/linux/interrupt.h | 
 | +++ linux-stable/include/linux/interrupt.h | 
 | @@ -211,7 +211,7 @@ extern void devm_free_irq(struct device | 
 |  #ifdef CONFIG_LOCKDEP | 
 |  # define local_irq_enable_in_hardirq()	do { } while (0) | 
 |  #else | 
 | -# define local_irq_enable_in_hardirq()	local_irq_enable() | 
 | +# define local_irq_enable_in_hardirq()	local_irq_enable_nort() | 
 |  #endif | 
 |   | 
 |  extern void disable_irq_nosync(unsigned int irq); | 
 | Index: linux-stable/include/linux/irqflags.h | 
 | =================================================================== | 
 | --- linux-stable.orig/include/linux/irqflags.h | 
 | +++ linux-stable/include/linux/irqflags.h | 
 | @@ -147,4 +147,23 @@ | 
 |   | 
 |  #endif /* CONFIG_TRACE_IRQFLAGS_SUPPORT */ | 
 |   | 
 | +/* | 
 | + * local_irq* variants depending on RT/!RT | 
 | + */ | 
 | +#ifdef CONFIG_PREEMPT_RT_FULL | 
 | +# define local_irq_disable_nort()	do { } while (0) | 
 | +# define local_irq_enable_nort()	do { } while (0) | 
 | +# define local_irq_save_nort(flags)	do { local_save_flags(flags); } while (0) | 
 | +# define local_irq_restore_nort(flags)	do { (void)(flags); } while (0) | 
 | +# define local_irq_disable_rt()		local_irq_disable() | 
 | +# define local_irq_enable_rt()		local_irq_enable() | 
 | +#else | 
 | +# define local_irq_disable_nort()	local_irq_disable() | 
 | +# define local_irq_enable_nort()	local_irq_enable() | 
 | +# define local_irq_save_nort(flags)	local_irq_save(flags) | 
 | +# define local_irq_restore_nort(flags)	local_irq_restore(flags) | 
 | +# define local_irq_disable_rt()		do { } while (0) | 
 | +# define local_irq_enable_rt()		do { } while (0) | 
 | +#endif | 
 | + | 
 |  #endif |