xref: /openbmc/linux/include/trace/events/rpcrdma.h (revision f7bd657b)
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>
16e48f083eSChuck Lever #include <trace/events/rdma.h>
17e48f083eSChuck Lever 
18ab03eff5SChuck Lever /**
19b4a7f91cSChuck Lever  ** Event classes
20b4a7f91cSChuck Lever  **/
21b4a7f91cSChuck Lever 
22f7bd657bSChuck Lever DECLARE_EVENT_CLASS(rpcrdma_completion_class,
23f7bd657bSChuck Lever 	TP_PROTO(
24f7bd657bSChuck Lever 		const struct ib_wc *wc,
25f7bd657bSChuck Lever 		const struct rpc_rdma_cid *cid
26f7bd657bSChuck Lever 	),
27f7bd657bSChuck Lever 
28f7bd657bSChuck Lever 	TP_ARGS(wc, cid),
29f7bd657bSChuck Lever 
30f7bd657bSChuck Lever 	TP_STRUCT__entry(
31f7bd657bSChuck Lever 		__field(u32, cq_id)
32f7bd657bSChuck Lever 		__field(int, completion_id)
33f7bd657bSChuck Lever 		__field(unsigned long, status)
34f7bd657bSChuck Lever 		__field(unsigned int, vendor_err)
35f7bd657bSChuck Lever 	),
36f7bd657bSChuck Lever 
37f7bd657bSChuck Lever 	TP_fast_assign(
38f7bd657bSChuck Lever 		__entry->cq_id = cid->ci_queue_id;
39f7bd657bSChuck Lever 		__entry->completion_id = cid->ci_completion_id;
40f7bd657bSChuck Lever 		__entry->status = wc->status;
41f7bd657bSChuck Lever 		if (wc->status)
42f7bd657bSChuck Lever 			__entry->vendor_err = wc->vendor_err;
43f7bd657bSChuck Lever 		else
44f7bd657bSChuck Lever 			__entry->vendor_err = 0;
45f7bd657bSChuck Lever 	),
46f7bd657bSChuck Lever 
47f7bd657bSChuck Lever 	TP_printk("cq.id=%u cid=%d status=%s (%lu/0x%x)",
48f7bd657bSChuck Lever 		__entry->cq_id, __entry->completion_id,
49f7bd657bSChuck Lever 		rdma_show_wc_status(__entry->status),
50f7bd657bSChuck Lever 		__entry->status, __entry->vendor_err
51f7bd657bSChuck Lever 	)
52f7bd657bSChuck Lever );
53f7bd657bSChuck Lever 
54f7bd657bSChuck Lever #define DEFINE_COMPLETION_EVENT(name)					\
55f7bd657bSChuck Lever 		DEFINE_EVENT(rpcrdma_completion_class, name,		\
56f7bd657bSChuck Lever 				TP_PROTO(				\
57f7bd657bSChuck Lever 					const struct ib_wc *wc,		\
58f7bd657bSChuck Lever 					const struct rpc_rdma_cid *cid	\
59f7bd657bSChuck Lever 				),					\
60f7bd657bSChuck Lever 				TP_ARGS(wc, cid))
61f7bd657bSChuck Lever 
62f7bd657bSChuck Lever DEFINE_COMPLETION_EVENT(dummy);
63f7bd657bSChuck Lever 
64b4a7f91cSChuck Lever DECLARE_EVENT_CLASS(xprtrdma_reply_event,
65b4a7f91cSChuck Lever 	TP_PROTO(
66b4a7f91cSChuck Lever 		const struct rpcrdma_rep *rep
67b4a7f91cSChuck Lever 	),
68b4a7f91cSChuck Lever 
69b4a7f91cSChuck Lever 	TP_ARGS(rep),
70b4a7f91cSChuck Lever 
71b4a7f91cSChuck Lever 	TP_STRUCT__entry(
72b4a7f91cSChuck Lever 		__field(const void *, rep)
73b4a7f91cSChuck Lever 		__field(const void *, r_xprt)
74b4a7f91cSChuck Lever 		__field(u32, xid)
75b4a7f91cSChuck Lever 		__field(u32, version)
76b4a7f91cSChuck Lever 		__field(u32, proc)
77b4a7f91cSChuck Lever 	),
78b4a7f91cSChuck Lever 
79b4a7f91cSChuck Lever 	TP_fast_assign(
80b4a7f91cSChuck Lever 		__entry->rep = rep;
81b4a7f91cSChuck Lever 		__entry->r_xprt = rep->rr_rxprt;
82b4a7f91cSChuck Lever 		__entry->xid = be32_to_cpu(rep->rr_xid);
83b4a7f91cSChuck Lever 		__entry->version = be32_to_cpu(rep->rr_vers);
84b4a7f91cSChuck Lever 		__entry->proc = be32_to_cpu(rep->rr_proc);
85b4a7f91cSChuck Lever 	),
86b4a7f91cSChuck Lever 
87b4a7f91cSChuck Lever 	TP_printk("rxprt %p xid=0x%08x rep=%p: version %u proc %u",
88b4a7f91cSChuck Lever 		__entry->r_xprt, __entry->xid, __entry->rep,
89b4a7f91cSChuck Lever 		__entry->version, __entry->proc
90b4a7f91cSChuck Lever 	)
91b4a7f91cSChuck Lever );
92b4a7f91cSChuck Lever 
93b4a7f91cSChuck Lever #define DEFINE_REPLY_EVENT(name)					\
94b4a7f91cSChuck Lever 		DEFINE_EVENT(xprtrdma_reply_event, name,		\
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 
26558f10ad4SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_frwr_done,
26658f10ad4SChuck Lever 	TP_PROTO(
26758f10ad4SChuck Lever 		const struct ib_wc *wc,
26858f10ad4SChuck Lever 		const struct rpcrdma_frwr *frwr
26958f10ad4SChuck Lever 	),
27058f10ad4SChuck Lever 
27158f10ad4SChuck Lever 	TP_ARGS(wc, frwr),
27258f10ad4SChuck Lever 
27358f10ad4SChuck Lever 	TP_STRUCT__entry(
27462a89501SChuck Lever 		__field(u32, mr_id)
27558f10ad4SChuck Lever 		__field(unsigned int, status)
27658f10ad4SChuck Lever 		__field(unsigned int, vendor_err)
27758f10ad4SChuck Lever 	),
27858f10ad4SChuck Lever 
27958f10ad4SChuck Lever 	TP_fast_assign(
28062a89501SChuck Lever 		__entry->mr_id = frwr->fr_mr->res.id;
28158f10ad4SChuck Lever 		__entry->status = wc->status;
28258f10ad4SChuck Lever 		__entry->vendor_err = __entry->status ? wc->vendor_err : 0;
28358f10ad4SChuck Lever 	),
28458f10ad4SChuck Lever 
28558f10ad4SChuck Lever 	TP_printk(
28662a89501SChuck Lever 		"mr.id=%u: %s (%u/0x%x)",
28762a89501SChuck Lever 		__entry->mr_id, rdma_show_wc_status(__entry->status),
28858f10ad4SChuck Lever 		__entry->status, __entry->vendor_err
28958f10ad4SChuck Lever 	)
29058f10ad4SChuck Lever );
29158f10ad4SChuck Lever 
29258f10ad4SChuck Lever #define DEFINE_FRWR_DONE_EVENT(name)					\
29358f10ad4SChuck Lever 		DEFINE_EVENT(xprtrdma_frwr_done, name,			\
29458f10ad4SChuck Lever 				TP_PROTO(				\
29558f10ad4SChuck Lever 					const struct ib_wc *wc,		\
29658f10ad4SChuck Lever 					const struct rpcrdma_frwr *frwr	\
29758f10ad4SChuck Lever 				),					\
29858f10ad4SChuck Lever 				TP_ARGS(wc, frwr))
29958f10ad4SChuck Lever 
300aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_BIDIRECTIONAL);
301aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_TO_DEVICE);
302aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_FROM_DEVICE);
303aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_NONE);
304aba11831SChuck Lever 
305aba11831SChuck Lever #define xprtrdma_show_direction(x)					\
306aba11831SChuck Lever 		__print_symbolic(x,					\
307aba11831SChuck Lever 				{ DMA_BIDIRECTIONAL, "BIDIR" },		\
308aba11831SChuck Lever 				{ DMA_TO_DEVICE, "TO_DEVICE" },		\
309aba11831SChuck Lever 				{ DMA_FROM_DEVICE, "FROM_DEVICE" },	\
310aba11831SChuck Lever 				{ DMA_NONE, "NONE" })
311aba11831SChuck Lever 
3122937fedeSChuck Lever DECLARE_EVENT_CLASS(xprtrdma_mr,
3132937fedeSChuck Lever 	TP_PROTO(
3142937fedeSChuck Lever 		const struct rpcrdma_mr *mr
3152937fedeSChuck Lever 	),
3162937fedeSChuck Lever 
3172937fedeSChuck Lever 	TP_ARGS(mr),
3182937fedeSChuck Lever 
3192937fedeSChuck Lever 	TP_STRUCT__entry(
32062a89501SChuck Lever 		__field(u32, mr_id)
32162a89501SChuck Lever 		__field(int, nents)
3222937fedeSChuck Lever 		__field(u32, handle)
3232937fedeSChuck Lever 		__field(u32, length)
3242937fedeSChuck Lever 		__field(u64, offset)
325aba11831SChuck Lever 		__field(u32, dir)
3262937fedeSChuck Lever 	),
3272937fedeSChuck Lever 
3282937fedeSChuck Lever 	TP_fast_assign(
32962a89501SChuck Lever 		__entry->mr_id  = mr->frwr.fr_mr->res.id;
33062a89501SChuck Lever 		__entry->nents  = mr->mr_nents;
3312937fedeSChuck Lever 		__entry->handle = mr->mr_handle;
3322937fedeSChuck Lever 		__entry->length = mr->mr_length;
3332937fedeSChuck Lever 		__entry->offset = mr->mr_offset;
334aba11831SChuck Lever 		__entry->dir    = mr->mr_dir;
3352937fedeSChuck Lever 	),
3362937fedeSChuck Lever 
33762a89501SChuck Lever 	TP_printk("mr.id=%u nents=%d %u@0x%016llx:0x%08x (%s)",
33862a89501SChuck Lever 		__entry->mr_id, __entry->nents, __entry->length,
339aba11831SChuck Lever 		(unsigned long long)__entry->offset, __entry->handle,
340aba11831SChuck Lever 		xprtrdma_show_direction(__entry->dir)
3412937fedeSChuck Lever 	)
3422937fedeSChuck Lever );
3432937fedeSChuck Lever 
3442937fedeSChuck Lever #define DEFINE_MR_EVENT(name) \
345d379eaa8SChuck Lever 		DEFINE_EVENT(xprtrdma_mr, xprtrdma_mr_##name, \
3462937fedeSChuck Lever 				TP_PROTO( \
3472937fedeSChuck Lever 					const struct rpcrdma_mr *mr \
3482937fedeSChuck Lever 				), \
3492937fedeSChuck Lever 				TP_ARGS(mr))
3502937fedeSChuck Lever 
351fc1eb807SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_cb_event,
352fc1eb807SChuck Lever 	TP_PROTO(
353fc1eb807SChuck Lever 		const struct rpc_rqst *rqst
354fc1eb807SChuck Lever 	),
355fc1eb807SChuck Lever 
356fc1eb807SChuck Lever 	TP_ARGS(rqst),
357fc1eb807SChuck Lever 
358fc1eb807SChuck Lever 	TP_STRUCT__entry(
359fc1eb807SChuck Lever 		__field(const void *, rqst)
360fc1eb807SChuck Lever 		__field(const void *, rep)
361fc1eb807SChuck Lever 		__field(const void *, req)
362fc1eb807SChuck Lever 		__field(u32, xid)
363fc1eb807SChuck Lever 	),
364fc1eb807SChuck Lever 
365fc1eb807SChuck Lever 	TP_fast_assign(
366fc1eb807SChuck Lever 		__entry->rqst = rqst;
367fc1eb807SChuck Lever 		__entry->req = rpcr_to_rdmar(rqst);
368fc1eb807SChuck Lever 		__entry->rep = rpcr_to_rdmar(rqst)->rl_reply;
369fc1eb807SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
370fc1eb807SChuck Lever 	),
371fc1eb807SChuck Lever 
372fc1eb807SChuck Lever 	TP_printk("xid=0x%08x, rqst=%p req=%p rep=%p",
373fc1eb807SChuck Lever 		__entry->xid, __entry->rqst, __entry->req, __entry->rep
374fc1eb807SChuck Lever 	)
375fc1eb807SChuck Lever );
376fc1eb807SChuck Lever 
377fc1eb807SChuck Lever #define DEFINE_CB_EVENT(name)						\
378fc1eb807SChuck Lever 		DEFINE_EVENT(xprtrdma_cb_event, name,			\
379fc1eb807SChuck Lever 				TP_PROTO(				\
380fc1eb807SChuck Lever 					const struct rpc_rqst *rqst	\
381fc1eb807SChuck Lever 				),					\
382fc1eb807SChuck Lever 				TP_ARGS(rqst))
383fc1eb807SChuck Lever 
384b4a7f91cSChuck Lever /**
385b4744e00SChuck Lever  ** Connection events
386b4744e00SChuck Lever  **/
387b4744e00SChuck Lever 
388f54c870dSChuck Lever TRACE_EVENT(xprtrdma_inline_thresh,
389f54c870dSChuck Lever 	TP_PROTO(
390745b734cSChuck Lever 		const struct rpcrdma_ep *ep
391f54c870dSChuck Lever 	),
392f54c870dSChuck Lever 
393745b734cSChuck Lever 	TP_ARGS(ep),
394f54c870dSChuck Lever 
395f54c870dSChuck Lever 	TP_STRUCT__entry(
396f54c870dSChuck Lever 		__field(unsigned int, inline_send)
397f54c870dSChuck Lever 		__field(unsigned int, inline_recv)
398f54c870dSChuck Lever 		__field(unsigned int, max_send)
399f54c870dSChuck Lever 		__field(unsigned int, max_recv)
400745b734cSChuck Lever 		__array(unsigned char, srcaddr, sizeof(struct sockaddr_in6))
401745b734cSChuck Lever 		__array(unsigned char, dstaddr, sizeof(struct sockaddr_in6))
402f54c870dSChuck Lever 	),
403f54c870dSChuck Lever 
404f54c870dSChuck Lever 	TP_fast_assign(
405745b734cSChuck Lever 		const struct rdma_cm_id *id = ep->re_id;
406f54c870dSChuck Lever 
40793aa8e0aSChuck Lever 		__entry->inline_send = ep->re_inline_send;
40893aa8e0aSChuck Lever 		__entry->inline_recv = ep->re_inline_recv;
40993aa8e0aSChuck Lever 		__entry->max_send = ep->re_max_inline_send;
41093aa8e0aSChuck Lever 		__entry->max_recv = ep->re_max_inline_recv;
411745b734cSChuck Lever 		memcpy(__entry->srcaddr, &id->route.addr.src_addr,
412745b734cSChuck Lever 		       sizeof(struct sockaddr_in6));
413745b734cSChuck Lever 		memcpy(__entry->dstaddr, &id->route.addr.dst_addr,
414745b734cSChuck Lever 		       sizeof(struct sockaddr_in6));
415f54c870dSChuck Lever 	),
416f54c870dSChuck Lever 
417745b734cSChuck Lever 	TP_printk("%pISpc -> %pISpc neg send/recv=%u/%u, calc send/recv=%u/%u",
418745b734cSChuck Lever 		__entry->srcaddr, __entry->dstaddr,
419f54c870dSChuck Lever 		__entry->inline_send, __entry->inline_recv,
420f54c870dSChuck Lever 		__entry->max_send, __entry->max_recv
421f54c870dSChuck Lever 	)
422f54c870dSChuck Lever );
423f54c870dSChuck Lever 
4247b020f17SChuck Lever DEFINE_CONN_EVENT(connect);
4257b020f17SChuck Lever DEFINE_CONN_EVENT(disconnect);
4267b020f17SChuck Lever 
4277b020f17SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_op_inject_dsc);
428a52c23b8SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_op_setport);
4297b020f17SChuck Lever 
4307b020f17SChuck Lever TRACE_EVENT(xprtrdma_op_connect,
431b4744e00SChuck Lever 	TP_PROTO(
432b4744e00SChuck Lever 		const struct rpcrdma_xprt *r_xprt,
4337b020f17SChuck Lever 		unsigned long delay
434b4744e00SChuck Lever 	),
435b4744e00SChuck Lever 
4367b020f17SChuck Lever 	TP_ARGS(r_xprt, delay),
437b4744e00SChuck Lever 
438b4744e00SChuck Lever 	TP_STRUCT__entry(
439b4744e00SChuck Lever 		__field(const void *, r_xprt)
4407b020f17SChuck Lever 		__field(unsigned long, delay)
441b4744e00SChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
442b4744e00SChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
443b4744e00SChuck Lever 	),
444b4744e00SChuck Lever 
445b4744e00SChuck Lever 	TP_fast_assign(
446b4744e00SChuck Lever 		__entry->r_xprt = r_xprt;
4477b020f17SChuck Lever 		__entry->delay = delay;
448b4744e00SChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
449b4744e00SChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
450b4744e00SChuck Lever 	),
451b4744e00SChuck Lever 
4527b020f17SChuck Lever 	TP_printk("peer=[%s]:%s r_xprt=%p delay=%lu",
4537b020f17SChuck Lever 		__get_str(addr), __get_str(port), __entry->r_xprt,
4547b020f17SChuck Lever 		__entry->delay
455b4744e00SChuck Lever 	)
456b4744e00SChuck Lever );
457b4744e00SChuck Lever 
458b4744e00SChuck Lever 
459675dd90aSChuck Lever TRACE_EVENT(xprtrdma_op_set_cto,
460675dd90aSChuck Lever 	TP_PROTO(
461675dd90aSChuck Lever 		const struct rpcrdma_xprt *r_xprt,
462675dd90aSChuck Lever 		unsigned long connect,
463675dd90aSChuck Lever 		unsigned long reconnect
464675dd90aSChuck Lever 	),
465675dd90aSChuck Lever 
466675dd90aSChuck Lever 	TP_ARGS(r_xprt, connect, reconnect),
467675dd90aSChuck Lever 
468675dd90aSChuck Lever 	TP_STRUCT__entry(
469675dd90aSChuck Lever 		__field(const void *, r_xprt)
470675dd90aSChuck Lever 		__field(unsigned long, connect)
471675dd90aSChuck Lever 		__field(unsigned long, reconnect)
472675dd90aSChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
473675dd90aSChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
474675dd90aSChuck Lever 	),
475675dd90aSChuck Lever 
476675dd90aSChuck Lever 	TP_fast_assign(
477675dd90aSChuck Lever 		__entry->r_xprt = r_xprt;
478675dd90aSChuck Lever 		__entry->connect = connect;
479675dd90aSChuck Lever 		__entry->reconnect = reconnect;
480675dd90aSChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
481675dd90aSChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
482675dd90aSChuck Lever 	),
483675dd90aSChuck Lever 
484675dd90aSChuck Lever 	TP_printk("peer=[%s]:%s r_xprt=%p: connect=%lu reconnect=%lu",
485675dd90aSChuck Lever 		__get_str(addr), __get_str(port), __entry->r_xprt,
486675dd90aSChuck Lever 		__entry->connect / HZ, __entry->reconnect / HZ
487675dd90aSChuck Lever 	)
488675dd90aSChuck Lever );
489675dd90aSChuck Lever 
490f9521d53SChuck Lever TRACE_EVENT(xprtrdma_qp_event,
491643cf323SChuck Lever 	TP_PROTO(
492745b734cSChuck Lever 		const struct rpcrdma_ep *ep,
493643cf323SChuck Lever 		const struct ib_event *event
494643cf323SChuck Lever 	),
495643cf323SChuck Lever 
496745b734cSChuck Lever 	TP_ARGS(ep, event),
497643cf323SChuck Lever 
498643cf323SChuck Lever 	TP_STRUCT__entry(
499745b734cSChuck Lever 		__field(unsigned long, event)
500643cf323SChuck Lever 		__string(name, event->device->name)
501745b734cSChuck Lever 		__array(unsigned char, srcaddr, sizeof(struct sockaddr_in6))
502745b734cSChuck Lever 		__array(unsigned char, dstaddr, sizeof(struct sockaddr_in6))
503643cf323SChuck Lever 	),
504643cf323SChuck Lever 
505643cf323SChuck Lever 	TP_fast_assign(
506745b734cSChuck Lever 		const struct rdma_cm_id *id = ep->re_id;
507745b734cSChuck Lever 
508643cf323SChuck Lever 		__entry->event = event->event;
509643cf323SChuck Lever 		__assign_str(name, event->device->name);
510745b734cSChuck Lever 		memcpy(__entry->srcaddr, &id->route.addr.src_addr,
511745b734cSChuck Lever 		       sizeof(struct sockaddr_in6));
512745b734cSChuck Lever 		memcpy(__entry->dstaddr, &id->route.addr.dst_addr,
513745b734cSChuck Lever 		       sizeof(struct sockaddr_in6));
514643cf323SChuck Lever 	),
515643cf323SChuck Lever 
516745b734cSChuck Lever 	TP_printk("%pISpc -> %pISpc device=%s %s (%lu)",
517745b734cSChuck Lever 		__entry->srcaddr, __entry->dstaddr, __get_str(name),
518745b734cSChuck Lever 		rdma_show_ib_event(__entry->event), __entry->event
519643cf323SChuck Lever 	)
520643cf323SChuck Lever );
521643cf323SChuck Lever 
522b4744e00SChuck Lever /**
523ab03eff5SChuck Lever  ** Call events
524ab03eff5SChuck Lever  **/
525ab03eff5SChuck Lever 
5261c443effSChuck Lever TRACE_EVENT(xprtrdma_createmrs,
5271c443effSChuck Lever 	TP_PROTO(
5281c443effSChuck Lever 		const struct rpcrdma_xprt *r_xprt,
5291c443effSChuck Lever 		unsigned int count
5301c443effSChuck Lever 	),
5311c443effSChuck Lever 
5321c443effSChuck Lever 	TP_ARGS(r_xprt, count),
5331c443effSChuck Lever 
5341c443effSChuck Lever 	TP_STRUCT__entry(
5351c443effSChuck Lever 		__field(const void *, r_xprt)
5366dc6ec9eSChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
5376dc6ec9eSChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
5381c443effSChuck Lever 		__field(unsigned int, count)
5391c443effSChuck Lever 	),
5401c443effSChuck Lever 
5411c443effSChuck Lever 	TP_fast_assign(
5421c443effSChuck Lever 		__entry->r_xprt = r_xprt;
5431c443effSChuck Lever 		__entry->count = count;
5446dc6ec9eSChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
5456dc6ec9eSChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
5461c443effSChuck Lever 	),
5471c443effSChuck Lever 
5486dc6ec9eSChuck Lever 	TP_printk("peer=[%s]:%s r_xprt=%p: created %u MRs",
5496dc6ec9eSChuck Lever 		__get_str(addr), __get_str(port), __entry->r_xprt,
5506dc6ec9eSChuck Lever 		__entry->count
5516dc6ec9eSChuck Lever 	)
5526dc6ec9eSChuck Lever );
5536dc6ec9eSChuck Lever 
5546dc6ec9eSChuck Lever TRACE_EVENT(xprtrdma_mr_get,
5556dc6ec9eSChuck Lever 	TP_PROTO(
5566dc6ec9eSChuck Lever 		const struct rpcrdma_req *req
5576dc6ec9eSChuck Lever 	),
5586dc6ec9eSChuck Lever 
5596dc6ec9eSChuck Lever 	TP_ARGS(req),
5606dc6ec9eSChuck Lever 
5616dc6ec9eSChuck Lever 	TP_STRUCT__entry(
5626dc6ec9eSChuck Lever 		__field(const void *, req)
5636dc6ec9eSChuck Lever 		__field(unsigned int, task_id)
5646dc6ec9eSChuck Lever 		__field(unsigned int, client_id)
5656dc6ec9eSChuck Lever 		__field(u32, xid)
5666dc6ec9eSChuck Lever 	),
5676dc6ec9eSChuck Lever 
5686dc6ec9eSChuck Lever 	TP_fast_assign(
5696dc6ec9eSChuck Lever 		const struct rpc_rqst *rqst = &req->rl_slot;
5706dc6ec9eSChuck Lever 
5716dc6ec9eSChuck Lever 		__entry->req = req;
5726dc6ec9eSChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
5736dc6ec9eSChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
5746dc6ec9eSChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
5756dc6ec9eSChuck Lever 	),
5766dc6ec9eSChuck Lever 
5776dc6ec9eSChuck Lever 	TP_printk("task:%u@%u xid=0x%08x req=%p",
5786dc6ec9eSChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
5796dc6ec9eSChuck Lever 		__entry->req
5801c443effSChuck Lever 	)
5811c443effSChuck Lever );
5821c443effSChuck Lever 
5833b39f52aSChuck Lever TRACE_EVENT(xprtrdma_nomrs,
5843b39f52aSChuck Lever 	TP_PROTO(
5853b39f52aSChuck Lever 		const struct rpcrdma_req *req
5863b39f52aSChuck Lever 	),
5873b39f52aSChuck Lever 
5883b39f52aSChuck Lever 	TP_ARGS(req),
5893b39f52aSChuck Lever 
5903b39f52aSChuck Lever 	TP_STRUCT__entry(
5913b39f52aSChuck Lever 		__field(const void *, req)
5923b39f52aSChuck Lever 		__field(unsigned int, task_id)
5933b39f52aSChuck Lever 		__field(unsigned int, client_id)
5943b39f52aSChuck Lever 		__field(u32, xid)
5953b39f52aSChuck Lever 	),
5963b39f52aSChuck Lever 
5973b39f52aSChuck Lever 	TP_fast_assign(
5983b39f52aSChuck Lever 		const struct rpc_rqst *rqst = &req->rl_slot;
5993b39f52aSChuck Lever 
6003b39f52aSChuck Lever 		__entry->req = req;
6013b39f52aSChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
6023b39f52aSChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
6033b39f52aSChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
6043b39f52aSChuck Lever 	),
6053b39f52aSChuck Lever 
6063b39f52aSChuck Lever 	TP_printk("task:%u@%u xid=0x%08x req=%p",
6073b39f52aSChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
6083b39f52aSChuck Lever 		__entry->req
6093b39f52aSChuck Lever 	)
6103b39f52aSChuck Lever );
6111c443effSChuck Lever 
612aba11831SChuck Lever DEFINE_RDCH_EVENT(read);
613aba11831SChuck Lever DEFINE_WRCH_EVENT(write);
614aba11831SChuck Lever DEFINE_WRCH_EVENT(reply);
61558f10ad4SChuck Lever 
616ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch);
617614f3c96SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch_pullup);
618614f3c96SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch_mapped);
619ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_readch);
620ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_areadch);
621ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_writech);
622ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_replych);
623ab03eff5SChuck Lever 
624ab03eff5SChuck Lever #define xprtrdma_show_chunktype(x)					\
625ab03eff5SChuck Lever 		__print_symbolic(x,					\
626ab03eff5SChuck Lever 				{ rpcrdma_noch, "inline" },		\
627614f3c96SChuck Lever 				{ rpcrdma_noch_pullup, "pullup" },	\
628614f3c96SChuck Lever 				{ rpcrdma_noch_mapped, "mapped" },	\
629ab03eff5SChuck Lever 				{ rpcrdma_readch, "read list" },	\
630ab03eff5SChuck Lever 				{ rpcrdma_areadch, "*read list" },	\
631ab03eff5SChuck Lever 				{ rpcrdma_writech, "write list" },	\
632ab03eff5SChuck Lever 				{ rpcrdma_replych, "reply chunk" })
633ab03eff5SChuck Lever 
634ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_marshal,
635ab03eff5SChuck Lever 	TP_PROTO(
6361310051cSChuck Lever 		const struct rpcrdma_req *req,
637ab03eff5SChuck Lever 		unsigned int rtype,
638ab03eff5SChuck Lever 		unsigned int wtype
639ab03eff5SChuck Lever 	),
640ab03eff5SChuck Lever 
6411310051cSChuck Lever 	TP_ARGS(req, rtype, wtype),
642ab03eff5SChuck Lever 
643ab03eff5SChuck Lever 	TP_STRUCT__entry(
644ab03eff5SChuck Lever 		__field(unsigned int, task_id)
645ab03eff5SChuck Lever 		__field(unsigned int, client_id)
646ab03eff5SChuck Lever 		__field(u32, xid)
647ab03eff5SChuck Lever 		__field(unsigned int, hdrlen)
648ab03eff5SChuck Lever 		__field(unsigned int, headlen)
649ab03eff5SChuck Lever 		__field(unsigned int, pagelen)
650ab03eff5SChuck Lever 		__field(unsigned int, taillen)
651ab03eff5SChuck Lever 		__field(unsigned int, rtype)
652ab03eff5SChuck Lever 		__field(unsigned int, wtype)
653ab03eff5SChuck Lever 	),
654ab03eff5SChuck Lever 
655ab03eff5SChuck Lever 	TP_fast_assign(
6561310051cSChuck Lever 		const struct rpc_rqst *rqst = &req->rl_slot;
6571310051cSChuck Lever 
658ab03eff5SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
659ab03eff5SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
660ab03eff5SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
6611310051cSChuck Lever 		__entry->hdrlen = req->rl_hdrbuf.len;
662ab03eff5SChuck Lever 		__entry->headlen = rqst->rq_snd_buf.head[0].iov_len;
663ab03eff5SChuck Lever 		__entry->pagelen = rqst->rq_snd_buf.page_len;
664ab03eff5SChuck Lever 		__entry->taillen = rqst->rq_snd_buf.tail[0].iov_len;
665ab03eff5SChuck Lever 		__entry->rtype = rtype;
666ab03eff5SChuck Lever 		__entry->wtype = wtype;
667ab03eff5SChuck Lever 	),
668ab03eff5SChuck Lever 
669ab03eff5SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x: hdr=%u xdr=%u/%u/%u %s/%s",
670ab03eff5SChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
671ab03eff5SChuck Lever 		__entry->hdrlen,
672ab03eff5SChuck Lever 		__entry->headlen, __entry->pagelen, __entry->taillen,
673ab03eff5SChuck Lever 		xprtrdma_show_chunktype(__entry->rtype),
674ab03eff5SChuck Lever 		xprtrdma_show_chunktype(__entry->wtype)
675ab03eff5SChuck Lever 	)
676ab03eff5SChuck Lever );
677ab03eff5SChuck Lever 
67817e4c443SChuck Lever TRACE_EVENT(xprtrdma_marshal_failed,
67917e4c443SChuck Lever 	TP_PROTO(const struct rpc_rqst *rqst,
68017e4c443SChuck Lever 		 int ret
68117e4c443SChuck Lever 	),
68217e4c443SChuck Lever 
68317e4c443SChuck Lever 	TP_ARGS(rqst, ret),
68417e4c443SChuck Lever 
68517e4c443SChuck Lever 	TP_STRUCT__entry(
68617e4c443SChuck Lever 		__field(unsigned int, task_id)
68717e4c443SChuck Lever 		__field(unsigned int, client_id)
68817e4c443SChuck Lever 		__field(u32, xid)
68917e4c443SChuck Lever 		__field(int, ret)
69017e4c443SChuck Lever 	),
69117e4c443SChuck Lever 
69217e4c443SChuck Lever 	TP_fast_assign(
69317e4c443SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
69417e4c443SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
69517e4c443SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
69617e4c443SChuck Lever 		__entry->ret = ret;
69717e4c443SChuck Lever 	),
69817e4c443SChuck Lever 
69917e4c443SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x: ret=%d",
70017e4c443SChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
70117e4c443SChuck Lever 		__entry->ret
70217e4c443SChuck Lever 	)
70317e4c443SChuck Lever );
70417e4c443SChuck Lever 
70505eb06d8SChuck Lever TRACE_EVENT(xprtrdma_prepsend_failed,
70605eb06d8SChuck Lever 	TP_PROTO(const struct rpc_rqst *rqst,
70705eb06d8SChuck Lever 		 int ret
70805eb06d8SChuck Lever 	),
70905eb06d8SChuck Lever 
71005eb06d8SChuck Lever 	TP_ARGS(rqst, ret),
71105eb06d8SChuck Lever 
71205eb06d8SChuck Lever 	TP_STRUCT__entry(
71305eb06d8SChuck Lever 		__field(unsigned int, task_id)
71405eb06d8SChuck Lever 		__field(unsigned int, client_id)
71505eb06d8SChuck Lever 		__field(u32, xid)
71605eb06d8SChuck Lever 		__field(int, ret)
71705eb06d8SChuck Lever 	),
71805eb06d8SChuck Lever 
71905eb06d8SChuck Lever 	TP_fast_assign(
72005eb06d8SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
72105eb06d8SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
72205eb06d8SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
72305eb06d8SChuck Lever 		__entry->ret = ret;
72405eb06d8SChuck Lever 	),
72505eb06d8SChuck Lever 
72605eb06d8SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x: ret=%d",
72705eb06d8SChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
72805eb06d8SChuck Lever 		__entry->ret
72905eb06d8SChuck Lever 	)
73005eb06d8SChuck Lever );
73105eb06d8SChuck Lever 
732ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_post_send,
733ab03eff5SChuck Lever 	TP_PROTO(
734bdb2ce82SChuck Lever 		const struct rpcrdma_req *req
735ab03eff5SChuck Lever 	),
736ab03eff5SChuck Lever 
737bdb2ce82SChuck Lever 	TP_ARGS(req),
738ab03eff5SChuck Lever 
739ab03eff5SChuck Lever 	TP_STRUCT__entry(
740ab03eff5SChuck Lever 		__field(const void *, req)
741cb586decSChuck Lever 		__field(const void *, sc)
7420c77668dSChuck Lever 		__field(unsigned int, task_id)
7430c77668dSChuck Lever 		__field(unsigned int, client_id)
744ab03eff5SChuck Lever 		__field(int, num_sge)
745470443e0SChuck Lever 		__field(int, signaled)
746ab03eff5SChuck Lever 	),
747ab03eff5SChuck Lever 
748ab03eff5SChuck Lever 	TP_fast_assign(
7490c77668dSChuck Lever 		const struct rpc_rqst *rqst = &req->rl_slot;
7500c77668dSChuck Lever 
7510c77668dSChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
75210694ac9SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client ?
75310694ac9SChuck Lever 				     rqst->rq_task->tk_client->cl_clid : -1;
754ab03eff5SChuck Lever 		__entry->req = req;
755cb586decSChuck Lever 		__entry->sc = req->rl_sendctx;
756dc15c3d5SChuck Lever 		__entry->num_sge = req->rl_wr.num_sge;
757dc15c3d5SChuck Lever 		__entry->signaled = req->rl_wr.send_flags & IB_SEND_SIGNALED;
758ab03eff5SChuck Lever 	),
759ab03eff5SChuck Lever 
760bdb2ce82SChuck Lever 	TP_printk("task:%u@%u req=%p sc=%p (%d SGE%s) %s",
7610c77668dSChuck Lever 		__entry->task_id, __entry->client_id,
762cb586decSChuck Lever 		__entry->req, __entry->sc, __entry->num_sge,
7630c77668dSChuck Lever 		(__entry->num_sge == 1 ? "" : "s"),
764bdb2ce82SChuck Lever 		(__entry->signaled ? "signaled" : "")
765ab03eff5SChuck Lever 	)
766ab03eff5SChuck Lever );
767ab03eff5SChuck Lever 
768b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_post_recv,
769b4a7f91cSChuck Lever 	TP_PROTO(
7702dfdcd88SChuck Lever 		const struct rpcrdma_rep *rep
771b4a7f91cSChuck Lever 	),
772b4a7f91cSChuck Lever 
7732dfdcd88SChuck Lever 	TP_ARGS(rep),
774b4a7f91cSChuck Lever 
775b4a7f91cSChuck Lever 	TP_STRUCT__entry(
7762dfdcd88SChuck Lever 		__field(const void *, rep)
777b4a7f91cSChuck Lever 	),
778b4a7f91cSChuck Lever 
779b4a7f91cSChuck Lever 	TP_fast_assign(
7802dfdcd88SChuck Lever 		__entry->rep = rep;
781b4a7f91cSChuck Lever 	),
782b4a7f91cSChuck Lever 
7832dfdcd88SChuck Lever 	TP_printk("rep=%p",
7842dfdcd88SChuck Lever 		__entry->rep
785b4a7f91cSChuck Lever 	)
786b4a7f91cSChuck Lever );
787b4a7f91cSChuck Lever 
7887c8d9e7cSChuck Lever TRACE_EVENT(xprtrdma_post_recvs,
7897c8d9e7cSChuck Lever 	TP_PROTO(
7907c8d9e7cSChuck Lever 		const struct rpcrdma_xprt *r_xprt,
7917c8d9e7cSChuck Lever 		unsigned int count,
7927c8d9e7cSChuck Lever 		int status
7937c8d9e7cSChuck Lever 	),
7947c8d9e7cSChuck Lever 
7957c8d9e7cSChuck Lever 	TP_ARGS(r_xprt, count, status),
7967c8d9e7cSChuck Lever 
7977c8d9e7cSChuck Lever 	TP_STRUCT__entry(
7987c8d9e7cSChuck Lever 		__field(const void *, r_xprt)
7997c8d9e7cSChuck Lever 		__field(unsigned int, count)
8007c8d9e7cSChuck Lever 		__field(int, status)
8017c8d9e7cSChuck Lever 		__field(int, posted)
8027c8d9e7cSChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
8037c8d9e7cSChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
8047c8d9e7cSChuck Lever 	),
8057c8d9e7cSChuck Lever 
8067c8d9e7cSChuck Lever 	TP_fast_assign(
8077c8d9e7cSChuck Lever 		__entry->r_xprt = r_xprt;
8087c8d9e7cSChuck Lever 		__entry->count = count;
8097c8d9e7cSChuck Lever 		__entry->status = status;
810e28ce900SChuck Lever 		__entry->posted = r_xprt->rx_ep->re_receive_count;
8117c8d9e7cSChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
8127c8d9e7cSChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
8137c8d9e7cSChuck Lever 	),
8147c8d9e7cSChuck Lever 
8157c8d9e7cSChuck Lever 	TP_printk("peer=[%s]:%s r_xprt=%p: %u new recvs, %d active (rc %d)",
8167c8d9e7cSChuck Lever 		__get_str(addr), __get_str(port), __entry->r_xprt,
8177c8d9e7cSChuck Lever 		__entry->count, __entry->posted, __entry->status
818ab03eff5SChuck Lever 	)
819ab03eff5SChuck Lever );
820ab03eff5SChuck Lever 
8214b93dab3SChuck Lever TRACE_EVENT(xprtrdma_post_linv,
8224b93dab3SChuck Lever 	TP_PROTO(
8234b93dab3SChuck Lever 		const struct rpcrdma_req *req,
8244b93dab3SChuck Lever 		int status
8254b93dab3SChuck Lever 	),
8264b93dab3SChuck Lever 
8274b93dab3SChuck Lever 	TP_ARGS(req, status),
8284b93dab3SChuck Lever 
8294b93dab3SChuck Lever 	TP_STRUCT__entry(
8304b93dab3SChuck Lever 		__field(const void *, req)
8314b93dab3SChuck Lever 		__field(int, status)
8324b93dab3SChuck Lever 		__field(u32, xid)
8334b93dab3SChuck Lever 	),
8344b93dab3SChuck Lever 
8354b93dab3SChuck Lever 	TP_fast_assign(
8364b93dab3SChuck Lever 		__entry->req = req;
8374b93dab3SChuck Lever 		__entry->status = status;
8384b93dab3SChuck Lever 		__entry->xid = be32_to_cpu(req->rl_slot.rq_xid);
8394b93dab3SChuck Lever 	),
8404b93dab3SChuck Lever 
8414b93dab3SChuck Lever 	TP_printk("req=%p xid=0x%08x status=%d",
8424b93dab3SChuck Lever 		__entry->req, __entry->xid, __entry->status
8434b93dab3SChuck Lever 	)
8444b93dab3SChuck Lever );
8454b93dab3SChuck Lever 
846ab03eff5SChuck Lever /**
847ab03eff5SChuck Lever  ** Completion events
848ab03eff5SChuck Lever  **/
849ab03eff5SChuck Lever 
850ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_wc_send,
851ab03eff5SChuck Lever 	TP_PROTO(
852ab03eff5SChuck Lever 		const struct rpcrdma_sendctx *sc,
853ab03eff5SChuck Lever 		const struct ib_wc *wc
854ab03eff5SChuck Lever 	),
855ab03eff5SChuck Lever 
856ab03eff5SChuck Lever 	TP_ARGS(sc, wc),
857ab03eff5SChuck Lever 
858ab03eff5SChuck Lever 	TP_STRUCT__entry(
859ab03eff5SChuck Lever 		__field(const void *, req)
860cb586decSChuck Lever 		__field(const void *, sc)
861ab03eff5SChuck Lever 		__field(unsigned int, unmap_count)
862ab03eff5SChuck Lever 		__field(unsigned int, status)
863ab03eff5SChuck Lever 		__field(unsigned int, vendor_err)
864ab03eff5SChuck Lever 	),
865ab03eff5SChuck Lever 
866ab03eff5SChuck Lever 	TP_fast_assign(
867ab03eff5SChuck Lever 		__entry->req = sc->sc_req;
868cb586decSChuck Lever 		__entry->sc = sc;
869ab03eff5SChuck Lever 		__entry->unmap_count = sc->sc_unmap_count;
870ab03eff5SChuck Lever 		__entry->status = wc->status;
871ab03eff5SChuck Lever 		__entry->vendor_err = __entry->status ? wc->vendor_err : 0;
872ab03eff5SChuck Lever 	),
873ab03eff5SChuck Lever 
874cb586decSChuck Lever 	TP_printk("req=%p sc=%p unmapped=%u: %s (%u/0x%x)",
875cb586decSChuck Lever 		__entry->req, __entry->sc, __entry->unmap_count,
876ab03eff5SChuck Lever 		rdma_show_wc_status(__entry->status),
877ab03eff5SChuck Lever 		__entry->status, __entry->vendor_err
878ab03eff5SChuck Lever 	)
879ab03eff5SChuck Lever );
880ab03eff5SChuck Lever 
881b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_wc_receive,
882b4a7f91cSChuck Lever 	TP_PROTO(
883b4a7f91cSChuck Lever 		const struct ib_wc *wc
884b4a7f91cSChuck Lever 	),
885b4a7f91cSChuck Lever 
8860e0b854cSChuck Lever 	TP_ARGS(wc),
887b4a7f91cSChuck Lever 
888b4a7f91cSChuck Lever 	TP_STRUCT__entry(
8892dfdcd88SChuck Lever 		__field(const void *, rep)
8900e0b854cSChuck Lever 		__field(u32, byte_len)
891b4a7f91cSChuck Lever 		__field(unsigned int, status)
8920e0b854cSChuck Lever 		__field(u32, vendor_err)
893b4a7f91cSChuck Lever 	),
894b4a7f91cSChuck Lever 
895b4a7f91cSChuck Lever 	TP_fast_assign(
8962dfdcd88SChuck Lever 		__entry->rep = container_of(wc->wr_cqe, struct rpcrdma_rep,
8972dfdcd88SChuck Lever 					    rr_cqe);
898b4a7f91cSChuck Lever 		__entry->status = wc->status;
8990e0b854cSChuck Lever 		if (wc->status) {
9000e0b854cSChuck Lever 			__entry->byte_len = 0;
9010e0b854cSChuck Lever 			__entry->vendor_err = wc->vendor_err;
9020e0b854cSChuck Lever 		} else {
9030e0b854cSChuck Lever 			__entry->byte_len = wc->byte_len;
9040e0b854cSChuck Lever 			__entry->vendor_err = 0;
9050e0b854cSChuck Lever 		}
906b4a7f91cSChuck Lever 	),
907b4a7f91cSChuck Lever 
9082dfdcd88SChuck Lever 	TP_printk("rep=%p %u bytes: %s (%u/0x%x)",
9092dfdcd88SChuck Lever 		__entry->rep, __entry->byte_len,
910b4a7f91cSChuck Lever 		rdma_show_wc_status(__entry->status),
911b4a7f91cSChuck Lever 		__entry->status, __entry->vendor_err
912b4a7f91cSChuck Lever 	)
913b4a7f91cSChuck Lever );
914b4a7f91cSChuck Lever 
91558f10ad4SChuck Lever DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_fastreg);
9162937fedeSChuck Lever DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_li);
9172937fedeSChuck Lever DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_li_wake);
918d8099fedSChuck Lever DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_li_done);
9192937fedeSChuck Lever 
92053b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_alloc,
92153b2c1cbSChuck Lever 	TP_PROTO(
92253b2c1cbSChuck Lever 		const struct rpcrdma_mr *mr,
92353b2c1cbSChuck Lever 		int rc
92453b2c1cbSChuck Lever 	),
92553b2c1cbSChuck Lever 
92653b2c1cbSChuck Lever 	TP_ARGS(mr, rc),
92753b2c1cbSChuck Lever 
92853b2c1cbSChuck Lever 	TP_STRUCT__entry(
92962a89501SChuck Lever 		__field(u32, mr_id)
93053b2c1cbSChuck Lever 		__field(int, rc)
93153b2c1cbSChuck Lever 	),
93253b2c1cbSChuck Lever 
93353b2c1cbSChuck Lever 	TP_fast_assign(
93462a89501SChuck Lever 		__entry->mr_id = mr->frwr.fr_mr->res.id;
93553b2c1cbSChuck Lever 		__entry->rc = rc;
93653b2c1cbSChuck Lever 	),
93753b2c1cbSChuck Lever 
93862a89501SChuck Lever 	TP_printk("mr.id=%u: rc=%d",
93962a89501SChuck Lever 		__entry->mr_id, __entry->rc
94053b2c1cbSChuck Lever 	)
94153b2c1cbSChuck Lever );
94253b2c1cbSChuck Lever 
94353b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_dereg,
94453b2c1cbSChuck Lever 	TP_PROTO(
94553b2c1cbSChuck Lever 		const struct rpcrdma_mr *mr,
94653b2c1cbSChuck Lever 		int rc
94753b2c1cbSChuck Lever 	),
94853b2c1cbSChuck Lever 
94953b2c1cbSChuck Lever 	TP_ARGS(mr, rc),
95053b2c1cbSChuck Lever 
95153b2c1cbSChuck Lever 	TP_STRUCT__entry(
95262a89501SChuck Lever 		__field(u32, mr_id)
95362a89501SChuck Lever 		__field(int, nents)
95453b2c1cbSChuck Lever 		__field(u32, handle)
95553b2c1cbSChuck Lever 		__field(u32, length)
95653b2c1cbSChuck Lever 		__field(u64, offset)
95753b2c1cbSChuck Lever 		__field(u32, dir)
95853b2c1cbSChuck Lever 		__field(int, rc)
95953b2c1cbSChuck Lever 	),
96053b2c1cbSChuck Lever 
96153b2c1cbSChuck Lever 	TP_fast_assign(
96262a89501SChuck Lever 		__entry->mr_id  = mr->frwr.fr_mr->res.id;
96362a89501SChuck Lever 		__entry->nents  = mr->mr_nents;
96453b2c1cbSChuck Lever 		__entry->handle = mr->mr_handle;
96553b2c1cbSChuck Lever 		__entry->length = mr->mr_length;
96653b2c1cbSChuck Lever 		__entry->offset = mr->mr_offset;
96753b2c1cbSChuck Lever 		__entry->dir    = mr->mr_dir;
96853b2c1cbSChuck Lever 		__entry->rc	= rc;
96953b2c1cbSChuck Lever 	),
97053b2c1cbSChuck Lever 
97162a89501SChuck Lever 	TP_printk("mr.id=%u nents=%d %u@0x%016llx:0x%08x (%s): rc=%d",
97262a89501SChuck Lever 		__entry->mr_id, __entry->nents, __entry->length,
97353b2c1cbSChuck Lever 		(unsigned long long)__entry->offset, __entry->handle,
97453b2c1cbSChuck Lever 		xprtrdma_show_direction(__entry->dir),
97553b2c1cbSChuck Lever 		__entry->rc
97653b2c1cbSChuck Lever 	)
97753b2c1cbSChuck Lever );
97853b2c1cbSChuck Lever 
97953b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_sgerr,
98053b2c1cbSChuck Lever 	TP_PROTO(
98153b2c1cbSChuck Lever 		const struct rpcrdma_mr *mr,
98253b2c1cbSChuck Lever 		int sg_nents
98353b2c1cbSChuck Lever 	),
98453b2c1cbSChuck Lever 
98553b2c1cbSChuck Lever 	TP_ARGS(mr, sg_nents),
98653b2c1cbSChuck Lever 
98753b2c1cbSChuck Lever 	TP_STRUCT__entry(
98862a89501SChuck Lever 		__field(u32, mr_id)
98953b2c1cbSChuck Lever 		__field(u64, addr)
99053b2c1cbSChuck Lever 		__field(u32, dir)
99153b2c1cbSChuck Lever 		__field(int, nents)
99253b2c1cbSChuck Lever 	),
99353b2c1cbSChuck Lever 
99453b2c1cbSChuck Lever 	TP_fast_assign(
99562a89501SChuck Lever 		__entry->mr_id = mr->frwr.fr_mr->res.id;
99653b2c1cbSChuck Lever 		__entry->addr = mr->mr_sg->dma_address;
99753b2c1cbSChuck Lever 		__entry->dir = mr->mr_dir;
99853b2c1cbSChuck Lever 		__entry->nents = sg_nents;
99953b2c1cbSChuck Lever 	),
100053b2c1cbSChuck Lever 
100162a89501SChuck Lever 	TP_printk("mr.id=%u DMA addr=0x%llx (%s) sg_nents=%d",
100262a89501SChuck Lever 		__entry->mr_id, __entry->addr,
100353b2c1cbSChuck Lever 		xprtrdma_show_direction(__entry->dir),
100453b2c1cbSChuck Lever 		__entry->nents
100553b2c1cbSChuck Lever 	)
100653b2c1cbSChuck Lever );
100753b2c1cbSChuck Lever 
100853b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_maperr,
100953b2c1cbSChuck Lever 	TP_PROTO(
101053b2c1cbSChuck Lever 		const struct rpcrdma_mr *mr,
101153b2c1cbSChuck Lever 		int num_mapped
101253b2c1cbSChuck Lever 	),
101353b2c1cbSChuck Lever 
101453b2c1cbSChuck Lever 	TP_ARGS(mr, num_mapped),
101553b2c1cbSChuck Lever 
101653b2c1cbSChuck Lever 	TP_STRUCT__entry(
101762a89501SChuck Lever 		__field(u32, mr_id)
101853b2c1cbSChuck Lever 		__field(u64, addr)
101953b2c1cbSChuck Lever 		__field(u32, dir)
102053b2c1cbSChuck Lever 		__field(int, num_mapped)
102153b2c1cbSChuck Lever 		__field(int, nents)
102253b2c1cbSChuck Lever 	),
102353b2c1cbSChuck Lever 
102453b2c1cbSChuck Lever 	TP_fast_assign(
102562a89501SChuck Lever 		__entry->mr_id = mr->frwr.fr_mr->res.id;
102653b2c1cbSChuck Lever 		__entry->addr = mr->mr_sg->dma_address;
102753b2c1cbSChuck Lever 		__entry->dir = mr->mr_dir;
102853b2c1cbSChuck Lever 		__entry->num_mapped = num_mapped;
102953b2c1cbSChuck Lever 		__entry->nents = mr->mr_nents;
103053b2c1cbSChuck Lever 	),
103153b2c1cbSChuck Lever 
103262a89501SChuck Lever 	TP_printk("mr.id=%u DMA addr=0x%llx (%s) nents=%d of %d",
103362a89501SChuck Lever 		__entry->mr_id, __entry->addr,
103453b2c1cbSChuck Lever 		xprtrdma_show_direction(__entry->dir),
103553b2c1cbSChuck Lever 		__entry->num_mapped, __entry->nents
103653b2c1cbSChuck Lever 	)
103753b2c1cbSChuck Lever );
103853b2c1cbSChuck Lever 
1039d379eaa8SChuck Lever DEFINE_MR_EVENT(localinv);
1040d379eaa8SChuck Lever DEFINE_MR_EVENT(map);
1041d379eaa8SChuck Lever DEFINE_MR_EVENT(unmap);
104262a89501SChuck Lever DEFINE_MR_EVENT(reminv);
1043d379eaa8SChuck Lever DEFINE_MR_EVENT(recycle);
104458f10ad4SChuck Lever 
104553b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_dma_maperr,
104653b2c1cbSChuck Lever 	TP_PROTO(
104753b2c1cbSChuck Lever 		u64 addr
104853b2c1cbSChuck Lever 	),
104953b2c1cbSChuck Lever 
105053b2c1cbSChuck Lever 	TP_ARGS(addr),
105153b2c1cbSChuck Lever 
105253b2c1cbSChuck Lever 	TP_STRUCT__entry(
105353b2c1cbSChuck Lever 		__field(u64, addr)
105453b2c1cbSChuck Lever 	),
105553b2c1cbSChuck Lever 
105653b2c1cbSChuck Lever 	TP_fast_assign(
105753b2c1cbSChuck Lever 		__entry->addr = addr;
105853b2c1cbSChuck Lever 	),
105953b2c1cbSChuck Lever 
106053b2c1cbSChuck Lever 	TP_printk("dma addr=0x%llx\n", __entry->addr)
106153b2c1cbSChuck Lever );
106253b2c1cbSChuck Lever 
1063b4a7f91cSChuck Lever /**
1064b4a7f91cSChuck Lever  ** Reply events
1065b4a7f91cSChuck Lever  **/
1066b4a7f91cSChuck Lever 
1067b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_reply,
1068b4a7f91cSChuck Lever 	TP_PROTO(
1069b4a7f91cSChuck Lever 		const struct rpc_task *task,
1070b4a7f91cSChuck Lever 		const struct rpcrdma_rep *rep,
1071b4a7f91cSChuck Lever 		const struct rpcrdma_req *req,
1072b4a7f91cSChuck Lever 		unsigned int credits
1073b4a7f91cSChuck Lever 	),
1074b4a7f91cSChuck Lever 
1075b4a7f91cSChuck Lever 	TP_ARGS(task, rep, req, credits),
1076b4a7f91cSChuck Lever 
1077b4a7f91cSChuck Lever 	TP_STRUCT__entry(
1078b4a7f91cSChuck Lever 		__field(unsigned int, task_id)
1079b4a7f91cSChuck Lever 		__field(unsigned int, client_id)
1080b4a7f91cSChuck Lever 		__field(const void *, rep)
1081b4a7f91cSChuck Lever 		__field(const void *, req)
1082b4a7f91cSChuck Lever 		__field(u32, xid)
1083b4a7f91cSChuck Lever 		__field(unsigned int, credits)
1084b4a7f91cSChuck Lever 	),
1085b4a7f91cSChuck Lever 
1086b4a7f91cSChuck Lever 	TP_fast_assign(
1087b4a7f91cSChuck Lever 		__entry->task_id = task->tk_pid;
1088b4a7f91cSChuck Lever 		__entry->client_id = task->tk_client->cl_clid;
1089b4a7f91cSChuck Lever 		__entry->rep = rep;
1090b4a7f91cSChuck Lever 		__entry->req = req;
1091b4a7f91cSChuck Lever 		__entry->xid = be32_to_cpu(rep->rr_xid);
1092b4a7f91cSChuck Lever 		__entry->credits = credits;
1093b4a7f91cSChuck Lever 	),
1094b4a7f91cSChuck Lever 
1095b4a7f91cSChuck Lever 	TP_printk("task:%u@%u xid=0x%08x, %u credits, rep=%p -> req=%p",
1096b4a7f91cSChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
1097b4a7f91cSChuck Lever 		__entry->credits, __entry->rep, __entry->req
1098b4a7f91cSChuck Lever 	)
1099b4a7f91cSChuck Lever );
1100b4a7f91cSChuck Lever 
1101b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_defer_cmp,
1102b4a7f91cSChuck Lever 	TP_PROTO(
1103b4a7f91cSChuck Lever 		const struct rpcrdma_rep *rep
1104b4a7f91cSChuck Lever 	),
1105b4a7f91cSChuck Lever 
1106b4a7f91cSChuck Lever 	TP_ARGS(rep),
1107b4a7f91cSChuck Lever 
1108b4a7f91cSChuck Lever 	TP_STRUCT__entry(
1109b4a7f91cSChuck Lever 		__field(unsigned int, task_id)
1110b4a7f91cSChuck Lever 		__field(unsigned int, client_id)
1111b4a7f91cSChuck Lever 		__field(const void *, rep)
1112b4a7f91cSChuck Lever 		__field(u32, xid)
1113b4a7f91cSChuck Lever 	),
1114b4a7f91cSChuck Lever 
1115b4a7f91cSChuck Lever 	TP_fast_assign(
1116b4a7f91cSChuck Lever 		__entry->task_id = rep->rr_rqst->rq_task->tk_pid;
1117b4a7f91cSChuck Lever 		__entry->client_id = rep->rr_rqst->rq_task->tk_client->cl_clid;
1118b4a7f91cSChuck Lever 		__entry->rep = rep;
1119b4a7f91cSChuck Lever 		__entry->xid = be32_to_cpu(rep->rr_xid);
1120b4a7f91cSChuck Lever 	),
1121b4a7f91cSChuck Lever 
1122b4a7f91cSChuck Lever 	TP_printk("task:%u@%u xid=0x%08x rep=%p",
1123b4a7f91cSChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
1124b4a7f91cSChuck Lever 		__entry->rep
1125b4a7f91cSChuck Lever 	)
1126b4a7f91cSChuck Lever );
1127b4a7f91cSChuck Lever 
1128b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_vers);
1129b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_rqst);
1130b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_short);
1131b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_hdr);
1132b4a7f91cSChuck Lever 
1133e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_fixup,
1134e11b7c96SChuck Lever 	TP_PROTO(
1135e11b7c96SChuck Lever 		const struct rpc_rqst *rqst,
1136d4957f01SChuck Lever 		unsigned long fixup
1137e11b7c96SChuck Lever 	),
1138e11b7c96SChuck Lever 
1139d4957f01SChuck Lever 	TP_ARGS(rqst, fixup),
1140e11b7c96SChuck Lever 
1141e11b7c96SChuck Lever 	TP_STRUCT__entry(
1142e11b7c96SChuck Lever 		__field(unsigned int, task_id)
1143e11b7c96SChuck Lever 		__field(unsigned int, client_id)
1144d4957f01SChuck Lever 		__field(unsigned long, fixup)
1145d4957f01SChuck Lever 		__field(size_t, headlen)
1146d4957f01SChuck Lever 		__field(unsigned int, pagelen)
1147d4957f01SChuck Lever 		__field(size_t, taillen)
1148e11b7c96SChuck Lever 	),
1149e11b7c96SChuck Lever 
1150e11b7c96SChuck Lever 	TP_fast_assign(
1151e11b7c96SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
1152e11b7c96SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
1153d4957f01SChuck Lever 		__entry->fixup = fixup;
1154d4957f01SChuck Lever 		__entry->headlen = rqst->rq_rcv_buf.head[0].iov_len;
1155d4957f01SChuck Lever 		__entry->pagelen = rqst->rq_rcv_buf.page_len;
1156d4957f01SChuck Lever 		__entry->taillen = rqst->rq_rcv_buf.tail[0].iov_len;
1157e11b7c96SChuck Lever 	),
1158e11b7c96SChuck Lever 
1159d4957f01SChuck Lever 	TP_printk("task:%u@%u fixup=%lu xdr=%zu/%u/%zu",
1160d4957f01SChuck Lever 		__entry->task_id, __entry->client_id, __entry->fixup,
1161d4957f01SChuck Lever 		__entry->headlen, __entry->pagelen, __entry->taillen
1162e11b7c96SChuck Lever 	)
1163e11b7c96SChuck Lever );
1164e11b7c96SChuck Lever 
1165e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_decode_seg,
1166e11b7c96SChuck Lever 	TP_PROTO(
1167e11b7c96SChuck Lever 		u32 handle,
1168e11b7c96SChuck Lever 		u32 length,
1169e11b7c96SChuck Lever 		u64 offset
1170e11b7c96SChuck Lever 	),
1171e11b7c96SChuck Lever 
1172e11b7c96SChuck Lever 	TP_ARGS(handle, length, offset),
1173e11b7c96SChuck Lever 
1174e11b7c96SChuck Lever 	TP_STRUCT__entry(
1175e11b7c96SChuck Lever 		__field(u32, handle)
1176e11b7c96SChuck Lever 		__field(u32, length)
1177e11b7c96SChuck Lever 		__field(u64, offset)
1178e11b7c96SChuck Lever 	),
1179e11b7c96SChuck Lever 
1180e11b7c96SChuck Lever 	TP_fast_assign(
1181e11b7c96SChuck Lever 		__entry->handle = handle;
1182e11b7c96SChuck Lever 		__entry->length = length;
1183e11b7c96SChuck Lever 		__entry->offset = offset;
1184e11b7c96SChuck Lever 	),
1185e11b7c96SChuck Lever 
1186e11b7c96SChuck Lever 	TP_printk("%u@0x%016llx:0x%08x",
1187e11b7c96SChuck Lever 		__entry->length, (unsigned long long)__entry->offset,
1188e11b7c96SChuck Lever 		__entry->handle
1189e11b7c96SChuck Lever 	)
1190e11b7c96SChuck Lever );
1191e11b7c96SChuck Lever 
1192fc1eb807SChuck Lever /**
1193ae724676SChuck Lever  ** Allocation/release of rpcrdma_reqs and rpcrdma_reps
1194ae724676SChuck Lever  **/
1195ae724676SChuck Lever 
1196395069fcSChuck Lever TRACE_EVENT(xprtrdma_op_allocate,
1197ae724676SChuck Lever 	TP_PROTO(
1198ae724676SChuck Lever 		const struct rpc_task *task,
1199ae724676SChuck Lever 		const struct rpcrdma_req *req
1200ae724676SChuck Lever 	),
1201ae724676SChuck Lever 
1202ae724676SChuck Lever 	TP_ARGS(task, req),
1203ae724676SChuck Lever 
1204ae724676SChuck Lever 	TP_STRUCT__entry(
1205ae724676SChuck Lever 		__field(unsigned int, task_id)
1206ae724676SChuck Lever 		__field(unsigned int, client_id)
1207ae724676SChuck Lever 		__field(const void *, req)
1208ae724676SChuck Lever 		__field(size_t, callsize)
1209ae724676SChuck Lever 		__field(size_t, rcvsize)
1210ae724676SChuck Lever 	),
1211ae724676SChuck Lever 
1212ae724676SChuck Lever 	TP_fast_assign(
1213ae724676SChuck Lever 		__entry->task_id = task->tk_pid;
1214ae724676SChuck Lever 		__entry->client_id = task->tk_client->cl_clid;
1215ae724676SChuck Lever 		__entry->req = req;
1216ae724676SChuck Lever 		__entry->callsize = task->tk_rqstp->rq_callsize;
1217ae724676SChuck Lever 		__entry->rcvsize = task->tk_rqstp->rq_rcvsize;
1218ae724676SChuck Lever 	),
1219ae724676SChuck Lever 
12207c8d9e7cSChuck Lever 	TP_printk("task:%u@%u req=%p (%zu, %zu)",
1221ae724676SChuck Lever 		__entry->task_id, __entry->client_id,
12227c8d9e7cSChuck Lever 		__entry->req, __entry->callsize, __entry->rcvsize
1223ae724676SChuck Lever 	)
1224ae724676SChuck Lever );
1225ae724676SChuck Lever 
1226395069fcSChuck Lever TRACE_EVENT(xprtrdma_op_free,
1227ae724676SChuck Lever 	TP_PROTO(
1228ae724676SChuck Lever 		const struct rpc_task *task,
1229ae724676SChuck Lever 		const struct rpcrdma_req *req
1230ae724676SChuck Lever 	),
1231ae724676SChuck Lever 
1232ae724676SChuck Lever 	TP_ARGS(task, req),
1233ae724676SChuck Lever 
1234ae724676SChuck Lever 	TP_STRUCT__entry(
1235ae724676SChuck Lever 		__field(unsigned int, task_id)
1236ae724676SChuck Lever 		__field(unsigned int, client_id)
1237ae724676SChuck Lever 		__field(const void *, req)
1238ae724676SChuck Lever 		__field(const void *, rep)
1239ae724676SChuck Lever 	),
1240ae724676SChuck Lever 
1241ae724676SChuck Lever 	TP_fast_assign(
1242ae724676SChuck Lever 		__entry->task_id = task->tk_pid;
1243ae724676SChuck Lever 		__entry->client_id = task->tk_client->cl_clid;
1244ae724676SChuck Lever 		__entry->req = req;
1245ae724676SChuck Lever 		__entry->rep = req->rl_reply;
1246ae724676SChuck Lever 	),
1247ae724676SChuck Lever 
1248ae724676SChuck Lever 	TP_printk("task:%u@%u req=%p rep=%p",
1249ae724676SChuck Lever 		__entry->task_id, __entry->client_id,
1250ae724676SChuck Lever 		__entry->req, __entry->rep
1251ae724676SChuck Lever 	)
1252ae724676SChuck Lever );
1253ae724676SChuck Lever 
1254ae724676SChuck Lever /**
1255fc1eb807SChuck Lever  ** Callback events
1256fc1eb807SChuck Lever  **/
1257fc1eb807SChuck Lever 
1258fc1eb807SChuck Lever TRACE_EVENT(xprtrdma_cb_setup,
1259fc1eb807SChuck Lever 	TP_PROTO(
1260fc1eb807SChuck Lever 		const struct rpcrdma_xprt *r_xprt,
1261fc1eb807SChuck Lever 		unsigned int reqs
1262fc1eb807SChuck Lever 	),
1263fc1eb807SChuck Lever 
1264fc1eb807SChuck Lever 	TP_ARGS(r_xprt, reqs),
1265fc1eb807SChuck Lever 
1266fc1eb807SChuck Lever 	TP_STRUCT__entry(
1267fc1eb807SChuck Lever 		__field(const void *, r_xprt)
1268fc1eb807SChuck Lever 		__field(unsigned int, reqs)
1269fc1eb807SChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
1270fc1eb807SChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
1271fc1eb807SChuck Lever 	),
1272fc1eb807SChuck Lever 
1273fc1eb807SChuck Lever 	TP_fast_assign(
1274fc1eb807SChuck Lever 		__entry->r_xprt = r_xprt;
1275fc1eb807SChuck Lever 		__entry->reqs = reqs;
1276fc1eb807SChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
1277fc1eb807SChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
1278fc1eb807SChuck Lever 	),
1279fc1eb807SChuck Lever 
1280fc1eb807SChuck Lever 	TP_printk("peer=[%s]:%s r_xprt=%p: %u reqs",
1281fc1eb807SChuck Lever 		__get_str(addr), __get_str(port),
1282fc1eb807SChuck Lever 		__entry->r_xprt, __entry->reqs
1283fc1eb807SChuck Lever 	)
1284fc1eb807SChuck Lever );
1285fc1eb807SChuck Lever 
1286fc1eb807SChuck Lever DEFINE_CB_EVENT(xprtrdma_cb_call);
1287fc1eb807SChuck Lever DEFINE_CB_EVENT(xprtrdma_cb_reply);
1288fc1eb807SChuck Lever 
128907e10308SChuck Lever TRACE_EVENT(xprtrdma_leaked_rep,
129007e10308SChuck Lever 	TP_PROTO(
129107e10308SChuck Lever 		const struct rpc_rqst *rqst,
129207e10308SChuck Lever 		const struct rpcrdma_rep *rep
129307e10308SChuck Lever 	),
129407e10308SChuck Lever 
129507e10308SChuck Lever 	TP_ARGS(rqst, rep),
129607e10308SChuck Lever 
129707e10308SChuck Lever 	TP_STRUCT__entry(
129807e10308SChuck Lever 		__field(unsigned int, task_id)
129907e10308SChuck Lever 		__field(unsigned int, client_id)
130007e10308SChuck Lever 		__field(u32, xid)
130107e10308SChuck Lever 		__field(const void *, rep)
130207e10308SChuck Lever 	),
130307e10308SChuck Lever 
130407e10308SChuck Lever 	TP_fast_assign(
130507e10308SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
130607e10308SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
130707e10308SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
130807e10308SChuck Lever 		__entry->rep = rep;
130907e10308SChuck Lever 	),
131007e10308SChuck Lever 
131107e10308SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x rep=%p",
131207e10308SChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
131307e10308SChuck Lever 		__entry->rep
131407e10308SChuck Lever 	)
131507e10308SChuck Lever );
131607e10308SChuck Lever 
131798895edbSChuck Lever /**
131898895edbSChuck Lever  ** Server-side RPC/RDMA events
131998895edbSChuck Lever  **/
132098895edbSChuck Lever 
1321e979a173SChuck Lever DECLARE_EVENT_CLASS(svcrdma_accept_class,
1322e979a173SChuck Lever 	TP_PROTO(
1323e979a173SChuck Lever 		const struct svcxprt_rdma *rdma,
1324e979a173SChuck Lever 		long status
1325e979a173SChuck Lever 	),
1326e979a173SChuck Lever 
1327e979a173SChuck Lever 	TP_ARGS(rdma, status),
1328e979a173SChuck Lever 
1329e979a173SChuck Lever 	TP_STRUCT__entry(
1330e979a173SChuck Lever 		__field(long, status)
1331e979a173SChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1332e979a173SChuck Lever 	),
1333e979a173SChuck Lever 
1334e979a173SChuck Lever 	TP_fast_assign(
1335e979a173SChuck Lever 		__entry->status = status;
1336e979a173SChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1337e979a173SChuck Lever 	),
1338e979a173SChuck Lever 
1339e979a173SChuck Lever 	TP_printk("addr=%s status=%ld",
1340e979a173SChuck Lever 		__get_str(addr), __entry->status
1341e979a173SChuck Lever 	)
1342e979a173SChuck Lever );
1343e979a173SChuck Lever 
1344e979a173SChuck Lever #define DEFINE_ACCEPT_EVENT(name) \
1345e979a173SChuck Lever 		DEFINE_EVENT(svcrdma_accept_class, svcrdma_##name##_err, \
1346e979a173SChuck Lever 				TP_PROTO( \
1347e979a173SChuck Lever 					const struct svcxprt_rdma *rdma, \
1348e979a173SChuck Lever 					long status \
1349e979a173SChuck Lever 				), \
1350e979a173SChuck Lever 				TP_ARGS(rdma, status))
1351e979a173SChuck Lever 
1352e979a173SChuck Lever DEFINE_ACCEPT_EVENT(pd);
1353e979a173SChuck Lever DEFINE_ACCEPT_EVENT(qp);
1354e979a173SChuck Lever DEFINE_ACCEPT_EVENT(fabric);
1355e979a173SChuck Lever DEFINE_ACCEPT_EVENT(initdepth);
1356e979a173SChuck Lever DEFINE_ACCEPT_EVENT(accept);
1357e979a173SChuck Lever 
135898895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_MSG);
135998895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_NOMSG);
136098895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_MSGP);
136198895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_DONE);
136298895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_ERROR);
136398895edbSChuck Lever 
136498895edbSChuck Lever #define show_rpcrdma_proc(x)						\
136598895edbSChuck Lever 		__print_symbolic(x,					\
136698895edbSChuck Lever 				{ RDMA_MSG, "RDMA_MSG" },		\
136798895edbSChuck Lever 				{ RDMA_NOMSG, "RDMA_NOMSG" },		\
136898895edbSChuck Lever 				{ RDMA_MSGP, "RDMA_MSGP" },		\
136998895edbSChuck Lever 				{ RDMA_DONE, "RDMA_DONE" },		\
137098895edbSChuck Lever 				{ RDMA_ERROR, "RDMA_ERROR" })
137198895edbSChuck Lever 
137298895edbSChuck Lever TRACE_EVENT(svcrdma_decode_rqst,
137398895edbSChuck Lever 	TP_PROTO(
137498895edbSChuck Lever 		__be32 *p,
137598895edbSChuck Lever 		unsigned int hdrlen
137698895edbSChuck Lever 	),
137798895edbSChuck Lever 
137898895edbSChuck Lever 	TP_ARGS(p, hdrlen),
137998895edbSChuck Lever 
138098895edbSChuck Lever 	TP_STRUCT__entry(
138198895edbSChuck Lever 		__field(u32, xid)
138298895edbSChuck Lever 		__field(u32, vers)
138398895edbSChuck Lever 		__field(u32, proc)
138498895edbSChuck Lever 		__field(u32, credits)
138598895edbSChuck Lever 		__field(unsigned int, hdrlen)
138698895edbSChuck Lever 	),
138798895edbSChuck Lever 
138898895edbSChuck Lever 	TP_fast_assign(
138998895edbSChuck Lever 		__entry->xid = be32_to_cpup(p++);
139098895edbSChuck Lever 		__entry->vers = be32_to_cpup(p++);
139198895edbSChuck Lever 		__entry->credits = be32_to_cpup(p++);
139298895edbSChuck Lever 		__entry->proc = be32_to_cpup(p);
139398895edbSChuck Lever 		__entry->hdrlen = hdrlen;
139498895edbSChuck Lever 	),
139598895edbSChuck Lever 
139698895edbSChuck Lever 	TP_printk("xid=0x%08x vers=%u credits=%u proc=%s hdrlen=%u",
139798895edbSChuck Lever 		__entry->xid, __entry->vers, __entry->credits,
139898895edbSChuck Lever 		show_rpcrdma_proc(__entry->proc), __entry->hdrlen)
139998895edbSChuck Lever );
140098895edbSChuck Lever 
140127ce6294SChuck Lever TRACE_EVENT(svcrdma_decode_short_err,
140298895edbSChuck Lever 	TP_PROTO(
140398895edbSChuck Lever 		unsigned int hdrlen
140498895edbSChuck Lever 	),
140598895edbSChuck Lever 
140698895edbSChuck Lever 	TP_ARGS(hdrlen),
140798895edbSChuck Lever 
140898895edbSChuck Lever 	TP_STRUCT__entry(
140998895edbSChuck Lever 		__field(unsigned int, hdrlen)
141098895edbSChuck Lever 	),
141198895edbSChuck Lever 
141298895edbSChuck Lever 	TP_fast_assign(
141398895edbSChuck Lever 		__entry->hdrlen = hdrlen;
141498895edbSChuck Lever 	),
141598895edbSChuck Lever 
141698895edbSChuck Lever 	TP_printk("hdrlen=%u", __entry->hdrlen)
141798895edbSChuck Lever );
141898895edbSChuck Lever 
141998895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_badreq_event,
142098895edbSChuck Lever 	TP_PROTO(
142198895edbSChuck Lever 		__be32 *p
142298895edbSChuck Lever 	),
142398895edbSChuck Lever 
142498895edbSChuck Lever 	TP_ARGS(p),
142598895edbSChuck Lever 
142698895edbSChuck Lever 	TP_STRUCT__entry(
142798895edbSChuck Lever 		__field(u32, xid)
142898895edbSChuck Lever 		__field(u32, vers)
142998895edbSChuck Lever 		__field(u32, proc)
143098895edbSChuck Lever 		__field(u32, credits)
143198895edbSChuck Lever 	),
143298895edbSChuck Lever 
143398895edbSChuck Lever 	TP_fast_assign(
143498895edbSChuck Lever 		__entry->xid = be32_to_cpup(p++);
143598895edbSChuck Lever 		__entry->vers = be32_to_cpup(p++);
143698895edbSChuck Lever 		__entry->credits = be32_to_cpup(p++);
143798895edbSChuck Lever 		__entry->proc = be32_to_cpup(p);
143898895edbSChuck Lever 	),
143998895edbSChuck Lever 
144098895edbSChuck Lever 	TP_printk("xid=0x%08x vers=%u credits=%u proc=%u",
144198895edbSChuck Lever 		__entry->xid, __entry->vers, __entry->credits, __entry->proc)
144298895edbSChuck Lever );
144398895edbSChuck Lever 
144498895edbSChuck Lever #define DEFINE_BADREQ_EVENT(name)					\
144527ce6294SChuck Lever 		DEFINE_EVENT(svcrdma_badreq_event,			\
144627ce6294SChuck Lever 			     svcrdma_decode_##name##_err,		\
144798895edbSChuck Lever 				TP_PROTO(				\
144898895edbSChuck Lever 					__be32 *p			\
144998895edbSChuck Lever 				),					\
145098895edbSChuck Lever 				TP_ARGS(p))
145198895edbSChuck Lever 
145298895edbSChuck Lever DEFINE_BADREQ_EVENT(badvers);
145398895edbSChuck Lever DEFINE_BADREQ_EVENT(drop);
145498895edbSChuck Lever DEFINE_BADREQ_EVENT(badproc);
145598895edbSChuck Lever DEFINE_BADREQ_EVENT(parse);
145698895edbSChuck Lever 
145798895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_segment_event,
145898895edbSChuck Lever 	TP_PROTO(
145998895edbSChuck Lever 		u32 handle,
146098895edbSChuck Lever 		u32 length,
146198895edbSChuck Lever 		u64 offset
146298895edbSChuck Lever 	),
146398895edbSChuck Lever 
146498895edbSChuck Lever 	TP_ARGS(handle, length, offset),
146598895edbSChuck Lever 
146698895edbSChuck Lever 	TP_STRUCT__entry(
146798895edbSChuck Lever 		__field(u32, handle)
146898895edbSChuck Lever 		__field(u32, length)
146998895edbSChuck Lever 		__field(u64, offset)
147098895edbSChuck Lever 	),
147198895edbSChuck Lever 
147298895edbSChuck Lever 	TP_fast_assign(
147398895edbSChuck Lever 		__entry->handle = handle;
147498895edbSChuck Lever 		__entry->length = length;
147598895edbSChuck Lever 		__entry->offset = offset;
147698895edbSChuck Lever 	),
147798895edbSChuck Lever 
147898895edbSChuck Lever 	TP_printk("%u@0x%016llx:0x%08x",
147998895edbSChuck Lever 		__entry->length, (unsigned long long)__entry->offset,
148098895edbSChuck Lever 		__entry->handle
148198895edbSChuck Lever 	)
148298895edbSChuck Lever );
148398895edbSChuck Lever 
148498895edbSChuck Lever #define DEFINE_SEGMENT_EVENT(name)					\
1485e604aad2SChuck Lever 		DEFINE_EVENT(svcrdma_segment_event, svcrdma_##name,\
148698895edbSChuck Lever 				TP_PROTO(				\
148798895edbSChuck Lever 					u32 handle,			\
148898895edbSChuck Lever 					u32 length,			\
148998895edbSChuck Lever 					u64 offset			\
149098895edbSChuck Lever 				),					\
149198895edbSChuck Lever 				TP_ARGS(handle, length, offset))
149298895edbSChuck Lever 
1493e604aad2SChuck Lever DEFINE_SEGMENT_EVENT(decode_wseg);
1494e604aad2SChuck Lever DEFINE_SEGMENT_EVENT(encode_rseg);
1495a406c563SChuck Lever DEFINE_SEGMENT_EVENT(send_rseg);
1496e604aad2SChuck Lever DEFINE_SEGMENT_EVENT(encode_wseg);
1497a406c563SChuck Lever DEFINE_SEGMENT_EVENT(send_wseg);
149898895edbSChuck Lever 
149998895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_chunk_event,
150098895edbSChuck Lever 	TP_PROTO(
150198895edbSChuck Lever 		u32 length
150298895edbSChuck Lever 	),
150398895edbSChuck Lever 
150498895edbSChuck Lever 	TP_ARGS(length),
150598895edbSChuck Lever 
150698895edbSChuck Lever 	TP_STRUCT__entry(
150798895edbSChuck Lever 		__field(u32, length)
150898895edbSChuck Lever 	),
150998895edbSChuck Lever 
151098895edbSChuck Lever 	TP_fast_assign(
151198895edbSChuck Lever 		__entry->length = length;
151298895edbSChuck Lever 	),
151398895edbSChuck Lever 
151498895edbSChuck Lever 	TP_printk("length=%u",
151598895edbSChuck Lever 		__entry->length
151698895edbSChuck Lever 	)
151798895edbSChuck Lever );
151898895edbSChuck Lever 
151998895edbSChuck Lever #define DEFINE_CHUNK_EVENT(name)					\
1520a406c563SChuck Lever 		DEFINE_EVENT(svcrdma_chunk_event, svcrdma_##name,	\
152198895edbSChuck Lever 				TP_PROTO(				\
152298895edbSChuck Lever 					u32 length			\
152398895edbSChuck Lever 				),					\
152498895edbSChuck Lever 				TP_ARGS(length))
152598895edbSChuck Lever 
1526a406c563SChuck Lever DEFINE_CHUNK_EVENT(send_pzr);
1527a406c563SChuck Lever DEFINE_CHUNK_EVENT(encode_write_chunk);
1528a406c563SChuck Lever DEFINE_CHUNK_EVENT(send_write_chunk);
1529a406c563SChuck Lever DEFINE_CHUNK_EVENT(encode_read_chunk);
1530a406c563SChuck Lever DEFINE_CHUNK_EVENT(send_reply_chunk);
153198895edbSChuck Lever 
1532a406c563SChuck Lever TRACE_EVENT(svcrdma_send_read_chunk,
153398895edbSChuck Lever 	TP_PROTO(
153498895edbSChuck Lever 		u32 length,
153598895edbSChuck Lever 		u32 position
153698895edbSChuck Lever 	),
153798895edbSChuck Lever 
153898895edbSChuck Lever 	TP_ARGS(length, position),
153998895edbSChuck Lever 
154098895edbSChuck Lever 	TP_STRUCT__entry(
154198895edbSChuck Lever 		__field(u32, length)
154298895edbSChuck Lever 		__field(u32, position)
154398895edbSChuck Lever 	),
154498895edbSChuck Lever 
154598895edbSChuck Lever 	TP_fast_assign(
154698895edbSChuck Lever 		__entry->length = length;
154798895edbSChuck Lever 		__entry->position = position;
154898895edbSChuck Lever 	),
154998895edbSChuck Lever 
155098895edbSChuck Lever 	TP_printk("length=%u position=%u",
155198895edbSChuck Lever 		__entry->length, __entry->position
155298895edbSChuck Lever 	)
155398895edbSChuck Lever );
155498895edbSChuck Lever 
155598895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_error_event,
155698895edbSChuck Lever 	TP_PROTO(
155798895edbSChuck Lever 		__be32 xid
155898895edbSChuck Lever 	),
155998895edbSChuck Lever 
156098895edbSChuck Lever 	TP_ARGS(xid),
156198895edbSChuck Lever 
156298895edbSChuck Lever 	TP_STRUCT__entry(
156398895edbSChuck Lever 		__field(u32, xid)
156498895edbSChuck Lever 	),
156598895edbSChuck Lever 
156698895edbSChuck Lever 	TP_fast_assign(
156798895edbSChuck Lever 		__entry->xid = be32_to_cpu(xid);
156898895edbSChuck Lever 	),
156998895edbSChuck Lever 
157098895edbSChuck Lever 	TP_printk("xid=0x%08x",
157198895edbSChuck Lever 		__entry->xid
157298895edbSChuck Lever 	)
157398895edbSChuck Lever );
157498895edbSChuck Lever 
157598895edbSChuck Lever #define DEFINE_ERROR_EVENT(name)					\
157698895edbSChuck Lever 		DEFINE_EVENT(svcrdma_error_event, svcrdma_err_##name,	\
157798895edbSChuck Lever 				TP_PROTO(				\
157898895edbSChuck Lever 					__be32 xid			\
157998895edbSChuck Lever 				),					\
158098895edbSChuck Lever 				TP_ARGS(xid))
158198895edbSChuck Lever 
158298895edbSChuck Lever DEFINE_ERROR_EVENT(vers);
158398895edbSChuck Lever DEFINE_ERROR_EVENT(chunk);
158498895edbSChuck Lever 
1585bd2abef3SChuck Lever /**
1586bd2abef3SChuck Lever  ** Server-side RDMA API events
1587bd2abef3SChuck Lever  **/
1588bd2abef3SChuck Lever 
1589832b2cb9SChuck Lever DECLARE_EVENT_CLASS(svcrdma_dma_map_class,
1590bd2abef3SChuck Lever 	TP_PROTO(
1591bd2abef3SChuck Lever 		const struct svcxprt_rdma *rdma,
1592832b2cb9SChuck Lever 		u64 dma_addr,
1593832b2cb9SChuck Lever 		u32 length
1594bd2abef3SChuck Lever 	),
1595bd2abef3SChuck Lever 
1596832b2cb9SChuck Lever 	TP_ARGS(rdma, dma_addr, length),
1597bd2abef3SChuck Lever 
1598bd2abef3SChuck Lever 	TP_STRUCT__entry(
1599832b2cb9SChuck Lever 		__field(u64, dma_addr)
1600832b2cb9SChuck Lever 		__field(u32, length)
1601bd2abef3SChuck Lever 		__string(device, rdma->sc_cm_id->device->name)
1602bd2abef3SChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1603bd2abef3SChuck Lever 	),
1604bd2abef3SChuck Lever 
1605bd2abef3SChuck Lever 	TP_fast_assign(
1606832b2cb9SChuck Lever 		__entry->dma_addr = dma_addr;
1607832b2cb9SChuck Lever 		__entry->length = length;
1608bd2abef3SChuck Lever 		__assign_str(device, rdma->sc_cm_id->device->name);
1609bd2abef3SChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1610bd2abef3SChuck Lever 	),
1611bd2abef3SChuck Lever 
1612832b2cb9SChuck Lever 	TP_printk("addr=%s device=%s dma_addr=%llu length=%u",
1613832b2cb9SChuck Lever 		__get_str(addr), __get_str(device),
1614832b2cb9SChuck Lever 		__entry->dma_addr, __entry->length
1615bd2abef3SChuck Lever 	)
1616bd2abef3SChuck Lever );
1617bd2abef3SChuck Lever 
1618832b2cb9SChuck Lever #define DEFINE_SVC_DMA_EVENT(name)					\
1619832b2cb9SChuck Lever 		DEFINE_EVENT(svcrdma_dma_map_class, svcrdma_##name,	\
1620832b2cb9SChuck Lever 				TP_PROTO(				\
1621832b2cb9SChuck Lever 					const struct svcxprt_rdma *rdma,\
1622832b2cb9SChuck Lever 					u64 dma_addr,			\
1623832b2cb9SChuck Lever 					u32 length			\
1624832b2cb9SChuck Lever 				),					\
1625832b2cb9SChuck Lever 				TP_ARGS(rdma, dma_addr, length))
1626832b2cb9SChuck Lever 
1627832b2cb9SChuck Lever DEFINE_SVC_DMA_EVENT(dma_map_page);
1628832b2cb9SChuck Lever DEFINE_SVC_DMA_EVENT(dma_unmap_page);
1629832b2cb9SChuck Lever 
16302abfbe7eSChuck Lever TRACE_EVENT(svcrdma_dma_map_rw_err,
1631bd2abef3SChuck Lever 	TP_PROTO(
1632bd2abef3SChuck Lever 		const struct svcxprt_rdma *rdma,
16332abfbe7eSChuck Lever 		unsigned int nents,
1634bd2abef3SChuck Lever 		int status
1635bd2abef3SChuck Lever 	),
1636bd2abef3SChuck Lever 
16372abfbe7eSChuck Lever 	TP_ARGS(rdma, nents, status),
1638bd2abef3SChuck Lever 
1639bd2abef3SChuck Lever 	TP_STRUCT__entry(
1640bd2abef3SChuck Lever 		__field(int, status)
16412abfbe7eSChuck Lever 		__field(unsigned int, nents)
1642bd2abef3SChuck Lever 		__string(device, rdma->sc_cm_id->device->name)
1643bd2abef3SChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1644bd2abef3SChuck Lever 	),
1645bd2abef3SChuck Lever 
1646bd2abef3SChuck Lever 	TP_fast_assign(
1647bd2abef3SChuck Lever 		__entry->status = status;
16482abfbe7eSChuck Lever 		__entry->nents = nents;
1649bd2abef3SChuck Lever 		__assign_str(device, rdma->sc_cm_id->device->name);
1650bd2abef3SChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1651bd2abef3SChuck Lever 	),
1652bd2abef3SChuck Lever 
16532abfbe7eSChuck Lever 	TP_printk("addr=%s device=%s nents=%u status=%d",
16542abfbe7eSChuck Lever 		__get_str(addr), __get_str(device), __entry->nents,
16552abfbe7eSChuck Lever 		__entry->status
1656bd2abef3SChuck Lever 	)
1657bd2abef3SChuck Lever );
1658bd2abef3SChuck Lever 
1659f4e53e1cSChuck Lever TRACE_EVENT(svcrdma_no_rwctx_err,
1660f4e53e1cSChuck Lever 	TP_PROTO(
1661f4e53e1cSChuck Lever 		const struct svcxprt_rdma *rdma,
1662f4e53e1cSChuck Lever 		unsigned int num_sges
1663f4e53e1cSChuck Lever 	),
1664f4e53e1cSChuck Lever 
1665f4e53e1cSChuck Lever 	TP_ARGS(rdma, num_sges),
1666f4e53e1cSChuck Lever 
1667f4e53e1cSChuck Lever 	TP_STRUCT__entry(
1668f4e53e1cSChuck Lever 		__field(unsigned int, num_sges)
1669f4e53e1cSChuck Lever 		__string(device, rdma->sc_cm_id->device->name)
1670f4e53e1cSChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1671f4e53e1cSChuck Lever 	),
1672f4e53e1cSChuck Lever 
1673f4e53e1cSChuck Lever 	TP_fast_assign(
1674f4e53e1cSChuck Lever 		__entry->num_sges = num_sges;
1675f4e53e1cSChuck Lever 		__assign_str(device, rdma->sc_cm_id->device->name);
1676f4e53e1cSChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1677f4e53e1cSChuck Lever 	),
1678f4e53e1cSChuck Lever 
1679f4e53e1cSChuck Lever 	TP_printk("addr=%s device=%s num_sges=%d",
1680f4e53e1cSChuck Lever 		__get_str(addr), __get_str(device), __entry->num_sges
1681f4e53e1cSChuck Lever 	)
1682f4e53e1cSChuck Lever );
1683f4e53e1cSChuck Lever 
16849d200638SChuck Lever TRACE_EVENT(svcrdma_page_overrun_err,
16859d200638SChuck Lever 	TP_PROTO(
16869d200638SChuck Lever 		const struct svcxprt_rdma *rdma,
16879d200638SChuck Lever 		const struct svc_rqst *rqst,
16889d200638SChuck Lever 		unsigned int pageno
16899d200638SChuck Lever 	),
16909d200638SChuck Lever 
16919d200638SChuck Lever 	TP_ARGS(rdma, rqst, pageno),
16929d200638SChuck Lever 
16939d200638SChuck Lever 	TP_STRUCT__entry(
16949d200638SChuck Lever 		__field(unsigned int, pageno)
16959d200638SChuck Lever 		__field(u32, xid)
16969d200638SChuck Lever 		__string(device, rdma->sc_cm_id->device->name)
16979d200638SChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
16989d200638SChuck Lever 	),
16999d200638SChuck Lever 
17009d200638SChuck Lever 	TP_fast_assign(
17019d200638SChuck Lever 		__entry->pageno = pageno;
17029d200638SChuck Lever 		__entry->xid = __be32_to_cpu(rqst->rq_xid);
17039d200638SChuck Lever 		__assign_str(device, rdma->sc_cm_id->device->name);
17049d200638SChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
17059d200638SChuck Lever 	),
17069d200638SChuck Lever 
17079d200638SChuck Lever 	TP_printk("addr=%s device=%s xid=0x%08x pageno=%u", __get_str(addr),
17089d200638SChuck Lever 		__get_str(device), __entry->xid, __entry->pageno
17099d200638SChuck Lever 	)
17109d200638SChuck Lever );
17119d200638SChuck Lever 
1712dbc17acdSChuck Lever TRACE_EVENT(svcrdma_small_wrch_err,
1713dbc17acdSChuck Lever 	TP_PROTO(
1714dbc17acdSChuck Lever 		const struct svcxprt_rdma *rdma,
1715dbc17acdSChuck Lever 		unsigned int remaining,
1716dbc17acdSChuck Lever 		unsigned int seg_no,
1717dbc17acdSChuck Lever 		unsigned int num_segs
1718dbc17acdSChuck Lever 	),
1719dbc17acdSChuck Lever 
1720dbc17acdSChuck Lever 	TP_ARGS(rdma, remaining, seg_no, num_segs),
1721dbc17acdSChuck Lever 
1722dbc17acdSChuck Lever 	TP_STRUCT__entry(
1723dbc17acdSChuck Lever 		__field(unsigned int, remaining)
1724dbc17acdSChuck Lever 		__field(unsigned int, seg_no)
1725dbc17acdSChuck Lever 		__field(unsigned int, num_segs)
1726dbc17acdSChuck Lever 		__string(device, rdma->sc_cm_id->device->name)
1727dbc17acdSChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1728dbc17acdSChuck Lever 	),
1729dbc17acdSChuck Lever 
1730dbc17acdSChuck Lever 	TP_fast_assign(
1731dbc17acdSChuck Lever 		__entry->remaining = remaining;
1732dbc17acdSChuck Lever 		__entry->seg_no = seg_no;
1733dbc17acdSChuck Lever 		__entry->num_segs = num_segs;
1734dbc17acdSChuck Lever 		__assign_str(device, rdma->sc_cm_id->device->name);
1735dbc17acdSChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1736dbc17acdSChuck Lever 	),
1737dbc17acdSChuck Lever 
1738dbc17acdSChuck Lever 	TP_printk("addr=%s device=%s remaining=%u seg_no=%u num_segs=%u",
1739dbc17acdSChuck Lever 		__get_str(addr), __get_str(device), __entry->remaining,
1740dbc17acdSChuck Lever 		__entry->seg_no, __entry->num_segs
1741dbc17acdSChuck Lever 	)
1742dbc17acdSChuck Lever );
1743dbc17acdSChuck Lever 
17440dabe948SChuck Lever TRACE_EVENT(svcrdma_send_pullup,
17450dabe948SChuck Lever 	TP_PROTO(
17460dabe948SChuck Lever 		unsigned int len
17470dabe948SChuck Lever 	),
17480dabe948SChuck Lever 
17490dabe948SChuck Lever 	TP_ARGS(len),
17500dabe948SChuck Lever 
17510dabe948SChuck Lever 	TP_STRUCT__entry(
17520dabe948SChuck Lever 		__field(unsigned int, len)
17530dabe948SChuck Lever 	),
17540dabe948SChuck Lever 
17550dabe948SChuck Lever 	TP_fast_assign(
17560dabe948SChuck Lever 		__entry->len = len;
17570dabe948SChuck Lever 	),
17580dabe948SChuck Lever 
17590dabe948SChuck Lever 	TP_printk("len=%u", __entry->len)
17600dabe948SChuck Lever );
17610dabe948SChuck Lever 
17623f8f25c6SChuck Lever TRACE_EVENT(svcrdma_send_err,
1763bd2abef3SChuck Lever 	TP_PROTO(
1764bd2abef3SChuck Lever 		const struct svc_rqst *rqst,
1765bd2abef3SChuck Lever 		int status
1766bd2abef3SChuck Lever 	),
1767bd2abef3SChuck Lever 
1768bd2abef3SChuck Lever 	TP_ARGS(rqst, status),
1769bd2abef3SChuck Lever 
1770bd2abef3SChuck Lever 	TP_STRUCT__entry(
1771bd2abef3SChuck Lever 		__field(int, status)
1772bd2abef3SChuck Lever 		__field(u32, xid)
1773bd2abef3SChuck Lever 		__string(addr, rqst->rq_xprt->xpt_remotebuf)
1774bd2abef3SChuck Lever 	),
1775bd2abef3SChuck Lever 
1776bd2abef3SChuck Lever 	TP_fast_assign(
1777bd2abef3SChuck Lever 		__entry->status = status;
1778bd2abef3SChuck Lever 		__entry->xid = __be32_to_cpu(rqst->rq_xid);
1779bd2abef3SChuck Lever 		__assign_str(addr, rqst->rq_xprt->xpt_remotebuf);
1780bd2abef3SChuck Lever 	),
1781bd2abef3SChuck Lever 
17823f8f25c6SChuck Lever 	TP_printk("addr=%s xid=0x%08x status=%d", __get_str(addr),
1783bd2abef3SChuck Lever 		__entry->xid, __entry->status
1784bd2abef3SChuck Lever 	)
1785bd2abef3SChuck Lever );
1786bd2abef3SChuck Lever 
1787bd2abef3SChuck Lever DECLARE_EVENT_CLASS(svcrdma_sendcomp_event,
1788bd2abef3SChuck Lever 	TP_PROTO(
1789bd2abef3SChuck Lever 		const struct ib_wc *wc
1790bd2abef3SChuck Lever 	),
1791bd2abef3SChuck Lever 
1792bd2abef3SChuck Lever 	TP_ARGS(wc),
1793bd2abef3SChuck Lever 
1794bd2abef3SChuck Lever 	TP_STRUCT__entry(
1795bd2abef3SChuck Lever 		__field(const void *, cqe)
1796bd2abef3SChuck Lever 		__field(unsigned int, status)
1797bd2abef3SChuck Lever 		__field(unsigned int, vendor_err)
1798bd2abef3SChuck Lever 	),
1799bd2abef3SChuck Lever 
1800bd2abef3SChuck Lever 	TP_fast_assign(
1801bd2abef3SChuck Lever 		__entry->cqe = wc->wr_cqe;
1802bd2abef3SChuck Lever 		__entry->status = wc->status;
1803bd2abef3SChuck Lever 		if (wc->status)
1804bd2abef3SChuck Lever 			__entry->vendor_err = wc->vendor_err;
1805bd2abef3SChuck Lever 		else
1806bd2abef3SChuck Lever 			__entry->vendor_err = 0;
1807bd2abef3SChuck Lever 	),
1808bd2abef3SChuck Lever 
1809bd2abef3SChuck Lever 	TP_printk("cqe=%p status=%s (%u/0x%x)",
1810bd2abef3SChuck Lever 		__entry->cqe, rdma_show_wc_status(__entry->status),
1811bd2abef3SChuck Lever 		__entry->status, __entry->vendor_err
1812bd2abef3SChuck Lever 	)
1813bd2abef3SChuck Lever );
1814bd2abef3SChuck Lever 
1815bd2abef3SChuck Lever #define DEFINE_SENDCOMP_EVENT(name)					\
1816bd2abef3SChuck Lever 		DEFINE_EVENT(svcrdma_sendcomp_event, svcrdma_wc_##name,	\
1817bd2abef3SChuck Lever 				TP_PROTO(				\
1818bd2abef3SChuck Lever 					const struct ib_wc *wc		\
1819bd2abef3SChuck Lever 				),					\
1820bd2abef3SChuck Lever 				TP_ARGS(wc))
1821bd2abef3SChuck Lever 
1822bd2abef3SChuck Lever TRACE_EVENT(svcrdma_post_send,
1823bd2abef3SChuck Lever 	TP_PROTO(
1824e28b4fc6SChuck Lever 		const struct ib_send_wr *wr
1825bd2abef3SChuck Lever 	),
1826bd2abef3SChuck Lever 
1827e28b4fc6SChuck Lever 	TP_ARGS(wr),
1828bd2abef3SChuck Lever 
1829bd2abef3SChuck Lever 	TP_STRUCT__entry(
1830bd2abef3SChuck Lever 		__field(const void *, cqe)
1831bd2abef3SChuck Lever 		__field(unsigned int, num_sge)
1832bd2abef3SChuck Lever 		__field(u32, inv_rkey)
1833bd2abef3SChuck Lever 	),
1834bd2abef3SChuck Lever 
1835bd2abef3SChuck Lever 	TP_fast_assign(
1836bd2abef3SChuck Lever 		__entry->cqe = wr->wr_cqe;
1837bd2abef3SChuck Lever 		__entry->num_sge = wr->num_sge;
1838bd2abef3SChuck Lever 		__entry->inv_rkey = (wr->opcode == IB_WR_SEND_WITH_INV) ?
1839bd2abef3SChuck Lever 					wr->ex.invalidate_rkey : 0;
1840bd2abef3SChuck Lever 	),
1841bd2abef3SChuck Lever 
1842e28b4fc6SChuck Lever 	TP_printk("cqe=%p num_sge=%u inv_rkey=0x%08x",
1843bd2abef3SChuck Lever 		__entry->cqe, __entry->num_sge,
1844e28b4fc6SChuck Lever 		__entry->inv_rkey
1845bd2abef3SChuck Lever 	)
1846bd2abef3SChuck Lever );
1847bd2abef3SChuck Lever 
1848bd2abef3SChuck Lever DEFINE_SENDCOMP_EVENT(send);
1849bd2abef3SChuck Lever 
1850bd2abef3SChuck Lever TRACE_EVENT(svcrdma_post_recv,
1851bd2abef3SChuck Lever 	TP_PROTO(
1852bd2abef3SChuck Lever 		const struct ib_recv_wr *wr,
1853bd2abef3SChuck Lever 		int status
1854bd2abef3SChuck Lever 	),
1855bd2abef3SChuck Lever 
1856bd2abef3SChuck Lever 	TP_ARGS(wr, status),
1857bd2abef3SChuck Lever 
1858bd2abef3SChuck Lever 	TP_STRUCT__entry(
1859bd2abef3SChuck Lever 		__field(const void *, cqe)
1860bd2abef3SChuck Lever 		__field(int, status)
1861bd2abef3SChuck Lever 	),
1862bd2abef3SChuck Lever 
1863bd2abef3SChuck Lever 	TP_fast_assign(
1864bd2abef3SChuck Lever 		__entry->cqe = wr->wr_cqe;
1865bd2abef3SChuck Lever 		__entry->status = status;
1866bd2abef3SChuck Lever 	),
1867bd2abef3SChuck Lever 
1868bd2abef3SChuck Lever 	TP_printk("cqe=%p status=%d",
1869bd2abef3SChuck Lever 		__entry->cqe, __entry->status
1870bd2abef3SChuck Lever 	)
1871bd2abef3SChuck Lever );
1872bd2abef3SChuck Lever 
1873bd2abef3SChuck Lever TRACE_EVENT(svcrdma_wc_receive,
1874bd2abef3SChuck Lever 	TP_PROTO(
1875bd2abef3SChuck Lever 		const struct ib_wc *wc
1876bd2abef3SChuck Lever 	),
1877bd2abef3SChuck Lever 
1878bd2abef3SChuck Lever 	TP_ARGS(wc),
1879bd2abef3SChuck Lever 
1880bd2abef3SChuck Lever 	TP_STRUCT__entry(
1881bd2abef3SChuck Lever 		__field(const void *, cqe)
1882bd2abef3SChuck Lever 		__field(u32, byte_len)
1883bd2abef3SChuck Lever 		__field(unsigned int, status)
1884bd2abef3SChuck Lever 		__field(u32, vendor_err)
1885bd2abef3SChuck Lever 	),
1886bd2abef3SChuck Lever 
1887bd2abef3SChuck Lever 	TP_fast_assign(
1888bd2abef3SChuck Lever 		__entry->cqe = wc->wr_cqe;
1889bd2abef3SChuck Lever 		__entry->status = wc->status;
1890bd2abef3SChuck Lever 		if (wc->status) {
1891bd2abef3SChuck Lever 			__entry->byte_len = 0;
1892bd2abef3SChuck Lever 			__entry->vendor_err = wc->vendor_err;
1893bd2abef3SChuck Lever 		} else {
1894bd2abef3SChuck Lever 			__entry->byte_len = wc->byte_len;
1895bd2abef3SChuck Lever 			__entry->vendor_err = 0;
1896bd2abef3SChuck Lever 		}
1897bd2abef3SChuck Lever 	),
1898bd2abef3SChuck Lever 
1899bd2abef3SChuck Lever 	TP_printk("cqe=%p byte_len=%u status=%s (%u/0x%x)",
1900bd2abef3SChuck Lever 		__entry->cqe, __entry->byte_len,
1901bd2abef3SChuck Lever 		rdma_show_wc_status(__entry->status),
1902bd2abef3SChuck Lever 		__entry->status, __entry->vendor_err
1903bd2abef3SChuck Lever 	)
1904bd2abef3SChuck Lever );
1905bd2abef3SChuck Lever 
1906bd2abef3SChuck Lever TRACE_EVENT(svcrdma_post_rw,
1907bd2abef3SChuck Lever 	TP_PROTO(
1908bd2abef3SChuck Lever 		const void *cqe,
1909e28b4fc6SChuck Lever 		int sqecount
1910bd2abef3SChuck Lever 	),
1911bd2abef3SChuck Lever 
1912e28b4fc6SChuck Lever 	TP_ARGS(cqe, sqecount),
1913bd2abef3SChuck Lever 
1914bd2abef3SChuck Lever 	TP_STRUCT__entry(
1915bd2abef3SChuck Lever 		__field(const void *, cqe)
1916bd2abef3SChuck Lever 		__field(int, sqecount)
1917bd2abef3SChuck Lever 	),
1918bd2abef3SChuck Lever 
1919bd2abef3SChuck Lever 	TP_fast_assign(
1920bd2abef3SChuck Lever 		__entry->cqe = cqe;
1921bd2abef3SChuck Lever 		__entry->sqecount = sqecount;
1922bd2abef3SChuck Lever 	),
1923bd2abef3SChuck Lever 
1924e28b4fc6SChuck Lever 	TP_printk("cqe=%p sqecount=%d",
1925e28b4fc6SChuck Lever 		__entry->cqe, __entry->sqecount
1926bd2abef3SChuck Lever 	)
1927bd2abef3SChuck Lever );
1928bd2abef3SChuck Lever 
1929bd2abef3SChuck Lever DEFINE_SENDCOMP_EVENT(read);
1930bd2abef3SChuck Lever DEFINE_SENDCOMP_EVENT(write);
1931bd2abef3SChuck Lever 
1932bd2abef3SChuck Lever TRACE_EVENT(svcrdma_qp_error,
1933bd2abef3SChuck Lever 	TP_PROTO(
1934bd2abef3SChuck Lever 		const struct ib_event *event,
1935bd2abef3SChuck Lever 		const struct sockaddr *sap
1936bd2abef3SChuck Lever 	),
1937bd2abef3SChuck Lever 
1938bd2abef3SChuck Lever 	TP_ARGS(event, sap),
1939bd2abef3SChuck Lever 
1940bd2abef3SChuck Lever 	TP_STRUCT__entry(
1941bd2abef3SChuck Lever 		__field(unsigned int, event)
1942bd2abef3SChuck Lever 		__string(device, event->device->name)
1943bd2abef3SChuck Lever 		__array(__u8, addr, INET6_ADDRSTRLEN + 10)
1944bd2abef3SChuck Lever 	),
1945bd2abef3SChuck Lever 
1946bd2abef3SChuck Lever 	TP_fast_assign(
1947bd2abef3SChuck Lever 		__entry->event = event->event;
1948bd2abef3SChuck Lever 		__assign_str(device, event->device->name);
1949bd2abef3SChuck Lever 		snprintf(__entry->addr, sizeof(__entry->addr) - 1,
1950bd2abef3SChuck Lever 			 "%pISpc", sap);
1951bd2abef3SChuck Lever 	),
1952bd2abef3SChuck Lever 
1953bd2abef3SChuck Lever 	TP_printk("addr=%s dev=%s event=%s (%u)",
1954bd2abef3SChuck Lever 		__entry->addr, __get_str(device),
1955bd2abef3SChuck Lever 		rdma_show_ib_event(__entry->event), __entry->event
1956bd2abef3SChuck Lever 	)
1957bd2abef3SChuck Lever );
1958bd2abef3SChuck Lever 
1959bd2abef3SChuck Lever DECLARE_EVENT_CLASS(svcrdma_sendqueue_event,
1960bd2abef3SChuck Lever 	TP_PROTO(
1961bd2abef3SChuck Lever 		const struct svcxprt_rdma *rdma
1962bd2abef3SChuck Lever 	),
1963bd2abef3SChuck Lever 
1964bd2abef3SChuck Lever 	TP_ARGS(rdma),
1965bd2abef3SChuck Lever 
1966bd2abef3SChuck Lever 	TP_STRUCT__entry(
1967bd2abef3SChuck Lever 		__field(int, avail)
1968bd2abef3SChuck Lever 		__field(int, depth)
1969bd2abef3SChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1970bd2abef3SChuck Lever 	),
1971bd2abef3SChuck Lever 
1972bd2abef3SChuck Lever 	TP_fast_assign(
1973bd2abef3SChuck Lever 		__entry->avail = atomic_read(&rdma->sc_sq_avail);
1974bd2abef3SChuck Lever 		__entry->depth = rdma->sc_sq_depth;
1975bd2abef3SChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1976bd2abef3SChuck Lever 	),
1977bd2abef3SChuck Lever 
1978bd2abef3SChuck Lever 	TP_printk("addr=%s sc_sq_avail=%d/%d",
1979bd2abef3SChuck Lever 		__get_str(addr), __entry->avail, __entry->depth
1980bd2abef3SChuck Lever 	)
1981bd2abef3SChuck Lever );
1982bd2abef3SChuck Lever 
1983bd2abef3SChuck Lever #define DEFINE_SQ_EVENT(name)						\
1984bd2abef3SChuck Lever 		DEFINE_EVENT(svcrdma_sendqueue_event, svcrdma_sq_##name,\
1985bd2abef3SChuck Lever 				TP_PROTO(				\
1986bd2abef3SChuck Lever 					const struct svcxprt_rdma *rdma \
1987bd2abef3SChuck Lever 				),					\
1988bd2abef3SChuck Lever 				TP_ARGS(rdma))
1989bd2abef3SChuck Lever 
1990bd2abef3SChuck Lever DEFINE_SQ_EVENT(full);
1991bd2abef3SChuck Lever DEFINE_SQ_EVENT(retry);
1992bd2abef3SChuck Lever 
1993e28b4fc6SChuck Lever TRACE_EVENT(svcrdma_sq_post_err,
1994e28b4fc6SChuck Lever 	TP_PROTO(
1995e28b4fc6SChuck Lever 		const struct svcxprt_rdma *rdma,
1996e28b4fc6SChuck Lever 		int status
1997e28b4fc6SChuck Lever 	),
1998e28b4fc6SChuck Lever 
1999e28b4fc6SChuck Lever 	TP_ARGS(rdma, status),
2000e28b4fc6SChuck Lever 
2001e28b4fc6SChuck Lever 	TP_STRUCT__entry(
2002e28b4fc6SChuck Lever 		__field(int, avail)
2003e28b4fc6SChuck Lever 		__field(int, depth)
2004e28b4fc6SChuck Lever 		__field(int, status)
2005e28b4fc6SChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
2006e28b4fc6SChuck Lever 	),
2007e28b4fc6SChuck Lever 
2008e28b4fc6SChuck Lever 	TP_fast_assign(
2009e28b4fc6SChuck Lever 		__entry->avail = atomic_read(&rdma->sc_sq_avail);
2010e28b4fc6SChuck Lever 		__entry->depth = rdma->sc_sq_depth;
2011e28b4fc6SChuck Lever 		__entry->status = status;
2012e28b4fc6SChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
2013e28b4fc6SChuck Lever 	),
2014e28b4fc6SChuck Lever 
2015e28b4fc6SChuck Lever 	TP_printk("addr=%s sc_sq_avail=%d/%d status=%d",
2016e28b4fc6SChuck Lever 		__get_str(addr), __entry->avail, __entry->depth,
2017e28b4fc6SChuck Lever 		__entry->status
2018e28b4fc6SChuck Lever 	)
2019e28b4fc6SChuck Lever );
2020e28b4fc6SChuck Lever 
2021e48f083eSChuck Lever #endif /* _TRACE_RPCRDMA_H */
2022e48f083eSChuck Lever 
2023e48f083eSChuck Lever #include <trace/define_trace.h>
2024