xref: /openbmc/linux/include/trace/events/rpcrdma.h (revision ab03eff5)
1e48f083eSChuck Lever /* SPDX-License-Identifier: GPL-2.0 */
2e48f083eSChuck Lever /*
3e48f083eSChuck Lever  * Copyright (c) 2017 Oracle.  All rights reserved.
4e48f083eSChuck Lever  */
5e48f083eSChuck Lever #undef TRACE_SYSTEM
6e48f083eSChuck Lever #define TRACE_SYSTEM rpcrdma
7e48f083eSChuck Lever 
8e48f083eSChuck Lever #if !defined(_TRACE_RPCRDMA_H) || defined(TRACE_HEADER_MULTI_READ)
9e48f083eSChuck Lever #define _TRACE_RPCRDMA_H
10e48f083eSChuck Lever 
11e48f083eSChuck Lever #include <linux/tracepoint.h>
12e48f083eSChuck Lever #include <trace/events/rdma.h>
13e48f083eSChuck Lever 
14ab03eff5SChuck Lever /**
15ab03eff5SChuck Lever  ** Call events
16ab03eff5SChuck Lever  **/
17ab03eff5SChuck Lever 
18ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch);
19ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_readch);
20ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_areadch);
21ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_writech);
22ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_replych);
23ab03eff5SChuck Lever 
24ab03eff5SChuck Lever #define xprtrdma_show_chunktype(x)					\
25ab03eff5SChuck Lever 		__print_symbolic(x,					\
26ab03eff5SChuck Lever 				{ rpcrdma_noch, "inline" },		\
27ab03eff5SChuck Lever 				{ rpcrdma_readch, "read list" },	\
28ab03eff5SChuck Lever 				{ rpcrdma_areadch, "*read list" },	\
29ab03eff5SChuck Lever 				{ rpcrdma_writech, "write list" },	\
30ab03eff5SChuck Lever 				{ rpcrdma_replych, "reply chunk" })
31ab03eff5SChuck Lever 
32ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_marshal,
33ab03eff5SChuck Lever 	TP_PROTO(
34ab03eff5SChuck Lever 		const struct rpc_rqst *rqst,
35ab03eff5SChuck Lever 		unsigned int hdrlen,
36ab03eff5SChuck Lever 		unsigned int rtype,
37ab03eff5SChuck Lever 		unsigned int wtype
38ab03eff5SChuck Lever 	),
39ab03eff5SChuck Lever 
40ab03eff5SChuck Lever 	TP_ARGS(rqst, hdrlen, rtype, wtype),
41ab03eff5SChuck Lever 
42ab03eff5SChuck Lever 	TP_STRUCT__entry(
43ab03eff5SChuck Lever 		__field(unsigned int, task_id)
44ab03eff5SChuck Lever 		__field(unsigned int, client_id)
45ab03eff5SChuck Lever 		__field(u32, xid)
46ab03eff5SChuck Lever 		__field(unsigned int, hdrlen)
47ab03eff5SChuck Lever 		__field(unsigned int, headlen)
48ab03eff5SChuck Lever 		__field(unsigned int, pagelen)
49ab03eff5SChuck Lever 		__field(unsigned int, taillen)
50ab03eff5SChuck Lever 		__field(unsigned int, rtype)
51ab03eff5SChuck Lever 		__field(unsigned int, wtype)
52ab03eff5SChuck Lever 	),
53ab03eff5SChuck Lever 
54ab03eff5SChuck Lever 	TP_fast_assign(
55ab03eff5SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
56ab03eff5SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
57ab03eff5SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
58ab03eff5SChuck Lever 		__entry->hdrlen = hdrlen;
59ab03eff5SChuck Lever 		__entry->headlen = rqst->rq_snd_buf.head[0].iov_len;
60ab03eff5SChuck Lever 		__entry->pagelen = rqst->rq_snd_buf.page_len;
61ab03eff5SChuck Lever 		__entry->taillen = rqst->rq_snd_buf.tail[0].iov_len;
62ab03eff5SChuck Lever 		__entry->rtype = rtype;
63ab03eff5SChuck Lever 		__entry->wtype = wtype;
64ab03eff5SChuck Lever 	),
65ab03eff5SChuck Lever 
66ab03eff5SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x: hdr=%u xdr=%u/%u/%u %s/%s",
67ab03eff5SChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
68ab03eff5SChuck Lever 		__entry->hdrlen,
69ab03eff5SChuck Lever 		__entry->headlen, __entry->pagelen, __entry->taillen,
70ab03eff5SChuck Lever 		xprtrdma_show_chunktype(__entry->rtype),
71ab03eff5SChuck Lever 		xprtrdma_show_chunktype(__entry->wtype)
72ab03eff5SChuck Lever 	)
73ab03eff5SChuck Lever );
74ab03eff5SChuck Lever 
75ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_post_send,
76ab03eff5SChuck Lever 	TP_PROTO(
77ab03eff5SChuck Lever 		const struct rpcrdma_req *req,
78ab03eff5SChuck Lever 		int status
79ab03eff5SChuck Lever 	),
80ab03eff5SChuck Lever 
81ab03eff5SChuck Lever 	TP_ARGS(req, status),
82ab03eff5SChuck Lever 
83ab03eff5SChuck Lever 	TP_STRUCT__entry(
84ab03eff5SChuck Lever 		__field(const void *, req)
85ab03eff5SChuck Lever 		__field(int, num_sge)
86ab03eff5SChuck Lever 		__field(bool, signaled)
87ab03eff5SChuck Lever 		__field(int, status)
88ab03eff5SChuck Lever 	),
89ab03eff5SChuck Lever 
90ab03eff5SChuck Lever 	TP_fast_assign(
91ab03eff5SChuck Lever 		__entry->req = req;
92ab03eff5SChuck Lever 		__entry->num_sge = req->rl_sendctx->sc_wr.num_sge;
93ab03eff5SChuck Lever 		__entry->signaled = req->rl_sendctx->sc_wr.send_flags &
94ab03eff5SChuck Lever 				    IB_SEND_SIGNALED;
95ab03eff5SChuck Lever 		__entry->status = status;
96ab03eff5SChuck Lever 	),
97ab03eff5SChuck Lever 
98ab03eff5SChuck Lever 	TP_printk("req=%p, %d SGEs%s, status=%d",
99ab03eff5SChuck Lever 		__entry->req, __entry->num_sge,
100ab03eff5SChuck Lever 		(__entry->signaled ? ", signaled" : ""),
101ab03eff5SChuck Lever 		__entry->status
102ab03eff5SChuck Lever 	)
103ab03eff5SChuck Lever );
104ab03eff5SChuck Lever 
105ab03eff5SChuck Lever /**
106ab03eff5SChuck Lever  ** Completion events
107ab03eff5SChuck Lever  **/
108ab03eff5SChuck Lever 
109ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_wc_send,
110ab03eff5SChuck Lever 	TP_PROTO(
111ab03eff5SChuck Lever 		const struct rpcrdma_sendctx *sc,
112ab03eff5SChuck Lever 		const struct ib_wc *wc
113ab03eff5SChuck Lever 	),
114ab03eff5SChuck Lever 
115ab03eff5SChuck Lever 	TP_ARGS(sc, wc),
116ab03eff5SChuck Lever 
117ab03eff5SChuck Lever 	TP_STRUCT__entry(
118ab03eff5SChuck Lever 		__field(const void *, req)
119ab03eff5SChuck Lever 		__field(unsigned int, unmap_count)
120ab03eff5SChuck Lever 		__field(unsigned int, status)
121ab03eff5SChuck Lever 		__field(unsigned int, vendor_err)
122ab03eff5SChuck Lever 	),
123ab03eff5SChuck Lever 
124ab03eff5SChuck Lever 	TP_fast_assign(
125ab03eff5SChuck Lever 		__entry->req = sc->sc_req;
126ab03eff5SChuck Lever 		__entry->unmap_count = sc->sc_unmap_count;
127ab03eff5SChuck Lever 		__entry->status = wc->status;
128ab03eff5SChuck Lever 		__entry->vendor_err = __entry->status ? wc->vendor_err : 0;
129ab03eff5SChuck Lever 	),
130ab03eff5SChuck Lever 
131ab03eff5SChuck Lever 	TP_printk("req=%p, unmapped %u pages: %s (%u/0x%x)",
132ab03eff5SChuck Lever 		__entry->req, __entry->unmap_count,
133ab03eff5SChuck Lever 		rdma_show_wc_status(__entry->status),
134ab03eff5SChuck Lever 		__entry->status, __entry->vendor_err
135ab03eff5SChuck Lever 	)
136ab03eff5SChuck Lever );
137ab03eff5SChuck Lever 
138e48f083eSChuck Lever #endif /* _TRACE_RPCRDMA_H */
139e48f083eSChuck Lever 
140e48f083eSChuck Lever #include <trace/define_trace.h>
141