]> www.infradead.org Git - users/willy/xarray.git/commit
tracing: Show preempt and irq events callsites from the offsets in field print
authorSteven Rostedt <rostedt@goodmis.org>
Tue, 6 May 2025 14:51:31 +0000 (10:51 -0400)
committerSteven Rostedt (Google) <rostedt@goodmis.org>
Tue, 6 May 2025 15:34:52 +0000 (11:34 -0400)
commit3e4b37160b43a24ceda672033864c594d1f5cd8b
tree9fd2470e6bdeb3f41056c34b0431c12c80a8f274
parentdc6a49d4cd2629859649883a84d6ee5a741ed03a
tracing: Show preempt and irq events callsites from the offsets in field print

When the "fields" option is set in a trace instance, it ignores the "print fmt"
portion of the trace event and just prints the raw fields defined by the
TP_STRUCT__entry() of the TRACE_EVENT() macro.

The preempt_disable/enable and irq_disable/enable events record only the
caller offset from _stext to save space in the ring buffer. Even though
the "fields" option only prints the fields, it also tries to print what
they represent too, which includes function names.

Add a check in the output of the event field printing to see if the field
name is "caller_offs" or "parent_offs" and then print the function at the
offset from _stext of that field.

Instead of just showing:

  irq_disable: caller_offs=0xba634d (12215117) parent_offs=0x39d10e2 (60625122)

Show:

  irq_disable: caller_offs=trace_hardirqs_off.part.0+0xad/0x130 0xba634d (12215117) parent_offs=_raw_spin_lock_irqsave+0x62/0x70 0x39d10e2 (60625122)

Cc: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Link: https://lore.kernel.org/20250506105131.4b6089a9@gandalf.local.home
Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
kernel/trace/trace_output.c