ftrace/x86: One more missing sync after fixup of function modification failure
authorPetr Mladek <pmladek@suse.cz>
Mon, 24 Feb 2014 16:12:20 +0000 (17:12 +0100)
committerSteven Rostedt <rostedt@goodmis.org>
Tue, 4 Mar 2014 02:23:07 +0000 (21:23 -0500)
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/1393258342-29978-2-git-send-email-pmladek@suse.cz
Fixes: 8a4d0a687a5 "ftrace: Use breakpoint method to update ftrace caller"
Acked-by: Frederic Weisbecker <fweisbec@gmail.com>
Acked-by: H. Peter Anvin <hpa@linux.intel.com>
Signed-off-by: Petr Mladek <pmladek@suse.cz>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
arch/x86/kernel/ftrace.c

index 6b566c82d82c848f3cb9b9055f4c79339667474d..69885e2f20952d9632e6474b11b50d254d689678 100644 (file)
@@ -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:
This page took 0.028831 seconds and 5 git commands to generate.