The first two patches fix the debugfs README file to reflect better

the new features added to 3.14.
 
 The third patch is a minor bugfix to the trace_puts() functions that
 will crash the system if a developer adds one before the tracing system
 is setup. It also affects trace_printk() if it has no arguments, as
 the code will convert it to a trace_puts() as well. Note, this bug
 will not affect unmodified kernels, as trace_printk() and trace_puts()
 should only be used by developers for testing.
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1.4.15 (GNU/Linux)
 
 iQEcBAABAgAGBQJS5oAkAAoJEKQekfcNnQGuOfkH/1ScwoRslERCCjhPEZu958bG
 VugNvliB/uDwq3qkmBcncMHwqkFBgJay9ieah+JFeK6x3G6mO/uf+UhN5cmLzVBh
 vA5dKR2zW6WTxKYSvXYapD7OzC7R+V6CLvpMl5WMZ1t3ESQhR6gUrpPdigecBWs9
 015rMVA2xXjNnHNDM1nem1PhnMba78A/N98lFErYGpvVBjkCpB8mSt8adds9bYp8
 a83P6tGUfXvsYO3sOqqBnOOqcfzCjjJbmr94v/F+SmLyuxuV0tVzBkIwXkKTNhEK
 bQZj9Pfe+1oIkldXxstn5jWaOvI6RlAGW4b4qXt30AgrGRSyEo5xpvfLfyNUif4=
 =N3kq
 -----END PGP SIGNATURE-----

Merge tag 'trace-fixes-3.14' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace

Pull tracing fixes from Steven Rostedt:
 "The first two patches fix the debugfs README file to reflect better
  the new features added to 3.14.

  The third patch is a minor bugfix to the trace_puts() functions that
  will crash the system if a developer adds one before the tracing
  system is setup.  It also affects trace_printk() if it has no
  arguments, as the code will convert it to a trace_puts() as well.

  Note, this bug will not affect unmodified kernels, as trace_printk()
  and trace_puts() should only be used by developers for testing"

* tag 'trace-fixes-3.14' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace:
  tracing: Check if tracing is enabled in trace_puts()
  tracing: Fix formatting of trace README file
  tracing/README: Add event file usage to tracing mini-HOWTO
This commit is contained in:
Linus Torvalds 2014-01-27 08:22:30 -08:00
commit ba635f8cd2

View file

@ -455,6 +455,9 @@ int __trace_puts(unsigned long ip, const char *str, int size)
unsigned long irq_flags; unsigned long irq_flags;
int alloc; int alloc;
if (unlikely(tracing_selftest_running || tracing_disabled))
return 0;
alloc = sizeof(*entry) + size + 2; /* possible \n added */ alloc = sizeof(*entry) + size + 2; /* possible \n added */
local_save_flags(irq_flags); local_save_flags(irq_flags);
@ -495,6 +498,9 @@ int __trace_bputs(unsigned long ip, const char *str)
unsigned long irq_flags; unsigned long irq_flags;
int size = sizeof(struct bputs_entry); int size = sizeof(struct bputs_entry);
if (unlikely(tracing_selftest_running || tracing_disabled))
return 0;
local_save_flags(irq_flags); local_save_flags(irq_flags);
buffer = global_trace.trace_buffer.buffer; buffer = global_trace.trace_buffer.buffer;
event = trace_buffer_lock_reserve(buffer, TRACE_BPUTS, size, event = trace_buffer_lock_reserve(buffer, TRACE_BPUTS, size,
@ -3519,60 +3525,103 @@ static const char readme_msg[] =
" instances\t\t- Make sub-buffers with: mkdir instances/foo\n" " instances\t\t- Make sub-buffers with: mkdir instances/foo\n"
"\t\t\t Remove sub-buffer with rmdir\n" "\t\t\t Remove sub-buffer with rmdir\n"
" trace_options\t\t- Set format or modify how tracing happens\n" " trace_options\t\t- Set format or modify how tracing happens\n"
"\t\t\t Disable an option by adding a suffix 'no' to the option name\n" "\t\t\t Disable an option by adding a suffix 'no' to the\n"
"\t\t\t option name\n"
#ifdef CONFIG_DYNAMIC_FTRACE #ifdef CONFIG_DYNAMIC_FTRACE
"\n available_filter_functions - list of functions that can be filtered on\n" "\n available_filter_functions - list of functions that can be filtered on\n"
" set_ftrace_filter\t- echo function name in here to only trace these functions\n" " set_ftrace_filter\t- echo function name in here to only trace these\n"
" accepts: func_full_name, *func_end, func_begin*, *func_middle*\n" "\t\t\t functions\n"
" modules: Can select a group via module\n" "\t accepts: func_full_name, *func_end, func_begin*, *func_middle*\n"
" Format: :mod:<module-name>\n" "\t modules: Can select a group via module\n"
" example: echo :mod:ext3 > set_ftrace_filter\n" "\t Format: :mod:<module-name>\n"
" triggers: a command to perform when function is hit\n" "\t example: echo :mod:ext3 > set_ftrace_filter\n"
" Format: <function>:<trigger>[:count]\n" "\t triggers: a command to perform when function is hit\n"
" trigger: traceon, traceoff\n" "\t Format: <function>:<trigger>[:count]\n"
" enable_event:<system>:<event>\n" "\t trigger: traceon, traceoff\n"
" disable_event:<system>:<event>\n" "\t\t enable_event:<system>:<event>\n"
"\t\t disable_event:<system>:<event>\n"
#ifdef CONFIG_STACKTRACE #ifdef CONFIG_STACKTRACE
" stacktrace\n" "\t\t stacktrace\n"
#endif #endif
#ifdef CONFIG_TRACER_SNAPSHOT #ifdef CONFIG_TRACER_SNAPSHOT
" snapshot\n" "\t\t snapshot\n"
#endif #endif
" example: echo do_fault:traceoff > set_ftrace_filter\n" "\t example: echo do_fault:traceoff > set_ftrace_filter\n"
" echo do_trap:traceoff:3 > set_ftrace_filter\n" "\t echo do_trap:traceoff:3 > set_ftrace_filter\n"
" The first one will disable tracing every time do_fault is hit\n" "\t The first one will disable tracing every time do_fault is hit\n"
" The second will disable tracing at most 3 times when do_trap is hit\n" "\t The second will disable tracing at most 3 times when do_trap is hit\n"
" The first time do trap is hit and it disables tracing, the counter\n" "\t The first time do trap is hit and it disables tracing, the\n"
" will decrement to 2. If tracing is already disabled, the counter\n" "\t counter will decrement to 2. If tracing is already disabled,\n"
" will not decrement. It only decrements when the trigger did work\n" "\t the counter will not decrement. It only decrements when the\n"
" To remove trigger without count:\n" "\t trigger did work\n"
" echo '!<function>:<trigger> > set_ftrace_filter\n" "\t To remove trigger without count:\n"
" To remove trigger with a count:\n" "\t echo '!<function>:<trigger> > set_ftrace_filter\n"
" echo '!<function>:<trigger>:0 > set_ftrace_filter\n" "\t To remove trigger with a count:\n"
"\t echo '!<function>:<trigger>:0 > set_ftrace_filter\n"
" set_ftrace_notrace\t- echo function name in here to never trace.\n" " set_ftrace_notrace\t- echo function name in here to never trace.\n"
" accepts: func_full_name, *func_end, func_begin*, *func_middle*\n" "\t accepts: func_full_name, *func_end, func_begin*, *func_middle*\n"
" modules: Can select a group via module command :mod:\n" "\t modules: Can select a group via module command :mod:\n"
" Does not accept triggers\n" "\t Does not accept triggers\n"
#endif /* CONFIG_DYNAMIC_FTRACE */ #endif /* CONFIG_DYNAMIC_FTRACE */
#ifdef CONFIG_FUNCTION_TRACER #ifdef CONFIG_FUNCTION_TRACER
" set_ftrace_pid\t- Write pid(s) to only function trace those pids (function)\n" " set_ftrace_pid\t- Write pid(s) to only function trace those pids\n"
"\t\t (function)\n"
#endif #endif
#ifdef CONFIG_FUNCTION_GRAPH_TRACER #ifdef CONFIG_FUNCTION_GRAPH_TRACER
" set_graph_function\t- Trace the nested calls of a function (function_graph)\n" " set_graph_function\t- Trace the nested calls of a function (function_graph)\n"
" max_graph_depth\t- Trace a limited depth of nested calls (0 is unlimited)\n" " max_graph_depth\t- Trace a limited depth of nested calls (0 is unlimited)\n"
#endif #endif
#ifdef CONFIG_TRACER_SNAPSHOT #ifdef CONFIG_TRACER_SNAPSHOT
"\n snapshot\t\t- Like 'trace' but shows the content of the static snapshot buffer\n" "\n snapshot\t\t- Like 'trace' but shows the content of the static\n"
"\t\t\t Read the contents for more information\n" "\t\t\t snapshot buffer. Read the contents for more\n"
"\t\t\t information\n"
#endif #endif
#ifdef CONFIG_STACK_TRACER #ifdef CONFIG_STACK_TRACER
" stack_trace\t\t- Shows the max stack trace when active\n" " stack_trace\t\t- Shows the max stack trace when active\n"
" stack_max_size\t- Shows current max stack size that was traced\n" " stack_max_size\t- Shows current max stack size that was traced\n"
"\t\t\t Write into this file to reset the max size (trigger a new trace)\n" "\t\t\t Write into this file to reset the max size (trigger a\n"
"\t\t\t new trace)\n"
#ifdef CONFIG_DYNAMIC_FTRACE #ifdef CONFIG_DYNAMIC_FTRACE
" stack_trace_filter\t- Like set_ftrace_filter but limits what stack_trace traces\n" " stack_trace_filter\t- Like set_ftrace_filter but limits what stack_trace\n"
"\t\t\t traces\n"
#endif #endif
#endif /* CONFIG_STACK_TRACER */ #endif /* CONFIG_STACK_TRACER */
" events/\t\t- Directory containing all trace event subsystems:\n"
" enable\t\t- Write 0/1 to enable/disable tracing of all events\n"
" events/<system>/\t- Directory containing all trace events for <system>:\n"
" enable\t\t- Write 0/1 to enable/disable tracing of all <system>\n"
"\t\t\t events\n"
" filter\t\t- If set, only events passing filter are traced\n"
" events/<system>/<event>/\t- Directory containing control files for\n"
"\t\t\t <event>:\n"
" enable\t\t- Write 0/1 to enable/disable tracing of <event>\n"
" filter\t\t- If set, only events passing filter are traced\n"
" trigger\t\t- If set, a command to perform when event is hit\n"
"\t Format: <trigger>[:count][if <filter>]\n"
"\t trigger: traceon, traceoff\n"
"\t enable_event:<system>:<event>\n"
"\t disable_event:<system>:<event>\n"
#ifdef CONFIG_STACKTRACE
"\t\t stacktrace\n"
#endif
#ifdef CONFIG_TRACER_SNAPSHOT
"\t\t snapshot\n"
#endif
"\t example: echo traceoff > events/block/block_unplug/trigger\n"
"\t echo traceoff:3 > events/block/block_unplug/trigger\n"
"\t echo 'enable_event:kmem:kmalloc:3 if nr_rq > 1' > \\\n"
"\t events/block/block_unplug/trigger\n"
"\t The first disables tracing every time block_unplug is hit.\n"
"\t The second disables tracing the first 3 times block_unplug is hit.\n"
"\t The third enables the kmalloc event the first 3 times block_unplug\n"
"\t is hit and has value of greater than 1 for the 'nr_rq' event field.\n"
"\t Like function triggers, the counter is only decremented if it\n"
"\t enabled or disabled tracing.\n"
"\t To remove a trigger without a count:\n"
"\t echo '!<trigger> > <system>/<event>/trigger\n"
"\t To remove a trigger with a count:\n"
"\t echo '!<trigger>:0 > <system>/<event>/trigger\n"
"\t Filters can be ignored when removing a trigger.\n"
; ;
static ssize_t static ssize_t