linux/arch/blackfin/kernel/ftrace.c
<<
>>
Prefs
   1/*
   2 * ftrace graph code
   3 *
   4 * Copyright (C) 2009 Analog Devices Inc.
   5 * Licensed under the GPL-2 or later.
   6 */
   7
   8#include <linux/ftrace.h>
   9#include <linux/kernel.h>
  10#include <linux/sched.h>
  11#include <asm/atomic.h>
  12
  13#ifdef CONFIG_FUNCTION_GRAPH_TRACER
  14
  15/*
  16 * Hook the return address and push it in the stack of return addrs
  17 * in current thread info.
  18 */
  19void prepare_ftrace_return(unsigned long *parent, unsigned long self_addr)
  20{
  21        struct ftrace_graph_ent trace;
  22        unsigned long return_hooker = (unsigned long)&return_to_handler;
  23
  24        if (unlikely(atomic_read(&current->tracing_graph_pause)))
  25                return;
  26
  27        if (ftrace_push_return_trace(*parent, self_addr, &trace.depth, 0) == -EBUSY)
  28                return;
  29
  30        trace.func = self_addr;
  31
  32        /* Only trace if the calling function expects to */
  33        if (!ftrace_graph_entry(&trace)) {
  34                current->curr_ret_stack--;
  35                return;
  36        }
  37
  38        /* all is well in the world !  hijack RETS ... */
  39        *parent = return_hooker;
  40}
  41
  42#endif
  43