http://patchwork.kernel.org/patch/18485/

Comments

Ingo Molnar - 2009-04-16 08:39:34
* Steven Rostedt <rost...@goodmis.org> wrote:

> From: Steven Rostedt <srost...@redhat.com>
> 
> As events start to become popular, and the new way to add tracing 
> infrastructure into ftrace, it is important to catch any problems 
> that might happen with a mistake in the TRACE_EVENT macro.
> 
> This patch introduces a startup self test on the registered trace 
> events. Note, it can only do a generic test, any type of testing 
> that needs more involement is needed to be implemented by the 
> tracepoint creators.
> 
> The test goes down one by one enabling a trace point and running 
> some random tasks (random in the sense that I just made them up). 
> Those tasks are creating threads, grabbing mutexes and spinlocks 
> and using workqueues.
> 
> After testing each event individually, it does the same test after
> enabling each system of trace points. Like sched, irq, lockdep.
> 
> Then finally it enables all tracepoints and performs the tasks 
> again. The output to the console on bootup will look like this 
> when everything works:
> 
> Running tests on trace events:
> Testing event kfree_skb: OK
> Testing event kmalloc: OK
> Testing event kmem_cache_alloc: OK
> Testing event kmalloc_node: OK
> Testing event kmem_cache_alloc_node: OK
> Testing event kfree: OK
> Testing event kmem_cache_free: OK
> Testing event irq_handler_exit: OK
> Testing event irq_handler_entry: OK
> Testing event softirq_entry: OK
> Testing event softirq_exit: OK
> Testing event lock_acquire: OK
> Testing event lock_release: OK
> Testing event sched_kthread_stop: OK
> Testing event sched_kthread_stop_ret: OK
> Testing event sched_wait_task: OK
> Testing event sched_wakeup: OK
> Testing event sched_wakeup_new: OK
> Testing event sched_switch: OK
> Testing event sched_migrate_task: OK
> Testing event sched_process_free: OK
> Testing event sched_process_exit: OK
> Testing event sched_process_wait: OK
> Testing event sched_process_fork: OK
> Testing event sched_signal_send: OK
> Running tests on trace event systems:
> Testing event system skb: OK
> Testing event system kmem: OK
> Testing event system irq: OK
> Testing event system lockdep: OK
> Testing event system sched: OK
> Running tests on all trace events:
> Testing all events: OK

Thanks Steve, really nice!

/root/linux-2.6/kernel/trace>grep EXPORT *.c
blktrace.c:EXPORT_SYMBOL_GPL(__trace_note_message);
blktrace.c:EXPORT_SYMBOL_GPL(blk_trace_remove);
blktrace.c:EXPORT_SYMBOL_GPL(blk_trace_setup);
blktrace.c:EXPORT_SYMBOL_GPL(blk_trace_startstop);
blktrace.c:EXPORT_SYMBOL_GPL(blk_add_driver_data);
ring_buffer.c:EXPORT_SYMBOL_GPL(tracing_on);
ring_buffer.c:EXPORT_SYMBOL_GPL(tracing_off);
ring_buffer.c:EXPORT_SYMBOL_GPL(tracing_is_on);
ring_buffer.c:EXPORT_SYMBOL_GPL(ring_buffer_event_length);
ring_buffer.c:EXPORT_SYMBOL_GPL(ring_buffer_event_data);
ring_buffer.c:EXPORT_SYMBOL_GPL(ring_buffer_time_stamp);
ring_buffer.c:EXPORT_SYMBOL_GPL(ring_buffer_normalize_time_stamp);
ring_buffer.c:EXPORT_SYMBOL_GPL(__ring_buffer_alloc);
ring_buffer.c:EXPORT_SYMBOL_GPL(ring_buffer_free);
ring_buffer.c:EXPORT_SYMBOL_GPL(ring_buffer_resize);
ring_buffer.c:EXPORT_SYMBOL_GPL(ring_buffer_lock_reserve);
ring_buffer.c:EXPORT_SYMBOL_GPL(ring_buffer_unlock_commit);
ring_buffer.c:EXPORT_SYMBOL_GPL(ring_buffer_event_discard);
ring_buffer.c:EXPORT_SYMBOL_GPL(ring_buffer_discard_commit);
ring_buffer.c:EXPORT_SYMBOL_GPL(ring_buffer_write);
ring_buffer.c:EXPORT_SYMBOL_GPL(ring_buffer_record_disable);
ring_buffer.c:EXPORT_SYMBOL_GPL(ring_buffer_record_enable);
ring_buffer.c:EXPORT_SYMBOL_GPL(ring_buffer_record_disable_cpu);
ring_buffer.c:EXPORT_SYMBOL_GPL(ring_buffer_record_enable_cpu);
ring_buffer.c:EXPORT_SYMBOL_GPL(ring_buffer_entries_cpu);
ring_buffer.c:EXPORT_SYMBOL_GPL(ring_buffer_overrun_cpu);
ring_buffer.c:EXPORT_SYMBOL_GPL(ring_buffer_nmi_dropped_cpu);
ring_buffer.c:EXPORT_SYMBOL_GPL(ring_buffer_commit_overrun_cpu);
ring_buffer.c:EXPORT_SYMBOL_GPL(ring_buffer_entries);
ring_buffer.c:EXPORT_SYMBOL_GPL(ring_buffer_overruns);
ring_buffer.c:EXPORT_SYMBOL_GPL(ring_buffer_iter_reset);
ring_buffer.c:EXPORT_SYMBOL_GPL(ring_buffer_iter_empty);
ring_buffer.c:EXPORT_SYMBOL_GPL(ring_buffer_peek);
ring_buffer.c:EXPORT_SYMBOL_GPL(ring_buffer_iter_peek);
ring_buffer.c:EXPORT_SYMBOL_GPL(ring_buffer_consume);
ring_buffer.c:EXPORT_SYMBOL_GPL(ring_buffer_read_start);
ring_buffer.c:EXPORT_SYMBOL_GPL(ring_buffer_read_finish);
ring_buffer.c:EXPORT_SYMBOL_GPL(ring_buffer_read);
ring_buffer.c:EXPORT_SYMBOL_GPL(ring_buffer_size);
ring_buffer.c:EXPORT_SYMBOL_GPL(ring_buffer_reset_cpu);
ring_buffer.c:EXPORT_SYMBOL_GPL(ring_buffer_reset);
ring_buffer.c:EXPORT_SYMBOL_GPL(ring_buffer_empty);
ring_buffer.c:EXPORT_SYMBOL_GPL(ring_buffer_empty_cpu);
ring_buffer.c:EXPORT_SYMBOL_GPL(ring_buffer_swap_cpu);
ring_buffer.c:EXPORT_SYMBOL_GPL(ring_buffer_alloc_read_page);
ring_buffer.c:EXPORT_SYMBOL_GPL(ring_buffer_free_read_page);
ring_buffer.c:EXPORT_SYMBOL_GPL(ring_buffer_read_page);
trace_branch.c:EXPORT_SYMBOL(ftrace_likely_update);
trace.c:EXPORT_SYMBOL_GPL(filter_current_check_discard);
trace.c:EXPORT_SYMBOL_GPL(trace_current_buffer_lock_reserve);
trace.c:EXPORT_SYMBOL_GPL(trace_current_buffer_unlock_commit);
trace.c:EXPORT_SYMBOL_GPL(trace_nowake_buffer_unlock_commit);
trace.c:EXPORT_SYMBOL_GPL(trace_current_buffer_discard_commit);
trace.c:EXPORT_SYMBOL_GPL(trace_vbprintk);
trace.c:EXPORT_SYMBOL_GPL(trace_vprintk);
trace_events.c:EXPORT_SYMBOL_GPL(trace_define_field);
trace_events_filter.c:EXPORT_SYMBOL_GPL(filter_match_preds);
trace_events_filter.c:EXPORT_SYMBOL_GPL(init_preds);
trace_irqsoff.c:EXPORT_SYMBOL_GPL(start_critical_timings);
trace_irqsoff.c:EXPORT_SYMBOL_GPL(stop_critical_timings);
trace_irqsoff.c:EXPORT_SYMBOL(trace_hardirqs_on);
trace_irqsoff.c:EXPORT_SYMBOL(trace_hardirqs_off);
trace_irqsoff.c:EXPORT_SYMBOL(trace_hardirqs_on_caller);
trace_irqsoff.c:EXPORT_SYMBOL(trace_hardirqs_off_caller);
trace_output.c:EXPORT_PER_CPU_SYMBOL(ftrace_event_seq);
trace_output.c:EXPORT_SYMBOL_GPL(trace_seq_printf);
trace_output.c:EXPORT_SYMBOL_GPL(trace_seq_vprintf);
trace_output.c:EXPORT_SYMBOL(ftrace_print_flags_seq);
trace_output.c:EXPORT_SYMBOL(ftrace_print_symbols_seq);
trace_output.c:EXPORT_SYMBOL_GPL(register_ftrace_event);
trace_output.c:EXPORT_SYMBOL_GPL(unregister_ftrace_event);
trace_printk.c:EXPORT_SYMBOL_GPL(__trace_bprintk);
trace_printk.c:EXPORT_SYMBOL_GPL(__ftrace_vbprintk);
trace_printk.c:EXPORT_SYMBOL_GPL(__trace_printk);
trace_printk.c:EXPORT_SYMBOL_GPL(__ftrace_vprintk);

	



Reply via email to