]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
SUNRPC: Export enums in tracepoints to user space
authorSteven Rostedt (Red Hat) <rostedt@goodmis.org>
Fri, 27 Mar 2015 20:53:03 +0000 (16:53 -0400)
committerSteven Rostedt <rostedt@goodmis.org>
Wed, 8 Apr 2015 13:41:08 +0000 (09:41 -0400)
The enums used in the tracepoints for __print_symbolic() have their
names shown in the tracepoint format files. User space tools do not know
how to convert those names into their values to be able to convert the
binary data.

Use TRACE_DEFINE_ENUM() to export the enum names to their values for
userspace to do the parsing correctly.

Link: http://lkml.kernel.org/r/20150403013802.220157513@goodmis.org
Acked-by: Trond Myklebust <trond.myklebust@primarydata.com>
Reviewed-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Tested-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
include/trace/events/sunrpc.h

index b9c1dc6c825ad1e0135102f3922260c52bc22a7d..fd1a02cb3c8235d08cd6f7f579a96c91d7c21c39 100644 (file)
@@ -179,27 +179,53 @@ DEFINE_EVENT(rpc_task_queued, rpc_task_wakeup,
 
 );
 
+/*
+ * First define the enums in the below macros to be exported to userspace
+ * via TRACE_DEFINE_ENUM().
+ */
+#undef EM
+#undef EMe
+#define EM(a, b)       TRACE_DEFINE_ENUM(a);
+#define EMe(a, b)      TRACE_DEFINE_ENUM(a);
+
+#define RPC_SHOW_SOCKET                                \
+       EM( SS_FREE, "FREE" )                   \
+       EM( SS_UNCONNECTED, "UNCONNECTED" )     \
+       EM( SS_CONNECTING, "CONNECTING," )      \
+       EM( SS_CONNECTED, "CONNECTED," )        \
+       EMe(SS_DISCONNECTING, "DISCONNECTING" )
+
 #define rpc_show_socket_state(state) \
-       __print_symbolic(state, \
-               { SS_FREE, "FREE" }, \
-               { SS_UNCONNECTED, "UNCONNECTED" }, \
-               { SS_CONNECTING, "CONNECTING," }, \
-               { SS_CONNECTED, "CONNECTED," }, \
-               { SS_DISCONNECTING, "DISCONNECTING" })
+       __print_symbolic(state, RPC_SHOW_SOCKET)
+
+RPC_SHOW_SOCKET
+
+#define RPC_SHOW_SOCK                          \
+       EM( TCP_ESTABLISHED, "ESTABLISHED" )    \
+       EM( TCP_SYN_SENT, "SYN_SENT" )          \
+       EM( TCP_SYN_RECV, "SYN_RECV" )          \
+       EM( TCP_FIN_WAIT1, "FIN_WAIT1" )        \
+       EM( TCP_FIN_WAIT2, "FIN_WAIT2" )        \
+       EM( TCP_TIME_WAIT, "TIME_WAIT" )        \
+       EM( TCP_CLOSE, "CLOSE" )                \
+       EM( TCP_CLOSE_WAIT, "CLOSE_WAIT" )      \
+       EM( TCP_LAST_ACK, "LAST_ACK" )          \
+       EM( TCP_LISTEN, "LISTEN" )              \
+       EMe( TCP_CLOSING, "CLOSING" )
 
 #define rpc_show_sock_state(state) \
-       __print_symbolic(state, \
-               { TCP_ESTABLISHED, "ESTABLISHED" }, \
-               { TCP_SYN_SENT, "SYN_SENT" }, \
-               { TCP_SYN_RECV, "SYN_RECV" }, \
-               { TCP_FIN_WAIT1, "FIN_WAIT1" }, \
-               { TCP_FIN_WAIT2, "FIN_WAIT2" }, \
-               { TCP_TIME_WAIT, "TIME_WAIT" }, \
-               { TCP_CLOSE, "CLOSE" }, \
-               { TCP_CLOSE_WAIT, "CLOSE_WAIT" }, \
-               { TCP_LAST_ACK, "LAST_ACK" }, \
-               { TCP_LISTEN, "LISTEN" }, \
-               { TCP_CLOSING, "CLOSING" })
+       __print_symbolic(state, RPC_SHOW_SOCK)
+
+RPC_SHOW_SOCK
+
+/*
+ * Now redefine the EM() and EMe() macros to map the enums to the strings
+ * that will be printed in the output.
+ */
+#undef EM
+#undef EMe
+#define EM(a, b)       {a, b},
+#define EMe(a, b)      {a, b}
 
 DECLARE_EVENT_CLASS(xs_socket_event,