LKML Archive on lore.kernel.org
 help / color / Atom feed
From: Steven Rostedt <rostedt@goodmis.org>
To: linux-kernel@vger.kernel.org
Cc: Ingo Molnar <mingo@kernel.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	Arnaldo Carvalho de Melo <acme@kernel.org>,
	Namhyung Kim <namhyung@kernel.org>,
	Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>,
	Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Subject: [PATCH 00/18 v3] tracing: Use TRACE_DEFINE_ENUM() to show enum values
Date: Thu, 02 Apr 2015 21:38:02 -0400
Message-ID: <20150403013802.220157513@goodmis.org> (raw)

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(-)

             reply index

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-04-03  1:38 Steven Rostedt [this message]
2015-04-03  1:38 ` [PATCH 02/18 v3] tracing: Add TRACE_SYSTEM_VAR to intel-sst Steven Rostedt
2015-04-03  1:38 ` [PATCH 03/18 v3] tracing: Add TRACE_SYSTEM_VAR to kvm-s390 Steven Rostedt
2015-04-03  1:38 ` [PATCH 04/18 v3] tracing: Add TRACE_SYSTEM_VAR to xhci-hcd Steven Rostedt
2015-04-03  1:38 ` [PATCH 05/18 v3] tracing: Give system name a pointer Steven Rostedt
2015-04-03  1:38 ` [PATCH 06/18 v3] tracing: Update trace-event-sample with TRACE_SYSTEM_VAR documentation Steven Rostedt
2015-04-03  1:38 ` [PATCH 07/18 v3] tracing: Add TRACE_DEFINE_ENUM() macro to map enums to their values Steven Rostedt
2015-04-06  4:54   ` Namhyung Kim
2015-04-06 11:52     ` Steven Rostedt
2015-04-07 14:16       ` Namhyung Kim
2015-04-07 14:22         ` Steven Rostedt
2015-04-15 13:22   ` Sasha Levin
2015-04-15 14:05     ` Steven Rostedt
2015-04-16  0:58       ` Sasha Levin
2015-04-17  3:21         ` Steven Rostedt
2015-04-17  3:59           ` Sasha Levin
2015-04-17  4:44             ` [PATCH] kasan: Show gcc version requirements in Kconfig and Documentation Joe Perches
2015-04-17  7:54               ` Andrey Ryabinin
2015-04-17  9:37                 ` Joe Perches
2015-04-17 16:10                   ` [PATCH v2] " Andrey Ryabinin
2015-05-07 15:51                     ` Jonathan Corbet
2015-05-07 19:00                       ` Andrey Ryabinin
2015-04-17  7:44             ` [PATCH 07/18 v3] tracing: Add TRACE_DEFINE_ENUM() macro to map enums to their values Andrey Ryabinin
2015-04-17 13:29               ` Steven Rostedt
2015-04-17 13:51                 ` Steven Rostedt
2015-04-17 14:14                   ` Andrey Ryabinin
2015-04-03  1:38 ` [PATCH 08/18 v3] tracing: Allow for modules to convert their enums to values Steven Rostedt
2015-04-03  1:38 ` [PATCH 09/18 v3] tracing/samples: Update the trace-event-sample.h with TRACE_DEFINE_ENUM() Steven Rostedt
2015-04-03  1:38 ` [PATCH 10/18 v3] x86/tlb/trace: Export enums in used by tlb_flush tracepoint Steven Rostedt
2015-04-03  1:38 ` [PATCH 11/18 v3] net/9p/tracing: Export enums in tracepoints to userspace Steven Rostedt
2015-04-03  1:38 ` [PATCH 12/18 v3] f2fs: Export the enums in the " Steven Rostedt
2015-04-03  1:38 ` [PATCH 13/18 v3] irq/tracing: Export enums in tracepoints to user space Steven Rostedt
2015-04-03  1:38 ` [PATCH 14/18 v3] mm: tracing: " Steven Rostedt
2015-04-03  1:38 ` [PATCH 15/18 v3] SUNRPC: " Steven Rostedt
2015-04-07 16:40   ` Steven Rostedt
2015-04-07 16:58     ` Trond Myklebust
2015-04-03  1:38 ` [PATCH 16/18 v3] v4l: Export enums used by " Steven Rostedt
2015-04-03  1:38 ` [PATCH 17/18 v3] writeback: Export enums used by tracepoint " Steven Rostedt
2015-04-03  1:38 ` [PATCH 18/18 v3] tracing: Add enum_map file to show enums that have been mapped Steven Rostedt
     [not found] ` <20150403014123.069113130@goodmis.org>
2015-04-07  0:47   ` [PATCH 01/18 v3] tracing/drm: Remove unused TRACE_SYSTEM_STRING define Masami Hiramatsu
2015-04-07 11:26 ` [PATCH 00/18 v3] tracing: Use TRACE_DEFINE_ENUM() to show enum values Masami Hiramatsu
2015-04-07 12:52   ` Steven Rostedt

Reply instructions:

You may reply publically to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20150403013802.220157513@goodmis.org \
    --to=rostedt@goodmis.org \
    --cc=acme@kernel.org \
    --cc=akpm@linux-foundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=masami.hiramatsu.pt@hitachi.com \
    --cc=mathieu.desnoyers@efficios.com \
    --cc=mingo@kernel.org \
    --cc=namhyung@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

LKML Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/lkml/0 lkml/git/0.git
	git clone --mirror https://lore.kernel.org/lkml/1 lkml/git/1.git
	git clone --mirror https://lore.kernel.org/lkml/2 lkml/git/2.git
	git clone --mirror https://lore.kernel.org/lkml/3 lkml/git/3.git
	git clone --mirror https://lore.kernel.org/lkml/4 lkml/git/4.git
	git clone --mirror https://lore.kernel.org/lkml/5 lkml/git/5.git
	git clone --mirror https://lore.kernel.org/lkml/6 lkml/git/6.git
	git clone --mirror https://lore.kernel.org/lkml/7 lkml/git/7.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 lkml lkml/ https://lore.kernel.org/lkml \
		linux-kernel@vger.kernel.org
	public-inbox-index lkml

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.linux-kernel


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git