xref: /openbmc/linux/include/trace/events/rpcrdma.h (revision 6911f3e1)
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 
63b4a7f91cSChuck Lever DECLARE_EVENT_CLASS(xprtrdma_reply_event,
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(const void *, rep)
72b4a7f91cSChuck Lever 		__field(const void *, r_xprt)
73b4a7f91cSChuck Lever 		__field(u32, xid)
74b4a7f91cSChuck Lever 		__field(u32, version)
75b4a7f91cSChuck Lever 		__field(u32, proc)
76b4a7f91cSChuck Lever 	),
77b4a7f91cSChuck Lever 
78b4a7f91cSChuck Lever 	TP_fast_assign(
79b4a7f91cSChuck Lever 		__entry->rep = rep;
80b4a7f91cSChuck Lever 		__entry->r_xprt = rep->rr_rxprt;
81b4a7f91cSChuck Lever 		__entry->xid = be32_to_cpu(rep->rr_xid);
82b4a7f91cSChuck Lever 		__entry->version = be32_to_cpu(rep->rr_vers);
83b4a7f91cSChuck Lever 		__entry->proc = be32_to_cpu(rep->rr_proc);
84b4a7f91cSChuck Lever 	),
85b4a7f91cSChuck Lever 
86b4a7f91cSChuck Lever 	TP_printk("rxprt %p xid=0x%08x rep=%p: version %u proc %u",
87b4a7f91cSChuck Lever 		__entry->r_xprt, __entry->xid, __entry->rep,
88b4a7f91cSChuck Lever 		__entry->version, __entry->proc
89b4a7f91cSChuck Lever 	)
90b4a7f91cSChuck Lever );
91b4a7f91cSChuck Lever 
92b4a7f91cSChuck Lever #define DEFINE_REPLY_EVENT(name)					\
93b4a7f91cSChuck Lever 		DEFINE_EVENT(xprtrdma_reply_event, name,		\
94b4a7f91cSChuck Lever 				TP_PROTO(				\
95b4a7f91cSChuck Lever 					const struct rpcrdma_rep *rep	\
96b4a7f91cSChuck Lever 				),					\
97b4a7f91cSChuck Lever 				TP_ARGS(rep))
98b4a7f91cSChuck Lever 
991c443effSChuck Lever DECLARE_EVENT_CLASS(xprtrdma_rxprt,
1001c443effSChuck Lever 	TP_PROTO(
1011c443effSChuck Lever 		const struct rpcrdma_xprt *r_xprt
1021c443effSChuck Lever 	),
1031c443effSChuck Lever 
1041c443effSChuck Lever 	TP_ARGS(r_xprt),
1051c443effSChuck Lever 
1061c443effSChuck Lever 	TP_STRUCT__entry(
1071c443effSChuck Lever 		__field(const void *, r_xprt)
1081c443effSChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
1091c443effSChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
1101c443effSChuck Lever 	),
1111c443effSChuck Lever 
1121c443effSChuck Lever 	TP_fast_assign(
1131c443effSChuck Lever 		__entry->r_xprt = r_xprt;
1141c443effSChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
1151c443effSChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
1161c443effSChuck Lever 	),
1171c443effSChuck Lever 
1181c443effSChuck Lever 	TP_printk("peer=[%s]:%s r_xprt=%p",
1191c443effSChuck Lever 		__get_str(addr), __get_str(port), __entry->r_xprt
1201c443effSChuck Lever 	)
1211c443effSChuck Lever );
1221c443effSChuck Lever 
1231c443effSChuck Lever #define DEFINE_RXPRT_EVENT(name)					\
1241c443effSChuck Lever 		DEFINE_EVENT(xprtrdma_rxprt, name,			\
1251c443effSChuck Lever 				TP_PROTO(				\
1261c443effSChuck Lever 					const struct rpcrdma_xprt *r_xprt \
1271c443effSChuck Lever 				),					\
1281c443effSChuck Lever 				TP_ARGS(r_xprt))
1291c443effSChuck Lever 
1307b020f17SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_connect_class,
1317b020f17SChuck Lever 	TP_PROTO(
1327b020f17SChuck Lever 		const struct rpcrdma_xprt *r_xprt,
1337b020f17SChuck Lever 		int rc
1347b020f17SChuck Lever 	),
1357b020f17SChuck Lever 
1367b020f17SChuck Lever 	TP_ARGS(r_xprt, rc),
1377b020f17SChuck Lever 
1387b020f17SChuck Lever 	TP_STRUCT__entry(
1397b020f17SChuck Lever 		__field(const void *, r_xprt)
1407b020f17SChuck Lever 		__field(int, rc)
1417b020f17SChuck Lever 		__field(int, connect_status)
1427b020f17SChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
1437b020f17SChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
1447b020f17SChuck Lever 	),
1457b020f17SChuck Lever 
1467b020f17SChuck Lever 	TP_fast_assign(
1477b020f17SChuck Lever 		__entry->r_xprt = r_xprt;
1487b020f17SChuck Lever 		__entry->rc = rc;
149e28ce900SChuck Lever 		__entry->connect_status = r_xprt->rx_ep->re_connect_status;
1507b020f17SChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
1517b020f17SChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
1527b020f17SChuck Lever 	),
1537b020f17SChuck Lever 
154d6ccebf9SChuck Lever 	TP_printk("peer=[%s]:%s r_xprt=%p: rc=%d connection status=%d",
1557b020f17SChuck Lever 		__get_str(addr), __get_str(port), __entry->r_xprt,
1567b020f17SChuck Lever 		__entry->rc, __entry->connect_status
1577b020f17SChuck Lever 	)
1587b020f17SChuck Lever );
1597b020f17SChuck Lever 
1607b020f17SChuck Lever #define DEFINE_CONN_EVENT(name)						\
1617b020f17SChuck Lever 		DEFINE_EVENT(xprtrdma_connect_class, xprtrdma_##name,	\
1627b020f17SChuck Lever 				TP_PROTO(				\
1637b020f17SChuck Lever 					const struct rpcrdma_xprt *r_xprt, \
1647b020f17SChuck Lever 					int rc				\
1657b020f17SChuck Lever 				),					\
1667b020f17SChuck Lever 				TP_ARGS(r_xprt, rc))
1677b020f17SChuck Lever 
16858f10ad4SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_rdch_event,
16958f10ad4SChuck Lever 	TP_PROTO(
17058f10ad4SChuck Lever 		const struct rpc_task *task,
17158f10ad4SChuck Lever 		unsigned int pos,
17258f10ad4SChuck Lever 		struct rpcrdma_mr *mr,
17358f10ad4SChuck Lever 		int nsegs
17458f10ad4SChuck Lever 	),
17558f10ad4SChuck Lever 
17658f10ad4SChuck Lever 	TP_ARGS(task, pos, mr, nsegs),
17758f10ad4SChuck Lever 
17858f10ad4SChuck Lever 	TP_STRUCT__entry(
17958f10ad4SChuck Lever 		__field(unsigned int, task_id)
18058f10ad4SChuck Lever 		__field(unsigned int, client_id)
18158f10ad4SChuck Lever 		__field(unsigned int, pos)
18258f10ad4SChuck Lever 		__field(int, nents)
18358f10ad4SChuck Lever 		__field(u32, handle)
18458f10ad4SChuck Lever 		__field(u32, length)
18558f10ad4SChuck Lever 		__field(u64, offset)
18658f10ad4SChuck Lever 		__field(int, nsegs)
18758f10ad4SChuck Lever 	),
18858f10ad4SChuck Lever 
18958f10ad4SChuck Lever 	TP_fast_assign(
19058f10ad4SChuck Lever 		__entry->task_id = task->tk_pid;
19158f10ad4SChuck Lever 		__entry->client_id = task->tk_client->cl_clid;
19258f10ad4SChuck Lever 		__entry->pos = pos;
19358f10ad4SChuck Lever 		__entry->nents = mr->mr_nents;
19458f10ad4SChuck Lever 		__entry->handle = mr->mr_handle;
19558f10ad4SChuck Lever 		__entry->length = mr->mr_length;
19658f10ad4SChuck Lever 		__entry->offset = mr->mr_offset;
19758f10ad4SChuck Lever 		__entry->nsegs = nsegs;
19858f10ad4SChuck Lever 	),
19958f10ad4SChuck Lever 
200aba11831SChuck Lever 	TP_printk("task:%u@%u pos=%u %u@0x%016llx:0x%08x (%s)",
201aba11831SChuck Lever 		__entry->task_id, __entry->client_id,
20258f10ad4SChuck Lever 		__entry->pos, __entry->length,
20358f10ad4SChuck Lever 		(unsigned long long)__entry->offset, __entry->handle,
20458f10ad4SChuck Lever 		__entry->nents < __entry->nsegs ? "more" : "last"
20558f10ad4SChuck Lever 	)
20658f10ad4SChuck Lever );
20758f10ad4SChuck Lever 
20858f10ad4SChuck Lever #define DEFINE_RDCH_EVENT(name)						\
209aba11831SChuck Lever 		DEFINE_EVENT(xprtrdma_rdch_event, xprtrdma_chunk_##name,\
21058f10ad4SChuck Lever 				TP_PROTO(				\
21158f10ad4SChuck Lever 					const struct rpc_task *task,	\
21258f10ad4SChuck Lever 					unsigned int pos,		\
21358f10ad4SChuck Lever 					struct rpcrdma_mr *mr,		\
21458f10ad4SChuck Lever 					int nsegs			\
21558f10ad4SChuck Lever 				),					\
21658f10ad4SChuck Lever 				TP_ARGS(task, pos, mr, nsegs))
21758f10ad4SChuck Lever 
21858f10ad4SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_wrch_event,
21958f10ad4SChuck Lever 	TP_PROTO(
22058f10ad4SChuck Lever 		const struct rpc_task *task,
22158f10ad4SChuck Lever 		struct rpcrdma_mr *mr,
22258f10ad4SChuck Lever 		int nsegs
22358f10ad4SChuck Lever 	),
22458f10ad4SChuck Lever 
22558f10ad4SChuck Lever 	TP_ARGS(task, mr, nsegs),
22658f10ad4SChuck Lever 
22758f10ad4SChuck Lever 	TP_STRUCT__entry(
22858f10ad4SChuck Lever 		__field(unsigned int, task_id)
22958f10ad4SChuck Lever 		__field(unsigned int, client_id)
23058f10ad4SChuck Lever 		__field(int, nents)
23158f10ad4SChuck Lever 		__field(u32, handle)
23258f10ad4SChuck Lever 		__field(u32, length)
23358f10ad4SChuck Lever 		__field(u64, offset)
23458f10ad4SChuck Lever 		__field(int, nsegs)
23558f10ad4SChuck Lever 	),
23658f10ad4SChuck Lever 
23758f10ad4SChuck Lever 	TP_fast_assign(
23858f10ad4SChuck Lever 		__entry->task_id = task->tk_pid;
23958f10ad4SChuck Lever 		__entry->client_id = task->tk_client->cl_clid;
24058f10ad4SChuck Lever 		__entry->nents = mr->mr_nents;
24158f10ad4SChuck Lever 		__entry->handle = mr->mr_handle;
24258f10ad4SChuck Lever 		__entry->length = mr->mr_length;
24358f10ad4SChuck Lever 		__entry->offset = mr->mr_offset;
24458f10ad4SChuck Lever 		__entry->nsegs = nsegs;
24558f10ad4SChuck Lever 	),
24658f10ad4SChuck Lever 
247aba11831SChuck Lever 	TP_printk("task:%u@%u %u@0x%016llx:0x%08x (%s)",
248aba11831SChuck Lever 		__entry->task_id, __entry->client_id,
24958f10ad4SChuck Lever 		__entry->length, (unsigned long long)__entry->offset,
25058f10ad4SChuck Lever 		__entry->handle,
25158f10ad4SChuck Lever 		__entry->nents < __entry->nsegs ? "more" : "last"
25258f10ad4SChuck Lever 	)
25358f10ad4SChuck Lever );
25458f10ad4SChuck Lever 
25558f10ad4SChuck Lever #define DEFINE_WRCH_EVENT(name)						\
256aba11831SChuck Lever 		DEFINE_EVENT(xprtrdma_wrch_event, xprtrdma_chunk_##name,\
25758f10ad4SChuck Lever 				TP_PROTO(				\
25858f10ad4SChuck Lever 					const struct rpc_task *task,	\
25958f10ad4SChuck Lever 					struct rpcrdma_mr *mr,		\
26058f10ad4SChuck Lever 					int nsegs			\
26158f10ad4SChuck Lever 				),					\
26258f10ad4SChuck Lever 				TP_ARGS(task, mr, nsegs))
26358f10ad4SChuck Lever 
26458f10ad4SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_frwr_done,
26558f10ad4SChuck Lever 	TP_PROTO(
26658f10ad4SChuck Lever 		const struct ib_wc *wc,
26758f10ad4SChuck Lever 		const struct rpcrdma_frwr *frwr
26858f10ad4SChuck Lever 	),
26958f10ad4SChuck Lever 
27058f10ad4SChuck Lever 	TP_ARGS(wc, frwr),
27158f10ad4SChuck Lever 
27258f10ad4SChuck Lever 	TP_STRUCT__entry(
27362a89501SChuck Lever 		__field(u32, mr_id)
27458f10ad4SChuck Lever 		__field(unsigned int, status)
27558f10ad4SChuck Lever 		__field(unsigned int, vendor_err)
27658f10ad4SChuck Lever 	),
27758f10ad4SChuck Lever 
27858f10ad4SChuck Lever 	TP_fast_assign(
27962a89501SChuck Lever 		__entry->mr_id = frwr->fr_mr->res.id;
28058f10ad4SChuck Lever 		__entry->status = wc->status;
28158f10ad4SChuck Lever 		__entry->vendor_err = __entry->status ? wc->vendor_err : 0;
28258f10ad4SChuck Lever 	),
28358f10ad4SChuck Lever 
28458f10ad4SChuck Lever 	TP_printk(
28562a89501SChuck Lever 		"mr.id=%u: %s (%u/0x%x)",
28662a89501SChuck Lever 		__entry->mr_id, rdma_show_wc_status(__entry->status),
28758f10ad4SChuck Lever 		__entry->status, __entry->vendor_err
28858f10ad4SChuck Lever 	)
28958f10ad4SChuck Lever );
29058f10ad4SChuck Lever 
29158f10ad4SChuck Lever #define DEFINE_FRWR_DONE_EVENT(name)					\
29258f10ad4SChuck Lever 		DEFINE_EVENT(xprtrdma_frwr_done, name,			\
29358f10ad4SChuck Lever 				TP_PROTO(				\
29458f10ad4SChuck Lever 					const struct ib_wc *wc,		\
29558f10ad4SChuck Lever 					const struct rpcrdma_frwr *frwr	\
29658f10ad4SChuck Lever 				),					\
29758f10ad4SChuck Lever 				TP_ARGS(wc, frwr))
29858f10ad4SChuck Lever 
299aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_BIDIRECTIONAL);
300aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_TO_DEVICE);
301aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_FROM_DEVICE);
302aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_NONE);
303aba11831SChuck Lever 
304aba11831SChuck Lever #define xprtrdma_show_direction(x)					\
305aba11831SChuck Lever 		__print_symbolic(x,					\
306aba11831SChuck Lever 				{ DMA_BIDIRECTIONAL, "BIDIR" },		\
307aba11831SChuck Lever 				{ DMA_TO_DEVICE, "TO_DEVICE" },		\
308aba11831SChuck Lever 				{ DMA_FROM_DEVICE, "FROM_DEVICE" },	\
309aba11831SChuck Lever 				{ DMA_NONE, "NONE" })
310aba11831SChuck Lever 
3112937fedeSChuck Lever DECLARE_EVENT_CLASS(xprtrdma_mr,
3122937fedeSChuck Lever 	TP_PROTO(
3132937fedeSChuck Lever 		const struct rpcrdma_mr *mr
3142937fedeSChuck Lever 	),
3152937fedeSChuck Lever 
3162937fedeSChuck Lever 	TP_ARGS(mr),
3172937fedeSChuck Lever 
3182937fedeSChuck Lever 	TP_STRUCT__entry(
31962a89501SChuck Lever 		__field(u32, mr_id)
32062a89501SChuck Lever 		__field(int, nents)
3212937fedeSChuck Lever 		__field(u32, handle)
3222937fedeSChuck Lever 		__field(u32, length)
3232937fedeSChuck Lever 		__field(u64, offset)
324aba11831SChuck Lever 		__field(u32, dir)
3252937fedeSChuck Lever 	),
3262937fedeSChuck Lever 
3272937fedeSChuck Lever 	TP_fast_assign(
32862a89501SChuck Lever 		__entry->mr_id  = mr->frwr.fr_mr->res.id;
32962a89501SChuck Lever 		__entry->nents  = mr->mr_nents;
3302937fedeSChuck Lever 		__entry->handle = mr->mr_handle;
3312937fedeSChuck Lever 		__entry->length = mr->mr_length;
3322937fedeSChuck Lever 		__entry->offset = mr->mr_offset;
333aba11831SChuck Lever 		__entry->dir    = mr->mr_dir;
3342937fedeSChuck Lever 	),
3352937fedeSChuck Lever 
33662a89501SChuck Lever 	TP_printk("mr.id=%u nents=%d %u@0x%016llx:0x%08x (%s)",
33762a89501SChuck Lever 		__entry->mr_id, __entry->nents, __entry->length,
338aba11831SChuck Lever 		(unsigned long long)__entry->offset, __entry->handle,
339aba11831SChuck Lever 		xprtrdma_show_direction(__entry->dir)
3402937fedeSChuck Lever 	)
3412937fedeSChuck Lever );
3422937fedeSChuck Lever 
3432937fedeSChuck Lever #define DEFINE_MR_EVENT(name) \
344d379eaa8SChuck Lever 		DEFINE_EVENT(xprtrdma_mr, xprtrdma_mr_##name, \
3452937fedeSChuck Lever 				TP_PROTO( \
3462937fedeSChuck Lever 					const struct rpcrdma_mr *mr \
3472937fedeSChuck Lever 				), \
3482937fedeSChuck Lever 				TP_ARGS(mr))
3492937fedeSChuck Lever 
350fc1eb807SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_cb_event,
351fc1eb807SChuck Lever 	TP_PROTO(
352fc1eb807SChuck Lever 		const struct rpc_rqst *rqst
353fc1eb807SChuck Lever 	),
354fc1eb807SChuck Lever 
355fc1eb807SChuck Lever 	TP_ARGS(rqst),
356fc1eb807SChuck Lever 
357fc1eb807SChuck Lever 	TP_STRUCT__entry(
358fc1eb807SChuck Lever 		__field(const void *, rqst)
359fc1eb807SChuck Lever 		__field(const void *, rep)
360fc1eb807SChuck Lever 		__field(const void *, req)
361fc1eb807SChuck Lever 		__field(u32, xid)
362fc1eb807SChuck Lever 	),
363fc1eb807SChuck Lever 
364fc1eb807SChuck Lever 	TP_fast_assign(
365fc1eb807SChuck Lever 		__entry->rqst = rqst;
366fc1eb807SChuck Lever 		__entry->req = rpcr_to_rdmar(rqst);
367fc1eb807SChuck Lever 		__entry->rep = rpcr_to_rdmar(rqst)->rl_reply;
368fc1eb807SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
369fc1eb807SChuck Lever 	),
370fc1eb807SChuck Lever 
371fc1eb807SChuck Lever 	TP_printk("xid=0x%08x, rqst=%p req=%p rep=%p",
372fc1eb807SChuck Lever 		__entry->xid, __entry->rqst, __entry->req, __entry->rep
373fc1eb807SChuck Lever 	)
374fc1eb807SChuck Lever );
375fc1eb807SChuck Lever 
376fc1eb807SChuck Lever #define DEFINE_CB_EVENT(name)						\
377fc1eb807SChuck Lever 		DEFINE_EVENT(xprtrdma_cb_event, name,			\
378fc1eb807SChuck Lever 				TP_PROTO(				\
379fc1eb807SChuck Lever 					const struct rpc_rqst *rqst	\
380fc1eb807SChuck Lever 				),					\
381fc1eb807SChuck Lever 				TP_ARGS(rqst))
382fc1eb807SChuck Lever 
383b4a7f91cSChuck Lever /**
384b4744e00SChuck Lever  ** Connection events
385b4744e00SChuck Lever  **/
386b4744e00SChuck Lever 
387f54c870dSChuck Lever TRACE_EVENT(xprtrdma_inline_thresh,
388f54c870dSChuck Lever 	TP_PROTO(
389745b734cSChuck Lever 		const struct rpcrdma_ep *ep
390f54c870dSChuck Lever 	),
391f54c870dSChuck Lever 
392745b734cSChuck Lever 	TP_ARGS(ep),
393f54c870dSChuck Lever 
394f54c870dSChuck Lever 	TP_STRUCT__entry(
395f54c870dSChuck Lever 		__field(unsigned int, inline_send)
396f54c870dSChuck Lever 		__field(unsigned int, inline_recv)
397f54c870dSChuck Lever 		__field(unsigned int, max_send)
398f54c870dSChuck Lever 		__field(unsigned int, max_recv)
399745b734cSChuck Lever 		__array(unsigned char, srcaddr, sizeof(struct sockaddr_in6))
400745b734cSChuck Lever 		__array(unsigned char, dstaddr, sizeof(struct sockaddr_in6))
401f54c870dSChuck Lever 	),
402f54c870dSChuck Lever 
403f54c870dSChuck Lever 	TP_fast_assign(
404745b734cSChuck Lever 		const struct rdma_cm_id *id = ep->re_id;
405f54c870dSChuck Lever 
40693aa8e0aSChuck Lever 		__entry->inline_send = ep->re_inline_send;
40793aa8e0aSChuck Lever 		__entry->inline_recv = ep->re_inline_recv;
40893aa8e0aSChuck Lever 		__entry->max_send = ep->re_max_inline_send;
40993aa8e0aSChuck Lever 		__entry->max_recv = ep->re_max_inline_recv;
410745b734cSChuck Lever 		memcpy(__entry->srcaddr, &id->route.addr.src_addr,
411745b734cSChuck Lever 		       sizeof(struct sockaddr_in6));
412745b734cSChuck Lever 		memcpy(__entry->dstaddr, &id->route.addr.dst_addr,
413745b734cSChuck Lever 		       sizeof(struct sockaddr_in6));
414f54c870dSChuck Lever 	),
415f54c870dSChuck Lever 
416745b734cSChuck Lever 	TP_printk("%pISpc -> %pISpc neg send/recv=%u/%u, calc send/recv=%u/%u",
417745b734cSChuck Lever 		__entry->srcaddr, __entry->dstaddr,
418f54c870dSChuck Lever 		__entry->inline_send, __entry->inline_recv,
419f54c870dSChuck Lever 		__entry->max_send, __entry->max_recv
420f54c870dSChuck Lever 	)
421f54c870dSChuck Lever );
422f54c870dSChuck Lever 
4237b020f17SChuck Lever DEFINE_CONN_EVENT(connect);
4247b020f17SChuck Lever DEFINE_CONN_EVENT(disconnect);
4257b020f17SChuck Lever 
4267b020f17SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_op_inject_dsc);
4277b020f17SChuck Lever 
4287b020f17SChuck Lever TRACE_EVENT(xprtrdma_op_connect,
429b4744e00SChuck Lever 	TP_PROTO(
430b4744e00SChuck Lever 		const struct rpcrdma_xprt *r_xprt,
4317b020f17SChuck Lever 		unsigned long delay
432b4744e00SChuck Lever 	),
433b4744e00SChuck Lever 
4347b020f17SChuck Lever 	TP_ARGS(r_xprt, delay),
435b4744e00SChuck Lever 
436b4744e00SChuck Lever 	TP_STRUCT__entry(
437b4744e00SChuck Lever 		__field(const void *, r_xprt)
4387b020f17SChuck Lever 		__field(unsigned long, delay)
439b4744e00SChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
440b4744e00SChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
441b4744e00SChuck Lever 	),
442b4744e00SChuck Lever 
443b4744e00SChuck Lever 	TP_fast_assign(
444b4744e00SChuck Lever 		__entry->r_xprt = r_xprt;
4457b020f17SChuck Lever 		__entry->delay = delay;
446b4744e00SChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
447b4744e00SChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
448b4744e00SChuck Lever 	),
449b4744e00SChuck Lever 
4507b020f17SChuck Lever 	TP_printk("peer=[%s]:%s r_xprt=%p delay=%lu",
4517b020f17SChuck Lever 		__get_str(addr), __get_str(port), __entry->r_xprt,
4527b020f17SChuck Lever 		__entry->delay
453b4744e00SChuck Lever 	)
454b4744e00SChuck Lever );
455b4744e00SChuck Lever 
456b4744e00SChuck Lever 
457675dd90aSChuck Lever TRACE_EVENT(xprtrdma_op_set_cto,
458675dd90aSChuck Lever 	TP_PROTO(
459675dd90aSChuck Lever 		const struct rpcrdma_xprt *r_xprt,
460675dd90aSChuck Lever 		unsigned long connect,
461675dd90aSChuck Lever 		unsigned long reconnect
462675dd90aSChuck Lever 	),
463675dd90aSChuck Lever 
464675dd90aSChuck Lever 	TP_ARGS(r_xprt, connect, reconnect),
465675dd90aSChuck Lever 
466675dd90aSChuck Lever 	TP_STRUCT__entry(
467675dd90aSChuck Lever 		__field(const void *, r_xprt)
468675dd90aSChuck Lever 		__field(unsigned long, connect)
469675dd90aSChuck Lever 		__field(unsigned long, reconnect)
470675dd90aSChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
471675dd90aSChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
472675dd90aSChuck Lever 	),
473675dd90aSChuck Lever 
474675dd90aSChuck Lever 	TP_fast_assign(
475675dd90aSChuck Lever 		__entry->r_xprt = r_xprt;
476675dd90aSChuck Lever 		__entry->connect = connect;
477675dd90aSChuck Lever 		__entry->reconnect = reconnect;
478675dd90aSChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
479675dd90aSChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
480675dd90aSChuck Lever 	),
481675dd90aSChuck Lever 
482675dd90aSChuck Lever 	TP_printk("peer=[%s]:%s r_xprt=%p: connect=%lu reconnect=%lu",
483675dd90aSChuck Lever 		__get_str(addr), __get_str(port), __entry->r_xprt,
484675dd90aSChuck Lever 		__entry->connect / HZ, __entry->reconnect / HZ
485675dd90aSChuck Lever 	)
486675dd90aSChuck Lever );
487675dd90aSChuck Lever 
488f9521d53SChuck Lever TRACE_EVENT(xprtrdma_qp_event,
489643cf323SChuck Lever 	TP_PROTO(
490745b734cSChuck Lever 		const struct rpcrdma_ep *ep,
491643cf323SChuck Lever 		const struct ib_event *event
492643cf323SChuck Lever 	),
493643cf323SChuck Lever 
494745b734cSChuck Lever 	TP_ARGS(ep, event),
495643cf323SChuck Lever 
496643cf323SChuck Lever 	TP_STRUCT__entry(
497745b734cSChuck Lever 		__field(unsigned long, event)
498643cf323SChuck Lever 		__string(name, event->device->name)
499745b734cSChuck Lever 		__array(unsigned char, srcaddr, sizeof(struct sockaddr_in6))
500745b734cSChuck Lever 		__array(unsigned char, dstaddr, sizeof(struct sockaddr_in6))
501643cf323SChuck Lever 	),
502643cf323SChuck Lever 
503643cf323SChuck Lever 	TP_fast_assign(
504745b734cSChuck Lever 		const struct rdma_cm_id *id = ep->re_id;
505745b734cSChuck Lever 
506643cf323SChuck Lever 		__entry->event = event->event;
507643cf323SChuck Lever 		__assign_str(name, event->device->name);
508745b734cSChuck Lever 		memcpy(__entry->srcaddr, &id->route.addr.src_addr,
509745b734cSChuck Lever 		       sizeof(struct sockaddr_in6));
510745b734cSChuck Lever 		memcpy(__entry->dstaddr, &id->route.addr.dst_addr,
511745b734cSChuck Lever 		       sizeof(struct sockaddr_in6));
512643cf323SChuck Lever 	),
513643cf323SChuck Lever 
514745b734cSChuck Lever 	TP_printk("%pISpc -> %pISpc device=%s %s (%lu)",
515745b734cSChuck Lever 		__entry->srcaddr, __entry->dstaddr, __get_str(name),
516745b734cSChuck Lever 		rdma_show_ib_event(__entry->event), __entry->event
517643cf323SChuck Lever 	)
518643cf323SChuck Lever );
519643cf323SChuck Lever 
520b4744e00SChuck Lever /**
521ab03eff5SChuck Lever  ** Call events
522ab03eff5SChuck Lever  **/
523ab03eff5SChuck Lever 
5241c443effSChuck Lever TRACE_EVENT(xprtrdma_createmrs,
5251c443effSChuck Lever 	TP_PROTO(
5261c443effSChuck Lever 		const struct rpcrdma_xprt *r_xprt,
5271c443effSChuck Lever 		unsigned int count
5281c443effSChuck Lever 	),
5291c443effSChuck Lever 
5301c443effSChuck Lever 	TP_ARGS(r_xprt, count),
5311c443effSChuck Lever 
5321c443effSChuck Lever 	TP_STRUCT__entry(
5331c443effSChuck Lever 		__field(const void *, r_xprt)
5346dc6ec9eSChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
5356dc6ec9eSChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
5361c443effSChuck Lever 		__field(unsigned int, count)
5371c443effSChuck Lever 	),
5381c443effSChuck Lever 
5391c443effSChuck Lever 	TP_fast_assign(
5401c443effSChuck Lever 		__entry->r_xprt = r_xprt;
5411c443effSChuck Lever 		__entry->count = count;
5426dc6ec9eSChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
5436dc6ec9eSChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
5441c443effSChuck Lever 	),
5451c443effSChuck Lever 
5466dc6ec9eSChuck Lever 	TP_printk("peer=[%s]:%s r_xprt=%p: created %u MRs",
5476dc6ec9eSChuck Lever 		__get_str(addr), __get_str(port), __entry->r_xprt,
5486dc6ec9eSChuck Lever 		__entry->count
5496dc6ec9eSChuck Lever 	)
5506dc6ec9eSChuck Lever );
5516dc6ec9eSChuck Lever 
5526dc6ec9eSChuck Lever TRACE_EVENT(xprtrdma_mr_get,
5536dc6ec9eSChuck Lever 	TP_PROTO(
5546dc6ec9eSChuck Lever 		const struct rpcrdma_req *req
5556dc6ec9eSChuck Lever 	),
5566dc6ec9eSChuck Lever 
5576dc6ec9eSChuck Lever 	TP_ARGS(req),
5586dc6ec9eSChuck Lever 
5596dc6ec9eSChuck Lever 	TP_STRUCT__entry(
5606dc6ec9eSChuck Lever 		__field(const void *, req)
5616dc6ec9eSChuck Lever 		__field(unsigned int, task_id)
5626dc6ec9eSChuck Lever 		__field(unsigned int, client_id)
5636dc6ec9eSChuck Lever 		__field(u32, xid)
5646dc6ec9eSChuck Lever 	),
5656dc6ec9eSChuck Lever 
5666dc6ec9eSChuck Lever 	TP_fast_assign(
5676dc6ec9eSChuck Lever 		const struct rpc_rqst *rqst = &req->rl_slot;
5686dc6ec9eSChuck Lever 
5696dc6ec9eSChuck Lever 		__entry->req = req;
5706dc6ec9eSChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
5716dc6ec9eSChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
5726dc6ec9eSChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
5736dc6ec9eSChuck Lever 	),
5746dc6ec9eSChuck Lever 
5756dc6ec9eSChuck Lever 	TP_printk("task:%u@%u xid=0x%08x req=%p",
5766dc6ec9eSChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
5776dc6ec9eSChuck Lever 		__entry->req
5781c443effSChuck Lever 	)
5791c443effSChuck Lever );
5801c443effSChuck Lever 
5813b39f52aSChuck Lever TRACE_EVENT(xprtrdma_nomrs,
5823b39f52aSChuck Lever 	TP_PROTO(
5833b39f52aSChuck Lever 		const struct rpcrdma_req *req
5843b39f52aSChuck Lever 	),
5853b39f52aSChuck Lever 
5863b39f52aSChuck Lever 	TP_ARGS(req),
5873b39f52aSChuck Lever 
5883b39f52aSChuck Lever 	TP_STRUCT__entry(
5893b39f52aSChuck Lever 		__field(const void *, req)
5903b39f52aSChuck Lever 		__field(unsigned int, task_id)
5913b39f52aSChuck Lever 		__field(unsigned int, client_id)
5923b39f52aSChuck Lever 		__field(u32, xid)
5933b39f52aSChuck Lever 	),
5943b39f52aSChuck Lever 
5953b39f52aSChuck Lever 	TP_fast_assign(
5963b39f52aSChuck Lever 		const struct rpc_rqst *rqst = &req->rl_slot;
5973b39f52aSChuck Lever 
5983b39f52aSChuck Lever 		__entry->req = req;
5993b39f52aSChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
6003b39f52aSChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
6013b39f52aSChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
6023b39f52aSChuck Lever 	),
6033b39f52aSChuck Lever 
6043b39f52aSChuck Lever 	TP_printk("task:%u@%u xid=0x%08x req=%p",
6053b39f52aSChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
6063b39f52aSChuck Lever 		__entry->req
6073b39f52aSChuck Lever 	)
6083b39f52aSChuck Lever );
6091c443effSChuck Lever 
610aba11831SChuck Lever DEFINE_RDCH_EVENT(read);
611aba11831SChuck Lever DEFINE_WRCH_EVENT(write);
612aba11831SChuck Lever DEFINE_WRCH_EVENT(reply);
61358f10ad4SChuck Lever 
614ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch);
615614f3c96SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch_pullup);
616614f3c96SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch_mapped);
617ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_readch);
618ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_areadch);
619ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_writech);
620ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_replych);
621ab03eff5SChuck Lever 
622ab03eff5SChuck Lever #define xprtrdma_show_chunktype(x)					\
623ab03eff5SChuck Lever 		__print_symbolic(x,					\
624ab03eff5SChuck Lever 				{ rpcrdma_noch, "inline" },		\
625614f3c96SChuck Lever 				{ rpcrdma_noch_pullup, "pullup" },	\
626614f3c96SChuck Lever 				{ rpcrdma_noch_mapped, "mapped" },	\
627ab03eff5SChuck Lever 				{ rpcrdma_readch, "read list" },	\
628ab03eff5SChuck Lever 				{ rpcrdma_areadch, "*read list" },	\
629ab03eff5SChuck Lever 				{ rpcrdma_writech, "write list" },	\
630ab03eff5SChuck Lever 				{ rpcrdma_replych, "reply chunk" })
631ab03eff5SChuck Lever 
632ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_marshal,
633ab03eff5SChuck Lever 	TP_PROTO(
6341310051cSChuck Lever 		const struct rpcrdma_req *req,
635ab03eff5SChuck Lever 		unsigned int rtype,
636ab03eff5SChuck Lever 		unsigned int wtype
637ab03eff5SChuck Lever 	),
638ab03eff5SChuck Lever 
6391310051cSChuck Lever 	TP_ARGS(req, rtype, wtype),
640ab03eff5SChuck Lever 
641ab03eff5SChuck Lever 	TP_STRUCT__entry(
642ab03eff5SChuck Lever 		__field(unsigned int, task_id)
643ab03eff5SChuck Lever 		__field(unsigned int, client_id)
644ab03eff5SChuck Lever 		__field(u32, xid)
645ab03eff5SChuck Lever 		__field(unsigned int, hdrlen)
646ab03eff5SChuck Lever 		__field(unsigned int, headlen)
647ab03eff5SChuck Lever 		__field(unsigned int, pagelen)
648ab03eff5SChuck Lever 		__field(unsigned int, taillen)
649ab03eff5SChuck Lever 		__field(unsigned int, rtype)
650ab03eff5SChuck Lever 		__field(unsigned int, wtype)
651ab03eff5SChuck Lever 	),
652ab03eff5SChuck Lever 
653ab03eff5SChuck Lever 	TP_fast_assign(
6541310051cSChuck Lever 		const struct rpc_rqst *rqst = &req->rl_slot;
6551310051cSChuck Lever 
656ab03eff5SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
657ab03eff5SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
658ab03eff5SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
6591310051cSChuck Lever 		__entry->hdrlen = req->rl_hdrbuf.len;
660ab03eff5SChuck Lever 		__entry->headlen = rqst->rq_snd_buf.head[0].iov_len;
661ab03eff5SChuck Lever 		__entry->pagelen = rqst->rq_snd_buf.page_len;
662ab03eff5SChuck Lever 		__entry->taillen = rqst->rq_snd_buf.tail[0].iov_len;
663ab03eff5SChuck Lever 		__entry->rtype = rtype;
664ab03eff5SChuck Lever 		__entry->wtype = wtype;
665ab03eff5SChuck Lever 	),
666ab03eff5SChuck Lever 
667ab03eff5SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x: hdr=%u xdr=%u/%u/%u %s/%s",
668ab03eff5SChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
669ab03eff5SChuck Lever 		__entry->hdrlen,
670ab03eff5SChuck Lever 		__entry->headlen, __entry->pagelen, __entry->taillen,
671ab03eff5SChuck Lever 		xprtrdma_show_chunktype(__entry->rtype),
672ab03eff5SChuck Lever 		xprtrdma_show_chunktype(__entry->wtype)
673ab03eff5SChuck Lever 	)
674ab03eff5SChuck Lever );
675ab03eff5SChuck Lever 
67617e4c443SChuck Lever TRACE_EVENT(xprtrdma_marshal_failed,
67717e4c443SChuck Lever 	TP_PROTO(const struct rpc_rqst *rqst,
67817e4c443SChuck Lever 		 int ret
67917e4c443SChuck Lever 	),
68017e4c443SChuck Lever 
68117e4c443SChuck Lever 	TP_ARGS(rqst, ret),
68217e4c443SChuck Lever 
68317e4c443SChuck Lever 	TP_STRUCT__entry(
68417e4c443SChuck Lever 		__field(unsigned int, task_id)
68517e4c443SChuck Lever 		__field(unsigned int, client_id)
68617e4c443SChuck Lever 		__field(u32, xid)
68717e4c443SChuck Lever 		__field(int, ret)
68817e4c443SChuck Lever 	),
68917e4c443SChuck Lever 
69017e4c443SChuck Lever 	TP_fast_assign(
69117e4c443SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
69217e4c443SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
69317e4c443SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
69417e4c443SChuck Lever 		__entry->ret = ret;
69517e4c443SChuck Lever 	),
69617e4c443SChuck Lever 
69717e4c443SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x: ret=%d",
69817e4c443SChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
69917e4c443SChuck Lever 		__entry->ret
70017e4c443SChuck Lever 	)
70117e4c443SChuck Lever );
70217e4c443SChuck Lever 
70305eb06d8SChuck Lever TRACE_EVENT(xprtrdma_prepsend_failed,
70405eb06d8SChuck Lever 	TP_PROTO(const struct rpc_rqst *rqst,
70505eb06d8SChuck Lever 		 int ret
70605eb06d8SChuck Lever 	),
70705eb06d8SChuck Lever 
70805eb06d8SChuck Lever 	TP_ARGS(rqst, ret),
70905eb06d8SChuck Lever 
71005eb06d8SChuck Lever 	TP_STRUCT__entry(
71105eb06d8SChuck Lever 		__field(unsigned int, task_id)
71205eb06d8SChuck Lever 		__field(unsigned int, client_id)
71305eb06d8SChuck Lever 		__field(u32, xid)
71405eb06d8SChuck Lever 		__field(int, ret)
71505eb06d8SChuck Lever 	),
71605eb06d8SChuck Lever 
71705eb06d8SChuck Lever 	TP_fast_assign(
71805eb06d8SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
71905eb06d8SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
72005eb06d8SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
72105eb06d8SChuck Lever 		__entry->ret = ret;
72205eb06d8SChuck Lever 	),
72305eb06d8SChuck Lever 
72405eb06d8SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x: ret=%d",
72505eb06d8SChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
72605eb06d8SChuck Lever 		__entry->ret
72705eb06d8SChuck Lever 	)
72805eb06d8SChuck Lever );
72905eb06d8SChuck Lever 
730ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_post_send,
731ab03eff5SChuck Lever 	TP_PROTO(
732bdb2ce82SChuck Lever 		const struct rpcrdma_req *req
733ab03eff5SChuck Lever 	),
734ab03eff5SChuck Lever 
735bdb2ce82SChuck Lever 	TP_ARGS(req),
736ab03eff5SChuck Lever 
737ab03eff5SChuck Lever 	TP_STRUCT__entry(
738ab03eff5SChuck Lever 		__field(const void *, req)
739cb586decSChuck Lever 		__field(const void *, sc)
7400c77668dSChuck Lever 		__field(unsigned int, task_id)
7410c77668dSChuck Lever 		__field(unsigned int, client_id)
742ab03eff5SChuck Lever 		__field(int, num_sge)
743470443e0SChuck Lever 		__field(int, signaled)
744ab03eff5SChuck Lever 	),
745ab03eff5SChuck Lever 
746ab03eff5SChuck Lever 	TP_fast_assign(
7470c77668dSChuck Lever 		const struct rpc_rqst *rqst = &req->rl_slot;
7480c77668dSChuck Lever 
7490c77668dSChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
75010694ac9SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client ?
75110694ac9SChuck Lever 				     rqst->rq_task->tk_client->cl_clid : -1;
752ab03eff5SChuck Lever 		__entry->req = req;
753cb586decSChuck Lever 		__entry->sc = req->rl_sendctx;
754dc15c3d5SChuck Lever 		__entry->num_sge = req->rl_wr.num_sge;
755dc15c3d5SChuck Lever 		__entry->signaled = req->rl_wr.send_flags & IB_SEND_SIGNALED;
756ab03eff5SChuck Lever 	),
757ab03eff5SChuck Lever 
758bdb2ce82SChuck Lever 	TP_printk("task:%u@%u req=%p sc=%p (%d SGE%s) %s",
7590c77668dSChuck Lever 		__entry->task_id, __entry->client_id,
760cb586decSChuck Lever 		__entry->req, __entry->sc, __entry->num_sge,
7610c77668dSChuck Lever 		(__entry->num_sge == 1 ? "" : "s"),
762bdb2ce82SChuck Lever 		(__entry->signaled ? "signaled" : "")
763ab03eff5SChuck Lever 	)
764ab03eff5SChuck Lever );
765ab03eff5SChuck Lever 
766b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_post_recv,
767b4a7f91cSChuck Lever 	TP_PROTO(
7682dfdcd88SChuck Lever 		const struct rpcrdma_rep *rep
769b4a7f91cSChuck Lever 	),
770b4a7f91cSChuck Lever 
7712dfdcd88SChuck Lever 	TP_ARGS(rep),
772b4a7f91cSChuck Lever 
773b4a7f91cSChuck Lever 	TP_STRUCT__entry(
7742dfdcd88SChuck Lever 		__field(const void *, rep)
775b4a7f91cSChuck Lever 	),
776b4a7f91cSChuck Lever 
777b4a7f91cSChuck Lever 	TP_fast_assign(
7782dfdcd88SChuck Lever 		__entry->rep = rep;
779b4a7f91cSChuck Lever 	),
780b4a7f91cSChuck Lever 
7812dfdcd88SChuck Lever 	TP_printk("rep=%p",
7822dfdcd88SChuck Lever 		__entry->rep
783b4a7f91cSChuck Lever 	)
784b4a7f91cSChuck Lever );
785b4a7f91cSChuck Lever 
7867c8d9e7cSChuck Lever TRACE_EVENT(xprtrdma_post_recvs,
7877c8d9e7cSChuck Lever 	TP_PROTO(
7887c8d9e7cSChuck Lever 		const struct rpcrdma_xprt *r_xprt,
7897c8d9e7cSChuck Lever 		unsigned int count,
7907c8d9e7cSChuck Lever 		int status
7917c8d9e7cSChuck Lever 	),
7927c8d9e7cSChuck Lever 
7937c8d9e7cSChuck Lever 	TP_ARGS(r_xprt, count, status),
7947c8d9e7cSChuck Lever 
7957c8d9e7cSChuck Lever 	TP_STRUCT__entry(
7967c8d9e7cSChuck Lever 		__field(const void *, r_xprt)
7977c8d9e7cSChuck Lever 		__field(unsigned int, count)
7987c8d9e7cSChuck Lever 		__field(int, status)
7997c8d9e7cSChuck Lever 		__field(int, posted)
8007c8d9e7cSChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
8017c8d9e7cSChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
8027c8d9e7cSChuck Lever 	),
8037c8d9e7cSChuck Lever 
8047c8d9e7cSChuck Lever 	TP_fast_assign(
8057c8d9e7cSChuck Lever 		__entry->r_xprt = r_xprt;
8067c8d9e7cSChuck Lever 		__entry->count = count;
8077c8d9e7cSChuck Lever 		__entry->status = status;
808e28ce900SChuck Lever 		__entry->posted = r_xprt->rx_ep->re_receive_count;
8097c8d9e7cSChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
8107c8d9e7cSChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
8117c8d9e7cSChuck Lever 	),
8127c8d9e7cSChuck Lever 
8137c8d9e7cSChuck Lever 	TP_printk("peer=[%s]:%s r_xprt=%p: %u new recvs, %d active (rc %d)",
8147c8d9e7cSChuck Lever 		__get_str(addr), __get_str(port), __entry->r_xprt,
8157c8d9e7cSChuck Lever 		__entry->count, __entry->posted, __entry->status
816ab03eff5SChuck Lever 	)
817ab03eff5SChuck Lever );
818ab03eff5SChuck Lever 
8194b93dab3SChuck Lever TRACE_EVENT(xprtrdma_post_linv,
8204b93dab3SChuck Lever 	TP_PROTO(
8214b93dab3SChuck Lever 		const struct rpcrdma_req *req,
8224b93dab3SChuck Lever 		int status
8234b93dab3SChuck Lever 	),
8244b93dab3SChuck Lever 
8254b93dab3SChuck Lever 	TP_ARGS(req, status),
8264b93dab3SChuck Lever 
8274b93dab3SChuck Lever 	TP_STRUCT__entry(
8284b93dab3SChuck Lever 		__field(const void *, req)
8294b93dab3SChuck Lever 		__field(int, status)
8304b93dab3SChuck Lever 		__field(u32, xid)
8314b93dab3SChuck Lever 	),
8324b93dab3SChuck Lever 
8334b93dab3SChuck Lever 	TP_fast_assign(
8344b93dab3SChuck Lever 		__entry->req = req;
8354b93dab3SChuck Lever 		__entry->status = status;
8364b93dab3SChuck Lever 		__entry->xid = be32_to_cpu(req->rl_slot.rq_xid);
8374b93dab3SChuck Lever 	),
8384b93dab3SChuck Lever 
8394b93dab3SChuck Lever 	TP_printk("req=%p xid=0x%08x status=%d",
8404b93dab3SChuck Lever 		__entry->req, __entry->xid, __entry->status
8414b93dab3SChuck Lever 	)
8424b93dab3SChuck Lever );
8434b93dab3SChuck Lever 
844ab03eff5SChuck Lever /**
845ab03eff5SChuck Lever  ** Completion events
846ab03eff5SChuck Lever  **/
847ab03eff5SChuck Lever 
848ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_wc_send,
849ab03eff5SChuck Lever 	TP_PROTO(
850ab03eff5SChuck Lever 		const struct rpcrdma_sendctx *sc,
851ab03eff5SChuck Lever 		const struct ib_wc *wc
852ab03eff5SChuck Lever 	),
853ab03eff5SChuck Lever 
854ab03eff5SChuck Lever 	TP_ARGS(sc, wc),
855ab03eff5SChuck Lever 
856ab03eff5SChuck Lever 	TP_STRUCT__entry(
857ab03eff5SChuck Lever 		__field(const void *, req)
858cb586decSChuck Lever 		__field(const void *, sc)
859ab03eff5SChuck Lever 		__field(unsigned int, unmap_count)
860ab03eff5SChuck Lever 		__field(unsigned int, status)
861ab03eff5SChuck Lever 		__field(unsigned int, vendor_err)
862ab03eff5SChuck Lever 	),
863ab03eff5SChuck Lever 
864ab03eff5SChuck Lever 	TP_fast_assign(
865ab03eff5SChuck Lever 		__entry->req = sc->sc_req;
866cb586decSChuck Lever 		__entry->sc = sc;
867ab03eff5SChuck Lever 		__entry->unmap_count = sc->sc_unmap_count;
868ab03eff5SChuck Lever 		__entry->status = wc->status;
869ab03eff5SChuck Lever 		__entry->vendor_err = __entry->status ? wc->vendor_err : 0;
870ab03eff5SChuck Lever 	),
871ab03eff5SChuck Lever 
872cb586decSChuck Lever 	TP_printk("req=%p sc=%p unmapped=%u: %s (%u/0x%x)",
873cb586decSChuck Lever 		__entry->req, __entry->sc, __entry->unmap_count,
874ab03eff5SChuck Lever 		rdma_show_wc_status(__entry->status),
875ab03eff5SChuck Lever 		__entry->status, __entry->vendor_err
876ab03eff5SChuck Lever 	)
877ab03eff5SChuck Lever );
878ab03eff5SChuck Lever 
879b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_wc_receive,
880b4a7f91cSChuck Lever 	TP_PROTO(
881b4a7f91cSChuck Lever 		const struct ib_wc *wc
882b4a7f91cSChuck Lever 	),
883b4a7f91cSChuck Lever 
8840e0b854cSChuck Lever 	TP_ARGS(wc),
885b4a7f91cSChuck Lever 
886b4a7f91cSChuck Lever 	TP_STRUCT__entry(
8872dfdcd88SChuck Lever 		__field(const void *, rep)
8880e0b854cSChuck Lever 		__field(u32, byte_len)
889b4a7f91cSChuck Lever 		__field(unsigned int, status)
8900e0b854cSChuck Lever 		__field(u32, vendor_err)
891b4a7f91cSChuck Lever 	),
892b4a7f91cSChuck Lever 
893b4a7f91cSChuck Lever 	TP_fast_assign(
8942dfdcd88SChuck Lever 		__entry->rep = container_of(wc->wr_cqe, struct rpcrdma_rep,
8952dfdcd88SChuck Lever 					    rr_cqe);
896b4a7f91cSChuck Lever 		__entry->status = wc->status;
8970e0b854cSChuck Lever 		if (wc->status) {
8980e0b854cSChuck Lever 			__entry->byte_len = 0;
8990e0b854cSChuck Lever 			__entry->vendor_err = wc->vendor_err;
9000e0b854cSChuck Lever 		} else {
9010e0b854cSChuck Lever 			__entry->byte_len = wc->byte_len;
9020e0b854cSChuck Lever 			__entry->vendor_err = 0;
9030e0b854cSChuck Lever 		}
904b4a7f91cSChuck Lever 	),
905b4a7f91cSChuck Lever 
9062dfdcd88SChuck Lever 	TP_printk("rep=%p %u bytes: %s (%u/0x%x)",
9072dfdcd88SChuck Lever 		__entry->rep, __entry->byte_len,
908b4a7f91cSChuck Lever 		rdma_show_wc_status(__entry->status),
909b4a7f91cSChuck Lever 		__entry->status, __entry->vendor_err
910b4a7f91cSChuck Lever 	)
911b4a7f91cSChuck Lever );
912b4a7f91cSChuck Lever 
91358f10ad4SChuck Lever DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_fastreg);
9142937fedeSChuck Lever DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_li);
9152937fedeSChuck Lever DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_li_wake);
916d8099fedSChuck Lever DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_li_done);
9172937fedeSChuck Lever 
91853b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_alloc,
91953b2c1cbSChuck Lever 	TP_PROTO(
92053b2c1cbSChuck Lever 		const struct rpcrdma_mr *mr,
92153b2c1cbSChuck Lever 		int rc
92253b2c1cbSChuck Lever 	),
92353b2c1cbSChuck Lever 
92453b2c1cbSChuck Lever 	TP_ARGS(mr, rc),
92553b2c1cbSChuck Lever 
92653b2c1cbSChuck Lever 	TP_STRUCT__entry(
92762a89501SChuck Lever 		__field(u32, mr_id)
92853b2c1cbSChuck Lever 		__field(int, rc)
92953b2c1cbSChuck Lever 	),
93053b2c1cbSChuck Lever 
93153b2c1cbSChuck Lever 	TP_fast_assign(
93262a89501SChuck Lever 		__entry->mr_id = mr->frwr.fr_mr->res.id;
93353b2c1cbSChuck Lever 		__entry->rc = rc;
93453b2c1cbSChuck Lever 	),
93553b2c1cbSChuck Lever 
93662a89501SChuck Lever 	TP_printk("mr.id=%u: rc=%d",
93762a89501SChuck Lever 		__entry->mr_id, __entry->rc
93853b2c1cbSChuck Lever 	)
93953b2c1cbSChuck Lever );
94053b2c1cbSChuck Lever 
94153b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_dereg,
94253b2c1cbSChuck Lever 	TP_PROTO(
94353b2c1cbSChuck Lever 		const struct rpcrdma_mr *mr,
94453b2c1cbSChuck Lever 		int rc
94553b2c1cbSChuck Lever 	),
94653b2c1cbSChuck Lever 
94753b2c1cbSChuck Lever 	TP_ARGS(mr, rc),
94853b2c1cbSChuck Lever 
94953b2c1cbSChuck Lever 	TP_STRUCT__entry(
95062a89501SChuck Lever 		__field(u32, mr_id)
95162a89501SChuck Lever 		__field(int, nents)
95253b2c1cbSChuck Lever 		__field(u32, handle)
95353b2c1cbSChuck Lever 		__field(u32, length)
95453b2c1cbSChuck Lever 		__field(u64, offset)
95553b2c1cbSChuck Lever 		__field(u32, dir)
95653b2c1cbSChuck Lever 		__field(int, rc)
95753b2c1cbSChuck Lever 	),
95853b2c1cbSChuck Lever 
95953b2c1cbSChuck Lever 	TP_fast_assign(
96062a89501SChuck Lever 		__entry->mr_id  = mr->frwr.fr_mr->res.id;
96162a89501SChuck Lever 		__entry->nents  = mr->mr_nents;
96253b2c1cbSChuck Lever 		__entry->handle = mr->mr_handle;
96353b2c1cbSChuck Lever 		__entry->length = mr->mr_length;
96453b2c1cbSChuck Lever 		__entry->offset = mr->mr_offset;
96553b2c1cbSChuck Lever 		__entry->dir    = mr->mr_dir;
96653b2c1cbSChuck Lever 		__entry->rc	= rc;
96753b2c1cbSChuck Lever 	),
96853b2c1cbSChuck Lever 
96962a89501SChuck Lever 	TP_printk("mr.id=%u nents=%d %u@0x%016llx:0x%08x (%s): rc=%d",
97062a89501SChuck Lever 		__entry->mr_id, __entry->nents, __entry->length,
97153b2c1cbSChuck Lever 		(unsigned long long)__entry->offset, __entry->handle,
97253b2c1cbSChuck Lever 		xprtrdma_show_direction(__entry->dir),
97353b2c1cbSChuck Lever 		__entry->rc
97453b2c1cbSChuck Lever 	)
97553b2c1cbSChuck Lever );
97653b2c1cbSChuck Lever 
97753b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_sgerr,
97853b2c1cbSChuck Lever 	TP_PROTO(
97953b2c1cbSChuck Lever 		const struct rpcrdma_mr *mr,
98053b2c1cbSChuck Lever 		int sg_nents
98153b2c1cbSChuck Lever 	),
98253b2c1cbSChuck Lever 
98353b2c1cbSChuck Lever 	TP_ARGS(mr, sg_nents),
98453b2c1cbSChuck Lever 
98553b2c1cbSChuck Lever 	TP_STRUCT__entry(
98662a89501SChuck Lever 		__field(u32, mr_id)
98753b2c1cbSChuck Lever 		__field(u64, addr)
98853b2c1cbSChuck Lever 		__field(u32, dir)
98953b2c1cbSChuck Lever 		__field(int, nents)
99053b2c1cbSChuck Lever 	),
99153b2c1cbSChuck Lever 
99253b2c1cbSChuck Lever 	TP_fast_assign(
99362a89501SChuck Lever 		__entry->mr_id = mr->frwr.fr_mr->res.id;
99453b2c1cbSChuck Lever 		__entry->addr = mr->mr_sg->dma_address;
99553b2c1cbSChuck Lever 		__entry->dir = mr->mr_dir;
99653b2c1cbSChuck Lever 		__entry->nents = sg_nents;
99753b2c1cbSChuck Lever 	),
99853b2c1cbSChuck Lever 
99962a89501SChuck Lever 	TP_printk("mr.id=%u DMA addr=0x%llx (%s) sg_nents=%d",
100062a89501SChuck Lever 		__entry->mr_id, __entry->addr,
100153b2c1cbSChuck Lever 		xprtrdma_show_direction(__entry->dir),
100253b2c1cbSChuck Lever 		__entry->nents
100353b2c1cbSChuck Lever 	)
100453b2c1cbSChuck Lever );
100553b2c1cbSChuck Lever 
100653b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_maperr,
100753b2c1cbSChuck Lever 	TP_PROTO(
100853b2c1cbSChuck Lever 		const struct rpcrdma_mr *mr,
100953b2c1cbSChuck Lever 		int num_mapped
101053b2c1cbSChuck Lever 	),
101153b2c1cbSChuck Lever 
101253b2c1cbSChuck Lever 	TP_ARGS(mr, num_mapped),
101353b2c1cbSChuck Lever 
101453b2c1cbSChuck Lever 	TP_STRUCT__entry(
101562a89501SChuck Lever 		__field(u32, mr_id)
101653b2c1cbSChuck Lever 		__field(u64, addr)
101753b2c1cbSChuck Lever 		__field(u32, dir)
101853b2c1cbSChuck Lever 		__field(int, num_mapped)
101953b2c1cbSChuck Lever 		__field(int, nents)
102053b2c1cbSChuck Lever 	),
102153b2c1cbSChuck Lever 
102253b2c1cbSChuck Lever 	TP_fast_assign(
102362a89501SChuck Lever 		__entry->mr_id = mr->frwr.fr_mr->res.id;
102453b2c1cbSChuck Lever 		__entry->addr = mr->mr_sg->dma_address;
102553b2c1cbSChuck Lever 		__entry->dir = mr->mr_dir;
102653b2c1cbSChuck Lever 		__entry->num_mapped = num_mapped;
102753b2c1cbSChuck Lever 		__entry->nents = mr->mr_nents;
102853b2c1cbSChuck Lever 	),
102953b2c1cbSChuck Lever 
103062a89501SChuck Lever 	TP_printk("mr.id=%u DMA addr=0x%llx (%s) nents=%d of %d",
103162a89501SChuck Lever 		__entry->mr_id, __entry->addr,
103253b2c1cbSChuck Lever 		xprtrdma_show_direction(__entry->dir),
103353b2c1cbSChuck Lever 		__entry->num_mapped, __entry->nents
103453b2c1cbSChuck Lever 	)
103553b2c1cbSChuck Lever );
103653b2c1cbSChuck Lever 
1037d379eaa8SChuck Lever DEFINE_MR_EVENT(localinv);
1038d379eaa8SChuck Lever DEFINE_MR_EVENT(map);
1039d379eaa8SChuck Lever DEFINE_MR_EVENT(unmap);
104062a89501SChuck Lever DEFINE_MR_EVENT(reminv);
1041d379eaa8SChuck Lever DEFINE_MR_EVENT(recycle);
104258f10ad4SChuck Lever 
104353b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_dma_maperr,
104453b2c1cbSChuck Lever 	TP_PROTO(
104553b2c1cbSChuck Lever 		u64 addr
104653b2c1cbSChuck Lever 	),
104753b2c1cbSChuck Lever 
104853b2c1cbSChuck Lever 	TP_ARGS(addr),
104953b2c1cbSChuck Lever 
105053b2c1cbSChuck Lever 	TP_STRUCT__entry(
105153b2c1cbSChuck Lever 		__field(u64, addr)
105253b2c1cbSChuck Lever 	),
105353b2c1cbSChuck Lever 
105453b2c1cbSChuck Lever 	TP_fast_assign(
105553b2c1cbSChuck Lever 		__entry->addr = addr;
105653b2c1cbSChuck Lever 	),
105753b2c1cbSChuck Lever 
105853b2c1cbSChuck Lever 	TP_printk("dma addr=0x%llx\n", __entry->addr)
105953b2c1cbSChuck Lever );
106053b2c1cbSChuck Lever 
1061b4a7f91cSChuck Lever /**
1062b4a7f91cSChuck Lever  ** Reply events
1063b4a7f91cSChuck Lever  **/
1064b4a7f91cSChuck Lever 
1065b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_reply,
1066b4a7f91cSChuck Lever 	TP_PROTO(
1067b4a7f91cSChuck Lever 		const struct rpc_task *task,
1068b4a7f91cSChuck Lever 		const struct rpcrdma_rep *rep,
1069b4a7f91cSChuck Lever 		const struct rpcrdma_req *req,
1070b4a7f91cSChuck Lever 		unsigned int credits
1071b4a7f91cSChuck Lever 	),
1072b4a7f91cSChuck Lever 
1073b4a7f91cSChuck Lever 	TP_ARGS(task, rep, req, credits),
1074b4a7f91cSChuck Lever 
1075b4a7f91cSChuck Lever 	TP_STRUCT__entry(
1076b4a7f91cSChuck Lever 		__field(unsigned int, task_id)
1077b4a7f91cSChuck Lever 		__field(unsigned int, client_id)
1078b4a7f91cSChuck Lever 		__field(const void *, rep)
1079b4a7f91cSChuck Lever 		__field(const void *, req)
1080b4a7f91cSChuck Lever 		__field(u32, xid)
1081b4a7f91cSChuck Lever 		__field(unsigned int, credits)
1082b4a7f91cSChuck Lever 	),
1083b4a7f91cSChuck Lever 
1084b4a7f91cSChuck Lever 	TP_fast_assign(
1085b4a7f91cSChuck Lever 		__entry->task_id = task->tk_pid;
1086b4a7f91cSChuck Lever 		__entry->client_id = task->tk_client->cl_clid;
1087b4a7f91cSChuck Lever 		__entry->rep = rep;
1088b4a7f91cSChuck Lever 		__entry->req = req;
1089b4a7f91cSChuck Lever 		__entry->xid = be32_to_cpu(rep->rr_xid);
1090b4a7f91cSChuck Lever 		__entry->credits = credits;
1091b4a7f91cSChuck Lever 	),
1092b4a7f91cSChuck Lever 
1093b4a7f91cSChuck Lever 	TP_printk("task:%u@%u xid=0x%08x, %u credits, rep=%p -> req=%p",
1094b4a7f91cSChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
1095b4a7f91cSChuck Lever 		__entry->credits, __entry->rep, __entry->req
1096b4a7f91cSChuck Lever 	)
1097b4a7f91cSChuck Lever );
1098b4a7f91cSChuck Lever 
1099b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_defer_cmp,
1100b4a7f91cSChuck Lever 	TP_PROTO(
1101b4a7f91cSChuck Lever 		const struct rpcrdma_rep *rep
1102b4a7f91cSChuck Lever 	),
1103b4a7f91cSChuck Lever 
1104b4a7f91cSChuck Lever 	TP_ARGS(rep),
1105b4a7f91cSChuck Lever 
1106b4a7f91cSChuck Lever 	TP_STRUCT__entry(
1107b4a7f91cSChuck Lever 		__field(unsigned int, task_id)
1108b4a7f91cSChuck Lever 		__field(unsigned int, client_id)
1109b4a7f91cSChuck Lever 		__field(const void *, rep)
1110b4a7f91cSChuck Lever 		__field(u32, xid)
1111b4a7f91cSChuck Lever 	),
1112b4a7f91cSChuck Lever 
1113b4a7f91cSChuck Lever 	TP_fast_assign(
1114b4a7f91cSChuck Lever 		__entry->task_id = rep->rr_rqst->rq_task->tk_pid;
1115b4a7f91cSChuck Lever 		__entry->client_id = rep->rr_rqst->rq_task->tk_client->cl_clid;
1116b4a7f91cSChuck Lever 		__entry->rep = rep;
1117b4a7f91cSChuck Lever 		__entry->xid = be32_to_cpu(rep->rr_xid);
1118b4a7f91cSChuck Lever 	),
1119b4a7f91cSChuck Lever 
1120b4a7f91cSChuck Lever 	TP_printk("task:%u@%u xid=0x%08x rep=%p",
1121b4a7f91cSChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
1122b4a7f91cSChuck Lever 		__entry->rep
1123b4a7f91cSChuck Lever 	)
1124b4a7f91cSChuck Lever );
1125b4a7f91cSChuck Lever 
1126b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_vers);
1127b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_rqst);
1128b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_short);
1129b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_hdr);
1130b4a7f91cSChuck Lever 
1131e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_fixup,
1132e11b7c96SChuck Lever 	TP_PROTO(
1133e11b7c96SChuck Lever 		const struct rpc_rqst *rqst,
1134d4957f01SChuck Lever 		unsigned long fixup
1135e11b7c96SChuck Lever 	),
1136e11b7c96SChuck Lever 
1137d4957f01SChuck Lever 	TP_ARGS(rqst, fixup),
1138e11b7c96SChuck Lever 
1139e11b7c96SChuck Lever 	TP_STRUCT__entry(
1140e11b7c96SChuck Lever 		__field(unsigned int, task_id)
1141e11b7c96SChuck Lever 		__field(unsigned int, client_id)
1142d4957f01SChuck Lever 		__field(unsigned long, fixup)
1143d4957f01SChuck Lever 		__field(size_t, headlen)
1144d4957f01SChuck Lever 		__field(unsigned int, pagelen)
1145d4957f01SChuck Lever 		__field(size_t, taillen)
1146e11b7c96SChuck Lever 	),
1147e11b7c96SChuck Lever 
1148e11b7c96SChuck Lever 	TP_fast_assign(
1149e11b7c96SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
1150e11b7c96SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
1151d4957f01SChuck Lever 		__entry->fixup = fixup;
1152d4957f01SChuck Lever 		__entry->headlen = rqst->rq_rcv_buf.head[0].iov_len;
1153d4957f01SChuck Lever 		__entry->pagelen = rqst->rq_rcv_buf.page_len;
1154d4957f01SChuck Lever 		__entry->taillen = rqst->rq_rcv_buf.tail[0].iov_len;
1155e11b7c96SChuck Lever 	),
1156e11b7c96SChuck Lever 
1157d4957f01SChuck Lever 	TP_printk("task:%u@%u fixup=%lu xdr=%zu/%u/%zu",
1158d4957f01SChuck Lever 		__entry->task_id, __entry->client_id, __entry->fixup,
1159d4957f01SChuck Lever 		__entry->headlen, __entry->pagelen, __entry->taillen
1160e11b7c96SChuck Lever 	)
1161e11b7c96SChuck Lever );
1162e11b7c96SChuck Lever 
1163e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_decode_seg,
1164e11b7c96SChuck Lever 	TP_PROTO(
1165e11b7c96SChuck Lever 		u32 handle,
1166e11b7c96SChuck Lever 		u32 length,
1167e11b7c96SChuck Lever 		u64 offset
1168e11b7c96SChuck Lever 	),
1169e11b7c96SChuck Lever 
1170e11b7c96SChuck Lever 	TP_ARGS(handle, length, offset),
1171e11b7c96SChuck Lever 
1172e11b7c96SChuck Lever 	TP_STRUCT__entry(
1173e11b7c96SChuck Lever 		__field(u32, handle)
1174e11b7c96SChuck Lever 		__field(u32, length)
1175e11b7c96SChuck Lever 		__field(u64, offset)
1176e11b7c96SChuck Lever 	),
1177e11b7c96SChuck Lever 
1178e11b7c96SChuck Lever 	TP_fast_assign(
1179e11b7c96SChuck Lever 		__entry->handle = handle;
1180e11b7c96SChuck Lever 		__entry->length = length;
1181e11b7c96SChuck Lever 		__entry->offset = offset;
1182e11b7c96SChuck Lever 	),
1183e11b7c96SChuck Lever 
1184e11b7c96SChuck Lever 	TP_printk("%u@0x%016llx:0x%08x",
1185e11b7c96SChuck Lever 		__entry->length, (unsigned long long)__entry->offset,
1186e11b7c96SChuck Lever 		__entry->handle
1187e11b7c96SChuck Lever 	)
1188e11b7c96SChuck Lever );
1189e11b7c96SChuck Lever 
1190fc1eb807SChuck Lever /**
1191fc1eb807SChuck Lever  ** Callback events
1192fc1eb807SChuck Lever  **/
1193fc1eb807SChuck Lever 
1194fc1eb807SChuck Lever TRACE_EVENT(xprtrdma_cb_setup,
1195fc1eb807SChuck Lever 	TP_PROTO(
1196fc1eb807SChuck Lever 		const struct rpcrdma_xprt *r_xprt,
1197fc1eb807SChuck Lever 		unsigned int reqs
1198fc1eb807SChuck Lever 	),
1199fc1eb807SChuck Lever 
1200fc1eb807SChuck Lever 	TP_ARGS(r_xprt, reqs),
1201fc1eb807SChuck Lever 
1202fc1eb807SChuck Lever 	TP_STRUCT__entry(
1203fc1eb807SChuck Lever 		__field(const void *, r_xprt)
1204fc1eb807SChuck Lever 		__field(unsigned int, reqs)
1205fc1eb807SChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
1206fc1eb807SChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
1207fc1eb807SChuck Lever 	),
1208fc1eb807SChuck Lever 
1209fc1eb807SChuck Lever 	TP_fast_assign(
1210fc1eb807SChuck Lever 		__entry->r_xprt = r_xprt;
1211fc1eb807SChuck Lever 		__entry->reqs = reqs;
1212fc1eb807SChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
1213fc1eb807SChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
1214fc1eb807SChuck Lever 	),
1215fc1eb807SChuck Lever 
1216fc1eb807SChuck Lever 	TP_printk("peer=[%s]:%s r_xprt=%p: %u reqs",
1217fc1eb807SChuck Lever 		__get_str(addr), __get_str(port),
1218fc1eb807SChuck Lever 		__entry->r_xprt, __entry->reqs
1219fc1eb807SChuck Lever 	)
1220fc1eb807SChuck Lever );
1221fc1eb807SChuck Lever 
1222fc1eb807SChuck Lever DEFINE_CB_EVENT(xprtrdma_cb_call);
1223fc1eb807SChuck Lever DEFINE_CB_EVENT(xprtrdma_cb_reply);
1224fc1eb807SChuck Lever 
122507e10308SChuck Lever TRACE_EVENT(xprtrdma_leaked_rep,
122607e10308SChuck Lever 	TP_PROTO(
122707e10308SChuck Lever 		const struct rpc_rqst *rqst,
122807e10308SChuck Lever 		const struct rpcrdma_rep *rep
122907e10308SChuck Lever 	),
123007e10308SChuck Lever 
123107e10308SChuck Lever 	TP_ARGS(rqst, rep),
123207e10308SChuck Lever 
123307e10308SChuck Lever 	TP_STRUCT__entry(
123407e10308SChuck Lever 		__field(unsigned int, task_id)
123507e10308SChuck Lever 		__field(unsigned int, client_id)
123607e10308SChuck Lever 		__field(u32, xid)
123707e10308SChuck Lever 		__field(const void *, rep)
123807e10308SChuck Lever 	),
123907e10308SChuck Lever 
124007e10308SChuck Lever 	TP_fast_assign(
124107e10308SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
124207e10308SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
124307e10308SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
124407e10308SChuck Lever 		__entry->rep = rep;
124507e10308SChuck Lever 	),
124607e10308SChuck Lever 
124707e10308SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x rep=%p",
124807e10308SChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
124907e10308SChuck Lever 		__entry->rep
125007e10308SChuck Lever 	)
125107e10308SChuck Lever );
125207e10308SChuck Lever 
125398895edbSChuck Lever /**
125498895edbSChuck Lever  ** Server-side RPC/RDMA events
125598895edbSChuck Lever  **/
125698895edbSChuck Lever 
1257e979a173SChuck Lever DECLARE_EVENT_CLASS(svcrdma_accept_class,
1258e979a173SChuck Lever 	TP_PROTO(
1259e979a173SChuck Lever 		const struct svcxprt_rdma *rdma,
1260e979a173SChuck Lever 		long status
1261e979a173SChuck Lever 	),
1262e979a173SChuck Lever 
1263e979a173SChuck Lever 	TP_ARGS(rdma, status),
1264e979a173SChuck Lever 
1265e979a173SChuck Lever 	TP_STRUCT__entry(
1266e979a173SChuck Lever 		__field(long, status)
1267e979a173SChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1268e979a173SChuck Lever 	),
1269e979a173SChuck Lever 
1270e979a173SChuck Lever 	TP_fast_assign(
1271e979a173SChuck Lever 		__entry->status = status;
1272e979a173SChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1273e979a173SChuck Lever 	),
1274e979a173SChuck Lever 
1275e979a173SChuck Lever 	TP_printk("addr=%s status=%ld",
1276e979a173SChuck Lever 		__get_str(addr), __entry->status
1277e979a173SChuck Lever 	)
1278e979a173SChuck Lever );
1279e979a173SChuck Lever 
1280e979a173SChuck Lever #define DEFINE_ACCEPT_EVENT(name) \
1281e979a173SChuck Lever 		DEFINE_EVENT(svcrdma_accept_class, svcrdma_##name##_err, \
1282e979a173SChuck Lever 				TP_PROTO( \
1283e979a173SChuck Lever 					const struct svcxprt_rdma *rdma, \
1284e979a173SChuck Lever 					long status \
1285e979a173SChuck Lever 				), \
1286e979a173SChuck Lever 				TP_ARGS(rdma, status))
1287e979a173SChuck Lever 
1288e979a173SChuck Lever DEFINE_ACCEPT_EVENT(pd);
1289e979a173SChuck Lever DEFINE_ACCEPT_EVENT(qp);
1290e979a173SChuck Lever DEFINE_ACCEPT_EVENT(fabric);
1291e979a173SChuck Lever DEFINE_ACCEPT_EVENT(initdepth);
1292e979a173SChuck Lever DEFINE_ACCEPT_EVENT(accept);
1293e979a173SChuck Lever 
129498895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_MSG);
129598895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_NOMSG);
129698895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_MSGP);
129798895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_DONE);
129898895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_ERROR);
129998895edbSChuck Lever 
130098895edbSChuck Lever #define show_rpcrdma_proc(x)						\
130198895edbSChuck Lever 		__print_symbolic(x,					\
130298895edbSChuck Lever 				{ RDMA_MSG, "RDMA_MSG" },		\
130398895edbSChuck Lever 				{ RDMA_NOMSG, "RDMA_NOMSG" },		\
130498895edbSChuck Lever 				{ RDMA_MSGP, "RDMA_MSGP" },		\
130598895edbSChuck Lever 				{ RDMA_DONE, "RDMA_DONE" },		\
130698895edbSChuck Lever 				{ RDMA_ERROR, "RDMA_ERROR" })
130798895edbSChuck Lever 
130898895edbSChuck Lever TRACE_EVENT(svcrdma_decode_rqst,
130998895edbSChuck Lever 	TP_PROTO(
1310007140eeSChuck Lever 		const struct svc_rdma_recv_ctxt *ctxt,
131198895edbSChuck Lever 		__be32 *p,
131298895edbSChuck Lever 		unsigned int hdrlen
131398895edbSChuck Lever 	),
131498895edbSChuck Lever 
1315007140eeSChuck Lever 	TP_ARGS(ctxt, p, hdrlen),
131698895edbSChuck Lever 
131798895edbSChuck Lever 	TP_STRUCT__entry(
1318007140eeSChuck Lever 		__field(u32, cq_id)
1319007140eeSChuck Lever 		__field(int, completion_id)
132098895edbSChuck Lever 		__field(u32, xid)
132198895edbSChuck Lever 		__field(u32, vers)
132298895edbSChuck Lever 		__field(u32, proc)
132398895edbSChuck Lever 		__field(u32, credits)
132498895edbSChuck Lever 		__field(unsigned int, hdrlen)
132598895edbSChuck Lever 	),
132698895edbSChuck Lever 
132798895edbSChuck Lever 	TP_fast_assign(
1328007140eeSChuck Lever 		__entry->cq_id = ctxt->rc_cid.ci_queue_id;
1329007140eeSChuck Lever 		__entry->completion_id = ctxt->rc_cid.ci_completion_id;
133098895edbSChuck Lever 		__entry->xid = be32_to_cpup(p++);
133198895edbSChuck Lever 		__entry->vers = be32_to_cpup(p++);
133298895edbSChuck Lever 		__entry->credits = be32_to_cpup(p++);
133398895edbSChuck Lever 		__entry->proc = be32_to_cpup(p);
133498895edbSChuck Lever 		__entry->hdrlen = hdrlen;
133598895edbSChuck Lever 	),
133698895edbSChuck Lever 
1337007140eeSChuck Lever 	TP_printk("cq.id=%u cid=%d xid=0x%08x vers=%u credits=%u proc=%s hdrlen=%u",
1338007140eeSChuck Lever 		__entry->cq_id, __entry->completion_id,
133998895edbSChuck Lever 		__entry->xid, __entry->vers, __entry->credits,
134098895edbSChuck Lever 		show_rpcrdma_proc(__entry->proc), __entry->hdrlen)
134198895edbSChuck Lever );
134298895edbSChuck Lever 
134327ce6294SChuck Lever TRACE_EVENT(svcrdma_decode_short_err,
134498895edbSChuck Lever 	TP_PROTO(
1345007140eeSChuck Lever 		const struct svc_rdma_recv_ctxt *ctxt,
134698895edbSChuck Lever 		unsigned int hdrlen
134798895edbSChuck Lever 	),
134898895edbSChuck Lever 
1349007140eeSChuck Lever 	TP_ARGS(ctxt, hdrlen),
135098895edbSChuck Lever 
135198895edbSChuck Lever 	TP_STRUCT__entry(
1352007140eeSChuck Lever 		__field(u32, cq_id)
1353007140eeSChuck Lever 		__field(int, completion_id)
135498895edbSChuck Lever 		__field(unsigned int, hdrlen)
135598895edbSChuck Lever 	),
135698895edbSChuck Lever 
135798895edbSChuck Lever 	TP_fast_assign(
1358007140eeSChuck Lever 		__entry->cq_id = ctxt->rc_cid.ci_queue_id;
1359007140eeSChuck Lever 		__entry->completion_id = ctxt->rc_cid.ci_completion_id;
136098895edbSChuck Lever 		__entry->hdrlen = hdrlen;
136198895edbSChuck Lever 	),
136298895edbSChuck Lever 
1363007140eeSChuck Lever 	TP_printk("cq.id=%u cid=%d hdrlen=%u",
1364007140eeSChuck Lever 		__entry->cq_id, __entry->completion_id,
1365007140eeSChuck Lever 		__entry->hdrlen)
136698895edbSChuck Lever );
136798895edbSChuck Lever 
136898895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_badreq_event,
136998895edbSChuck Lever 	TP_PROTO(
1370007140eeSChuck Lever 		const struct svc_rdma_recv_ctxt *ctxt,
137198895edbSChuck Lever 		__be32 *p
137298895edbSChuck Lever 	),
137398895edbSChuck Lever 
1374007140eeSChuck Lever 	TP_ARGS(ctxt, p),
137598895edbSChuck Lever 
137698895edbSChuck Lever 	TP_STRUCT__entry(
1377007140eeSChuck Lever 		__field(u32, cq_id)
1378007140eeSChuck Lever 		__field(int, completion_id)
137998895edbSChuck Lever 		__field(u32, xid)
138098895edbSChuck Lever 		__field(u32, vers)
138198895edbSChuck Lever 		__field(u32, proc)
138298895edbSChuck Lever 		__field(u32, credits)
138398895edbSChuck Lever 	),
138498895edbSChuck Lever 
138598895edbSChuck Lever 	TP_fast_assign(
1386007140eeSChuck Lever 		__entry->cq_id = ctxt->rc_cid.ci_queue_id;
1387007140eeSChuck Lever 		__entry->completion_id = ctxt->rc_cid.ci_completion_id;
138898895edbSChuck Lever 		__entry->xid = be32_to_cpup(p++);
138998895edbSChuck Lever 		__entry->vers = be32_to_cpup(p++);
139098895edbSChuck Lever 		__entry->credits = be32_to_cpup(p++);
139198895edbSChuck Lever 		__entry->proc = be32_to_cpup(p);
139298895edbSChuck Lever 	),
139398895edbSChuck Lever 
1394007140eeSChuck Lever 	TP_printk("cq.id=%u cid=%d xid=0x%08x vers=%u credits=%u proc=%u",
1395007140eeSChuck Lever 		__entry->cq_id, __entry->completion_id,
139698895edbSChuck Lever 		__entry->xid, __entry->vers, __entry->credits, __entry->proc)
139798895edbSChuck Lever );
139898895edbSChuck Lever 
139998895edbSChuck Lever #define DEFINE_BADREQ_EVENT(name)					\
140027ce6294SChuck Lever 		DEFINE_EVENT(svcrdma_badreq_event,			\
140127ce6294SChuck Lever 			     svcrdma_decode_##name##_err,		\
140298895edbSChuck Lever 				TP_PROTO(				\
1403007140eeSChuck Lever 					const struct svc_rdma_recv_ctxt *ctxt,	\
140498895edbSChuck Lever 					__be32 *p			\
140598895edbSChuck Lever 				),					\
1406007140eeSChuck Lever 				TP_ARGS(ctxt, p))
140798895edbSChuck Lever 
140898895edbSChuck Lever DEFINE_BADREQ_EVENT(badvers);
140998895edbSChuck Lever DEFINE_BADREQ_EVENT(drop);
141098895edbSChuck Lever DEFINE_BADREQ_EVENT(badproc);
141198895edbSChuck Lever DEFINE_BADREQ_EVENT(parse);
141298895edbSChuck Lever 
141398895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_segment_event,
141498895edbSChuck Lever 	TP_PROTO(
141598895edbSChuck Lever 		u32 handle,
141698895edbSChuck Lever 		u32 length,
141798895edbSChuck Lever 		u64 offset
141898895edbSChuck Lever 	),
141998895edbSChuck Lever 
142098895edbSChuck Lever 	TP_ARGS(handle, length, offset),
142198895edbSChuck Lever 
142298895edbSChuck Lever 	TP_STRUCT__entry(
142398895edbSChuck Lever 		__field(u32, handle)
142498895edbSChuck Lever 		__field(u32, length)
142598895edbSChuck Lever 		__field(u64, offset)
142698895edbSChuck Lever 	),
142798895edbSChuck Lever 
142898895edbSChuck Lever 	TP_fast_assign(
142998895edbSChuck Lever 		__entry->handle = handle;
143098895edbSChuck Lever 		__entry->length = length;
143198895edbSChuck Lever 		__entry->offset = offset;
143298895edbSChuck Lever 	),
143398895edbSChuck Lever 
143498895edbSChuck Lever 	TP_printk("%u@0x%016llx:0x%08x",
143598895edbSChuck Lever 		__entry->length, (unsigned long long)__entry->offset,
143698895edbSChuck Lever 		__entry->handle
143798895edbSChuck Lever 	)
143898895edbSChuck Lever );
143998895edbSChuck Lever 
144098895edbSChuck Lever #define DEFINE_SEGMENT_EVENT(name)					\
1441e604aad2SChuck Lever 		DEFINE_EVENT(svcrdma_segment_event, svcrdma_##name,\
144298895edbSChuck Lever 				TP_PROTO(				\
144398895edbSChuck Lever 					u32 handle,			\
144498895edbSChuck Lever 					u32 length,			\
144598895edbSChuck Lever 					u64 offset			\
144698895edbSChuck Lever 				),					\
144798895edbSChuck Lever 				TP_ARGS(handle, length, offset))
144898895edbSChuck Lever 
1449a406c563SChuck Lever DEFINE_SEGMENT_EVENT(send_rseg);
1450a406c563SChuck Lever DEFINE_SEGMENT_EVENT(send_wseg);
145198895edbSChuck Lever 
1452*6911f3e1SChuck Lever TRACE_EVENT(svcrdma_encode_wseg,
1453*6911f3e1SChuck Lever 	TP_PROTO(
1454*6911f3e1SChuck Lever 		const struct svc_rdma_send_ctxt *ctxt,
1455*6911f3e1SChuck Lever 		u32 segno,
1456*6911f3e1SChuck Lever 		u32 handle,
1457*6911f3e1SChuck Lever 		u32 length,
1458*6911f3e1SChuck Lever 		u64 offset
1459*6911f3e1SChuck Lever 	),
1460*6911f3e1SChuck Lever 
1461*6911f3e1SChuck Lever 	TP_ARGS(ctxt, segno, handle, length, offset),
1462*6911f3e1SChuck Lever 
1463*6911f3e1SChuck Lever 	TP_STRUCT__entry(
1464*6911f3e1SChuck Lever 		__field(u32, cq_id)
1465*6911f3e1SChuck Lever 		__field(int, completion_id)
1466*6911f3e1SChuck Lever 		__field(u32, segno)
1467*6911f3e1SChuck Lever 		__field(u32, handle)
1468*6911f3e1SChuck Lever 		__field(u32, length)
1469*6911f3e1SChuck Lever 		__field(u64, offset)
1470*6911f3e1SChuck Lever 	),
1471*6911f3e1SChuck Lever 
1472*6911f3e1SChuck Lever 	TP_fast_assign(
1473*6911f3e1SChuck Lever 		__entry->cq_id = ctxt->sc_cid.ci_queue_id;
1474*6911f3e1SChuck Lever 		__entry->completion_id = ctxt->sc_cid.ci_completion_id;
1475*6911f3e1SChuck Lever 		__entry->segno = segno;
1476*6911f3e1SChuck Lever 		__entry->handle = handle;
1477*6911f3e1SChuck Lever 		__entry->length = length;
1478*6911f3e1SChuck Lever 		__entry->offset = offset;
1479*6911f3e1SChuck Lever 	),
1480*6911f3e1SChuck Lever 
1481*6911f3e1SChuck Lever 	TP_printk("cq_id=%u cid=%d segno=%u %u@0x%016llx:0x%08x",
1482*6911f3e1SChuck Lever 		__entry->cq_id, __entry->completion_id,
1483*6911f3e1SChuck Lever 		__entry->segno, __entry->length,
1484*6911f3e1SChuck Lever 		(unsigned long long)__entry->offset, __entry->handle
1485*6911f3e1SChuck Lever 	)
1486*6911f3e1SChuck Lever );
1487*6911f3e1SChuck Lever 
148878147ca8SChuck Lever TRACE_EVENT(svcrdma_decode_rseg,
148978147ca8SChuck Lever 	TP_PROTO(
149078147ca8SChuck Lever 		const struct rpc_rdma_cid *cid,
149178147ca8SChuck Lever 		const struct svc_rdma_chunk *chunk,
149278147ca8SChuck Lever 		const struct svc_rdma_segment *segment
149378147ca8SChuck Lever 	),
149478147ca8SChuck Lever 
149578147ca8SChuck Lever 	TP_ARGS(cid, chunk, segment),
149678147ca8SChuck Lever 
149778147ca8SChuck Lever 	TP_STRUCT__entry(
149878147ca8SChuck Lever 		__field(u32, cq_id)
149978147ca8SChuck Lever 		__field(int, completion_id)
150078147ca8SChuck Lever 		__field(u32, segno)
150178147ca8SChuck Lever 		__field(u32, position)
150278147ca8SChuck Lever 		__field(u32, handle)
150378147ca8SChuck Lever 		__field(u32, length)
150478147ca8SChuck Lever 		__field(u64, offset)
150578147ca8SChuck Lever 	),
150678147ca8SChuck Lever 
150778147ca8SChuck Lever 	TP_fast_assign(
150878147ca8SChuck Lever 		__entry->cq_id = cid->ci_queue_id;
150978147ca8SChuck Lever 		__entry->completion_id = cid->ci_completion_id;
151078147ca8SChuck Lever 		__entry->segno = chunk->ch_segcount;
151178147ca8SChuck Lever 		__entry->position = chunk->ch_position;
151278147ca8SChuck Lever 		__entry->handle = segment->rs_handle;
151378147ca8SChuck Lever 		__entry->length = segment->rs_length;
151478147ca8SChuck Lever 		__entry->offset = segment->rs_offset;
151578147ca8SChuck Lever 	),
151678147ca8SChuck Lever 
151778147ca8SChuck Lever 	TP_printk("cq_id=%u cid=%d segno=%u position=%u %u@0x%016llx:0x%08x",
151878147ca8SChuck Lever 		__entry->cq_id, __entry->completion_id,
151978147ca8SChuck Lever 		__entry->segno, __entry->position, __entry->length,
152078147ca8SChuck Lever 		(unsigned long long)__entry->offset, __entry->handle
152178147ca8SChuck Lever 	)
152278147ca8SChuck Lever );
152378147ca8SChuck Lever 
152478147ca8SChuck Lever TRACE_EVENT(svcrdma_decode_wseg,
152578147ca8SChuck Lever 	TP_PROTO(
152678147ca8SChuck Lever 		const struct rpc_rdma_cid *cid,
152778147ca8SChuck Lever 		const struct svc_rdma_chunk *chunk,
152878147ca8SChuck Lever 		u32 segno
152978147ca8SChuck Lever 	),
153078147ca8SChuck Lever 
153178147ca8SChuck Lever 	TP_ARGS(cid, chunk, segno),
153278147ca8SChuck Lever 
153378147ca8SChuck Lever 	TP_STRUCT__entry(
153478147ca8SChuck Lever 		__field(u32, cq_id)
153578147ca8SChuck Lever 		__field(int, completion_id)
153678147ca8SChuck Lever 		__field(u32, segno)
153778147ca8SChuck Lever 		__field(u32, handle)
153878147ca8SChuck Lever 		__field(u32, length)
153978147ca8SChuck Lever 		__field(u64, offset)
154078147ca8SChuck Lever 	),
154178147ca8SChuck Lever 
154278147ca8SChuck Lever 	TP_fast_assign(
154378147ca8SChuck Lever 		const struct svc_rdma_segment *segment =
154478147ca8SChuck Lever 			&chunk->ch_segments[segno];
154578147ca8SChuck Lever 
154678147ca8SChuck Lever 		__entry->cq_id = cid->ci_queue_id;
154778147ca8SChuck Lever 		__entry->completion_id = cid->ci_completion_id;
154878147ca8SChuck Lever 		__entry->segno = segno;
154978147ca8SChuck Lever 		__entry->handle = segment->rs_handle;
155078147ca8SChuck Lever 		__entry->length = segment->rs_length;
155178147ca8SChuck Lever 		__entry->offset = segment->rs_offset;
155278147ca8SChuck Lever 	),
155378147ca8SChuck Lever 
155478147ca8SChuck Lever 	TP_printk("cq_id=%u cid=%d segno=%u %u@0x%016llx:0x%08x",
155578147ca8SChuck Lever 		__entry->cq_id, __entry->completion_id,
155678147ca8SChuck Lever 		__entry->segno, __entry->length,
155778147ca8SChuck Lever 		(unsigned long long)__entry->offset, __entry->handle
155878147ca8SChuck Lever 	)
155978147ca8SChuck Lever );
156078147ca8SChuck Lever 
156198895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_chunk_event,
156298895edbSChuck Lever 	TP_PROTO(
156398895edbSChuck Lever 		u32 length
156498895edbSChuck Lever 	),
156598895edbSChuck Lever 
156698895edbSChuck Lever 	TP_ARGS(length),
156798895edbSChuck Lever 
156898895edbSChuck Lever 	TP_STRUCT__entry(
156998895edbSChuck Lever 		__field(u32, length)
157098895edbSChuck Lever 	),
157198895edbSChuck Lever 
157298895edbSChuck Lever 	TP_fast_assign(
157398895edbSChuck Lever 		__entry->length = length;
157498895edbSChuck Lever 	),
157598895edbSChuck Lever 
157698895edbSChuck Lever 	TP_printk("length=%u",
157798895edbSChuck Lever 		__entry->length
157898895edbSChuck Lever 	)
157998895edbSChuck Lever );
158098895edbSChuck Lever 
158198895edbSChuck Lever #define DEFINE_CHUNK_EVENT(name)					\
1582a406c563SChuck Lever 		DEFINE_EVENT(svcrdma_chunk_event, svcrdma_##name,	\
158398895edbSChuck Lever 				TP_PROTO(				\
158498895edbSChuck Lever 					u32 length			\
158598895edbSChuck Lever 				),					\
158698895edbSChuck Lever 				TP_ARGS(length))
158798895edbSChuck Lever 
1588a406c563SChuck Lever DEFINE_CHUNK_EVENT(send_pzr);
1589a406c563SChuck Lever DEFINE_CHUNK_EVENT(encode_write_chunk);
1590a406c563SChuck Lever DEFINE_CHUNK_EVENT(send_write_chunk);
1591a406c563SChuck Lever DEFINE_CHUNK_EVENT(encode_read_chunk);
1592a406c563SChuck Lever DEFINE_CHUNK_EVENT(send_reply_chunk);
159398895edbSChuck Lever 
1594a406c563SChuck Lever TRACE_EVENT(svcrdma_send_read_chunk,
159598895edbSChuck Lever 	TP_PROTO(
159698895edbSChuck Lever 		u32 length,
159798895edbSChuck Lever 		u32 position
159898895edbSChuck Lever 	),
159998895edbSChuck Lever 
160098895edbSChuck Lever 	TP_ARGS(length, position),
160198895edbSChuck Lever 
160298895edbSChuck Lever 	TP_STRUCT__entry(
160398895edbSChuck Lever 		__field(u32, length)
160498895edbSChuck Lever 		__field(u32, position)
160598895edbSChuck Lever 	),
160698895edbSChuck Lever 
160798895edbSChuck Lever 	TP_fast_assign(
160898895edbSChuck Lever 		__entry->length = length;
160998895edbSChuck Lever 		__entry->position = position;
161098895edbSChuck Lever 	),
161198895edbSChuck Lever 
161298895edbSChuck Lever 	TP_printk("length=%u position=%u",
161398895edbSChuck Lever 		__entry->length, __entry->position
161498895edbSChuck Lever 	)
161598895edbSChuck Lever );
161698895edbSChuck Lever 
161798895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_error_event,
161898895edbSChuck Lever 	TP_PROTO(
161998895edbSChuck Lever 		__be32 xid
162098895edbSChuck Lever 	),
162198895edbSChuck Lever 
162298895edbSChuck Lever 	TP_ARGS(xid),
162398895edbSChuck Lever 
162498895edbSChuck Lever 	TP_STRUCT__entry(
162598895edbSChuck Lever 		__field(u32, xid)
162698895edbSChuck Lever 	),
162798895edbSChuck Lever 
162898895edbSChuck Lever 	TP_fast_assign(
162998895edbSChuck Lever 		__entry->xid = be32_to_cpu(xid);
163098895edbSChuck Lever 	),
163198895edbSChuck Lever 
163298895edbSChuck Lever 	TP_printk("xid=0x%08x",
163398895edbSChuck Lever 		__entry->xid
163498895edbSChuck Lever 	)
163598895edbSChuck Lever );
163698895edbSChuck Lever 
163798895edbSChuck Lever #define DEFINE_ERROR_EVENT(name)					\
163898895edbSChuck Lever 		DEFINE_EVENT(svcrdma_error_event, svcrdma_err_##name,	\
163998895edbSChuck Lever 				TP_PROTO(				\
164098895edbSChuck Lever 					__be32 xid			\
164198895edbSChuck Lever 				),					\
164298895edbSChuck Lever 				TP_ARGS(xid))
164398895edbSChuck Lever 
164498895edbSChuck Lever DEFINE_ERROR_EVENT(vers);
164598895edbSChuck Lever DEFINE_ERROR_EVENT(chunk);
164698895edbSChuck Lever 
1647bd2abef3SChuck Lever /**
1648bd2abef3SChuck Lever  ** Server-side RDMA API events
1649bd2abef3SChuck Lever  **/
1650bd2abef3SChuck Lever 
1651832b2cb9SChuck Lever DECLARE_EVENT_CLASS(svcrdma_dma_map_class,
1652bd2abef3SChuck Lever 	TP_PROTO(
1653bd2abef3SChuck Lever 		const struct svcxprt_rdma *rdma,
1654832b2cb9SChuck Lever 		u64 dma_addr,
1655832b2cb9SChuck Lever 		u32 length
1656bd2abef3SChuck Lever 	),
1657bd2abef3SChuck Lever 
1658832b2cb9SChuck Lever 	TP_ARGS(rdma, dma_addr, length),
1659bd2abef3SChuck Lever 
1660bd2abef3SChuck Lever 	TP_STRUCT__entry(
1661832b2cb9SChuck Lever 		__field(u64, dma_addr)
1662832b2cb9SChuck Lever 		__field(u32, length)
1663bd2abef3SChuck Lever 		__string(device, rdma->sc_cm_id->device->name)
1664bd2abef3SChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1665bd2abef3SChuck Lever 	),
1666bd2abef3SChuck Lever 
1667bd2abef3SChuck Lever 	TP_fast_assign(
1668832b2cb9SChuck Lever 		__entry->dma_addr = dma_addr;
1669832b2cb9SChuck Lever 		__entry->length = length;
1670bd2abef3SChuck Lever 		__assign_str(device, rdma->sc_cm_id->device->name);
1671bd2abef3SChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1672bd2abef3SChuck Lever 	),
1673bd2abef3SChuck Lever 
1674832b2cb9SChuck Lever 	TP_printk("addr=%s device=%s dma_addr=%llu length=%u",
1675832b2cb9SChuck Lever 		__get_str(addr), __get_str(device),
1676832b2cb9SChuck Lever 		__entry->dma_addr, __entry->length
1677bd2abef3SChuck Lever 	)
1678bd2abef3SChuck Lever );
1679bd2abef3SChuck Lever 
1680832b2cb9SChuck Lever #define DEFINE_SVC_DMA_EVENT(name)					\
1681832b2cb9SChuck Lever 		DEFINE_EVENT(svcrdma_dma_map_class, svcrdma_##name,	\
1682832b2cb9SChuck Lever 				TP_PROTO(				\
1683832b2cb9SChuck Lever 					const struct svcxprt_rdma *rdma,\
1684832b2cb9SChuck Lever 					u64 dma_addr,			\
1685832b2cb9SChuck Lever 					u32 length			\
1686832b2cb9SChuck Lever 				),					\
1687832b2cb9SChuck Lever 				TP_ARGS(rdma, dma_addr, length))
1688832b2cb9SChuck Lever 
1689832b2cb9SChuck Lever DEFINE_SVC_DMA_EVENT(dma_map_page);
1690832b2cb9SChuck Lever DEFINE_SVC_DMA_EVENT(dma_unmap_page);
1691832b2cb9SChuck Lever 
16922abfbe7eSChuck Lever TRACE_EVENT(svcrdma_dma_map_rw_err,
1693bd2abef3SChuck Lever 	TP_PROTO(
1694bd2abef3SChuck Lever 		const struct svcxprt_rdma *rdma,
16952abfbe7eSChuck Lever 		unsigned int nents,
1696bd2abef3SChuck Lever 		int status
1697bd2abef3SChuck Lever 	),
1698bd2abef3SChuck Lever 
16992abfbe7eSChuck Lever 	TP_ARGS(rdma, nents, status),
1700bd2abef3SChuck Lever 
1701bd2abef3SChuck Lever 	TP_STRUCT__entry(
1702bd2abef3SChuck Lever 		__field(int, status)
17032abfbe7eSChuck Lever 		__field(unsigned int, nents)
1704bd2abef3SChuck Lever 		__string(device, rdma->sc_cm_id->device->name)
1705bd2abef3SChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1706bd2abef3SChuck Lever 	),
1707bd2abef3SChuck Lever 
1708bd2abef3SChuck Lever 	TP_fast_assign(
1709bd2abef3SChuck Lever 		__entry->status = status;
17102abfbe7eSChuck Lever 		__entry->nents = nents;
1711bd2abef3SChuck Lever 		__assign_str(device, rdma->sc_cm_id->device->name);
1712bd2abef3SChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1713bd2abef3SChuck Lever 	),
1714bd2abef3SChuck Lever 
17152abfbe7eSChuck Lever 	TP_printk("addr=%s device=%s nents=%u status=%d",
17162abfbe7eSChuck Lever 		__get_str(addr), __get_str(device), __entry->nents,
17172abfbe7eSChuck Lever 		__entry->status
1718bd2abef3SChuck Lever 	)
1719bd2abef3SChuck Lever );
1720bd2abef3SChuck Lever 
1721f4e53e1cSChuck Lever TRACE_EVENT(svcrdma_no_rwctx_err,
1722f4e53e1cSChuck Lever 	TP_PROTO(
1723f4e53e1cSChuck Lever 		const struct svcxprt_rdma *rdma,
1724f4e53e1cSChuck Lever 		unsigned int num_sges
1725f4e53e1cSChuck Lever 	),
1726f4e53e1cSChuck Lever 
1727f4e53e1cSChuck Lever 	TP_ARGS(rdma, num_sges),
1728f4e53e1cSChuck Lever 
1729f4e53e1cSChuck Lever 	TP_STRUCT__entry(
1730f4e53e1cSChuck Lever 		__field(unsigned int, num_sges)
1731f4e53e1cSChuck Lever 		__string(device, rdma->sc_cm_id->device->name)
1732f4e53e1cSChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1733f4e53e1cSChuck Lever 	),
1734f4e53e1cSChuck Lever 
1735f4e53e1cSChuck Lever 	TP_fast_assign(
1736f4e53e1cSChuck Lever 		__entry->num_sges = num_sges;
1737f4e53e1cSChuck Lever 		__assign_str(device, rdma->sc_cm_id->device->name);
1738f4e53e1cSChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1739f4e53e1cSChuck Lever 	),
1740f4e53e1cSChuck Lever 
1741f4e53e1cSChuck Lever 	TP_printk("addr=%s device=%s num_sges=%d",
1742f4e53e1cSChuck Lever 		__get_str(addr), __get_str(device), __entry->num_sges
1743f4e53e1cSChuck Lever 	)
1744f4e53e1cSChuck Lever );
1745f4e53e1cSChuck Lever 
17469d200638SChuck Lever TRACE_EVENT(svcrdma_page_overrun_err,
17479d200638SChuck Lever 	TP_PROTO(
17489d200638SChuck Lever 		const struct svcxprt_rdma *rdma,
17499d200638SChuck Lever 		const struct svc_rqst *rqst,
17509d200638SChuck Lever 		unsigned int pageno
17519d200638SChuck Lever 	),
17529d200638SChuck Lever 
17539d200638SChuck Lever 	TP_ARGS(rdma, rqst, pageno),
17549d200638SChuck Lever 
17559d200638SChuck Lever 	TP_STRUCT__entry(
17569d200638SChuck Lever 		__field(unsigned int, pageno)
17579d200638SChuck Lever 		__field(u32, xid)
17589d200638SChuck Lever 		__string(device, rdma->sc_cm_id->device->name)
17599d200638SChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
17609d200638SChuck Lever 	),
17619d200638SChuck Lever 
17629d200638SChuck Lever 	TP_fast_assign(
17639d200638SChuck Lever 		__entry->pageno = pageno;
17649d200638SChuck Lever 		__entry->xid = __be32_to_cpu(rqst->rq_xid);
17659d200638SChuck Lever 		__assign_str(device, rdma->sc_cm_id->device->name);
17669d200638SChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
17679d200638SChuck Lever 	),
17689d200638SChuck Lever 
17699d200638SChuck Lever 	TP_printk("addr=%s device=%s xid=0x%08x pageno=%u", __get_str(addr),
17709d200638SChuck Lever 		__get_str(device), __entry->xid, __entry->pageno
17719d200638SChuck Lever 	)
17729d200638SChuck Lever );
17739d200638SChuck Lever 
1774dbc17acdSChuck Lever TRACE_EVENT(svcrdma_small_wrch_err,
1775dbc17acdSChuck Lever 	TP_PROTO(
1776dbc17acdSChuck Lever 		const struct svcxprt_rdma *rdma,
1777dbc17acdSChuck Lever 		unsigned int remaining,
1778dbc17acdSChuck Lever 		unsigned int seg_no,
1779dbc17acdSChuck Lever 		unsigned int num_segs
1780dbc17acdSChuck Lever 	),
1781dbc17acdSChuck Lever 
1782dbc17acdSChuck Lever 	TP_ARGS(rdma, remaining, seg_no, num_segs),
1783dbc17acdSChuck Lever 
1784dbc17acdSChuck Lever 	TP_STRUCT__entry(
1785dbc17acdSChuck Lever 		__field(unsigned int, remaining)
1786dbc17acdSChuck Lever 		__field(unsigned int, seg_no)
1787dbc17acdSChuck Lever 		__field(unsigned int, num_segs)
1788dbc17acdSChuck Lever 		__string(device, rdma->sc_cm_id->device->name)
1789dbc17acdSChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1790dbc17acdSChuck Lever 	),
1791dbc17acdSChuck Lever 
1792dbc17acdSChuck Lever 	TP_fast_assign(
1793dbc17acdSChuck Lever 		__entry->remaining = remaining;
1794dbc17acdSChuck Lever 		__entry->seg_no = seg_no;
1795dbc17acdSChuck Lever 		__entry->num_segs = num_segs;
1796dbc17acdSChuck Lever 		__assign_str(device, rdma->sc_cm_id->device->name);
1797dbc17acdSChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1798dbc17acdSChuck Lever 	),
1799dbc17acdSChuck Lever 
1800dbc17acdSChuck Lever 	TP_printk("addr=%s device=%s remaining=%u seg_no=%u num_segs=%u",
1801dbc17acdSChuck Lever 		__get_str(addr), __get_str(device), __entry->remaining,
1802dbc17acdSChuck Lever 		__entry->seg_no, __entry->num_segs
1803dbc17acdSChuck Lever 	)
1804dbc17acdSChuck Lever );
1805dbc17acdSChuck Lever 
18060dabe948SChuck Lever TRACE_EVENT(svcrdma_send_pullup,
18070dabe948SChuck Lever 	TP_PROTO(
18080dabe948SChuck Lever 		unsigned int len
18090dabe948SChuck Lever 	),
18100dabe948SChuck Lever 
18110dabe948SChuck Lever 	TP_ARGS(len),
18120dabe948SChuck Lever 
18130dabe948SChuck Lever 	TP_STRUCT__entry(
18140dabe948SChuck Lever 		__field(unsigned int, len)
18150dabe948SChuck Lever 	),
18160dabe948SChuck Lever 
18170dabe948SChuck Lever 	TP_fast_assign(
18180dabe948SChuck Lever 		__entry->len = len;
18190dabe948SChuck Lever 	),
18200dabe948SChuck Lever 
18210dabe948SChuck Lever 	TP_printk("len=%u", __entry->len)
18220dabe948SChuck Lever );
18230dabe948SChuck Lever 
18243f8f25c6SChuck Lever TRACE_EVENT(svcrdma_send_err,
1825bd2abef3SChuck Lever 	TP_PROTO(
1826bd2abef3SChuck Lever 		const struct svc_rqst *rqst,
1827bd2abef3SChuck Lever 		int status
1828bd2abef3SChuck Lever 	),
1829bd2abef3SChuck Lever 
1830bd2abef3SChuck Lever 	TP_ARGS(rqst, status),
1831bd2abef3SChuck Lever 
1832bd2abef3SChuck Lever 	TP_STRUCT__entry(
1833bd2abef3SChuck Lever 		__field(int, status)
1834bd2abef3SChuck Lever 		__field(u32, xid)
1835bd2abef3SChuck Lever 		__string(addr, rqst->rq_xprt->xpt_remotebuf)
1836bd2abef3SChuck Lever 	),
1837bd2abef3SChuck Lever 
1838bd2abef3SChuck Lever 	TP_fast_assign(
1839bd2abef3SChuck Lever 		__entry->status = status;
1840bd2abef3SChuck Lever 		__entry->xid = __be32_to_cpu(rqst->rq_xid);
1841bd2abef3SChuck Lever 		__assign_str(addr, rqst->rq_xprt->xpt_remotebuf);
1842bd2abef3SChuck Lever 	),
1843bd2abef3SChuck Lever 
18443f8f25c6SChuck Lever 	TP_printk("addr=%s xid=0x%08x status=%d", __get_str(addr),
1845bd2abef3SChuck Lever 		__entry->xid, __entry->status
1846bd2abef3SChuck Lever 	)
1847bd2abef3SChuck Lever );
1848bd2abef3SChuck Lever 
1849bd2abef3SChuck Lever TRACE_EVENT(svcrdma_post_send,
1850bd2abef3SChuck Lever 	TP_PROTO(
185117f70f8dSChuck Lever 		const struct svc_rdma_send_ctxt *ctxt
1852bd2abef3SChuck Lever 	),
1853bd2abef3SChuck Lever 
185417f70f8dSChuck Lever 	TP_ARGS(ctxt),
1855bd2abef3SChuck Lever 
1856bd2abef3SChuck Lever 	TP_STRUCT__entry(
185717f70f8dSChuck Lever 		__field(u32, cq_id)
185817f70f8dSChuck Lever 		__field(int, completion_id)
1859bd2abef3SChuck Lever 		__field(unsigned int, num_sge)
1860bd2abef3SChuck Lever 		__field(u32, inv_rkey)
1861bd2abef3SChuck Lever 	),
1862bd2abef3SChuck Lever 
1863bd2abef3SChuck Lever 	TP_fast_assign(
186417f70f8dSChuck Lever 		const struct ib_send_wr *wr = &ctxt->sc_send_wr;
186517f70f8dSChuck Lever 
186617f70f8dSChuck Lever 		__entry->cq_id = ctxt->sc_cid.ci_queue_id;
186717f70f8dSChuck Lever 		__entry->completion_id = ctxt->sc_cid.ci_completion_id;
1868bd2abef3SChuck Lever 		__entry->num_sge = wr->num_sge;
1869bd2abef3SChuck Lever 		__entry->inv_rkey = (wr->opcode == IB_WR_SEND_WITH_INV) ?
1870bd2abef3SChuck Lever 					wr->ex.invalidate_rkey : 0;
1871bd2abef3SChuck Lever 	),
1872bd2abef3SChuck Lever 
187317f70f8dSChuck Lever 	TP_printk("cq_id=%u cid=%d num_sge=%u inv_rkey=0x%08x",
187417f70f8dSChuck Lever 		__entry->cq_id, __entry->completion_id,
187517f70f8dSChuck Lever 		__entry->num_sge, __entry->inv_rkey
1876bd2abef3SChuck Lever 	)
1877bd2abef3SChuck Lever );
1878bd2abef3SChuck Lever 
18793ac56c2fSChuck Lever DEFINE_COMPLETION_EVENT(svcrdma_wc_send);
1880bd2abef3SChuck Lever 
1881bd2abef3SChuck Lever TRACE_EVENT(svcrdma_post_recv,
1882bd2abef3SChuck Lever 	TP_PROTO(
18839b3bcf8cSChuck Lever 		const struct svc_rdma_recv_ctxt *ctxt
1884bd2abef3SChuck Lever 	),
1885bd2abef3SChuck Lever 
18869b3bcf8cSChuck Lever 	TP_ARGS(ctxt),
1887bd2abef3SChuck Lever 
1888bd2abef3SChuck Lever 	TP_STRUCT__entry(
18899b3bcf8cSChuck Lever 		__field(u32, cq_id)
18909b3bcf8cSChuck Lever 		__field(int, completion_id)
1891bd2abef3SChuck Lever 	),
1892bd2abef3SChuck Lever 
1893bd2abef3SChuck Lever 	TP_fast_assign(
18949b3bcf8cSChuck Lever 		__entry->cq_id = ctxt->rc_cid.ci_queue_id;
18959b3bcf8cSChuck Lever 		__entry->completion_id = ctxt->rc_cid.ci_completion_id;
1896bd2abef3SChuck Lever 	),
1897bd2abef3SChuck Lever 
18989b3bcf8cSChuck Lever 	TP_printk("cq.id=%d cid=%d",
18999b3bcf8cSChuck Lever 		__entry->cq_id, __entry->completion_id
1900bd2abef3SChuck Lever 	)
1901bd2abef3SChuck Lever );
1902bd2abef3SChuck Lever 
19039b3bcf8cSChuck Lever DEFINE_COMPLETION_EVENT(svcrdma_wc_receive);
19049b3bcf8cSChuck Lever 
19059b3bcf8cSChuck Lever TRACE_EVENT(svcrdma_rq_post_err,
1906bd2abef3SChuck Lever 	TP_PROTO(
19079b3bcf8cSChuck Lever 		const struct svcxprt_rdma *rdma,
19089b3bcf8cSChuck Lever 		int status
1909bd2abef3SChuck Lever 	),
1910bd2abef3SChuck Lever 
19119b3bcf8cSChuck Lever 	TP_ARGS(rdma, status),
1912bd2abef3SChuck Lever 
1913bd2abef3SChuck Lever 	TP_STRUCT__entry(
19149b3bcf8cSChuck Lever 		__field(int, status)
19159b3bcf8cSChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1916bd2abef3SChuck Lever 	),
1917bd2abef3SChuck Lever 
1918bd2abef3SChuck Lever 	TP_fast_assign(
19199b3bcf8cSChuck Lever 		__entry->status = status;
19209b3bcf8cSChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1921bd2abef3SChuck Lever 	),
1922bd2abef3SChuck Lever 
19239b3bcf8cSChuck Lever 	TP_printk("addr=%s status=%d",
19249b3bcf8cSChuck Lever 		__get_str(addr), __entry->status
1925bd2abef3SChuck Lever 	)
1926bd2abef3SChuck Lever );
1927bd2abef3SChuck Lever 
19286787f0beSChuck Lever TRACE_EVENT(svcrdma_post_chunk,
1929bd2abef3SChuck Lever 	TP_PROTO(
19306787f0beSChuck Lever 		const struct rpc_rdma_cid *cid,
1931e28b4fc6SChuck Lever 		int sqecount
1932bd2abef3SChuck Lever 	),
1933bd2abef3SChuck Lever 
19346787f0beSChuck Lever 	TP_ARGS(cid, sqecount),
1935bd2abef3SChuck Lever 
1936bd2abef3SChuck Lever 	TP_STRUCT__entry(
19376787f0beSChuck Lever 		__field(u32, cq_id)
19386787f0beSChuck Lever 		__field(int, completion_id)
1939bd2abef3SChuck Lever 		__field(int, sqecount)
1940bd2abef3SChuck Lever 	),
1941bd2abef3SChuck Lever 
1942bd2abef3SChuck Lever 	TP_fast_assign(
19436787f0beSChuck Lever 		__entry->cq_id = cid->ci_queue_id;
19446787f0beSChuck Lever 		__entry->completion_id = cid->ci_completion_id;
1945bd2abef3SChuck Lever 		__entry->sqecount = sqecount;
1946bd2abef3SChuck Lever 	),
1947bd2abef3SChuck Lever 
19486787f0beSChuck Lever 	TP_printk("cq.id=%u cid=%d sqecount=%d",
19496787f0beSChuck Lever 		__entry->cq_id, __entry->completion_id,
19506787f0beSChuck Lever 		__entry->sqecount
1951bd2abef3SChuck Lever 	)
1952bd2abef3SChuck Lever );
1953bd2abef3SChuck Lever 
19546787f0beSChuck Lever DEFINE_COMPLETION_EVENT(svcrdma_wc_read);
19556787f0beSChuck Lever DEFINE_COMPLETION_EVENT(svcrdma_wc_write);
1956bd2abef3SChuck Lever 
1957bd2abef3SChuck Lever TRACE_EVENT(svcrdma_qp_error,
1958bd2abef3SChuck Lever 	TP_PROTO(
1959bd2abef3SChuck Lever 		const struct ib_event *event,
1960bd2abef3SChuck Lever 		const struct sockaddr *sap
1961bd2abef3SChuck Lever 	),
1962bd2abef3SChuck Lever 
1963bd2abef3SChuck Lever 	TP_ARGS(event, sap),
1964bd2abef3SChuck Lever 
1965bd2abef3SChuck Lever 	TP_STRUCT__entry(
1966bd2abef3SChuck Lever 		__field(unsigned int, event)
1967bd2abef3SChuck Lever 		__string(device, event->device->name)
1968bd2abef3SChuck Lever 		__array(__u8, addr, INET6_ADDRSTRLEN + 10)
1969bd2abef3SChuck Lever 	),
1970bd2abef3SChuck Lever 
1971bd2abef3SChuck Lever 	TP_fast_assign(
1972bd2abef3SChuck Lever 		__entry->event = event->event;
1973bd2abef3SChuck Lever 		__assign_str(device, event->device->name);
1974bd2abef3SChuck Lever 		snprintf(__entry->addr, sizeof(__entry->addr) - 1,
1975bd2abef3SChuck Lever 			 "%pISpc", sap);
1976bd2abef3SChuck Lever 	),
1977bd2abef3SChuck Lever 
1978bd2abef3SChuck Lever 	TP_printk("addr=%s dev=%s event=%s (%u)",
1979bd2abef3SChuck Lever 		__entry->addr, __get_str(device),
1980bd2abef3SChuck Lever 		rdma_show_ib_event(__entry->event), __entry->event
1981bd2abef3SChuck Lever 	)
1982bd2abef3SChuck Lever );
1983bd2abef3SChuck Lever 
1984bd2abef3SChuck Lever DECLARE_EVENT_CLASS(svcrdma_sendqueue_event,
1985bd2abef3SChuck Lever 	TP_PROTO(
1986bd2abef3SChuck Lever 		const struct svcxprt_rdma *rdma
1987bd2abef3SChuck Lever 	),
1988bd2abef3SChuck Lever 
1989bd2abef3SChuck Lever 	TP_ARGS(rdma),
1990bd2abef3SChuck Lever 
1991bd2abef3SChuck Lever 	TP_STRUCT__entry(
1992bd2abef3SChuck Lever 		__field(int, avail)
1993bd2abef3SChuck Lever 		__field(int, depth)
1994bd2abef3SChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1995bd2abef3SChuck Lever 	),
1996bd2abef3SChuck Lever 
1997bd2abef3SChuck Lever 	TP_fast_assign(
1998bd2abef3SChuck Lever 		__entry->avail = atomic_read(&rdma->sc_sq_avail);
1999bd2abef3SChuck Lever 		__entry->depth = rdma->sc_sq_depth;
2000bd2abef3SChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
2001bd2abef3SChuck Lever 	),
2002bd2abef3SChuck Lever 
2003bd2abef3SChuck Lever 	TP_printk("addr=%s sc_sq_avail=%d/%d",
2004bd2abef3SChuck Lever 		__get_str(addr), __entry->avail, __entry->depth
2005bd2abef3SChuck Lever 	)
2006bd2abef3SChuck Lever );
2007bd2abef3SChuck Lever 
2008bd2abef3SChuck Lever #define DEFINE_SQ_EVENT(name)						\
2009bd2abef3SChuck Lever 		DEFINE_EVENT(svcrdma_sendqueue_event, svcrdma_sq_##name,\
2010bd2abef3SChuck Lever 				TP_PROTO(				\
2011bd2abef3SChuck Lever 					const struct svcxprt_rdma *rdma \
2012bd2abef3SChuck Lever 				),					\
2013bd2abef3SChuck Lever 				TP_ARGS(rdma))
2014bd2abef3SChuck Lever 
2015bd2abef3SChuck Lever DEFINE_SQ_EVENT(full);
2016bd2abef3SChuck Lever DEFINE_SQ_EVENT(retry);
2017bd2abef3SChuck Lever 
2018e28b4fc6SChuck Lever TRACE_EVENT(svcrdma_sq_post_err,
2019e28b4fc6SChuck Lever 	TP_PROTO(
2020e28b4fc6SChuck Lever 		const struct svcxprt_rdma *rdma,
2021e28b4fc6SChuck Lever 		int status
2022e28b4fc6SChuck Lever 	),
2023e28b4fc6SChuck Lever 
2024e28b4fc6SChuck Lever 	TP_ARGS(rdma, status),
2025e28b4fc6SChuck Lever 
2026e28b4fc6SChuck Lever 	TP_STRUCT__entry(
2027e28b4fc6SChuck Lever 		__field(int, avail)
2028e28b4fc6SChuck Lever 		__field(int, depth)
2029e28b4fc6SChuck Lever 		__field(int, status)
2030e28b4fc6SChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
2031e28b4fc6SChuck Lever 	),
2032e28b4fc6SChuck Lever 
2033e28b4fc6SChuck Lever 	TP_fast_assign(
2034e28b4fc6SChuck Lever 		__entry->avail = atomic_read(&rdma->sc_sq_avail);
2035e28b4fc6SChuck Lever 		__entry->depth = rdma->sc_sq_depth;
2036e28b4fc6SChuck Lever 		__entry->status = status;
2037e28b4fc6SChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
2038e28b4fc6SChuck Lever 	),
2039e28b4fc6SChuck Lever 
2040e28b4fc6SChuck Lever 	TP_printk("addr=%s sc_sq_avail=%d/%d status=%d",
2041e28b4fc6SChuck Lever 		__get_str(addr), __entry->avail, __entry->depth,
2042e28b4fc6SChuck Lever 		__entry->status
2043e28b4fc6SChuck Lever 	)
2044e28b4fc6SChuck Lever );
2045e28b4fc6SChuck Lever 
2046e48f083eSChuck Lever #endif /* _TRACE_RPCRDMA_H */
2047e48f083eSChuck Lever 
2048e48f083eSChuck Lever #include <trace/define_trace.h>
2049