aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorIngo Molnar <mingo@elte.hu>2008-11-12 04:17:09 -0500
committerIngo Molnar <mingo@elte.hu>2008-11-12 04:17:09 -0500
commit60a011c736e7dd09a0b01ca6a051a416f3f52ffb (patch)
tree20e91db58c3bbfa622d3ed8ec747e4974a807284 /include
parentd06bbd669539215405874d8fe32ab65105e6c4bb (diff)
parent19b3e9671c5a219b8c34da2cc66e0ce7c3a501ae (diff)
Merge branch 'tracing/function-return-tracer' into tracing/fastboot
Diffstat (limited to 'include')
-rw-r--r--include/linux/ftrace.h20
-rw-r--r--include/linux/ftrace_irq.h2
-rw-r--r--include/linux/sched.h11
3 files changed, 32 insertions, 1 deletions
diff --git a/include/linux/ftrace.h b/include/linux/ftrace.h
index 1f5608c11023..dcbbf72a88b1 100644
--- a/include/linux/ftrace.h
+++ b/include/linux/ftrace.h
@@ -268,6 +268,26 @@ ftrace_init_module(unsigned long *start, unsigned long *end) { }
268 268
269 269
270/* 270/*
271 * Structure that defines a return function trace.
272 */
273struct ftrace_retfunc {
274 unsigned long ret; /* Return address */
275 unsigned long func; /* Current function */
276 unsigned long long calltime;
277 unsigned long long rettime;
278};
279
280#ifdef CONFIG_FUNCTION_RET_TRACER
281/* Type of a callback handler of tracing return function */
282typedef void (*trace_function_return_t)(struct ftrace_retfunc *);
283
284extern void register_ftrace_return(trace_function_return_t func);
285/* The current handler in use */
286extern trace_function_return_t ftrace_function_return;
287extern void unregister_ftrace_return(void);
288#endif
289
290/*
271 * Structure which defines the trace of an initcall. 291 * Structure which defines the trace of an initcall.
272 * You don't have to fill the func field since it is 292 * You don't have to fill the func field since it is
273 * only used internally by the tracer. 293 * only used internally by the tracer.
diff --git a/include/linux/ftrace_irq.h b/include/linux/ftrace_irq.h
index b1299d6729f2..0b4df55d7a74 100644
--- a/include/linux/ftrace_irq.h
+++ b/include/linux/ftrace_irq.h
@@ -2,7 +2,7 @@
2#define _LINUX_FTRACE_IRQ_H 2#define _LINUX_FTRACE_IRQ_H
3 3
4 4
5#ifdef CONFIG_DYNAMIC_FTRACE 5#if defined(CONFIG_DYNAMIC_FTRACE) || defined(CONFIG_FUNCTION_RET_TRACER)
6extern void ftrace_nmi_enter(void); 6extern void ftrace_nmi_enter(void);
7extern void ftrace_nmi_exit(void); 7extern void ftrace_nmi_exit(void);
8#else 8#else
diff --git a/include/linux/sched.h b/include/linux/sched.h
index 644ffbda17ca..61c8cc36028a 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -2006,6 +2006,17 @@ static inline void setup_thread_stack(struct task_struct *p, struct task_struct
2006{ 2006{
2007 *task_thread_info(p) = *task_thread_info(org); 2007 *task_thread_info(p) = *task_thread_info(org);
2008 task_thread_info(p)->task = p; 2008 task_thread_info(p)->task = p;
2009
2010#ifdef CONFIG_FUNCTION_RET_TRACER
2011 /*
2012 * When fork() creates a child process, this function is called.
2013 * But the child task may not inherit the return adresses traced
2014 * by the return function tracer because it will directly execute
2015 * in userspace and will not return to kernel functions its parent
2016 * used.
2017 */
2018 task_thread_info(p)->curr_ret_stack = -1;
2019#endif
2009} 2020}
2010 2021
2011static inline unsigned long *end_of_stack(struct task_struct *p) 2022static inline unsigned long *end_of_stack(struct task_struct *p)