|
@@ -95,15 +95,13 @@ static inline bool arch_irqs_disabled(void)
|
|
|
#define __hard_irq_disable() __mtmsrd(local_paca->kernel_msr, 1)
|
|
|
#endif
|
|
|
|
|
|
-static inline void hard_irq_disable(void)
|
|
|
-{
|
|
|
- __hard_irq_disable();
|
|
|
- get_paca()->soft_enabled = 0;
|
|
|
- get_paca()->irq_happened |= PACA_IRQ_HARD_DIS;
|
|
|
-}
|
|
|
-
|
|
|
-/* include/linux/interrupt.h needs hard_irq_disable to be a macro */
|
|
|
-#define hard_irq_disable hard_irq_disable
|
|
|
+#define hard_irq_disable() do { \
|
|
|
+ __hard_irq_disable(); \
|
|
|
+ if (local_paca->soft_enabled) \
|
|
|
+ trace_hardirqs_off(); \
|
|
|
+ get_paca()->soft_enabled = 0; \
|
|
|
+ get_paca()->irq_happened |= PACA_IRQ_HARD_DIS; \
|
|
|
+} while(0)
|
|
|
|
|
|
static inline bool lazy_irq_pending(void)
|
|
|
{
|