blob: 088ea089e31d38ca8f2acb5e57fed5cd77d24f6c [file] [log] [blame]
Frederic Weisbecker3f5ec132008-11-11 23:21:31 +01001#ifndef _LINUX_TRACE_BOOT_H
2#define _LINUX_TRACE_BOOT_H
3
Frederic Weisbeckerda485e02008-12-11 16:14:23 +01004#include <linux/module.h>
5#include <linux/kallsyms.h>
6#include <linux/init.h>
7
Frederic Weisbecker3f5ec132008-11-11 23:21:31 +01008/*
Frederic Weisbecker74239072008-11-11 23:24:42 +01009 * Structure which defines the trace of an initcall
10 * while it is called.
Frederic Weisbecker3f5ec132008-11-11 23:21:31 +010011 * You don't have to fill the func field since it is
12 * only used internally by the tracer.
13 */
Frederic Weisbecker74239072008-11-11 23:24:42 +010014struct boot_trace_call {
Frederic Weisbecker3f5ec132008-11-11 23:21:31 +010015 pid_t caller;
Stephen Rothwell80015302008-12-11 16:10:08 +010016 char func[KSYM_SYMBOL_LEN];
Frederic Weisbecker74239072008-11-11 23:24:42 +010017};
18
19/*
20 * Structure which defines the trace of an initcall
21 * while it returns.
22 */
23struct boot_trace_ret {
Stephen Rothwell80015302008-12-11 16:10:08 +010024 char func[KSYM_SYMBOL_LEN];
Frederic Weisbecker74239072008-11-11 23:24:42 +010025 int result;
26 unsigned long long duration; /* nsecs */
Frederic Weisbecker3f5ec132008-11-11 23:21:31 +010027};
28
29#ifdef CONFIG_BOOT_TRACER
Frederic Weisbecker74239072008-11-11 23:24:42 +010030/* Append the traces on the ring-buffer */
31extern void trace_boot_call(struct boot_trace_call *bt, initcall_t fn);
32extern void trace_boot_ret(struct boot_trace_ret *bt, initcall_t fn);
Frederic Weisbecker3f5ec132008-11-11 23:21:31 +010033
34/* Tells the tracer that smp_pre_initcall is finished.
35 * So we can start the tracing
36 */
37extern void start_boot_trace(void);
38
39/* Resume the tracing of other necessary events
40 * such as sched switches
41 */
42extern void enable_boot_trace(void);
43
44/* Suspend this tracing. Actually, only sched_switches tracing have
45 * to be suspended. Initcalls doesn't need it.)
46 */
47extern void disable_boot_trace(void);
48#else
Frederic Weisbecker74239072008-11-11 23:24:42 +010049static inline
50void trace_boot_call(struct boot_trace_call *bt, initcall_t fn) { }
51
52static inline
53void trace_boot_ret(struct boot_trace_ret *bt, initcall_t fn) { }
54
Frederic Weisbecker3f5ec132008-11-11 23:21:31 +010055static inline void start_boot_trace(void) { }
56static inline void enable_boot_trace(void) { }
57static inline void disable_boot_trace(void) { }
58#endif /* CONFIG_BOOT_TRACER */
59
60#endif /* __LINUX_TRACE_BOOT_H */