Loading include/linux/rcupdate.h +13 −0 Original line number Diff line number Diff line Loading @@ -1144,4 +1144,17 @@ static inline void rcu_sysidle_force_exit(void) #endif /* #else #ifdef CONFIG_NO_HZ_FULL_SYSIDLE */ /* * Dump the ftrace buffer, but only one time per callsite per boot. */ #define rcu_ftrace_dump(oops_dump_mode) \ do { \ static atomic_t ___rfd_beenhere = ATOMIC_INIT(0); \ \ if (!atomic_read(&___rfd_beenhere) && \ !atomic_xchg(&___rfd_beenhere, 1)) \ ftrace_dump(oops_dump_mode); \ } while (0) #endif /* __LINUX_RCUPDATE_H */ kernel/rcu/rcutorture.c +3 −14 Original line number Diff line number Diff line Loading @@ -1082,17 +1082,6 @@ rcu_torture_fakewriter(void *arg) return 0; } static void rcutorture_trace_dump(void) { static atomic_t beenhere = ATOMIC_INIT(0); if (atomic_read(&beenhere)) return; if (atomic_xchg(&beenhere, 1) != 0) return; ftrace_dump(DUMP_ALL); } /* * RCU torture reader from timer handler. Dereferences rcu_torture_current, * incrementing the corresponding element of the pipeline array. The Loading Loading @@ -1142,7 +1131,7 @@ static void rcu_torture_timer(unsigned long unused) if (pipe_count > 1) { do_trace_rcu_torture_read(cur_ops->name, &p->rtort_rcu, ts, started, completed); rcutorture_trace_dump(); rcu_ftrace_dump(DUMP_ALL); } __this_cpu_inc(rcu_torture_count[pipe_count]); completed = completed - started; Loading Loading @@ -1215,7 +1204,7 @@ rcu_torture_reader(void *arg) if (pipe_count > 1) { do_trace_rcu_torture_read(cur_ops->name, &p->rtort_rcu, ts, started, completed); rcutorture_trace_dump(); rcu_ftrace_dump(DUMP_ALL); } __this_cpu_inc(rcu_torture_count[pipe_count]); completed = completed - started; Loading Loading @@ -1333,7 +1322,7 @@ rcu_torture_stats_print(void) rcu_torture_writer_state, gpnum, completed, flags); show_rcu_gp_kthreads(); rcutorture_trace_dump(); rcu_ftrace_dump(DUMP_ALL); } rtcv_snap = rcu_torture_current_version; } Loading kernel/rcu/tree.c +2 −2 Original line number Diff line number Diff line Loading @@ -637,7 +637,7 @@ static void rcu_eqs_enter_common(long long oldval, bool user) idle_task(smp_processor_id()); trace_rcu_dyntick(TPS("Error on entry: not idle task"), oldval, 0); ftrace_dump(DUMP_ORIG); rcu_ftrace_dump(DUMP_ORIG); WARN_ONCE(1, "Current pid: %d comm: %s / Idle pid: %d comm: %s", current->pid, current->comm, idle->pid, idle->comm); /* must be idle task! */ Loading Loading @@ -799,7 +799,7 @@ static void rcu_eqs_exit_common(long long oldval, int user) trace_rcu_dyntick(TPS("Error on exit: not idle task"), oldval, rdtp->dynticks_nesting); ftrace_dump(DUMP_ORIG); rcu_ftrace_dump(DUMP_ORIG); WARN_ONCE(1, "Current pid: %d comm: %s / Idle pid: %d comm: %s", current->pid, current->comm, idle->pid, idle->comm); /* must be idle task! */ Loading Loading
include/linux/rcupdate.h +13 −0 Original line number Diff line number Diff line Loading @@ -1144,4 +1144,17 @@ static inline void rcu_sysidle_force_exit(void) #endif /* #else #ifdef CONFIG_NO_HZ_FULL_SYSIDLE */ /* * Dump the ftrace buffer, but only one time per callsite per boot. */ #define rcu_ftrace_dump(oops_dump_mode) \ do { \ static atomic_t ___rfd_beenhere = ATOMIC_INIT(0); \ \ if (!atomic_read(&___rfd_beenhere) && \ !atomic_xchg(&___rfd_beenhere, 1)) \ ftrace_dump(oops_dump_mode); \ } while (0) #endif /* __LINUX_RCUPDATE_H */
kernel/rcu/rcutorture.c +3 −14 Original line number Diff line number Diff line Loading @@ -1082,17 +1082,6 @@ rcu_torture_fakewriter(void *arg) return 0; } static void rcutorture_trace_dump(void) { static atomic_t beenhere = ATOMIC_INIT(0); if (atomic_read(&beenhere)) return; if (atomic_xchg(&beenhere, 1) != 0) return; ftrace_dump(DUMP_ALL); } /* * RCU torture reader from timer handler. Dereferences rcu_torture_current, * incrementing the corresponding element of the pipeline array. The Loading Loading @@ -1142,7 +1131,7 @@ static void rcu_torture_timer(unsigned long unused) if (pipe_count > 1) { do_trace_rcu_torture_read(cur_ops->name, &p->rtort_rcu, ts, started, completed); rcutorture_trace_dump(); rcu_ftrace_dump(DUMP_ALL); } __this_cpu_inc(rcu_torture_count[pipe_count]); completed = completed - started; Loading Loading @@ -1215,7 +1204,7 @@ rcu_torture_reader(void *arg) if (pipe_count > 1) { do_trace_rcu_torture_read(cur_ops->name, &p->rtort_rcu, ts, started, completed); rcutorture_trace_dump(); rcu_ftrace_dump(DUMP_ALL); } __this_cpu_inc(rcu_torture_count[pipe_count]); completed = completed - started; Loading Loading @@ -1333,7 +1322,7 @@ rcu_torture_stats_print(void) rcu_torture_writer_state, gpnum, completed, flags); show_rcu_gp_kthreads(); rcutorture_trace_dump(); rcu_ftrace_dump(DUMP_ALL); } rtcv_snap = rcu_torture_current_version; } Loading
kernel/rcu/tree.c +2 −2 Original line number Diff line number Diff line Loading @@ -637,7 +637,7 @@ static void rcu_eqs_enter_common(long long oldval, bool user) idle_task(smp_processor_id()); trace_rcu_dyntick(TPS("Error on entry: not idle task"), oldval, 0); ftrace_dump(DUMP_ORIG); rcu_ftrace_dump(DUMP_ORIG); WARN_ONCE(1, "Current pid: %d comm: %s / Idle pid: %d comm: %s", current->pid, current->comm, idle->pid, idle->comm); /* must be idle task! */ Loading Loading @@ -799,7 +799,7 @@ static void rcu_eqs_exit_common(long long oldval, int user) trace_rcu_dyntick(TPS("Error on exit: not idle task"), oldval, rdtp->dynticks_nesting); ftrace_dump(DUMP_ORIG); rcu_ftrace_dump(DUMP_ORIG); WARN_ONCE(1, "Current pid: %d comm: %s / Idle pid: %d comm: %s", current->pid, current->comm, idle->pid, idle->comm); /* must be idle task! */ Loading