aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/trace/trace_stack.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/trace/trace_stack.c')
-rw-r--r--kernel/trace/trace_stack.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/kernel/trace/trace_stack.c b/kernel/trace/trace_stack.c
index b746399ab59c..5f29402bff0f 100644
--- a/kernel/trace/trace_stack.c
+++ b/kernel/trace/trace_stack.c
@@ -88,6 +88,12 @@ check_stack(unsigned long ip, unsigned long *stack)
88 local_irq_save(flags); 88 local_irq_save(flags);
89 arch_spin_lock(&max_stack_lock); 89 arch_spin_lock(&max_stack_lock);
90 90
91 /*
92 * RCU may not be watching, make it see us.
93 * The stack trace code uses rcu_sched.
94 */
95 rcu_irq_enter();
96
91 /* In case another CPU set the tracer_frame on us */ 97 /* In case another CPU set the tracer_frame on us */
92 if (unlikely(!frame_size)) 98 if (unlikely(!frame_size))
93 this_size -= tracer_frame; 99 this_size -= tracer_frame;
@@ -169,6 +175,7 @@ check_stack(unsigned long ip, unsigned long *stack)
169 } 175 }
170 176
171 out: 177 out:
178 rcu_irq_exit();
172 arch_spin_unlock(&max_stack_lock); 179 arch_spin_unlock(&max_stack_lock);
173 local_irq_restore(flags); 180 local_irq_restore(flags);
174} 181}