xref: /openbmc/linux/include/trace/events/rpcrdma.h (revision 3a9568fe)
1e48f083eSChuck Lever /* SPDX-License-Identifier: GPL-2.0 */
2e48f083eSChuck Lever /*
398895edbSChuck Lever  * Copyright (c) 2017, 2018 Oracle.  All rights reserved.
498895edbSChuck Lever  *
598895edbSChuck Lever  * Trace point definitions for the "rpcrdma" subsystem.
6e48f083eSChuck Lever  */
7e48f083eSChuck Lever #undef TRACE_SYSTEM
8e48f083eSChuck Lever #define TRACE_SYSTEM rpcrdma
9e48f083eSChuck Lever 
10e48f083eSChuck Lever #if !defined(_TRACE_RPCRDMA_H) || defined(TRACE_HEADER_MULTI_READ)
11e48f083eSChuck Lever #define _TRACE_RPCRDMA_H
12e48f083eSChuck Lever 
1353b2c1cbSChuck Lever #include <linux/scatterlist.h>
14f7bd657bSChuck Lever #include <linux/sunrpc/rpc_rdma_cid.h>
15e48f083eSChuck Lever #include <linux/tracepoint.h>
16b3d03daaSChuck Lever #include <rdma/ib_cm.h>
17e48f083eSChuck Lever #include <trace/events/rdma.h>
18e48f083eSChuck Lever 
19ab03eff5SChuck Lever /**
20b4a7f91cSChuck Lever  ** Event classes
21b4a7f91cSChuck Lever  **/
22b4a7f91cSChuck Lever 
23f7bd657bSChuck Lever DECLARE_EVENT_CLASS(rpcrdma_completion_class,
24f7bd657bSChuck Lever 	TP_PROTO(
25f7bd657bSChuck Lever 		const struct ib_wc *wc,
26f7bd657bSChuck Lever 		const struct rpc_rdma_cid *cid
27f7bd657bSChuck Lever 	),
28f7bd657bSChuck Lever 
29f7bd657bSChuck Lever 	TP_ARGS(wc, cid),
30f7bd657bSChuck Lever 
31f7bd657bSChuck Lever 	TP_STRUCT__entry(
32f7bd657bSChuck Lever 		__field(u32, cq_id)
33f7bd657bSChuck Lever 		__field(int, completion_id)
34f7bd657bSChuck Lever 		__field(unsigned long, status)
35f7bd657bSChuck Lever 		__field(unsigned int, vendor_err)
36f7bd657bSChuck Lever 	),
37f7bd657bSChuck Lever 
38f7bd657bSChuck Lever 	TP_fast_assign(
39f7bd657bSChuck Lever 		__entry->cq_id = cid->ci_queue_id;
40f7bd657bSChuck Lever 		__entry->completion_id = cid->ci_completion_id;
41f7bd657bSChuck Lever 		__entry->status = wc->status;
42f7bd657bSChuck Lever 		if (wc->status)
43f7bd657bSChuck Lever 			__entry->vendor_err = wc->vendor_err;
44f7bd657bSChuck Lever 		else
45f7bd657bSChuck Lever 			__entry->vendor_err = 0;
46f7bd657bSChuck Lever 	),
47f7bd657bSChuck Lever 
48f7bd657bSChuck Lever 	TP_printk("cq.id=%u cid=%d status=%s (%lu/0x%x)",
49f7bd657bSChuck Lever 		__entry->cq_id, __entry->completion_id,
50f7bd657bSChuck Lever 		rdma_show_wc_status(__entry->status),
51f7bd657bSChuck Lever 		__entry->status, __entry->vendor_err
52f7bd657bSChuck Lever 	)
53f7bd657bSChuck Lever );
54f7bd657bSChuck Lever 
55f7bd657bSChuck Lever #define DEFINE_COMPLETION_EVENT(name)					\
56f7bd657bSChuck Lever 		DEFINE_EVENT(rpcrdma_completion_class, name,		\
57f7bd657bSChuck Lever 				TP_PROTO(				\
58f7bd657bSChuck Lever 					const struct ib_wc *wc,		\
59f7bd657bSChuck Lever 					const struct rpc_rdma_cid *cid	\
60f7bd657bSChuck Lever 				),					\
61f7bd657bSChuck Lever 				TP_ARGS(wc, cid))
62f7bd657bSChuck Lever 
63*3a9568feSChuck Lever DECLARE_EVENT_CLASS(xprtrdma_reply_class,
64b4a7f91cSChuck Lever 	TP_PROTO(
65b4a7f91cSChuck Lever 		const struct rpcrdma_rep *rep
66b4a7f91cSChuck Lever 	),
67b4a7f91cSChuck Lever 
68b4a7f91cSChuck Lever 	TP_ARGS(rep),
69b4a7f91cSChuck Lever 
70b4a7f91cSChuck Lever 	TP_STRUCT__entry(
71b4a7f91cSChuck Lever 		__field(u32, xid)
72b4a7f91cSChuck Lever 		__field(u32, version)
73b4a7f91cSChuck Lever 		__field(u32, proc)
74*3a9568feSChuck Lever 		__string(addr, rpcrdma_addrstr(rep->rr_rxprt))
75*3a9568feSChuck Lever 		__string(port, rpcrdma_portstr(rep->rr_rxprt))
76b4a7f91cSChuck Lever 	),
77b4a7f91cSChuck Lever 
78b4a7f91cSChuck Lever 	TP_fast_assign(
79b4a7f91cSChuck Lever 		__entry->xid = be32_to_cpu(rep->rr_xid);
80b4a7f91cSChuck Lever 		__entry->version = be32_to_cpu(rep->rr_vers);
81b4a7f91cSChuck Lever 		__entry->proc = be32_to_cpu(rep->rr_proc);
82*3a9568feSChuck Lever 		__assign_str(addr, rpcrdma_addrstr(rep->rr_rxprt));
83*3a9568feSChuck Lever 		__assign_str(port, rpcrdma_portstr(rep->rr_rxprt));
84b4a7f91cSChuck Lever 	),
85b4a7f91cSChuck Lever 
86*3a9568feSChuck Lever 	TP_printk("peer=[%s]:%s xid=0x%08x version=%u proc=%u",
87*3a9568feSChuck Lever 		__get_str(addr), __get_str(port),
88*3a9568feSChuck Lever 		__entry->xid, __entry->version, __entry->proc
89b4a7f91cSChuck Lever 	)
90b4a7f91cSChuck Lever );
91b4a7f91cSChuck Lever 
92b4a7f91cSChuck Lever #define DEFINE_REPLY_EVENT(name)					\
93*3a9568feSChuck Lever 		DEFINE_EVENT(xprtrdma_reply_class,			\
94*3a9568feSChuck Lever 				xprtrdma_reply_##name##_err,		\
95b4a7f91cSChuck Lever 				TP_PROTO(				\
96b4a7f91cSChuck Lever 					const struct rpcrdma_rep *rep	\
97b4a7f91cSChuck Lever 				),					\
98b4a7f91cSChuck Lever 				TP_ARGS(rep))
99b4a7f91cSChuck Lever 
1001c443effSChuck Lever DECLARE_EVENT_CLASS(xprtrdma_rxprt,
1011c443effSChuck Lever 	TP_PROTO(
1021c443effSChuck Lever 		const struct rpcrdma_xprt *r_xprt
1031c443effSChuck Lever 	),
1041c443effSChuck Lever 
1051c443effSChuck Lever 	TP_ARGS(r_xprt),
1061c443effSChuck Lever 
1071c443effSChuck Lever 	TP_STRUCT__entry(
1081c443effSChuck Lever 		__field(const void *, r_xprt)
1091c443effSChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
1101c443effSChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
1111c443effSChuck Lever 	),
1121c443effSChuck Lever 
1131c443effSChuck Lever 	TP_fast_assign(
1141c443effSChuck Lever 		__entry->r_xprt = r_xprt;
1151c443effSChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
1161c443effSChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
1171c443effSChuck Lever 	),
1181c443effSChuck Lever 
1191c443effSChuck Lever 	TP_printk("peer=[%s]:%s r_xprt=%p",
1201c443effSChuck Lever 		__get_str(addr), __get_str(port), __entry->r_xprt
1211c443effSChuck Lever 	)
1221c443effSChuck Lever );
1231c443effSChuck Lever 
1241c443effSChuck Lever #define DEFINE_RXPRT_EVENT(name)					\
1251c443effSChuck Lever 		DEFINE_EVENT(xprtrdma_rxprt, name,			\
1261c443effSChuck Lever 				TP_PROTO(				\
1271c443effSChuck Lever 					const struct rpcrdma_xprt *r_xprt \
1281c443effSChuck Lever 				),					\
1291c443effSChuck Lever 				TP_ARGS(r_xprt))
1301c443effSChuck Lever 
1317b020f17SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_connect_class,
1327b020f17SChuck Lever 	TP_PROTO(
1337b020f17SChuck Lever 		const struct rpcrdma_xprt *r_xprt,
1347b020f17SChuck Lever 		int rc
1357b020f17SChuck Lever 	),
1367b020f17SChuck Lever 
1377b020f17SChuck Lever 	TP_ARGS(r_xprt, rc),
1387b020f17SChuck Lever 
1397b020f17SChuck Lever 	TP_STRUCT__entry(
1407b020f17SChuck Lever 		__field(const void *, r_xprt)
1417b020f17SChuck Lever 		__field(int, rc)
1427b020f17SChuck Lever 		__field(int, connect_status)
1437b020f17SChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
1447b020f17SChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
1457b020f17SChuck Lever 	),
1467b020f17SChuck Lever 
1477b020f17SChuck Lever 	TP_fast_assign(
1487b020f17SChuck Lever 		__entry->r_xprt = r_xprt;
1497b020f17SChuck Lever 		__entry->rc = rc;
150e28ce900SChuck Lever 		__entry->connect_status = r_xprt->rx_ep->re_connect_status;
1517b020f17SChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
1527b020f17SChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
1537b020f17SChuck Lever 	),
1547b020f17SChuck Lever 
155d6ccebf9SChuck Lever 	TP_printk("peer=[%s]:%s r_xprt=%p: rc=%d connection status=%d",
1567b020f17SChuck Lever 		__get_str(addr), __get_str(port), __entry->r_xprt,
1577b020f17SChuck Lever 		__entry->rc, __entry->connect_status
1587b020f17SChuck Lever 	)
1597b020f17SChuck Lever );
1607b020f17SChuck Lever 
1617b020f17SChuck Lever #define DEFINE_CONN_EVENT(name)						\
1627b020f17SChuck Lever 		DEFINE_EVENT(xprtrdma_connect_class, xprtrdma_##name,	\
1637b020f17SChuck Lever 				TP_PROTO(				\
1647b020f17SChuck Lever 					const struct rpcrdma_xprt *r_xprt, \
1657b020f17SChuck Lever 					int rc				\
1667b020f17SChuck Lever 				),					\
1677b020f17SChuck Lever 				TP_ARGS(r_xprt, rc))
1687b020f17SChuck Lever 
16958f10ad4SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_rdch_event,
17058f10ad4SChuck Lever 	TP_PROTO(
17158f10ad4SChuck Lever 		const struct rpc_task *task,
17258f10ad4SChuck Lever 		unsigned int pos,
17358f10ad4SChuck Lever 		struct rpcrdma_mr *mr,
17458f10ad4SChuck Lever 		int nsegs
17558f10ad4SChuck Lever 	),
17658f10ad4SChuck Lever 
17758f10ad4SChuck Lever 	TP_ARGS(task, pos, mr, nsegs),
17858f10ad4SChuck Lever 
17958f10ad4SChuck Lever 	TP_STRUCT__entry(
18058f10ad4SChuck Lever 		__field(unsigned int, task_id)
18158f10ad4SChuck Lever 		__field(unsigned int, client_id)
18258f10ad4SChuck Lever 		__field(unsigned int, pos)
18358f10ad4SChuck Lever 		__field(int, nents)
18458f10ad4SChuck Lever 		__field(u32, handle)
18558f10ad4SChuck Lever 		__field(u32, length)
18658f10ad4SChuck Lever 		__field(u64, offset)
18758f10ad4SChuck Lever 		__field(int, nsegs)
18858f10ad4SChuck Lever 	),
18958f10ad4SChuck Lever 
19058f10ad4SChuck Lever 	TP_fast_assign(
19158f10ad4SChuck Lever 		__entry->task_id = task->tk_pid;
19258f10ad4SChuck Lever 		__entry->client_id = task->tk_client->cl_clid;
19358f10ad4SChuck Lever 		__entry->pos = pos;
19458f10ad4SChuck Lever 		__entry->nents = mr->mr_nents;
19558f10ad4SChuck Lever 		__entry->handle = mr->mr_handle;
19658f10ad4SChuck Lever 		__entry->length = mr->mr_length;
19758f10ad4SChuck Lever 		__entry->offset = mr->mr_offset;
19858f10ad4SChuck Lever 		__entry->nsegs = nsegs;
19958f10ad4SChuck Lever 	),
20058f10ad4SChuck Lever 
201aba11831SChuck Lever 	TP_printk("task:%u@%u pos=%u %u@0x%016llx:0x%08x (%s)",
202aba11831SChuck Lever 		__entry->task_id, __entry->client_id,
20358f10ad4SChuck Lever 		__entry->pos, __entry->length,
20458f10ad4SChuck Lever 		(unsigned long long)__entry->offset, __entry->handle,
20558f10ad4SChuck Lever 		__entry->nents < __entry->nsegs ? "more" : "last"
20658f10ad4SChuck Lever 	)
20758f10ad4SChuck Lever );
20858f10ad4SChuck Lever 
20958f10ad4SChuck Lever #define DEFINE_RDCH_EVENT(name)						\
210aba11831SChuck Lever 		DEFINE_EVENT(xprtrdma_rdch_event, xprtrdma_chunk_##name,\
21158f10ad4SChuck Lever 				TP_PROTO(				\
21258f10ad4SChuck Lever 					const struct rpc_task *task,	\
21358f10ad4SChuck Lever 					unsigned int pos,		\
21458f10ad4SChuck Lever 					struct rpcrdma_mr *mr,		\
21558f10ad4SChuck Lever 					int nsegs			\
21658f10ad4SChuck Lever 				),					\
21758f10ad4SChuck Lever 				TP_ARGS(task, pos, mr, nsegs))
21858f10ad4SChuck Lever 
21958f10ad4SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_wrch_event,
22058f10ad4SChuck Lever 	TP_PROTO(
22158f10ad4SChuck Lever 		const struct rpc_task *task,
22258f10ad4SChuck Lever 		struct rpcrdma_mr *mr,
22358f10ad4SChuck Lever 		int nsegs
22458f10ad4SChuck Lever 	),
22558f10ad4SChuck Lever 
22658f10ad4SChuck Lever 	TP_ARGS(task, mr, nsegs),
22758f10ad4SChuck Lever 
22858f10ad4SChuck Lever 	TP_STRUCT__entry(
22958f10ad4SChuck Lever 		__field(unsigned int, task_id)
23058f10ad4SChuck Lever 		__field(unsigned int, client_id)
23158f10ad4SChuck Lever 		__field(int, nents)
23258f10ad4SChuck Lever 		__field(u32, handle)
23358f10ad4SChuck Lever 		__field(u32, length)
23458f10ad4SChuck Lever 		__field(u64, offset)
23558f10ad4SChuck Lever 		__field(int, nsegs)
23658f10ad4SChuck Lever 	),
23758f10ad4SChuck Lever 
23858f10ad4SChuck Lever 	TP_fast_assign(
23958f10ad4SChuck Lever 		__entry->task_id = task->tk_pid;
24058f10ad4SChuck Lever 		__entry->client_id = task->tk_client->cl_clid;
24158f10ad4SChuck Lever 		__entry->nents = mr->mr_nents;
24258f10ad4SChuck Lever 		__entry->handle = mr->mr_handle;
24358f10ad4SChuck Lever 		__entry->length = mr->mr_length;
24458f10ad4SChuck Lever 		__entry->offset = mr->mr_offset;
24558f10ad4SChuck Lever 		__entry->nsegs = nsegs;
24658f10ad4SChuck Lever 	),
24758f10ad4SChuck Lever 
248aba11831SChuck Lever 	TP_printk("task:%u@%u %u@0x%016llx:0x%08x (%s)",
249aba11831SChuck Lever 		__entry->task_id, __entry->client_id,
25058f10ad4SChuck Lever 		__entry->length, (unsigned long long)__entry->offset,
25158f10ad4SChuck Lever 		__entry->handle,
25258f10ad4SChuck Lever 		__entry->nents < __entry->nsegs ? "more" : "last"
25358f10ad4SChuck Lever 	)
25458f10ad4SChuck Lever );
25558f10ad4SChuck Lever 
25658f10ad4SChuck Lever #define DEFINE_WRCH_EVENT(name)						\
257aba11831SChuck Lever 		DEFINE_EVENT(xprtrdma_wrch_event, xprtrdma_chunk_##name,\
25858f10ad4SChuck Lever 				TP_PROTO(				\
25958f10ad4SChuck Lever 					const struct rpc_task *task,	\
26058f10ad4SChuck Lever 					struct rpcrdma_mr *mr,		\
26158f10ad4SChuck Lever 					int nsegs			\
26258f10ad4SChuck Lever 				),					\
26358f10ad4SChuck Lever 				TP_ARGS(task, mr, nsegs))
26458f10ad4SChuck Lever 
265aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_BIDIRECTIONAL);
266aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_TO_DEVICE);
267aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_FROM_DEVICE);
268aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_NONE);
269aba11831SChuck Lever 
270aba11831SChuck Lever #define xprtrdma_show_direction(x)					\
271aba11831SChuck Lever 		__print_symbolic(x,					\
272aba11831SChuck Lever 				{ DMA_BIDIRECTIONAL, "BIDIR" },		\
273aba11831SChuck Lever 				{ DMA_TO_DEVICE, "TO_DEVICE" },		\
274aba11831SChuck Lever 				{ DMA_FROM_DEVICE, "FROM_DEVICE" },	\
275aba11831SChuck Lever 				{ DMA_NONE, "NONE" })
276aba11831SChuck Lever 
2772937fedeSChuck Lever DECLARE_EVENT_CLASS(xprtrdma_mr,
2782937fedeSChuck Lever 	TP_PROTO(
2792937fedeSChuck Lever 		const struct rpcrdma_mr *mr
2802937fedeSChuck Lever 	),
2812937fedeSChuck Lever 
2822937fedeSChuck Lever 	TP_ARGS(mr),
2832937fedeSChuck Lever 
2842937fedeSChuck Lever 	TP_STRUCT__entry(
28562a89501SChuck Lever 		__field(u32, mr_id)
28662a89501SChuck Lever 		__field(int, nents)
2872937fedeSChuck Lever 		__field(u32, handle)
2882937fedeSChuck Lever 		__field(u32, length)
2892937fedeSChuck Lever 		__field(u64, offset)
290aba11831SChuck Lever 		__field(u32, dir)
2912937fedeSChuck Lever 	),
2922937fedeSChuck Lever 
2932937fedeSChuck Lever 	TP_fast_assign(
29462a89501SChuck Lever 		__entry->mr_id  = mr->frwr.fr_mr->res.id;
29562a89501SChuck Lever 		__entry->nents  = mr->mr_nents;
2962937fedeSChuck Lever 		__entry->handle = mr->mr_handle;
2972937fedeSChuck Lever 		__entry->length = mr->mr_length;
2982937fedeSChuck Lever 		__entry->offset = mr->mr_offset;
299aba11831SChuck Lever 		__entry->dir    = mr->mr_dir;
3002937fedeSChuck Lever 	),
3012937fedeSChuck Lever 
30262a89501SChuck Lever 	TP_printk("mr.id=%u nents=%d %u@0x%016llx:0x%08x (%s)",
30362a89501SChuck Lever 		__entry->mr_id, __entry->nents, __entry->length,
304aba11831SChuck Lever 		(unsigned long long)__entry->offset, __entry->handle,
305aba11831SChuck Lever 		xprtrdma_show_direction(__entry->dir)
3062937fedeSChuck Lever 	)
3072937fedeSChuck Lever );
3082937fedeSChuck Lever 
3092937fedeSChuck Lever #define DEFINE_MR_EVENT(name) \
310d379eaa8SChuck Lever 		DEFINE_EVENT(xprtrdma_mr, xprtrdma_mr_##name, \
3112937fedeSChuck Lever 				TP_PROTO( \
3122937fedeSChuck Lever 					const struct rpcrdma_mr *mr \
3132937fedeSChuck Lever 				), \
3142937fedeSChuck Lever 				TP_ARGS(mr))
3152937fedeSChuck Lever 
316fc1eb807SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_cb_event,
317fc1eb807SChuck Lever 	TP_PROTO(
318fc1eb807SChuck Lever 		const struct rpc_rqst *rqst
319fc1eb807SChuck Lever 	),
320fc1eb807SChuck Lever 
321fc1eb807SChuck Lever 	TP_ARGS(rqst),
322fc1eb807SChuck Lever 
323fc1eb807SChuck Lever 	TP_STRUCT__entry(
324fc1eb807SChuck Lever 		__field(const void *, rqst)
325fc1eb807SChuck Lever 		__field(const void *, rep)
326fc1eb807SChuck Lever 		__field(const void *, req)
327fc1eb807SChuck Lever 		__field(u32, xid)
328fc1eb807SChuck Lever 	),
329fc1eb807SChuck Lever 
330fc1eb807SChuck Lever 	TP_fast_assign(
331fc1eb807SChuck Lever 		__entry->rqst = rqst;
332fc1eb807SChuck Lever 		__entry->req = rpcr_to_rdmar(rqst);
333fc1eb807SChuck Lever 		__entry->rep = rpcr_to_rdmar(rqst)->rl_reply;
334fc1eb807SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
335fc1eb807SChuck Lever 	),
336fc1eb807SChuck Lever 
337fc1eb807SChuck Lever 	TP_printk("xid=0x%08x, rqst=%p req=%p rep=%p",
338fc1eb807SChuck Lever 		__entry->xid, __entry->rqst, __entry->req, __entry->rep
339fc1eb807SChuck Lever 	)
340fc1eb807SChuck Lever );
341fc1eb807SChuck Lever 
342fc1eb807SChuck Lever #define DEFINE_CB_EVENT(name)						\
343fc1eb807SChuck Lever 		DEFINE_EVENT(xprtrdma_cb_event, name,			\
344fc1eb807SChuck Lever 				TP_PROTO(				\
345fc1eb807SChuck Lever 					const struct rpc_rqst *rqst	\
346fc1eb807SChuck Lever 				),					\
347fc1eb807SChuck Lever 				TP_ARGS(rqst))
348fc1eb807SChuck Lever 
349b4a7f91cSChuck Lever /**
350b4744e00SChuck Lever  ** Connection events
351b4744e00SChuck Lever  **/
352b4744e00SChuck Lever 
353f54c870dSChuck Lever TRACE_EVENT(xprtrdma_inline_thresh,
354f54c870dSChuck Lever 	TP_PROTO(
355745b734cSChuck Lever 		const struct rpcrdma_ep *ep
356f54c870dSChuck Lever 	),
357f54c870dSChuck Lever 
358745b734cSChuck Lever 	TP_ARGS(ep),
359f54c870dSChuck Lever 
360f54c870dSChuck Lever 	TP_STRUCT__entry(
361f54c870dSChuck Lever 		__field(unsigned int, inline_send)
362f54c870dSChuck Lever 		__field(unsigned int, inline_recv)
363f54c870dSChuck Lever 		__field(unsigned int, max_send)
364f54c870dSChuck Lever 		__field(unsigned int, max_recv)
365745b734cSChuck Lever 		__array(unsigned char, srcaddr, sizeof(struct sockaddr_in6))
366745b734cSChuck Lever 		__array(unsigned char, dstaddr, sizeof(struct sockaddr_in6))
367f54c870dSChuck Lever 	),
368f54c870dSChuck Lever 
369f54c870dSChuck Lever 	TP_fast_assign(
370745b734cSChuck Lever 		const struct rdma_cm_id *id = ep->re_id;
371f54c870dSChuck Lever 
37293aa8e0aSChuck Lever 		__entry->inline_send = ep->re_inline_send;
37393aa8e0aSChuck Lever 		__entry->inline_recv = ep->re_inline_recv;
37493aa8e0aSChuck Lever 		__entry->max_send = ep->re_max_inline_send;
37593aa8e0aSChuck Lever 		__entry->max_recv = ep->re_max_inline_recv;
376745b734cSChuck Lever 		memcpy(__entry->srcaddr, &id->route.addr.src_addr,
377745b734cSChuck Lever 		       sizeof(struct sockaddr_in6));
378745b734cSChuck Lever 		memcpy(__entry->dstaddr, &id->route.addr.dst_addr,
379745b734cSChuck Lever 		       sizeof(struct sockaddr_in6));
380f54c870dSChuck Lever 	),
381f54c870dSChuck Lever 
382745b734cSChuck Lever 	TP_printk("%pISpc -> %pISpc neg send/recv=%u/%u, calc send/recv=%u/%u",
383745b734cSChuck Lever 		__entry->srcaddr, __entry->dstaddr,
384f54c870dSChuck Lever 		__entry->inline_send, __entry->inline_recv,
385f54c870dSChuck Lever 		__entry->max_send, __entry->max_recv
386f54c870dSChuck Lever 	)
387f54c870dSChuck Lever );
388f54c870dSChuck Lever 
3897b020f17SChuck Lever DEFINE_CONN_EVENT(connect);
3907b020f17SChuck Lever DEFINE_CONN_EVENT(disconnect);
3917b020f17SChuck Lever 
3927b020f17SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_op_inject_dsc);
3937b020f17SChuck Lever 
3947b020f17SChuck Lever TRACE_EVENT(xprtrdma_op_connect,
395b4744e00SChuck Lever 	TP_PROTO(
396b4744e00SChuck Lever 		const struct rpcrdma_xprt *r_xprt,
3977b020f17SChuck Lever 		unsigned long delay
398b4744e00SChuck Lever 	),
399b4744e00SChuck Lever 
4007b020f17SChuck Lever 	TP_ARGS(r_xprt, delay),
401b4744e00SChuck Lever 
402b4744e00SChuck Lever 	TP_STRUCT__entry(
403b4744e00SChuck Lever 		__field(const void *, r_xprt)
4047b020f17SChuck Lever 		__field(unsigned long, delay)
405b4744e00SChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
406b4744e00SChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
407b4744e00SChuck Lever 	),
408b4744e00SChuck Lever 
409b4744e00SChuck Lever 	TP_fast_assign(
410b4744e00SChuck Lever 		__entry->r_xprt = r_xprt;
4117b020f17SChuck Lever 		__entry->delay = delay;
412b4744e00SChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
413b4744e00SChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
414b4744e00SChuck Lever 	),
415b4744e00SChuck Lever 
4167b020f17SChuck Lever 	TP_printk("peer=[%s]:%s r_xprt=%p delay=%lu",
4177b020f17SChuck Lever 		__get_str(addr), __get_str(port), __entry->r_xprt,
4187b020f17SChuck Lever 		__entry->delay
419b4744e00SChuck Lever 	)
420b4744e00SChuck Lever );
421b4744e00SChuck Lever 
422b4744e00SChuck Lever 
423675dd90aSChuck Lever TRACE_EVENT(xprtrdma_op_set_cto,
424675dd90aSChuck Lever 	TP_PROTO(
425675dd90aSChuck Lever 		const struct rpcrdma_xprt *r_xprt,
426675dd90aSChuck Lever 		unsigned long connect,
427675dd90aSChuck Lever 		unsigned long reconnect
428675dd90aSChuck Lever 	),
429675dd90aSChuck Lever 
430675dd90aSChuck Lever 	TP_ARGS(r_xprt, connect, reconnect),
431675dd90aSChuck Lever 
432675dd90aSChuck Lever 	TP_STRUCT__entry(
433675dd90aSChuck Lever 		__field(const void *, r_xprt)
434675dd90aSChuck Lever 		__field(unsigned long, connect)
435675dd90aSChuck Lever 		__field(unsigned long, reconnect)
436675dd90aSChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
437675dd90aSChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
438675dd90aSChuck Lever 	),
439675dd90aSChuck Lever 
440675dd90aSChuck Lever 	TP_fast_assign(
441675dd90aSChuck Lever 		__entry->r_xprt = r_xprt;
442675dd90aSChuck Lever 		__entry->connect = connect;
443675dd90aSChuck Lever 		__entry->reconnect = reconnect;
444675dd90aSChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
445675dd90aSChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
446675dd90aSChuck Lever 	),
447675dd90aSChuck Lever 
448675dd90aSChuck Lever 	TP_printk("peer=[%s]:%s r_xprt=%p: connect=%lu reconnect=%lu",
449675dd90aSChuck Lever 		__get_str(addr), __get_str(port), __entry->r_xprt,
450675dd90aSChuck Lever 		__entry->connect / HZ, __entry->reconnect / HZ
451675dd90aSChuck Lever 	)
452675dd90aSChuck Lever );
453675dd90aSChuck Lever 
454f9521d53SChuck Lever TRACE_EVENT(xprtrdma_qp_event,
455643cf323SChuck Lever 	TP_PROTO(
456745b734cSChuck Lever 		const struct rpcrdma_ep *ep,
457643cf323SChuck Lever 		const struct ib_event *event
458643cf323SChuck Lever 	),
459643cf323SChuck Lever 
460745b734cSChuck Lever 	TP_ARGS(ep, event),
461643cf323SChuck Lever 
462643cf323SChuck Lever 	TP_STRUCT__entry(
463745b734cSChuck Lever 		__field(unsigned long, event)
464643cf323SChuck Lever 		__string(name, event->device->name)
465745b734cSChuck Lever 		__array(unsigned char, srcaddr, sizeof(struct sockaddr_in6))
466745b734cSChuck Lever 		__array(unsigned char, dstaddr, sizeof(struct sockaddr_in6))
467643cf323SChuck Lever 	),
468643cf323SChuck Lever 
469643cf323SChuck Lever 	TP_fast_assign(
470745b734cSChuck Lever 		const struct rdma_cm_id *id = ep->re_id;
471745b734cSChuck Lever 
472643cf323SChuck Lever 		__entry->event = event->event;
473643cf323SChuck Lever 		__assign_str(name, event->device->name);
474745b734cSChuck Lever 		memcpy(__entry->srcaddr, &id->route.addr.src_addr,
475745b734cSChuck Lever 		       sizeof(struct sockaddr_in6));
476745b734cSChuck Lever 		memcpy(__entry->dstaddr, &id->route.addr.dst_addr,
477745b734cSChuck Lever 		       sizeof(struct sockaddr_in6));
478643cf323SChuck Lever 	),
479643cf323SChuck Lever 
480745b734cSChuck Lever 	TP_printk("%pISpc -> %pISpc device=%s %s (%lu)",
481745b734cSChuck Lever 		__entry->srcaddr, __entry->dstaddr, __get_str(name),
482745b734cSChuck Lever 		rdma_show_ib_event(__entry->event), __entry->event
483643cf323SChuck Lever 	)
484643cf323SChuck Lever );
485643cf323SChuck Lever 
486b4744e00SChuck Lever /**
487ab03eff5SChuck Lever  ** Call events
488ab03eff5SChuck Lever  **/
489ab03eff5SChuck Lever 
4901c443effSChuck Lever TRACE_EVENT(xprtrdma_createmrs,
4911c443effSChuck Lever 	TP_PROTO(
4921c443effSChuck Lever 		const struct rpcrdma_xprt *r_xprt,
4931c443effSChuck Lever 		unsigned int count
4941c443effSChuck Lever 	),
4951c443effSChuck Lever 
4961c443effSChuck Lever 	TP_ARGS(r_xprt, count),
4971c443effSChuck Lever 
4981c443effSChuck Lever 	TP_STRUCT__entry(
4991c443effSChuck Lever 		__field(const void *, r_xprt)
5006dc6ec9eSChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
5016dc6ec9eSChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
5021c443effSChuck Lever 		__field(unsigned int, count)
5031c443effSChuck Lever 	),
5041c443effSChuck Lever 
5051c443effSChuck Lever 	TP_fast_assign(
5061c443effSChuck Lever 		__entry->r_xprt = r_xprt;
5071c443effSChuck Lever 		__entry->count = count;
5086dc6ec9eSChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
5096dc6ec9eSChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
5101c443effSChuck Lever 	),
5111c443effSChuck Lever 
5126dc6ec9eSChuck Lever 	TP_printk("peer=[%s]:%s r_xprt=%p: created %u MRs",
5136dc6ec9eSChuck Lever 		__get_str(addr), __get_str(port), __entry->r_xprt,
5146dc6ec9eSChuck Lever 		__entry->count
5156dc6ec9eSChuck Lever 	)
5166dc6ec9eSChuck Lever );
5176dc6ec9eSChuck Lever 
5186dc6ec9eSChuck Lever TRACE_EVENT(xprtrdma_mr_get,
5196dc6ec9eSChuck Lever 	TP_PROTO(
5206dc6ec9eSChuck Lever 		const struct rpcrdma_req *req
5216dc6ec9eSChuck Lever 	),
5226dc6ec9eSChuck Lever 
5236dc6ec9eSChuck Lever 	TP_ARGS(req),
5246dc6ec9eSChuck Lever 
5256dc6ec9eSChuck Lever 	TP_STRUCT__entry(
5266dc6ec9eSChuck Lever 		__field(const void *, req)
5276dc6ec9eSChuck Lever 		__field(unsigned int, task_id)
5286dc6ec9eSChuck Lever 		__field(unsigned int, client_id)
5296dc6ec9eSChuck Lever 		__field(u32, xid)
5306dc6ec9eSChuck Lever 	),
5316dc6ec9eSChuck Lever 
5326dc6ec9eSChuck Lever 	TP_fast_assign(
5336dc6ec9eSChuck Lever 		const struct rpc_rqst *rqst = &req->rl_slot;
5346dc6ec9eSChuck Lever 
5356dc6ec9eSChuck Lever 		__entry->req = req;
5366dc6ec9eSChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
5376dc6ec9eSChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
5386dc6ec9eSChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
5396dc6ec9eSChuck Lever 	),
5406dc6ec9eSChuck Lever 
5416dc6ec9eSChuck Lever 	TP_printk("task:%u@%u xid=0x%08x req=%p",
5426dc6ec9eSChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
5436dc6ec9eSChuck Lever 		__entry->req
5441c443effSChuck Lever 	)
5451c443effSChuck Lever );
5461c443effSChuck Lever 
5473b39f52aSChuck Lever TRACE_EVENT(xprtrdma_nomrs,
5483b39f52aSChuck Lever 	TP_PROTO(
5493b39f52aSChuck Lever 		const struct rpcrdma_req *req
5503b39f52aSChuck Lever 	),
5513b39f52aSChuck Lever 
5523b39f52aSChuck Lever 	TP_ARGS(req),
5533b39f52aSChuck Lever 
5543b39f52aSChuck Lever 	TP_STRUCT__entry(
5553b39f52aSChuck Lever 		__field(const void *, req)
5563b39f52aSChuck Lever 		__field(unsigned int, task_id)
5573b39f52aSChuck Lever 		__field(unsigned int, client_id)
5583b39f52aSChuck Lever 		__field(u32, xid)
5593b39f52aSChuck Lever 	),
5603b39f52aSChuck Lever 
5613b39f52aSChuck Lever 	TP_fast_assign(
5623b39f52aSChuck Lever 		const struct rpc_rqst *rqst = &req->rl_slot;
5633b39f52aSChuck Lever 
5643b39f52aSChuck Lever 		__entry->req = req;
5653b39f52aSChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
5663b39f52aSChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
5673b39f52aSChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
5683b39f52aSChuck Lever 	),
5693b39f52aSChuck Lever 
5703b39f52aSChuck Lever 	TP_printk("task:%u@%u xid=0x%08x req=%p",
5713b39f52aSChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
5723b39f52aSChuck Lever 		__entry->req
5733b39f52aSChuck Lever 	)
5743b39f52aSChuck Lever );
5751c443effSChuck Lever 
576aba11831SChuck Lever DEFINE_RDCH_EVENT(read);
577aba11831SChuck Lever DEFINE_WRCH_EVENT(write);
578aba11831SChuck Lever DEFINE_WRCH_EVENT(reply);
57958f10ad4SChuck Lever 
580ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch);
581614f3c96SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch_pullup);
582614f3c96SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch_mapped);
583ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_readch);
584ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_areadch);
585ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_writech);
586ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_replych);
587ab03eff5SChuck Lever 
588ab03eff5SChuck Lever #define xprtrdma_show_chunktype(x)					\
589ab03eff5SChuck Lever 		__print_symbolic(x,					\
590ab03eff5SChuck Lever 				{ rpcrdma_noch, "inline" },		\
591614f3c96SChuck Lever 				{ rpcrdma_noch_pullup, "pullup" },	\
592614f3c96SChuck Lever 				{ rpcrdma_noch_mapped, "mapped" },	\
593ab03eff5SChuck Lever 				{ rpcrdma_readch, "read list" },	\
594ab03eff5SChuck Lever 				{ rpcrdma_areadch, "*read list" },	\
595ab03eff5SChuck Lever 				{ rpcrdma_writech, "write list" },	\
596ab03eff5SChuck Lever 				{ rpcrdma_replych, "reply chunk" })
597ab03eff5SChuck Lever 
598ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_marshal,
599ab03eff5SChuck Lever 	TP_PROTO(
6001310051cSChuck Lever 		const struct rpcrdma_req *req,
601ab03eff5SChuck Lever 		unsigned int rtype,
602ab03eff5SChuck Lever 		unsigned int wtype
603ab03eff5SChuck Lever 	),
604ab03eff5SChuck Lever 
6051310051cSChuck Lever 	TP_ARGS(req, rtype, wtype),
606ab03eff5SChuck Lever 
607ab03eff5SChuck Lever 	TP_STRUCT__entry(
608ab03eff5SChuck Lever 		__field(unsigned int, task_id)
609ab03eff5SChuck Lever 		__field(unsigned int, client_id)
610ab03eff5SChuck Lever 		__field(u32, xid)
611ab03eff5SChuck Lever 		__field(unsigned int, hdrlen)
612ab03eff5SChuck Lever 		__field(unsigned int, headlen)
613ab03eff5SChuck Lever 		__field(unsigned int, pagelen)
614ab03eff5SChuck Lever 		__field(unsigned int, taillen)
615ab03eff5SChuck Lever 		__field(unsigned int, rtype)
616ab03eff5SChuck Lever 		__field(unsigned int, wtype)
617ab03eff5SChuck Lever 	),
618ab03eff5SChuck Lever 
619ab03eff5SChuck Lever 	TP_fast_assign(
6201310051cSChuck Lever 		const struct rpc_rqst *rqst = &req->rl_slot;
6211310051cSChuck Lever 
622ab03eff5SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
623ab03eff5SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
624ab03eff5SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
6251310051cSChuck Lever 		__entry->hdrlen = req->rl_hdrbuf.len;
626ab03eff5SChuck Lever 		__entry->headlen = rqst->rq_snd_buf.head[0].iov_len;
627ab03eff5SChuck Lever 		__entry->pagelen = rqst->rq_snd_buf.page_len;
628ab03eff5SChuck Lever 		__entry->taillen = rqst->rq_snd_buf.tail[0].iov_len;
629ab03eff5SChuck Lever 		__entry->rtype = rtype;
630ab03eff5SChuck Lever 		__entry->wtype = wtype;
631ab03eff5SChuck Lever 	),
632ab03eff5SChuck Lever 
633ab03eff5SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x: hdr=%u xdr=%u/%u/%u %s/%s",
634ab03eff5SChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
635ab03eff5SChuck Lever 		__entry->hdrlen,
636ab03eff5SChuck Lever 		__entry->headlen, __entry->pagelen, __entry->taillen,
637ab03eff5SChuck Lever 		xprtrdma_show_chunktype(__entry->rtype),
638ab03eff5SChuck Lever 		xprtrdma_show_chunktype(__entry->wtype)
639ab03eff5SChuck Lever 	)
640ab03eff5SChuck Lever );
641ab03eff5SChuck Lever 
64217e4c443SChuck Lever TRACE_EVENT(xprtrdma_marshal_failed,
64317e4c443SChuck Lever 	TP_PROTO(const struct rpc_rqst *rqst,
64417e4c443SChuck Lever 		 int ret
64517e4c443SChuck Lever 	),
64617e4c443SChuck Lever 
64717e4c443SChuck Lever 	TP_ARGS(rqst, ret),
64817e4c443SChuck Lever 
64917e4c443SChuck Lever 	TP_STRUCT__entry(
65017e4c443SChuck Lever 		__field(unsigned int, task_id)
65117e4c443SChuck Lever 		__field(unsigned int, client_id)
65217e4c443SChuck Lever 		__field(u32, xid)
65317e4c443SChuck Lever 		__field(int, ret)
65417e4c443SChuck Lever 	),
65517e4c443SChuck Lever 
65617e4c443SChuck Lever 	TP_fast_assign(
65717e4c443SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
65817e4c443SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
65917e4c443SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
66017e4c443SChuck Lever 		__entry->ret = ret;
66117e4c443SChuck Lever 	),
66217e4c443SChuck Lever 
66317e4c443SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x: ret=%d",
66417e4c443SChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
66517e4c443SChuck Lever 		__entry->ret
66617e4c443SChuck Lever 	)
66717e4c443SChuck Lever );
66817e4c443SChuck Lever 
66905eb06d8SChuck Lever TRACE_EVENT(xprtrdma_prepsend_failed,
67005eb06d8SChuck Lever 	TP_PROTO(const struct rpc_rqst *rqst,
67105eb06d8SChuck Lever 		 int ret
67205eb06d8SChuck Lever 	),
67305eb06d8SChuck Lever 
67405eb06d8SChuck Lever 	TP_ARGS(rqst, ret),
67505eb06d8SChuck Lever 
67605eb06d8SChuck Lever 	TP_STRUCT__entry(
67705eb06d8SChuck Lever 		__field(unsigned int, task_id)
67805eb06d8SChuck Lever 		__field(unsigned int, client_id)
67905eb06d8SChuck Lever 		__field(u32, xid)
68005eb06d8SChuck Lever 		__field(int, ret)
68105eb06d8SChuck Lever 	),
68205eb06d8SChuck Lever 
68305eb06d8SChuck Lever 	TP_fast_assign(
68405eb06d8SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
68505eb06d8SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
68605eb06d8SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
68705eb06d8SChuck Lever 		__entry->ret = ret;
68805eb06d8SChuck Lever 	),
68905eb06d8SChuck Lever 
69005eb06d8SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x: ret=%d",
69105eb06d8SChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
69205eb06d8SChuck Lever 		__entry->ret
69305eb06d8SChuck Lever 	)
69405eb06d8SChuck Lever );
69505eb06d8SChuck Lever 
696ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_post_send,
697ab03eff5SChuck Lever 	TP_PROTO(
698bdb2ce82SChuck Lever 		const struct rpcrdma_req *req
699ab03eff5SChuck Lever 	),
700ab03eff5SChuck Lever 
701bdb2ce82SChuck Lever 	TP_ARGS(req),
702ab03eff5SChuck Lever 
703ab03eff5SChuck Lever 	TP_STRUCT__entry(
704b2e7467fSChuck Lever 		__field(u32, cq_id)
705b2e7467fSChuck Lever 		__field(int, completion_id)
7060c77668dSChuck Lever 		__field(unsigned int, task_id)
7070c77668dSChuck Lever 		__field(unsigned int, client_id)
708ab03eff5SChuck Lever 		__field(int, num_sge)
709470443e0SChuck Lever 		__field(int, signaled)
710ab03eff5SChuck Lever 	),
711ab03eff5SChuck Lever 
712ab03eff5SChuck Lever 	TP_fast_assign(
7130c77668dSChuck Lever 		const struct rpc_rqst *rqst = &req->rl_slot;
714b2e7467fSChuck Lever 		const struct rpcrdma_sendctx *sc = req->rl_sendctx;
7150c77668dSChuck Lever 
716b2e7467fSChuck Lever 		__entry->cq_id = sc->sc_cid.ci_queue_id;
717b2e7467fSChuck Lever 		__entry->completion_id = sc->sc_cid.ci_completion_id;
7180c77668dSChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
71910694ac9SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client ?
72010694ac9SChuck Lever 				     rqst->rq_task->tk_client->cl_clid : -1;
721dc15c3d5SChuck Lever 		__entry->num_sge = req->rl_wr.num_sge;
722dc15c3d5SChuck Lever 		__entry->signaled = req->rl_wr.send_flags & IB_SEND_SIGNALED;
723ab03eff5SChuck Lever 	),
724ab03eff5SChuck Lever 
725b2e7467fSChuck Lever 	TP_printk("task:%u@%u cq.id=%u cid=%d (%d SGE%s) %s",
7260c77668dSChuck Lever 		__entry->task_id, __entry->client_id,
727b2e7467fSChuck Lever 		__entry->cq_id, __entry->completion_id,
728b2e7467fSChuck Lever 		__entry->num_sge, (__entry->num_sge == 1 ? "" : "s"),
729bdb2ce82SChuck Lever 		(__entry->signaled ? "signaled" : "")
730ab03eff5SChuck Lever 	)
731ab03eff5SChuck Lever );
732ab03eff5SChuck Lever 
733b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_post_recv,
734b4a7f91cSChuck Lever 	TP_PROTO(
7352dfdcd88SChuck Lever 		const struct rpcrdma_rep *rep
736b4a7f91cSChuck Lever 	),
737b4a7f91cSChuck Lever 
7382dfdcd88SChuck Lever 	TP_ARGS(rep),
739b4a7f91cSChuck Lever 
740b4a7f91cSChuck Lever 	TP_STRUCT__entry(
741af5865d2SChuck Lever 		__field(u32, cq_id)
742af5865d2SChuck Lever 		__field(int, completion_id)
743b4a7f91cSChuck Lever 	),
744b4a7f91cSChuck Lever 
745b4a7f91cSChuck Lever 	TP_fast_assign(
746af5865d2SChuck Lever 		__entry->cq_id = rep->rr_cid.ci_queue_id;
747af5865d2SChuck Lever 		__entry->completion_id = rep->rr_cid.ci_completion_id;
748b4a7f91cSChuck Lever 	),
749b4a7f91cSChuck Lever 
750af5865d2SChuck Lever 	TP_printk("cq.id=%d cid=%d",
751af5865d2SChuck Lever 		__entry->cq_id, __entry->completion_id
752b4a7f91cSChuck Lever 	)
753b4a7f91cSChuck Lever );
754b4a7f91cSChuck Lever 
7557c8d9e7cSChuck Lever TRACE_EVENT(xprtrdma_post_recvs,
7567c8d9e7cSChuck Lever 	TP_PROTO(
7577c8d9e7cSChuck Lever 		const struct rpcrdma_xprt *r_xprt,
7587c8d9e7cSChuck Lever 		unsigned int count,
7597c8d9e7cSChuck Lever 		int status
7607c8d9e7cSChuck Lever 	),
7617c8d9e7cSChuck Lever 
7627c8d9e7cSChuck Lever 	TP_ARGS(r_xprt, count, status),
7637c8d9e7cSChuck Lever 
7647c8d9e7cSChuck Lever 	TP_STRUCT__entry(
7657c8d9e7cSChuck Lever 		__field(const void *, r_xprt)
7667c8d9e7cSChuck Lever 		__field(unsigned int, count)
7677c8d9e7cSChuck Lever 		__field(int, status)
7687c8d9e7cSChuck Lever 		__field(int, posted)
7697c8d9e7cSChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
7707c8d9e7cSChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
7717c8d9e7cSChuck Lever 	),
7727c8d9e7cSChuck Lever 
7737c8d9e7cSChuck Lever 	TP_fast_assign(
7747c8d9e7cSChuck Lever 		__entry->r_xprt = r_xprt;
7757c8d9e7cSChuck Lever 		__entry->count = count;
7767c8d9e7cSChuck Lever 		__entry->status = status;
777e28ce900SChuck Lever 		__entry->posted = r_xprt->rx_ep->re_receive_count;
7787c8d9e7cSChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
7797c8d9e7cSChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
7807c8d9e7cSChuck Lever 	),
7817c8d9e7cSChuck Lever 
7827c8d9e7cSChuck Lever 	TP_printk("peer=[%s]:%s r_xprt=%p: %u new recvs, %d active (rc %d)",
7837c8d9e7cSChuck Lever 		__get_str(addr), __get_str(port), __entry->r_xprt,
7847c8d9e7cSChuck Lever 		__entry->count, __entry->posted, __entry->status
785ab03eff5SChuck Lever 	)
786ab03eff5SChuck Lever );
787ab03eff5SChuck Lever 
78836a55edfSChuck Lever TRACE_EVENT(xprtrdma_post_linv_err,
7894b93dab3SChuck Lever 	TP_PROTO(
7904b93dab3SChuck Lever 		const struct rpcrdma_req *req,
7914b93dab3SChuck Lever 		int status
7924b93dab3SChuck Lever 	),
7934b93dab3SChuck Lever 
7944b93dab3SChuck Lever 	TP_ARGS(req, status),
7954b93dab3SChuck Lever 
7964b93dab3SChuck Lever 	TP_STRUCT__entry(
79736a55edfSChuck Lever 		__field(unsigned int, task_id)
79836a55edfSChuck Lever 		__field(unsigned int, client_id)
7994b93dab3SChuck Lever 		__field(int, status)
8004b93dab3SChuck Lever 	),
8014b93dab3SChuck Lever 
8024b93dab3SChuck Lever 	TP_fast_assign(
80336a55edfSChuck Lever 		const struct rpc_task *task = req->rl_slot.rq_task;
80436a55edfSChuck Lever 
80536a55edfSChuck Lever 		__entry->task_id = task->tk_pid;
80636a55edfSChuck Lever 		__entry->client_id = task->tk_client->cl_clid;
8074b93dab3SChuck Lever 		__entry->status = status;
8084b93dab3SChuck Lever 	),
8094b93dab3SChuck Lever 
81036a55edfSChuck Lever 	TP_printk("task:%u@%u status=%d",
81136a55edfSChuck Lever 		__entry->task_id, __entry->client_id, __entry->status
8124b93dab3SChuck Lever 	)
8134b93dab3SChuck Lever );
8144b93dab3SChuck Lever 
815ab03eff5SChuck Lever /**
816ab03eff5SChuck Lever  ** Completion events
817ab03eff5SChuck Lever  **/
818ab03eff5SChuck Lever 
819af5865d2SChuck Lever DEFINE_COMPLETION_EVENT(xprtrdma_wc_receive);
820b2e7467fSChuck Lever DEFINE_COMPLETION_EVENT(xprtrdma_wc_send);
8215ecef9c8SChuck Lever DEFINE_COMPLETION_EVENT(xprtrdma_wc_fastreg);
8225ecef9c8SChuck Lever DEFINE_COMPLETION_EVENT(xprtrdma_wc_li);
8235ecef9c8SChuck Lever DEFINE_COMPLETION_EVENT(xprtrdma_wc_li_wake);
8245ecef9c8SChuck Lever DEFINE_COMPLETION_EVENT(xprtrdma_wc_li_done);
8252937fedeSChuck Lever 
82653b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_alloc,
82753b2c1cbSChuck Lever 	TP_PROTO(
82853b2c1cbSChuck Lever 		const struct rpcrdma_mr *mr,
82953b2c1cbSChuck Lever 		int rc
83053b2c1cbSChuck Lever 	),
83153b2c1cbSChuck Lever 
83253b2c1cbSChuck Lever 	TP_ARGS(mr, rc),
83353b2c1cbSChuck Lever 
83453b2c1cbSChuck Lever 	TP_STRUCT__entry(
83562a89501SChuck Lever 		__field(u32, mr_id)
83653b2c1cbSChuck Lever 		__field(int, rc)
83753b2c1cbSChuck Lever 	),
83853b2c1cbSChuck Lever 
83953b2c1cbSChuck Lever 	TP_fast_assign(
84062a89501SChuck Lever 		__entry->mr_id = mr->frwr.fr_mr->res.id;
84153b2c1cbSChuck Lever 		__entry->rc = rc;
84253b2c1cbSChuck Lever 	),
84353b2c1cbSChuck Lever 
84462a89501SChuck Lever 	TP_printk("mr.id=%u: rc=%d",
84562a89501SChuck Lever 		__entry->mr_id, __entry->rc
84653b2c1cbSChuck Lever 	)
84753b2c1cbSChuck Lever );
84853b2c1cbSChuck Lever 
84953b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_dereg,
85053b2c1cbSChuck Lever 	TP_PROTO(
85153b2c1cbSChuck Lever 		const struct rpcrdma_mr *mr,
85253b2c1cbSChuck Lever 		int rc
85353b2c1cbSChuck Lever 	),
85453b2c1cbSChuck Lever 
85553b2c1cbSChuck Lever 	TP_ARGS(mr, rc),
85653b2c1cbSChuck Lever 
85753b2c1cbSChuck Lever 	TP_STRUCT__entry(
85862a89501SChuck Lever 		__field(u32, mr_id)
85962a89501SChuck Lever 		__field(int, nents)
86053b2c1cbSChuck Lever 		__field(u32, handle)
86153b2c1cbSChuck Lever 		__field(u32, length)
86253b2c1cbSChuck Lever 		__field(u64, offset)
86353b2c1cbSChuck Lever 		__field(u32, dir)
86453b2c1cbSChuck Lever 		__field(int, rc)
86553b2c1cbSChuck Lever 	),
86653b2c1cbSChuck Lever 
86753b2c1cbSChuck Lever 	TP_fast_assign(
86862a89501SChuck Lever 		__entry->mr_id  = mr->frwr.fr_mr->res.id;
86962a89501SChuck Lever 		__entry->nents  = mr->mr_nents;
87053b2c1cbSChuck Lever 		__entry->handle = mr->mr_handle;
87153b2c1cbSChuck Lever 		__entry->length = mr->mr_length;
87253b2c1cbSChuck Lever 		__entry->offset = mr->mr_offset;
87353b2c1cbSChuck Lever 		__entry->dir    = mr->mr_dir;
87453b2c1cbSChuck Lever 		__entry->rc	= rc;
87553b2c1cbSChuck Lever 	),
87653b2c1cbSChuck Lever 
87762a89501SChuck Lever 	TP_printk("mr.id=%u nents=%d %u@0x%016llx:0x%08x (%s): rc=%d",
87862a89501SChuck Lever 		__entry->mr_id, __entry->nents, __entry->length,
87953b2c1cbSChuck Lever 		(unsigned long long)__entry->offset, __entry->handle,
88053b2c1cbSChuck Lever 		xprtrdma_show_direction(__entry->dir),
88153b2c1cbSChuck Lever 		__entry->rc
88253b2c1cbSChuck Lever 	)
88353b2c1cbSChuck Lever );
88453b2c1cbSChuck Lever 
88553b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_sgerr,
88653b2c1cbSChuck Lever 	TP_PROTO(
88753b2c1cbSChuck Lever 		const struct rpcrdma_mr *mr,
88853b2c1cbSChuck Lever 		int sg_nents
88953b2c1cbSChuck Lever 	),
89053b2c1cbSChuck Lever 
89153b2c1cbSChuck Lever 	TP_ARGS(mr, sg_nents),
89253b2c1cbSChuck Lever 
89353b2c1cbSChuck Lever 	TP_STRUCT__entry(
89462a89501SChuck Lever 		__field(u32, mr_id)
89553b2c1cbSChuck Lever 		__field(u64, addr)
89653b2c1cbSChuck Lever 		__field(u32, dir)
89753b2c1cbSChuck Lever 		__field(int, nents)
89853b2c1cbSChuck Lever 	),
89953b2c1cbSChuck Lever 
90053b2c1cbSChuck Lever 	TP_fast_assign(
90162a89501SChuck Lever 		__entry->mr_id = mr->frwr.fr_mr->res.id;
90253b2c1cbSChuck Lever 		__entry->addr = mr->mr_sg->dma_address;
90353b2c1cbSChuck Lever 		__entry->dir = mr->mr_dir;
90453b2c1cbSChuck Lever 		__entry->nents = sg_nents;
90553b2c1cbSChuck Lever 	),
90653b2c1cbSChuck Lever 
90762a89501SChuck Lever 	TP_printk("mr.id=%u DMA addr=0x%llx (%s) sg_nents=%d",
90862a89501SChuck Lever 		__entry->mr_id, __entry->addr,
90953b2c1cbSChuck Lever 		xprtrdma_show_direction(__entry->dir),
91053b2c1cbSChuck Lever 		__entry->nents
91153b2c1cbSChuck Lever 	)
91253b2c1cbSChuck Lever );
91353b2c1cbSChuck Lever 
91453b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_maperr,
91553b2c1cbSChuck Lever 	TP_PROTO(
91653b2c1cbSChuck Lever 		const struct rpcrdma_mr *mr,
91753b2c1cbSChuck Lever 		int num_mapped
91853b2c1cbSChuck Lever 	),
91953b2c1cbSChuck Lever 
92053b2c1cbSChuck Lever 	TP_ARGS(mr, num_mapped),
92153b2c1cbSChuck Lever 
92253b2c1cbSChuck Lever 	TP_STRUCT__entry(
92362a89501SChuck Lever 		__field(u32, mr_id)
92453b2c1cbSChuck Lever 		__field(u64, addr)
92553b2c1cbSChuck Lever 		__field(u32, dir)
92653b2c1cbSChuck Lever 		__field(int, num_mapped)
92753b2c1cbSChuck Lever 		__field(int, nents)
92853b2c1cbSChuck Lever 	),
92953b2c1cbSChuck Lever 
93053b2c1cbSChuck Lever 	TP_fast_assign(
93162a89501SChuck Lever 		__entry->mr_id = mr->frwr.fr_mr->res.id;
93253b2c1cbSChuck Lever 		__entry->addr = mr->mr_sg->dma_address;
93353b2c1cbSChuck Lever 		__entry->dir = mr->mr_dir;
93453b2c1cbSChuck Lever 		__entry->num_mapped = num_mapped;
93553b2c1cbSChuck Lever 		__entry->nents = mr->mr_nents;
93653b2c1cbSChuck Lever 	),
93753b2c1cbSChuck Lever 
93862a89501SChuck Lever 	TP_printk("mr.id=%u DMA addr=0x%llx (%s) nents=%d of %d",
93962a89501SChuck Lever 		__entry->mr_id, __entry->addr,
94053b2c1cbSChuck Lever 		xprtrdma_show_direction(__entry->dir),
94153b2c1cbSChuck Lever 		__entry->num_mapped, __entry->nents
94253b2c1cbSChuck Lever 	)
94353b2c1cbSChuck Lever );
94453b2c1cbSChuck Lever 
945d379eaa8SChuck Lever DEFINE_MR_EVENT(localinv);
946d379eaa8SChuck Lever DEFINE_MR_EVENT(map);
947d379eaa8SChuck Lever DEFINE_MR_EVENT(unmap);
94862a89501SChuck Lever DEFINE_MR_EVENT(reminv);
949d379eaa8SChuck Lever DEFINE_MR_EVENT(recycle);
95058f10ad4SChuck Lever 
95153b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_dma_maperr,
95253b2c1cbSChuck Lever 	TP_PROTO(
95353b2c1cbSChuck Lever 		u64 addr
95453b2c1cbSChuck Lever 	),
95553b2c1cbSChuck Lever 
95653b2c1cbSChuck Lever 	TP_ARGS(addr),
95753b2c1cbSChuck Lever 
95853b2c1cbSChuck Lever 	TP_STRUCT__entry(
95953b2c1cbSChuck Lever 		__field(u64, addr)
96053b2c1cbSChuck Lever 	),
96153b2c1cbSChuck Lever 
96253b2c1cbSChuck Lever 	TP_fast_assign(
96353b2c1cbSChuck Lever 		__entry->addr = addr;
96453b2c1cbSChuck Lever 	),
96553b2c1cbSChuck Lever 
96653b2c1cbSChuck Lever 	TP_printk("dma addr=0x%llx\n", __entry->addr)
96753b2c1cbSChuck Lever );
96853b2c1cbSChuck Lever 
969b4a7f91cSChuck Lever /**
970b4a7f91cSChuck Lever  ** Reply events
971b4a7f91cSChuck Lever  **/
972b4a7f91cSChuck Lever 
973b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_reply,
974b4a7f91cSChuck Lever 	TP_PROTO(
975b4a7f91cSChuck Lever 		const struct rpc_task *task,
976b4a7f91cSChuck Lever 		const struct rpcrdma_rep *rep,
977b4a7f91cSChuck Lever 		const struct rpcrdma_req *req,
978b4a7f91cSChuck Lever 		unsigned int credits
979b4a7f91cSChuck Lever 	),
980b4a7f91cSChuck Lever 
981b4a7f91cSChuck Lever 	TP_ARGS(task, rep, req, credits),
982b4a7f91cSChuck Lever 
983b4a7f91cSChuck Lever 	TP_STRUCT__entry(
984b4a7f91cSChuck Lever 		__field(unsigned int, task_id)
985b4a7f91cSChuck Lever 		__field(unsigned int, client_id)
986b4a7f91cSChuck Lever 		__field(const void *, rep)
987b4a7f91cSChuck Lever 		__field(const void *, req)
988b4a7f91cSChuck Lever 		__field(u32, xid)
989b4a7f91cSChuck Lever 		__field(unsigned int, credits)
990b4a7f91cSChuck Lever 	),
991b4a7f91cSChuck Lever 
992b4a7f91cSChuck Lever 	TP_fast_assign(
993b4a7f91cSChuck Lever 		__entry->task_id = task->tk_pid;
994b4a7f91cSChuck Lever 		__entry->client_id = task->tk_client->cl_clid;
995b4a7f91cSChuck Lever 		__entry->rep = rep;
996b4a7f91cSChuck Lever 		__entry->req = req;
997b4a7f91cSChuck Lever 		__entry->xid = be32_to_cpu(rep->rr_xid);
998b4a7f91cSChuck Lever 		__entry->credits = credits;
999b4a7f91cSChuck Lever 	),
1000b4a7f91cSChuck Lever 
1001b4a7f91cSChuck Lever 	TP_printk("task:%u@%u xid=0x%08x, %u credits, rep=%p -> req=%p",
1002b4a7f91cSChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
1003b4a7f91cSChuck Lever 		__entry->credits, __entry->rep, __entry->req
1004b4a7f91cSChuck Lever 	)
1005b4a7f91cSChuck Lever );
1006b4a7f91cSChuck Lever 
1007b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_defer_cmp,
1008b4a7f91cSChuck Lever 	TP_PROTO(
1009b4a7f91cSChuck Lever 		const struct rpcrdma_rep *rep
1010b4a7f91cSChuck Lever 	),
1011b4a7f91cSChuck Lever 
1012b4a7f91cSChuck Lever 	TP_ARGS(rep),
1013b4a7f91cSChuck Lever 
1014b4a7f91cSChuck Lever 	TP_STRUCT__entry(
1015b4a7f91cSChuck Lever 		__field(unsigned int, task_id)
1016b4a7f91cSChuck Lever 		__field(unsigned int, client_id)
1017b4a7f91cSChuck Lever 		__field(const void *, rep)
1018b4a7f91cSChuck Lever 		__field(u32, xid)
1019b4a7f91cSChuck Lever 	),
1020b4a7f91cSChuck Lever 
1021b4a7f91cSChuck Lever 	TP_fast_assign(
1022b4a7f91cSChuck Lever 		__entry->task_id = rep->rr_rqst->rq_task->tk_pid;
1023b4a7f91cSChuck Lever 		__entry->client_id = rep->rr_rqst->rq_task->tk_client->cl_clid;
1024b4a7f91cSChuck Lever 		__entry->rep = rep;
1025b4a7f91cSChuck Lever 		__entry->xid = be32_to_cpu(rep->rr_xid);
1026b4a7f91cSChuck Lever 	),
1027b4a7f91cSChuck Lever 
1028b4a7f91cSChuck Lever 	TP_printk("task:%u@%u xid=0x%08x rep=%p",
1029b4a7f91cSChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
1030b4a7f91cSChuck Lever 		__entry->rep
1031b4a7f91cSChuck Lever 	)
1032b4a7f91cSChuck Lever );
1033b4a7f91cSChuck Lever 
1034*3a9568feSChuck Lever DEFINE_REPLY_EVENT(vers);
1035*3a9568feSChuck Lever DEFINE_REPLY_EVENT(rqst);
1036*3a9568feSChuck Lever DEFINE_REPLY_EVENT(short);
1037*3a9568feSChuck Lever DEFINE_REPLY_EVENT(hdr);
1038b4a7f91cSChuck Lever 
10393821e232SChuck Lever TRACE_EVENT(xprtrdma_err_vers,
10403821e232SChuck Lever 	TP_PROTO(
10413821e232SChuck Lever 		const struct rpc_rqst *rqst,
10423821e232SChuck Lever 		__be32 *min,
10433821e232SChuck Lever 		__be32 *max
10443821e232SChuck Lever 	),
10453821e232SChuck Lever 
10463821e232SChuck Lever 	TP_ARGS(rqst, min, max),
10473821e232SChuck Lever 
10483821e232SChuck Lever 	TP_STRUCT__entry(
10493821e232SChuck Lever 		__field(unsigned int, task_id)
10503821e232SChuck Lever 		__field(unsigned int, client_id)
10513821e232SChuck Lever 		__field(u32, xid)
10523821e232SChuck Lever 		__field(u32, min)
10533821e232SChuck Lever 		__field(u32, max)
10543821e232SChuck Lever 	),
10553821e232SChuck Lever 
10563821e232SChuck Lever 	TP_fast_assign(
10573821e232SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
10583821e232SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
10593821e232SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
10603821e232SChuck Lever 		__entry->min = be32_to_cpup(min);
10613821e232SChuck Lever 		__entry->max = be32_to_cpup(max);
10623821e232SChuck Lever 	),
10633821e232SChuck Lever 
10643821e232SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x versions=[%u, %u]",
10653821e232SChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
10663821e232SChuck Lever 		__entry->min, __entry->max
10673821e232SChuck Lever 	)
10683821e232SChuck Lever );
10693821e232SChuck Lever 
10703821e232SChuck Lever TRACE_EVENT(xprtrdma_err_chunk,
10713821e232SChuck Lever 	TP_PROTO(
10723821e232SChuck Lever 		const struct rpc_rqst *rqst
10733821e232SChuck Lever 	),
10743821e232SChuck Lever 
10753821e232SChuck Lever 	TP_ARGS(rqst),
10763821e232SChuck Lever 
10773821e232SChuck Lever 	TP_STRUCT__entry(
10783821e232SChuck Lever 		__field(unsigned int, task_id)
10793821e232SChuck Lever 		__field(unsigned int, client_id)
10803821e232SChuck Lever 		__field(u32, xid)
10813821e232SChuck Lever 	),
10823821e232SChuck Lever 
10833821e232SChuck Lever 	TP_fast_assign(
10843821e232SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
10853821e232SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
10863821e232SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
10873821e232SChuck Lever 	),
10883821e232SChuck Lever 
10893821e232SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x",
10903821e232SChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid
10913821e232SChuck Lever 	)
10923821e232SChuck Lever );
10933821e232SChuck Lever 
10943821e232SChuck Lever TRACE_EVENT(xprtrdma_err_unrecognized,
10953821e232SChuck Lever 	TP_PROTO(
10963821e232SChuck Lever 		const struct rpc_rqst *rqst,
10973821e232SChuck Lever 		__be32 *procedure
10983821e232SChuck Lever 	),
10993821e232SChuck Lever 
11003821e232SChuck Lever 	TP_ARGS(rqst, procedure),
11013821e232SChuck Lever 
11023821e232SChuck Lever 	TP_STRUCT__entry(
11033821e232SChuck Lever 		__field(unsigned int, task_id)
11043821e232SChuck Lever 		__field(unsigned int, client_id)
11053821e232SChuck Lever 		__field(u32, xid)
11063821e232SChuck Lever 		__field(u32, procedure)
11073821e232SChuck Lever 	),
11083821e232SChuck Lever 
11093821e232SChuck Lever 	TP_fast_assign(
11103821e232SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
11113821e232SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
11123821e232SChuck Lever 		__entry->procedure = be32_to_cpup(procedure);
11133821e232SChuck Lever 	),
11143821e232SChuck Lever 
11153821e232SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x procedure=%u",
11163821e232SChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
11173821e232SChuck Lever 		__entry->procedure
11183821e232SChuck Lever 	)
11193821e232SChuck Lever );
11203821e232SChuck Lever 
1121e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_fixup,
1122e11b7c96SChuck Lever 	TP_PROTO(
1123e11b7c96SChuck Lever 		const struct rpc_rqst *rqst,
1124d4957f01SChuck Lever 		unsigned long fixup
1125e11b7c96SChuck Lever 	),
1126e11b7c96SChuck Lever 
1127d4957f01SChuck Lever 	TP_ARGS(rqst, fixup),
1128e11b7c96SChuck Lever 
1129e11b7c96SChuck Lever 	TP_STRUCT__entry(
1130e11b7c96SChuck Lever 		__field(unsigned int, task_id)
1131e11b7c96SChuck Lever 		__field(unsigned int, client_id)
1132d4957f01SChuck Lever 		__field(unsigned long, fixup)
1133d4957f01SChuck Lever 		__field(size_t, headlen)
1134d4957f01SChuck Lever 		__field(unsigned int, pagelen)
1135d4957f01SChuck Lever 		__field(size_t, taillen)
1136e11b7c96SChuck Lever 	),
1137e11b7c96SChuck Lever 
1138e11b7c96SChuck Lever 	TP_fast_assign(
1139e11b7c96SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
1140e11b7c96SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
1141d4957f01SChuck Lever 		__entry->fixup = fixup;
1142d4957f01SChuck Lever 		__entry->headlen = rqst->rq_rcv_buf.head[0].iov_len;
1143d4957f01SChuck Lever 		__entry->pagelen = rqst->rq_rcv_buf.page_len;
1144d4957f01SChuck Lever 		__entry->taillen = rqst->rq_rcv_buf.tail[0].iov_len;
1145e11b7c96SChuck Lever 	),
1146e11b7c96SChuck Lever 
1147d4957f01SChuck Lever 	TP_printk("task:%u@%u fixup=%lu xdr=%zu/%u/%zu",
1148d4957f01SChuck Lever 		__entry->task_id, __entry->client_id, __entry->fixup,
1149d4957f01SChuck Lever 		__entry->headlen, __entry->pagelen, __entry->taillen
1150e11b7c96SChuck Lever 	)
1151e11b7c96SChuck Lever );
1152e11b7c96SChuck Lever 
1153e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_decode_seg,
1154e11b7c96SChuck Lever 	TP_PROTO(
1155e11b7c96SChuck Lever 		u32 handle,
1156e11b7c96SChuck Lever 		u32 length,
1157e11b7c96SChuck Lever 		u64 offset
1158e11b7c96SChuck Lever 	),
1159e11b7c96SChuck Lever 
1160e11b7c96SChuck Lever 	TP_ARGS(handle, length, offset),
1161e11b7c96SChuck Lever 
1162e11b7c96SChuck Lever 	TP_STRUCT__entry(
1163e11b7c96SChuck Lever 		__field(u32, handle)
1164e11b7c96SChuck Lever 		__field(u32, length)
1165e11b7c96SChuck Lever 		__field(u64, offset)
1166e11b7c96SChuck Lever 	),
1167e11b7c96SChuck Lever 
1168e11b7c96SChuck Lever 	TP_fast_assign(
1169e11b7c96SChuck Lever 		__entry->handle = handle;
1170e11b7c96SChuck Lever 		__entry->length = length;
1171e11b7c96SChuck Lever 		__entry->offset = offset;
1172e11b7c96SChuck Lever 	),
1173e11b7c96SChuck Lever 
1174e11b7c96SChuck Lever 	TP_printk("%u@0x%016llx:0x%08x",
1175e11b7c96SChuck Lever 		__entry->length, (unsigned long long)__entry->offset,
1176e11b7c96SChuck Lever 		__entry->handle
1177e11b7c96SChuck Lever 	)
1178e11b7c96SChuck Lever );
1179e11b7c96SChuck Lever 
1180fc1eb807SChuck Lever /**
1181fc1eb807SChuck Lever  ** Callback events
1182fc1eb807SChuck Lever  **/
1183fc1eb807SChuck Lever 
1184fc1eb807SChuck Lever TRACE_EVENT(xprtrdma_cb_setup,
1185fc1eb807SChuck Lever 	TP_PROTO(
1186fc1eb807SChuck Lever 		const struct rpcrdma_xprt *r_xprt,
1187fc1eb807SChuck Lever 		unsigned int reqs
1188fc1eb807SChuck Lever 	),
1189fc1eb807SChuck Lever 
1190fc1eb807SChuck Lever 	TP_ARGS(r_xprt, reqs),
1191fc1eb807SChuck Lever 
1192fc1eb807SChuck Lever 	TP_STRUCT__entry(
1193fc1eb807SChuck Lever 		__field(const void *, r_xprt)
1194fc1eb807SChuck Lever 		__field(unsigned int, reqs)
1195fc1eb807SChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
1196fc1eb807SChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
1197fc1eb807SChuck Lever 	),
1198fc1eb807SChuck Lever 
1199fc1eb807SChuck Lever 	TP_fast_assign(
1200fc1eb807SChuck Lever 		__entry->r_xprt = r_xprt;
1201fc1eb807SChuck Lever 		__entry->reqs = reqs;
1202fc1eb807SChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
1203fc1eb807SChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
1204fc1eb807SChuck Lever 	),
1205fc1eb807SChuck Lever 
1206fc1eb807SChuck Lever 	TP_printk("peer=[%s]:%s r_xprt=%p: %u reqs",
1207fc1eb807SChuck Lever 		__get_str(addr), __get_str(port),
1208fc1eb807SChuck Lever 		__entry->r_xprt, __entry->reqs
1209fc1eb807SChuck Lever 	)
1210fc1eb807SChuck Lever );
1211fc1eb807SChuck Lever 
1212fc1eb807SChuck Lever DEFINE_CB_EVENT(xprtrdma_cb_call);
1213fc1eb807SChuck Lever DEFINE_CB_EVENT(xprtrdma_cb_reply);
1214fc1eb807SChuck Lever 
121507e10308SChuck Lever TRACE_EVENT(xprtrdma_leaked_rep,
121607e10308SChuck Lever 	TP_PROTO(
121707e10308SChuck Lever 		const struct rpc_rqst *rqst,
121807e10308SChuck Lever 		const struct rpcrdma_rep *rep
121907e10308SChuck Lever 	),
122007e10308SChuck Lever 
122107e10308SChuck Lever 	TP_ARGS(rqst, rep),
122207e10308SChuck Lever 
122307e10308SChuck Lever 	TP_STRUCT__entry(
122407e10308SChuck Lever 		__field(unsigned int, task_id)
122507e10308SChuck Lever 		__field(unsigned int, client_id)
122607e10308SChuck Lever 		__field(u32, xid)
122707e10308SChuck Lever 		__field(const void *, rep)
122807e10308SChuck Lever 	),
122907e10308SChuck Lever 
123007e10308SChuck Lever 	TP_fast_assign(
123107e10308SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
123207e10308SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
123307e10308SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
123407e10308SChuck Lever 		__entry->rep = rep;
123507e10308SChuck Lever 	),
123607e10308SChuck Lever 
123707e10308SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x rep=%p",
123807e10308SChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
123907e10308SChuck Lever 		__entry->rep
124007e10308SChuck Lever 	)
124107e10308SChuck Lever );
124207e10308SChuck Lever 
124398895edbSChuck Lever /**
124498895edbSChuck Lever  ** Server-side RPC/RDMA events
124598895edbSChuck Lever  **/
124698895edbSChuck Lever 
1247e979a173SChuck Lever DECLARE_EVENT_CLASS(svcrdma_accept_class,
1248e979a173SChuck Lever 	TP_PROTO(
1249e979a173SChuck Lever 		const struct svcxprt_rdma *rdma,
1250e979a173SChuck Lever 		long status
1251e979a173SChuck Lever 	),
1252e979a173SChuck Lever 
1253e979a173SChuck Lever 	TP_ARGS(rdma, status),
1254e979a173SChuck Lever 
1255e979a173SChuck Lever 	TP_STRUCT__entry(
1256e979a173SChuck Lever 		__field(long, status)
1257e979a173SChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1258e979a173SChuck Lever 	),
1259e979a173SChuck Lever 
1260e979a173SChuck Lever 	TP_fast_assign(
1261e979a173SChuck Lever 		__entry->status = status;
1262e979a173SChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1263e979a173SChuck Lever 	),
1264e979a173SChuck Lever 
1265e979a173SChuck Lever 	TP_printk("addr=%s status=%ld",
1266e979a173SChuck Lever 		__get_str(addr), __entry->status
1267e979a173SChuck Lever 	)
1268e979a173SChuck Lever );
1269e979a173SChuck Lever 
1270e979a173SChuck Lever #define DEFINE_ACCEPT_EVENT(name) \
1271e979a173SChuck Lever 		DEFINE_EVENT(svcrdma_accept_class, svcrdma_##name##_err, \
1272e979a173SChuck Lever 				TP_PROTO( \
1273e979a173SChuck Lever 					const struct svcxprt_rdma *rdma, \
1274e979a173SChuck Lever 					long status \
1275e979a173SChuck Lever 				), \
1276e979a173SChuck Lever 				TP_ARGS(rdma, status))
1277e979a173SChuck Lever 
1278e979a173SChuck Lever DEFINE_ACCEPT_EVENT(pd);
1279e979a173SChuck Lever DEFINE_ACCEPT_EVENT(qp);
1280e979a173SChuck Lever DEFINE_ACCEPT_EVENT(fabric);
1281e979a173SChuck Lever DEFINE_ACCEPT_EVENT(initdepth);
1282e979a173SChuck Lever DEFINE_ACCEPT_EVENT(accept);
1283e979a173SChuck Lever 
128498895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_MSG);
128598895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_NOMSG);
128698895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_MSGP);
128798895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_DONE);
128898895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_ERROR);
128998895edbSChuck Lever 
129098895edbSChuck Lever #define show_rpcrdma_proc(x)						\
129198895edbSChuck Lever 		__print_symbolic(x,					\
129298895edbSChuck Lever 				{ RDMA_MSG, "RDMA_MSG" },		\
129398895edbSChuck Lever 				{ RDMA_NOMSG, "RDMA_NOMSG" },		\
129498895edbSChuck Lever 				{ RDMA_MSGP, "RDMA_MSGP" },		\
129598895edbSChuck Lever 				{ RDMA_DONE, "RDMA_DONE" },		\
129698895edbSChuck Lever 				{ RDMA_ERROR, "RDMA_ERROR" })
129798895edbSChuck Lever 
129898895edbSChuck Lever TRACE_EVENT(svcrdma_decode_rqst,
129998895edbSChuck Lever 	TP_PROTO(
1300007140eeSChuck Lever 		const struct svc_rdma_recv_ctxt *ctxt,
130198895edbSChuck Lever 		__be32 *p,
130298895edbSChuck Lever 		unsigned int hdrlen
130398895edbSChuck Lever 	),
130498895edbSChuck Lever 
1305007140eeSChuck Lever 	TP_ARGS(ctxt, p, hdrlen),
130698895edbSChuck Lever 
130798895edbSChuck Lever 	TP_STRUCT__entry(
1308007140eeSChuck Lever 		__field(u32, cq_id)
1309007140eeSChuck Lever 		__field(int, completion_id)
131098895edbSChuck Lever 		__field(u32, xid)
131198895edbSChuck Lever 		__field(u32, vers)
131298895edbSChuck Lever 		__field(u32, proc)
131398895edbSChuck Lever 		__field(u32, credits)
131498895edbSChuck Lever 		__field(unsigned int, hdrlen)
131598895edbSChuck Lever 	),
131698895edbSChuck Lever 
131798895edbSChuck Lever 	TP_fast_assign(
1318007140eeSChuck Lever 		__entry->cq_id = ctxt->rc_cid.ci_queue_id;
1319007140eeSChuck Lever 		__entry->completion_id = ctxt->rc_cid.ci_completion_id;
132098895edbSChuck Lever 		__entry->xid = be32_to_cpup(p++);
132198895edbSChuck Lever 		__entry->vers = be32_to_cpup(p++);
132298895edbSChuck Lever 		__entry->credits = be32_to_cpup(p++);
132398895edbSChuck Lever 		__entry->proc = be32_to_cpup(p);
132498895edbSChuck Lever 		__entry->hdrlen = hdrlen;
132598895edbSChuck Lever 	),
132698895edbSChuck Lever 
1327007140eeSChuck Lever 	TP_printk("cq.id=%u cid=%d xid=0x%08x vers=%u credits=%u proc=%s hdrlen=%u",
1328007140eeSChuck Lever 		__entry->cq_id, __entry->completion_id,
132998895edbSChuck Lever 		__entry->xid, __entry->vers, __entry->credits,
133098895edbSChuck Lever 		show_rpcrdma_proc(__entry->proc), __entry->hdrlen)
133198895edbSChuck Lever );
133298895edbSChuck Lever 
133327ce6294SChuck Lever TRACE_EVENT(svcrdma_decode_short_err,
133498895edbSChuck Lever 	TP_PROTO(
1335007140eeSChuck Lever 		const struct svc_rdma_recv_ctxt *ctxt,
133698895edbSChuck Lever 		unsigned int hdrlen
133798895edbSChuck Lever 	),
133898895edbSChuck Lever 
1339007140eeSChuck Lever 	TP_ARGS(ctxt, hdrlen),
134098895edbSChuck Lever 
134198895edbSChuck Lever 	TP_STRUCT__entry(
1342007140eeSChuck Lever 		__field(u32, cq_id)
1343007140eeSChuck Lever 		__field(int, completion_id)
134498895edbSChuck Lever 		__field(unsigned int, hdrlen)
134598895edbSChuck Lever 	),
134698895edbSChuck Lever 
134798895edbSChuck Lever 	TP_fast_assign(
1348007140eeSChuck Lever 		__entry->cq_id = ctxt->rc_cid.ci_queue_id;
1349007140eeSChuck Lever 		__entry->completion_id = ctxt->rc_cid.ci_completion_id;
135098895edbSChuck Lever 		__entry->hdrlen = hdrlen;
135198895edbSChuck Lever 	),
135298895edbSChuck Lever 
1353007140eeSChuck Lever 	TP_printk("cq.id=%u cid=%d hdrlen=%u",
1354007140eeSChuck Lever 		__entry->cq_id, __entry->completion_id,
1355007140eeSChuck Lever 		__entry->hdrlen)
135698895edbSChuck Lever );
135798895edbSChuck Lever 
135898895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_badreq_event,
135998895edbSChuck Lever 	TP_PROTO(
1360007140eeSChuck Lever 		const struct svc_rdma_recv_ctxt *ctxt,
136198895edbSChuck Lever 		__be32 *p
136298895edbSChuck Lever 	),
136398895edbSChuck Lever 
1364007140eeSChuck Lever 	TP_ARGS(ctxt, p),
136598895edbSChuck Lever 
136698895edbSChuck Lever 	TP_STRUCT__entry(
1367007140eeSChuck Lever 		__field(u32, cq_id)
1368007140eeSChuck Lever 		__field(int, completion_id)
136998895edbSChuck Lever 		__field(u32, xid)
137098895edbSChuck Lever 		__field(u32, vers)
137198895edbSChuck Lever 		__field(u32, proc)
137298895edbSChuck Lever 		__field(u32, credits)
137398895edbSChuck Lever 	),
137498895edbSChuck Lever 
137598895edbSChuck Lever 	TP_fast_assign(
1376007140eeSChuck Lever 		__entry->cq_id = ctxt->rc_cid.ci_queue_id;
1377007140eeSChuck Lever 		__entry->completion_id = ctxt->rc_cid.ci_completion_id;
137898895edbSChuck Lever 		__entry->xid = be32_to_cpup(p++);
137998895edbSChuck Lever 		__entry->vers = be32_to_cpup(p++);
138098895edbSChuck Lever 		__entry->credits = be32_to_cpup(p++);
138198895edbSChuck Lever 		__entry->proc = be32_to_cpup(p);
138298895edbSChuck Lever 	),
138398895edbSChuck Lever 
1384007140eeSChuck Lever 	TP_printk("cq.id=%u cid=%d xid=0x%08x vers=%u credits=%u proc=%u",
1385007140eeSChuck Lever 		__entry->cq_id, __entry->completion_id,
138698895edbSChuck Lever 		__entry->xid, __entry->vers, __entry->credits, __entry->proc)
138798895edbSChuck Lever );
138898895edbSChuck Lever 
138998895edbSChuck Lever #define DEFINE_BADREQ_EVENT(name)					\
139027ce6294SChuck Lever 		DEFINE_EVENT(svcrdma_badreq_event,			\
139127ce6294SChuck Lever 			     svcrdma_decode_##name##_err,		\
139298895edbSChuck Lever 				TP_PROTO(				\
1393007140eeSChuck Lever 					const struct svc_rdma_recv_ctxt *ctxt,	\
139498895edbSChuck Lever 					__be32 *p			\
139598895edbSChuck Lever 				),					\
1396007140eeSChuck Lever 				TP_ARGS(ctxt, p))
139798895edbSChuck Lever 
139898895edbSChuck Lever DEFINE_BADREQ_EVENT(badvers);
139998895edbSChuck Lever DEFINE_BADREQ_EVENT(drop);
140098895edbSChuck Lever DEFINE_BADREQ_EVENT(badproc);
140198895edbSChuck Lever DEFINE_BADREQ_EVENT(parse);
140298895edbSChuck Lever 
140398895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_segment_event,
140498895edbSChuck Lever 	TP_PROTO(
140598895edbSChuck Lever 		u32 handle,
140698895edbSChuck Lever 		u32 length,
140798895edbSChuck Lever 		u64 offset
140898895edbSChuck Lever 	),
140998895edbSChuck Lever 
141098895edbSChuck Lever 	TP_ARGS(handle, length, offset),
141198895edbSChuck Lever 
141298895edbSChuck Lever 	TP_STRUCT__entry(
141398895edbSChuck Lever 		__field(u32, handle)
141498895edbSChuck Lever 		__field(u32, length)
141598895edbSChuck Lever 		__field(u64, offset)
141698895edbSChuck Lever 	),
141798895edbSChuck Lever 
141898895edbSChuck Lever 	TP_fast_assign(
141998895edbSChuck Lever 		__entry->handle = handle;
142098895edbSChuck Lever 		__entry->length = length;
142198895edbSChuck Lever 		__entry->offset = offset;
142298895edbSChuck Lever 	),
142398895edbSChuck Lever 
142498895edbSChuck Lever 	TP_printk("%u@0x%016llx:0x%08x",
142598895edbSChuck Lever 		__entry->length, (unsigned long long)__entry->offset,
142698895edbSChuck Lever 		__entry->handle
142798895edbSChuck Lever 	)
142898895edbSChuck Lever );
142998895edbSChuck Lever 
143098895edbSChuck Lever #define DEFINE_SEGMENT_EVENT(name)					\
1431e604aad2SChuck Lever 		DEFINE_EVENT(svcrdma_segment_event, svcrdma_##name,\
143298895edbSChuck Lever 				TP_PROTO(				\
143398895edbSChuck Lever 					u32 handle,			\
143498895edbSChuck Lever 					u32 length,			\
143598895edbSChuck Lever 					u64 offset			\
143698895edbSChuck Lever 				),					\
143798895edbSChuck Lever 				TP_ARGS(handle, length, offset))
143898895edbSChuck Lever 
1439e604aad2SChuck Lever DEFINE_SEGMENT_EVENT(decode_wseg);
1440e604aad2SChuck Lever DEFINE_SEGMENT_EVENT(encode_rseg);
1441a406c563SChuck Lever DEFINE_SEGMENT_EVENT(send_rseg);
1442e604aad2SChuck Lever DEFINE_SEGMENT_EVENT(encode_wseg);
1443a406c563SChuck Lever DEFINE_SEGMENT_EVENT(send_wseg);
144498895edbSChuck Lever 
144598895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_chunk_event,
144698895edbSChuck Lever 	TP_PROTO(
144798895edbSChuck Lever 		u32 length
144898895edbSChuck Lever 	),
144998895edbSChuck Lever 
145098895edbSChuck Lever 	TP_ARGS(length),
145198895edbSChuck Lever 
145298895edbSChuck Lever 	TP_STRUCT__entry(
145398895edbSChuck Lever 		__field(u32, length)
145498895edbSChuck Lever 	),
145598895edbSChuck Lever 
145698895edbSChuck Lever 	TP_fast_assign(
145798895edbSChuck Lever 		__entry->length = length;
145898895edbSChuck Lever 	),
145998895edbSChuck Lever 
146098895edbSChuck Lever 	TP_printk("length=%u",
146198895edbSChuck Lever 		__entry->length
146298895edbSChuck Lever 	)
146398895edbSChuck Lever );
146498895edbSChuck Lever 
146598895edbSChuck Lever #define DEFINE_CHUNK_EVENT(name)					\
1466a406c563SChuck Lever 		DEFINE_EVENT(svcrdma_chunk_event, svcrdma_##name,	\
146798895edbSChuck Lever 				TP_PROTO(				\
146898895edbSChuck Lever 					u32 length			\
146998895edbSChuck Lever 				),					\
147098895edbSChuck Lever 				TP_ARGS(length))
147198895edbSChuck Lever 
1472a406c563SChuck Lever DEFINE_CHUNK_EVENT(send_pzr);
1473a406c563SChuck Lever DEFINE_CHUNK_EVENT(encode_write_chunk);
1474a406c563SChuck Lever DEFINE_CHUNK_EVENT(send_write_chunk);
1475a406c563SChuck Lever DEFINE_CHUNK_EVENT(encode_read_chunk);
1476a406c563SChuck Lever DEFINE_CHUNK_EVENT(send_reply_chunk);
147798895edbSChuck Lever 
1478a406c563SChuck Lever TRACE_EVENT(svcrdma_send_read_chunk,
147998895edbSChuck Lever 	TP_PROTO(
148098895edbSChuck Lever 		u32 length,
148198895edbSChuck Lever 		u32 position
148298895edbSChuck Lever 	),
148398895edbSChuck Lever 
148498895edbSChuck Lever 	TP_ARGS(length, position),
148598895edbSChuck Lever 
148698895edbSChuck Lever 	TP_STRUCT__entry(
148798895edbSChuck Lever 		__field(u32, length)
148898895edbSChuck Lever 		__field(u32, position)
148998895edbSChuck Lever 	),
149098895edbSChuck Lever 
149198895edbSChuck Lever 	TP_fast_assign(
149298895edbSChuck Lever 		__entry->length = length;
149398895edbSChuck Lever 		__entry->position = position;
149498895edbSChuck Lever 	),
149598895edbSChuck Lever 
149698895edbSChuck Lever 	TP_printk("length=%u position=%u",
149798895edbSChuck Lever 		__entry->length, __entry->position
149898895edbSChuck Lever 	)
149998895edbSChuck Lever );
150098895edbSChuck Lever 
150198895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_error_event,
150298895edbSChuck Lever 	TP_PROTO(
150398895edbSChuck Lever 		__be32 xid
150498895edbSChuck Lever 	),
150598895edbSChuck Lever 
150698895edbSChuck Lever 	TP_ARGS(xid),
150798895edbSChuck Lever 
150898895edbSChuck Lever 	TP_STRUCT__entry(
150998895edbSChuck Lever 		__field(u32, xid)
151098895edbSChuck Lever 	),
151198895edbSChuck Lever 
151298895edbSChuck Lever 	TP_fast_assign(
151398895edbSChuck Lever 		__entry->xid = be32_to_cpu(xid);
151498895edbSChuck Lever 	),
151598895edbSChuck Lever 
151698895edbSChuck Lever 	TP_printk("xid=0x%08x",
151798895edbSChuck Lever 		__entry->xid
151898895edbSChuck Lever 	)
151998895edbSChuck Lever );
152098895edbSChuck Lever 
152198895edbSChuck Lever #define DEFINE_ERROR_EVENT(name)					\
152298895edbSChuck Lever 		DEFINE_EVENT(svcrdma_error_event, svcrdma_err_##name,	\
152398895edbSChuck Lever 				TP_PROTO(				\
152498895edbSChuck Lever 					__be32 xid			\
152598895edbSChuck Lever 				),					\
152698895edbSChuck Lever 				TP_ARGS(xid))
152798895edbSChuck Lever 
152898895edbSChuck Lever DEFINE_ERROR_EVENT(vers);
152998895edbSChuck Lever DEFINE_ERROR_EVENT(chunk);
153098895edbSChuck Lever 
1531bd2abef3SChuck Lever /**
1532bd2abef3SChuck Lever  ** Server-side RDMA API events
1533bd2abef3SChuck Lever  **/
1534bd2abef3SChuck Lever 
1535832b2cb9SChuck Lever DECLARE_EVENT_CLASS(svcrdma_dma_map_class,
1536bd2abef3SChuck Lever 	TP_PROTO(
1537bd2abef3SChuck Lever 		const struct svcxprt_rdma *rdma,
1538832b2cb9SChuck Lever 		u64 dma_addr,
1539832b2cb9SChuck Lever 		u32 length
1540bd2abef3SChuck Lever 	),
1541bd2abef3SChuck Lever 
1542832b2cb9SChuck Lever 	TP_ARGS(rdma, dma_addr, length),
1543bd2abef3SChuck Lever 
1544bd2abef3SChuck Lever 	TP_STRUCT__entry(
1545832b2cb9SChuck Lever 		__field(u64, dma_addr)
1546832b2cb9SChuck Lever 		__field(u32, length)
1547bd2abef3SChuck Lever 		__string(device, rdma->sc_cm_id->device->name)
1548bd2abef3SChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1549bd2abef3SChuck Lever 	),
1550bd2abef3SChuck Lever 
1551bd2abef3SChuck Lever 	TP_fast_assign(
1552832b2cb9SChuck Lever 		__entry->dma_addr = dma_addr;
1553832b2cb9SChuck Lever 		__entry->length = length;
1554bd2abef3SChuck Lever 		__assign_str(device, rdma->sc_cm_id->device->name);
1555bd2abef3SChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1556bd2abef3SChuck Lever 	),
1557bd2abef3SChuck Lever 
1558832b2cb9SChuck Lever 	TP_printk("addr=%s device=%s dma_addr=%llu length=%u",
1559832b2cb9SChuck Lever 		__get_str(addr), __get_str(device),
1560832b2cb9SChuck Lever 		__entry->dma_addr, __entry->length
1561bd2abef3SChuck Lever 	)
1562bd2abef3SChuck Lever );
1563bd2abef3SChuck Lever 
1564832b2cb9SChuck Lever #define DEFINE_SVC_DMA_EVENT(name)					\
1565832b2cb9SChuck Lever 		DEFINE_EVENT(svcrdma_dma_map_class, svcrdma_##name,	\
1566832b2cb9SChuck Lever 				TP_PROTO(				\
1567832b2cb9SChuck Lever 					const struct svcxprt_rdma *rdma,\
1568832b2cb9SChuck Lever 					u64 dma_addr,			\
1569832b2cb9SChuck Lever 					u32 length			\
1570832b2cb9SChuck Lever 				),					\
1571832b2cb9SChuck Lever 				TP_ARGS(rdma, dma_addr, length))
1572832b2cb9SChuck Lever 
1573832b2cb9SChuck Lever DEFINE_SVC_DMA_EVENT(dma_map_page);
1574832b2cb9SChuck Lever DEFINE_SVC_DMA_EVENT(dma_unmap_page);
1575832b2cb9SChuck Lever 
15762abfbe7eSChuck Lever TRACE_EVENT(svcrdma_dma_map_rw_err,
1577bd2abef3SChuck Lever 	TP_PROTO(
1578bd2abef3SChuck Lever 		const struct svcxprt_rdma *rdma,
15792abfbe7eSChuck Lever 		unsigned int nents,
1580bd2abef3SChuck Lever 		int status
1581bd2abef3SChuck Lever 	),
1582bd2abef3SChuck Lever 
15832abfbe7eSChuck Lever 	TP_ARGS(rdma, nents, status),
1584bd2abef3SChuck Lever 
1585bd2abef3SChuck Lever 	TP_STRUCT__entry(
1586bd2abef3SChuck Lever 		__field(int, status)
15872abfbe7eSChuck Lever 		__field(unsigned int, nents)
1588bd2abef3SChuck Lever 		__string(device, rdma->sc_cm_id->device->name)
1589bd2abef3SChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1590bd2abef3SChuck Lever 	),
1591bd2abef3SChuck Lever 
1592bd2abef3SChuck Lever 	TP_fast_assign(
1593bd2abef3SChuck Lever 		__entry->status = status;
15942abfbe7eSChuck Lever 		__entry->nents = nents;
1595bd2abef3SChuck Lever 		__assign_str(device, rdma->sc_cm_id->device->name);
1596bd2abef3SChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1597bd2abef3SChuck Lever 	),
1598bd2abef3SChuck Lever 
15992abfbe7eSChuck Lever 	TP_printk("addr=%s device=%s nents=%u status=%d",
16002abfbe7eSChuck Lever 		__get_str(addr), __get_str(device), __entry->nents,
16012abfbe7eSChuck Lever 		__entry->status
1602bd2abef3SChuck Lever 	)
1603bd2abef3SChuck Lever );
1604bd2abef3SChuck Lever 
1605f4e53e1cSChuck Lever TRACE_EVENT(svcrdma_no_rwctx_err,
1606f4e53e1cSChuck Lever 	TP_PROTO(
1607f4e53e1cSChuck Lever 		const struct svcxprt_rdma *rdma,
1608f4e53e1cSChuck Lever 		unsigned int num_sges
1609f4e53e1cSChuck Lever 	),
1610f4e53e1cSChuck Lever 
1611f4e53e1cSChuck Lever 	TP_ARGS(rdma, num_sges),
1612f4e53e1cSChuck Lever 
1613f4e53e1cSChuck Lever 	TP_STRUCT__entry(
1614f4e53e1cSChuck Lever 		__field(unsigned int, num_sges)
1615f4e53e1cSChuck Lever 		__string(device, rdma->sc_cm_id->device->name)
1616f4e53e1cSChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1617f4e53e1cSChuck Lever 	),
1618f4e53e1cSChuck Lever 
1619f4e53e1cSChuck Lever 	TP_fast_assign(
1620f4e53e1cSChuck Lever 		__entry->num_sges = num_sges;
1621f4e53e1cSChuck Lever 		__assign_str(device, rdma->sc_cm_id->device->name);
1622f4e53e1cSChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1623f4e53e1cSChuck Lever 	),
1624f4e53e1cSChuck Lever 
1625f4e53e1cSChuck Lever 	TP_printk("addr=%s device=%s num_sges=%d",
1626f4e53e1cSChuck Lever 		__get_str(addr), __get_str(device), __entry->num_sges
1627f4e53e1cSChuck Lever 	)
1628f4e53e1cSChuck Lever );
1629f4e53e1cSChuck Lever 
16309d200638SChuck Lever TRACE_EVENT(svcrdma_page_overrun_err,
16319d200638SChuck Lever 	TP_PROTO(
16329d200638SChuck Lever 		const struct svcxprt_rdma *rdma,
16339d200638SChuck Lever 		const struct svc_rqst *rqst,
16349d200638SChuck Lever 		unsigned int pageno
16359d200638SChuck Lever 	),
16369d200638SChuck Lever 
16379d200638SChuck Lever 	TP_ARGS(rdma, rqst, pageno),
16389d200638SChuck Lever 
16399d200638SChuck Lever 	TP_STRUCT__entry(
16409d200638SChuck Lever 		__field(unsigned int, pageno)
16419d200638SChuck Lever 		__field(u32, xid)
16429d200638SChuck Lever 		__string(device, rdma->sc_cm_id->device->name)
16439d200638SChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
16449d200638SChuck Lever 	),
16459d200638SChuck Lever 
16469d200638SChuck Lever 	TP_fast_assign(
16479d200638SChuck Lever 		__entry->pageno = pageno;
16489d200638SChuck Lever 		__entry->xid = __be32_to_cpu(rqst->rq_xid);
16499d200638SChuck Lever 		__assign_str(device, rdma->sc_cm_id->device->name);
16509d200638SChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
16519d200638SChuck Lever 	),
16529d200638SChuck Lever 
16539d200638SChuck Lever 	TP_printk("addr=%s device=%s xid=0x%08x pageno=%u", __get_str(addr),
16549d200638SChuck Lever 		__get_str(device), __entry->xid, __entry->pageno
16559d200638SChuck Lever 	)
16569d200638SChuck Lever );
16579d200638SChuck Lever 
1658dbc17acdSChuck Lever TRACE_EVENT(svcrdma_small_wrch_err,
1659dbc17acdSChuck Lever 	TP_PROTO(
1660dbc17acdSChuck Lever 		const struct svcxprt_rdma *rdma,
1661dbc17acdSChuck Lever 		unsigned int remaining,
1662dbc17acdSChuck Lever 		unsigned int seg_no,
1663dbc17acdSChuck Lever 		unsigned int num_segs
1664dbc17acdSChuck Lever 	),
1665dbc17acdSChuck Lever 
1666dbc17acdSChuck Lever 	TP_ARGS(rdma, remaining, seg_no, num_segs),
1667dbc17acdSChuck Lever 
1668dbc17acdSChuck Lever 	TP_STRUCT__entry(
1669dbc17acdSChuck Lever 		__field(unsigned int, remaining)
1670dbc17acdSChuck Lever 		__field(unsigned int, seg_no)
1671dbc17acdSChuck Lever 		__field(unsigned int, num_segs)
1672dbc17acdSChuck Lever 		__string(device, rdma->sc_cm_id->device->name)
1673dbc17acdSChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1674dbc17acdSChuck Lever 	),
1675dbc17acdSChuck Lever 
1676dbc17acdSChuck Lever 	TP_fast_assign(
1677dbc17acdSChuck Lever 		__entry->remaining = remaining;
1678dbc17acdSChuck Lever 		__entry->seg_no = seg_no;
1679dbc17acdSChuck Lever 		__entry->num_segs = num_segs;
1680dbc17acdSChuck Lever 		__assign_str(device, rdma->sc_cm_id->device->name);
1681dbc17acdSChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1682dbc17acdSChuck Lever 	),
1683dbc17acdSChuck Lever 
1684dbc17acdSChuck Lever 	TP_printk("addr=%s device=%s remaining=%u seg_no=%u num_segs=%u",
1685dbc17acdSChuck Lever 		__get_str(addr), __get_str(device), __entry->remaining,
1686dbc17acdSChuck Lever 		__entry->seg_no, __entry->num_segs
1687dbc17acdSChuck Lever 	)
1688dbc17acdSChuck Lever );
1689dbc17acdSChuck Lever 
16900dabe948SChuck Lever TRACE_EVENT(svcrdma_send_pullup,
16910dabe948SChuck Lever 	TP_PROTO(
16920dabe948SChuck Lever 		unsigned int len
16930dabe948SChuck Lever 	),
16940dabe948SChuck Lever 
16950dabe948SChuck Lever 	TP_ARGS(len),
16960dabe948SChuck Lever 
16970dabe948SChuck Lever 	TP_STRUCT__entry(
16980dabe948SChuck Lever 		__field(unsigned int, len)
16990dabe948SChuck Lever 	),
17000dabe948SChuck Lever 
17010dabe948SChuck Lever 	TP_fast_assign(
17020dabe948SChuck Lever 		__entry->len = len;
17030dabe948SChuck Lever 	),
17040dabe948SChuck Lever 
17050dabe948SChuck Lever 	TP_printk("len=%u", __entry->len)
17060dabe948SChuck Lever );
17070dabe948SChuck Lever 
17083f8f25c6SChuck Lever TRACE_EVENT(svcrdma_send_err,
1709bd2abef3SChuck Lever 	TP_PROTO(
1710bd2abef3SChuck Lever 		const struct svc_rqst *rqst,
1711bd2abef3SChuck Lever 		int status
1712bd2abef3SChuck Lever 	),
1713bd2abef3SChuck Lever 
1714bd2abef3SChuck Lever 	TP_ARGS(rqst, status),
1715bd2abef3SChuck Lever 
1716bd2abef3SChuck Lever 	TP_STRUCT__entry(
1717bd2abef3SChuck Lever 		__field(int, status)
1718bd2abef3SChuck Lever 		__field(u32, xid)
1719bd2abef3SChuck Lever 		__string(addr, rqst->rq_xprt->xpt_remotebuf)
1720bd2abef3SChuck Lever 	),
1721bd2abef3SChuck Lever 
1722bd2abef3SChuck Lever 	TP_fast_assign(
1723bd2abef3SChuck Lever 		__entry->status = status;
1724bd2abef3SChuck Lever 		__entry->xid = __be32_to_cpu(rqst->rq_xid);
1725bd2abef3SChuck Lever 		__assign_str(addr, rqst->rq_xprt->xpt_remotebuf);
1726bd2abef3SChuck Lever 	),
1727bd2abef3SChuck Lever 
17283f8f25c6SChuck Lever 	TP_printk("addr=%s xid=0x%08x status=%d", __get_str(addr),
1729bd2abef3SChuck Lever 		__entry->xid, __entry->status
1730bd2abef3SChuck Lever 	)
1731bd2abef3SChuck Lever );
1732bd2abef3SChuck Lever 
1733bd2abef3SChuck Lever TRACE_EVENT(svcrdma_post_send,
1734bd2abef3SChuck Lever 	TP_PROTO(
173517f70f8dSChuck Lever 		const struct svc_rdma_send_ctxt *ctxt
1736bd2abef3SChuck Lever 	),
1737bd2abef3SChuck Lever 
173817f70f8dSChuck Lever 	TP_ARGS(ctxt),
1739bd2abef3SChuck Lever 
1740bd2abef3SChuck Lever 	TP_STRUCT__entry(
174117f70f8dSChuck Lever 		__field(u32, cq_id)
174217f70f8dSChuck Lever 		__field(int, completion_id)
1743bd2abef3SChuck Lever 		__field(unsigned int, num_sge)
1744bd2abef3SChuck Lever 		__field(u32, inv_rkey)
1745bd2abef3SChuck Lever 	),
1746bd2abef3SChuck Lever 
1747bd2abef3SChuck Lever 	TP_fast_assign(
174817f70f8dSChuck Lever 		const struct ib_send_wr *wr = &ctxt->sc_send_wr;
174917f70f8dSChuck Lever 
175017f70f8dSChuck Lever 		__entry->cq_id = ctxt->sc_cid.ci_queue_id;
175117f70f8dSChuck Lever 		__entry->completion_id = ctxt->sc_cid.ci_completion_id;
1752bd2abef3SChuck Lever 		__entry->num_sge = wr->num_sge;
1753bd2abef3SChuck Lever 		__entry->inv_rkey = (wr->opcode == IB_WR_SEND_WITH_INV) ?
1754bd2abef3SChuck Lever 					wr->ex.invalidate_rkey : 0;
1755bd2abef3SChuck Lever 	),
1756bd2abef3SChuck Lever 
175717f70f8dSChuck Lever 	TP_printk("cq_id=%u cid=%d num_sge=%u inv_rkey=0x%08x",
175817f70f8dSChuck Lever 		__entry->cq_id, __entry->completion_id,
175917f70f8dSChuck Lever 		__entry->num_sge, __entry->inv_rkey
1760bd2abef3SChuck Lever 	)
1761bd2abef3SChuck Lever );
1762bd2abef3SChuck Lever 
17633ac56c2fSChuck Lever DEFINE_COMPLETION_EVENT(svcrdma_wc_send);
1764bd2abef3SChuck Lever 
1765bd2abef3SChuck Lever TRACE_EVENT(svcrdma_post_recv,
1766bd2abef3SChuck Lever 	TP_PROTO(
17679b3bcf8cSChuck Lever 		const struct svc_rdma_recv_ctxt *ctxt
1768bd2abef3SChuck Lever 	),
1769bd2abef3SChuck Lever 
17709b3bcf8cSChuck Lever 	TP_ARGS(ctxt),
1771bd2abef3SChuck Lever 
1772bd2abef3SChuck Lever 	TP_STRUCT__entry(
17739b3bcf8cSChuck Lever 		__field(u32, cq_id)
17749b3bcf8cSChuck Lever 		__field(int, completion_id)
1775bd2abef3SChuck Lever 	),
1776bd2abef3SChuck Lever 
1777bd2abef3SChuck Lever 	TP_fast_assign(
17789b3bcf8cSChuck Lever 		__entry->cq_id = ctxt->rc_cid.ci_queue_id;
17799b3bcf8cSChuck Lever 		__entry->completion_id = ctxt->rc_cid.ci_completion_id;
1780bd2abef3SChuck Lever 	),
1781bd2abef3SChuck Lever 
17829b3bcf8cSChuck Lever 	TP_printk("cq.id=%d cid=%d",
17839b3bcf8cSChuck Lever 		__entry->cq_id, __entry->completion_id
1784bd2abef3SChuck Lever 	)
1785bd2abef3SChuck Lever );
1786bd2abef3SChuck Lever 
17879b3bcf8cSChuck Lever DEFINE_COMPLETION_EVENT(svcrdma_wc_receive);
17889b3bcf8cSChuck Lever 
17899b3bcf8cSChuck Lever TRACE_EVENT(svcrdma_rq_post_err,
1790bd2abef3SChuck Lever 	TP_PROTO(
17919b3bcf8cSChuck Lever 		const struct svcxprt_rdma *rdma,
17929b3bcf8cSChuck Lever 		int status
1793bd2abef3SChuck Lever 	),
1794bd2abef3SChuck Lever 
17959b3bcf8cSChuck Lever 	TP_ARGS(rdma, status),
1796bd2abef3SChuck Lever 
1797bd2abef3SChuck Lever 	TP_STRUCT__entry(
17989b3bcf8cSChuck Lever 		__field(int, status)
17999b3bcf8cSChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1800bd2abef3SChuck Lever 	),
1801bd2abef3SChuck Lever 
1802bd2abef3SChuck Lever 	TP_fast_assign(
18039b3bcf8cSChuck Lever 		__entry->status = status;
18049b3bcf8cSChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1805bd2abef3SChuck Lever 	),
1806bd2abef3SChuck Lever 
18079b3bcf8cSChuck Lever 	TP_printk("addr=%s status=%d",
18089b3bcf8cSChuck Lever 		__get_str(addr), __entry->status
1809bd2abef3SChuck Lever 	)
1810bd2abef3SChuck Lever );
1811bd2abef3SChuck Lever 
18126787f0beSChuck Lever TRACE_EVENT(svcrdma_post_chunk,
1813bd2abef3SChuck Lever 	TP_PROTO(
18146787f0beSChuck Lever 		const struct rpc_rdma_cid *cid,
1815e28b4fc6SChuck Lever 		int sqecount
1816bd2abef3SChuck Lever 	),
1817bd2abef3SChuck Lever 
18186787f0beSChuck Lever 	TP_ARGS(cid, sqecount),
1819bd2abef3SChuck Lever 
1820bd2abef3SChuck Lever 	TP_STRUCT__entry(
18216787f0beSChuck Lever 		__field(u32, cq_id)
18226787f0beSChuck Lever 		__field(int, completion_id)
1823bd2abef3SChuck Lever 		__field(int, sqecount)
1824bd2abef3SChuck Lever 	),
1825bd2abef3SChuck Lever 
1826bd2abef3SChuck Lever 	TP_fast_assign(
18276787f0beSChuck Lever 		__entry->cq_id = cid->ci_queue_id;
18286787f0beSChuck Lever 		__entry->completion_id = cid->ci_completion_id;
1829bd2abef3SChuck Lever 		__entry->sqecount = sqecount;
1830bd2abef3SChuck Lever 	),
1831bd2abef3SChuck Lever 
18326787f0beSChuck Lever 	TP_printk("cq.id=%u cid=%d sqecount=%d",
18336787f0beSChuck Lever 		__entry->cq_id, __entry->completion_id,
18346787f0beSChuck Lever 		__entry->sqecount
1835bd2abef3SChuck Lever 	)
1836bd2abef3SChuck Lever );
1837bd2abef3SChuck Lever 
18386787f0beSChuck Lever DEFINE_COMPLETION_EVENT(svcrdma_wc_read);
18396787f0beSChuck Lever DEFINE_COMPLETION_EVENT(svcrdma_wc_write);
1840bd2abef3SChuck Lever 
1841bd2abef3SChuck Lever TRACE_EVENT(svcrdma_qp_error,
1842bd2abef3SChuck Lever 	TP_PROTO(
1843bd2abef3SChuck Lever 		const struct ib_event *event,
1844bd2abef3SChuck Lever 		const struct sockaddr *sap
1845bd2abef3SChuck Lever 	),
1846bd2abef3SChuck Lever 
1847bd2abef3SChuck Lever 	TP_ARGS(event, sap),
1848bd2abef3SChuck Lever 
1849bd2abef3SChuck Lever 	TP_STRUCT__entry(
1850bd2abef3SChuck Lever 		__field(unsigned int, event)
1851bd2abef3SChuck Lever 		__string(device, event->device->name)
1852bd2abef3SChuck Lever 		__array(__u8, addr, INET6_ADDRSTRLEN + 10)
1853bd2abef3SChuck Lever 	),
1854bd2abef3SChuck Lever 
1855bd2abef3SChuck Lever 	TP_fast_assign(
1856bd2abef3SChuck Lever 		__entry->event = event->event;
1857bd2abef3SChuck Lever 		__assign_str(device, event->device->name);
1858bd2abef3SChuck Lever 		snprintf(__entry->addr, sizeof(__entry->addr) - 1,
1859bd2abef3SChuck Lever 			 "%pISpc", sap);
1860bd2abef3SChuck Lever 	),
1861bd2abef3SChuck Lever 
1862bd2abef3SChuck Lever 	TP_printk("addr=%s dev=%s event=%s (%u)",
1863bd2abef3SChuck Lever 		__entry->addr, __get_str(device),
1864bd2abef3SChuck Lever 		rdma_show_ib_event(__entry->event), __entry->event
1865bd2abef3SChuck Lever 	)
1866bd2abef3SChuck Lever );
1867bd2abef3SChuck Lever 
1868bd2abef3SChuck Lever DECLARE_EVENT_CLASS(svcrdma_sendqueue_event,
1869bd2abef3SChuck Lever 	TP_PROTO(
1870bd2abef3SChuck Lever 		const struct svcxprt_rdma *rdma
1871bd2abef3SChuck Lever 	),
1872bd2abef3SChuck Lever 
1873bd2abef3SChuck Lever 	TP_ARGS(rdma),
1874bd2abef3SChuck Lever 
1875bd2abef3SChuck Lever 	TP_STRUCT__entry(
1876bd2abef3SChuck Lever 		__field(int, avail)
1877bd2abef3SChuck Lever 		__field(int, depth)
1878bd2abef3SChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1879bd2abef3SChuck Lever 	),
1880bd2abef3SChuck Lever 
1881bd2abef3SChuck Lever 	TP_fast_assign(
1882bd2abef3SChuck Lever 		__entry->avail = atomic_read(&rdma->sc_sq_avail);
1883bd2abef3SChuck Lever 		__entry->depth = rdma->sc_sq_depth;
1884bd2abef3SChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1885bd2abef3SChuck Lever 	),
1886bd2abef3SChuck Lever 
1887bd2abef3SChuck Lever 	TP_printk("addr=%s sc_sq_avail=%d/%d",
1888bd2abef3SChuck Lever 		__get_str(addr), __entry->avail, __entry->depth
1889bd2abef3SChuck Lever 	)
1890bd2abef3SChuck Lever );
1891bd2abef3SChuck Lever 
1892bd2abef3SChuck Lever #define DEFINE_SQ_EVENT(name)						\
1893bd2abef3SChuck Lever 		DEFINE_EVENT(svcrdma_sendqueue_event, svcrdma_sq_##name,\
1894bd2abef3SChuck Lever 				TP_PROTO(				\
1895bd2abef3SChuck Lever 					const struct svcxprt_rdma *rdma \
1896bd2abef3SChuck Lever 				),					\
1897bd2abef3SChuck Lever 				TP_ARGS(rdma))
1898bd2abef3SChuck Lever 
1899bd2abef3SChuck Lever DEFINE_SQ_EVENT(full);
1900bd2abef3SChuck Lever DEFINE_SQ_EVENT(retry);
1901bd2abef3SChuck Lever 
1902e28b4fc6SChuck Lever TRACE_EVENT(svcrdma_sq_post_err,
1903e28b4fc6SChuck Lever 	TP_PROTO(
1904e28b4fc6SChuck Lever 		const struct svcxprt_rdma *rdma,
1905e28b4fc6SChuck Lever 		int status
1906e28b4fc6SChuck Lever 	),
1907e28b4fc6SChuck Lever 
1908e28b4fc6SChuck Lever 	TP_ARGS(rdma, status),
1909e28b4fc6SChuck Lever 
1910e28b4fc6SChuck Lever 	TP_STRUCT__entry(
1911e28b4fc6SChuck Lever 		__field(int, avail)
1912e28b4fc6SChuck Lever 		__field(int, depth)
1913e28b4fc6SChuck Lever 		__field(int, status)
1914e28b4fc6SChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1915e28b4fc6SChuck Lever 	),
1916e28b4fc6SChuck Lever 
1917e28b4fc6SChuck Lever 	TP_fast_assign(
1918e28b4fc6SChuck Lever 		__entry->avail = atomic_read(&rdma->sc_sq_avail);
1919e28b4fc6SChuck Lever 		__entry->depth = rdma->sc_sq_depth;
1920e28b4fc6SChuck Lever 		__entry->status = status;
1921e28b4fc6SChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1922e28b4fc6SChuck Lever 	),
1923e28b4fc6SChuck Lever 
1924e28b4fc6SChuck Lever 	TP_printk("addr=%s sc_sq_avail=%d/%d status=%d",
1925e28b4fc6SChuck Lever 		__get_str(addr), __entry->avail, __entry->depth,
1926e28b4fc6SChuck Lever 		__entry->status
1927e28b4fc6SChuck Lever 	)
1928e28b4fc6SChuck Lever );
1929e28b4fc6SChuck Lever 
1930e48f083eSChuck Lever #endif /* _TRACE_RPCRDMA_H */
1931e48f083eSChuck Lever 
1932e48f083eSChuck Lever #include <trace/define_trace.h>
1933