aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/include
diff options
context:
space:
mode:
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>2013-05-06 17:04:02 -0400
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>2013-05-07 03:13:57 -0400
commit5737789c8340620d7b542d1d4e9b197de8eb2801 (patch)
treebd441fd76c05008b482c190d219978f9df8bb972 /arch/powerpc/include
parentd5dae721308ac5d5db03bf3aebaa15fcdcfb4862 (diff)
powerpc: Make hard_irq_disable() do the right thing vs. irq tracing
If hard_irq_disable() is called while interrupts are already soft-disabled (which is the most common case) all is already well. However you can (and in some cases want) to call it while everything is enabled (to make sure you don't get a lazy even, for example before entry into KVM guests) and in this case we need to inform the irq tracer that the irqs are going off. We have to change the inline into a macro to avoid an include circular dependency hell hole. Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Diffstat (limited to 'arch/powerpc/include')
-rw-r--r--arch/powerpc/include/asm/hw_irq.h16
1 files changed, 7 insertions, 9 deletions
diff --git a/arch/powerpc/include/asm/hw_irq.h b/arch/powerpc/include/asm/hw_irq.h
index e45c4947a772..d615b28dda82 100644
--- a/arch/powerpc/include/asm/hw_irq.h
+++ b/arch/powerpc/include/asm/hw_irq.h
@@ -95,15 +95,13 @@ static inline bool arch_irqs_disabled(void)
95#define __hard_irq_disable() __mtmsrd(local_paca->kernel_msr, 1) 95#define __hard_irq_disable() __mtmsrd(local_paca->kernel_msr, 1)
96#endif 96#endif
97 97
98static inline void hard_irq_disable(void) 98#define hard_irq_disable() do { \
99{ 99 __hard_irq_disable(); \
100 __hard_irq_disable(); 100 if (local_paca->soft_enabled) \
101 get_paca()->soft_enabled = 0; 101 trace_hardirqs_off(); \
102 get_paca()->irq_happened |= PACA_IRQ_HARD_DIS; 102 get_paca()->soft_enabled = 0; \
103} 103 get_paca()->irq_happened |= PACA_IRQ_HARD_DIS; \
104 104} while(0)
105/* include/linux/interrupt.h needs hard_irq_disable to be a macro */
106#define hard_irq_disable hard_irq_disable
107 105
108static inline bool lazy_irq_pending(void) 106static inline bool lazy_irq_pending(void)
109{ 107{