powerpc/ftrace: Remove mod_return_to_handler
authorAnton Blanchard <anton@samba.org>
Wed, 17 Sep 2014 07:07:03 +0000 (17:07 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Sun, 9 Nov 2014 22:59:27 +0000 (09:59 +1100)
mod_return_to_handler is the same as return_to_handler, except
it handles the change of the TOC (r2). Add this into
return_to_handler and remove mod_return_to_handler.

Signed-off-by: Anton Blanchard <anton@samba.org>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/kernel/entry_64.S
arch/powerpc/kernel/ftrace.c
arch/powerpc/kernel/process.c

index 0905c8da90f1bb6e2aedb5e4cbfd7a7351df44a7..66f7ed32848f049808ffd8477938dd07f4ecdeb0 100644 (file)
@@ -1240,28 +1240,6 @@ _GLOBAL(ftrace_graph_caller)
        blr
 
 _GLOBAL(return_to_handler)
-       /* need to save return values */
-       std     r4,  -24(r1)
-       std     r3,  -16(r1)
-       std     r31, -8(r1)
-       mr      r31, r1
-       stdu    r1, -112(r1)
-
-       bl      ftrace_return_to_handler
-       nop
-
-       /* return value has real return address */
-       mtlr    r3
-
-       ld      r1, 0(r1)
-       ld      r4,  -24(r1)
-       ld      r3,  -16(r1)
-       ld      r31, -8(r1)
-
-       /* Jump back to real return address */
-       blr
-
-_GLOBAL(mod_return_to_handler)
        /* need to save return values */
        std     r4,  -32(r1)
        std     r3,  -24(r1)
@@ -1272,7 +1250,7 @@ _GLOBAL(mod_return_to_handler)
        stdu    r1, -112(r1)
 
        /*
-        * We are in a module using the module's TOC.
+        * We might be called from a module.
         * Switch to our TOC to run inside the core kernel.
         */
        ld      r2, PACATOC(r13)
index 390311c0f03d0dd6b1775ebc79526d67519176ec..abf79213c356488f41e76c1159198f9c20f8336c 100644 (file)
@@ -510,10 +510,6 @@ int ftrace_disable_ftrace_graph_caller(void)
 }
 #endif /* CONFIG_DYNAMIC_FTRACE */
 
-#ifdef CONFIG_PPC64
-extern void mod_return_to_handler(void);
-#endif
-
 /*
  * Hook the return address and push it in the stack of return addrs
  * in current thread info.
@@ -523,7 +519,7 @@ void prepare_ftrace_return(unsigned long *parent, unsigned long self_addr)
        unsigned long old;
        int faulted;
        struct ftrace_graph_ent trace;
-       unsigned long return_hooker = (unsigned long)&return_to_handler;
+       unsigned long return_hooker;
 
        if (unlikely(ftrace_graph_is_dead()))
                return;
@@ -531,13 +527,7 @@ void prepare_ftrace_return(unsigned long *parent, unsigned long self_addr)
        if (unlikely(atomic_read(&current->tracing_graph_pause)))
                return;
 
-#ifdef CONFIG_PPC64
-       /* non core kernel code needs to save and restore the TOC */
-       if (REGION_ID(self_addr) != KERNEL_REGION_ID)
-               return_hooker = (unsigned long)&mod_return_to_handler;
-#endif
-
-       return_hooker = ppc_function_entry((void *)return_hooker);
+       return_hooker = ppc_function_entry(return_to_handler);
 
        /*
         * Protect against fault, even if it shouldn't
index 8c2691e445bd4f9d8372829b5d14ab85db74b8b5..f6b82152e7aa5e7b7292dc89d592478b6b23eae8 100644 (file)
@@ -1527,13 +1527,6 @@ void show_stack(struct task_struct *tsk, unsigned long *stack)
        int curr_frame = current->curr_ret_stack;
        extern void return_to_handler(void);
        unsigned long rth = (unsigned long)return_to_handler;
-       unsigned long mrth = -1;
-#ifdef CONFIG_PPC64
-       extern void mod_return_to_handler(void);
-       rth = *(unsigned long *)rth;
-       mrth = (unsigned long)mod_return_to_handler;
-       mrth = *(unsigned long *)mrth;
-#endif
 #endif
 
        sp = (unsigned long) stack;
@@ -1558,7 +1551,7 @@ void show_stack(struct task_struct *tsk, unsigned long *stack)
                if (!firstframe || ip != lr) {
                        printk("["REG"] ["REG"] %pS", sp, ip, (void *)ip);
 #ifdef CONFIG_FUNCTION_GRAPH_TRACER
-                       if ((ip == rth || ip == mrth) && curr_frame >= 0) {
+                       if ((ip == rth) && curr_frame >= 0) {
                                printk(" (%pS)",
                                       (void *)current->ret_stack[curr_frame].ret);
                                curr_frame--;