Skip to content

tracing: Use TRACE_DEFINE_ENUM() to show enum values

Steven Rostedt lkml 4 versions – In review

Get series with b4
b4 am [email protected]

Versions newest first · linked by author and title

  1. v3 Latest posting 2/217 of 18 patches 18 repliesIn review
  2. v3 RFC posting 1/21 of 17 patches 1 replySuperseded
  3. v2 RFC17 patches 12 repliesSuperseded
Earlier versions · 1
VersionPostedPatchesRepliesStatus
v1 RFC10 patches16 repliesSuperseded

17 of 18 patches are in this archive. The cover letter announces 18.

Patches in v3 posting 2/2 No applies recorded yet

#Subject and filesSizeRepliesApplied
2/18tracing: Add TRACE_SYSTEM_VAR to intel-sstinclude/trace/events/intel-sst.h+7 -00 replies
3/18tracing: Add TRACE_SYSTEM_VAR to kvm-s390arch/s390/kvm/trace-s390.h+7 -00 replies
4/18tracing: Add TRACE_SYSTEM_VAR to xhci-hcddrivers/usb/host/xhci-trace.h+7 -00 replies
5/18tracing: Give system name a pointerinclude/linux/ftrace_event.h include/trace/ftrace.h+18 -30 replies
6/18tracing: Update trace-event-sample with TRACE_SYSTEM_VAR documentationsamples/trace_events/trace-events-sample.h+19 -10 replies
7/18tracing: Add TRACE_DEFINE_ENUM() macro to map enums to their valuesinclude/asm-generic/vmlinux.lds.h include/linux/ftrace_event.h include/linux/tracepoint.h +4 more+178 -619 replies
8/18tracing: Allow for modules to convert their enums to valuesinclude/linux/module.h kernel/module.c kernel/trace/trace.c +1 more+51 -50 replies
9/18tracing/samples: Update the trace-event-sample.h with TRACE_DEFINE_ENUM()samples/trace_events/trace-events-sample.h+63 -10 replies
10/18x86/tlb/trace: Export enums in used by tlb_flush tracepointinclude/trace/events/tlb.h+25 -50 replies
11/18net/9p/tracing: Export enums in tracepoints to userspaceinclude/trace/events/9p.h+88 -690 replies
12/18f2fs: Export the enums in the tracepoints to userspaceinclude/trace/events/f2fs.h+30 -00 replies
13/18irq/tracing: Export enums in tracepoints to user spaceinclude/trace/events/irq.h+27 -120 replies
14/18mm: tracing: Export enums in tracepoints to user spaceinclude/trace/events/migrate.h+32 -100 replies
15/18SUNRPC: Export enums in tracepoints to user spaceinclude/trace/events/sunrpc.h+44 -182 replies
16/18v4l: Export enums used by tracepoints to user spaceinclude/trace/events/v4l2.h+50 -250 replies
17/18writeback: Export enums used by tracepoint to user spaceinclude/trace/events/writeback.h+25 -80 replies
18/18tracing: Add enum_map file to show enums that have been mappedkernel/trace/Kconfig kernel/trace/trace.c+269 -40 replies

Reviews trailers per patch

4 of 17 patches have a Reviewed-by or Acked-by of their own; the series has one for all of them.

PatchRusty RussellCornelia HuckMark BrownMasami HiramatsuTrond MyklebustAndrey Ryabinin
SeriesR-b R-b T-b
2/18A-b
3/18A-b
4/18
5/18
6/18
7/18T-b
8/18A-b
9/18
10/18
11/18
12/18
13/18
14/18
15/18A-b
16/18
17/18
18/18

Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes. Scroll the table sideways for all 6 reviewers.

Read the v3 thread

Cover letter [PATCH 00/18 v3] tracing: Use TRACE_DEFINE_ENUM() to show enum values

As there are many tracepoints that use __print_symbolic() to translate numbers into ASCII strings, and several of these translate enums as well, it causes a problem for user space tools that read the tracepoint format files and have to translate the binary data to their associated strings.

For example, with the tlb_flush tracepoint, we have this in the format file:

print fmt: "pages:%ld reason:%s (%d)", REC->pages,
__print_symbolic(REC->reason,
{ TLB_FLUSH_ON_TASK_SWITCH, "flush on task switch" }, { TLB_REMOTE_SHOOTDOWN, "remote shootdown" },
{ TLB_LOCAL_SHOOTDOWN, "local shootdown" },
{ TLB_LOCAL_MM_SHOOTDOWN, "local mm shootdown" }), REC->reason

Now, userspace does not know what the value of TLB_REMOTE_SHOOTDOWN is. To solve this, a new macro is created as a helper to allow tracepoints to export enums they use to userspace. This macro is called, TRACE_DEFINE_ENUM(), such that

TRACE_DEFINE_ENUM(TLB_REMOTE_SHOOTDOWN);

will convert the "print fmt"s in the format files to its actual value and no longer display the enum name.

On boot up (or module load), the enums saved via TRACE_DEFINE_ENUM() will be searched for in the TP_printk()s of the tracepoints. Logic knows enough to ignore quoted text.

And the output of the tlb_flush format is now:

print fmt: "pages:%ld reason:%s (%d)", REC->pages,
__print_symbolic(REC->reason,
{ 0, "flush on task switch" },
{ 1, "remote shootdown" },
{ 2, "local shootdown" },
{ 3, "local mm shootdown" }), REC->reason

And userspace tools can easily parse that without special handling.

For debugging, if CONFIG_TRACE_ENUM_MAP_FILE is enabled, a file is added in the tracing directory to show what enums were added, their values and the TRACE_SYSTEM that added them:

 # cat /sys/kernel/debug/tracing/enum_map
TLB_LOCAL_MM_SHOOTDOWN 3 (tlb)
TLB_LOCAL_SHOOTDOWN 2 (tlb)
TLB_REMOTE_SHOOTDOWN 1 (tlb)
TLB_FLUSH_ON_TASK_SWITCH 0 (tlb)

-- Steve

Local SHA1: 6689c330e3a60defc4c89da17cf5d561649bc55b

Steven Rostedt (1):
tracing/drm: Remove unused TRACE_SYSTEM_STRING define

Steven Rostedt (Red Hat) (17):
tracing: Add TRACE_SYSTEM_VAR to intel-sst
tracing: Add TRACE_SYSTEM_VAR to kvm-s390
tracing: Add TRACE_SYSTEM_VAR to xhci-hcd
tracing: Give system name a pointer
tracing: Update trace-event-sample with TRACE_SYSTEM_VAR documentation
tracing: Add TRACE_DEFINE_ENUM() macro to map enums to their values
tracing: Allow for modules to convert their enums to values tracing/samples: Update the trace-event-sample.h with TRACE_DEFINE_ENUM() x86/tlb/trace: Export enums in used by tlb_flush tracepoint net/9p/tracing: Export enums in tracepoints to userspace
f2fs: Export the enums in the tracepoints to userspace irq/tracing: Export enums in tracepoints to user space
mm: tracing: Export enums in tracepoints to user space
SUNRPC: Export enums in tracepoints to user space
v4l: Export enums used by tracepoints to user space
writeback: Export enums used by tracepoint to user space
tracing: Add enum_map file to show enums that have been mapped

----

 arch/s390/kvm/trace-s390.h                 |   7 +
 drivers/gpu/drm/drm_trace.h                |   1 -
 drivers/gpu/drm/i915/i915_trace.h          |   1 -
 drivers/gpu/drm/radeon/radeon_trace.h      |   1 -
 drivers/usb/host/xhci-trace.h              |   7 +
 include/asm-generic/vmlinux.lds.h          |   5 +-
 include/linux/ftrace_event.h               |   4 +-
 include/linux/module.h                     |   2 +
 include/linux/tracepoint.h                 |   8 +
 include/trace/events/9p.h                  | 157 ++++++++-------
 include/trace/events/f2fs.h                |  30 +++
 include/trace/events/intel-sst.h           |   7 +
 include/trace/events/irq.h                 |  39 ++--
 include/trace/events/migrate.h             |  42 +++-
 include/trace/events/sunrpc.h              |  62 ++++--
 include/trace/events/tlb.h                 |  30 ++-
 include/trace/events/v4l2.h                |  75 ++++---
 include/trace/events/writeback.h           |  33 +++-
 include/trace/ftrace.h                     |  41 +++-
 kernel/module.c                            |   3 +
 kernel/trace/Kconfig                       |  28 +++
 kernel/trace/trace.c                       | 304 ++++++++++++++++++++++++++++-
 kernel/trace/trace.h                       |   2 +
 kernel/trace/trace_events.c                | 121 +++++++++++-
 samples/trace_events/trace-events-sample.h |  84 +++++++-
 25 files changed, 932 insertions(+), 162 deletions(-)