xref: /openbmc/linux/include/trace/events/rpcrdma.h (revision 6b147ea7)
1e48f083eSChuck Lever /* SPDX-License-Identifier: GPL-2.0 */
2e48f083eSChuck Lever /*
398895edbSChuck Lever  * Copyright (c) 2017, 2018 Oracle.  All rights reserved.
498895edbSChuck Lever  *
598895edbSChuck Lever  * Trace point definitions for the "rpcrdma" subsystem.
6e48f083eSChuck Lever  */
7e48f083eSChuck Lever #undef TRACE_SYSTEM
8e48f083eSChuck Lever #define TRACE_SYSTEM rpcrdma
9e48f083eSChuck Lever 
10e48f083eSChuck Lever #if !defined(_TRACE_RPCRDMA_H) || defined(TRACE_HEADER_MULTI_READ)
11e48f083eSChuck Lever #define _TRACE_RPCRDMA_H
12e48f083eSChuck Lever 
1353b2c1cbSChuck Lever #include <linux/scatterlist.h>
14f7bd657bSChuck Lever #include <linux/sunrpc/rpc_rdma_cid.h>
15e48f083eSChuck Lever #include <linux/tracepoint.h>
16b3d03daaSChuck Lever #include <rdma/ib_cm.h>
17e48f083eSChuck Lever #include <trace/events/rdma.h>
18e48f083eSChuck Lever 
19ab03eff5SChuck Lever /**
20b4a7f91cSChuck Lever  ** Event classes
21b4a7f91cSChuck Lever  **/
22b4a7f91cSChuck Lever 
23f7bd657bSChuck Lever DECLARE_EVENT_CLASS(rpcrdma_completion_class,
24f7bd657bSChuck Lever 	TP_PROTO(
25f7bd657bSChuck Lever 		const struct ib_wc *wc,
26f7bd657bSChuck Lever 		const struct rpc_rdma_cid *cid
27f7bd657bSChuck Lever 	),
28f7bd657bSChuck Lever 
29f7bd657bSChuck Lever 	TP_ARGS(wc, cid),
30f7bd657bSChuck Lever 
31f7bd657bSChuck Lever 	TP_STRUCT__entry(
32f7bd657bSChuck Lever 		__field(u32, cq_id)
33f7bd657bSChuck Lever 		__field(int, completion_id)
34f7bd657bSChuck Lever 		__field(unsigned long, status)
35f7bd657bSChuck Lever 		__field(unsigned int, vendor_err)
36f7bd657bSChuck Lever 	),
37f7bd657bSChuck Lever 
38f7bd657bSChuck Lever 	TP_fast_assign(
39f7bd657bSChuck Lever 		__entry->cq_id = cid->ci_queue_id;
40f7bd657bSChuck Lever 		__entry->completion_id = cid->ci_completion_id;
41f7bd657bSChuck Lever 		__entry->status = wc->status;
42f7bd657bSChuck Lever 		if (wc->status)
43f7bd657bSChuck Lever 			__entry->vendor_err = wc->vendor_err;
44f7bd657bSChuck Lever 		else
45f7bd657bSChuck Lever 			__entry->vendor_err = 0;
46f7bd657bSChuck Lever 	),
47f7bd657bSChuck Lever 
48f7bd657bSChuck Lever 	TP_printk("cq.id=%u cid=%d status=%s (%lu/0x%x)",
49f7bd657bSChuck Lever 		__entry->cq_id, __entry->completion_id,
50f7bd657bSChuck Lever 		rdma_show_wc_status(__entry->status),
51f7bd657bSChuck Lever 		__entry->status, __entry->vendor_err
52f7bd657bSChuck Lever 	)
53f7bd657bSChuck Lever );
54f7bd657bSChuck Lever 
55f7bd657bSChuck Lever #define DEFINE_COMPLETION_EVENT(name)					\
56f7bd657bSChuck Lever 		DEFINE_EVENT(rpcrdma_completion_class, name,		\
57f7bd657bSChuck Lever 				TP_PROTO(				\
58f7bd657bSChuck Lever 					const struct ib_wc *wc,		\
59f7bd657bSChuck Lever 					const struct rpc_rdma_cid *cid	\
60f7bd657bSChuck Lever 				),					\
61f7bd657bSChuck Lever 				TP_ARGS(wc, cid))
62f7bd657bSChuck Lever 
63*6b147ea7SChuck Lever DECLARE_EVENT_CLASS(rpcrdma_mr_completion_class,
64*6b147ea7SChuck Lever 	TP_PROTO(
65*6b147ea7SChuck Lever 		const struct ib_wc *wc,
66*6b147ea7SChuck Lever 		const struct rpc_rdma_cid *cid
67*6b147ea7SChuck Lever 	),
68*6b147ea7SChuck Lever 
69*6b147ea7SChuck Lever 	TP_ARGS(wc, cid),
70*6b147ea7SChuck Lever 
71*6b147ea7SChuck Lever 	TP_STRUCT__entry(
72*6b147ea7SChuck Lever 		__field(u32, cq_id)
73*6b147ea7SChuck Lever 		__field(int, completion_id)
74*6b147ea7SChuck Lever 		__field(unsigned long, status)
75*6b147ea7SChuck Lever 		__field(unsigned int, vendor_err)
76*6b147ea7SChuck Lever 	),
77*6b147ea7SChuck Lever 
78*6b147ea7SChuck Lever 	TP_fast_assign(
79*6b147ea7SChuck Lever 		__entry->cq_id = cid->ci_queue_id;
80*6b147ea7SChuck Lever 		__entry->completion_id = cid->ci_completion_id;
81*6b147ea7SChuck Lever 		__entry->status = wc->status;
82*6b147ea7SChuck Lever 		if (wc->status)
83*6b147ea7SChuck Lever 			__entry->vendor_err = wc->vendor_err;
84*6b147ea7SChuck Lever 		else
85*6b147ea7SChuck Lever 			__entry->vendor_err = 0;
86*6b147ea7SChuck Lever 	),
87*6b147ea7SChuck Lever 
88*6b147ea7SChuck Lever 	TP_printk("cq.id=%u mr.id=%d status=%s (%lu/0x%x)",
89*6b147ea7SChuck Lever 		__entry->cq_id, __entry->completion_id,
90*6b147ea7SChuck Lever 		rdma_show_wc_status(__entry->status),
91*6b147ea7SChuck Lever 		__entry->status, __entry->vendor_err
92*6b147ea7SChuck Lever 	)
93*6b147ea7SChuck Lever );
94*6b147ea7SChuck Lever 
95*6b147ea7SChuck Lever #define DEFINE_MR_COMPLETION_EVENT(name)				\
96*6b147ea7SChuck Lever 		DEFINE_EVENT(rpcrdma_mr_completion_class, name,		\
97*6b147ea7SChuck Lever 				TP_PROTO(				\
98*6b147ea7SChuck Lever 					const struct ib_wc *wc,		\
99*6b147ea7SChuck Lever 					const struct rpc_rdma_cid *cid	\
100*6b147ea7SChuck Lever 				),					\
101*6b147ea7SChuck Lever 				TP_ARGS(wc, cid))
102*6b147ea7SChuck Lever 
103c30f259aSChuck Lever DECLARE_EVENT_CLASS(rpcrdma_receive_completion_class,
104c30f259aSChuck Lever 	TP_PROTO(
105c30f259aSChuck Lever 		const struct ib_wc *wc,
106c30f259aSChuck Lever 		const struct rpc_rdma_cid *cid
107c30f259aSChuck Lever 	),
108c30f259aSChuck Lever 
109c30f259aSChuck Lever 	TP_ARGS(wc, cid),
110c30f259aSChuck Lever 
111c30f259aSChuck Lever 	TP_STRUCT__entry(
112c30f259aSChuck Lever 		__field(u32, cq_id)
113c30f259aSChuck Lever 		__field(int, completion_id)
114c30f259aSChuck Lever 		__field(u32, received)
115c30f259aSChuck Lever 		__field(unsigned long, status)
116c30f259aSChuck Lever 		__field(unsigned int, vendor_err)
117c30f259aSChuck Lever 	),
118c30f259aSChuck Lever 
119c30f259aSChuck Lever 	TP_fast_assign(
120c30f259aSChuck Lever 		__entry->cq_id = cid->ci_queue_id;
121c30f259aSChuck Lever 		__entry->completion_id = cid->ci_completion_id;
122c30f259aSChuck Lever 		__entry->status = wc->status;
123c30f259aSChuck Lever 		if (wc->status) {
124c30f259aSChuck Lever 			__entry->received = 0;
125c30f259aSChuck Lever 			__entry->vendor_err = wc->vendor_err;
126c30f259aSChuck Lever 		} else {
127c30f259aSChuck Lever 			__entry->received = wc->byte_len;
128c30f259aSChuck Lever 			__entry->vendor_err = 0;
129c30f259aSChuck Lever 		}
130c30f259aSChuck Lever 	),
131c30f259aSChuck Lever 
132c30f259aSChuck Lever 	TP_printk("cq.id=%u cid=%d status=%s (%lu/0x%x) received=%u",
133c30f259aSChuck Lever 		__entry->cq_id, __entry->completion_id,
134c30f259aSChuck Lever 		rdma_show_wc_status(__entry->status),
135c30f259aSChuck Lever 		__entry->status, __entry->vendor_err,
136c30f259aSChuck Lever 		__entry->received
137c30f259aSChuck Lever 	)
138c30f259aSChuck Lever );
139c30f259aSChuck Lever 
140c30f259aSChuck Lever #define DEFINE_RECEIVE_COMPLETION_EVENT(name)				\
141c30f259aSChuck Lever 		DEFINE_EVENT(rpcrdma_receive_completion_class, name,	\
142c30f259aSChuck Lever 				TP_PROTO(				\
143c30f259aSChuck Lever 					const struct ib_wc *wc,		\
144c30f259aSChuck Lever 					const struct rpc_rdma_cid *cid	\
145c30f259aSChuck Lever 				),					\
146c30f259aSChuck Lever 				TP_ARGS(wc, cid))
147c30f259aSChuck Lever 
1483a9568feSChuck Lever DECLARE_EVENT_CLASS(xprtrdma_reply_class,
149b4a7f91cSChuck Lever 	TP_PROTO(
150b4a7f91cSChuck Lever 		const struct rpcrdma_rep *rep
151b4a7f91cSChuck Lever 	),
152b4a7f91cSChuck Lever 
153b4a7f91cSChuck Lever 	TP_ARGS(rep),
154b4a7f91cSChuck Lever 
155b4a7f91cSChuck Lever 	TP_STRUCT__entry(
156b4a7f91cSChuck Lever 		__field(u32, xid)
157b4a7f91cSChuck Lever 		__field(u32, version)
158b4a7f91cSChuck Lever 		__field(u32, proc)
1593a9568feSChuck Lever 		__string(addr, rpcrdma_addrstr(rep->rr_rxprt))
1603a9568feSChuck Lever 		__string(port, rpcrdma_portstr(rep->rr_rxprt))
161b4a7f91cSChuck Lever 	),
162b4a7f91cSChuck Lever 
163b4a7f91cSChuck Lever 	TP_fast_assign(
164b4a7f91cSChuck Lever 		__entry->xid = be32_to_cpu(rep->rr_xid);
165b4a7f91cSChuck Lever 		__entry->version = be32_to_cpu(rep->rr_vers);
166b4a7f91cSChuck Lever 		__entry->proc = be32_to_cpu(rep->rr_proc);
1673a9568feSChuck Lever 		__assign_str(addr, rpcrdma_addrstr(rep->rr_rxprt));
1683a9568feSChuck Lever 		__assign_str(port, rpcrdma_portstr(rep->rr_rxprt));
169b4a7f91cSChuck Lever 	),
170b4a7f91cSChuck Lever 
1713a9568feSChuck Lever 	TP_printk("peer=[%s]:%s xid=0x%08x version=%u proc=%u",
1723a9568feSChuck Lever 		__get_str(addr), __get_str(port),
1733a9568feSChuck Lever 		__entry->xid, __entry->version, __entry->proc
174b4a7f91cSChuck Lever 	)
175b4a7f91cSChuck Lever );
176b4a7f91cSChuck Lever 
177b4a7f91cSChuck Lever #define DEFINE_REPLY_EVENT(name)					\
1783a9568feSChuck Lever 		DEFINE_EVENT(xprtrdma_reply_class,			\
1793a9568feSChuck Lever 				xprtrdma_reply_##name##_err,		\
180b4a7f91cSChuck Lever 				TP_PROTO(				\
181b4a7f91cSChuck Lever 					const struct rpcrdma_rep *rep	\
182b4a7f91cSChuck Lever 				),					\
183b4a7f91cSChuck Lever 				TP_ARGS(rep))
184b4a7f91cSChuck Lever 
1851c443effSChuck Lever DECLARE_EVENT_CLASS(xprtrdma_rxprt,
1861c443effSChuck Lever 	TP_PROTO(
1871c443effSChuck Lever 		const struct rpcrdma_xprt *r_xprt
1881c443effSChuck Lever 	),
1891c443effSChuck Lever 
1901c443effSChuck Lever 	TP_ARGS(r_xprt),
1911c443effSChuck Lever 
1921c443effSChuck Lever 	TP_STRUCT__entry(
1931c443effSChuck Lever 		__field(const void *, r_xprt)
1941c443effSChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
1951c443effSChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
1961c443effSChuck Lever 	),
1971c443effSChuck Lever 
1981c443effSChuck Lever 	TP_fast_assign(
1991c443effSChuck Lever 		__entry->r_xprt = r_xprt;
2001c443effSChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
2011c443effSChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
2021c443effSChuck Lever 	),
2031c443effSChuck Lever 
2041c443effSChuck Lever 	TP_printk("peer=[%s]:%s r_xprt=%p",
2051c443effSChuck Lever 		__get_str(addr), __get_str(port), __entry->r_xprt
2061c443effSChuck Lever 	)
2071c443effSChuck Lever );
2081c443effSChuck Lever 
2091c443effSChuck Lever #define DEFINE_RXPRT_EVENT(name)					\
2101c443effSChuck Lever 		DEFINE_EVENT(xprtrdma_rxprt, name,			\
2111c443effSChuck Lever 				TP_PROTO(				\
2121c443effSChuck Lever 					const struct rpcrdma_xprt *r_xprt \
2131c443effSChuck Lever 				),					\
2141c443effSChuck Lever 				TP_ARGS(r_xprt))
2151c443effSChuck Lever 
2167b020f17SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_connect_class,
2177b020f17SChuck Lever 	TP_PROTO(
2187b020f17SChuck Lever 		const struct rpcrdma_xprt *r_xprt,
2197b020f17SChuck Lever 		int rc
2207b020f17SChuck Lever 	),
2217b020f17SChuck Lever 
2227b020f17SChuck Lever 	TP_ARGS(r_xprt, rc),
2237b020f17SChuck Lever 
2247b020f17SChuck Lever 	TP_STRUCT__entry(
2257b020f17SChuck Lever 		__field(const void *, r_xprt)
2267b020f17SChuck Lever 		__field(int, rc)
2277b020f17SChuck Lever 		__field(int, connect_status)
2287b020f17SChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
2297b020f17SChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
2307b020f17SChuck Lever 	),
2317b020f17SChuck Lever 
2327b020f17SChuck Lever 	TP_fast_assign(
2337b020f17SChuck Lever 		__entry->r_xprt = r_xprt;
2347b020f17SChuck Lever 		__entry->rc = rc;
235e28ce900SChuck Lever 		__entry->connect_status = r_xprt->rx_ep->re_connect_status;
2367b020f17SChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
2377b020f17SChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
2387b020f17SChuck Lever 	),
2397b020f17SChuck Lever 
240d6ccebf9SChuck Lever 	TP_printk("peer=[%s]:%s r_xprt=%p: rc=%d connection status=%d",
2417b020f17SChuck Lever 		__get_str(addr), __get_str(port), __entry->r_xprt,
2427b020f17SChuck Lever 		__entry->rc, __entry->connect_status
2437b020f17SChuck Lever 	)
2447b020f17SChuck Lever );
2457b020f17SChuck Lever 
2467b020f17SChuck Lever #define DEFINE_CONN_EVENT(name)						\
2477b020f17SChuck Lever 		DEFINE_EVENT(xprtrdma_connect_class, xprtrdma_##name,	\
2487b020f17SChuck Lever 				TP_PROTO(				\
2497b020f17SChuck Lever 					const struct rpcrdma_xprt *r_xprt, \
2507b020f17SChuck Lever 					int rc				\
2517b020f17SChuck Lever 				),					\
2527b020f17SChuck Lever 				TP_ARGS(r_xprt, rc))
2537b020f17SChuck Lever 
25458f10ad4SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_rdch_event,
25558f10ad4SChuck Lever 	TP_PROTO(
25658f10ad4SChuck Lever 		const struct rpc_task *task,
25758f10ad4SChuck Lever 		unsigned int pos,
25858f10ad4SChuck Lever 		struct rpcrdma_mr *mr,
25958f10ad4SChuck Lever 		int nsegs
26058f10ad4SChuck Lever 	),
26158f10ad4SChuck Lever 
26258f10ad4SChuck Lever 	TP_ARGS(task, pos, mr, nsegs),
26358f10ad4SChuck Lever 
26458f10ad4SChuck Lever 	TP_STRUCT__entry(
26558f10ad4SChuck Lever 		__field(unsigned int, task_id)
26658f10ad4SChuck Lever 		__field(unsigned int, client_id)
26758f10ad4SChuck Lever 		__field(unsigned int, pos)
26858f10ad4SChuck Lever 		__field(int, nents)
26958f10ad4SChuck Lever 		__field(u32, handle)
27058f10ad4SChuck Lever 		__field(u32, length)
27158f10ad4SChuck Lever 		__field(u64, offset)
27258f10ad4SChuck Lever 		__field(int, nsegs)
27358f10ad4SChuck Lever 	),
27458f10ad4SChuck Lever 
27558f10ad4SChuck Lever 	TP_fast_assign(
27658f10ad4SChuck Lever 		__entry->task_id = task->tk_pid;
27758f10ad4SChuck Lever 		__entry->client_id = task->tk_client->cl_clid;
27858f10ad4SChuck Lever 		__entry->pos = pos;
27958f10ad4SChuck Lever 		__entry->nents = mr->mr_nents;
28058f10ad4SChuck Lever 		__entry->handle = mr->mr_handle;
28158f10ad4SChuck Lever 		__entry->length = mr->mr_length;
28258f10ad4SChuck Lever 		__entry->offset = mr->mr_offset;
28358f10ad4SChuck Lever 		__entry->nsegs = nsegs;
28458f10ad4SChuck Lever 	),
28558f10ad4SChuck Lever 
286aba11831SChuck Lever 	TP_printk("task:%u@%u pos=%u %u@0x%016llx:0x%08x (%s)",
287aba11831SChuck Lever 		__entry->task_id, __entry->client_id,
28858f10ad4SChuck Lever 		__entry->pos, __entry->length,
28958f10ad4SChuck Lever 		(unsigned long long)__entry->offset, __entry->handle,
29058f10ad4SChuck Lever 		__entry->nents < __entry->nsegs ? "more" : "last"
29158f10ad4SChuck Lever 	)
29258f10ad4SChuck Lever );
29358f10ad4SChuck Lever 
29458f10ad4SChuck Lever #define DEFINE_RDCH_EVENT(name)						\
295aba11831SChuck Lever 		DEFINE_EVENT(xprtrdma_rdch_event, xprtrdma_chunk_##name,\
29658f10ad4SChuck Lever 				TP_PROTO(				\
29758f10ad4SChuck Lever 					const struct rpc_task *task,	\
29858f10ad4SChuck Lever 					unsigned int pos,		\
29958f10ad4SChuck Lever 					struct rpcrdma_mr *mr,		\
30058f10ad4SChuck Lever 					int nsegs			\
30158f10ad4SChuck Lever 				),					\
30258f10ad4SChuck Lever 				TP_ARGS(task, pos, mr, nsegs))
30358f10ad4SChuck Lever 
30458f10ad4SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_wrch_event,
30558f10ad4SChuck Lever 	TP_PROTO(
30658f10ad4SChuck Lever 		const struct rpc_task *task,
30758f10ad4SChuck Lever 		struct rpcrdma_mr *mr,
30858f10ad4SChuck Lever 		int nsegs
30958f10ad4SChuck Lever 	),
31058f10ad4SChuck Lever 
31158f10ad4SChuck Lever 	TP_ARGS(task, mr, nsegs),
31258f10ad4SChuck Lever 
31358f10ad4SChuck Lever 	TP_STRUCT__entry(
31458f10ad4SChuck Lever 		__field(unsigned int, task_id)
31558f10ad4SChuck Lever 		__field(unsigned int, client_id)
31658f10ad4SChuck Lever 		__field(int, nents)
31758f10ad4SChuck Lever 		__field(u32, handle)
31858f10ad4SChuck Lever 		__field(u32, length)
31958f10ad4SChuck Lever 		__field(u64, offset)
32058f10ad4SChuck Lever 		__field(int, nsegs)
32158f10ad4SChuck Lever 	),
32258f10ad4SChuck Lever 
32358f10ad4SChuck Lever 	TP_fast_assign(
32458f10ad4SChuck Lever 		__entry->task_id = task->tk_pid;
32558f10ad4SChuck Lever 		__entry->client_id = task->tk_client->cl_clid;
32658f10ad4SChuck Lever 		__entry->nents = mr->mr_nents;
32758f10ad4SChuck Lever 		__entry->handle = mr->mr_handle;
32858f10ad4SChuck Lever 		__entry->length = mr->mr_length;
32958f10ad4SChuck Lever 		__entry->offset = mr->mr_offset;
33058f10ad4SChuck Lever 		__entry->nsegs = nsegs;
33158f10ad4SChuck Lever 	),
33258f10ad4SChuck Lever 
333aba11831SChuck Lever 	TP_printk("task:%u@%u %u@0x%016llx:0x%08x (%s)",
334aba11831SChuck Lever 		__entry->task_id, __entry->client_id,
33558f10ad4SChuck Lever 		__entry->length, (unsigned long long)__entry->offset,
33658f10ad4SChuck Lever 		__entry->handle,
33758f10ad4SChuck Lever 		__entry->nents < __entry->nsegs ? "more" : "last"
33858f10ad4SChuck Lever 	)
33958f10ad4SChuck Lever );
34058f10ad4SChuck Lever 
34158f10ad4SChuck Lever #define DEFINE_WRCH_EVENT(name)						\
342aba11831SChuck Lever 		DEFINE_EVENT(xprtrdma_wrch_event, xprtrdma_chunk_##name,\
34358f10ad4SChuck Lever 				TP_PROTO(				\
34458f10ad4SChuck Lever 					const struct rpc_task *task,	\
34558f10ad4SChuck Lever 					struct rpcrdma_mr *mr,		\
34658f10ad4SChuck Lever 					int nsegs			\
34758f10ad4SChuck Lever 				),					\
34858f10ad4SChuck Lever 				TP_ARGS(task, mr, nsegs))
34958f10ad4SChuck Lever 
350aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_BIDIRECTIONAL);
351aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_TO_DEVICE);
352aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_FROM_DEVICE);
353aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_NONE);
354aba11831SChuck Lever 
355aba11831SChuck Lever #define xprtrdma_show_direction(x)					\
356aba11831SChuck Lever 		__print_symbolic(x,					\
357aba11831SChuck Lever 				{ DMA_BIDIRECTIONAL, "BIDIR" },		\
358aba11831SChuck Lever 				{ DMA_TO_DEVICE, "TO_DEVICE" },		\
359aba11831SChuck Lever 				{ DMA_FROM_DEVICE, "FROM_DEVICE" },	\
360aba11831SChuck Lever 				{ DMA_NONE, "NONE" })
361aba11831SChuck Lever 
3627703db97SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_mr_class,
3637703db97SChuck Lever 	TP_PROTO(
3647703db97SChuck Lever 		const struct rpcrdma_mr *mr
3657703db97SChuck Lever 	),
3667703db97SChuck Lever 
3677703db97SChuck Lever 	TP_ARGS(mr),
3687703db97SChuck Lever 
3697703db97SChuck Lever 	TP_STRUCT__entry(
3707703db97SChuck Lever 		__field(unsigned int, task_id)
3717703db97SChuck Lever 		__field(unsigned int, client_id)
3727703db97SChuck Lever 		__field(u32, mr_id)
3737703db97SChuck Lever 		__field(int, nents)
3747703db97SChuck Lever 		__field(u32, handle)
3757703db97SChuck Lever 		__field(u32, length)
3767703db97SChuck Lever 		__field(u64, offset)
3777703db97SChuck Lever 		__field(u32, dir)
3787703db97SChuck Lever 	),
3797703db97SChuck Lever 
3807703db97SChuck Lever 	TP_fast_assign(
3817703db97SChuck Lever 		const struct rpcrdma_req *req = mr->mr_req;
3827703db97SChuck Lever 		const struct rpc_task *task = req->rl_slot.rq_task;
3837703db97SChuck Lever 
3847703db97SChuck Lever 		__entry->task_id = task->tk_pid;
3857703db97SChuck Lever 		__entry->client_id = task->tk_client->cl_clid;
3867703db97SChuck Lever 		__entry->mr_id  = mr->frwr.fr_mr->res.id;
3877703db97SChuck Lever 		__entry->nents  = mr->mr_nents;
3887703db97SChuck Lever 		__entry->handle = mr->mr_handle;
3897703db97SChuck Lever 		__entry->length = mr->mr_length;
3907703db97SChuck Lever 		__entry->offset = mr->mr_offset;
3917703db97SChuck Lever 		__entry->dir    = mr->mr_dir;
3927703db97SChuck Lever 	),
3937703db97SChuck Lever 
3947703db97SChuck Lever 	TP_printk("task:%u@%u mr.id=%u nents=%d %u@0x%016llx:0x%08x (%s)",
3957703db97SChuck Lever 		__entry->task_id, __entry->client_id,
3967703db97SChuck Lever 		__entry->mr_id, __entry->nents, __entry->length,
3977703db97SChuck Lever 		(unsigned long long)__entry->offset, __entry->handle,
3987703db97SChuck Lever 		xprtrdma_show_direction(__entry->dir)
3997703db97SChuck Lever 	)
4007703db97SChuck Lever );
4017703db97SChuck Lever 
4027703db97SChuck Lever #define DEFINE_MR_EVENT(name)						\
4037703db97SChuck Lever 		DEFINE_EVENT(xprtrdma_mr_class,				\
4047703db97SChuck Lever 				xprtrdma_mr_##name,			\
4057703db97SChuck Lever 				TP_PROTO(				\
4067703db97SChuck Lever 					const struct rpcrdma_mr *mr	\
4077703db97SChuck Lever 				),					\
4087703db97SChuck Lever 				TP_ARGS(mr))
4097703db97SChuck Lever 
4107703db97SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_anonymous_mr_class,
4112937fedeSChuck Lever 	TP_PROTO(
4122937fedeSChuck Lever 		const struct rpcrdma_mr *mr
4132937fedeSChuck Lever 	),
4142937fedeSChuck Lever 
4152937fedeSChuck Lever 	TP_ARGS(mr),
4162937fedeSChuck Lever 
4172937fedeSChuck Lever 	TP_STRUCT__entry(
41862a89501SChuck Lever 		__field(u32, mr_id)
41962a89501SChuck Lever 		__field(int, nents)
4202937fedeSChuck Lever 		__field(u32, handle)
4212937fedeSChuck Lever 		__field(u32, length)
4222937fedeSChuck Lever 		__field(u64, offset)
423aba11831SChuck Lever 		__field(u32, dir)
4242937fedeSChuck Lever 	),
4252937fedeSChuck Lever 
4262937fedeSChuck Lever 	TP_fast_assign(
42762a89501SChuck Lever 		__entry->mr_id  = mr->frwr.fr_mr->res.id;
42862a89501SChuck Lever 		__entry->nents  = mr->mr_nents;
4292937fedeSChuck Lever 		__entry->handle = mr->mr_handle;
4302937fedeSChuck Lever 		__entry->length = mr->mr_length;
4312937fedeSChuck Lever 		__entry->offset = mr->mr_offset;
432aba11831SChuck Lever 		__entry->dir    = mr->mr_dir;
4332937fedeSChuck Lever 	),
4342937fedeSChuck Lever 
43562a89501SChuck Lever 	TP_printk("mr.id=%u nents=%d %u@0x%016llx:0x%08x (%s)",
43662a89501SChuck Lever 		__entry->mr_id, __entry->nents, __entry->length,
437aba11831SChuck Lever 		(unsigned long long)__entry->offset, __entry->handle,
438aba11831SChuck Lever 		xprtrdma_show_direction(__entry->dir)
4392937fedeSChuck Lever 	)
4402937fedeSChuck Lever );
4412937fedeSChuck Lever 
4427703db97SChuck Lever #define DEFINE_ANON_MR_EVENT(name)					\
4437703db97SChuck Lever 		DEFINE_EVENT(xprtrdma_anonymous_mr_class,		\
4447703db97SChuck Lever 				xprtrdma_mr_##name,			\
4452937fedeSChuck Lever 				TP_PROTO(				\
4462937fedeSChuck Lever 					const struct rpcrdma_mr *mr	\
4472937fedeSChuck Lever 				),					\
4482937fedeSChuck Lever 				TP_ARGS(mr))
4492937fedeSChuck Lever 
450d11e9346SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_callback_class,
451fc1eb807SChuck Lever 	TP_PROTO(
452d11e9346SChuck Lever 		const struct rpcrdma_xprt *r_xprt,
453fc1eb807SChuck Lever 		const struct rpc_rqst *rqst
454fc1eb807SChuck Lever 	),
455fc1eb807SChuck Lever 
456d11e9346SChuck Lever 	TP_ARGS(r_xprt, rqst),
457fc1eb807SChuck Lever 
458fc1eb807SChuck Lever 	TP_STRUCT__entry(
459fc1eb807SChuck Lever 		__field(u32, xid)
460d11e9346SChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
461d11e9346SChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
462fc1eb807SChuck Lever 	),
463fc1eb807SChuck Lever 
464fc1eb807SChuck Lever 	TP_fast_assign(
465fc1eb807SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
466d11e9346SChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
467d11e9346SChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
468fc1eb807SChuck Lever 	),
469fc1eb807SChuck Lever 
470d11e9346SChuck Lever 	TP_printk("peer=[%s]:%s xid=0x%08x",
471d11e9346SChuck Lever 		__get_str(addr), __get_str(port), __entry->xid
472fc1eb807SChuck Lever 	)
473fc1eb807SChuck Lever );
474fc1eb807SChuck Lever 
475d11e9346SChuck Lever #define DEFINE_CALLBACK_EVENT(name)					\
476d11e9346SChuck Lever 		DEFINE_EVENT(xprtrdma_callback_class,			\
477d11e9346SChuck Lever 				xprtrdma_cb_##name,			\
478fc1eb807SChuck Lever 				TP_PROTO(				\
479d11e9346SChuck Lever 					const struct rpcrdma_xprt *r_xprt, \
480fc1eb807SChuck Lever 					const struct rpc_rqst *rqst	\
481fc1eb807SChuck Lever 				),					\
482d11e9346SChuck Lever 				TP_ARGS(r_xprt, rqst))
483fc1eb807SChuck Lever 
484b4a7f91cSChuck Lever /**
485b4744e00SChuck Lever  ** Connection events
486b4744e00SChuck Lever  **/
487b4744e00SChuck Lever 
488f54c870dSChuck Lever TRACE_EVENT(xprtrdma_inline_thresh,
489f54c870dSChuck Lever 	TP_PROTO(
490745b734cSChuck Lever 		const struct rpcrdma_ep *ep
491f54c870dSChuck Lever 	),
492f54c870dSChuck Lever 
493745b734cSChuck Lever 	TP_ARGS(ep),
494f54c870dSChuck Lever 
495f54c870dSChuck Lever 	TP_STRUCT__entry(
496f54c870dSChuck Lever 		__field(unsigned int, inline_send)
497f54c870dSChuck Lever 		__field(unsigned int, inline_recv)
498f54c870dSChuck Lever 		__field(unsigned int, max_send)
499f54c870dSChuck Lever 		__field(unsigned int, max_recv)
500745b734cSChuck Lever 		__array(unsigned char, srcaddr, sizeof(struct sockaddr_in6))
501745b734cSChuck Lever 		__array(unsigned char, dstaddr, sizeof(struct sockaddr_in6))
502f54c870dSChuck Lever 	),
503f54c870dSChuck Lever 
504f54c870dSChuck Lever 	TP_fast_assign(
505745b734cSChuck Lever 		const struct rdma_cm_id *id = ep->re_id;
506f54c870dSChuck Lever 
50793aa8e0aSChuck Lever 		__entry->inline_send = ep->re_inline_send;
50893aa8e0aSChuck Lever 		__entry->inline_recv = ep->re_inline_recv;
50993aa8e0aSChuck Lever 		__entry->max_send = ep->re_max_inline_send;
51093aa8e0aSChuck Lever 		__entry->max_recv = ep->re_max_inline_recv;
511745b734cSChuck Lever 		memcpy(__entry->srcaddr, &id->route.addr.src_addr,
512745b734cSChuck Lever 		       sizeof(struct sockaddr_in6));
513745b734cSChuck Lever 		memcpy(__entry->dstaddr, &id->route.addr.dst_addr,
514745b734cSChuck Lever 		       sizeof(struct sockaddr_in6));
515f54c870dSChuck Lever 	),
516f54c870dSChuck Lever 
517745b734cSChuck Lever 	TP_printk("%pISpc -> %pISpc neg send/recv=%u/%u, calc send/recv=%u/%u",
518745b734cSChuck Lever 		__entry->srcaddr, __entry->dstaddr,
519f54c870dSChuck Lever 		__entry->inline_send, __entry->inline_recv,
520f54c870dSChuck Lever 		__entry->max_send, __entry->max_recv
521f54c870dSChuck Lever 	)
522f54c870dSChuck Lever );
523f54c870dSChuck Lever 
5247b020f17SChuck Lever DEFINE_CONN_EVENT(connect);
5257b020f17SChuck Lever DEFINE_CONN_EVENT(disconnect);
5267b020f17SChuck Lever 
5277b020f17SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_op_inject_dsc);
5287b020f17SChuck Lever 
5297b020f17SChuck Lever TRACE_EVENT(xprtrdma_op_connect,
530b4744e00SChuck Lever 	TP_PROTO(
531b4744e00SChuck Lever 		const struct rpcrdma_xprt *r_xprt,
5327b020f17SChuck Lever 		unsigned long delay
533b4744e00SChuck Lever 	),
534b4744e00SChuck Lever 
5357b020f17SChuck Lever 	TP_ARGS(r_xprt, delay),
536b4744e00SChuck Lever 
537b4744e00SChuck Lever 	TP_STRUCT__entry(
538b4744e00SChuck Lever 		__field(const void *, r_xprt)
5397b020f17SChuck Lever 		__field(unsigned long, delay)
540b4744e00SChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
541b4744e00SChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
542b4744e00SChuck Lever 	),
543b4744e00SChuck Lever 
544b4744e00SChuck Lever 	TP_fast_assign(
545b4744e00SChuck Lever 		__entry->r_xprt = r_xprt;
5467b020f17SChuck Lever 		__entry->delay = delay;
547b4744e00SChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
548b4744e00SChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
549b4744e00SChuck Lever 	),
550b4744e00SChuck Lever 
5517b020f17SChuck Lever 	TP_printk("peer=[%s]:%s r_xprt=%p delay=%lu",
5527b020f17SChuck Lever 		__get_str(addr), __get_str(port), __entry->r_xprt,
5537b020f17SChuck Lever 		__entry->delay
554b4744e00SChuck Lever 	)
555b4744e00SChuck Lever );
556b4744e00SChuck Lever 
557b4744e00SChuck Lever 
558675dd90aSChuck Lever TRACE_EVENT(xprtrdma_op_set_cto,
559675dd90aSChuck Lever 	TP_PROTO(
560675dd90aSChuck Lever 		const struct rpcrdma_xprt *r_xprt,
561675dd90aSChuck Lever 		unsigned long connect,
562675dd90aSChuck Lever 		unsigned long reconnect
563675dd90aSChuck Lever 	),
564675dd90aSChuck Lever 
565675dd90aSChuck Lever 	TP_ARGS(r_xprt, connect, reconnect),
566675dd90aSChuck Lever 
567675dd90aSChuck Lever 	TP_STRUCT__entry(
568675dd90aSChuck Lever 		__field(const void *, r_xprt)
569675dd90aSChuck Lever 		__field(unsigned long, connect)
570675dd90aSChuck Lever 		__field(unsigned long, reconnect)
571675dd90aSChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
572675dd90aSChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
573675dd90aSChuck Lever 	),
574675dd90aSChuck Lever 
575675dd90aSChuck Lever 	TP_fast_assign(
576675dd90aSChuck Lever 		__entry->r_xprt = r_xprt;
577675dd90aSChuck Lever 		__entry->connect = connect;
578675dd90aSChuck Lever 		__entry->reconnect = reconnect;
579675dd90aSChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
580675dd90aSChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
581675dd90aSChuck Lever 	),
582675dd90aSChuck Lever 
583675dd90aSChuck Lever 	TP_printk("peer=[%s]:%s r_xprt=%p: connect=%lu reconnect=%lu",
584675dd90aSChuck Lever 		__get_str(addr), __get_str(port), __entry->r_xprt,
585675dd90aSChuck Lever 		__entry->connect / HZ, __entry->reconnect / HZ
586675dd90aSChuck Lever 	)
587675dd90aSChuck Lever );
588675dd90aSChuck Lever 
589f9521d53SChuck Lever TRACE_EVENT(xprtrdma_qp_event,
590643cf323SChuck Lever 	TP_PROTO(
591745b734cSChuck Lever 		const struct rpcrdma_ep *ep,
592643cf323SChuck Lever 		const struct ib_event *event
593643cf323SChuck Lever 	),
594643cf323SChuck Lever 
595745b734cSChuck Lever 	TP_ARGS(ep, event),
596643cf323SChuck Lever 
597643cf323SChuck Lever 	TP_STRUCT__entry(
598745b734cSChuck Lever 		__field(unsigned long, event)
599643cf323SChuck Lever 		__string(name, event->device->name)
600745b734cSChuck Lever 		__array(unsigned char, srcaddr, sizeof(struct sockaddr_in6))
601745b734cSChuck Lever 		__array(unsigned char, dstaddr, sizeof(struct sockaddr_in6))
602643cf323SChuck Lever 	),
603643cf323SChuck Lever 
604643cf323SChuck Lever 	TP_fast_assign(
605745b734cSChuck Lever 		const struct rdma_cm_id *id = ep->re_id;
606745b734cSChuck Lever 
607643cf323SChuck Lever 		__entry->event = event->event;
608643cf323SChuck Lever 		__assign_str(name, event->device->name);
609745b734cSChuck Lever 		memcpy(__entry->srcaddr, &id->route.addr.src_addr,
610745b734cSChuck Lever 		       sizeof(struct sockaddr_in6));
611745b734cSChuck Lever 		memcpy(__entry->dstaddr, &id->route.addr.dst_addr,
612745b734cSChuck Lever 		       sizeof(struct sockaddr_in6));
613643cf323SChuck Lever 	),
614643cf323SChuck Lever 
615745b734cSChuck Lever 	TP_printk("%pISpc -> %pISpc device=%s %s (%lu)",
616745b734cSChuck Lever 		__entry->srcaddr, __entry->dstaddr, __get_str(name),
617745b734cSChuck Lever 		rdma_show_ib_event(__entry->event), __entry->event
618643cf323SChuck Lever 	)
619643cf323SChuck Lever );
620643cf323SChuck Lever 
621b4744e00SChuck Lever /**
622ab03eff5SChuck Lever  ** Call events
623ab03eff5SChuck Lever  **/
624ab03eff5SChuck Lever 
6251c443effSChuck Lever TRACE_EVENT(xprtrdma_createmrs,
6261c443effSChuck Lever 	TP_PROTO(
6271c443effSChuck Lever 		const struct rpcrdma_xprt *r_xprt,
6281c443effSChuck Lever 		unsigned int count
6291c443effSChuck Lever 	),
6301c443effSChuck Lever 
6311c443effSChuck Lever 	TP_ARGS(r_xprt, count),
6321c443effSChuck Lever 
6331c443effSChuck Lever 	TP_STRUCT__entry(
6341c443effSChuck Lever 		__field(const void *, r_xprt)
6356dc6ec9eSChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
6366dc6ec9eSChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
6371c443effSChuck Lever 		__field(unsigned int, count)
6381c443effSChuck Lever 	),
6391c443effSChuck Lever 
6401c443effSChuck Lever 	TP_fast_assign(
6411c443effSChuck Lever 		__entry->r_xprt = r_xprt;
6421c443effSChuck Lever 		__entry->count = count;
6436dc6ec9eSChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
6446dc6ec9eSChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
6451c443effSChuck Lever 	),
6461c443effSChuck Lever 
6476dc6ec9eSChuck Lever 	TP_printk("peer=[%s]:%s r_xprt=%p: created %u MRs",
6486dc6ec9eSChuck Lever 		__get_str(addr), __get_str(port), __entry->r_xprt,
6496dc6ec9eSChuck Lever 		__entry->count
6506dc6ec9eSChuck Lever 	)
6516dc6ec9eSChuck Lever );
6526dc6ec9eSChuck Lever 
6530307cdecSChuck Lever TRACE_EVENT(xprtrdma_nomrs_err,
6546dc6ec9eSChuck Lever 	TP_PROTO(
6550307cdecSChuck Lever 		const struct rpcrdma_xprt *r_xprt,
6566dc6ec9eSChuck Lever 		const struct rpcrdma_req *req
6576dc6ec9eSChuck Lever 	),
6586dc6ec9eSChuck Lever 
6590307cdecSChuck Lever 	TP_ARGS(r_xprt, req),
6606dc6ec9eSChuck Lever 
6616dc6ec9eSChuck Lever 	TP_STRUCT__entry(
6626dc6ec9eSChuck Lever 		__field(unsigned int, task_id)
6636dc6ec9eSChuck Lever 		__field(unsigned int, client_id)
6640307cdecSChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
6650307cdecSChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
6666dc6ec9eSChuck Lever 	),
6676dc6ec9eSChuck Lever 
6686dc6ec9eSChuck Lever 	TP_fast_assign(
6696dc6ec9eSChuck Lever 		const struct rpc_rqst *rqst = &req->rl_slot;
6706dc6ec9eSChuck Lever 
6716dc6ec9eSChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
6726dc6ec9eSChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
6730307cdecSChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
6740307cdecSChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
6756dc6ec9eSChuck Lever 	),
6766dc6ec9eSChuck Lever 
6770307cdecSChuck Lever 	TP_printk("peer=[%s]:%s task:%u@%u",
6780307cdecSChuck Lever 		__get_str(addr), __get_str(port),
6790307cdecSChuck Lever 		__entry->task_id, __entry->client_id
6803b39f52aSChuck Lever 	)
6813b39f52aSChuck Lever );
6821c443effSChuck Lever 
683aba11831SChuck Lever DEFINE_RDCH_EVENT(read);
684aba11831SChuck Lever DEFINE_WRCH_EVENT(write);
685aba11831SChuck Lever DEFINE_WRCH_EVENT(reply);
68658f10ad4SChuck Lever 
687ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch);
688614f3c96SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch_pullup);
689614f3c96SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch_mapped);
690ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_readch);
691ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_areadch);
692ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_writech);
693ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_replych);
694ab03eff5SChuck Lever 
695ab03eff5SChuck Lever #define xprtrdma_show_chunktype(x)					\
696ab03eff5SChuck Lever 		__print_symbolic(x,					\
697ab03eff5SChuck Lever 				{ rpcrdma_noch, "inline" },		\
698614f3c96SChuck Lever 				{ rpcrdma_noch_pullup, "pullup" },	\
699614f3c96SChuck Lever 				{ rpcrdma_noch_mapped, "mapped" },	\
700ab03eff5SChuck Lever 				{ rpcrdma_readch, "read list" },	\
701ab03eff5SChuck Lever 				{ rpcrdma_areadch, "*read list" },	\
702ab03eff5SChuck Lever 				{ rpcrdma_writech, "write list" },	\
703ab03eff5SChuck Lever 				{ rpcrdma_replych, "reply chunk" })
704ab03eff5SChuck Lever 
705ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_marshal,
706ab03eff5SChuck Lever 	TP_PROTO(
7071310051cSChuck Lever 		const struct rpcrdma_req *req,
708ab03eff5SChuck Lever 		unsigned int rtype,
709ab03eff5SChuck Lever 		unsigned int wtype
710ab03eff5SChuck Lever 	),
711ab03eff5SChuck Lever 
7121310051cSChuck Lever 	TP_ARGS(req, rtype, wtype),
713ab03eff5SChuck Lever 
714ab03eff5SChuck Lever 	TP_STRUCT__entry(
715ab03eff5SChuck Lever 		__field(unsigned int, task_id)
716ab03eff5SChuck Lever 		__field(unsigned int, client_id)
717ab03eff5SChuck Lever 		__field(u32, xid)
718ab03eff5SChuck Lever 		__field(unsigned int, hdrlen)
719ab03eff5SChuck Lever 		__field(unsigned int, headlen)
720ab03eff5SChuck Lever 		__field(unsigned int, pagelen)
721ab03eff5SChuck Lever 		__field(unsigned int, taillen)
722ab03eff5SChuck Lever 		__field(unsigned int, rtype)
723ab03eff5SChuck Lever 		__field(unsigned int, wtype)
724ab03eff5SChuck Lever 	),
725ab03eff5SChuck Lever 
726ab03eff5SChuck Lever 	TP_fast_assign(
7271310051cSChuck Lever 		const struct rpc_rqst *rqst = &req->rl_slot;
7281310051cSChuck Lever 
729ab03eff5SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
730ab03eff5SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
731ab03eff5SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
7321310051cSChuck Lever 		__entry->hdrlen = req->rl_hdrbuf.len;
733ab03eff5SChuck Lever 		__entry->headlen = rqst->rq_snd_buf.head[0].iov_len;
734ab03eff5SChuck Lever 		__entry->pagelen = rqst->rq_snd_buf.page_len;
735ab03eff5SChuck Lever 		__entry->taillen = rqst->rq_snd_buf.tail[0].iov_len;
736ab03eff5SChuck Lever 		__entry->rtype = rtype;
737ab03eff5SChuck Lever 		__entry->wtype = wtype;
738ab03eff5SChuck Lever 	),
739ab03eff5SChuck Lever 
740ab03eff5SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x: hdr=%u xdr=%u/%u/%u %s/%s",
741ab03eff5SChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
742ab03eff5SChuck Lever 		__entry->hdrlen,
743ab03eff5SChuck Lever 		__entry->headlen, __entry->pagelen, __entry->taillen,
744ab03eff5SChuck Lever 		xprtrdma_show_chunktype(__entry->rtype),
745ab03eff5SChuck Lever 		xprtrdma_show_chunktype(__entry->wtype)
746ab03eff5SChuck Lever 	)
747ab03eff5SChuck Lever );
748ab03eff5SChuck Lever 
74917e4c443SChuck Lever TRACE_EVENT(xprtrdma_marshal_failed,
75017e4c443SChuck Lever 	TP_PROTO(const struct rpc_rqst *rqst,
75117e4c443SChuck Lever 		 int ret
75217e4c443SChuck Lever 	),
75317e4c443SChuck Lever 
75417e4c443SChuck Lever 	TP_ARGS(rqst, ret),
75517e4c443SChuck Lever 
75617e4c443SChuck Lever 	TP_STRUCT__entry(
75717e4c443SChuck Lever 		__field(unsigned int, task_id)
75817e4c443SChuck Lever 		__field(unsigned int, client_id)
75917e4c443SChuck Lever 		__field(u32, xid)
76017e4c443SChuck Lever 		__field(int, ret)
76117e4c443SChuck Lever 	),
76217e4c443SChuck Lever 
76317e4c443SChuck Lever 	TP_fast_assign(
76417e4c443SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
76517e4c443SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
76617e4c443SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
76717e4c443SChuck Lever 		__entry->ret = ret;
76817e4c443SChuck Lever 	),
76917e4c443SChuck Lever 
77017e4c443SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x: ret=%d",
77117e4c443SChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
77217e4c443SChuck Lever 		__entry->ret
77317e4c443SChuck Lever 	)
77417e4c443SChuck Lever );
77517e4c443SChuck Lever 
77605eb06d8SChuck Lever TRACE_EVENT(xprtrdma_prepsend_failed,
77705eb06d8SChuck Lever 	TP_PROTO(const struct rpc_rqst *rqst,
77805eb06d8SChuck Lever 		 int ret
77905eb06d8SChuck Lever 	),
78005eb06d8SChuck Lever 
78105eb06d8SChuck Lever 	TP_ARGS(rqst, ret),
78205eb06d8SChuck Lever 
78305eb06d8SChuck Lever 	TP_STRUCT__entry(
78405eb06d8SChuck Lever 		__field(unsigned int, task_id)
78505eb06d8SChuck Lever 		__field(unsigned int, client_id)
78605eb06d8SChuck Lever 		__field(u32, xid)
78705eb06d8SChuck Lever 		__field(int, ret)
78805eb06d8SChuck Lever 	),
78905eb06d8SChuck Lever 
79005eb06d8SChuck Lever 	TP_fast_assign(
79105eb06d8SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
79205eb06d8SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
79305eb06d8SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
79405eb06d8SChuck Lever 		__entry->ret = ret;
79505eb06d8SChuck Lever 	),
79605eb06d8SChuck Lever 
79705eb06d8SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x: ret=%d",
79805eb06d8SChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
79905eb06d8SChuck Lever 		__entry->ret
80005eb06d8SChuck Lever 	)
80105eb06d8SChuck Lever );
80205eb06d8SChuck Lever 
803ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_post_send,
804ab03eff5SChuck Lever 	TP_PROTO(
805bdb2ce82SChuck Lever 		const struct rpcrdma_req *req
806ab03eff5SChuck Lever 	),
807ab03eff5SChuck Lever 
808bdb2ce82SChuck Lever 	TP_ARGS(req),
809ab03eff5SChuck Lever 
810ab03eff5SChuck Lever 	TP_STRUCT__entry(
811b2e7467fSChuck Lever 		__field(u32, cq_id)
812b2e7467fSChuck Lever 		__field(int, completion_id)
8130c77668dSChuck Lever 		__field(unsigned int, task_id)
8140c77668dSChuck Lever 		__field(unsigned int, client_id)
815ab03eff5SChuck Lever 		__field(int, num_sge)
816470443e0SChuck Lever 		__field(int, signaled)
817ab03eff5SChuck Lever 	),
818ab03eff5SChuck Lever 
819ab03eff5SChuck Lever 	TP_fast_assign(
8200c77668dSChuck Lever 		const struct rpc_rqst *rqst = &req->rl_slot;
821b2e7467fSChuck Lever 		const struct rpcrdma_sendctx *sc = req->rl_sendctx;
8220c77668dSChuck Lever 
823b2e7467fSChuck Lever 		__entry->cq_id = sc->sc_cid.ci_queue_id;
824b2e7467fSChuck Lever 		__entry->completion_id = sc->sc_cid.ci_completion_id;
8250c77668dSChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
82610694ac9SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client ?
82710694ac9SChuck Lever 				     rqst->rq_task->tk_client->cl_clid : -1;
828dc15c3d5SChuck Lever 		__entry->num_sge = req->rl_wr.num_sge;
829dc15c3d5SChuck Lever 		__entry->signaled = req->rl_wr.send_flags & IB_SEND_SIGNALED;
830ab03eff5SChuck Lever 	),
831ab03eff5SChuck Lever 
832b2e7467fSChuck Lever 	TP_printk("task:%u@%u cq.id=%u cid=%d (%d SGE%s) %s",
8330c77668dSChuck Lever 		__entry->task_id, __entry->client_id,
834b2e7467fSChuck Lever 		__entry->cq_id, __entry->completion_id,
835b2e7467fSChuck Lever 		__entry->num_sge, (__entry->num_sge == 1 ? "" : "s"),
836bdb2ce82SChuck Lever 		(__entry->signaled ? "signaled" : "")
837ab03eff5SChuck Lever 	)
838ab03eff5SChuck Lever );
839ab03eff5SChuck Lever 
840b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_post_recv,
841b4a7f91cSChuck Lever 	TP_PROTO(
8422dfdcd88SChuck Lever 		const struct rpcrdma_rep *rep
843b4a7f91cSChuck Lever 	),
844b4a7f91cSChuck Lever 
8452dfdcd88SChuck Lever 	TP_ARGS(rep),
846b4a7f91cSChuck Lever 
847b4a7f91cSChuck Lever 	TP_STRUCT__entry(
848af5865d2SChuck Lever 		__field(u32, cq_id)
849af5865d2SChuck Lever 		__field(int, completion_id)
850b4a7f91cSChuck Lever 	),
851b4a7f91cSChuck Lever 
852b4a7f91cSChuck Lever 	TP_fast_assign(
853af5865d2SChuck Lever 		__entry->cq_id = rep->rr_cid.ci_queue_id;
854af5865d2SChuck Lever 		__entry->completion_id = rep->rr_cid.ci_completion_id;
855b4a7f91cSChuck Lever 	),
856b4a7f91cSChuck Lever 
857af5865d2SChuck Lever 	TP_printk("cq.id=%d cid=%d",
858af5865d2SChuck Lever 		__entry->cq_id, __entry->completion_id
859b4a7f91cSChuck Lever 	)
860b4a7f91cSChuck Lever );
861b4a7f91cSChuck Lever 
8627c8d9e7cSChuck Lever TRACE_EVENT(xprtrdma_post_recvs,
8637c8d9e7cSChuck Lever 	TP_PROTO(
8647c8d9e7cSChuck Lever 		const struct rpcrdma_xprt *r_xprt,
8657c8d9e7cSChuck Lever 		unsigned int count,
8667c8d9e7cSChuck Lever 		int status
8677c8d9e7cSChuck Lever 	),
8687c8d9e7cSChuck Lever 
8697c8d9e7cSChuck Lever 	TP_ARGS(r_xprt, count, status),
8707c8d9e7cSChuck Lever 
8717c8d9e7cSChuck Lever 	TP_STRUCT__entry(
8727c8d9e7cSChuck Lever 		__field(const void *, r_xprt)
8737c8d9e7cSChuck Lever 		__field(unsigned int, count)
8747c8d9e7cSChuck Lever 		__field(int, status)
8757c8d9e7cSChuck Lever 		__field(int, posted)
8767c8d9e7cSChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
8777c8d9e7cSChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
8787c8d9e7cSChuck Lever 	),
8797c8d9e7cSChuck Lever 
8807c8d9e7cSChuck Lever 	TP_fast_assign(
8817c8d9e7cSChuck Lever 		__entry->r_xprt = r_xprt;
8827c8d9e7cSChuck Lever 		__entry->count = count;
8837c8d9e7cSChuck Lever 		__entry->status = status;
884e28ce900SChuck Lever 		__entry->posted = r_xprt->rx_ep->re_receive_count;
8857c8d9e7cSChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
8867c8d9e7cSChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
8877c8d9e7cSChuck Lever 	),
8887c8d9e7cSChuck Lever 
8897c8d9e7cSChuck Lever 	TP_printk("peer=[%s]:%s r_xprt=%p: %u new recvs, %d active (rc %d)",
8907c8d9e7cSChuck Lever 		__get_str(addr), __get_str(port), __entry->r_xprt,
8917c8d9e7cSChuck Lever 		__entry->count, __entry->posted, __entry->status
892ab03eff5SChuck Lever 	)
893ab03eff5SChuck Lever );
894ab03eff5SChuck Lever 
89536a55edfSChuck Lever TRACE_EVENT(xprtrdma_post_linv_err,
8964b93dab3SChuck Lever 	TP_PROTO(
8974b93dab3SChuck Lever 		const struct rpcrdma_req *req,
8984b93dab3SChuck Lever 		int status
8994b93dab3SChuck Lever 	),
9004b93dab3SChuck Lever 
9014b93dab3SChuck Lever 	TP_ARGS(req, status),
9024b93dab3SChuck Lever 
9034b93dab3SChuck Lever 	TP_STRUCT__entry(
90436a55edfSChuck Lever 		__field(unsigned int, task_id)
90536a55edfSChuck Lever 		__field(unsigned int, client_id)
9064b93dab3SChuck Lever 		__field(int, status)
9074b93dab3SChuck Lever 	),
9084b93dab3SChuck Lever 
9094b93dab3SChuck Lever 	TP_fast_assign(
91036a55edfSChuck Lever 		const struct rpc_task *task = req->rl_slot.rq_task;
91136a55edfSChuck Lever 
91236a55edfSChuck Lever 		__entry->task_id = task->tk_pid;
91336a55edfSChuck Lever 		__entry->client_id = task->tk_client->cl_clid;
9144b93dab3SChuck Lever 		__entry->status = status;
9154b93dab3SChuck Lever 	),
9164b93dab3SChuck Lever 
91736a55edfSChuck Lever 	TP_printk("task:%u@%u status=%d",
91836a55edfSChuck Lever 		__entry->task_id, __entry->client_id, __entry->status
9194b93dab3SChuck Lever 	)
9204b93dab3SChuck Lever );
9214b93dab3SChuck Lever 
922ab03eff5SChuck Lever /**
923ab03eff5SChuck Lever  ** Completion events
924ab03eff5SChuck Lever  **/
925ab03eff5SChuck Lever 
926c30f259aSChuck Lever DEFINE_RECEIVE_COMPLETION_EVENT(xprtrdma_wc_receive);
927c30f259aSChuck Lever 
928b2e7467fSChuck Lever DEFINE_COMPLETION_EVENT(xprtrdma_wc_send);
929*6b147ea7SChuck Lever DEFINE_MR_COMPLETION_EVENT(xprtrdma_wc_fastreg);
930*6b147ea7SChuck Lever DEFINE_MR_COMPLETION_EVENT(xprtrdma_wc_li);
931*6b147ea7SChuck Lever DEFINE_MR_COMPLETION_EVENT(xprtrdma_wc_li_wake);
932*6b147ea7SChuck Lever DEFINE_MR_COMPLETION_EVENT(xprtrdma_wc_li_done);
9332937fedeSChuck Lever 
93453b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_alloc,
93553b2c1cbSChuck Lever 	TP_PROTO(
93653b2c1cbSChuck Lever 		const struct rpcrdma_mr *mr,
93753b2c1cbSChuck Lever 		int rc
93853b2c1cbSChuck Lever 	),
93953b2c1cbSChuck Lever 
94053b2c1cbSChuck Lever 	TP_ARGS(mr, rc),
94153b2c1cbSChuck Lever 
94253b2c1cbSChuck Lever 	TP_STRUCT__entry(
94362a89501SChuck Lever 		__field(u32, mr_id)
94453b2c1cbSChuck Lever 		__field(int, rc)
94553b2c1cbSChuck Lever 	),
94653b2c1cbSChuck Lever 
94753b2c1cbSChuck Lever 	TP_fast_assign(
94862a89501SChuck Lever 		__entry->mr_id = mr->frwr.fr_mr->res.id;
94953b2c1cbSChuck Lever 		__entry->rc = rc;
95053b2c1cbSChuck Lever 	),
95153b2c1cbSChuck Lever 
95262a89501SChuck Lever 	TP_printk("mr.id=%u: rc=%d",
95362a89501SChuck Lever 		__entry->mr_id, __entry->rc
95453b2c1cbSChuck Lever 	)
95553b2c1cbSChuck Lever );
95653b2c1cbSChuck Lever 
95753b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_dereg,
95853b2c1cbSChuck Lever 	TP_PROTO(
95953b2c1cbSChuck Lever 		const struct rpcrdma_mr *mr,
96053b2c1cbSChuck Lever 		int rc
96153b2c1cbSChuck Lever 	),
96253b2c1cbSChuck Lever 
96353b2c1cbSChuck Lever 	TP_ARGS(mr, rc),
96453b2c1cbSChuck Lever 
96553b2c1cbSChuck Lever 	TP_STRUCT__entry(
96662a89501SChuck Lever 		__field(u32, mr_id)
96762a89501SChuck Lever 		__field(int, nents)
96853b2c1cbSChuck Lever 		__field(u32, handle)
96953b2c1cbSChuck Lever 		__field(u32, length)
97053b2c1cbSChuck Lever 		__field(u64, offset)
97153b2c1cbSChuck Lever 		__field(u32, dir)
97253b2c1cbSChuck Lever 		__field(int, rc)
97353b2c1cbSChuck Lever 	),
97453b2c1cbSChuck Lever 
97553b2c1cbSChuck Lever 	TP_fast_assign(
97662a89501SChuck Lever 		__entry->mr_id  = mr->frwr.fr_mr->res.id;
97762a89501SChuck Lever 		__entry->nents  = mr->mr_nents;
97853b2c1cbSChuck Lever 		__entry->handle = mr->mr_handle;
97953b2c1cbSChuck Lever 		__entry->length = mr->mr_length;
98053b2c1cbSChuck Lever 		__entry->offset = mr->mr_offset;
98153b2c1cbSChuck Lever 		__entry->dir    = mr->mr_dir;
98253b2c1cbSChuck Lever 		__entry->rc	= rc;
98353b2c1cbSChuck Lever 	),
98453b2c1cbSChuck Lever 
98562a89501SChuck Lever 	TP_printk("mr.id=%u nents=%d %u@0x%016llx:0x%08x (%s): rc=%d",
98662a89501SChuck Lever 		__entry->mr_id, __entry->nents, __entry->length,
98753b2c1cbSChuck Lever 		(unsigned long long)__entry->offset, __entry->handle,
98853b2c1cbSChuck Lever 		xprtrdma_show_direction(__entry->dir),
98953b2c1cbSChuck Lever 		__entry->rc
99053b2c1cbSChuck Lever 	)
99153b2c1cbSChuck Lever );
99253b2c1cbSChuck Lever 
99353b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_sgerr,
99453b2c1cbSChuck Lever 	TP_PROTO(
99553b2c1cbSChuck Lever 		const struct rpcrdma_mr *mr,
99653b2c1cbSChuck Lever 		int sg_nents
99753b2c1cbSChuck Lever 	),
99853b2c1cbSChuck Lever 
99953b2c1cbSChuck Lever 	TP_ARGS(mr, sg_nents),
100053b2c1cbSChuck Lever 
100153b2c1cbSChuck Lever 	TP_STRUCT__entry(
100262a89501SChuck Lever 		__field(u32, mr_id)
100353b2c1cbSChuck Lever 		__field(u64, addr)
100453b2c1cbSChuck Lever 		__field(u32, dir)
100553b2c1cbSChuck Lever 		__field(int, nents)
100653b2c1cbSChuck Lever 	),
100753b2c1cbSChuck Lever 
100853b2c1cbSChuck Lever 	TP_fast_assign(
100962a89501SChuck Lever 		__entry->mr_id = mr->frwr.fr_mr->res.id;
101053b2c1cbSChuck Lever 		__entry->addr = mr->mr_sg->dma_address;
101153b2c1cbSChuck Lever 		__entry->dir = mr->mr_dir;
101253b2c1cbSChuck Lever 		__entry->nents = sg_nents;
101353b2c1cbSChuck Lever 	),
101453b2c1cbSChuck Lever 
101562a89501SChuck Lever 	TP_printk("mr.id=%u DMA addr=0x%llx (%s) sg_nents=%d",
101662a89501SChuck Lever 		__entry->mr_id, __entry->addr,
101753b2c1cbSChuck Lever 		xprtrdma_show_direction(__entry->dir),
101853b2c1cbSChuck Lever 		__entry->nents
101953b2c1cbSChuck Lever 	)
102053b2c1cbSChuck Lever );
102153b2c1cbSChuck Lever 
102253b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_maperr,
102353b2c1cbSChuck Lever 	TP_PROTO(
102453b2c1cbSChuck Lever 		const struct rpcrdma_mr *mr,
102553b2c1cbSChuck Lever 		int num_mapped
102653b2c1cbSChuck Lever 	),
102753b2c1cbSChuck Lever 
102853b2c1cbSChuck Lever 	TP_ARGS(mr, num_mapped),
102953b2c1cbSChuck Lever 
103053b2c1cbSChuck Lever 	TP_STRUCT__entry(
103162a89501SChuck Lever 		__field(u32, mr_id)
103253b2c1cbSChuck Lever 		__field(u64, addr)
103353b2c1cbSChuck Lever 		__field(u32, dir)
103453b2c1cbSChuck Lever 		__field(int, num_mapped)
103553b2c1cbSChuck Lever 		__field(int, nents)
103653b2c1cbSChuck Lever 	),
103753b2c1cbSChuck Lever 
103853b2c1cbSChuck Lever 	TP_fast_assign(
103962a89501SChuck Lever 		__entry->mr_id = mr->frwr.fr_mr->res.id;
104053b2c1cbSChuck Lever 		__entry->addr = mr->mr_sg->dma_address;
104153b2c1cbSChuck Lever 		__entry->dir = mr->mr_dir;
104253b2c1cbSChuck Lever 		__entry->num_mapped = num_mapped;
104353b2c1cbSChuck Lever 		__entry->nents = mr->mr_nents;
104453b2c1cbSChuck Lever 	),
104553b2c1cbSChuck Lever 
104662a89501SChuck Lever 	TP_printk("mr.id=%u DMA addr=0x%llx (%s) nents=%d of %d",
104762a89501SChuck Lever 		__entry->mr_id, __entry->addr,
104853b2c1cbSChuck Lever 		xprtrdma_show_direction(__entry->dir),
104953b2c1cbSChuck Lever 		__entry->num_mapped, __entry->nents
105053b2c1cbSChuck Lever 	)
105153b2c1cbSChuck Lever );
105253b2c1cbSChuck Lever 
10534ddd0fc3SChuck Lever DEFINE_MR_EVENT(fastreg);
1054d379eaa8SChuck Lever DEFINE_MR_EVENT(localinv);
10554ddd0fc3SChuck Lever DEFINE_MR_EVENT(reminv);
1056d379eaa8SChuck Lever DEFINE_MR_EVENT(map);
10577703db97SChuck Lever 
10587703db97SChuck Lever DEFINE_ANON_MR_EVENT(unmap);
105958f10ad4SChuck Lever 
106053b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_dma_maperr,
106153b2c1cbSChuck Lever 	TP_PROTO(
106253b2c1cbSChuck Lever 		u64 addr
106353b2c1cbSChuck Lever 	),
106453b2c1cbSChuck Lever 
106553b2c1cbSChuck Lever 	TP_ARGS(addr),
106653b2c1cbSChuck Lever 
106753b2c1cbSChuck Lever 	TP_STRUCT__entry(
106853b2c1cbSChuck Lever 		__field(u64, addr)
106953b2c1cbSChuck Lever 	),
107053b2c1cbSChuck Lever 
107153b2c1cbSChuck Lever 	TP_fast_assign(
107253b2c1cbSChuck Lever 		__entry->addr = addr;
107353b2c1cbSChuck Lever 	),
107453b2c1cbSChuck Lever 
107553b2c1cbSChuck Lever 	TP_printk("dma addr=0x%llx\n", __entry->addr)
107653b2c1cbSChuck Lever );
107753b2c1cbSChuck Lever 
1078b4a7f91cSChuck Lever /**
1079b4a7f91cSChuck Lever  ** Reply events
1080b4a7f91cSChuck Lever  **/
1081b4a7f91cSChuck Lever 
1082b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_reply,
1083b4a7f91cSChuck Lever 	TP_PROTO(
1084b4a7f91cSChuck Lever 		const struct rpc_task *task,
1085b4a7f91cSChuck Lever 		const struct rpcrdma_rep *rep,
1086b4a7f91cSChuck Lever 		unsigned int credits
1087b4a7f91cSChuck Lever 	),
1088b4a7f91cSChuck Lever 
108903ffd924SChuck Lever 	TP_ARGS(task, rep, credits),
1090b4a7f91cSChuck Lever 
1091b4a7f91cSChuck Lever 	TP_STRUCT__entry(
1092b4a7f91cSChuck Lever 		__field(unsigned int, task_id)
1093b4a7f91cSChuck Lever 		__field(unsigned int, client_id)
1094b4a7f91cSChuck Lever 		__field(u32, xid)
1095b4a7f91cSChuck Lever 		__field(unsigned int, credits)
1096b4a7f91cSChuck Lever 	),
1097b4a7f91cSChuck Lever 
1098b4a7f91cSChuck Lever 	TP_fast_assign(
1099b4a7f91cSChuck Lever 		__entry->task_id = task->tk_pid;
1100b4a7f91cSChuck Lever 		__entry->client_id = task->tk_client->cl_clid;
1101b4a7f91cSChuck Lever 		__entry->xid = be32_to_cpu(rep->rr_xid);
1102b4a7f91cSChuck Lever 		__entry->credits = credits;
1103b4a7f91cSChuck Lever 	),
1104b4a7f91cSChuck Lever 
110503ffd924SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x credits=%u",
1106b4a7f91cSChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
110703ffd924SChuck Lever 		__entry->credits
1108b4a7f91cSChuck Lever 	)
1109b4a7f91cSChuck Lever );
1110b4a7f91cSChuck Lever 
11113a9568feSChuck Lever DEFINE_REPLY_EVENT(vers);
11123a9568feSChuck Lever DEFINE_REPLY_EVENT(rqst);
11133a9568feSChuck Lever DEFINE_REPLY_EVENT(short);
11143a9568feSChuck Lever DEFINE_REPLY_EVENT(hdr);
1115b4a7f91cSChuck Lever 
11163821e232SChuck Lever TRACE_EVENT(xprtrdma_err_vers,
1117e48f083eSChuck Lever 	TP_PROTO(
11183821e232SChuck Lever 		const struct rpc_rqst *rqst,
11193821e232SChuck Lever 		__be32 *min,
11203821e232SChuck Lever 		__be32 *max
1121e48f083eSChuck Lever 	),
1122e48f083eSChuck Lever 
11233821e232SChuck Lever 	TP_ARGS(rqst, min, max),
1124e48f083eSChuck Lever 
1125e48f083eSChuck Lever 	TP_STRUCT__entry(
1126e48f083eSChuck Lever 		__field(unsigned int, task_id)
1127e48f083eSChuck Lever 		__field(unsigned int, client_id)
11283821e232SChuck Lever 		__field(u32, xid)
11293821e232SChuck Lever 		__field(u32, min)
11303821e232SChuck Lever 		__field(u32, max)
11313821e232SChuck Lever 	),
11323821e232SChuck Lever 
11333821e232SChuck Lever 	TP_fast_assign(
11343821e232SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
11353821e232SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
11363821e232SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
11373821e232SChuck Lever 		__entry->min = be32_to_cpup(min);
11383821e232SChuck Lever 		__entry->max = be32_to_cpup(max);
11393821e232SChuck Lever 	),
11403821e232SChuck Lever 
11413821e232SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x versions=[%u, %u]",
11423821e232SChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
11433821e232SChuck Lever 		__entry->min, __entry->max
11443821e232SChuck Lever 	)
11453821e232SChuck Lever );
11463821e232SChuck Lever 
11473821e232SChuck Lever TRACE_EVENT(xprtrdma_err_chunk,
11483821e232SChuck Lever 	TP_PROTO(
11493821e232SChuck Lever 		const struct rpc_rqst *rqst
11503821e232SChuck Lever 	),
11513821e232SChuck Lever 
11523821e232SChuck Lever 	TP_ARGS(rqst),
11533821e232SChuck Lever 
11543821e232SChuck Lever 	TP_STRUCT__entry(
11553821e232SChuck Lever 		__field(unsigned int, task_id)
11563821e232SChuck Lever 		__field(unsigned int, client_id)
1157e48f083eSChuck Lever 		__field(u32, xid)
1158e48f083eSChuck Lever 	),
1159e48f083eSChuck Lever 
1160e48f083eSChuck Lever 	TP_fast_assign(
11613821e232SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
11623821e232SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
11633821e232SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
1164e48f083eSChuck Lever 	),
1165e48f083eSChuck Lever 
11663821e232SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x",
11673821e232SChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid
1168e48f083eSChuck Lever 	)
1169e48f083eSChuck Lever );
1170e48f083eSChuck Lever 
11713821e232SChuck Lever TRACE_EVENT(xprtrdma_err_unrecognized,
11723821e232SChuck Lever 	TP_PROTO(
11733821e232SChuck Lever 		const struct rpc_rqst *rqst,
11743821e232SChuck Lever 		__be32 *procedure
11753821e232SChuck Lever 	),
11763821e232SChuck Lever 
11773821e232SChuck Lever 	TP_ARGS(rqst, procedure),
11783821e232SChuck Lever 
11793821e232SChuck Lever 	TP_STRUCT__entry(
11803821e232SChuck Lever 		__field(unsigned int, task_id)
11813821e232SChuck Lever 		__field(unsigned int, client_id)
11823821e232SChuck Lever 		__field(u32, xid)
11833821e232SChuck Lever 		__field(u32, procedure)
11843821e232SChuck Lever 	),
11853821e232SChuck Lever 
11863821e232SChuck Lever 	TP_fast_assign(
11873821e232SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
11883821e232SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
11893821e232SChuck Lever 		__entry->procedure = be32_to_cpup(procedure);
11903821e232SChuck Lever 	),
11913821e232SChuck Lever 
11923821e232SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x procedure=%u",
11933821e232SChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
11943821e232SChuck Lever 		__entry->procedure
11953821e232SChuck Lever 	)
11963821e232SChuck Lever );
1197e48f083eSChuck Lever 
1198e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_fixup,
1199e11b7c96SChuck Lever 	TP_PROTO(
1200e11b7c96SChuck Lever 		const struct rpc_rqst *rqst,
1201d4957f01SChuck Lever 		unsigned long fixup
1202e11b7c96SChuck Lever 	),
1203e11b7c96SChuck Lever 
1204d4957f01SChuck Lever 	TP_ARGS(rqst, fixup),
1205e11b7c96SChuck Lever 
1206e11b7c96SChuck Lever 	TP_STRUCT__entry(
1207e11b7c96SChuck Lever 		__field(unsigned int, task_id)
1208e11b7c96SChuck Lever 		__field(unsigned int, client_id)
1209d4957f01SChuck Lever 		__field(unsigned long, fixup)
1210d4957f01SChuck Lever 		__field(size_t, headlen)
1211d4957f01SChuck Lever 		__field(unsigned int, pagelen)
1212d4957f01SChuck Lever 		__field(size_t, taillen)
1213e11b7c96SChuck Lever 	),
1214e11b7c96SChuck Lever 
1215e11b7c96SChuck Lever 	TP_fast_assign(
1216e11b7c96SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
1217e11b7c96SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
1218d4957f01SChuck Lever 		__entry->fixup = fixup;
1219d4957f01SChuck Lever 		__entry->headlen = rqst->rq_rcv_buf.head[0].iov_len;
1220d4957f01SChuck Lever 		__entry->pagelen = rqst->rq_rcv_buf.page_len;
1221d4957f01SChuck Lever 		__entry->taillen = rqst->rq_rcv_buf.tail[0].iov_len;
1222e11b7c96SChuck Lever 	),
1223e11b7c96SChuck Lever 
1224d4957f01SChuck Lever 	TP_printk("task:%u@%u fixup=%lu xdr=%zu/%u/%zu",
1225d4957f01SChuck Lever 		__entry->task_id, __entry->client_id, __entry->fixup,
1226d4957f01SChuck Lever 		__entry->headlen, __entry->pagelen, __entry->taillen
1227e11b7c96SChuck Lever 	)
1228e11b7c96SChuck Lever );
1229e11b7c96SChuck Lever 
1230e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_decode_seg,
1231e11b7c96SChuck Lever 	TP_PROTO(
1232e11b7c96SChuck Lever 		u32 handle,
1233e11b7c96SChuck Lever 		u32 length,
1234e11b7c96SChuck Lever 		u64 offset
1235e11b7c96SChuck Lever 	),
1236e11b7c96SChuck Lever 
1237e11b7c96SChuck Lever 	TP_ARGS(handle, length, offset),
1238e11b7c96SChuck Lever 
1239e11b7c96SChuck Lever 	TP_STRUCT__entry(
1240e11b7c96SChuck Lever 		__field(u32, handle)
1241e11b7c96SChuck Lever 		__field(u32, length)
1242e11b7c96SChuck Lever 		__field(u64, offset)
1243e11b7c96SChuck Lever 	),
1244e11b7c96SChuck Lever 
1245e11b7c96SChuck Lever 	TP_fast_assign(
1246e11b7c96SChuck Lever 		__entry->handle = handle;
1247e11b7c96SChuck Lever 		__entry->length = length;
1248e11b7c96SChuck Lever 		__entry->offset = offset;
1249e11b7c96SChuck Lever 	),
1250e11b7c96SChuck Lever 
1251e11b7c96SChuck Lever 	TP_printk("%u@0x%016llx:0x%08x",
1252e11b7c96SChuck Lever 		__entry->length, (unsigned long long)__entry->offset,
1253e11b7c96SChuck Lever 		__entry->handle
1254e11b7c96SChuck Lever 	)
1255e11b7c96SChuck Lever );
1256e11b7c96SChuck Lever 
12578e24e191SChuck Lever TRACE_EVENT(xprtrdma_mrs_zap,
12588e24e191SChuck Lever 	TP_PROTO(
12598e24e191SChuck Lever 		const struct rpc_task *task
12608e24e191SChuck Lever 	),
12618e24e191SChuck Lever 
12628e24e191SChuck Lever 	TP_ARGS(task),
12638e24e191SChuck Lever 
12648e24e191SChuck Lever 	TP_STRUCT__entry(
12658e24e191SChuck Lever 		__field(unsigned int, task_id)
12668e24e191SChuck Lever 		__field(unsigned int, client_id)
12678e24e191SChuck Lever 	),
12688e24e191SChuck Lever 
12698e24e191SChuck Lever 	TP_fast_assign(
12708e24e191SChuck Lever 		__entry->task_id = task->tk_pid;
12718e24e191SChuck Lever 		__entry->client_id = task->tk_client->cl_clid;
12728e24e191SChuck Lever 	),
12738e24e191SChuck Lever 
12748e24e191SChuck Lever 	TP_printk("task:%u@%u",
12758e24e191SChuck Lever 		__entry->task_id, __entry->client_id
12768e24e191SChuck Lever 	)
12778e24e191SChuck Lever );
12788e24e191SChuck Lever 
1279fc1eb807SChuck Lever /**
1280fc1eb807SChuck Lever  ** Callback events
1281fc1eb807SChuck Lever  **/
1282fc1eb807SChuck Lever 
1283fc1eb807SChuck Lever TRACE_EVENT(xprtrdma_cb_setup,
1284fc1eb807SChuck Lever 	TP_PROTO(
1285fc1eb807SChuck Lever 		const struct rpcrdma_xprt *r_xprt,
1286fc1eb807SChuck Lever 		unsigned int reqs
1287fc1eb807SChuck Lever 	),
1288fc1eb807SChuck Lever 
1289fc1eb807SChuck Lever 	TP_ARGS(r_xprt, reqs),
1290fc1eb807SChuck Lever 
1291fc1eb807SChuck Lever 	TP_STRUCT__entry(
1292fc1eb807SChuck Lever 		__field(const void *, r_xprt)
1293fc1eb807SChuck Lever 		__field(unsigned int, reqs)
1294fc1eb807SChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
1295fc1eb807SChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
1296fc1eb807SChuck Lever 	),
1297fc1eb807SChuck Lever 
1298fc1eb807SChuck Lever 	TP_fast_assign(
1299fc1eb807SChuck Lever 		__entry->r_xprt = r_xprt;
1300fc1eb807SChuck Lever 		__entry->reqs = reqs;
1301fc1eb807SChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
1302fc1eb807SChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
1303fc1eb807SChuck Lever 	),
1304fc1eb807SChuck Lever 
1305fc1eb807SChuck Lever 	TP_printk("peer=[%s]:%s r_xprt=%p: %u reqs",
1306fc1eb807SChuck Lever 		__get_str(addr), __get_str(port),
1307fc1eb807SChuck Lever 		__entry->r_xprt, __entry->reqs
1308fc1eb807SChuck Lever 	)
1309fc1eb807SChuck Lever );
1310fc1eb807SChuck Lever 
1311d11e9346SChuck Lever DEFINE_CALLBACK_EVENT(call);
1312d11e9346SChuck Lever DEFINE_CALLBACK_EVENT(reply);
131307e10308SChuck Lever 
131498895edbSChuck Lever /**
131598895edbSChuck Lever  ** Server-side RPC/RDMA events
131698895edbSChuck Lever  **/
131798895edbSChuck Lever 
1318e979a173SChuck Lever DECLARE_EVENT_CLASS(svcrdma_accept_class,
1319e979a173SChuck Lever 	TP_PROTO(
1320e979a173SChuck Lever 		const struct svcxprt_rdma *rdma,
1321e979a173SChuck Lever 		long status
1322e979a173SChuck Lever 	),
1323e979a173SChuck Lever 
1324e979a173SChuck Lever 	TP_ARGS(rdma, status),
1325e979a173SChuck Lever 
1326e979a173SChuck Lever 	TP_STRUCT__entry(
1327e979a173SChuck Lever 		__field(long, status)
1328e979a173SChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1329e979a173SChuck Lever 	),
1330e979a173SChuck Lever 
1331e979a173SChuck Lever 	TP_fast_assign(
1332e979a173SChuck Lever 		__entry->status = status;
1333e979a173SChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1334e979a173SChuck Lever 	),
1335e979a173SChuck Lever 
1336e979a173SChuck Lever 	TP_printk("addr=%s status=%ld",
1337e979a173SChuck Lever 		__get_str(addr), __entry->status
1338e979a173SChuck Lever 	)
1339e979a173SChuck Lever );
1340e979a173SChuck Lever 
1341e979a173SChuck Lever #define DEFINE_ACCEPT_EVENT(name) \
1342e979a173SChuck Lever 		DEFINE_EVENT(svcrdma_accept_class, svcrdma_##name##_err, \
1343e979a173SChuck Lever 				TP_PROTO( \
1344e979a173SChuck Lever 					const struct svcxprt_rdma *rdma, \
1345e979a173SChuck Lever 					long status \
1346e979a173SChuck Lever 				), \
1347e979a173SChuck Lever 				TP_ARGS(rdma, status))
1348e979a173SChuck Lever 
1349e979a173SChuck Lever DEFINE_ACCEPT_EVENT(pd);
1350e979a173SChuck Lever DEFINE_ACCEPT_EVENT(qp);
1351e979a173SChuck Lever DEFINE_ACCEPT_EVENT(fabric);
1352e979a173SChuck Lever DEFINE_ACCEPT_EVENT(initdepth);
1353e979a173SChuck Lever DEFINE_ACCEPT_EVENT(accept);
1354e979a173SChuck Lever 
135598895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_MSG);
135698895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_NOMSG);
135798895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_MSGP);
135898895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_DONE);
135998895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_ERROR);
136098895edbSChuck Lever 
136198895edbSChuck Lever #define show_rpcrdma_proc(x)						\
136298895edbSChuck Lever 		__print_symbolic(x,					\
136398895edbSChuck Lever 				{ RDMA_MSG, "RDMA_MSG" },		\
136498895edbSChuck Lever 				{ RDMA_NOMSG, "RDMA_NOMSG" },		\
136598895edbSChuck Lever 				{ RDMA_MSGP, "RDMA_MSGP" },		\
136698895edbSChuck Lever 				{ RDMA_DONE, "RDMA_DONE" },		\
136798895edbSChuck Lever 				{ RDMA_ERROR, "RDMA_ERROR" })
136898895edbSChuck Lever 
136998895edbSChuck Lever TRACE_EVENT(svcrdma_decode_rqst,
137098895edbSChuck Lever 	TP_PROTO(
1371007140eeSChuck Lever 		const struct svc_rdma_recv_ctxt *ctxt,
137298895edbSChuck Lever 		__be32 *p,
137398895edbSChuck Lever 		unsigned int hdrlen
137498895edbSChuck Lever 	),
137598895edbSChuck Lever 
1376007140eeSChuck Lever 	TP_ARGS(ctxt, p, hdrlen),
137798895edbSChuck Lever 
137898895edbSChuck Lever 	TP_STRUCT__entry(
1379007140eeSChuck Lever 		__field(u32, cq_id)
1380007140eeSChuck Lever 		__field(int, completion_id)
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(
1389007140eeSChuck Lever 		__entry->cq_id = ctxt->rc_cid.ci_queue_id;
1390007140eeSChuck Lever 		__entry->completion_id = ctxt->rc_cid.ci_completion_id;
139198895edbSChuck Lever 		__entry->xid = be32_to_cpup(p++);
139298895edbSChuck Lever 		__entry->vers = be32_to_cpup(p++);
139398895edbSChuck Lever 		__entry->credits = be32_to_cpup(p++);
139498895edbSChuck Lever 		__entry->proc = be32_to_cpup(p);
139598895edbSChuck Lever 		__entry->hdrlen = hdrlen;
139698895edbSChuck Lever 	),
139798895edbSChuck Lever 
1398007140eeSChuck Lever 	TP_printk("cq.id=%u cid=%d xid=0x%08x vers=%u credits=%u proc=%s hdrlen=%u",
1399007140eeSChuck Lever 		__entry->cq_id, __entry->completion_id,
140098895edbSChuck Lever 		__entry->xid, __entry->vers, __entry->credits,
140198895edbSChuck Lever 		show_rpcrdma_proc(__entry->proc), __entry->hdrlen)
140298895edbSChuck Lever );
140398895edbSChuck Lever 
140427ce6294SChuck Lever TRACE_EVENT(svcrdma_decode_short_err,
140598895edbSChuck Lever 	TP_PROTO(
1406007140eeSChuck Lever 		const struct svc_rdma_recv_ctxt *ctxt,
140798895edbSChuck Lever 		unsigned int hdrlen
140898895edbSChuck Lever 	),
140998895edbSChuck Lever 
1410007140eeSChuck Lever 	TP_ARGS(ctxt, hdrlen),
141198895edbSChuck Lever 
141298895edbSChuck Lever 	TP_STRUCT__entry(
1413007140eeSChuck Lever 		__field(u32, cq_id)
1414007140eeSChuck Lever 		__field(int, completion_id)
141598895edbSChuck Lever 		__field(unsigned int, hdrlen)
141698895edbSChuck Lever 	),
141798895edbSChuck Lever 
141898895edbSChuck Lever 	TP_fast_assign(
1419007140eeSChuck Lever 		__entry->cq_id = ctxt->rc_cid.ci_queue_id;
1420007140eeSChuck Lever 		__entry->completion_id = ctxt->rc_cid.ci_completion_id;
142198895edbSChuck Lever 		__entry->hdrlen = hdrlen;
142298895edbSChuck Lever 	),
142398895edbSChuck Lever 
1424007140eeSChuck Lever 	TP_printk("cq.id=%u cid=%d hdrlen=%u",
1425007140eeSChuck Lever 		__entry->cq_id, __entry->completion_id,
1426007140eeSChuck Lever 		__entry->hdrlen)
142798895edbSChuck Lever );
142898895edbSChuck Lever 
142998895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_badreq_event,
143098895edbSChuck Lever 	TP_PROTO(
1431007140eeSChuck Lever 		const struct svc_rdma_recv_ctxt *ctxt,
143298895edbSChuck Lever 		__be32 *p
143398895edbSChuck Lever 	),
143498895edbSChuck Lever 
1435007140eeSChuck Lever 	TP_ARGS(ctxt, p),
143698895edbSChuck Lever 
143798895edbSChuck Lever 	TP_STRUCT__entry(
1438007140eeSChuck Lever 		__field(u32, cq_id)
1439007140eeSChuck Lever 		__field(int, completion_id)
144098895edbSChuck Lever 		__field(u32, xid)
144198895edbSChuck Lever 		__field(u32, vers)
144298895edbSChuck Lever 		__field(u32, proc)
144398895edbSChuck Lever 		__field(u32, credits)
144498895edbSChuck Lever 	),
144598895edbSChuck Lever 
144698895edbSChuck Lever 	TP_fast_assign(
1447007140eeSChuck Lever 		__entry->cq_id = ctxt->rc_cid.ci_queue_id;
1448007140eeSChuck Lever 		__entry->completion_id = ctxt->rc_cid.ci_completion_id;
144998895edbSChuck Lever 		__entry->xid = be32_to_cpup(p++);
145098895edbSChuck Lever 		__entry->vers = be32_to_cpup(p++);
145198895edbSChuck Lever 		__entry->credits = be32_to_cpup(p++);
145298895edbSChuck Lever 		__entry->proc = be32_to_cpup(p);
145398895edbSChuck Lever 	),
145498895edbSChuck Lever 
1455007140eeSChuck Lever 	TP_printk("cq.id=%u cid=%d xid=0x%08x vers=%u credits=%u proc=%u",
1456007140eeSChuck Lever 		__entry->cq_id, __entry->completion_id,
145798895edbSChuck Lever 		__entry->xid, __entry->vers, __entry->credits, __entry->proc)
145898895edbSChuck Lever );
145998895edbSChuck Lever 
146098895edbSChuck Lever #define DEFINE_BADREQ_EVENT(name)					\
146127ce6294SChuck Lever 		DEFINE_EVENT(svcrdma_badreq_event,			\
146227ce6294SChuck Lever 			     svcrdma_decode_##name##_err,		\
146398895edbSChuck Lever 				TP_PROTO(				\
1464007140eeSChuck Lever 					const struct svc_rdma_recv_ctxt *ctxt,	\
146598895edbSChuck Lever 					__be32 *p			\
146698895edbSChuck Lever 				),					\
1467007140eeSChuck Lever 				TP_ARGS(ctxt, p))
146898895edbSChuck Lever 
146998895edbSChuck Lever DEFINE_BADREQ_EVENT(badvers);
147098895edbSChuck Lever DEFINE_BADREQ_EVENT(drop);
147198895edbSChuck Lever DEFINE_BADREQ_EVENT(badproc);
147298895edbSChuck Lever DEFINE_BADREQ_EVENT(parse);
147398895edbSChuck Lever 
14746911f3e1SChuck Lever TRACE_EVENT(svcrdma_encode_wseg,
14756911f3e1SChuck Lever 	TP_PROTO(
14766911f3e1SChuck Lever 		const struct svc_rdma_send_ctxt *ctxt,
14776911f3e1SChuck Lever 		u32 segno,
14786911f3e1SChuck Lever 		u32 handle,
14796911f3e1SChuck Lever 		u32 length,
14806911f3e1SChuck Lever 		u64 offset
14816911f3e1SChuck Lever 	),
14826911f3e1SChuck Lever 
14836911f3e1SChuck Lever 	TP_ARGS(ctxt, segno, handle, length, offset),
14846911f3e1SChuck Lever 
14856911f3e1SChuck Lever 	TP_STRUCT__entry(
14866911f3e1SChuck Lever 		__field(u32, cq_id)
14876911f3e1SChuck Lever 		__field(int, completion_id)
14886911f3e1SChuck Lever 		__field(u32, segno)
14896911f3e1SChuck Lever 		__field(u32, handle)
14906911f3e1SChuck Lever 		__field(u32, length)
14916911f3e1SChuck Lever 		__field(u64, offset)
14926911f3e1SChuck Lever 	),
14936911f3e1SChuck Lever 
14946911f3e1SChuck Lever 	TP_fast_assign(
14956911f3e1SChuck Lever 		__entry->cq_id = ctxt->sc_cid.ci_queue_id;
14966911f3e1SChuck Lever 		__entry->completion_id = ctxt->sc_cid.ci_completion_id;
14976911f3e1SChuck Lever 		__entry->segno = segno;
14986911f3e1SChuck Lever 		__entry->handle = handle;
14996911f3e1SChuck Lever 		__entry->length = length;
15006911f3e1SChuck Lever 		__entry->offset = offset;
15016911f3e1SChuck Lever 	),
15026911f3e1SChuck Lever 
15036911f3e1SChuck Lever 	TP_printk("cq_id=%u cid=%d segno=%u %u@0x%016llx:0x%08x",
15046911f3e1SChuck Lever 		__entry->cq_id, __entry->completion_id,
15056911f3e1SChuck Lever 		__entry->segno, __entry->length,
15066911f3e1SChuck Lever 		(unsigned long long)__entry->offset, __entry->handle
15076911f3e1SChuck Lever 	)
15086911f3e1SChuck Lever );
15096911f3e1SChuck Lever 
151078147ca8SChuck Lever TRACE_EVENT(svcrdma_decode_rseg,
151178147ca8SChuck Lever 	TP_PROTO(
151278147ca8SChuck Lever 		const struct rpc_rdma_cid *cid,
151378147ca8SChuck Lever 		const struct svc_rdma_chunk *chunk,
151478147ca8SChuck Lever 		const struct svc_rdma_segment *segment
151578147ca8SChuck Lever 	),
151678147ca8SChuck Lever 
151778147ca8SChuck Lever 	TP_ARGS(cid, chunk, segment),
151878147ca8SChuck Lever 
151978147ca8SChuck Lever 	TP_STRUCT__entry(
152078147ca8SChuck Lever 		__field(u32, cq_id)
152178147ca8SChuck Lever 		__field(int, completion_id)
152278147ca8SChuck Lever 		__field(u32, segno)
152378147ca8SChuck Lever 		__field(u32, position)
152478147ca8SChuck Lever 		__field(u32, handle)
152578147ca8SChuck Lever 		__field(u32, length)
152678147ca8SChuck Lever 		__field(u64, offset)
152778147ca8SChuck Lever 	),
152878147ca8SChuck Lever 
152978147ca8SChuck Lever 	TP_fast_assign(
153078147ca8SChuck Lever 		__entry->cq_id = cid->ci_queue_id;
153178147ca8SChuck Lever 		__entry->completion_id = cid->ci_completion_id;
153278147ca8SChuck Lever 		__entry->segno = chunk->ch_segcount;
153378147ca8SChuck Lever 		__entry->position = chunk->ch_position;
153478147ca8SChuck Lever 		__entry->handle = segment->rs_handle;
153578147ca8SChuck Lever 		__entry->length = segment->rs_length;
153678147ca8SChuck Lever 		__entry->offset = segment->rs_offset;
153778147ca8SChuck Lever 	),
153878147ca8SChuck Lever 
153978147ca8SChuck Lever 	TP_printk("cq_id=%u cid=%d segno=%u position=%u %u@0x%016llx:0x%08x",
154078147ca8SChuck Lever 		__entry->cq_id, __entry->completion_id,
154178147ca8SChuck Lever 		__entry->segno, __entry->position, __entry->length,
154278147ca8SChuck Lever 		(unsigned long long)__entry->offset, __entry->handle
154378147ca8SChuck Lever 	)
154478147ca8SChuck Lever );
154578147ca8SChuck Lever 
154678147ca8SChuck Lever TRACE_EVENT(svcrdma_decode_wseg,
154778147ca8SChuck Lever 	TP_PROTO(
154878147ca8SChuck Lever 		const struct rpc_rdma_cid *cid,
154978147ca8SChuck Lever 		const struct svc_rdma_chunk *chunk,
155078147ca8SChuck Lever 		u32 segno
155178147ca8SChuck Lever 	),
155278147ca8SChuck Lever 
155378147ca8SChuck Lever 	TP_ARGS(cid, chunk, segno),
155478147ca8SChuck Lever 
155578147ca8SChuck Lever 	TP_STRUCT__entry(
155678147ca8SChuck Lever 		__field(u32, cq_id)
155778147ca8SChuck Lever 		__field(int, completion_id)
155878147ca8SChuck Lever 		__field(u32, segno)
155978147ca8SChuck Lever 		__field(u32, handle)
156078147ca8SChuck Lever 		__field(u32, length)
156178147ca8SChuck Lever 		__field(u64, offset)
156278147ca8SChuck Lever 	),
156378147ca8SChuck Lever 
156478147ca8SChuck Lever 	TP_fast_assign(
156578147ca8SChuck Lever 		const struct svc_rdma_segment *segment =
156678147ca8SChuck Lever 			&chunk->ch_segments[segno];
156778147ca8SChuck Lever 
156878147ca8SChuck Lever 		__entry->cq_id = cid->ci_queue_id;
156978147ca8SChuck Lever 		__entry->completion_id = cid->ci_completion_id;
157078147ca8SChuck Lever 		__entry->segno = segno;
157178147ca8SChuck Lever 		__entry->handle = segment->rs_handle;
157278147ca8SChuck Lever 		__entry->length = segment->rs_length;
157378147ca8SChuck Lever 		__entry->offset = segment->rs_offset;
157478147ca8SChuck Lever 	),
157578147ca8SChuck Lever 
157678147ca8SChuck Lever 	TP_printk("cq_id=%u cid=%d segno=%u %u@0x%016llx:0x%08x",
157778147ca8SChuck Lever 		__entry->cq_id, __entry->completion_id,
157878147ca8SChuck Lever 		__entry->segno, __entry->length,
157978147ca8SChuck Lever 		(unsigned long long)__entry->offset, __entry->handle
158078147ca8SChuck Lever 	)
158178147ca8SChuck Lever );
158278147ca8SChuck Lever 
158398895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_error_event,
158498895edbSChuck Lever 	TP_PROTO(
158598895edbSChuck Lever 		__be32 xid
158698895edbSChuck Lever 	),
158798895edbSChuck Lever 
158898895edbSChuck Lever 	TP_ARGS(xid),
158998895edbSChuck Lever 
159098895edbSChuck Lever 	TP_STRUCT__entry(
159198895edbSChuck Lever 		__field(u32, xid)
159298895edbSChuck Lever 	),
159398895edbSChuck Lever 
159498895edbSChuck Lever 	TP_fast_assign(
159598895edbSChuck Lever 		__entry->xid = be32_to_cpu(xid);
159698895edbSChuck Lever 	),
159798895edbSChuck Lever 
159898895edbSChuck Lever 	TP_printk("xid=0x%08x",
159998895edbSChuck Lever 		__entry->xid
160098895edbSChuck Lever 	)
160198895edbSChuck Lever );
160298895edbSChuck Lever 
160398895edbSChuck Lever #define DEFINE_ERROR_EVENT(name)					\
160498895edbSChuck Lever 		DEFINE_EVENT(svcrdma_error_event, svcrdma_err_##name,	\
160598895edbSChuck Lever 				TP_PROTO(				\
160698895edbSChuck Lever 					__be32 xid			\
160798895edbSChuck Lever 				),					\
160898895edbSChuck Lever 				TP_ARGS(xid))
160998895edbSChuck Lever 
161098895edbSChuck Lever DEFINE_ERROR_EVENT(vers);
161198895edbSChuck Lever DEFINE_ERROR_EVENT(chunk);
161298895edbSChuck Lever 
1613bd2abef3SChuck Lever /**
1614bd2abef3SChuck Lever  ** Server-side RDMA API events
1615bd2abef3SChuck Lever  **/
1616bd2abef3SChuck Lever 
1617832b2cb9SChuck Lever DECLARE_EVENT_CLASS(svcrdma_dma_map_class,
1618bd2abef3SChuck Lever 	TP_PROTO(
1619bd2abef3SChuck Lever 		const struct svcxprt_rdma *rdma,
1620832b2cb9SChuck Lever 		u64 dma_addr,
1621832b2cb9SChuck Lever 		u32 length
1622bd2abef3SChuck Lever 	),
1623bd2abef3SChuck Lever 
1624832b2cb9SChuck Lever 	TP_ARGS(rdma, dma_addr, length),
1625bd2abef3SChuck Lever 
1626bd2abef3SChuck Lever 	TP_STRUCT__entry(
1627832b2cb9SChuck Lever 		__field(u64, dma_addr)
1628832b2cb9SChuck Lever 		__field(u32, length)
1629bd2abef3SChuck Lever 		__string(device, rdma->sc_cm_id->device->name)
1630bd2abef3SChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1631bd2abef3SChuck Lever 	),
1632bd2abef3SChuck Lever 
1633bd2abef3SChuck Lever 	TP_fast_assign(
1634832b2cb9SChuck Lever 		__entry->dma_addr = dma_addr;
1635832b2cb9SChuck Lever 		__entry->length = length;
1636bd2abef3SChuck Lever 		__assign_str(device, rdma->sc_cm_id->device->name);
1637bd2abef3SChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1638bd2abef3SChuck Lever 	),
1639bd2abef3SChuck Lever 
1640832b2cb9SChuck Lever 	TP_printk("addr=%s device=%s dma_addr=%llu length=%u",
1641832b2cb9SChuck Lever 		__get_str(addr), __get_str(device),
1642832b2cb9SChuck Lever 		__entry->dma_addr, __entry->length
1643bd2abef3SChuck Lever 	)
1644bd2abef3SChuck Lever );
1645bd2abef3SChuck Lever 
1646832b2cb9SChuck Lever #define DEFINE_SVC_DMA_EVENT(name)					\
1647832b2cb9SChuck Lever 		DEFINE_EVENT(svcrdma_dma_map_class, svcrdma_##name,	\
1648832b2cb9SChuck Lever 				TP_PROTO(				\
1649832b2cb9SChuck Lever 					const struct svcxprt_rdma *rdma,\
1650832b2cb9SChuck Lever 					u64 dma_addr,			\
1651832b2cb9SChuck Lever 					u32 length			\
1652832b2cb9SChuck Lever 				),					\
1653832b2cb9SChuck Lever 				TP_ARGS(rdma, dma_addr, length))
1654832b2cb9SChuck Lever 
1655832b2cb9SChuck Lever DEFINE_SVC_DMA_EVENT(dma_map_page);
16562371bcc0SChuck Lever DEFINE_SVC_DMA_EVENT(dma_map_err);
1657832b2cb9SChuck Lever DEFINE_SVC_DMA_EVENT(dma_unmap_page);
1658832b2cb9SChuck Lever 
16592abfbe7eSChuck Lever TRACE_EVENT(svcrdma_dma_map_rw_err,
1660bd2abef3SChuck Lever 	TP_PROTO(
1661bd2abef3SChuck Lever 		const struct svcxprt_rdma *rdma,
16622abfbe7eSChuck Lever 		unsigned int nents,
1663bd2abef3SChuck Lever 		int status
1664bd2abef3SChuck Lever 	),
1665bd2abef3SChuck Lever 
16662abfbe7eSChuck Lever 	TP_ARGS(rdma, nents, status),
1667bd2abef3SChuck Lever 
1668bd2abef3SChuck Lever 	TP_STRUCT__entry(
1669bd2abef3SChuck Lever 		__field(int, status)
16702abfbe7eSChuck Lever 		__field(unsigned int, nents)
1671bd2abef3SChuck Lever 		__string(device, rdma->sc_cm_id->device->name)
1672bd2abef3SChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1673bd2abef3SChuck Lever 	),
1674bd2abef3SChuck Lever 
1675bd2abef3SChuck Lever 	TP_fast_assign(
1676bd2abef3SChuck Lever 		__entry->status = status;
16772abfbe7eSChuck Lever 		__entry->nents = nents;
1678bd2abef3SChuck Lever 		__assign_str(device, rdma->sc_cm_id->device->name);
1679bd2abef3SChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1680bd2abef3SChuck Lever 	),
1681bd2abef3SChuck Lever 
16822abfbe7eSChuck Lever 	TP_printk("addr=%s device=%s nents=%u status=%d",
16832abfbe7eSChuck Lever 		__get_str(addr), __get_str(device), __entry->nents,
16842abfbe7eSChuck Lever 		__entry->status
1685bd2abef3SChuck Lever 	)
1686bd2abef3SChuck Lever );
1687bd2abef3SChuck Lever 
1688f4e53e1cSChuck Lever TRACE_EVENT(svcrdma_no_rwctx_err,
1689f4e53e1cSChuck Lever 	TP_PROTO(
1690f4e53e1cSChuck Lever 		const struct svcxprt_rdma *rdma,
1691f4e53e1cSChuck Lever 		unsigned int num_sges
1692f4e53e1cSChuck Lever 	),
1693f4e53e1cSChuck Lever 
1694f4e53e1cSChuck Lever 	TP_ARGS(rdma, num_sges),
1695f4e53e1cSChuck Lever 
1696f4e53e1cSChuck Lever 	TP_STRUCT__entry(
1697f4e53e1cSChuck Lever 		__field(unsigned int, num_sges)
1698f4e53e1cSChuck Lever 		__string(device, rdma->sc_cm_id->device->name)
1699f4e53e1cSChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1700f4e53e1cSChuck Lever 	),
1701f4e53e1cSChuck Lever 
1702f4e53e1cSChuck Lever 	TP_fast_assign(
1703f4e53e1cSChuck Lever 		__entry->num_sges = num_sges;
1704f4e53e1cSChuck Lever 		__assign_str(device, rdma->sc_cm_id->device->name);
1705f4e53e1cSChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1706f4e53e1cSChuck Lever 	),
1707f4e53e1cSChuck Lever 
1708f4e53e1cSChuck Lever 	TP_printk("addr=%s device=%s num_sges=%d",
1709f4e53e1cSChuck Lever 		__get_str(addr), __get_str(device), __entry->num_sges
1710f4e53e1cSChuck Lever 	)
1711f4e53e1cSChuck Lever );
1712f4e53e1cSChuck Lever 
17139d200638SChuck Lever TRACE_EVENT(svcrdma_page_overrun_err,
17149d200638SChuck Lever 	TP_PROTO(
17159d200638SChuck Lever 		const struct svcxprt_rdma *rdma,
17169d200638SChuck Lever 		const struct svc_rqst *rqst,
17179d200638SChuck Lever 		unsigned int pageno
17189d200638SChuck Lever 	),
17199d200638SChuck Lever 
17209d200638SChuck Lever 	TP_ARGS(rdma, rqst, pageno),
17219d200638SChuck Lever 
17229d200638SChuck Lever 	TP_STRUCT__entry(
17239d200638SChuck Lever 		__field(unsigned int, pageno)
17249d200638SChuck Lever 		__field(u32, xid)
17259d200638SChuck Lever 		__string(device, rdma->sc_cm_id->device->name)
17269d200638SChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
17279d200638SChuck Lever 	),
17289d200638SChuck Lever 
17299d200638SChuck Lever 	TP_fast_assign(
17309d200638SChuck Lever 		__entry->pageno = pageno;
17319d200638SChuck Lever 		__entry->xid = __be32_to_cpu(rqst->rq_xid);
17329d200638SChuck Lever 		__assign_str(device, rdma->sc_cm_id->device->name);
17339d200638SChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
17349d200638SChuck Lever 	),
17359d200638SChuck Lever 
17369d200638SChuck Lever 	TP_printk("addr=%s device=%s xid=0x%08x pageno=%u", __get_str(addr),
17379d200638SChuck Lever 		__get_str(device), __entry->xid, __entry->pageno
17389d200638SChuck Lever 	)
17399d200638SChuck Lever );
17409d200638SChuck Lever 
1741dbc17acdSChuck Lever TRACE_EVENT(svcrdma_small_wrch_err,
1742dbc17acdSChuck Lever 	TP_PROTO(
1743dbc17acdSChuck Lever 		const struct svcxprt_rdma *rdma,
1744dbc17acdSChuck Lever 		unsigned int remaining,
1745dbc17acdSChuck Lever 		unsigned int seg_no,
1746dbc17acdSChuck Lever 		unsigned int num_segs
1747dbc17acdSChuck Lever 	),
1748dbc17acdSChuck Lever 
1749dbc17acdSChuck Lever 	TP_ARGS(rdma, remaining, seg_no, num_segs),
1750dbc17acdSChuck Lever 
1751dbc17acdSChuck Lever 	TP_STRUCT__entry(
1752dbc17acdSChuck Lever 		__field(unsigned int, remaining)
1753dbc17acdSChuck Lever 		__field(unsigned int, seg_no)
1754dbc17acdSChuck Lever 		__field(unsigned int, num_segs)
1755dbc17acdSChuck Lever 		__string(device, rdma->sc_cm_id->device->name)
1756dbc17acdSChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1757dbc17acdSChuck Lever 	),
1758dbc17acdSChuck Lever 
1759dbc17acdSChuck Lever 	TP_fast_assign(
1760dbc17acdSChuck Lever 		__entry->remaining = remaining;
1761dbc17acdSChuck Lever 		__entry->seg_no = seg_no;
1762dbc17acdSChuck Lever 		__entry->num_segs = num_segs;
1763dbc17acdSChuck Lever 		__assign_str(device, rdma->sc_cm_id->device->name);
1764dbc17acdSChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1765dbc17acdSChuck Lever 	),
1766dbc17acdSChuck Lever 
1767dbc17acdSChuck Lever 	TP_printk("addr=%s device=%s remaining=%u seg_no=%u num_segs=%u",
1768dbc17acdSChuck Lever 		__get_str(addr), __get_str(device), __entry->remaining,
1769dbc17acdSChuck Lever 		__entry->seg_no, __entry->num_segs
1770dbc17acdSChuck Lever 	)
1771dbc17acdSChuck Lever );
1772dbc17acdSChuck Lever 
17730dabe948SChuck Lever TRACE_EVENT(svcrdma_send_pullup,
17740dabe948SChuck Lever 	TP_PROTO(
17759d0b09d5SChuck Lever 		const struct svc_rdma_send_ctxt *ctxt,
17769d0b09d5SChuck Lever 		unsigned int msglen
17770dabe948SChuck Lever 	),
17780dabe948SChuck Lever 
17799d0b09d5SChuck Lever 	TP_ARGS(ctxt, msglen),
17800dabe948SChuck Lever 
17810dabe948SChuck Lever 	TP_STRUCT__entry(
17829d0b09d5SChuck Lever 		__field(u32, cq_id)
17839d0b09d5SChuck Lever 		__field(int, completion_id)
17849d0b09d5SChuck Lever 		__field(unsigned int, hdrlen)
17859d0b09d5SChuck Lever 		__field(unsigned int, msglen)
17860dabe948SChuck Lever 	),
17870dabe948SChuck Lever 
17880dabe948SChuck Lever 	TP_fast_assign(
17899d0b09d5SChuck Lever 		__entry->cq_id = ctxt->sc_cid.ci_queue_id;
17909d0b09d5SChuck Lever 		__entry->completion_id = ctxt->sc_cid.ci_completion_id;
17919d0b09d5SChuck Lever 		__entry->hdrlen = ctxt->sc_hdrbuf.len,
17929d0b09d5SChuck Lever 		__entry->msglen = msglen;
17930dabe948SChuck Lever 	),
17940dabe948SChuck Lever 
17959d0b09d5SChuck Lever 	TP_printk("cq_id=%u cid=%d hdr=%u msg=%u (total %u)",
17969d0b09d5SChuck Lever 		__entry->cq_id, __entry->completion_id,
17979d0b09d5SChuck Lever 		__entry->hdrlen, __entry->msglen,
17989d0b09d5SChuck Lever 		__entry->hdrlen + __entry->msglen)
17990dabe948SChuck Lever );
18000dabe948SChuck Lever 
18013f8f25c6SChuck Lever TRACE_EVENT(svcrdma_send_err,
1802bd2abef3SChuck Lever 	TP_PROTO(
1803bd2abef3SChuck Lever 		const struct svc_rqst *rqst,
1804bd2abef3SChuck Lever 		int status
1805bd2abef3SChuck Lever 	),
1806bd2abef3SChuck Lever 
1807bd2abef3SChuck Lever 	TP_ARGS(rqst, status),
1808bd2abef3SChuck Lever 
1809bd2abef3SChuck Lever 	TP_STRUCT__entry(
1810bd2abef3SChuck Lever 		__field(int, status)
1811bd2abef3SChuck Lever 		__field(u32, xid)
1812bd2abef3SChuck Lever 		__string(addr, rqst->rq_xprt->xpt_remotebuf)
1813bd2abef3SChuck Lever 	),
1814bd2abef3SChuck Lever 
1815bd2abef3SChuck Lever 	TP_fast_assign(
1816bd2abef3SChuck Lever 		__entry->status = status;
1817bd2abef3SChuck Lever 		__entry->xid = __be32_to_cpu(rqst->rq_xid);
1818bd2abef3SChuck Lever 		__assign_str(addr, rqst->rq_xprt->xpt_remotebuf);
1819bd2abef3SChuck Lever 	),
1820bd2abef3SChuck Lever 
18213f8f25c6SChuck Lever 	TP_printk("addr=%s xid=0x%08x status=%d", __get_str(addr),
1822bd2abef3SChuck Lever 		__entry->xid, __entry->status
1823bd2abef3SChuck Lever 	)
1824bd2abef3SChuck Lever );
1825bd2abef3SChuck Lever 
1826bd2abef3SChuck Lever TRACE_EVENT(svcrdma_post_send,
1827bd2abef3SChuck Lever 	TP_PROTO(
182817f70f8dSChuck Lever 		const struct svc_rdma_send_ctxt *ctxt
1829bd2abef3SChuck Lever 	),
1830bd2abef3SChuck Lever 
183117f70f8dSChuck Lever 	TP_ARGS(ctxt),
1832bd2abef3SChuck Lever 
1833bd2abef3SChuck Lever 	TP_STRUCT__entry(
183417f70f8dSChuck Lever 		__field(u32, cq_id)
183517f70f8dSChuck Lever 		__field(int, completion_id)
1836bd2abef3SChuck Lever 		__field(unsigned int, num_sge)
1837bd2abef3SChuck Lever 		__field(u32, inv_rkey)
1838bd2abef3SChuck Lever 	),
1839bd2abef3SChuck Lever 
1840bd2abef3SChuck Lever 	TP_fast_assign(
184117f70f8dSChuck Lever 		const struct ib_send_wr *wr = &ctxt->sc_send_wr;
184217f70f8dSChuck Lever 
184317f70f8dSChuck Lever 		__entry->cq_id = ctxt->sc_cid.ci_queue_id;
184417f70f8dSChuck Lever 		__entry->completion_id = ctxt->sc_cid.ci_completion_id;
1845bd2abef3SChuck Lever 		__entry->num_sge = wr->num_sge;
1846bd2abef3SChuck Lever 		__entry->inv_rkey = (wr->opcode == IB_WR_SEND_WITH_INV) ?
1847bd2abef3SChuck Lever 					wr->ex.invalidate_rkey : 0;
1848bd2abef3SChuck Lever 	),
1849bd2abef3SChuck Lever 
185017f70f8dSChuck Lever 	TP_printk("cq_id=%u cid=%d num_sge=%u inv_rkey=0x%08x",
185117f70f8dSChuck Lever 		__entry->cq_id, __entry->completion_id,
185217f70f8dSChuck Lever 		__entry->num_sge, __entry->inv_rkey
1853bd2abef3SChuck Lever 	)
1854bd2abef3SChuck Lever );
1855bd2abef3SChuck Lever 
18563ac56c2fSChuck Lever DEFINE_COMPLETION_EVENT(svcrdma_wc_send);
1857bd2abef3SChuck Lever 
1858bd2abef3SChuck Lever TRACE_EVENT(svcrdma_post_recv,
1859bd2abef3SChuck Lever 	TP_PROTO(
18609b3bcf8cSChuck Lever 		const struct svc_rdma_recv_ctxt *ctxt
1861bd2abef3SChuck Lever 	),
1862bd2abef3SChuck Lever 
18639b3bcf8cSChuck Lever 	TP_ARGS(ctxt),
1864bd2abef3SChuck Lever 
1865bd2abef3SChuck Lever 	TP_STRUCT__entry(
18669b3bcf8cSChuck Lever 		__field(u32, cq_id)
18679b3bcf8cSChuck Lever 		__field(int, completion_id)
1868bd2abef3SChuck Lever 	),
1869bd2abef3SChuck Lever 
1870bd2abef3SChuck Lever 	TP_fast_assign(
18719b3bcf8cSChuck Lever 		__entry->cq_id = ctxt->rc_cid.ci_queue_id;
18729b3bcf8cSChuck Lever 		__entry->completion_id = ctxt->rc_cid.ci_completion_id;
1873bd2abef3SChuck Lever 	),
1874bd2abef3SChuck Lever 
18759b3bcf8cSChuck Lever 	TP_printk("cq.id=%d cid=%d",
18769b3bcf8cSChuck Lever 		__entry->cq_id, __entry->completion_id
1877bd2abef3SChuck Lever 	)
1878bd2abef3SChuck Lever );
1879bd2abef3SChuck Lever 
1880c30f259aSChuck Lever DEFINE_RECEIVE_COMPLETION_EVENT(svcrdma_wc_receive);
18819b3bcf8cSChuck Lever 
18829b3bcf8cSChuck Lever TRACE_EVENT(svcrdma_rq_post_err,
1883bd2abef3SChuck Lever 	TP_PROTO(
18849b3bcf8cSChuck Lever 		const struct svcxprt_rdma *rdma,
18859b3bcf8cSChuck Lever 		int status
1886bd2abef3SChuck Lever 	),
1887bd2abef3SChuck Lever 
18889b3bcf8cSChuck Lever 	TP_ARGS(rdma, status),
1889bd2abef3SChuck Lever 
1890bd2abef3SChuck Lever 	TP_STRUCT__entry(
18919b3bcf8cSChuck Lever 		__field(int, status)
18929b3bcf8cSChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1893bd2abef3SChuck Lever 	),
1894bd2abef3SChuck Lever 
1895bd2abef3SChuck Lever 	TP_fast_assign(
18969b3bcf8cSChuck Lever 		__entry->status = status;
18979b3bcf8cSChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1898bd2abef3SChuck Lever 	),
1899bd2abef3SChuck Lever 
19009b3bcf8cSChuck Lever 	TP_printk("addr=%s status=%d",
19019b3bcf8cSChuck Lever 		__get_str(addr), __entry->status
1902bd2abef3SChuck Lever 	)
1903bd2abef3SChuck Lever );
1904bd2abef3SChuck Lever 
1905b704be09SChuck Lever DECLARE_EVENT_CLASS(svcrdma_post_chunk_class,
1906bd2abef3SChuck Lever 	TP_PROTO(
19076787f0beSChuck Lever 		const struct rpc_rdma_cid *cid,
1908e28b4fc6SChuck Lever 		int sqecount
1909bd2abef3SChuck Lever 	),
1910bd2abef3SChuck Lever 
19116787f0beSChuck Lever 	TP_ARGS(cid, sqecount),
1912bd2abef3SChuck Lever 
1913bd2abef3SChuck Lever 	TP_STRUCT__entry(
19146787f0beSChuck Lever 		__field(u32, cq_id)
19156787f0beSChuck Lever 		__field(int, completion_id)
1916bd2abef3SChuck Lever 		__field(int, sqecount)
1917bd2abef3SChuck Lever 	),
1918bd2abef3SChuck Lever 
1919bd2abef3SChuck Lever 	TP_fast_assign(
19206787f0beSChuck Lever 		__entry->cq_id = cid->ci_queue_id;
19216787f0beSChuck Lever 		__entry->completion_id = cid->ci_completion_id;
1922bd2abef3SChuck Lever 		__entry->sqecount = sqecount;
1923bd2abef3SChuck Lever 	),
1924bd2abef3SChuck Lever 
19256787f0beSChuck Lever 	TP_printk("cq.id=%u cid=%d sqecount=%d",
19266787f0beSChuck Lever 		__entry->cq_id, __entry->completion_id,
19276787f0beSChuck Lever 		__entry->sqecount
1928bd2abef3SChuck Lever 	)
1929bd2abef3SChuck Lever );
1930bd2abef3SChuck Lever 
1931b704be09SChuck Lever #define DEFINE_POST_CHUNK_EVENT(name)					\
1932b704be09SChuck Lever 		DEFINE_EVENT(svcrdma_post_chunk_class,			\
1933b704be09SChuck Lever 				svcrdma_post_##name##_chunk,		\
1934b704be09SChuck Lever 				TP_PROTO(				\
1935b704be09SChuck Lever 					const struct rpc_rdma_cid *cid,	\
1936b704be09SChuck Lever 					int sqecount			\
1937b704be09SChuck Lever 				),					\
1938b704be09SChuck Lever 				TP_ARGS(cid, sqecount))
1939b704be09SChuck Lever 
1940b704be09SChuck Lever DEFINE_POST_CHUNK_EVENT(read);
1941b704be09SChuck Lever DEFINE_POST_CHUNK_EVENT(write);
1942b704be09SChuck Lever DEFINE_POST_CHUNK_EVENT(reply);
1943b704be09SChuck Lever 
19446787f0beSChuck Lever DEFINE_COMPLETION_EVENT(svcrdma_wc_read);
19456787f0beSChuck Lever DEFINE_COMPLETION_EVENT(svcrdma_wc_write);
1946bd2abef3SChuck Lever 
1947bd2abef3SChuck Lever TRACE_EVENT(svcrdma_qp_error,
1948bd2abef3SChuck Lever 	TP_PROTO(
1949bd2abef3SChuck Lever 		const struct ib_event *event,
1950bd2abef3SChuck Lever 		const struct sockaddr *sap
1951bd2abef3SChuck Lever 	),
1952bd2abef3SChuck Lever 
1953bd2abef3SChuck Lever 	TP_ARGS(event, sap),
1954bd2abef3SChuck Lever 
1955bd2abef3SChuck Lever 	TP_STRUCT__entry(
1956bd2abef3SChuck Lever 		__field(unsigned int, event)
1957bd2abef3SChuck Lever 		__string(device, event->device->name)
1958bd2abef3SChuck Lever 		__array(__u8, addr, INET6_ADDRSTRLEN + 10)
1959bd2abef3SChuck Lever 	),
1960bd2abef3SChuck Lever 
1961bd2abef3SChuck Lever 	TP_fast_assign(
1962bd2abef3SChuck Lever 		__entry->event = event->event;
1963bd2abef3SChuck Lever 		__assign_str(device, event->device->name);
1964bd2abef3SChuck Lever 		snprintf(__entry->addr, sizeof(__entry->addr) - 1,
1965bd2abef3SChuck Lever 			 "%pISpc", sap);
1966bd2abef3SChuck Lever 	),
1967bd2abef3SChuck Lever 
1968bd2abef3SChuck Lever 	TP_printk("addr=%s dev=%s event=%s (%u)",
1969bd2abef3SChuck Lever 		__entry->addr, __get_str(device),
1970bd2abef3SChuck Lever 		rdma_show_ib_event(__entry->event), __entry->event
1971bd2abef3SChuck Lever 	)
1972bd2abef3SChuck Lever );
1973bd2abef3SChuck Lever 
1974bd2abef3SChuck Lever DECLARE_EVENT_CLASS(svcrdma_sendqueue_event,
1975bd2abef3SChuck Lever 	TP_PROTO(
1976bd2abef3SChuck Lever 		const struct svcxprt_rdma *rdma
1977bd2abef3SChuck Lever 	),
1978bd2abef3SChuck Lever 
1979bd2abef3SChuck Lever 	TP_ARGS(rdma),
1980bd2abef3SChuck Lever 
1981bd2abef3SChuck Lever 	TP_STRUCT__entry(
1982bd2abef3SChuck Lever 		__field(int, avail)
1983bd2abef3SChuck Lever 		__field(int, depth)
1984bd2abef3SChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1985bd2abef3SChuck Lever 	),
1986bd2abef3SChuck Lever 
1987bd2abef3SChuck Lever 	TP_fast_assign(
1988bd2abef3SChuck Lever 		__entry->avail = atomic_read(&rdma->sc_sq_avail);
1989bd2abef3SChuck Lever 		__entry->depth = rdma->sc_sq_depth;
1990bd2abef3SChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1991bd2abef3SChuck Lever 	),
1992bd2abef3SChuck Lever 
1993bd2abef3SChuck Lever 	TP_printk("addr=%s sc_sq_avail=%d/%d",
1994bd2abef3SChuck Lever 		__get_str(addr), __entry->avail, __entry->depth
1995bd2abef3SChuck Lever 	)
1996bd2abef3SChuck Lever );
1997bd2abef3SChuck Lever 
1998bd2abef3SChuck Lever #define DEFINE_SQ_EVENT(name)						\
1999bd2abef3SChuck Lever 		DEFINE_EVENT(svcrdma_sendqueue_event, svcrdma_sq_##name,\
2000bd2abef3SChuck Lever 				TP_PROTO(				\
2001bd2abef3SChuck Lever 					const struct svcxprt_rdma *rdma \
2002bd2abef3SChuck Lever 				),					\
2003bd2abef3SChuck Lever 				TP_ARGS(rdma))
2004bd2abef3SChuck Lever 
2005bd2abef3SChuck Lever DEFINE_SQ_EVENT(full);
2006bd2abef3SChuck Lever DEFINE_SQ_EVENT(retry);
2007bd2abef3SChuck Lever 
2008e28b4fc6SChuck Lever TRACE_EVENT(svcrdma_sq_post_err,
2009e28b4fc6SChuck Lever 	TP_PROTO(
2010e28b4fc6SChuck Lever 		const struct svcxprt_rdma *rdma,
2011e28b4fc6SChuck Lever 		int status
2012e28b4fc6SChuck Lever 	),
2013e28b4fc6SChuck Lever 
2014e28b4fc6SChuck Lever 	TP_ARGS(rdma, status),
2015e28b4fc6SChuck Lever 
2016e28b4fc6SChuck Lever 	TP_STRUCT__entry(
2017e28b4fc6SChuck Lever 		__field(int, avail)
2018e28b4fc6SChuck Lever 		__field(int, depth)
2019e28b4fc6SChuck Lever 		__field(int, status)
2020e28b4fc6SChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
2021e28b4fc6SChuck Lever 	),
2022e28b4fc6SChuck Lever 
2023e28b4fc6SChuck Lever 	TP_fast_assign(
2024e28b4fc6SChuck Lever 		__entry->avail = atomic_read(&rdma->sc_sq_avail);
2025e28b4fc6SChuck Lever 		__entry->depth = rdma->sc_sq_depth;
2026e28b4fc6SChuck Lever 		__entry->status = status;
2027e28b4fc6SChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
2028e28b4fc6SChuck Lever 	),
2029e28b4fc6SChuck Lever 
2030e28b4fc6SChuck Lever 	TP_printk("addr=%s sc_sq_avail=%d/%d status=%d",
2031e28b4fc6SChuck Lever 		__get_str(addr), __entry->avail, __entry->depth,
2032e28b4fc6SChuck Lever 		__entry->status
2033e28b4fc6SChuck Lever 	)
2034e28b4fc6SChuck Lever );
2035e28b4fc6SChuck Lever 
2036e48f083eSChuck Lever #endif /* _TRACE_RPCRDMA_H */
2037e48f083eSChuck Lever 
2038e48f083eSChuck Lever #include <trace/define_trace.h>
2039