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 */ 14struct 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 */ 23struct 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 */ 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); 33 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 49static 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 55static 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 */ 61