unsigned long *start, unsigned long *end) { }
    #endif
    
+++ enum {
+++     POWER_NONE = 0,
+++     POWER_CSTATE = 1,
+++     POWER_PSTATE = 2,
+++ };
+++ 
+++ struct power_trace {
+++ #ifdef CONFIG_POWER_TRACER
+++     ktime_t                 stamp;
+++     ktime_t                 end;
+++     int                     type;
+++     int                     state;
+++ #endif
+++ };
+++ 
+++ #ifdef CONFIG_POWER_TRACER
+++ extern void trace_power_start(struct power_trace *it, unsigned int type,
+++                                     unsigned int state);
+++ extern void trace_power_mark(struct power_trace *it, unsigned int type,
+++                                     unsigned int state);
+++ extern void trace_power_end(struct power_trace *it);
+++ #else
+++ static inline void trace_power_start(struct power_trace *it, unsigned int type,
+++                                     unsigned int state) { }
+++ static inline void trace_power_mark(struct power_trace *it, unsigned int type,
+++                                     unsigned int state) { }
+++ static inline void trace_power_end(struct power_trace *it) { }
+++ #endif
+++ 
++  
++ +/*
++ + * Structure that defines an entry function trace.
++ + */
++ +struct ftrace_graph_ent {
++ +    unsigned long func; /* Current function */
++ +    int depth;
++ +};
   +
    /*
     * Structure that defines a return function trace.
     */
 
    obj-$(CONFIG_STACK_TRACER) += trace_stack.o
    obj-$(CONFIG_MMIOTRACE) += trace_mmiotrace.o
    obj-$(CONFIG_BOOT_TRACER) += trace_boot.o
-- -obj-$(CONFIG_FUNCTION_RET_TRACER) += trace_functions_return.o
++ +obj-$(CONFIG_FUNCTION_GRAPH_TRACER) += trace_functions_graph.o
    obj-$(CONFIG_TRACE_BRANCH_PROFILING) += trace_branch.o
    obj-$(CONFIG_BTS_TRACER) += trace_bts.o
+++ obj-$(CONFIG_POWER_TRACER) += trace_power.o
    
    libftrace-y := ftrace.o
 
        TRACE_BRANCH,
        TRACE_BOOT_CALL,
        TRACE_BOOT_RET,
-- -    TRACE_FN_RET,
++ +    TRACE_GRAPH_RET,
++ +    TRACE_GRAPH_ENT,
        TRACE_USER_STACK,
        TRACE_BTS,
+++     TRACE_POWER,
    
        __TRACE_LAST_TYPE
    };
                IF_ASSIGN(var, ent, struct trace_boot_call, TRACE_BOOT_CALL);\
                IF_ASSIGN(var, ent, struct trace_boot_ret, TRACE_BOOT_RET);\
                IF_ASSIGN(var, ent, struct trace_branch, TRACE_BRANCH); \
-- -            IF_ASSIGN(var, ent, struct ftrace_ret_entry, TRACE_FN_RET);\
++ +            IF_ASSIGN(var, ent, struct ftrace_graph_ent_entry,      \
++ +                      TRACE_GRAPH_ENT);             \
++ +            IF_ASSIGN(var, ent, struct ftrace_graph_ret_entry,      \
++ +                      TRACE_GRAPH_RET);             \
                IF_ASSIGN(var, ent, struct bts_entry, TRACE_BTS);\
+++             IF_ASSIGN(var, ent, struct trace_power, TRACE_POWER); \
                __ftrace_bad_type();                                    \
        } while (0)