Merge tag 'v3.10.89' into update
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / include / linux / irqflags.h
index d176d658fe25dd6b09b3d03936a4b60ce324367c..2a86c8a0aef694a161090a35b934ad9d437048d0 100644 (file)
 # define INIT_TRACE_IRQFLAGS
 #endif
 
+#ifdef CONFIG_PREEMPT_MONITOR
+  extern void MT_trace_softirqs_on(unsigned long ip);
+  extern void MT_trace_softirqs_off(unsigned long ip);
+  extern void MT_trace_hardirqs_on(void);
+  extern void MT_trace_hardirqs_off(void);
+#endif
 #if defined(CONFIG_IRQSOFF_TRACER) || \
        defined(CONFIG_PREEMPT_TRACER)
  extern void stop_critical_timings(void);
  * if !TRACE_IRQFLAGS.
  */
 #ifdef CONFIG_TRACE_IRQFLAGS_SUPPORT
+#ifdef CONFIG_PREEMPT_MONITOR
+#define local_irq_enable() \
+    do { MT_trace_hardirqs_on();trace_hardirqs_on(); raw_local_irq_enable(); } while (0)
+#define local_irq_disable() \
+    do { raw_local_irq_disable();trace_hardirqs_off(); MT_trace_hardirqs_off(); } while (0)
+#define local_irq_save(flags)               \
+    do {                        \
+        typecheck(unsigned long, flags);    \
+        if (irqs_disabled()) {  \
+            raw_local_irq_save(flags);      \
+            trace_hardirqs_off();       \
+        } else {                \
+            raw_local_irq_save(flags);      \
+            trace_hardirqs_off();       \
+            MT_trace_hardirqs_off();            \
+        } \
+    } while (0)
+
+
+#define local_irq_restore(flags)            \
+    do {                        \
+        typecheck(unsigned long, flags);    \
+        if (raw_irqs_disabled_flags(flags)) {   \
+            raw_local_irq_restore(flags);   \
+            trace_hardirqs_off();       \
+        } else {                \
+            MT_trace_hardirqs_on();     \
+            trace_hardirqs_on();        \
+            raw_local_irq_restore(flags);   \
+        }                   \
+    } while (0)
+#else /* !CONFIG_PREEMPT_MONITOR*/
 #define local_irq_enable() \
        do { trace_hardirqs_on(); raw_local_irq_enable(); } while (0)
 #define local_irq_disable() \
                        raw_local_irq_restore(flags);   \
                }                                       \
        } while (0)
+#endif /* !CONFIG_PREEMPT_MONITOR*/
 #define local_save_flags(flags)                                \
        do {                                            \
                raw_local_save_flags(flags);            \