Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752934AbbDBCKA (ORCPT ); Wed, 1 Apr 2015 22:10:00 -0400 Received: from mail.kernel.org ([198.145.29.136]:33826 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752390AbbDBCJq (ORCPT ); Wed, 1 Apr 2015 22:09:46 -0400 Message-Id: <20150402015648.249824760@goodmis.org> User-Agent: quilt/0.61-1 Date: Wed, 01 Apr 2015 21:56:48 -0400 From: Steven Rostedt To: linux-kernel@vger.kernel.org Cc: Ingo Molnar , Andrew Morton , Namhyung Kim , Masami Hiramatsu , Mathieu Desnoyers Subject: [RFC][PATCH 00/17 v2] tracing: Use TRACE_DEFINE_ENUM() to show enum values Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 4492 Lines: 101 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. For debugging, a new file is still 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) 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. Local SHA1: a6862181206543b6493c73690f322868c86de0ea 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 export their trace enums as well tracing/samples: Update the trace-event-sample.h with TRACE_DEFINE_ENUM() tracing: Show the mapped enums in enum_map file 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 ---- arch/s390/kvm/trace-s390.h | 7 + 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/trace.c | 276 ++++++++++++++++++++++++++++- kernel/trace/trace.h | 2 + kernel/trace/trace_events.c | 98 +++++++++- samples/trace_events/trace-events-sample.h | 84 ++++++++- 21 files changed, 853 insertions(+), 159 deletions(-) -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/