|
@@ -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;
|
|
|
}
|
|
|
}
|