extern int rcu_cpu_stall_suppress;
 int rcu_jiffies_till_stall_check(void);
 
+#define rcu_ftrace_dump_stall_suppress() \
+do { \
+       if (!rcu_cpu_stall_suppress) \
+               rcu_cpu_stall_suppress = 3; \
+} while (0)
+
+#define rcu_ftrace_dump_stall_unsuppress() \
+do { \
+       if (rcu_cpu_stall_suppress == 3) \
+               rcu_cpu_stall_suppress = 0; \
+} while (0)
+
+#else /* #endif #ifdef CONFIG_RCU_STALL_COMMON */
+#define rcu_ftrace_dump_stall_suppress()
+#define rcu_ftrace_dump_stall_unsuppress()
 #endif /* #ifdef CONFIG_RCU_STALL_COMMON */
 
 /*
        if (!atomic_read(&___rfd_beenhere) && \
            !atomic_xchg(&___rfd_beenhere, 1)) { \
                tracing_off(); \
+               rcu_ftrace_dump_stall_suppress(); \
                ftrace_dump(oops_dump_mode); \
+               rcu_ftrace_dump_stall_unsuppress(); \
        } \
 } while (0)
 
 
 #endif
 
 int rcu_cpu_stall_suppress __read_mostly; /* 1 = suppress stall warnings. */
+EXPORT_SYMBOL_GPL(rcu_cpu_stall_suppress);
 static int rcu_cpu_stall_timeout __read_mostly = CONFIG_RCU_CPU_STALL_TIMEOUT;
 
 module_param(rcu_cpu_stall_suppress, int, 0644);