ftrace: Look up the address of return_to_handler() using helpers
authorNaveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
Thu, 5 Sep 2019 18:20:28 +0000 (23:50 +0530)
committerMichael Ellerman <mpe@ellerman.id.au>
Wed, 18 Sep 2019 02:24:47 +0000 (12:24 +1000)
This ensures that we use the right address on architectures that use
function descriptors.

Signed-off-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
Acked-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/8f6f14d192a994008ac370ce14036bbe67224c7d.1567707399.git.naveen.n.rao@linux.vnet.ibm.com
kernel/trace/fgraph.c

index 8dfd5021b9339ac2c5369607528fdadc4f8f64d1..7950a0356042a3f71026298dd4de563cd5180d4c 100644 (file)
@@ -276,7 +276,7 @@ unsigned long ftrace_graph_ret_addr(struct task_struct *task, int *idx,
        int index = task->curr_ret_stack;
        int i;
 
-       if (ret != (unsigned long)return_to_handler)
+       if (ret != (unsigned long)dereference_kernel_function_descriptor(return_to_handler))
                return ret;
 
        if (index < 0)
@@ -294,7 +294,7 @@ unsigned long ftrace_graph_ret_addr(struct task_struct *task, int *idx,
 {
        int task_idx;
 
-       if (ret != (unsigned long)return_to_handler)
+       if (ret != (unsigned long)dereference_kernel_function_descriptor(return_to_handler))
                return ret;
 
        task_idx = task->curr_ret_stack;