Commit 4a3b8d0b authored by Scott Wood's avatar Scott Wood Committed by Benjamin Herrenschmidt

powerpc: hard_irq_disable(): Call trace_hardirqs_off after disabling

lockdep.c has this:
        /*
         * So we're supposed to get called after you mask local IRQs,
         * but for some reason the hardware doesn't quite think you did
         * a proper job.
         */
	if (DEBUG_LOCKS_WARN_ON(!irqs_disabled()))
		return;

Since irqs_disabled() is based on soft_enabled(), that (not just the
hard EE bit) needs to be 0 before we call trace_hardirqs_off.
Signed-off-by: default avatarScott Wood <scottwood@freescale.com>
parent 73ed148a
...@@ -96,11 +96,12 @@ static inline bool arch_irqs_disabled(void) ...@@ -96,11 +96,12 @@ static inline bool arch_irqs_disabled(void)
#endif #endif
#define hard_irq_disable() do { \ #define hard_irq_disable() do { \
u8 _was_enabled = get_paca()->soft_enabled; \
__hard_irq_disable(); \ __hard_irq_disable(); \
if (local_paca->soft_enabled) \
trace_hardirqs_off(); \
get_paca()->soft_enabled = 0; \ get_paca()->soft_enabled = 0; \
get_paca()->irq_happened |= PACA_IRQ_HARD_DIS; \ get_paca()->irq_happened |= PACA_IRQ_HARD_DIS; \
if (_was_enabled) \
trace_hardirqs_off(); \
} while(0) } while(0)
static inline bool lazy_irq_pending(void) static inline bool lazy_irq_pending(void)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment