From 8868900e193dfcd5a4517e68ca55467f17fb8464 Mon Sep 17 00:00:00 2001 From: Stefan Lankes Date: Fri, 8 Apr 2011 15:56:09 +0200 Subject: [PATCH] redesign of nested if flag handling => only clearing and setting of the IF flag --- arch/x86/include/asm/irqflags.h | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) 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