mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-01 00:58:39 +02: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
					
				
					 6 changed files with 40 additions and 8 deletions
				
			
		|  | @ -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 @@ __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) | ||||
| { | ||||
| 	/*
 | ||||
|  | @ -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 | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Steven Rostedt (Red Hat)
						Steven Rostedt (Red Hat)