Skip to content

Commit

Permalink
tracing: Move enabling tracepoints to just after rcu_init()
Browse files Browse the repository at this point in the history
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/[email protected]

Reviewed-by: Paul E. McKenney <[email protected]>
Suggested-by: Thomas Gleixner <[email protected]>
Tested-by: Thomas Gleixner <[email protected]>
Acked-by: Thomas Gleixner <[email protected]>
Signed-off-by: Steven Rostedt <[email protected]>
  • Loading branch information
rostedt committed Dec 15, 2014
1 parent aee4e5f commit 5f893b2
Show file tree
Hide file tree
Showing 6 changed files with 40 additions and 8 deletions.
6 changes: 6 additions & 0 deletions include/linux/ftrace.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
4 changes: 4 additions & 0 deletions init/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -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() */
Expand Down
8 changes: 7 additions & 1 deletion kernel/trace/trace.c
Original file line number Diff line number Diff line change
Expand Up @@ -6876,6 +6876,13 @@ __init static int tracer_alloc_buffers(void)
return ret;
}

void __init trace_init(void)
{
tracer_alloc_buffers();
init_ftrace_syscalls();
trace_event_init();
}

__init static int clear_boot_tracer(void)
{
/*
Expand All @@ -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);
13 changes: 13 additions & 0 deletions kernel/trace/trace.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
10 changes: 8 additions & 2 deletions kernel/trace/trace_events.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
7 changes: 2 additions & 5 deletions kernel/trace/trace_syscalls.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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++) {
Expand All @@ -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

Expand Down

0 comments on commit 5f893b2

Please sign in to comment.