tracing: Add "last_func_repeats" to struct trace_array
authorYordan Karadzhov (VMware) <y.karadz@gmail.com>
Thu, 15 Apr 2021 18:18:51 +0000 (21:18 +0300)
committerSteven Rostedt (VMware) <rostedt@goodmis.org>
Thu, 15 Apr 2021 18:50:02 +0000 (14:50 -0400)
The field is used to keep track of the consecutive (on the same CPU) calls
of a single function. This information is needed in order to consolidate
the function tracing record in the cases when a single function is called
number of times.

Link: https://lkml.kernel.org/r/20210415181854.147448-4-y.karadz@gmail.com
Signed-off-by: Yordan Karadzhov (VMware) <y.karadz@gmail.com>
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
kernel/trace/trace.c
kernel/trace/trace.h

index 507a30bf26e40f48dc3ae312fea88dc2cf6d34ca..82833be07c1ef7c3f5688f07db88b61f5e859dbd 100644 (file)
@@ -9104,6 +9104,7 @@ static int __remove_instance(struct trace_array *tr)
        ftrace_clear_pids(tr);
        ftrace_destroy_function_files(tr);
        tracefs_remove(tr->dir);
+       free_percpu(tr->last_func_repeats);
        free_trace_buffers(tr);
 
        for (i = 0; i < tr->nr_topts; i++) {
index 6a5b4c2a0fa713c692a92e419b4376e53083b6b2..a4f1b66049fd6e9be03e369e3244d89675967858 100644 (file)
@@ -262,6 +262,17 @@ struct cond_snapshot {
        cond_update_fn_t                update;
 };
 
+/*
+ * struct trace_func_repeats - used to keep track of the consecutive
+ * (on the same CPU) calls of a single function.
+ */
+struct trace_func_repeats {
+       unsigned long   ip;
+       unsigned long   parent_ip;
+       unsigned long   count;
+       u64             ts_last_call;
+};
+
 /*
  * The trace array - an array of per-CPU trace arrays. This is the
  * highest level data structure that individual tracers deal with.
@@ -358,6 +369,7 @@ struct trace_array {
 #ifdef CONFIG_TRACER_SNAPSHOT
        struct cond_snapshot    *cond_snapshot;
 #endif
+       struct trace_func_repeats       __percpu *last_func_repeats;
 };
 
 enum {