Message ID | 1368155384-11035-2-git-send-email-scottwood@freescale.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Thu, 2013-05-09 at 22:09 -0500, Scott Wood wrote: > 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: Scott Wood <scottwood@freescale.com> Oops ;-) I'll apply that to my tree and will send it to Linus right after -rc1, the rest will go the normal way for KVM patches. Cheers, Ben. > --- > arch/powerpc/include/asm/hw_irq.h | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > diff --git a/arch/powerpc/include/asm/hw_irq.h b/arch/powerpc/include/asm/hw_irq.h > index d615b28..ba713f1 100644 > --- a/arch/powerpc/include/asm/hw_irq.h > +++ b/arch/powerpc/include/asm/hw_irq.h > @@ -96,11 +96,12 @@ static inline bool arch_irqs_disabled(void) > #endif > > #define hard_irq_disable() do { \ > + u8 _was_enabled = get_paca()->soft_enabled; \ > __hard_irq_disable(); \ > - if (local_paca->soft_enabled) \ > - trace_hardirqs_off(); \ > get_paca()->soft_enabled = 0; \ > get_paca()->irq_happened |= PACA_IRQ_HARD_DIS; \ > + if (_was_enabled) \ > + trace_hardirqs_off(); \ > } while(0) > > static inline bool lazy_irq_pending(void) -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/arch/powerpc/include/asm/hw_irq.h b/arch/powerpc/include/asm/hw_irq.h index d615b28..ba713f1 100644 --- a/arch/powerpc/include/asm/hw_irq.h +++ b/arch/powerpc/include/asm/hw_irq.h @@ -96,11 +96,12 @@ static inline bool arch_irqs_disabled(void) #endif #define hard_irq_disable() do { \ + u8 _was_enabled = get_paca()->soft_enabled; \ __hard_irq_disable(); \ - if (local_paca->soft_enabled) \ - trace_hardirqs_off(); \ get_paca()->soft_enabled = 0; \ get_paca()->irq_happened |= PACA_IRQ_HARD_DIS; \ + if (_was_enabled) \ + trace_hardirqs_off(); \ } while(0) static inline bool lazy_irq_pending(void)
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: Scott Wood <scottwood@freescale.com> --- arch/powerpc/include/asm/hw_irq.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)