summaryrefslogtreecommitdiffstats
path: root/arch/x86/include/asm/ftrace.h
diff options
context:
space:
mode:
authorSteven Rostedt <srostedt@redhat.com>2012-05-30 13:26:37 -0400
committerSteven Rostedt <rostedt@goodmis.org>2012-05-31 23:12:17 -0400
commita192cd0413b71c2a3e4e48dd365af704be72b748 (patch)
tree739c64a3fd4bf58b7c34a9eb5bc83aa844a06bf3 /arch/x86/include/asm/ftrace.h
parentc985f7812331d79483beab932e8966477411a942 (diff)
downloadlinux-0-day-a192cd0413b71c2a3e4e48dd365af704be72b748.tar.gz
linux-0-day-a192cd0413b71c2a3e4e48dd365af704be72b748.tar.xz
ftrace: Synchronize variable setting with breakpoints
When the function tracer starts modifying the code via breakpoints it sets a variable (modifying_ftrace_code) to inform the breakpoint handler to call the ftrace int3 code. But there's no synchronization between setting this code and the handler, thus it is possible for the handler to be called on another CPU before it sees the variable. This will cause a kernel crash as the int3 handler will not know what to do with it. I originally added smp_mb()'s to force the visibility of the variable but H. Peter Anvin suggested that I just make it atomic. [ Added comments as suggested by Peter Zijlstra ] Suggested-by: H. Peter Anvin <hpa@zytor.com> Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Diffstat (limited to 'arch/x86/include/asm/ftrace.h')
-rw-r--r--arch/x86/include/asm/ftrace.h2
1 files changed, 1 insertions, 1 deletions
diff --git a/arch/x86/include/asm/ftrace.h b/arch/x86/include/asm/ftrace.h
index 18d9005d9e4f0..b0767bc087405 100644
--- a/arch/x86/include/asm/ftrace.h
+++ b/arch/x86/include/asm/ftrace.h
@@ -34,7 +34,7 @@
#ifndef __ASSEMBLY__
extern void mcount(void);
-extern int modifying_ftrace_code;
+extern atomic_t modifying_ftrace_code;
static inline unsigned long ftrace_call_adjust(unsigned long addr)
{