mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-05 01:54:09 +08:00
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:
parent
aee4e5f3d3
commit
5f893b2639
@ -39,6 +39,12 @@
|
|||||||
# define FTRACE_FORCE_LIST_FUNC 0
|
# define FTRACE_FORCE_LIST_FUNC 0
|
||||||
#endif
|
#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 module;
|
||||||
struct ftrace_hash;
|
struct ftrace_hash;
|
||||||
|
@ -577,6 +577,10 @@ asmlinkage __visible void __init start_kernel(void)
|
|||||||
local_irq_disable();
|
local_irq_disable();
|
||||||
idr_init_cache();
|
idr_init_cache();
|
||||||
rcu_init();
|
rcu_init();
|
||||||
|
|
||||||
|
/* trace_printk() and trace points may be used after this */
|
||||||
|
trace_init();
|
||||||
|
|
||||||
context_tracking_init();
|
context_tracking_init();
|
||||||
radix_tree_init();
|
radix_tree_init();
|
||||||
/* init some links before init_ISA_irqs() */
|
/* init some links before init_ISA_irqs() */
|
||||||
|
@ -6876,6 +6876,13 @@ out:
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void __init trace_init(void)
|
||||||
|
{
|
||||||
|
tracer_alloc_buffers();
|
||||||
|
init_ftrace_syscalls();
|
||||||
|
trace_event_init();
|
||||||
|
}
|
||||||
|
|
||||||
__init static int clear_boot_tracer(void)
|
__init static int clear_boot_tracer(void)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
@ -6895,6 +6902,5 @@ __init static int clear_boot_tracer(void)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
early_initcall(tracer_alloc_buffers);
|
|
||||||
fs_initcall(tracer_init_debugfs);
|
fs_initcall(tracer_init_debugfs);
|
||||||
late_initcall(clear_boot_tracer);
|
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
|
#define perf_ftrace_event_register NULL
|
||||||
#endif
|
#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 */
|
#endif /* _LINUX_KERNEL_TRACE_H */
|
||||||
|
@ -2477,8 +2477,14 @@ static __init int event_trace_init(void)
|
|||||||
#endif
|
#endif
|
||||||
return 0;
|
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);
|
fs_initcall(event_trace_init);
|
||||||
|
|
||||||
#ifdef CONFIG_FTRACE_STARTUP_TEST
|
#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];
|
return (unsigned long)sys_call_table[nr];
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __init init_ftrace_syscalls(void)
|
void __init init_ftrace_syscalls(void)
|
||||||
{
|
{
|
||||||
struct syscall_metadata *meta;
|
struct syscall_metadata *meta;
|
||||||
unsigned long addr;
|
unsigned long addr;
|
||||||
@ -524,7 +524,7 @@ static int __init init_ftrace_syscalls(void)
|
|||||||
GFP_KERNEL);
|
GFP_KERNEL);
|
||||||
if (!syscalls_metadata) {
|
if (!syscalls_metadata) {
|
||||||
WARN_ON(1);
|
WARN_ON(1);
|
||||||
return -ENOMEM;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < NR_syscalls; i++) {
|
for (i = 0; i < NR_syscalls; i++) {
|
||||||
@ -536,10 +536,7 @@ static int __init init_ftrace_syscalls(void)
|
|||||||
meta->syscall_nr = i;
|
meta->syscall_nr = i;
|
||||||
syscalls_metadata[i] = meta;
|
syscalls_metadata[i] = meta;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
early_initcall(init_ftrace_syscalls);
|
|
||||||
|
|
||||||
#ifdef CONFIG_PERF_EVENTS
|
#ifdef CONFIG_PERF_EVENTS
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user