arch/x86/include/asm/irqflags.h | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/arch/x86/include/asm/irqflags.h b/arch/x86/include/asm/irqflags.h index b77f5edb03b0..76c4ebfab0be 100644 --- a/arch/x86/include/asm/irqflags.h +++ b/arch/x86/include/asm/irqflags.h @@ -8,6 +8,16 @@ * Interrupt control: */ +static inline void native_irq_disable(void) +{ + asm volatile("cli": : :"memory"); +} + +static inline void native_irq_enable(void) +{ + asm volatile("sti": : :"memory"); +} + static inline unsigned long native_save_fl(void) { unsigned long flags; @@ -28,20 +38,8 @@ static inline unsigned long native_save_fl(void) static inline void native_restore_fl(unsigned long flags) { - asm volatile("push %0 ; popf" - : /* no output */ - :"g" (flags) - :"memory", "cc"); -} - -static inline void native_irq_disable(void) -{ - asm volatile("cli": : :"memory"); -} - -static inline void native_irq_enable(void) -{ - asm volatile("sti": : :"memory"); + if (flags & X86_EFLAGS_IF) + native_irq_enable(); } static inline void native_safe_halt(void)