tracing: Move enabling tracepoints to just after rcu_init()
Enabling tracepoints at boot up can be very useful. The tracepoint can be initialized right after RCU has been. There's no need to wait for the early_initcall() to be called. That's too late for some things that can use tracepoints for debugging. Move the logic to enable tracepoints out of the initcalls and into init/main.c to right after rcu_init(). This also allows trace_printk() to be used early too. Link: http://lkml.kernel.org/r/alpine.DEB.2.11.1412121539300.16494@nanos Link: http://lkml.kernel.org/r/20141214164104.307127356@goodmis.org Reviewed-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Suggested-by: Thomas Gleixner <tglx@linutronix.de> Tested-by: Thomas Gleixner <tglx@linutronix.de> Acked-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
This commit is contained in:
Родитель
aee4e5f3d3
Коммит
5f893b2639
|
@ -39,6 +39,12 @@
|
|||
# define FTRACE_FORCE_LIST_FUNC 0
|
||||
#endif
|
||||
|
||||
/* Main tracing buffer and events set up */
|
||||
#ifdef CONFIG_TRACING
|
||||
void trace_init(void);
|
||||
#else
|
||||
static inline void trace_init(void) { }
|
||||
#endif
|
||||
|
||||
struct module;
|
||||
struct ftrace_hash;
|
||||
|
|
|
@ -577,6 +577,10 @@ asmlinkage __visible void __init start_kernel(void)
|
|||
local_irq_disable();
|
||||
idr_init_cache();
|
||||
rcu_init();
|
||||
|
||||
/* trace_printk() and trace points may be used after this */
|
||||
trace_init();
|
||||
|
||||
context_tracking_init();
|
||||
radix_tree_init();
|
||||
/* init some links before init_ISA_irqs() */
|
||||
|
|
|
@ -6876,6 +6876,13 @@ out:
|
|||
return ret;
|
||||
}
|
||||
|
||||
void __init trace_init(void)
|
||||
{
|
||||
tracer_alloc_buffers();
|
||||
init_ftrace_syscalls();
|
||||
trace_event_init();
|
||||
}
|
||||
|
||||
__init static int clear_boot_tracer(void)
|
||||
{
|
||||
/*
|
||||
|
@ -6895,6 +6902,5 @@ __init static int clear_boot_tracer(void)
|
|||
return 0;
|
||||
}
|
||||
|
||||
early_initcall(tracer_alloc_buffers);
|
||||
fs_initcall(tracer_init_debugfs);
|
||||
late_initcall(clear_boot_tracer);
|
||||
|
|
|
@ -1301,4 +1301,17 @@ int perf_ftrace_event_register(struct ftrace_event_call *call,
|
|||
#define perf_ftrace_event_register NULL
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_FTRACE_SYSCALLS
|
||||
void init_ftrace_syscalls(void);
|
||||
#else
|
||||
static inline void init_ftrace_syscalls(void) { }
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_EVENT_TRACING
|
||||
void trace_event_init(void);
|
||||
#else
|
||||
static inline void __init trace_event_init(void) { }
|
||||
#endif
|
||||
|
||||
|
||||
#endif /* _LINUX_KERNEL_TRACE_H */
|
||||
|
|
|
@ -2477,8 +2477,14 @@ static __init int event_trace_init(void)
|
|||
#endif
|
||||
return 0;
|
||||
}
|
||||
early_initcall(event_trace_memsetup);
|
||||
core_initcall(event_trace_enable);
|
||||
|
||||
void __init trace_event_init(void)
|
||||
{
|
||||
event_trace_memsetup();
|
||||
init_ftrace_syscalls();
|
||||
event_trace_enable();
|
||||
}
|
||||
|
||||
fs_initcall(event_trace_init);
|
||||
|
||||
#ifdef CONFIG_FTRACE_STARTUP_TEST
|
||||
|
|
|
@ -514,7 +514,7 @@ unsigned long __init __weak arch_syscall_addr(int nr)
|
|||
return (unsigned long)sys_call_table[nr];
|
||||
}
|
||||
|
||||
static int __init init_ftrace_syscalls(void)
|
||||
void __init init_ftrace_syscalls(void)
|
||||
{
|
||||
struct syscall_metadata *meta;
|
||||
unsigned long addr;
|
||||
|
@ -524,7 +524,7 @@ static int __init init_ftrace_syscalls(void)
|
|||
GFP_KERNEL);
|
||||
if (!syscalls_metadata) {
|
||||
WARN_ON(1);
|
||||
return -ENOMEM;
|
||||
return;
|
||||
}
|
||||
|
||||
for (i = 0; i < NR_syscalls; i++) {
|
||||
|
@ -536,10 +536,7 @@ static int __init init_ftrace_syscalls(void)
|
|||
meta->syscall_nr = i;
|
||||
syscalls_metadata[i] = meta;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
early_initcall(init_ftrace_syscalls);
|
||||
|
||||
#ifdef CONFIG_PERF_EVENTS
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче