Functional fixes:
- Fix big endian conversion for arm64 in recordmcount processing - Fix timestamp corruption in ring buffer on discarding events - Fix memory leak in __create_synth_event() - Skip selftests if tracing is disabled as it will cause them to fail. Non-functional fixes: - Fix help text in Kconfig - Remove duplicate prototype for trace_empty() - Fix stale comment about the trace_event_call flags. Self test update: - Add more information to the validation output of when a corrupt timestamp is found in the ring buffer, and also trigger a warning to make sure that tests catch it. -----BEGIN PGP SIGNATURE----- iIoEABYIADIWIQRRSw7ePDh/lE+zeZMp5XQQmuv6qgUCYEI7FxQccm9zdGVkdEBn b29kbWlzLm9yZwAKCRAp5XQQmuv6qrnYAP93jtHWFVYqhvGs8tVxpIus6wwFS5q8 T5VPEYp5ucHuRgD6A/MTmzi4zYeTYd8XwyzX6DC0XLhaGkRKDe/PC1V5jA8= =tBtN -----END PGP SIGNATURE----- Merge tag 'trace-v5.12-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace Pull tracing fixes from Steven Rostedt: "Functional fixes: - Fix big endian conversion for arm64 in recordmcount processing - Fix timestamp corruption in ring buffer on discarding events - Fix memory leak in __create_synth_event() - Skip selftests if tracing is disabled as it will cause them to fail. Non-functional fixes: - Fix help text in Kconfig - Remove duplicate prototype for trace_empty() - Fix stale comment about the trace_event_call flags. Self test update: - Add more information to the validation output of when a corrupt timestamp is found in the ring buffer, and also trigger a warning to make sure that tests catch it" * tag 'trace-v5.12-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace: tracing: Fix comment about the trace_event_call flags tracing: Skip selftests if tracing is disabled tracing: Fix memory leak in __create_synth_event() ring-buffer: Add a little more information and a WARN when time stamp going backwards is detected ring-buffer: Force before_stamp and write_stamp to be different on discard tracing: Fix help text of TRACEPOINT_BENCHMARK in Kconfig tracing: Remove duplicate declaration from trace.h ftrace: Have recordmcount use w8 to read relp->r_info in arm64_is_fake_mcount
This commit is contained in:
commit
54663cf398
|
@ -349,15 +349,8 @@ struct trace_event_call {
|
|||
struct event_filter *filter;
|
||||
void *mod;
|
||||
void *data;
|
||||
/*
|
||||
* bit 0: filter_active
|
||||
* bit 1: allow trace by non root (cap any)
|
||||
* bit 2: failed to apply filter
|
||||
* bit 3: trace internal event (do not enable)
|
||||
* bit 4: Event was enabled by module
|
||||
* bit 5: use call filter rather than file filter
|
||||
* bit 6: Event is a tracepoint
|
||||
*/
|
||||
|
||||
/* See the TRACE_EVENT_FL_* flags above */
|
||||
int flags; /* static flags of different events */
|
||||
|
||||
#ifdef CONFIG_PERF_EVENTS
|
||||
|
|
|
@ -694,7 +694,7 @@ config TRACEPOINT_BENCHMARK
|
|||
help
|
||||
This option creates the tracepoint "benchmark:benchmark_event".
|
||||
When the tracepoint is enabled, it kicks off a kernel thread that
|
||||
goes into an infinite loop (calling cond_sched() to let other tasks
|
||||
goes into an infinite loop (calling cond_resched() to let other tasks
|
||||
run), and calls the tracepoint. Each iteration will record the time
|
||||
it took to write to the tracepoint and the next iteration that
|
||||
data will be passed to the tracepoint itself. That is, the tracepoint
|
||||
|
|
|
@ -2814,6 +2814,17 @@ rb_try_to_discard(struct ring_buffer_per_cpu *cpu_buffer,
|
|||
write_stamp, write_stamp - delta))
|
||||
return 0;
|
||||
|
||||
/*
|
||||
* It's possible that the event time delta is zero
|
||||
* (has the same time stamp as the previous event)
|
||||
* in which case write_stamp and before_stamp could
|
||||
* be the same. In such a case, force before_stamp
|
||||
* to be different than write_stamp. It doesn't
|
||||
* matter what it is, as long as its different.
|
||||
*/
|
||||
if (!delta)
|
||||
rb_time_set(&cpu_buffer->before_stamp, 0);
|
||||
|
||||
/*
|
||||
* If an event were to come in now, it would see that the
|
||||
* write_stamp and the before_stamp are different, and assume
|
||||
|
@ -3307,9 +3318,13 @@ static void check_buffer(struct ring_buffer_per_cpu *cpu_buffer,
|
|||
goto out;
|
||||
}
|
||||
atomic_inc(&cpu_buffer->record_disabled);
|
||||
pr_warn("[CPU: %d]TIME DOES NOT MATCH expected:%lld actual:%lld delta:%lld after:%lld\n",
|
||||
cpu_buffer->cpu,
|
||||
ts + info->delta, info->ts, info->delta, info->after);
|
||||
/* There's some cases in boot up that this can happen */
|
||||
WARN_ON_ONCE(system_state != SYSTEM_BOOTING);
|
||||
pr_warn("[CPU: %d]TIME DOES NOT MATCH expected:%lld actual:%lld delta:%lld before:%lld after:%lld%s\n",
|
||||
cpu_buffer->cpu,
|
||||
ts + info->delta, info->ts, info->delta,
|
||||
info->before, info->after,
|
||||
full ? " (full)" : "");
|
||||
dump_buffer_page(bpage, info, tail);
|
||||
atomic_dec(&ts_dump);
|
||||
/* Do not re-enable checking */
|
||||
|
|
|
@ -1929,6 +1929,12 @@ static int run_tracer_selftest(struct tracer *type)
|
|||
if (!selftests_can_run)
|
||||
return save_selftest(type);
|
||||
|
||||
if (!tracing_is_on()) {
|
||||
pr_warn("Selftest for tracer %s skipped due to tracing disabled\n",
|
||||
type->name);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Run a selftest on this tracer.
|
||||
* Here we reset the trace buffer, and set the current
|
||||
|
|
|
@ -605,7 +605,6 @@ void trace_graph_function(struct trace_array *tr,
|
|||
void trace_latency_header(struct seq_file *m);
|
||||
void trace_default_header(struct seq_file *m);
|
||||
void print_trace_header(struct seq_file *m, struct trace_iterator *iter);
|
||||
int trace_empty(struct trace_iterator *iter);
|
||||
|
||||
void trace_graph_return(struct ftrace_graph_ret *trace);
|
||||
int trace_graph_entry(struct ftrace_graph_ent *trace);
|
||||
|
|
|
@ -1225,8 +1225,10 @@ static int __create_synth_event(const char *name, const char *raw_fields)
|
|||
goto err;
|
||||
}
|
||||
|
||||
if (!argc)
|
||||
if (!argc) {
|
||||
argv_free(argv);
|
||||
continue;
|
||||
}
|
||||
|
||||
n_fields_this_loop = 0;
|
||||
consumed = 0;
|
||||
|
|
|
@ -438,7 +438,7 @@ static int arm_is_fake_mcount(Elf32_Rel const *rp)
|
|||
|
||||
static int arm64_is_fake_mcount(Elf64_Rel const *rp)
|
||||
{
|
||||
return ELF64_R_TYPE(w(rp->r_info)) != R_AARCH64_CALL26;
|
||||
return ELF64_R_TYPE(w8(rp->r_info)) != R_AARCH64_CALL26;
|
||||
}
|
||||
|
||||
/* 64-bit EM_MIPS has weird ELF64_Rela.r_info.
|
||||
|
|
Loading…
Reference in New Issue