net: qrtr: Add tracepoint support
authorManivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
Tue, 21 Apr 2020 07:40:54 +0000 (13:10 +0530)
committerDavid S. Miller <davem@davemloft.net>
Wed, 22 Apr 2020 19:55:54 +0000 (12:55 -0700)
Add tracepoint support for QRTR with NS as the first candidate. Later on
this can be extended to core QRTR and transport drivers.

The trace_printk() used in NS has been replaced by tracepoints.

Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/trace/events/qrtr.h [new file with mode: 0644]
net/qrtr/ns.c

diff --git a/include/trace/events/qrtr.h b/include/trace/events/qrtr.h
new file mode 100644 (file)
index 0000000..b1de14c
--- /dev/null
@@ -0,0 +1,115 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM qrtr
+
+#if !defined(_TRACE_QRTR_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _TRACE_QRTR_H
+
+#include <linux/qrtr.h>
+#include <linux/tracepoint.h>
+
+TRACE_EVENT(qrtr_ns_service_announce_new,
+
+       TP_PROTO(__le32 service, __le32 instance, __le32 node, __le32 port),
+
+       TP_ARGS(service, instance, node, port),
+
+       TP_STRUCT__entry(
+               __field(__le32, service)
+               __field(__le32, instance)
+               __field(__le32, node)
+               __field(__le32, port)
+       ),
+
+       TP_fast_assign(
+               __entry->service = service;
+               __entry->instance = instance;
+               __entry->node = node;
+               __entry->port = port;
+       ),
+
+       TP_printk("advertising new server [%d:%x]@[%d:%d]",
+                 __entry->service, __entry->instance, __entry->node,
+                 __entry->port
+       )
+);
+
+TRACE_EVENT(qrtr_ns_service_announce_del,
+
+       TP_PROTO(__le32 service, __le32 instance, __le32 node, __le32 port),
+
+       TP_ARGS(service, instance, node, port),
+
+       TP_STRUCT__entry(
+               __field(__le32, service)
+               __field(__le32, instance)
+               __field(__le32, node)
+               __field(__le32, port)
+       ),
+
+       TP_fast_assign(
+               __entry->service = service;
+               __entry->instance = instance;
+               __entry->node = node;
+               __entry->port = port;
+       ),
+
+       TP_printk("advertising removal of server [%d:%x]@[%d:%d]",
+                 __entry->service, __entry->instance, __entry->node,
+                 __entry->port
+       )
+);
+
+TRACE_EVENT(qrtr_ns_server_add,
+
+       TP_PROTO(__le32 service, __le32 instance, __le32 node, __le32 port),
+
+       TP_ARGS(service, instance, node, port),
+
+       TP_STRUCT__entry(
+               __field(__le32, service)
+               __field(__le32, instance)
+               __field(__le32, node)
+               __field(__le32, port)
+       ),
+
+       TP_fast_assign(
+               __entry->service = service;
+               __entry->instance = instance;
+               __entry->node = node;
+               __entry->port = port;
+       ),
+
+       TP_printk("add server [%d:%x]@[%d:%d]",
+                 __entry->service, __entry->instance, __entry->node,
+                 __entry->port
+       )
+);
+
+TRACE_EVENT(qrtr_ns_message,
+
+       TP_PROTO(const char * const ctrl_pkt_str, __u32 sq_node, __u32 sq_port),
+
+       TP_ARGS(ctrl_pkt_str, sq_node, sq_port),
+
+       TP_STRUCT__entry(
+               __string(ctrl_pkt_str, ctrl_pkt_str)
+               __field(__u32, sq_node)
+               __field(__u32, sq_port)
+       ),
+
+       TP_fast_assign(
+               __assign_str(ctrl_pkt_str, ctrl_pkt_str);
+               __entry->sq_node = sq_node;
+               __entry->sq_port = sq_port;
+       ),
+
+       TP_printk("%s from %d:%d",
+                 __get_str(ctrl_pkt_str), __entry->sq_node, __entry->sq_port
+       )
+);
+
+#endif /* _TRACE_QRTR_H */
+
+/* This part must be outside protection */
+#include <trace/define_trace.h>
index e7d0fe3f43304433d315dddfafb9bf88e4396997..3ca196fc7f9b7a573544a285ddfefafd35499ac4 100644 (file)
@@ -12,6 +12,9 @@
 
 #include "qrtr.h"
 
+#define CREATE_TRACE_POINTS
+#include <trace/events/qrtr.h>
+
 static RADIX_TREE(nodes, GFP_KERNEL);
 
 static struct {
@@ -105,8 +108,8 @@ static int service_announce_new(struct sockaddr_qrtr *dest,
        struct msghdr msg = { };
        struct kvec iv;
 
-       trace_printk("advertising new server [%d:%x]@[%d:%d]\n",
-                    srv->service, srv->instance, srv->node, srv->port);
+       trace_qrtr_ns_service_announce_new(srv->service, srv->instance,
+                                          srv->node, srv->port);
 
        iv.iov_base = &pkt;
        iv.iov_len = sizeof(pkt);
@@ -132,8 +135,8 @@ static int service_announce_del(struct sockaddr_qrtr *dest,
        struct kvec iv;
        int ret;
 
-       trace_printk("advertising removal of server [%d:%x]@[%d:%d]\n",
-                    srv->service, srv->instance, srv->node, srv->port);
+       trace_qrtr_ns_service_announce_del(srv->service, srv->instance,
+                                          srv->node, srv->port);
 
        iv.iov_base = &pkt;
        iv.iov_len = sizeof(pkt);
@@ -244,8 +247,8 @@ static struct qrtr_server *server_add(unsigned int service,
 
        radix_tree_insert(&node->servers, port, srv);
 
-       trace_printk("add server [%d:%x]@[%d:%d]\n", srv->service,
-                    srv->instance, srv->node, srv->port);
+       trace_qrtr_ns_server_add(srv->service, srv->instance,
+                                srv->node, srv->port);
 
        return srv;
 
@@ -633,9 +636,8 @@ static void qrtr_ns_worker(struct work_struct *work)
                cmd = le32_to_cpu(pkt->cmd);
                if (cmd < ARRAY_SIZE(qrtr_ctrl_pkt_strings) &&
                    qrtr_ctrl_pkt_strings[cmd])
-                       trace_printk("%s from %d:%d\n",
-                                    qrtr_ctrl_pkt_strings[cmd], sq.sq_node,
-                                    sq.sq_port);
+                       trace_qrtr_ns_message(qrtr_ctrl_pkt_strings[cmd],
+                                             sq.sq_node, sq.sq_port);
 
                ret = 0;
                switch (cmd) {