--- /dev/null
+From 39b5552cd5090d4c210d278cd2732f493075f033 Mon Sep 17 00:00:00 2001
+From: "Steven Rostedt (Red Hat)" <rostedt@goodmis.org>
+Date: Sun, 17 Aug 2014 20:59:10 -0400
+Subject: ftrace: Use current addr when converting to nop in __ftrace_replace_code()
+
+From: "Steven Rostedt (Red Hat)" <rostedt@goodmis.org>
+
+commit 39b5552cd5090d4c210d278cd2732f493075f033 upstream.
+
+In __ftrace_replace_code(), when converting the call to a nop in a function
+it needs to compare against the "curr" (current) value of the ftrace ops, and
+not the "new" one. It currently does not affect x86 which is the only arch
+to do the trampolines with function graph tracer, but when other archs that do
+depend on this code implement the function graph trampoline, it can crash.
+
+Here's an example when ARM uses the trampolines (in the future):
+
+ ------------[ cut here ]------------
+ WARNING: CPU: 0 PID: 9 at kernel/trace/ftrace.c:1716 ftrace_bug+0x17c/0x1f4()
+ Modules linked in: omap_rng rng_core ipv6
+ CPU: 0 PID: 9 Comm: migration/0 Not tainted 3.16.0-test-10959-gf0094b28f303-dirty #52
+ [<c02188f4>] (unwind_backtrace) from [<c021343c>] (show_stack+0x20/0x24)
+ [<c021343c>] (show_stack) from [<c095a674>] (dump_stack+0x78/0x94)
+ [<c095a674>] (dump_stack) from [<c02532a0>] (warn_slowpath_common+0x7c/0x9c)
+ [<c02532a0>] (warn_slowpath_common) from [<c02532ec>] (warn_slowpath_null+0x2c/0x34)
+ [<c02532ec>] (warn_slowpath_null) from [<c02cbac4>] (ftrace_bug+0x17c/0x1f4)
+ [<c02cbac4>] (ftrace_bug) from [<c02cc44c>] (ftrace_replace_code+0x80/0x9c)
+ [<c02cc44c>] (ftrace_replace_code) from [<c02cc658>] (ftrace_modify_all_code+0xb8/0x164)
+ [<c02cc658>] (ftrace_modify_all_code) from [<c02cc718>] (__ftrace_modify_code+0x14/0x1c)
+ [<c02cc718>] (__ftrace_modify_code) from [<c02c7244>] (multi_cpu_stop+0xf4/0x134)
+ [<c02c7244>] (multi_cpu_stop) from [<c02c6e90>] (cpu_stopper_thread+0x54/0x130)
+ [<c02c6e90>] (cpu_stopper_thread) from [<c0271cd4>] (smpboot_thread_fn+0x1ac/0x1bc)
+ [<c0271cd4>] (smpboot_thread_fn) from [<c026ddf0>] (kthread+0xe0/0xfc)
+ [<c026ddf0>] (kthread) from [<c020f318>] (ret_from_fork+0x14/0x20)
+ ---[ end trace dc9ce72c5b617d8f ]---
+[ 65.047264] ftrace failed to modify [<c0208580>] asm_do_IRQ+0x10/0x1c
+[ 65.054070] actual: 85:1b:00:eb
+
+Fixes: 7413af1fb70e7 "ftrace: Make get_ftrace_addr() and get_ftrace_addr_old() global"
+Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ kernel/trace/ftrace.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/kernel/trace/ftrace.c
++++ b/kernel/trace/ftrace.c
+@@ -1809,7 +1809,7 @@ __ftrace_replace_code(struct dyn_ftrace
+ return ftrace_make_call(rec, ftrace_addr);
+
+ case FTRACE_UPDATE_MAKE_NOP:
+- return ftrace_make_nop(NULL, rec, ftrace_addr);
++ return ftrace_make_nop(NULL, rec, ftrace_old_addr);
+
+ case FTRACE_UPDATE_MODIFY_CALL:
+ return ftrace_modify_call(rec, ftrace_old_addr, ftrace_addr);