net: qrtr: Add tracepoint support
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>
This commit is contained in:
parent
540bde5c2c
commit
dfddb54043
2 changed files with 126 additions and 9 deletions
115
include/trace/events/qrtr.h
Normal file
115
include/trace/events/qrtr.h
Normal file
|
@ -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>
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in a new issue