1
linux/kernel/trace
Steven Rostedt a358324466 ring-buffer: buffer record on/off switch
Impact: enable/disable ring buffer recording API added

Several kernel developers have requested that there be a way to stop
recording into the ring buffers with a simple switch that can also
be enabled from userspace. This patch addes a new kernel API to the
ring buffers called:

 tracing_on()
 tracing_off()

When tracing_off() is called, all ring buffers will not be able to record
into their buffers.

tracing_on() will enable the ring buffers again.

These two act like an on/off switch. That is, there is no counting of the
number of times tracing_off or tracing_on has been called.

A new file is added to the debugfs/tracing directory called

  tracing_on

This allows for userspace applications to also flip the switch.

  echo 0 > debugfs/tracing/tracing_on

disables the tracing.

  echo 1 > /debugfs/tracing/tracing_on

enables it.

Note, this does not disable or enable any tracers. It only sets or clears
a flag that needs to be set in order for the ring buffers to write to
their buffers. It is a global flag, and affects all ring buffers.

The buffers start out with tracing_on enabled.

There are now three flags that control recording into the buffers:

 tracing_on: which affects all ring buffer tracers.

 buffer->record_disabled: which affects an allocated buffer, which may be set
     if an anomaly is detected, and tracing is disabled.

 cpu_buffer->record_disabled: which is set by tracing_stop() or if an
     anomaly is detected. tracing_start can not reenable this if
     an anomaly occurred.

The userspace debugfs/tracing/tracing_enabled is implemented with
tracing_stop() but the user space code can not enable it if the kernel
called tracing_stop().

Userspace can enable the tracing_on even if the kernel disabled it.
It is just a switch used to stop tracing if a condition was hit.
tracing_on is not for protecting critical areas in the kernel nor is
it for stopping tracing if an anomaly occurred. This is because userspace
can reenable it at any time.

Side effect: With this patch, I discovered a dead variable in ftrace.c
  called tracing_on. This patch removes it.

Signed-off-by: Steven Rostedt <srostedt@redhat.com>
2008-11-11 15:02:04 -05:00
..
ftrace.c ring-buffer: buffer record on/off switch 2008-11-11 15:02:04 -05:00
Kconfig tracing, alpha: undefined reference to `save_stack_trace' 2008-11-03 10:12:13 +01:00
Makefile ftrace: rename FTRACE to FUNCTION_TRACER 2008-10-20 18:27:03 +02:00
ring_buffer.c ring-buffer: buffer record on/off switch 2008-11-11 15:02:04 -05:00
trace_boot.c tracing/fastboot: fix printk format typo in boot tracer 2008-10-14 10:39:23 +02:00
trace_functions.c ftrace: rename the ftrace tracer to function 2008-10-20 18:27:04 +02:00
trace_irqsoff.c ftrace: rename FTRACE to FUNCTION_TRACER 2008-10-20 18:27:03 +02:00
trace_mmiotrace.c ftrace: preempt disable over interrupt disable 2008-10-14 10:39:09 +02:00
trace_nop.c ftrace: make work with new ring buffer 2008-10-14 10:38:57 +02:00
trace_sched_switch.c ftrace: make some tracers reentrant 2008-10-14 10:39:20 +02:00
trace_sched_wakeup.c ftrace: rename FTRACE to FUNCTION_TRACER 2008-10-20 18:27:03 +02:00
trace_selftest_dynamic.c ftrace: fix dynamic ftrace selftest 2008-05-23 21:13:23 +02:00
trace_selftest.c ftrace: remove daemon 2008-10-23 16:00:22 +02:00
trace_stack.c ftrace: stack tracer only record when on stack 2008-10-20 18:31:37 +02:00
trace_sysprof.c ftrace: make work with new ring buffer 2008-10-14 10:38:57 +02:00
trace.c ftrace: disable tracing on resize 2008-11-10 21:47:35 -05:00
trace.h ftrace: handle archs that do not support irqs_disabled_flags 2008-10-31 00:03:26 +01:00