aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2015-04-14 13:49:03 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2015-04-14 13:49:03 -0400
commiteeee78cf77df0450ca285a7cd6d73842181e825c (patch)
tree330540323eae82977756e5086492654b9e461871 /net
parent3f3c73de77b5598e9f87812ac4da9445090c3b4a (diff)
parent9828413d4715d4ed12bc92b161f4ed377d777ffb (diff)
Merge tag 'trace-v4.1' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace
Pull tracing updates from Steven Rostedt: "Some clean ups and small fixes, but the biggest change is the addition of the TRACE_DEFINE_ENUM() macro that can be used by tracepoints. Tracepoints have helper functions for the TP_printk() called __print_symbolic() and __print_flags() that lets a numeric number be displayed as a a human comprehensible text. What is placed in the TP_printk() is also shown in the tracepoint format file such that user space tools like perf and trace-cmd can parse the binary data and express the values too. Unfortunately, the way the TRACE_EVENT() macro works, anything placed in the TP_printk() will be shown pretty much exactly as is. The problem arises when enums are used. That's because unlike macros, enums will not be changed into their values by the C pre-processor. Thus, the enum string is exported to the format file, and this makes it useless for user space tools. The TRACE_DEFINE_ENUM() solves this by converting the enum strings in the TP_printk() format into their number, and that is what is shown to user space. For example, the tracepoint tlb_flush currently has this in its format file: __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" }) After adding: TRACE_DEFINE_ENUM(TLB_FLUSH_ON_TASK_SWITCH); TRACE_DEFINE_ENUM(TLB_REMOTE_SHOOTDOWN); TRACE_DEFINE_ENUM(TLB_LOCAL_SHOOTDOWN); TRACE_DEFINE_ENUM(TLB_LOCAL_MM_SHOOTDOWN); Its format file will contain this: __print_symbolic(REC->reason, { 0, "flush on task switch" }, { 1, "remote shootdown" }, { 2, "local shootdown" }, { 3, "local mm shootdown" })" * tag 'trace-v4.1' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace: (27 commits) tracing: Add enum_map file to show enums that have been mapped writeback: Export enums used by tracepoint to user space v4l: Export enums used by tracepoints to user space SUNRPC: Export enums in tracepoints to user space mm: tracing: Export enums in tracepoints to user space irq/tracing: Export enums in tracepoints to user space f2fs: Export the enums in the tracepoints to userspace net/9p/tracing: Export enums in tracepoints to userspace x86/tlb/trace: Export enums in used by tlb_flush tracepoint tracing/samples: Update the trace-event-sample.h with TRACE_DEFINE_ENUM() tracing: Allow for modules to convert their enums to values tracing: Add TRACE_DEFINE_ENUM() macro to map enums to their values tracing: Update trace-event-sample with TRACE_SYSTEM_VAR documentation tracing: Give system name a pointer brcmsmac: Move each system tracepoints to their own header iwlwifi: Move each system tracepoints to their own header mac80211: Move message tracepoints to their own header tracing: Add TRACE_SYSTEM_VAR to xhci-hcd tracing: Add TRACE_SYSTEM_VAR to kvm-s390 tracing: Add TRACE_SYSTEM_VAR to intel-sst ...
Diffstat (limited to 'net')
-rw-r--r--net/mac80211/trace.c1
-rw-r--r--net/mac80211/trace.h38
-rw-r--r--net/mac80211/trace_msg.h53
3 files changed, 54 insertions, 38 deletions
diff --git a/net/mac80211/trace.c b/net/mac80211/trace.c
index 386e45d8a958..edfe0c170a1c 100644
--- a/net/mac80211/trace.c
+++ b/net/mac80211/trace.c
@@ -8,6 +8,7 @@
8#include "debug.h" 8#include "debug.h"
9#define CREATE_TRACE_POINTS 9#define CREATE_TRACE_POINTS
10#include "trace.h" 10#include "trace.h"
11#include "trace_msg.h"
11 12
12#ifdef CONFIG_MAC80211_MESSAGE_TRACING 13#ifdef CONFIG_MAC80211_MESSAGE_TRACING
13void __sdata_info(const char *fmt, ...) 14void __sdata_info(const char *fmt, ...)
diff --git a/net/mac80211/trace.h b/net/mac80211/trace.h
index 263a9561eb26..755a5388dbca 100644
--- a/net/mac80211/trace.h
+++ b/net/mac80211/trace.h
@@ -2312,44 +2312,6 @@ TRACE_EVENT(drv_tdls_recv_channel_switch,
2312 ) 2312 )
2313); 2313);
2314 2314
2315#ifdef CONFIG_MAC80211_MESSAGE_TRACING
2316#undef TRACE_SYSTEM
2317#define TRACE_SYSTEM mac80211_msg
2318
2319#define MAX_MSG_LEN 100
2320
2321DECLARE_EVENT_CLASS(mac80211_msg_event,
2322 TP_PROTO(struct va_format *vaf),
2323
2324 TP_ARGS(vaf),
2325
2326 TP_STRUCT__entry(
2327 __dynamic_array(char, msg, MAX_MSG_LEN)
2328 ),
2329
2330 TP_fast_assign(
2331 WARN_ON_ONCE(vsnprintf(__get_dynamic_array(msg),
2332 MAX_MSG_LEN, vaf->fmt,
2333 *vaf->va) >= MAX_MSG_LEN);
2334 ),
2335
2336 TP_printk("%s", __get_str(msg))
2337);
2338
2339DEFINE_EVENT(mac80211_msg_event, mac80211_info,
2340 TP_PROTO(struct va_format *vaf),
2341 TP_ARGS(vaf)
2342);
2343DEFINE_EVENT(mac80211_msg_event, mac80211_dbg,
2344 TP_PROTO(struct va_format *vaf),
2345 TP_ARGS(vaf)
2346);
2347DEFINE_EVENT(mac80211_msg_event, mac80211_err,
2348 TP_PROTO(struct va_format *vaf),
2349 TP_ARGS(vaf)
2350);
2351#endif
2352
2353#endif /* !__MAC80211_DRIVER_TRACE || TRACE_HEADER_MULTI_READ */ 2315#endif /* !__MAC80211_DRIVER_TRACE || TRACE_HEADER_MULTI_READ */
2354 2316
2355#undef TRACE_INCLUDE_PATH 2317#undef TRACE_INCLUDE_PATH
diff --git a/net/mac80211/trace_msg.h b/net/mac80211/trace_msg.h
new file mode 100644
index 000000000000..768f7c22a190
--- /dev/null
+++ b/net/mac80211/trace_msg.h
@@ -0,0 +1,53 @@
1#ifdef CONFIG_MAC80211_MESSAGE_TRACING
2
3#if !defined(__MAC80211_MSG_DRIVER_TRACE) || defined(TRACE_HEADER_MULTI_READ)
4#define __MAC80211_MSG_DRIVER_TRACE
5
6#include <linux/tracepoint.h>
7#include <net/mac80211.h>
8#include "ieee80211_i.h"
9
10#undef TRACE_SYSTEM
11#define TRACE_SYSTEM mac80211_msg
12
13#define MAX_MSG_LEN 100
14
15DECLARE_EVENT_CLASS(mac80211_msg_event,
16 TP_PROTO(struct va_format *vaf),
17
18 TP_ARGS(vaf),
19
20 TP_STRUCT__entry(
21 __dynamic_array(char, msg, MAX_MSG_LEN)
22 ),
23
24 TP_fast_assign(
25 WARN_ON_ONCE(vsnprintf(__get_dynamic_array(msg),
26 MAX_MSG_LEN, vaf->fmt,
27 *vaf->va) >= MAX_MSG_LEN);
28 ),
29
30 TP_printk("%s", __get_str(msg))
31);
32
33DEFINE_EVENT(mac80211_msg_event, mac80211_info,
34 TP_PROTO(struct va_format *vaf),
35 TP_ARGS(vaf)
36);
37DEFINE_EVENT(mac80211_msg_event, mac80211_dbg,
38 TP_PROTO(struct va_format *vaf),
39 TP_ARGS(vaf)
40);
41DEFINE_EVENT(mac80211_msg_event, mac80211_err,
42 TP_PROTO(struct va_format *vaf),
43 TP_ARGS(vaf)
44);
45#endif /* !__MAC80211_MSG_DRIVER_TRACE || TRACE_HEADER_MULTI_READ */
46
47#undef TRACE_INCLUDE_PATH
48#define TRACE_INCLUDE_PATH .
49#undef TRACE_INCLUDE_FILE
50#define TRACE_INCLUDE_FILE trace_msg
51#include <trace/define_trace.h>
52
53#endif