xref: /openbmc/linux/include/trace/events/rpcrdma.h (revision 8e24e191)
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 
633a9568feSChuck Lever DECLARE_EVENT_CLASS(xprtrdma_reply_class,
64b4a7f91cSChuck Lever 	TP_PROTO(
65b4a7f91cSChuck Lever 		const struct rpcrdma_rep *rep
66b4a7f91cSChuck Lever 	),
67b4a7f91cSChuck Lever 
68b4a7f91cSChuck Lever 	TP_ARGS(rep),
69b4a7f91cSChuck Lever 
70b4a7f91cSChuck Lever 	TP_STRUCT__entry(
71b4a7f91cSChuck Lever 		__field(u32, xid)
72b4a7f91cSChuck Lever 		__field(u32, version)
73b4a7f91cSChuck Lever 		__field(u32, proc)
743a9568feSChuck Lever 		__string(addr, rpcrdma_addrstr(rep->rr_rxprt))
753a9568feSChuck Lever 		__string(port, rpcrdma_portstr(rep->rr_rxprt))
76b4a7f91cSChuck Lever 	),
77b4a7f91cSChuck Lever 
78b4a7f91cSChuck Lever 	TP_fast_assign(
79b4a7f91cSChuck Lever 		__entry->xid = be32_to_cpu(rep->rr_xid);
80b4a7f91cSChuck Lever 		__entry->version = be32_to_cpu(rep->rr_vers);
81b4a7f91cSChuck Lever 		__entry->proc = be32_to_cpu(rep->rr_proc);
823a9568feSChuck Lever 		__assign_str(addr, rpcrdma_addrstr(rep->rr_rxprt));
833a9568feSChuck Lever 		__assign_str(port, rpcrdma_portstr(rep->rr_rxprt));
84b4a7f91cSChuck Lever 	),
85b4a7f91cSChuck Lever 
863a9568feSChuck Lever 	TP_printk("peer=[%s]:%s xid=0x%08x version=%u proc=%u",
873a9568feSChuck Lever 		__get_str(addr), __get_str(port),
883a9568feSChuck Lever 		__entry->xid, __entry->version, __entry->proc
89b4a7f91cSChuck Lever 	)
90b4a7f91cSChuck Lever );
91b4a7f91cSChuck Lever 
92b4a7f91cSChuck Lever #define DEFINE_REPLY_EVENT(name)					\
933a9568feSChuck Lever 		DEFINE_EVENT(xprtrdma_reply_class,			\
943a9568feSChuck Lever 				xprtrdma_reply_##name##_err,		\
95b4a7f91cSChuck Lever 				TP_PROTO(				\
96b4a7f91cSChuck Lever 					const struct rpcrdma_rep *rep	\
97b4a7f91cSChuck Lever 				),					\
98b4a7f91cSChuck Lever 				TP_ARGS(rep))
99b4a7f91cSChuck Lever 
1001c443effSChuck Lever DECLARE_EVENT_CLASS(xprtrdma_rxprt,
1011c443effSChuck Lever 	TP_PROTO(
1021c443effSChuck Lever 		const struct rpcrdma_xprt *r_xprt
1031c443effSChuck Lever 	),
1041c443effSChuck Lever 
1051c443effSChuck Lever 	TP_ARGS(r_xprt),
1061c443effSChuck Lever 
1071c443effSChuck Lever 	TP_STRUCT__entry(
1081c443effSChuck Lever 		__field(const void *, r_xprt)
1091c443effSChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
1101c443effSChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
1111c443effSChuck Lever 	),
1121c443effSChuck Lever 
1131c443effSChuck Lever 	TP_fast_assign(
1141c443effSChuck Lever 		__entry->r_xprt = r_xprt;
1151c443effSChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
1161c443effSChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
1171c443effSChuck Lever 	),
1181c443effSChuck Lever 
1191c443effSChuck Lever 	TP_printk("peer=[%s]:%s r_xprt=%p",
1201c443effSChuck Lever 		__get_str(addr), __get_str(port), __entry->r_xprt
1211c443effSChuck Lever 	)
1221c443effSChuck Lever );
1231c443effSChuck Lever 
1241c443effSChuck Lever #define DEFINE_RXPRT_EVENT(name)					\
1251c443effSChuck Lever 		DEFINE_EVENT(xprtrdma_rxprt, name,			\
1261c443effSChuck Lever 				TP_PROTO(				\
1271c443effSChuck Lever 					const struct rpcrdma_xprt *r_xprt \
1281c443effSChuck Lever 				),					\
1291c443effSChuck Lever 				TP_ARGS(r_xprt))
1301c443effSChuck Lever 
1317b020f17SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_connect_class,
1327b020f17SChuck Lever 	TP_PROTO(
1337b020f17SChuck Lever 		const struct rpcrdma_xprt *r_xprt,
1347b020f17SChuck Lever 		int rc
1357b020f17SChuck Lever 	),
1367b020f17SChuck Lever 
1377b020f17SChuck Lever 	TP_ARGS(r_xprt, rc),
1387b020f17SChuck Lever 
1397b020f17SChuck Lever 	TP_STRUCT__entry(
1407b020f17SChuck Lever 		__field(const void *, r_xprt)
1417b020f17SChuck Lever 		__field(int, rc)
1427b020f17SChuck Lever 		__field(int, connect_status)
1437b020f17SChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
1447b020f17SChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
1457b020f17SChuck Lever 	),
1467b020f17SChuck Lever 
1477b020f17SChuck Lever 	TP_fast_assign(
1487b020f17SChuck Lever 		__entry->r_xprt = r_xprt;
1497b020f17SChuck Lever 		__entry->rc = rc;
150e28ce900SChuck Lever 		__entry->connect_status = r_xprt->rx_ep->re_connect_status;
1517b020f17SChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
1527b020f17SChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
1537b020f17SChuck Lever 	),
1547b020f17SChuck Lever 
155d6ccebf9SChuck Lever 	TP_printk("peer=[%s]:%s r_xprt=%p: rc=%d connection status=%d",
1567b020f17SChuck Lever 		__get_str(addr), __get_str(port), __entry->r_xprt,
1577b020f17SChuck Lever 		__entry->rc, __entry->connect_status
1587b020f17SChuck Lever 	)
1597b020f17SChuck Lever );
1607b020f17SChuck Lever 
1617b020f17SChuck Lever #define DEFINE_CONN_EVENT(name)						\
1627b020f17SChuck Lever 		DEFINE_EVENT(xprtrdma_connect_class, xprtrdma_##name,	\
1637b020f17SChuck Lever 				TP_PROTO(				\
1647b020f17SChuck Lever 					const struct rpcrdma_xprt *r_xprt, \
1657b020f17SChuck Lever 					int rc				\
1667b020f17SChuck Lever 				),					\
1677b020f17SChuck Lever 				TP_ARGS(r_xprt, rc))
1687b020f17SChuck Lever 
16958f10ad4SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_rdch_event,
17058f10ad4SChuck Lever 	TP_PROTO(
17158f10ad4SChuck Lever 		const struct rpc_task *task,
17258f10ad4SChuck Lever 		unsigned int pos,
17358f10ad4SChuck Lever 		struct rpcrdma_mr *mr,
17458f10ad4SChuck Lever 		int nsegs
17558f10ad4SChuck Lever 	),
17658f10ad4SChuck Lever 
17758f10ad4SChuck Lever 	TP_ARGS(task, pos, mr, nsegs),
17858f10ad4SChuck Lever 
17958f10ad4SChuck Lever 	TP_STRUCT__entry(
18058f10ad4SChuck Lever 		__field(unsigned int, task_id)
18158f10ad4SChuck Lever 		__field(unsigned int, client_id)
18258f10ad4SChuck Lever 		__field(unsigned int, pos)
18358f10ad4SChuck Lever 		__field(int, nents)
18458f10ad4SChuck Lever 		__field(u32, handle)
18558f10ad4SChuck Lever 		__field(u32, length)
18658f10ad4SChuck Lever 		__field(u64, offset)
18758f10ad4SChuck Lever 		__field(int, nsegs)
18858f10ad4SChuck Lever 	),
18958f10ad4SChuck Lever 
19058f10ad4SChuck Lever 	TP_fast_assign(
19158f10ad4SChuck Lever 		__entry->task_id = task->tk_pid;
19258f10ad4SChuck Lever 		__entry->client_id = task->tk_client->cl_clid;
19358f10ad4SChuck Lever 		__entry->pos = pos;
19458f10ad4SChuck Lever 		__entry->nents = mr->mr_nents;
19558f10ad4SChuck Lever 		__entry->handle = mr->mr_handle;
19658f10ad4SChuck Lever 		__entry->length = mr->mr_length;
19758f10ad4SChuck Lever 		__entry->offset = mr->mr_offset;
19858f10ad4SChuck Lever 		__entry->nsegs = nsegs;
19958f10ad4SChuck Lever 	),
20058f10ad4SChuck Lever 
201aba11831SChuck Lever 	TP_printk("task:%u@%u pos=%u %u@0x%016llx:0x%08x (%s)",
202aba11831SChuck Lever 		__entry->task_id, __entry->client_id,
20358f10ad4SChuck Lever 		__entry->pos, __entry->length,
20458f10ad4SChuck Lever 		(unsigned long long)__entry->offset, __entry->handle,
20558f10ad4SChuck Lever 		__entry->nents < __entry->nsegs ? "more" : "last"
20658f10ad4SChuck Lever 	)
20758f10ad4SChuck Lever );
20858f10ad4SChuck Lever 
20958f10ad4SChuck Lever #define DEFINE_RDCH_EVENT(name)						\
210aba11831SChuck Lever 		DEFINE_EVENT(xprtrdma_rdch_event, xprtrdma_chunk_##name,\
21158f10ad4SChuck Lever 				TP_PROTO(				\
21258f10ad4SChuck Lever 					const struct rpc_task *task,	\
21358f10ad4SChuck Lever 					unsigned int pos,		\
21458f10ad4SChuck Lever 					struct rpcrdma_mr *mr,		\
21558f10ad4SChuck Lever 					int nsegs			\
21658f10ad4SChuck Lever 				),					\
21758f10ad4SChuck Lever 				TP_ARGS(task, pos, mr, nsegs))
21858f10ad4SChuck Lever 
21958f10ad4SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_wrch_event,
22058f10ad4SChuck Lever 	TP_PROTO(
22158f10ad4SChuck Lever 		const struct rpc_task *task,
22258f10ad4SChuck Lever 		struct rpcrdma_mr *mr,
22358f10ad4SChuck Lever 		int nsegs
22458f10ad4SChuck Lever 	),
22558f10ad4SChuck Lever 
22658f10ad4SChuck Lever 	TP_ARGS(task, mr, nsegs),
22758f10ad4SChuck Lever 
22858f10ad4SChuck Lever 	TP_STRUCT__entry(
22958f10ad4SChuck Lever 		__field(unsigned int, task_id)
23058f10ad4SChuck Lever 		__field(unsigned int, client_id)
23158f10ad4SChuck Lever 		__field(int, nents)
23258f10ad4SChuck Lever 		__field(u32, handle)
23358f10ad4SChuck Lever 		__field(u32, length)
23458f10ad4SChuck Lever 		__field(u64, offset)
23558f10ad4SChuck Lever 		__field(int, nsegs)
23658f10ad4SChuck Lever 	),
23758f10ad4SChuck Lever 
23858f10ad4SChuck Lever 	TP_fast_assign(
23958f10ad4SChuck Lever 		__entry->task_id = task->tk_pid;
24058f10ad4SChuck Lever 		__entry->client_id = task->tk_client->cl_clid;
24158f10ad4SChuck Lever 		__entry->nents = mr->mr_nents;
24258f10ad4SChuck Lever 		__entry->handle = mr->mr_handle;
24358f10ad4SChuck Lever 		__entry->length = mr->mr_length;
24458f10ad4SChuck Lever 		__entry->offset = mr->mr_offset;
24558f10ad4SChuck Lever 		__entry->nsegs = nsegs;
24658f10ad4SChuck Lever 	),
24758f10ad4SChuck Lever 
248aba11831SChuck Lever 	TP_printk("task:%u@%u %u@0x%016llx:0x%08x (%s)",
249aba11831SChuck Lever 		__entry->task_id, __entry->client_id,
25058f10ad4SChuck Lever 		__entry->length, (unsigned long long)__entry->offset,
25158f10ad4SChuck Lever 		__entry->handle,
25258f10ad4SChuck Lever 		__entry->nents < __entry->nsegs ? "more" : "last"
25358f10ad4SChuck Lever 	)
25458f10ad4SChuck Lever );
25558f10ad4SChuck Lever 
25658f10ad4SChuck Lever #define DEFINE_WRCH_EVENT(name)						\
257aba11831SChuck Lever 		DEFINE_EVENT(xprtrdma_wrch_event, xprtrdma_chunk_##name,\
25858f10ad4SChuck Lever 				TP_PROTO(				\
25958f10ad4SChuck Lever 					const struct rpc_task *task,	\
26058f10ad4SChuck Lever 					struct rpcrdma_mr *mr,		\
26158f10ad4SChuck Lever 					int nsegs			\
26258f10ad4SChuck Lever 				),					\
26358f10ad4SChuck Lever 				TP_ARGS(task, mr, nsegs))
26458f10ad4SChuck Lever 
265aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_BIDIRECTIONAL);
266aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_TO_DEVICE);
267aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_FROM_DEVICE);
268aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_NONE);
269aba11831SChuck Lever 
270aba11831SChuck Lever #define xprtrdma_show_direction(x)					\
271aba11831SChuck Lever 		__print_symbolic(x,					\
272aba11831SChuck Lever 				{ DMA_BIDIRECTIONAL, "BIDIR" },		\
273aba11831SChuck Lever 				{ DMA_TO_DEVICE, "TO_DEVICE" },		\
274aba11831SChuck Lever 				{ DMA_FROM_DEVICE, "FROM_DEVICE" },	\
275aba11831SChuck Lever 				{ DMA_NONE, "NONE" })
276aba11831SChuck Lever 
2777703db97SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_mr_class,
2787703db97SChuck Lever 	TP_PROTO(
2797703db97SChuck Lever 		const struct rpcrdma_mr *mr
2807703db97SChuck Lever 	),
2817703db97SChuck Lever 
2827703db97SChuck Lever 	TP_ARGS(mr),
2837703db97SChuck Lever 
2847703db97SChuck Lever 	TP_STRUCT__entry(
2857703db97SChuck Lever 		__field(unsigned int, task_id)
2867703db97SChuck Lever 		__field(unsigned int, client_id)
2877703db97SChuck Lever 		__field(u32, mr_id)
2887703db97SChuck Lever 		__field(int, nents)
2897703db97SChuck Lever 		__field(u32, handle)
2907703db97SChuck Lever 		__field(u32, length)
2917703db97SChuck Lever 		__field(u64, offset)
2927703db97SChuck Lever 		__field(u32, dir)
2937703db97SChuck Lever 	),
2947703db97SChuck Lever 
2957703db97SChuck Lever 	TP_fast_assign(
2967703db97SChuck Lever 		const struct rpcrdma_req *req = mr->mr_req;
2977703db97SChuck Lever 		const struct rpc_task *task = req->rl_slot.rq_task;
2987703db97SChuck Lever 
2997703db97SChuck Lever 		__entry->task_id = task->tk_pid;
3007703db97SChuck Lever 		__entry->client_id = task->tk_client->cl_clid;
3017703db97SChuck Lever 		__entry->mr_id  = mr->frwr.fr_mr->res.id;
3027703db97SChuck Lever 		__entry->nents  = mr->mr_nents;
3037703db97SChuck Lever 		__entry->handle = mr->mr_handle;
3047703db97SChuck Lever 		__entry->length = mr->mr_length;
3057703db97SChuck Lever 		__entry->offset = mr->mr_offset;
3067703db97SChuck Lever 		__entry->dir    = mr->mr_dir;
3077703db97SChuck Lever 	),
3087703db97SChuck Lever 
3097703db97SChuck Lever 	TP_printk("task:%u@%u mr.id=%u nents=%d %u@0x%016llx:0x%08x (%s)",
3107703db97SChuck Lever 		__entry->task_id, __entry->client_id,
3117703db97SChuck Lever 		__entry->mr_id, __entry->nents, __entry->length,
3127703db97SChuck Lever 		(unsigned long long)__entry->offset, __entry->handle,
3137703db97SChuck Lever 		xprtrdma_show_direction(__entry->dir)
3147703db97SChuck Lever 	)
3157703db97SChuck Lever );
3167703db97SChuck Lever 
3177703db97SChuck Lever #define DEFINE_MR_EVENT(name)						\
3187703db97SChuck Lever 		DEFINE_EVENT(xprtrdma_mr_class,				\
3197703db97SChuck Lever 				xprtrdma_mr_##name,			\
3207703db97SChuck Lever 				TP_PROTO(				\
3217703db97SChuck Lever 					const struct rpcrdma_mr *mr	\
3227703db97SChuck Lever 				),					\
3237703db97SChuck Lever 				TP_ARGS(mr))
3247703db97SChuck Lever 
3257703db97SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_anonymous_mr_class,
3262937fedeSChuck Lever 	TP_PROTO(
3272937fedeSChuck Lever 		const struct rpcrdma_mr *mr
3282937fedeSChuck Lever 	),
3292937fedeSChuck Lever 
3302937fedeSChuck Lever 	TP_ARGS(mr),
3312937fedeSChuck Lever 
3322937fedeSChuck Lever 	TP_STRUCT__entry(
33362a89501SChuck Lever 		__field(u32, mr_id)
33462a89501SChuck Lever 		__field(int, nents)
3352937fedeSChuck Lever 		__field(u32, handle)
3362937fedeSChuck Lever 		__field(u32, length)
3372937fedeSChuck Lever 		__field(u64, offset)
338aba11831SChuck Lever 		__field(u32, dir)
3392937fedeSChuck Lever 	),
3402937fedeSChuck Lever 
3412937fedeSChuck Lever 	TP_fast_assign(
34262a89501SChuck Lever 		__entry->mr_id  = mr->frwr.fr_mr->res.id;
34362a89501SChuck Lever 		__entry->nents  = mr->mr_nents;
3442937fedeSChuck Lever 		__entry->handle = mr->mr_handle;
3452937fedeSChuck Lever 		__entry->length = mr->mr_length;
3462937fedeSChuck Lever 		__entry->offset = mr->mr_offset;
347aba11831SChuck Lever 		__entry->dir    = mr->mr_dir;
3482937fedeSChuck Lever 	),
3492937fedeSChuck Lever 
35062a89501SChuck Lever 	TP_printk("mr.id=%u nents=%d %u@0x%016llx:0x%08x (%s)",
35162a89501SChuck Lever 		__entry->mr_id, __entry->nents, __entry->length,
352aba11831SChuck Lever 		(unsigned long long)__entry->offset, __entry->handle,
353aba11831SChuck Lever 		xprtrdma_show_direction(__entry->dir)
3542937fedeSChuck Lever 	)
3552937fedeSChuck Lever );
3562937fedeSChuck Lever 
3577703db97SChuck Lever #define DEFINE_ANON_MR_EVENT(name)					\
3587703db97SChuck Lever 		DEFINE_EVENT(xprtrdma_anonymous_mr_class,		\
3597703db97SChuck Lever 				xprtrdma_mr_##name,			\
3602937fedeSChuck Lever 				TP_PROTO(				\
3612937fedeSChuck Lever 					const struct rpcrdma_mr *mr	\
3622937fedeSChuck Lever 				),					\
3632937fedeSChuck Lever 				TP_ARGS(mr))
3642937fedeSChuck Lever 
365d11e9346SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_callback_class,
366fc1eb807SChuck Lever 	TP_PROTO(
367d11e9346SChuck Lever 		const struct rpcrdma_xprt *r_xprt,
368fc1eb807SChuck Lever 		const struct rpc_rqst *rqst
369fc1eb807SChuck Lever 	),
370fc1eb807SChuck Lever 
371d11e9346SChuck Lever 	TP_ARGS(r_xprt, rqst),
372fc1eb807SChuck Lever 
373fc1eb807SChuck Lever 	TP_STRUCT__entry(
374fc1eb807SChuck Lever 		__field(u32, xid)
375d11e9346SChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
376d11e9346SChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
377fc1eb807SChuck Lever 	),
378fc1eb807SChuck Lever 
379fc1eb807SChuck Lever 	TP_fast_assign(
380fc1eb807SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
381d11e9346SChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
382d11e9346SChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
383fc1eb807SChuck Lever 	),
384fc1eb807SChuck Lever 
385d11e9346SChuck Lever 	TP_printk("peer=[%s]:%s xid=0x%08x",
386d11e9346SChuck Lever 		__get_str(addr), __get_str(port), __entry->xid
387fc1eb807SChuck Lever 	)
388fc1eb807SChuck Lever );
389fc1eb807SChuck Lever 
390d11e9346SChuck Lever #define DEFINE_CALLBACK_EVENT(name)					\
391d11e9346SChuck Lever 		DEFINE_EVENT(xprtrdma_callback_class,			\
392d11e9346SChuck Lever 				xprtrdma_cb_##name,			\
393fc1eb807SChuck Lever 				TP_PROTO(				\
394d11e9346SChuck Lever 					const struct rpcrdma_xprt *r_xprt, \
395fc1eb807SChuck Lever 					const struct rpc_rqst *rqst	\
396fc1eb807SChuck Lever 				),					\
397d11e9346SChuck Lever 				TP_ARGS(r_xprt, rqst))
398fc1eb807SChuck Lever 
399b4a7f91cSChuck Lever /**
400b4744e00SChuck Lever  ** Connection events
401b4744e00SChuck Lever  **/
402b4744e00SChuck Lever 
403f54c870dSChuck Lever TRACE_EVENT(xprtrdma_inline_thresh,
404f54c870dSChuck Lever 	TP_PROTO(
405745b734cSChuck Lever 		const struct rpcrdma_ep *ep
406f54c870dSChuck Lever 	),
407f54c870dSChuck Lever 
408745b734cSChuck Lever 	TP_ARGS(ep),
409f54c870dSChuck Lever 
410f54c870dSChuck Lever 	TP_STRUCT__entry(
411f54c870dSChuck Lever 		__field(unsigned int, inline_send)
412f54c870dSChuck Lever 		__field(unsigned int, inline_recv)
413f54c870dSChuck Lever 		__field(unsigned int, max_send)
414f54c870dSChuck Lever 		__field(unsigned int, max_recv)
415745b734cSChuck Lever 		__array(unsigned char, srcaddr, sizeof(struct sockaddr_in6))
416745b734cSChuck Lever 		__array(unsigned char, dstaddr, sizeof(struct sockaddr_in6))
417f54c870dSChuck Lever 	),
418f54c870dSChuck Lever 
419f54c870dSChuck Lever 	TP_fast_assign(
420745b734cSChuck Lever 		const struct rdma_cm_id *id = ep->re_id;
421f54c870dSChuck Lever 
42293aa8e0aSChuck Lever 		__entry->inline_send = ep->re_inline_send;
42393aa8e0aSChuck Lever 		__entry->inline_recv = ep->re_inline_recv;
42493aa8e0aSChuck Lever 		__entry->max_send = ep->re_max_inline_send;
42593aa8e0aSChuck Lever 		__entry->max_recv = ep->re_max_inline_recv;
426745b734cSChuck Lever 		memcpy(__entry->srcaddr, &id->route.addr.src_addr,
427745b734cSChuck Lever 		       sizeof(struct sockaddr_in6));
428745b734cSChuck Lever 		memcpy(__entry->dstaddr, &id->route.addr.dst_addr,
429745b734cSChuck Lever 		       sizeof(struct sockaddr_in6));
430f54c870dSChuck Lever 	),
431f54c870dSChuck Lever 
432745b734cSChuck Lever 	TP_printk("%pISpc -> %pISpc neg send/recv=%u/%u, calc send/recv=%u/%u",
433745b734cSChuck Lever 		__entry->srcaddr, __entry->dstaddr,
434f54c870dSChuck Lever 		__entry->inline_send, __entry->inline_recv,
435f54c870dSChuck Lever 		__entry->max_send, __entry->max_recv
436f54c870dSChuck Lever 	)
437f54c870dSChuck Lever );
438f54c870dSChuck Lever 
4397b020f17SChuck Lever DEFINE_CONN_EVENT(connect);
4407b020f17SChuck Lever DEFINE_CONN_EVENT(disconnect);
4417b020f17SChuck Lever 
4427b020f17SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_op_inject_dsc);
4437b020f17SChuck Lever 
4447b020f17SChuck Lever TRACE_EVENT(xprtrdma_op_connect,
445b4744e00SChuck Lever 	TP_PROTO(
446b4744e00SChuck Lever 		const struct rpcrdma_xprt *r_xprt,
4477b020f17SChuck Lever 		unsigned long delay
448b4744e00SChuck Lever 	),
449b4744e00SChuck Lever 
4507b020f17SChuck Lever 	TP_ARGS(r_xprt, delay),
451b4744e00SChuck Lever 
452b4744e00SChuck Lever 	TP_STRUCT__entry(
453b4744e00SChuck Lever 		__field(const void *, r_xprt)
4547b020f17SChuck Lever 		__field(unsigned long, delay)
455b4744e00SChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
456b4744e00SChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
457b4744e00SChuck Lever 	),
458b4744e00SChuck Lever 
459b4744e00SChuck Lever 	TP_fast_assign(
460b4744e00SChuck Lever 		__entry->r_xprt = r_xprt;
4617b020f17SChuck Lever 		__entry->delay = delay;
462b4744e00SChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
463b4744e00SChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
464b4744e00SChuck Lever 	),
465b4744e00SChuck Lever 
4667b020f17SChuck Lever 	TP_printk("peer=[%s]:%s r_xprt=%p delay=%lu",
4677b020f17SChuck Lever 		__get_str(addr), __get_str(port), __entry->r_xprt,
4687b020f17SChuck Lever 		__entry->delay
469b4744e00SChuck Lever 	)
470b4744e00SChuck Lever );
471b4744e00SChuck Lever 
472b4744e00SChuck Lever 
473675dd90aSChuck Lever TRACE_EVENT(xprtrdma_op_set_cto,
474675dd90aSChuck Lever 	TP_PROTO(
475675dd90aSChuck Lever 		const struct rpcrdma_xprt *r_xprt,
476675dd90aSChuck Lever 		unsigned long connect,
477675dd90aSChuck Lever 		unsigned long reconnect
478675dd90aSChuck Lever 	),
479675dd90aSChuck Lever 
480675dd90aSChuck Lever 	TP_ARGS(r_xprt, connect, reconnect),
481675dd90aSChuck Lever 
482675dd90aSChuck Lever 	TP_STRUCT__entry(
483675dd90aSChuck Lever 		__field(const void *, r_xprt)
484675dd90aSChuck Lever 		__field(unsigned long, connect)
485675dd90aSChuck Lever 		__field(unsigned long, reconnect)
486675dd90aSChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
487675dd90aSChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
488675dd90aSChuck Lever 	),
489675dd90aSChuck Lever 
490675dd90aSChuck Lever 	TP_fast_assign(
491675dd90aSChuck Lever 		__entry->r_xprt = r_xprt;
492675dd90aSChuck Lever 		__entry->connect = connect;
493675dd90aSChuck Lever 		__entry->reconnect = reconnect;
494675dd90aSChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
495675dd90aSChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
496675dd90aSChuck Lever 	),
497675dd90aSChuck Lever 
498675dd90aSChuck Lever 	TP_printk("peer=[%s]:%s r_xprt=%p: connect=%lu reconnect=%lu",
499675dd90aSChuck Lever 		__get_str(addr), __get_str(port), __entry->r_xprt,
500675dd90aSChuck Lever 		__entry->connect / HZ, __entry->reconnect / HZ
501675dd90aSChuck Lever 	)
502675dd90aSChuck Lever );
503675dd90aSChuck Lever 
504f9521d53SChuck Lever TRACE_EVENT(xprtrdma_qp_event,
505643cf323SChuck Lever 	TP_PROTO(
506745b734cSChuck Lever 		const struct rpcrdma_ep *ep,
507643cf323SChuck Lever 		const struct ib_event *event
508643cf323SChuck Lever 	),
509643cf323SChuck Lever 
510745b734cSChuck Lever 	TP_ARGS(ep, event),
511643cf323SChuck Lever 
512643cf323SChuck Lever 	TP_STRUCT__entry(
513745b734cSChuck Lever 		__field(unsigned long, event)
514643cf323SChuck Lever 		__string(name, event->device->name)
515745b734cSChuck Lever 		__array(unsigned char, srcaddr, sizeof(struct sockaddr_in6))
516745b734cSChuck Lever 		__array(unsigned char, dstaddr, sizeof(struct sockaddr_in6))
517643cf323SChuck Lever 	),
518643cf323SChuck Lever 
519643cf323SChuck Lever 	TP_fast_assign(
520745b734cSChuck Lever 		const struct rdma_cm_id *id = ep->re_id;
521745b734cSChuck Lever 
522643cf323SChuck Lever 		__entry->event = event->event;
523643cf323SChuck Lever 		__assign_str(name, event->device->name);
524745b734cSChuck Lever 		memcpy(__entry->srcaddr, &id->route.addr.src_addr,
525745b734cSChuck Lever 		       sizeof(struct sockaddr_in6));
526745b734cSChuck Lever 		memcpy(__entry->dstaddr, &id->route.addr.dst_addr,
527745b734cSChuck Lever 		       sizeof(struct sockaddr_in6));
528643cf323SChuck Lever 	),
529643cf323SChuck Lever 
530745b734cSChuck Lever 	TP_printk("%pISpc -> %pISpc device=%s %s (%lu)",
531745b734cSChuck Lever 		__entry->srcaddr, __entry->dstaddr, __get_str(name),
532745b734cSChuck Lever 		rdma_show_ib_event(__entry->event), __entry->event
533643cf323SChuck Lever 	)
534643cf323SChuck Lever );
535643cf323SChuck Lever 
536b4744e00SChuck Lever /**
537ab03eff5SChuck Lever  ** Call events
538ab03eff5SChuck Lever  **/
539ab03eff5SChuck Lever 
5401c443effSChuck Lever TRACE_EVENT(xprtrdma_createmrs,
5411c443effSChuck Lever 	TP_PROTO(
5421c443effSChuck Lever 		const struct rpcrdma_xprt *r_xprt,
5431c443effSChuck Lever 		unsigned int count
5441c443effSChuck Lever 	),
5451c443effSChuck Lever 
5461c443effSChuck Lever 	TP_ARGS(r_xprt, count),
5471c443effSChuck Lever 
5481c443effSChuck Lever 	TP_STRUCT__entry(
5491c443effSChuck Lever 		__field(const void *, r_xprt)
5506dc6ec9eSChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
5516dc6ec9eSChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
5521c443effSChuck Lever 		__field(unsigned int, count)
5531c443effSChuck Lever 	),
5541c443effSChuck Lever 
5551c443effSChuck Lever 	TP_fast_assign(
5561c443effSChuck Lever 		__entry->r_xprt = r_xprt;
5571c443effSChuck Lever 		__entry->count = count;
5586dc6ec9eSChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
5596dc6ec9eSChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
5601c443effSChuck Lever 	),
5611c443effSChuck Lever 
5626dc6ec9eSChuck Lever 	TP_printk("peer=[%s]:%s r_xprt=%p: created %u MRs",
5636dc6ec9eSChuck Lever 		__get_str(addr), __get_str(port), __entry->r_xprt,
5646dc6ec9eSChuck Lever 		__entry->count
5656dc6ec9eSChuck Lever 	)
5666dc6ec9eSChuck Lever );
5676dc6ec9eSChuck Lever 
5680307cdecSChuck Lever TRACE_EVENT(xprtrdma_nomrs_err,
5693b39f52aSChuck Lever 	TP_PROTO(
5700307cdecSChuck Lever 		const struct rpcrdma_xprt *r_xprt,
5713b39f52aSChuck Lever 		const struct rpcrdma_req *req
5723b39f52aSChuck Lever 	),
5733b39f52aSChuck Lever 
5740307cdecSChuck Lever 	TP_ARGS(r_xprt, req),
5753b39f52aSChuck Lever 
5763b39f52aSChuck Lever 	TP_STRUCT__entry(
5773b39f52aSChuck Lever 		__field(unsigned int, task_id)
5783b39f52aSChuck Lever 		__field(unsigned int, client_id)
5790307cdecSChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
5800307cdecSChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
5813b39f52aSChuck Lever 	),
5823b39f52aSChuck Lever 
5833b39f52aSChuck Lever 	TP_fast_assign(
5843b39f52aSChuck Lever 		const struct rpc_rqst *rqst = &req->rl_slot;
5853b39f52aSChuck Lever 
5863b39f52aSChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
5873b39f52aSChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
5880307cdecSChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
5890307cdecSChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
5903b39f52aSChuck Lever 	),
5913b39f52aSChuck Lever 
5920307cdecSChuck Lever 	TP_printk("peer=[%s]:%s task:%u@%u",
5930307cdecSChuck Lever 		__get_str(addr), __get_str(port),
5940307cdecSChuck Lever 		__entry->task_id, __entry->client_id
5953b39f52aSChuck Lever 	)
5963b39f52aSChuck Lever );
5971c443effSChuck Lever 
598aba11831SChuck Lever DEFINE_RDCH_EVENT(read);
599aba11831SChuck Lever DEFINE_WRCH_EVENT(write);
600aba11831SChuck Lever DEFINE_WRCH_EVENT(reply);
60158f10ad4SChuck Lever 
602ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch);
603614f3c96SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch_pullup);
604614f3c96SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch_mapped);
605ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_readch);
606ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_areadch);
607ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_writech);
608ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_replych);
609ab03eff5SChuck Lever 
610ab03eff5SChuck Lever #define xprtrdma_show_chunktype(x)					\
611ab03eff5SChuck Lever 		__print_symbolic(x,					\
612ab03eff5SChuck Lever 				{ rpcrdma_noch, "inline" },		\
613614f3c96SChuck Lever 				{ rpcrdma_noch_pullup, "pullup" },	\
614614f3c96SChuck Lever 				{ rpcrdma_noch_mapped, "mapped" },	\
615ab03eff5SChuck Lever 				{ rpcrdma_readch, "read list" },	\
616ab03eff5SChuck Lever 				{ rpcrdma_areadch, "*read list" },	\
617ab03eff5SChuck Lever 				{ rpcrdma_writech, "write list" },	\
618ab03eff5SChuck Lever 				{ rpcrdma_replych, "reply chunk" })
619ab03eff5SChuck Lever 
620ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_marshal,
621ab03eff5SChuck Lever 	TP_PROTO(
6221310051cSChuck Lever 		const struct rpcrdma_req *req,
623ab03eff5SChuck Lever 		unsigned int rtype,
624ab03eff5SChuck Lever 		unsigned int wtype
625ab03eff5SChuck Lever 	),
626ab03eff5SChuck Lever 
6271310051cSChuck Lever 	TP_ARGS(req, rtype, wtype),
628ab03eff5SChuck Lever 
629ab03eff5SChuck Lever 	TP_STRUCT__entry(
630ab03eff5SChuck Lever 		__field(unsigned int, task_id)
631ab03eff5SChuck Lever 		__field(unsigned int, client_id)
632ab03eff5SChuck Lever 		__field(u32, xid)
633ab03eff5SChuck Lever 		__field(unsigned int, hdrlen)
634ab03eff5SChuck Lever 		__field(unsigned int, headlen)
635ab03eff5SChuck Lever 		__field(unsigned int, pagelen)
636ab03eff5SChuck Lever 		__field(unsigned int, taillen)
637ab03eff5SChuck Lever 		__field(unsigned int, rtype)
638ab03eff5SChuck Lever 		__field(unsigned int, wtype)
639ab03eff5SChuck Lever 	),
640ab03eff5SChuck Lever 
641ab03eff5SChuck Lever 	TP_fast_assign(
6421310051cSChuck Lever 		const struct rpc_rqst *rqst = &req->rl_slot;
6431310051cSChuck Lever 
644ab03eff5SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
645ab03eff5SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
646ab03eff5SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
6471310051cSChuck Lever 		__entry->hdrlen = req->rl_hdrbuf.len;
648ab03eff5SChuck Lever 		__entry->headlen = rqst->rq_snd_buf.head[0].iov_len;
649ab03eff5SChuck Lever 		__entry->pagelen = rqst->rq_snd_buf.page_len;
650ab03eff5SChuck Lever 		__entry->taillen = rqst->rq_snd_buf.tail[0].iov_len;
651ab03eff5SChuck Lever 		__entry->rtype = rtype;
652ab03eff5SChuck Lever 		__entry->wtype = wtype;
653ab03eff5SChuck Lever 	),
654ab03eff5SChuck Lever 
655ab03eff5SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x: hdr=%u xdr=%u/%u/%u %s/%s",
656ab03eff5SChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
657ab03eff5SChuck Lever 		__entry->hdrlen,
658ab03eff5SChuck Lever 		__entry->headlen, __entry->pagelen, __entry->taillen,
659ab03eff5SChuck Lever 		xprtrdma_show_chunktype(__entry->rtype),
660ab03eff5SChuck Lever 		xprtrdma_show_chunktype(__entry->wtype)
661ab03eff5SChuck Lever 	)
662ab03eff5SChuck Lever );
663ab03eff5SChuck Lever 
66417e4c443SChuck Lever TRACE_EVENT(xprtrdma_marshal_failed,
66517e4c443SChuck Lever 	TP_PROTO(const struct rpc_rqst *rqst,
66617e4c443SChuck Lever 		 int ret
66717e4c443SChuck Lever 	),
66817e4c443SChuck Lever 
66917e4c443SChuck Lever 	TP_ARGS(rqst, ret),
67017e4c443SChuck Lever 
67117e4c443SChuck Lever 	TP_STRUCT__entry(
67217e4c443SChuck Lever 		__field(unsigned int, task_id)
67317e4c443SChuck Lever 		__field(unsigned int, client_id)
67417e4c443SChuck Lever 		__field(u32, xid)
67517e4c443SChuck Lever 		__field(int, ret)
67617e4c443SChuck Lever 	),
67717e4c443SChuck Lever 
67817e4c443SChuck Lever 	TP_fast_assign(
67917e4c443SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
68017e4c443SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
68117e4c443SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
68217e4c443SChuck Lever 		__entry->ret = ret;
68317e4c443SChuck Lever 	),
68417e4c443SChuck Lever 
68517e4c443SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x: ret=%d",
68617e4c443SChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
68717e4c443SChuck Lever 		__entry->ret
68817e4c443SChuck Lever 	)
68917e4c443SChuck Lever );
69017e4c443SChuck Lever 
69105eb06d8SChuck Lever TRACE_EVENT(xprtrdma_prepsend_failed,
69205eb06d8SChuck Lever 	TP_PROTO(const struct rpc_rqst *rqst,
69305eb06d8SChuck Lever 		 int ret
69405eb06d8SChuck Lever 	),
69505eb06d8SChuck Lever 
69605eb06d8SChuck Lever 	TP_ARGS(rqst, ret),
69705eb06d8SChuck Lever 
69805eb06d8SChuck Lever 	TP_STRUCT__entry(
69905eb06d8SChuck Lever 		__field(unsigned int, task_id)
70005eb06d8SChuck Lever 		__field(unsigned int, client_id)
70105eb06d8SChuck Lever 		__field(u32, xid)
70205eb06d8SChuck Lever 		__field(int, ret)
70305eb06d8SChuck Lever 	),
70405eb06d8SChuck Lever 
70505eb06d8SChuck Lever 	TP_fast_assign(
70605eb06d8SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
70705eb06d8SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
70805eb06d8SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
70905eb06d8SChuck Lever 		__entry->ret = ret;
71005eb06d8SChuck Lever 	),
71105eb06d8SChuck Lever 
71205eb06d8SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x: ret=%d",
71305eb06d8SChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
71405eb06d8SChuck Lever 		__entry->ret
71505eb06d8SChuck Lever 	)
71605eb06d8SChuck Lever );
71705eb06d8SChuck Lever 
718ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_post_send,
719ab03eff5SChuck Lever 	TP_PROTO(
720bdb2ce82SChuck Lever 		const struct rpcrdma_req *req
721ab03eff5SChuck Lever 	),
722ab03eff5SChuck Lever 
723bdb2ce82SChuck Lever 	TP_ARGS(req),
724ab03eff5SChuck Lever 
725ab03eff5SChuck Lever 	TP_STRUCT__entry(
726b2e7467fSChuck Lever 		__field(u32, cq_id)
727b2e7467fSChuck Lever 		__field(int, completion_id)
7280c77668dSChuck Lever 		__field(unsigned int, task_id)
7290c77668dSChuck Lever 		__field(unsigned int, client_id)
730ab03eff5SChuck Lever 		__field(int, num_sge)
731470443e0SChuck Lever 		__field(int, signaled)
732ab03eff5SChuck Lever 	),
733ab03eff5SChuck Lever 
734ab03eff5SChuck Lever 	TP_fast_assign(
7350c77668dSChuck Lever 		const struct rpc_rqst *rqst = &req->rl_slot;
736b2e7467fSChuck Lever 		const struct rpcrdma_sendctx *sc = req->rl_sendctx;
7370c77668dSChuck Lever 
738b2e7467fSChuck Lever 		__entry->cq_id = sc->sc_cid.ci_queue_id;
739b2e7467fSChuck Lever 		__entry->completion_id = sc->sc_cid.ci_completion_id;
7400c77668dSChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
74110694ac9SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client ?
74210694ac9SChuck Lever 				     rqst->rq_task->tk_client->cl_clid : -1;
743dc15c3d5SChuck Lever 		__entry->num_sge = req->rl_wr.num_sge;
744dc15c3d5SChuck Lever 		__entry->signaled = req->rl_wr.send_flags & IB_SEND_SIGNALED;
745ab03eff5SChuck Lever 	),
746ab03eff5SChuck Lever 
747b2e7467fSChuck Lever 	TP_printk("task:%u@%u cq.id=%u cid=%d (%d SGE%s) %s",
7480c77668dSChuck Lever 		__entry->task_id, __entry->client_id,
749b2e7467fSChuck Lever 		__entry->cq_id, __entry->completion_id,
750b2e7467fSChuck Lever 		__entry->num_sge, (__entry->num_sge == 1 ? "" : "s"),
751bdb2ce82SChuck Lever 		(__entry->signaled ? "signaled" : "")
752ab03eff5SChuck Lever 	)
753ab03eff5SChuck Lever );
754ab03eff5SChuck Lever 
755b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_post_recv,
756b4a7f91cSChuck Lever 	TP_PROTO(
7572dfdcd88SChuck Lever 		const struct rpcrdma_rep *rep
758b4a7f91cSChuck Lever 	),
759b4a7f91cSChuck Lever 
7602dfdcd88SChuck Lever 	TP_ARGS(rep),
761b4a7f91cSChuck Lever 
762b4a7f91cSChuck Lever 	TP_STRUCT__entry(
763af5865d2SChuck Lever 		__field(u32, cq_id)
764af5865d2SChuck Lever 		__field(int, completion_id)
765b4a7f91cSChuck Lever 	),
766b4a7f91cSChuck Lever 
767b4a7f91cSChuck Lever 	TP_fast_assign(
768af5865d2SChuck Lever 		__entry->cq_id = rep->rr_cid.ci_queue_id;
769af5865d2SChuck Lever 		__entry->completion_id = rep->rr_cid.ci_completion_id;
770b4a7f91cSChuck Lever 	),
771b4a7f91cSChuck Lever 
772af5865d2SChuck Lever 	TP_printk("cq.id=%d cid=%d",
773af5865d2SChuck Lever 		__entry->cq_id, __entry->completion_id
774b4a7f91cSChuck Lever 	)
775b4a7f91cSChuck Lever );
776b4a7f91cSChuck Lever 
7777c8d9e7cSChuck Lever TRACE_EVENT(xprtrdma_post_recvs,
7787c8d9e7cSChuck Lever 	TP_PROTO(
7797c8d9e7cSChuck Lever 		const struct rpcrdma_xprt *r_xprt,
7807c8d9e7cSChuck Lever 		unsigned int count,
7817c8d9e7cSChuck Lever 		int status
7827c8d9e7cSChuck Lever 	),
7837c8d9e7cSChuck Lever 
7847c8d9e7cSChuck Lever 	TP_ARGS(r_xprt, count, status),
7857c8d9e7cSChuck Lever 
7867c8d9e7cSChuck Lever 	TP_STRUCT__entry(
7877c8d9e7cSChuck Lever 		__field(const void *, r_xprt)
7887c8d9e7cSChuck Lever 		__field(unsigned int, count)
7897c8d9e7cSChuck Lever 		__field(int, status)
7907c8d9e7cSChuck Lever 		__field(int, posted)
7917c8d9e7cSChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
7927c8d9e7cSChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
7937c8d9e7cSChuck Lever 	),
7947c8d9e7cSChuck Lever 
7957c8d9e7cSChuck Lever 	TP_fast_assign(
7967c8d9e7cSChuck Lever 		__entry->r_xprt = r_xprt;
7977c8d9e7cSChuck Lever 		__entry->count = count;
7987c8d9e7cSChuck Lever 		__entry->status = status;
799e28ce900SChuck Lever 		__entry->posted = r_xprt->rx_ep->re_receive_count;
8007c8d9e7cSChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
8017c8d9e7cSChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
8027c8d9e7cSChuck Lever 	),
8037c8d9e7cSChuck Lever 
8047c8d9e7cSChuck Lever 	TP_printk("peer=[%s]:%s r_xprt=%p: %u new recvs, %d active (rc %d)",
8057c8d9e7cSChuck Lever 		__get_str(addr), __get_str(port), __entry->r_xprt,
8067c8d9e7cSChuck Lever 		__entry->count, __entry->posted, __entry->status
807ab03eff5SChuck Lever 	)
808ab03eff5SChuck Lever );
809ab03eff5SChuck Lever 
81036a55edfSChuck Lever TRACE_EVENT(xprtrdma_post_linv_err,
8114b93dab3SChuck Lever 	TP_PROTO(
8124b93dab3SChuck Lever 		const struct rpcrdma_req *req,
8134b93dab3SChuck Lever 		int status
8144b93dab3SChuck Lever 	),
8154b93dab3SChuck Lever 
8164b93dab3SChuck Lever 	TP_ARGS(req, status),
8174b93dab3SChuck Lever 
8184b93dab3SChuck Lever 	TP_STRUCT__entry(
81936a55edfSChuck Lever 		__field(unsigned int, task_id)
82036a55edfSChuck Lever 		__field(unsigned int, client_id)
8214b93dab3SChuck Lever 		__field(int, status)
8224b93dab3SChuck Lever 	),
8234b93dab3SChuck Lever 
8244b93dab3SChuck Lever 	TP_fast_assign(
82536a55edfSChuck Lever 		const struct rpc_task *task = req->rl_slot.rq_task;
82636a55edfSChuck Lever 
82736a55edfSChuck Lever 		__entry->task_id = task->tk_pid;
82836a55edfSChuck Lever 		__entry->client_id = task->tk_client->cl_clid;
8294b93dab3SChuck Lever 		__entry->status = status;
8304b93dab3SChuck Lever 	),
8314b93dab3SChuck Lever 
83236a55edfSChuck Lever 	TP_printk("task:%u@%u status=%d",
83336a55edfSChuck Lever 		__entry->task_id, __entry->client_id, __entry->status
8344b93dab3SChuck Lever 	)
8354b93dab3SChuck Lever );
8364b93dab3SChuck Lever 
837ab03eff5SChuck Lever /**
838ab03eff5SChuck Lever  ** Completion events
839ab03eff5SChuck Lever  **/
840ab03eff5SChuck Lever 
841af5865d2SChuck Lever DEFINE_COMPLETION_EVENT(xprtrdma_wc_receive);
842b2e7467fSChuck Lever DEFINE_COMPLETION_EVENT(xprtrdma_wc_send);
8435ecef9c8SChuck Lever DEFINE_COMPLETION_EVENT(xprtrdma_wc_fastreg);
8445ecef9c8SChuck Lever DEFINE_COMPLETION_EVENT(xprtrdma_wc_li);
8455ecef9c8SChuck Lever DEFINE_COMPLETION_EVENT(xprtrdma_wc_li_wake);
8465ecef9c8SChuck Lever DEFINE_COMPLETION_EVENT(xprtrdma_wc_li_done);
8472937fedeSChuck Lever 
84853b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_alloc,
84953b2c1cbSChuck Lever 	TP_PROTO(
85053b2c1cbSChuck Lever 		const struct rpcrdma_mr *mr,
85153b2c1cbSChuck Lever 		int rc
85253b2c1cbSChuck Lever 	),
85353b2c1cbSChuck Lever 
85453b2c1cbSChuck Lever 	TP_ARGS(mr, rc),
85553b2c1cbSChuck Lever 
85653b2c1cbSChuck Lever 	TP_STRUCT__entry(
85762a89501SChuck Lever 		__field(u32, mr_id)
85853b2c1cbSChuck Lever 		__field(int, rc)
85953b2c1cbSChuck Lever 	),
86053b2c1cbSChuck Lever 
86153b2c1cbSChuck Lever 	TP_fast_assign(
86262a89501SChuck Lever 		__entry->mr_id = mr->frwr.fr_mr->res.id;
86353b2c1cbSChuck Lever 		__entry->rc = rc;
86453b2c1cbSChuck Lever 	),
86553b2c1cbSChuck Lever 
86662a89501SChuck Lever 	TP_printk("mr.id=%u: rc=%d",
86762a89501SChuck Lever 		__entry->mr_id, __entry->rc
86853b2c1cbSChuck Lever 	)
86953b2c1cbSChuck Lever );
87053b2c1cbSChuck Lever 
87153b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_dereg,
87253b2c1cbSChuck Lever 	TP_PROTO(
87353b2c1cbSChuck Lever 		const struct rpcrdma_mr *mr,
87453b2c1cbSChuck Lever 		int rc
87553b2c1cbSChuck Lever 	),
87653b2c1cbSChuck Lever 
87753b2c1cbSChuck Lever 	TP_ARGS(mr, rc),
87853b2c1cbSChuck Lever 
87953b2c1cbSChuck Lever 	TP_STRUCT__entry(
88062a89501SChuck Lever 		__field(u32, mr_id)
88162a89501SChuck Lever 		__field(int, nents)
88253b2c1cbSChuck Lever 		__field(u32, handle)
88353b2c1cbSChuck Lever 		__field(u32, length)
88453b2c1cbSChuck Lever 		__field(u64, offset)
88553b2c1cbSChuck Lever 		__field(u32, dir)
88653b2c1cbSChuck Lever 		__field(int, rc)
88753b2c1cbSChuck Lever 	),
88853b2c1cbSChuck Lever 
88953b2c1cbSChuck Lever 	TP_fast_assign(
89062a89501SChuck Lever 		__entry->mr_id  = mr->frwr.fr_mr->res.id;
89162a89501SChuck Lever 		__entry->nents  = mr->mr_nents;
89253b2c1cbSChuck Lever 		__entry->handle = mr->mr_handle;
89353b2c1cbSChuck Lever 		__entry->length = mr->mr_length;
89453b2c1cbSChuck Lever 		__entry->offset = mr->mr_offset;
89553b2c1cbSChuck Lever 		__entry->dir    = mr->mr_dir;
89653b2c1cbSChuck Lever 		__entry->rc	= rc;
89753b2c1cbSChuck Lever 	),
89853b2c1cbSChuck Lever 
89962a89501SChuck Lever 	TP_printk("mr.id=%u nents=%d %u@0x%016llx:0x%08x (%s): rc=%d",
90062a89501SChuck Lever 		__entry->mr_id, __entry->nents, __entry->length,
90153b2c1cbSChuck Lever 		(unsigned long long)__entry->offset, __entry->handle,
90253b2c1cbSChuck Lever 		xprtrdma_show_direction(__entry->dir),
90353b2c1cbSChuck Lever 		__entry->rc
90453b2c1cbSChuck Lever 	)
90553b2c1cbSChuck Lever );
90653b2c1cbSChuck Lever 
90753b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_sgerr,
90853b2c1cbSChuck Lever 	TP_PROTO(
90953b2c1cbSChuck Lever 		const struct rpcrdma_mr *mr,
91053b2c1cbSChuck Lever 		int sg_nents
91153b2c1cbSChuck Lever 	),
91253b2c1cbSChuck Lever 
91353b2c1cbSChuck Lever 	TP_ARGS(mr, sg_nents),
91453b2c1cbSChuck Lever 
91553b2c1cbSChuck Lever 	TP_STRUCT__entry(
91662a89501SChuck Lever 		__field(u32, mr_id)
91753b2c1cbSChuck Lever 		__field(u64, addr)
91853b2c1cbSChuck Lever 		__field(u32, dir)
91953b2c1cbSChuck Lever 		__field(int, nents)
92053b2c1cbSChuck Lever 	),
92153b2c1cbSChuck Lever 
92253b2c1cbSChuck Lever 	TP_fast_assign(
92362a89501SChuck Lever 		__entry->mr_id = mr->frwr.fr_mr->res.id;
92453b2c1cbSChuck Lever 		__entry->addr = mr->mr_sg->dma_address;
92553b2c1cbSChuck Lever 		__entry->dir = mr->mr_dir;
92653b2c1cbSChuck Lever 		__entry->nents = sg_nents;
92753b2c1cbSChuck Lever 	),
92853b2c1cbSChuck Lever 
92962a89501SChuck Lever 	TP_printk("mr.id=%u DMA addr=0x%llx (%s) sg_nents=%d",
93062a89501SChuck Lever 		__entry->mr_id, __entry->addr,
93153b2c1cbSChuck Lever 		xprtrdma_show_direction(__entry->dir),
93253b2c1cbSChuck Lever 		__entry->nents
93353b2c1cbSChuck Lever 	)
93453b2c1cbSChuck Lever );
93553b2c1cbSChuck Lever 
93653b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_maperr,
93753b2c1cbSChuck Lever 	TP_PROTO(
93853b2c1cbSChuck Lever 		const struct rpcrdma_mr *mr,
93953b2c1cbSChuck Lever 		int num_mapped
94053b2c1cbSChuck Lever 	),
94153b2c1cbSChuck Lever 
94253b2c1cbSChuck Lever 	TP_ARGS(mr, num_mapped),
94353b2c1cbSChuck Lever 
94453b2c1cbSChuck Lever 	TP_STRUCT__entry(
94562a89501SChuck Lever 		__field(u32, mr_id)
94653b2c1cbSChuck Lever 		__field(u64, addr)
94753b2c1cbSChuck Lever 		__field(u32, dir)
94853b2c1cbSChuck Lever 		__field(int, num_mapped)
94953b2c1cbSChuck Lever 		__field(int, nents)
95053b2c1cbSChuck Lever 	),
95153b2c1cbSChuck Lever 
95253b2c1cbSChuck Lever 	TP_fast_assign(
95362a89501SChuck Lever 		__entry->mr_id = mr->frwr.fr_mr->res.id;
95453b2c1cbSChuck Lever 		__entry->addr = mr->mr_sg->dma_address;
95553b2c1cbSChuck Lever 		__entry->dir = mr->mr_dir;
95653b2c1cbSChuck Lever 		__entry->num_mapped = num_mapped;
95753b2c1cbSChuck Lever 		__entry->nents = mr->mr_nents;
95853b2c1cbSChuck Lever 	),
95953b2c1cbSChuck Lever 
96062a89501SChuck Lever 	TP_printk("mr.id=%u DMA addr=0x%llx (%s) nents=%d of %d",
96162a89501SChuck Lever 		__entry->mr_id, __entry->addr,
96253b2c1cbSChuck Lever 		xprtrdma_show_direction(__entry->dir),
96353b2c1cbSChuck Lever 		__entry->num_mapped, __entry->nents
96453b2c1cbSChuck Lever 	)
96553b2c1cbSChuck Lever );
96653b2c1cbSChuck Lever 
967d379eaa8SChuck Lever DEFINE_MR_EVENT(localinv);
968d379eaa8SChuck Lever DEFINE_MR_EVENT(map);
9697703db97SChuck Lever 
9707703db97SChuck Lever DEFINE_ANON_MR_EVENT(unmap);
9717703db97SChuck Lever DEFINE_ANON_MR_EVENT(recycle);
97258f10ad4SChuck Lever 
97353b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_dma_maperr,
97453b2c1cbSChuck Lever 	TP_PROTO(
97553b2c1cbSChuck Lever 		u64 addr
97653b2c1cbSChuck Lever 	),
97753b2c1cbSChuck Lever 
97853b2c1cbSChuck Lever 	TP_ARGS(addr),
97953b2c1cbSChuck Lever 
98053b2c1cbSChuck Lever 	TP_STRUCT__entry(
98153b2c1cbSChuck Lever 		__field(u64, addr)
98253b2c1cbSChuck Lever 	),
98353b2c1cbSChuck Lever 
98453b2c1cbSChuck Lever 	TP_fast_assign(
98553b2c1cbSChuck Lever 		__entry->addr = addr;
98653b2c1cbSChuck Lever 	),
98753b2c1cbSChuck Lever 
98853b2c1cbSChuck Lever 	TP_printk("dma addr=0x%llx\n", __entry->addr)
98953b2c1cbSChuck Lever );
99053b2c1cbSChuck Lever 
991b4a7f91cSChuck Lever /**
992b4a7f91cSChuck Lever  ** Reply events
993b4a7f91cSChuck Lever  **/
994b4a7f91cSChuck Lever 
995b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_reply,
996b4a7f91cSChuck Lever 	TP_PROTO(
997b4a7f91cSChuck Lever 		const struct rpc_task *task,
998b4a7f91cSChuck Lever 		const struct rpcrdma_rep *rep,
999b4a7f91cSChuck Lever 		unsigned int credits
1000b4a7f91cSChuck Lever 	),
1001b4a7f91cSChuck Lever 
100203ffd924SChuck Lever 	TP_ARGS(task, rep, credits),
1003b4a7f91cSChuck Lever 
1004b4a7f91cSChuck Lever 	TP_STRUCT__entry(
1005b4a7f91cSChuck Lever 		__field(unsigned int, task_id)
1006b4a7f91cSChuck Lever 		__field(unsigned int, client_id)
1007b4a7f91cSChuck Lever 		__field(u32, xid)
1008b4a7f91cSChuck Lever 		__field(unsigned int, credits)
1009b4a7f91cSChuck Lever 	),
1010b4a7f91cSChuck Lever 
1011b4a7f91cSChuck Lever 	TP_fast_assign(
1012b4a7f91cSChuck Lever 		__entry->task_id = task->tk_pid;
1013b4a7f91cSChuck Lever 		__entry->client_id = task->tk_client->cl_clid;
1014b4a7f91cSChuck Lever 		__entry->xid = be32_to_cpu(rep->rr_xid);
1015b4a7f91cSChuck Lever 		__entry->credits = credits;
1016b4a7f91cSChuck Lever 	),
1017b4a7f91cSChuck Lever 
101803ffd924SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x credits=%u",
1019b4a7f91cSChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
102003ffd924SChuck Lever 		__entry->credits
1021b4a7f91cSChuck Lever 	)
1022b4a7f91cSChuck Lever );
1023b4a7f91cSChuck Lever 
10243a9568feSChuck Lever DEFINE_REPLY_EVENT(vers);
10253a9568feSChuck Lever DEFINE_REPLY_EVENT(rqst);
10263a9568feSChuck Lever DEFINE_REPLY_EVENT(short);
10273a9568feSChuck Lever DEFINE_REPLY_EVENT(hdr);
1028b4a7f91cSChuck Lever 
10293821e232SChuck Lever TRACE_EVENT(xprtrdma_err_vers,
10303821e232SChuck Lever 	TP_PROTO(
10313821e232SChuck Lever 		const struct rpc_rqst *rqst,
10323821e232SChuck Lever 		__be32 *min,
10333821e232SChuck Lever 		__be32 *max
10343821e232SChuck Lever 	),
10353821e232SChuck Lever 
10363821e232SChuck Lever 	TP_ARGS(rqst, min, max),
10373821e232SChuck Lever 
10383821e232SChuck Lever 	TP_STRUCT__entry(
10393821e232SChuck Lever 		__field(unsigned int, task_id)
10403821e232SChuck Lever 		__field(unsigned int, client_id)
10413821e232SChuck Lever 		__field(u32, xid)
10423821e232SChuck Lever 		__field(u32, min)
10433821e232SChuck Lever 		__field(u32, max)
10443821e232SChuck Lever 	),
10453821e232SChuck Lever 
10463821e232SChuck Lever 	TP_fast_assign(
10473821e232SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
10483821e232SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
10493821e232SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
10503821e232SChuck Lever 		__entry->min = be32_to_cpup(min);
10513821e232SChuck Lever 		__entry->max = be32_to_cpup(max);
10523821e232SChuck Lever 	),
10533821e232SChuck Lever 
10543821e232SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x versions=[%u, %u]",
10553821e232SChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
10563821e232SChuck Lever 		__entry->min, __entry->max
10573821e232SChuck Lever 	)
10583821e232SChuck Lever );
10593821e232SChuck Lever 
10603821e232SChuck Lever TRACE_EVENT(xprtrdma_err_chunk,
10613821e232SChuck Lever 	TP_PROTO(
10623821e232SChuck Lever 		const struct rpc_rqst *rqst
10633821e232SChuck Lever 	),
10643821e232SChuck Lever 
10653821e232SChuck Lever 	TP_ARGS(rqst),
10663821e232SChuck Lever 
10673821e232SChuck Lever 	TP_STRUCT__entry(
10683821e232SChuck Lever 		__field(unsigned int, task_id)
10693821e232SChuck Lever 		__field(unsigned int, client_id)
10703821e232SChuck Lever 		__field(u32, xid)
10713821e232SChuck Lever 	),
10723821e232SChuck Lever 
10733821e232SChuck Lever 	TP_fast_assign(
10743821e232SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
10753821e232SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
10763821e232SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
10773821e232SChuck Lever 	),
10783821e232SChuck Lever 
10793821e232SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x",
10803821e232SChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid
10813821e232SChuck Lever 	)
10823821e232SChuck Lever );
10833821e232SChuck Lever 
10843821e232SChuck Lever TRACE_EVENT(xprtrdma_err_unrecognized,
10853821e232SChuck Lever 	TP_PROTO(
10863821e232SChuck Lever 		const struct rpc_rqst *rqst,
10873821e232SChuck Lever 		__be32 *procedure
10883821e232SChuck Lever 	),
10893821e232SChuck Lever 
10903821e232SChuck Lever 	TP_ARGS(rqst, procedure),
10913821e232SChuck Lever 
10923821e232SChuck Lever 	TP_STRUCT__entry(
10933821e232SChuck Lever 		__field(unsigned int, task_id)
10943821e232SChuck Lever 		__field(unsigned int, client_id)
10953821e232SChuck Lever 		__field(u32, xid)
10963821e232SChuck Lever 		__field(u32, procedure)
10973821e232SChuck Lever 	),
10983821e232SChuck Lever 
10993821e232SChuck Lever 	TP_fast_assign(
11003821e232SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
11013821e232SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
11023821e232SChuck Lever 		__entry->procedure = be32_to_cpup(procedure);
11033821e232SChuck Lever 	),
11043821e232SChuck Lever 
11053821e232SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x procedure=%u",
11063821e232SChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
11073821e232SChuck Lever 		__entry->procedure
11083821e232SChuck Lever 	)
11093821e232SChuck Lever );
11103821e232SChuck Lever 
1111e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_fixup,
1112e11b7c96SChuck Lever 	TP_PROTO(
1113e11b7c96SChuck Lever 		const struct rpc_rqst *rqst,
1114d4957f01SChuck Lever 		unsigned long fixup
1115e11b7c96SChuck Lever 	),
1116e11b7c96SChuck Lever 
1117d4957f01SChuck Lever 	TP_ARGS(rqst, fixup),
1118e11b7c96SChuck Lever 
1119e11b7c96SChuck Lever 	TP_STRUCT__entry(
1120e11b7c96SChuck Lever 		__field(unsigned int, task_id)
1121e11b7c96SChuck Lever 		__field(unsigned int, client_id)
1122d4957f01SChuck Lever 		__field(unsigned long, fixup)
1123d4957f01SChuck Lever 		__field(size_t, headlen)
1124d4957f01SChuck Lever 		__field(unsigned int, pagelen)
1125d4957f01SChuck Lever 		__field(size_t, taillen)
1126e11b7c96SChuck Lever 	),
1127e11b7c96SChuck Lever 
1128e11b7c96SChuck Lever 	TP_fast_assign(
1129e11b7c96SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
1130e11b7c96SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
1131d4957f01SChuck Lever 		__entry->fixup = fixup;
1132d4957f01SChuck Lever 		__entry->headlen = rqst->rq_rcv_buf.head[0].iov_len;
1133d4957f01SChuck Lever 		__entry->pagelen = rqst->rq_rcv_buf.page_len;
1134d4957f01SChuck Lever 		__entry->taillen = rqst->rq_rcv_buf.tail[0].iov_len;
1135e11b7c96SChuck Lever 	),
1136e11b7c96SChuck Lever 
1137d4957f01SChuck Lever 	TP_printk("task:%u@%u fixup=%lu xdr=%zu/%u/%zu",
1138d4957f01SChuck Lever 		__entry->task_id, __entry->client_id, __entry->fixup,
1139d4957f01SChuck Lever 		__entry->headlen, __entry->pagelen, __entry->taillen
1140e11b7c96SChuck Lever 	)
1141e11b7c96SChuck Lever );
1142e11b7c96SChuck Lever 
1143e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_decode_seg,
1144e11b7c96SChuck Lever 	TP_PROTO(
1145e11b7c96SChuck Lever 		u32 handle,
1146e11b7c96SChuck Lever 		u32 length,
1147e11b7c96SChuck Lever 		u64 offset
1148e11b7c96SChuck Lever 	),
1149e11b7c96SChuck Lever 
1150e11b7c96SChuck Lever 	TP_ARGS(handle, length, offset),
1151e11b7c96SChuck Lever 
1152e11b7c96SChuck Lever 	TP_STRUCT__entry(
1153e11b7c96SChuck Lever 		__field(u32, handle)
1154e11b7c96SChuck Lever 		__field(u32, length)
1155e11b7c96SChuck Lever 		__field(u64, offset)
1156e11b7c96SChuck Lever 	),
1157e11b7c96SChuck Lever 
1158e11b7c96SChuck Lever 	TP_fast_assign(
1159e11b7c96SChuck Lever 		__entry->handle = handle;
1160e11b7c96SChuck Lever 		__entry->length = length;
1161e11b7c96SChuck Lever 		__entry->offset = offset;
1162e11b7c96SChuck Lever 	),
1163e11b7c96SChuck Lever 
1164e11b7c96SChuck Lever 	TP_printk("%u@0x%016llx:0x%08x",
1165e11b7c96SChuck Lever 		__entry->length, (unsigned long long)__entry->offset,
1166e11b7c96SChuck Lever 		__entry->handle
1167e11b7c96SChuck Lever 	)
1168e11b7c96SChuck Lever );
1169e11b7c96SChuck Lever 
1170*8e24e191SChuck Lever TRACE_EVENT(xprtrdma_mrs_zap,
1171*8e24e191SChuck Lever 	TP_PROTO(
1172*8e24e191SChuck Lever 		const struct rpc_task *task
1173*8e24e191SChuck Lever 	),
1174*8e24e191SChuck Lever 
1175*8e24e191SChuck Lever 	TP_ARGS(task),
1176*8e24e191SChuck Lever 
1177*8e24e191SChuck Lever 	TP_STRUCT__entry(
1178*8e24e191SChuck Lever 		__field(unsigned int, task_id)
1179*8e24e191SChuck Lever 		__field(unsigned int, client_id)
1180*8e24e191SChuck Lever 	),
1181*8e24e191SChuck Lever 
1182*8e24e191SChuck Lever 	TP_fast_assign(
1183*8e24e191SChuck Lever 		__entry->task_id = task->tk_pid;
1184*8e24e191SChuck Lever 		__entry->client_id = task->tk_client->cl_clid;
1185*8e24e191SChuck Lever 	),
1186*8e24e191SChuck Lever 
1187*8e24e191SChuck Lever 	TP_printk("task:%u@%u",
1188*8e24e191SChuck Lever 		__entry->task_id, __entry->client_id
1189*8e24e191SChuck Lever 	)
1190*8e24e191SChuck Lever );
1191*8e24e191SChuck Lever 
1192fc1eb807SChuck Lever /**
1193fc1eb807SChuck Lever  ** Callback events
1194fc1eb807SChuck Lever  **/
1195fc1eb807SChuck Lever 
1196fc1eb807SChuck Lever TRACE_EVENT(xprtrdma_cb_setup,
1197fc1eb807SChuck Lever 	TP_PROTO(
1198fc1eb807SChuck Lever 		const struct rpcrdma_xprt *r_xprt,
1199fc1eb807SChuck Lever 		unsigned int reqs
1200fc1eb807SChuck Lever 	),
1201fc1eb807SChuck Lever 
1202fc1eb807SChuck Lever 	TP_ARGS(r_xprt, reqs),
1203fc1eb807SChuck Lever 
1204fc1eb807SChuck Lever 	TP_STRUCT__entry(
1205fc1eb807SChuck Lever 		__field(const void *, r_xprt)
1206fc1eb807SChuck Lever 		__field(unsigned int, reqs)
1207fc1eb807SChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
1208fc1eb807SChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
1209fc1eb807SChuck Lever 	),
1210fc1eb807SChuck Lever 
1211fc1eb807SChuck Lever 	TP_fast_assign(
1212fc1eb807SChuck Lever 		__entry->r_xprt = r_xprt;
1213fc1eb807SChuck Lever 		__entry->reqs = reqs;
1214fc1eb807SChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
1215fc1eb807SChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
1216fc1eb807SChuck Lever 	),
1217fc1eb807SChuck Lever 
1218fc1eb807SChuck Lever 	TP_printk("peer=[%s]:%s r_xprt=%p: %u reqs",
1219fc1eb807SChuck Lever 		__get_str(addr), __get_str(port),
1220fc1eb807SChuck Lever 		__entry->r_xprt, __entry->reqs
1221fc1eb807SChuck Lever 	)
1222fc1eb807SChuck Lever );
1223fc1eb807SChuck Lever 
1224d11e9346SChuck Lever DEFINE_CALLBACK_EVENT(call);
1225d11e9346SChuck Lever DEFINE_CALLBACK_EVENT(reply);
1226fc1eb807SChuck Lever 
122798895edbSChuck Lever /**
122898895edbSChuck Lever  ** Server-side RPC/RDMA events
122998895edbSChuck Lever  **/
123098895edbSChuck Lever 
1231e979a173SChuck Lever DECLARE_EVENT_CLASS(svcrdma_accept_class,
1232e979a173SChuck Lever 	TP_PROTO(
1233e979a173SChuck Lever 		const struct svcxprt_rdma *rdma,
1234e979a173SChuck Lever 		long status
1235e979a173SChuck Lever 	),
1236e979a173SChuck Lever 
1237e979a173SChuck Lever 	TP_ARGS(rdma, status),
1238e979a173SChuck Lever 
1239e979a173SChuck Lever 	TP_STRUCT__entry(
1240e979a173SChuck Lever 		__field(long, status)
1241e979a173SChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1242e979a173SChuck Lever 	),
1243e979a173SChuck Lever 
1244e979a173SChuck Lever 	TP_fast_assign(
1245e979a173SChuck Lever 		__entry->status = status;
1246e979a173SChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1247e979a173SChuck Lever 	),
1248e979a173SChuck Lever 
1249e979a173SChuck Lever 	TP_printk("addr=%s status=%ld",
1250e979a173SChuck Lever 		__get_str(addr), __entry->status
1251e979a173SChuck Lever 	)
1252e979a173SChuck Lever );
1253e979a173SChuck Lever 
1254e979a173SChuck Lever #define DEFINE_ACCEPT_EVENT(name) \
1255e979a173SChuck Lever 		DEFINE_EVENT(svcrdma_accept_class, svcrdma_##name##_err, \
1256e979a173SChuck Lever 				TP_PROTO( \
1257e979a173SChuck Lever 					const struct svcxprt_rdma *rdma, \
1258e979a173SChuck Lever 					long status \
1259e979a173SChuck Lever 				), \
1260e979a173SChuck Lever 				TP_ARGS(rdma, status))
1261e979a173SChuck Lever 
1262e979a173SChuck Lever DEFINE_ACCEPT_EVENT(pd);
1263e979a173SChuck Lever DEFINE_ACCEPT_EVENT(qp);
1264e979a173SChuck Lever DEFINE_ACCEPT_EVENT(fabric);
1265e979a173SChuck Lever DEFINE_ACCEPT_EVENT(initdepth);
1266e979a173SChuck Lever DEFINE_ACCEPT_EVENT(accept);
1267e979a173SChuck Lever 
126898895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_MSG);
126998895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_NOMSG);
127098895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_MSGP);
127198895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_DONE);
127298895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_ERROR);
127398895edbSChuck Lever 
127498895edbSChuck Lever #define show_rpcrdma_proc(x)						\
127598895edbSChuck Lever 		__print_symbolic(x,					\
127698895edbSChuck Lever 				{ RDMA_MSG, "RDMA_MSG" },		\
127798895edbSChuck Lever 				{ RDMA_NOMSG, "RDMA_NOMSG" },		\
127898895edbSChuck Lever 				{ RDMA_MSGP, "RDMA_MSGP" },		\
127998895edbSChuck Lever 				{ RDMA_DONE, "RDMA_DONE" },		\
128098895edbSChuck Lever 				{ RDMA_ERROR, "RDMA_ERROR" })
128198895edbSChuck Lever 
128298895edbSChuck Lever TRACE_EVENT(svcrdma_decode_rqst,
128398895edbSChuck Lever 	TP_PROTO(
1284007140eeSChuck Lever 		const struct svc_rdma_recv_ctxt *ctxt,
128598895edbSChuck Lever 		__be32 *p,
128698895edbSChuck Lever 		unsigned int hdrlen
128798895edbSChuck Lever 	),
128898895edbSChuck Lever 
1289007140eeSChuck Lever 	TP_ARGS(ctxt, p, hdrlen),
129098895edbSChuck Lever 
129198895edbSChuck Lever 	TP_STRUCT__entry(
1292007140eeSChuck Lever 		__field(u32, cq_id)
1293007140eeSChuck Lever 		__field(int, completion_id)
129498895edbSChuck Lever 		__field(u32, xid)
129598895edbSChuck Lever 		__field(u32, vers)
129698895edbSChuck Lever 		__field(u32, proc)
129798895edbSChuck Lever 		__field(u32, credits)
129898895edbSChuck Lever 		__field(unsigned int, hdrlen)
129998895edbSChuck Lever 	),
130098895edbSChuck Lever 
130198895edbSChuck Lever 	TP_fast_assign(
1302007140eeSChuck Lever 		__entry->cq_id = ctxt->rc_cid.ci_queue_id;
1303007140eeSChuck Lever 		__entry->completion_id = ctxt->rc_cid.ci_completion_id;
130498895edbSChuck Lever 		__entry->xid = be32_to_cpup(p++);
130598895edbSChuck Lever 		__entry->vers = be32_to_cpup(p++);
130698895edbSChuck Lever 		__entry->credits = be32_to_cpup(p++);
130798895edbSChuck Lever 		__entry->proc = be32_to_cpup(p);
130898895edbSChuck Lever 		__entry->hdrlen = hdrlen;
130998895edbSChuck Lever 	),
131098895edbSChuck Lever 
1311007140eeSChuck Lever 	TP_printk("cq.id=%u cid=%d xid=0x%08x vers=%u credits=%u proc=%s hdrlen=%u",
1312007140eeSChuck Lever 		__entry->cq_id, __entry->completion_id,
131398895edbSChuck Lever 		__entry->xid, __entry->vers, __entry->credits,
131498895edbSChuck Lever 		show_rpcrdma_proc(__entry->proc), __entry->hdrlen)
131598895edbSChuck Lever );
131698895edbSChuck Lever 
131727ce6294SChuck Lever TRACE_EVENT(svcrdma_decode_short_err,
131898895edbSChuck Lever 	TP_PROTO(
1319007140eeSChuck Lever 		const struct svc_rdma_recv_ctxt *ctxt,
132098895edbSChuck Lever 		unsigned int hdrlen
132198895edbSChuck Lever 	),
132298895edbSChuck Lever 
1323007140eeSChuck Lever 	TP_ARGS(ctxt, hdrlen),
132498895edbSChuck Lever 
132598895edbSChuck Lever 	TP_STRUCT__entry(
1326007140eeSChuck Lever 		__field(u32, cq_id)
1327007140eeSChuck Lever 		__field(int, completion_id)
132898895edbSChuck Lever 		__field(unsigned int, hdrlen)
132998895edbSChuck Lever 	),
133098895edbSChuck Lever 
133198895edbSChuck Lever 	TP_fast_assign(
1332007140eeSChuck Lever 		__entry->cq_id = ctxt->rc_cid.ci_queue_id;
1333007140eeSChuck Lever 		__entry->completion_id = ctxt->rc_cid.ci_completion_id;
133498895edbSChuck Lever 		__entry->hdrlen = hdrlen;
133598895edbSChuck Lever 	),
133698895edbSChuck Lever 
1337007140eeSChuck Lever 	TP_printk("cq.id=%u cid=%d hdrlen=%u",
1338007140eeSChuck Lever 		__entry->cq_id, __entry->completion_id,
1339007140eeSChuck Lever 		__entry->hdrlen)
134098895edbSChuck Lever );
134198895edbSChuck Lever 
134298895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_badreq_event,
134398895edbSChuck Lever 	TP_PROTO(
1344007140eeSChuck Lever 		const struct svc_rdma_recv_ctxt *ctxt,
134598895edbSChuck Lever 		__be32 *p
134698895edbSChuck Lever 	),
134798895edbSChuck Lever 
1348007140eeSChuck Lever 	TP_ARGS(ctxt, p),
134998895edbSChuck Lever 
135098895edbSChuck Lever 	TP_STRUCT__entry(
1351007140eeSChuck Lever 		__field(u32, cq_id)
1352007140eeSChuck Lever 		__field(int, completion_id)
135398895edbSChuck Lever 		__field(u32, xid)
135498895edbSChuck Lever 		__field(u32, vers)
135598895edbSChuck Lever 		__field(u32, proc)
135698895edbSChuck Lever 		__field(u32, credits)
135798895edbSChuck Lever 	),
135898895edbSChuck Lever 
135998895edbSChuck Lever 	TP_fast_assign(
1360007140eeSChuck Lever 		__entry->cq_id = ctxt->rc_cid.ci_queue_id;
1361007140eeSChuck Lever 		__entry->completion_id = ctxt->rc_cid.ci_completion_id;
136298895edbSChuck Lever 		__entry->xid = be32_to_cpup(p++);
136398895edbSChuck Lever 		__entry->vers = be32_to_cpup(p++);
136498895edbSChuck Lever 		__entry->credits = be32_to_cpup(p++);
136598895edbSChuck Lever 		__entry->proc = be32_to_cpup(p);
136698895edbSChuck Lever 	),
136798895edbSChuck Lever 
1368007140eeSChuck Lever 	TP_printk("cq.id=%u cid=%d xid=0x%08x vers=%u credits=%u proc=%u",
1369007140eeSChuck Lever 		__entry->cq_id, __entry->completion_id,
137098895edbSChuck Lever 		__entry->xid, __entry->vers, __entry->credits, __entry->proc)
137198895edbSChuck Lever );
137298895edbSChuck Lever 
137398895edbSChuck Lever #define DEFINE_BADREQ_EVENT(name)					\
137427ce6294SChuck Lever 		DEFINE_EVENT(svcrdma_badreq_event,			\
137527ce6294SChuck Lever 			     svcrdma_decode_##name##_err,		\
137698895edbSChuck Lever 				TP_PROTO(				\
1377007140eeSChuck Lever 					const struct svc_rdma_recv_ctxt *ctxt,	\
137898895edbSChuck Lever 					__be32 *p			\
137998895edbSChuck Lever 				),					\
1380007140eeSChuck Lever 				TP_ARGS(ctxt, p))
138198895edbSChuck Lever 
138298895edbSChuck Lever DEFINE_BADREQ_EVENT(badvers);
138398895edbSChuck Lever DEFINE_BADREQ_EVENT(drop);
138498895edbSChuck Lever DEFINE_BADREQ_EVENT(badproc);
138598895edbSChuck Lever DEFINE_BADREQ_EVENT(parse);
138698895edbSChuck Lever 
138798895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_segment_event,
138898895edbSChuck Lever 	TP_PROTO(
138998895edbSChuck Lever 		u32 handle,
139098895edbSChuck Lever 		u32 length,
139198895edbSChuck Lever 		u64 offset
139298895edbSChuck Lever 	),
139398895edbSChuck Lever 
139498895edbSChuck Lever 	TP_ARGS(handle, length, offset),
139598895edbSChuck Lever 
139698895edbSChuck Lever 	TP_STRUCT__entry(
139798895edbSChuck Lever 		__field(u32, handle)
139898895edbSChuck Lever 		__field(u32, length)
139998895edbSChuck Lever 		__field(u64, offset)
140098895edbSChuck Lever 	),
140198895edbSChuck Lever 
140298895edbSChuck Lever 	TP_fast_assign(
140398895edbSChuck Lever 		__entry->handle = handle;
140498895edbSChuck Lever 		__entry->length = length;
140598895edbSChuck Lever 		__entry->offset = offset;
140698895edbSChuck Lever 	),
140798895edbSChuck Lever 
140898895edbSChuck Lever 	TP_printk("%u@0x%016llx:0x%08x",
140998895edbSChuck Lever 		__entry->length, (unsigned long long)__entry->offset,
141098895edbSChuck Lever 		__entry->handle
141198895edbSChuck Lever 	)
141298895edbSChuck Lever );
141398895edbSChuck Lever 
141498895edbSChuck Lever #define DEFINE_SEGMENT_EVENT(name)					\
1415e604aad2SChuck Lever 		DEFINE_EVENT(svcrdma_segment_event, svcrdma_##name,\
141698895edbSChuck Lever 				TP_PROTO(				\
141798895edbSChuck Lever 					u32 handle,			\
141898895edbSChuck Lever 					u32 length,			\
141998895edbSChuck Lever 					u64 offset			\
142098895edbSChuck Lever 				),					\
142198895edbSChuck Lever 				TP_ARGS(handle, length, offset))
142298895edbSChuck Lever 
1423e604aad2SChuck Lever DEFINE_SEGMENT_EVENT(decode_wseg);
1424e604aad2SChuck Lever DEFINE_SEGMENT_EVENT(encode_rseg);
1425a406c563SChuck Lever DEFINE_SEGMENT_EVENT(send_rseg);
1426e604aad2SChuck Lever DEFINE_SEGMENT_EVENT(encode_wseg);
1427a406c563SChuck Lever DEFINE_SEGMENT_EVENT(send_wseg);
142898895edbSChuck Lever 
142998895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_chunk_event,
143098895edbSChuck Lever 	TP_PROTO(
143198895edbSChuck Lever 		u32 length
143298895edbSChuck Lever 	),
143398895edbSChuck Lever 
143498895edbSChuck Lever 	TP_ARGS(length),
143598895edbSChuck Lever 
143698895edbSChuck Lever 	TP_STRUCT__entry(
143798895edbSChuck Lever 		__field(u32, length)
143898895edbSChuck Lever 	),
143998895edbSChuck Lever 
144098895edbSChuck Lever 	TP_fast_assign(
144198895edbSChuck Lever 		__entry->length = length;
144298895edbSChuck Lever 	),
144398895edbSChuck Lever 
144498895edbSChuck Lever 	TP_printk("length=%u",
144598895edbSChuck Lever 		__entry->length
144698895edbSChuck Lever 	)
144798895edbSChuck Lever );
144898895edbSChuck Lever 
144998895edbSChuck Lever #define DEFINE_CHUNK_EVENT(name)					\
1450a406c563SChuck Lever 		DEFINE_EVENT(svcrdma_chunk_event, svcrdma_##name,	\
145198895edbSChuck Lever 				TP_PROTO(				\
145298895edbSChuck Lever 					u32 length			\
145398895edbSChuck Lever 				),					\
145498895edbSChuck Lever 				TP_ARGS(length))
145598895edbSChuck Lever 
1456a406c563SChuck Lever DEFINE_CHUNK_EVENT(send_pzr);
1457a406c563SChuck Lever DEFINE_CHUNK_EVENT(encode_write_chunk);
1458a406c563SChuck Lever DEFINE_CHUNK_EVENT(send_write_chunk);
1459a406c563SChuck Lever DEFINE_CHUNK_EVENT(encode_read_chunk);
1460a406c563SChuck Lever DEFINE_CHUNK_EVENT(send_reply_chunk);
146198895edbSChuck Lever 
1462a406c563SChuck Lever TRACE_EVENT(svcrdma_send_read_chunk,
146398895edbSChuck Lever 	TP_PROTO(
146498895edbSChuck Lever 		u32 length,
146598895edbSChuck Lever 		u32 position
146698895edbSChuck Lever 	),
146798895edbSChuck Lever 
146898895edbSChuck Lever 	TP_ARGS(length, position),
146998895edbSChuck Lever 
147098895edbSChuck Lever 	TP_STRUCT__entry(
147198895edbSChuck Lever 		__field(u32, length)
147298895edbSChuck Lever 		__field(u32, position)
147398895edbSChuck Lever 	),
147498895edbSChuck Lever 
147598895edbSChuck Lever 	TP_fast_assign(
147698895edbSChuck Lever 		__entry->length = length;
147798895edbSChuck Lever 		__entry->position = position;
147898895edbSChuck Lever 	),
147998895edbSChuck Lever 
148098895edbSChuck Lever 	TP_printk("length=%u position=%u",
148198895edbSChuck Lever 		__entry->length, __entry->position
148298895edbSChuck Lever 	)
148398895edbSChuck Lever );
148498895edbSChuck Lever 
148598895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_error_event,
148698895edbSChuck Lever 	TP_PROTO(
148798895edbSChuck Lever 		__be32 xid
148898895edbSChuck Lever 	),
148998895edbSChuck Lever 
149098895edbSChuck Lever 	TP_ARGS(xid),
149198895edbSChuck Lever 
149298895edbSChuck Lever 	TP_STRUCT__entry(
149398895edbSChuck Lever 		__field(u32, xid)
149498895edbSChuck Lever 	),
149598895edbSChuck Lever 
149698895edbSChuck Lever 	TP_fast_assign(
149798895edbSChuck Lever 		__entry->xid = be32_to_cpu(xid);
149898895edbSChuck Lever 	),
149998895edbSChuck Lever 
150098895edbSChuck Lever 	TP_printk("xid=0x%08x",
150198895edbSChuck Lever 		__entry->xid
150298895edbSChuck Lever 	)
150398895edbSChuck Lever );
150498895edbSChuck Lever 
150598895edbSChuck Lever #define DEFINE_ERROR_EVENT(name)					\
150698895edbSChuck Lever 		DEFINE_EVENT(svcrdma_error_event, svcrdma_err_##name,	\
150798895edbSChuck Lever 				TP_PROTO(				\
150898895edbSChuck Lever 					__be32 xid			\
150998895edbSChuck Lever 				),					\
151098895edbSChuck Lever 				TP_ARGS(xid))
151198895edbSChuck Lever 
151298895edbSChuck Lever DEFINE_ERROR_EVENT(vers);
151398895edbSChuck Lever DEFINE_ERROR_EVENT(chunk);
151498895edbSChuck Lever 
1515bd2abef3SChuck Lever /**
1516bd2abef3SChuck Lever  ** Server-side RDMA API events
1517bd2abef3SChuck Lever  **/
1518bd2abef3SChuck Lever 
1519832b2cb9SChuck Lever DECLARE_EVENT_CLASS(svcrdma_dma_map_class,
1520bd2abef3SChuck Lever 	TP_PROTO(
1521bd2abef3SChuck Lever 		const struct svcxprt_rdma *rdma,
1522832b2cb9SChuck Lever 		u64 dma_addr,
1523832b2cb9SChuck Lever 		u32 length
1524bd2abef3SChuck Lever 	),
1525bd2abef3SChuck Lever 
1526832b2cb9SChuck Lever 	TP_ARGS(rdma, dma_addr, length),
1527bd2abef3SChuck Lever 
1528bd2abef3SChuck Lever 	TP_STRUCT__entry(
1529832b2cb9SChuck Lever 		__field(u64, dma_addr)
1530832b2cb9SChuck Lever 		__field(u32, length)
1531bd2abef3SChuck Lever 		__string(device, rdma->sc_cm_id->device->name)
1532bd2abef3SChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1533bd2abef3SChuck Lever 	),
1534bd2abef3SChuck Lever 
1535bd2abef3SChuck Lever 	TP_fast_assign(
1536832b2cb9SChuck Lever 		__entry->dma_addr = dma_addr;
1537832b2cb9SChuck Lever 		__entry->length = length;
1538bd2abef3SChuck Lever 		__assign_str(device, rdma->sc_cm_id->device->name);
1539bd2abef3SChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1540bd2abef3SChuck Lever 	),
1541bd2abef3SChuck Lever 
1542832b2cb9SChuck Lever 	TP_printk("addr=%s device=%s dma_addr=%llu length=%u",
1543832b2cb9SChuck Lever 		__get_str(addr), __get_str(device),
1544832b2cb9SChuck Lever 		__entry->dma_addr, __entry->length
1545bd2abef3SChuck Lever 	)
1546bd2abef3SChuck Lever );
1547bd2abef3SChuck Lever 
1548832b2cb9SChuck Lever #define DEFINE_SVC_DMA_EVENT(name)					\
1549832b2cb9SChuck Lever 		DEFINE_EVENT(svcrdma_dma_map_class, svcrdma_##name,	\
1550832b2cb9SChuck Lever 				TP_PROTO(				\
1551832b2cb9SChuck Lever 					const struct svcxprt_rdma *rdma,\
1552832b2cb9SChuck Lever 					u64 dma_addr,			\
1553832b2cb9SChuck Lever 					u32 length			\
1554832b2cb9SChuck Lever 				),					\
1555832b2cb9SChuck Lever 				TP_ARGS(rdma, dma_addr, length))
1556832b2cb9SChuck Lever 
1557832b2cb9SChuck Lever DEFINE_SVC_DMA_EVENT(dma_map_page);
1558832b2cb9SChuck Lever DEFINE_SVC_DMA_EVENT(dma_unmap_page);
1559832b2cb9SChuck Lever 
15602abfbe7eSChuck Lever TRACE_EVENT(svcrdma_dma_map_rw_err,
1561bd2abef3SChuck Lever 	TP_PROTO(
1562bd2abef3SChuck Lever 		const struct svcxprt_rdma *rdma,
15632abfbe7eSChuck Lever 		unsigned int nents,
1564bd2abef3SChuck Lever 		int status
1565bd2abef3SChuck Lever 	),
1566bd2abef3SChuck Lever 
15672abfbe7eSChuck Lever 	TP_ARGS(rdma, nents, status),
1568bd2abef3SChuck Lever 
1569bd2abef3SChuck Lever 	TP_STRUCT__entry(
1570bd2abef3SChuck Lever 		__field(int, status)
15712abfbe7eSChuck Lever 		__field(unsigned int, nents)
1572bd2abef3SChuck Lever 		__string(device, rdma->sc_cm_id->device->name)
1573bd2abef3SChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1574bd2abef3SChuck Lever 	),
1575bd2abef3SChuck Lever 
1576bd2abef3SChuck Lever 	TP_fast_assign(
1577bd2abef3SChuck Lever 		__entry->status = status;
15782abfbe7eSChuck Lever 		__entry->nents = nents;
1579bd2abef3SChuck Lever 		__assign_str(device, rdma->sc_cm_id->device->name);
1580bd2abef3SChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1581bd2abef3SChuck Lever 	),
1582bd2abef3SChuck Lever 
15832abfbe7eSChuck Lever 	TP_printk("addr=%s device=%s nents=%u status=%d",
15842abfbe7eSChuck Lever 		__get_str(addr), __get_str(device), __entry->nents,
15852abfbe7eSChuck Lever 		__entry->status
1586bd2abef3SChuck Lever 	)
1587bd2abef3SChuck Lever );
1588bd2abef3SChuck Lever 
1589f4e53e1cSChuck Lever TRACE_EVENT(svcrdma_no_rwctx_err,
1590f4e53e1cSChuck Lever 	TP_PROTO(
1591f4e53e1cSChuck Lever 		const struct svcxprt_rdma *rdma,
1592f4e53e1cSChuck Lever 		unsigned int num_sges
1593f4e53e1cSChuck Lever 	),
1594f4e53e1cSChuck Lever 
1595f4e53e1cSChuck Lever 	TP_ARGS(rdma, num_sges),
1596f4e53e1cSChuck Lever 
1597f4e53e1cSChuck Lever 	TP_STRUCT__entry(
1598f4e53e1cSChuck Lever 		__field(unsigned int, num_sges)
1599f4e53e1cSChuck Lever 		__string(device, rdma->sc_cm_id->device->name)
1600f4e53e1cSChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1601f4e53e1cSChuck Lever 	),
1602f4e53e1cSChuck Lever 
1603f4e53e1cSChuck Lever 	TP_fast_assign(
1604f4e53e1cSChuck Lever 		__entry->num_sges = num_sges;
1605f4e53e1cSChuck Lever 		__assign_str(device, rdma->sc_cm_id->device->name);
1606f4e53e1cSChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1607f4e53e1cSChuck Lever 	),
1608f4e53e1cSChuck Lever 
1609f4e53e1cSChuck Lever 	TP_printk("addr=%s device=%s num_sges=%d",
1610f4e53e1cSChuck Lever 		__get_str(addr), __get_str(device), __entry->num_sges
1611f4e53e1cSChuck Lever 	)
1612f4e53e1cSChuck Lever );
1613f4e53e1cSChuck Lever 
16149d200638SChuck Lever TRACE_EVENT(svcrdma_page_overrun_err,
16159d200638SChuck Lever 	TP_PROTO(
16169d200638SChuck Lever 		const struct svcxprt_rdma *rdma,
16179d200638SChuck Lever 		const struct svc_rqst *rqst,
16189d200638SChuck Lever 		unsigned int pageno
16199d200638SChuck Lever 	),
16209d200638SChuck Lever 
16219d200638SChuck Lever 	TP_ARGS(rdma, rqst, pageno),
16229d200638SChuck Lever 
16239d200638SChuck Lever 	TP_STRUCT__entry(
16249d200638SChuck Lever 		__field(unsigned int, pageno)
16259d200638SChuck Lever 		__field(u32, xid)
16269d200638SChuck Lever 		__string(device, rdma->sc_cm_id->device->name)
16279d200638SChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
16289d200638SChuck Lever 	),
16299d200638SChuck Lever 
16309d200638SChuck Lever 	TP_fast_assign(
16319d200638SChuck Lever 		__entry->pageno = pageno;
16329d200638SChuck Lever 		__entry->xid = __be32_to_cpu(rqst->rq_xid);
16339d200638SChuck Lever 		__assign_str(device, rdma->sc_cm_id->device->name);
16349d200638SChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
16359d200638SChuck Lever 	),
16369d200638SChuck Lever 
16379d200638SChuck Lever 	TP_printk("addr=%s device=%s xid=0x%08x pageno=%u", __get_str(addr),
16389d200638SChuck Lever 		__get_str(device), __entry->xid, __entry->pageno
16399d200638SChuck Lever 	)
16409d200638SChuck Lever );
16419d200638SChuck Lever 
1642dbc17acdSChuck Lever TRACE_EVENT(svcrdma_small_wrch_err,
1643dbc17acdSChuck Lever 	TP_PROTO(
1644dbc17acdSChuck Lever 		const struct svcxprt_rdma *rdma,
1645dbc17acdSChuck Lever 		unsigned int remaining,
1646dbc17acdSChuck Lever 		unsigned int seg_no,
1647dbc17acdSChuck Lever 		unsigned int num_segs
1648dbc17acdSChuck Lever 	),
1649dbc17acdSChuck Lever 
1650dbc17acdSChuck Lever 	TP_ARGS(rdma, remaining, seg_no, num_segs),
1651dbc17acdSChuck Lever 
1652dbc17acdSChuck Lever 	TP_STRUCT__entry(
1653dbc17acdSChuck Lever 		__field(unsigned int, remaining)
1654dbc17acdSChuck Lever 		__field(unsigned int, seg_no)
1655dbc17acdSChuck Lever 		__field(unsigned int, num_segs)
1656dbc17acdSChuck Lever 		__string(device, rdma->sc_cm_id->device->name)
1657dbc17acdSChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1658dbc17acdSChuck Lever 	),
1659dbc17acdSChuck Lever 
1660dbc17acdSChuck Lever 	TP_fast_assign(
1661dbc17acdSChuck Lever 		__entry->remaining = remaining;
1662dbc17acdSChuck Lever 		__entry->seg_no = seg_no;
1663dbc17acdSChuck Lever 		__entry->num_segs = num_segs;
1664dbc17acdSChuck Lever 		__assign_str(device, rdma->sc_cm_id->device->name);
1665dbc17acdSChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1666dbc17acdSChuck Lever 	),
1667dbc17acdSChuck Lever 
1668dbc17acdSChuck Lever 	TP_printk("addr=%s device=%s remaining=%u seg_no=%u num_segs=%u",
1669dbc17acdSChuck Lever 		__get_str(addr), __get_str(device), __entry->remaining,
1670dbc17acdSChuck Lever 		__entry->seg_no, __entry->num_segs
1671dbc17acdSChuck Lever 	)
1672dbc17acdSChuck Lever );
1673dbc17acdSChuck Lever 
16740dabe948SChuck Lever TRACE_EVENT(svcrdma_send_pullup,
16750dabe948SChuck Lever 	TP_PROTO(
16760dabe948SChuck Lever 		unsigned int len
16770dabe948SChuck Lever 	),
16780dabe948SChuck Lever 
16790dabe948SChuck Lever 	TP_ARGS(len),
16800dabe948SChuck Lever 
16810dabe948SChuck Lever 	TP_STRUCT__entry(
16820dabe948SChuck Lever 		__field(unsigned int, len)
16830dabe948SChuck Lever 	),
16840dabe948SChuck Lever 
16850dabe948SChuck Lever 	TP_fast_assign(
16860dabe948SChuck Lever 		__entry->len = len;
16870dabe948SChuck Lever 	),
16880dabe948SChuck Lever 
16890dabe948SChuck Lever 	TP_printk("len=%u", __entry->len)
16900dabe948SChuck Lever );
16910dabe948SChuck Lever 
16923f8f25c6SChuck Lever TRACE_EVENT(svcrdma_send_err,
1693bd2abef3SChuck Lever 	TP_PROTO(
1694bd2abef3SChuck Lever 		const struct svc_rqst *rqst,
1695bd2abef3SChuck Lever 		int status
1696bd2abef3SChuck Lever 	),
1697bd2abef3SChuck Lever 
1698bd2abef3SChuck Lever 	TP_ARGS(rqst, status),
1699bd2abef3SChuck Lever 
1700bd2abef3SChuck Lever 	TP_STRUCT__entry(
1701bd2abef3SChuck Lever 		__field(int, status)
1702bd2abef3SChuck Lever 		__field(u32, xid)
1703bd2abef3SChuck Lever 		__string(addr, rqst->rq_xprt->xpt_remotebuf)
1704bd2abef3SChuck Lever 	),
1705bd2abef3SChuck Lever 
1706bd2abef3SChuck Lever 	TP_fast_assign(
1707bd2abef3SChuck Lever 		__entry->status = status;
1708bd2abef3SChuck Lever 		__entry->xid = __be32_to_cpu(rqst->rq_xid);
1709bd2abef3SChuck Lever 		__assign_str(addr, rqst->rq_xprt->xpt_remotebuf);
1710bd2abef3SChuck Lever 	),
1711bd2abef3SChuck Lever 
17123f8f25c6SChuck Lever 	TP_printk("addr=%s xid=0x%08x status=%d", __get_str(addr),
1713bd2abef3SChuck Lever 		__entry->xid, __entry->status
1714bd2abef3SChuck Lever 	)
1715bd2abef3SChuck Lever );
1716bd2abef3SChuck Lever 
1717bd2abef3SChuck Lever TRACE_EVENT(svcrdma_post_send,
1718bd2abef3SChuck Lever 	TP_PROTO(
171917f70f8dSChuck Lever 		const struct svc_rdma_send_ctxt *ctxt
1720bd2abef3SChuck Lever 	),
1721bd2abef3SChuck Lever 
172217f70f8dSChuck Lever 	TP_ARGS(ctxt),
1723bd2abef3SChuck Lever 
1724bd2abef3SChuck Lever 	TP_STRUCT__entry(
172517f70f8dSChuck Lever 		__field(u32, cq_id)
172617f70f8dSChuck Lever 		__field(int, completion_id)
1727bd2abef3SChuck Lever 		__field(unsigned int, num_sge)
1728bd2abef3SChuck Lever 		__field(u32, inv_rkey)
1729bd2abef3SChuck Lever 	),
1730bd2abef3SChuck Lever 
1731bd2abef3SChuck Lever 	TP_fast_assign(
173217f70f8dSChuck Lever 		const struct ib_send_wr *wr = &ctxt->sc_send_wr;
173317f70f8dSChuck Lever 
173417f70f8dSChuck Lever 		__entry->cq_id = ctxt->sc_cid.ci_queue_id;
173517f70f8dSChuck Lever 		__entry->completion_id = ctxt->sc_cid.ci_completion_id;
1736bd2abef3SChuck Lever 		__entry->num_sge = wr->num_sge;
1737bd2abef3SChuck Lever 		__entry->inv_rkey = (wr->opcode == IB_WR_SEND_WITH_INV) ?
1738bd2abef3SChuck Lever 					wr->ex.invalidate_rkey : 0;
1739bd2abef3SChuck Lever 	),
1740bd2abef3SChuck Lever 
174117f70f8dSChuck Lever 	TP_printk("cq_id=%u cid=%d num_sge=%u inv_rkey=0x%08x",
174217f70f8dSChuck Lever 		__entry->cq_id, __entry->completion_id,
174317f70f8dSChuck Lever 		__entry->num_sge, __entry->inv_rkey
1744bd2abef3SChuck Lever 	)
1745bd2abef3SChuck Lever );
1746bd2abef3SChuck Lever 
17473ac56c2fSChuck Lever DEFINE_COMPLETION_EVENT(svcrdma_wc_send);
1748bd2abef3SChuck Lever 
1749bd2abef3SChuck Lever TRACE_EVENT(svcrdma_post_recv,
1750bd2abef3SChuck Lever 	TP_PROTO(
17519b3bcf8cSChuck Lever 		const struct svc_rdma_recv_ctxt *ctxt
1752bd2abef3SChuck Lever 	),
1753bd2abef3SChuck Lever 
17549b3bcf8cSChuck Lever 	TP_ARGS(ctxt),
1755bd2abef3SChuck Lever 
1756bd2abef3SChuck Lever 	TP_STRUCT__entry(
17579b3bcf8cSChuck Lever 		__field(u32, cq_id)
17589b3bcf8cSChuck Lever 		__field(int, completion_id)
1759bd2abef3SChuck Lever 	),
1760bd2abef3SChuck Lever 
1761bd2abef3SChuck Lever 	TP_fast_assign(
17629b3bcf8cSChuck Lever 		__entry->cq_id = ctxt->rc_cid.ci_queue_id;
17639b3bcf8cSChuck Lever 		__entry->completion_id = ctxt->rc_cid.ci_completion_id;
1764bd2abef3SChuck Lever 	),
1765bd2abef3SChuck Lever 
17669b3bcf8cSChuck Lever 	TP_printk("cq.id=%d cid=%d",
17679b3bcf8cSChuck Lever 		__entry->cq_id, __entry->completion_id
1768bd2abef3SChuck Lever 	)
1769bd2abef3SChuck Lever );
1770bd2abef3SChuck Lever 
17719b3bcf8cSChuck Lever DEFINE_COMPLETION_EVENT(svcrdma_wc_receive);
17729b3bcf8cSChuck Lever 
17739b3bcf8cSChuck Lever TRACE_EVENT(svcrdma_rq_post_err,
1774bd2abef3SChuck Lever 	TP_PROTO(
17759b3bcf8cSChuck Lever 		const struct svcxprt_rdma *rdma,
17769b3bcf8cSChuck Lever 		int status
1777bd2abef3SChuck Lever 	),
1778bd2abef3SChuck Lever 
17799b3bcf8cSChuck Lever 	TP_ARGS(rdma, status),
1780bd2abef3SChuck Lever 
1781bd2abef3SChuck Lever 	TP_STRUCT__entry(
17829b3bcf8cSChuck Lever 		__field(int, status)
17839b3bcf8cSChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1784bd2abef3SChuck Lever 	),
1785bd2abef3SChuck Lever 
1786bd2abef3SChuck Lever 	TP_fast_assign(
17879b3bcf8cSChuck Lever 		__entry->status = status;
17889b3bcf8cSChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1789bd2abef3SChuck Lever 	),
1790bd2abef3SChuck Lever 
17919b3bcf8cSChuck Lever 	TP_printk("addr=%s status=%d",
17929b3bcf8cSChuck Lever 		__get_str(addr), __entry->status
1793bd2abef3SChuck Lever 	)
1794bd2abef3SChuck Lever );
1795bd2abef3SChuck Lever 
17966787f0beSChuck Lever TRACE_EVENT(svcrdma_post_chunk,
1797bd2abef3SChuck Lever 	TP_PROTO(
17986787f0beSChuck Lever 		const struct rpc_rdma_cid *cid,
1799e28b4fc6SChuck Lever 		int sqecount
1800bd2abef3SChuck Lever 	),
1801bd2abef3SChuck Lever 
18026787f0beSChuck Lever 	TP_ARGS(cid, sqecount),
1803bd2abef3SChuck Lever 
1804bd2abef3SChuck Lever 	TP_STRUCT__entry(
18056787f0beSChuck Lever 		__field(u32, cq_id)
18066787f0beSChuck Lever 		__field(int, completion_id)
1807bd2abef3SChuck Lever 		__field(int, sqecount)
1808bd2abef3SChuck Lever 	),
1809bd2abef3SChuck Lever 
1810bd2abef3SChuck Lever 	TP_fast_assign(
18116787f0beSChuck Lever 		__entry->cq_id = cid->ci_queue_id;
18126787f0beSChuck Lever 		__entry->completion_id = cid->ci_completion_id;
1813bd2abef3SChuck Lever 		__entry->sqecount = sqecount;
1814bd2abef3SChuck Lever 	),
1815bd2abef3SChuck Lever 
18166787f0beSChuck Lever 	TP_printk("cq.id=%u cid=%d sqecount=%d",
18176787f0beSChuck Lever 		__entry->cq_id, __entry->completion_id,
18186787f0beSChuck Lever 		__entry->sqecount
1819bd2abef3SChuck Lever 	)
1820bd2abef3SChuck Lever );
1821bd2abef3SChuck Lever 
18226787f0beSChuck Lever DEFINE_COMPLETION_EVENT(svcrdma_wc_read);
18236787f0beSChuck Lever DEFINE_COMPLETION_EVENT(svcrdma_wc_write);
1824bd2abef3SChuck Lever 
1825bd2abef3SChuck Lever TRACE_EVENT(svcrdma_qp_error,
1826bd2abef3SChuck Lever 	TP_PROTO(
1827bd2abef3SChuck Lever 		const struct ib_event *event,
1828bd2abef3SChuck Lever 		const struct sockaddr *sap
1829bd2abef3SChuck Lever 	),
1830bd2abef3SChuck Lever 
1831bd2abef3SChuck Lever 	TP_ARGS(event, sap),
1832bd2abef3SChuck Lever 
1833bd2abef3SChuck Lever 	TP_STRUCT__entry(
1834bd2abef3SChuck Lever 		__field(unsigned int, event)
1835bd2abef3SChuck Lever 		__string(device, event->device->name)
1836bd2abef3SChuck Lever 		__array(__u8, addr, INET6_ADDRSTRLEN + 10)
1837bd2abef3SChuck Lever 	),
1838bd2abef3SChuck Lever 
1839bd2abef3SChuck Lever 	TP_fast_assign(
1840bd2abef3SChuck Lever 		__entry->event = event->event;
1841bd2abef3SChuck Lever 		__assign_str(device, event->device->name);
1842bd2abef3SChuck Lever 		snprintf(__entry->addr, sizeof(__entry->addr) - 1,
1843bd2abef3SChuck Lever 			 "%pISpc", sap);
1844bd2abef3SChuck Lever 	),
1845bd2abef3SChuck Lever 
1846bd2abef3SChuck Lever 	TP_printk("addr=%s dev=%s event=%s (%u)",
1847bd2abef3SChuck Lever 		__entry->addr, __get_str(device),
1848bd2abef3SChuck Lever 		rdma_show_ib_event(__entry->event), __entry->event
1849bd2abef3SChuck Lever 	)
1850bd2abef3SChuck Lever );
1851bd2abef3SChuck Lever 
1852bd2abef3SChuck Lever DECLARE_EVENT_CLASS(svcrdma_sendqueue_event,
1853bd2abef3SChuck Lever 	TP_PROTO(
1854bd2abef3SChuck Lever 		const struct svcxprt_rdma *rdma
1855bd2abef3SChuck Lever 	),
1856bd2abef3SChuck Lever 
1857bd2abef3SChuck Lever 	TP_ARGS(rdma),
1858bd2abef3SChuck Lever 
1859bd2abef3SChuck Lever 	TP_STRUCT__entry(
1860bd2abef3SChuck Lever 		__field(int, avail)
1861bd2abef3SChuck Lever 		__field(int, depth)
1862bd2abef3SChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1863bd2abef3SChuck Lever 	),
1864bd2abef3SChuck Lever 
1865bd2abef3SChuck Lever 	TP_fast_assign(
1866bd2abef3SChuck Lever 		__entry->avail = atomic_read(&rdma->sc_sq_avail);
1867bd2abef3SChuck Lever 		__entry->depth = rdma->sc_sq_depth;
1868bd2abef3SChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1869bd2abef3SChuck Lever 	),
1870bd2abef3SChuck Lever 
1871bd2abef3SChuck Lever 	TP_printk("addr=%s sc_sq_avail=%d/%d",
1872bd2abef3SChuck Lever 		__get_str(addr), __entry->avail, __entry->depth
1873bd2abef3SChuck Lever 	)
1874bd2abef3SChuck Lever );
1875bd2abef3SChuck Lever 
1876bd2abef3SChuck Lever #define DEFINE_SQ_EVENT(name)						\
1877bd2abef3SChuck Lever 		DEFINE_EVENT(svcrdma_sendqueue_event, svcrdma_sq_##name,\
1878bd2abef3SChuck Lever 				TP_PROTO(				\
1879bd2abef3SChuck Lever 					const struct svcxprt_rdma *rdma \
1880bd2abef3SChuck Lever 				),					\
1881bd2abef3SChuck Lever 				TP_ARGS(rdma))
1882bd2abef3SChuck Lever 
1883bd2abef3SChuck Lever DEFINE_SQ_EVENT(full);
1884bd2abef3SChuck Lever DEFINE_SQ_EVENT(retry);
1885bd2abef3SChuck Lever 
1886e28b4fc6SChuck Lever TRACE_EVENT(svcrdma_sq_post_err,
1887e28b4fc6SChuck Lever 	TP_PROTO(
1888e28b4fc6SChuck Lever 		const struct svcxprt_rdma *rdma,
1889e28b4fc6SChuck Lever 		int status
1890e28b4fc6SChuck Lever 	),
1891e28b4fc6SChuck Lever 
1892e28b4fc6SChuck Lever 	TP_ARGS(rdma, status),
1893e28b4fc6SChuck Lever 
1894e28b4fc6SChuck Lever 	TP_STRUCT__entry(
1895e28b4fc6SChuck Lever 		__field(int, avail)
1896e28b4fc6SChuck Lever 		__field(int, depth)
1897e28b4fc6SChuck Lever 		__field(int, status)
1898e28b4fc6SChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1899e28b4fc6SChuck Lever 	),
1900e28b4fc6SChuck Lever 
1901e28b4fc6SChuck Lever 	TP_fast_assign(
1902e28b4fc6SChuck Lever 		__entry->avail = atomic_read(&rdma->sc_sq_avail);
1903e28b4fc6SChuck Lever 		__entry->depth = rdma->sc_sq_depth;
1904e28b4fc6SChuck Lever 		__entry->status = status;
1905e28b4fc6SChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1906e28b4fc6SChuck Lever 	),
1907e28b4fc6SChuck Lever 
1908e28b4fc6SChuck Lever 	TP_printk("addr=%s sc_sq_avail=%d/%d status=%d",
1909e28b4fc6SChuck Lever 		__get_str(addr), __entry->avail, __entry->depth,
1910e28b4fc6SChuck Lever 		__entry->status
1911e28b4fc6SChuck Lever 	)
1912e28b4fc6SChuck Lever );
1913e28b4fc6SChuck Lever 
1914e48f083eSChuck Lever #endif /* _TRACE_RPCRDMA_H */
1915e48f083eSChuck Lever 
1916e48f083eSChuck Lever #include <trace/define_trace.h>
1917