tracing: Do not disable tracing when reading the trace file
When opening the "trace" file, it is no longer necessary to disable tracing. Note, a new option is created called "pause-on-trace", when set, will cause the trace file to emulate its original behavior. Link: http://lkml.kernel.org/r/20200317213416.903351225@goodmis.org Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
This commit is contained in:
Родитель
1039221cc2
Коммит
06e0a548ba
|
@ -1125,6 +1125,12 @@ Here are the available options:
|
||||||
the trace displays additional information about the
|
the trace displays additional information about the
|
||||||
latency, as described in "Latency trace format".
|
latency, as described in "Latency trace format".
|
||||||
|
|
||||||
|
pause-on-trace
|
||||||
|
When set, opening the trace file for read, will pause
|
||||||
|
writing to the ring buffer (as if tracing_on was set to zero).
|
||||||
|
This simulates the original behavior of the trace file.
|
||||||
|
When the file is closed, tracing will be enabled again.
|
||||||
|
|
||||||
record-cmd
|
record-cmd
|
||||||
When any event or tracer is enabled, a hook is enabled
|
When any event or tracer is enabled, a hook is enabled
|
||||||
in the sched_switch trace point to fill comm cache
|
in the sched_switch trace point to fill comm cache
|
||||||
|
|
|
@ -4273,8 +4273,11 @@ __tracing_open(struct inode *inode, struct file *file, bool snapshot)
|
||||||
if (trace_clocks[tr->clock_id].in_ns)
|
if (trace_clocks[tr->clock_id].in_ns)
|
||||||
iter->iter_flags |= TRACE_FILE_TIME_IN_NS;
|
iter->iter_flags |= TRACE_FILE_TIME_IN_NS;
|
||||||
|
|
||||||
/* stop the trace while dumping if we are not opening "snapshot" */
|
/*
|
||||||
if (!iter->snapshot)
|
* If pause-on-trace is enabled, then stop the trace while
|
||||||
|
* dumping, unless this is the "snapshot" file
|
||||||
|
*/
|
||||||
|
if (!iter->snapshot && (tr->trace_flags & TRACE_ITER_PAUSE_ON_TRACE))
|
||||||
tracing_stop_tr(tr);
|
tracing_stop_tr(tr);
|
||||||
|
|
||||||
if (iter->cpu_file == RING_BUFFER_ALL_CPUS) {
|
if (iter->cpu_file == RING_BUFFER_ALL_CPUS) {
|
||||||
|
@ -4371,7 +4374,7 @@ static int tracing_release(struct inode *inode, struct file *file)
|
||||||
if (iter->trace && iter->trace->close)
|
if (iter->trace && iter->trace->close)
|
||||||
iter->trace->close(iter);
|
iter->trace->close(iter);
|
||||||
|
|
||||||
if (!iter->snapshot)
|
if (!iter->snapshot && tr->stop_count)
|
||||||
/* reenable tracing if it was previously enabled */
|
/* reenable tracing if it was previously enabled */
|
||||||
tracing_start_tr(tr);
|
tracing_start_tr(tr);
|
||||||
|
|
||||||
|
|
|
@ -1302,6 +1302,7 @@ extern int trace_get_user(struct trace_parser *parser, const char __user *ubuf,
|
||||||
C(IRQ_INFO, "irq-info"), \
|
C(IRQ_INFO, "irq-info"), \
|
||||||
C(MARKERS, "markers"), \
|
C(MARKERS, "markers"), \
|
||||||
C(EVENT_FORK, "event-fork"), \
|
C(EVENT_FORK, "event-fork"), \
|
||||||
|
C(PAUSE_ON_TRACE, "pause-on-trace"), \
|
||||||
FUNCTION_FLAGS \
|
FUNCTION_FLAGS \
|
||||||
FGRAPH_FLAGS \
|
FGRAPH_FLAGS \
|
||||||
STACK_FLAGS \
|
STACK_FLAGS \
|
||||||
|
|
Загрузка…
Ссылка в новой задаче