#ifndef _LINUX_TRACE_BOOT_H#define _LINUX_TRACE_BOOT_H#include <linux/module.h>#include <linux/kallsyms.h>#include <linux/init.h>/* * Structure which defines the trace of an initcall * while it is called. * You don't have to fill the func field since it is * only used internally by the tracer. */struct boot_trace_call { pid_t caller; char func[KSYM_SYMBOL_LEN];};/* * Structure which defines the trace of an initcall * while it returns. */struct boot_trace_ret { char func[KSYM_SYMBOL_LEN]; int result; unsigned long long duration; /* nsecs */};#ifdef CONFIG_BOOT_TRACER/* Append the traces on the ring-buffer */extern void trace_boot_call(struct boot_trace_call *bt, initcall_t fn);extern void trace_boot_ret(struct boot_trace_ret *bt, initcall_t fn);/* Tells the tracer that smp_pre_initcall is finished. * So we can start the tracing */extern void start_boot_trace(void);/* Resume the tracing of other necessary events * such as sched switches */extern void enable_boot_trace(void);/* Suspend this tracing. Actually, only sched_switches tracing have * to be suspended. Initcalls doesn't need it.) */extern void disable_boot_trace(void);#elsestatic inlinevoid trace_boot_call(struct boot_trace_call *bt, initcall_t fn) { }static inlinevoid trace_boot_ret(struct boot_trace_ret *bt, initcall_t fn) { }static inline void start_boot_trace(void) { }static inline void enable_boot_trace(void) { }static inline void disable_boot_trace(void) { }#endif /* CONFIG_BOOT_TRACER */#endif /* __LINUX_TRACE_BOOT_H */
#ifndef _LINUX_TRACE_BOOT_H
#define _LINUX_TRACE_BOOT_H
#include <linux/module.h>
#include <linux/kallsyms.h>
#include <linux/init.h>
/*
* Structure which defines the trace of an initcall
* while it is called.
* You don't have to fill the func field since it is
* only used internally by the tracer.
*/
struct boot_trace_call {
pid_t caller;
char func[KSYM_SYMBOL_LEN];
};
/*
* Structure which defines the trace of an initcall
* while it returns.
*/
struct boot_trace_ret {
char func[KSYM_SYMBOL_LEN];
int result;
unsigned long long duration; /* nsecs */
};
#ifdef CONFIG_BOOT_TRACER
/* Append the traces on the ring-buffer */
extern void trace_boot_call(struct boot_trace_call *bt, initcall_t fn);
extern void trace_boot_ret(struct boot_trace_ret *bt, initcall_t fn);
/* Tells the tracer that smp_pre_initcall is finished.
* So we can start the tracing
*/
extern void start_boot_trace(void);
/* Resume the tracing of other necessary events
* such as sched switches
*/
extern void enable_boot_trace(void);
/* Suspend this tracing. Actually, only sched_switches tracing have
* to be suspended. Initcalls doesn't need it.)
*/
extern void disable_boot_trace(void);
#else
static inline
void trace_boot_call(struct boot_trace_call *bt, initcall_t fn) { }
static inline
void trace_boot_ret(struct boot_trace_ret *bt, initcall_t fn) { }
static inline void start_boot_trace(void) { }
static inline void enable_boot_trace(void) { }
static inline void disable_boot_trace(void) { }
#endif /* CONFIG_BOOT_TRACER */
#endif /* __LINUX_TRACE_BOOT_H */