aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPetr Mladek <[email protected]>2014-02-24 17:12:20 +0100
committerSteven Rostedt <[email protected]>2014-03-03 21:23:07 -0500
commit12729f14d8357fb845d75155228b21e76360272d (patch)
tree058f56b8a788e01366442bc9a942dc0ec08ac956
parentc932c6b7c913a5661e04059045fa1eac762c82fa (diff)
ftrace/x86: One more missing sync after fixup of function modification failure
If a failure occurs while modifying ftrace function, it bails out and will remove the tracepoints to be back to what the code originally was. There is missing the final sync run across the CPUs after the fix up is done and before the ftrace int3 handler flag is reset. Here's the description of the problem: CPU0 CPU1 ---- ---- remove_breakpoint(); modifying_ftrace_code = 0; [still sees breakpoint] <takes trap> [sees modifying_ftrace_code as zero] [no breakpoint handler] [goto failed case] [trap exception - kernel breakpoint, no handler] BUG() Link: http://lkml.kernel.org/r/[email protected] Fixes: 8a4d0a687a5 "ftrace: Use breakpoint method to update ftrace caller" Acked-by: Frederic Weisbecker <[email protected]> Acked-by: H. Peter Anvin <[email protected]> Signed-off-by: Petr Mladek <[email protected]> Signed-off-by: Steven Rostedt <[email protected]>
-rw-r--r--arch/x86/kernel/ftrace.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/arch/x86/kernel/ftrace.c b/arch/x86/kernel/ftrace.c
index 6b566c82d82c..69885e2f2095 100644
--- a/arch/x86/kernel/ftrace.c
+++ b/arch/x86/kernel/ftrace.c
@@ -660,8 +660,8 @@ ftrace_modify_code(unsigned long ip, unsigned const char *old_code,
ret = -EPERM;
goto out;
}
- run_sync();
out:
+ run_sync();
return ret;
fail_update: