mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-04 17:44:14 +08:00
tracing: add global-clock option to provide cross CPU clock to traces
Impact: feature to allow better serialized clock This patch adds an option called "global-clock" that will allow the tracer to switch to a slower but more accurate (across CPUs) clock. Signed-off-by: Steven Rostedt <srostedt@redhat.com>
This commit is contained in:
parent
37886f6a9f
commit
af4617bdba
@ -315,6 +315,7 @@ static const char *trace_options[] = {
|
||||
"printk-msg-only",
|
||||
"context-info",
|
||||
"latency-format",
|
||||
"global-clock",
|
||||
NULL
|
||||
};
|
||||
|
||||
@ -2251,6 +2252,34 @@ static int set_tracer_option(struct tracer *trace, char *cmp, int neg)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void set_tracer_flags(unsigned int mask, int enabled)
|
||||
{
|
||||
/* do nothing if flag is already set */
|
||||
if (!!(trace_flags & mask) == !!enabled)
|
||||
return;
|
||||
|
||||
if (enabled)
|
||||
trace_flags |= mask;
|
||||
else
|
||||
trace_flags &= ~mask;
|
||||
|
||||
if (mask == TRACE_ITER_GLOBAL_CLK) {
|
||||
u64 (*func)(void);
|
||||
|
||||
if (enabled)
|
||||
func = trace_clock_global;
|
||||
else
|
||||
func = trace_clock_local;
|
||||
|
||||
mutex_lock(&trace_types_lock);
|
||||
ring_buffer_set_clock(global_trace.buffer, func);
|
||||
|
||||
if (max_tr.buffer)
|
||||
ring_buffer_set_clock(max_tr.buffer, func);
|
||||
mutex_unlock(&trace_types_lock);
|
||||
}
|
||||
}
|
||||
|
||||
static ssize_t
|
||||
tracing_trace_options_write(struct file *filp, const char __user *ubuf,
|
||||
size_t cnt, loff_t *ppos)
|
||||
@ -2278,10 +2307,7 @@ tracing_trace_options_write(struct file *filp, const char __user *ubuf,
|
||||
int len = strlen(trace_options[i]);
|
||||
|
||||
if (strncmp(cmp, trace_options[i], len) == 0) {
|
||||
if (neg)
|
||||
trace_flags &= ~(1 << i);
|
||||
else
|
||||
trace_flags |= (1 << i);
|
||||
set_tracer_flags(1 << i, !neg);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -667,6 +667,7 @@ enum trace_iterator_flags {
|
||||
TRACE_ITER_PRINTK_MSGONLY = 0x10000,
|
||||
TRACE_ITER_CONTEXT_INFO = 0x20000, /* Print pid/cpu/time */
|
||||
TRACE_ITER_LATENCY_FMT = 0x40000,
|
||||
TRACE_ITER_GLOBAL_CLK = 0x80000,
|
||||
};
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user