diff --git a/arch/x86/include/asm/irqflags.h b/arch/x86/include/asm/irqflags.h index 4a79d9ec..f8289b10 100644 --- a/arch/x86/include/asm/irqflags.h +++ b/arch/x86/include/asm/irqflags.h @@ -31,7 +31,9 @@ inline static void irq_disable(void) { inline static uint32_t irq_nested_disable(void) { uint32_t flags; asm volatile("pushf; cli; popl %0": "=r"(flags) : : "memory"); - return flags; + if (flags & (1 << 9)) + return 1; + return 0; } inline static void irq_enable(void) { @@ -39,7 +41,8 @@ inline static void irq_enable(void) { } inline static void irq_nested_enable(uint32_t flags) { - asm volatile("pushl %0; popf" : : "r"(flags) : "memory"); + if (flags) + irq_enable(); } #ifdef __cplusplus