xtensa: fix arch_irqs_disabled_flags implementation
authorMax Filippov <jcmvbkbc@gmail.com>
Sun, 31 Mar 2013 02:34:10 +0000 (06:34 +0400)
committerChris Zankel <chris@zankel.net>
Thu, 9 May 2013 08:07:11 +0000 (01:07 -0700)
IRQs are disabled when PS.EXCM is set or PS.INTLEVEL is equal to or
higher than LOCKLEVEL.

Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
Signed-off-by: Chris Zankel <chris@zankel.net>
arch/xtensa/include/asm/irqflags.h

index f865b1c1eae497fefdba3cccf90ac07d218e9d06..ea36674c6ec5d9828e757112e9caa13b785bf72e 100644 (file)
@@ -47,7 +47,10 @@ static inline void arch_local_irq_restore(unsigned long flags)
 
 static inline bool arch_irqs_disabled_flags(unsigned long flags)
 {
-       return (flags & 0xf) != 0;
+#if XCHAL_EXCM_LEVEL < LOCKLEVEL || (1 << PS_EXCM_BIT) < LOCKLEVEL
+#error "XCHAL_EXCM_LEVEL and 1<<PS_EXCM_BIT must be no less than LOCKLEVEL"
+#endif
+       return (flags & (PS_INTLEVEL_MASK | (1 << PS_EXCM_BIT))) >= LOCKLEVEL;
 }
 
 static inline bool arch_irqs_disabled(void)