]> Git Repo - J-linux.git/commitdiff
tracing: Update function tracing output for previous boot buffer
authorSteven Rostedt (Google) <[email protected]>
Wed, 12 Jun 2024 23:19:46 +0000 (19:19 -0400)
committerSteven Rostedt (Google) <[email protected]>
Fri, 14 Jun 2024 16:28:22 +0000 (12:28 -0400)
For a persistent ring buffer that is saved across boots, if function
tracing was performed in the previous boot, it only saves the address of
the functions and uses "%pS" to print their names. But the current boot,
those functions may be in different locations. The persistent meta-data
saves the text delta between the two boots and can be used to find the
address of the saved function of where it is located in the current boot.

Link: https://lkml.kernel.org/r/[email protected]
Cc: Masami Hiramatsu <[email protected]>
Cc: Mark Rutland <[email protected]>
Cc: Mathieu Desnoyers <[email protected]>
Cc: Andrew Morton <[email protected]>
Cc: Vincent Donnefort <[email protected]>
Cc: Joel Fernandes <[email protected]>
Cc: Daniel Bristot de Oliveira <[email protected]>
Cc: Ingo Molnar <[email protected]>
Cc: Peter Zijlstra <[email protected]>
Cc: Thomas Gleixner <[email protected]>
Cc: Vineeth Pillai <[email protected]>
Cc: Youssef Esmat <[email protected]>
Cc: Beau Belgrave <[email protected]>
Cc: Alexander Graf <[email protected]>
Cc: Baoquan He <[email protected]>
Cc: Borislav Petkov <[email protected]>
Cc: "Paul E. McKenney" <[email protected]>
Cc: David Howells <[email protected]>
Cc: Mike Rapoport <[email protected]>
Cc: Dave Hansen <[email protected]>
Cc: Tony Luck <[email protected]>
Cc: Guenter Roeck <[email protected]>
Cc: Ross Zwisler <[email protected]>
Cc: Kees Cook <[email protected]>
Signed-off-by: Steven Rostedt (Google) <[email protected]>
kernel/trace/trace_output.c

index d8b302d0108302d9ef2debe735c4b7778a217f90..b9d2c64c06484f69fc1949e9672bee06ea95604c 100644 (file)
@@ -990,8 +990,11 @@ enum print_line_t trace_nop_print(struct trace_iterator *iter, int flags,
 }
 
 static void print_fn_trace(struct trace_seq *s, unsigned long ip,
-                          unsigned long parent_ip, int flags)
+                          unsigned long parent_ip, long delta, int flags)
 {
+       ip += delta;
+       parent_ip += delta;
+
        seq_print_ip_sym(s, ip, flags);
 
        if ((flags & TRACE_ITER_PRINT_PARENT) && parent_ip) {
@@ -1009,7 +1012,7 @@ static enum print_line_t trace_fn_trace(struct trace_iterator *iter, int flags,
 
        trace_assign_type(field, iter->ent);
 
-       print_fn_trace(s, field->ip, field->parent_ip, flags);
+       print_fn_trace(s, field->ip, field->parent_ip, iter->tr->text_delta, flags);
        trace_seq_putc(s, '\n');
 
        return trace_handle_return(s);
@@ -1674,7 +1677,7 @@ trace_func_repeats_print(struct trace_iterator *iter, int flags,
 
        trace_assign_type(field, iter->ent);
 
-       print_fn_trace(s, field->ip, field->parent_ip, flags);
+       print_fn_trace(s, field->ip, field->parent_ip, iter->tr->text_delta, flags);
        trace_seq_printf(s, " (repeats: %u, last_ts:", field->count);
        trace_print_time(s, iter,
                         iter->ts - FUNC_REPEATS_GET_DELTA_TS(field));
This page took 0.052967 seconds and 4 git commands to generate.