1 #ifndef _LINUX_TRACE_BOOT_H 2 #define _LINUX_TRACE_BOOT_H 3 4 #include <linux/module.h> 5 #include <linux/kallsyms.h> 6 #include <linux/init.h> 7 8 /* 9 * Structure which defines the trace of an initcall 10 * while it is called. 11 * You don't have to fill the func field since it is 12 * only used internally by the tracer. 13 */ 14 struct boot_trace_call { 15 pid_t caller; 16 char func[KSYM_SYMBOL_LEN]; 17 }; 18 19 /* 20 * Structure which defines the trace of an initcall 21 * while it returns. 22 */ 23 struct boot_trace_ret { 24 char func[KSYM_SYMBOL_LEN]; 25 int result; 26 unsigned long long duration; /* nsecs */ 27 }; 28 29 #ifdef CONFIG_BOOT_TRACER 30 /* Append the traces on the ring-buffer */ 31 extern void trace_boot_call(struct boot_trace_call *bt, initcall_t fn); 32 extern void trace_boot_ret(struct boot_trace_ret *bt, initcall_t fn); 33 34 /* Tells the tracer that smp_pre_initcall is finished. 35 * So we can start the tracing 36 */ 37 extern void start_boot_trace(void); 38 39 /* Resume the tracing of other necessary events 40 * such as sched switches 41 */ 42 extern 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 */ 47 extern void disable_boot_trace(void); 48 #else 49 static inline trace_boot_call(struct boot_trace_call * bt,initcall_t fn)50void trace_boot_call(struct boot_trace_call *bt, initcall_t fn) { } 51 52 static inline trace_boot_ret(struct boot_trace_ret * bt,initcall_t fn)53void trace_boot_ret(struct boot_trace_ret *bt, initcall_t fn) { } 54 start_boot_trace(void)55static inline void start_boot_trace(void) { } enable_boot_trace(void)56static inline void enable_boot_trace(void) { } disable_boot_trace(void)57static inline void disable_boot_trace(void) { } 58 #endif /* CONFIG_BOOT_TRACER */ 59 60 #endif /* __LINUX_TRACE_BOOT_H */ 61