xref: /openbmc/linux/include/trace/events/rpcrdma.h (revision 21037b8c)
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 
636b147ea7SChuck Lever DECLARE_EVENT_CLASS(rpcrdma_mr_completion_class,
646b147ea7SChuck Lever 	TP_PROTO(
656b147ea7SChuck Lever 		const struct ib_wc *wc,
666b147ea7SChuck Lever 		const struct rpc_rdma_cid *cid
676b147ea7SChuck Lever 	),
686b147ea7SChuck Lever 
696b147ea7SChuck Lever 	TP_ARGS(wc, cid),
706b147ea7SChuck Lever 
716b147ea7SChuck Lever 	TP_STRUCT__entry(
726b147ea7SChuck Lever 		__field(u32, cq_id)
736b147ea7SChuck Lever 		__field(int, completion_id)
746b147ea7SChuck Lever 		__field(unsigned long, status)
756b147ea7SChuck Lever 		__field(unsigned int, vendor_err)
766b147ea7SChuck Lever 	),
776b147ea7SChuck Lever 
786b147ea7SChuck Lever 	TP_fast_assign(
796b147ea7SChuck Lever 		__entry->cq_id = cid->ci_queue_id;
806b147ea7SChuck Lever 		__entry->completion_id = cid->ci_completion_id;
816b147ea7SChuck Lever 		__entry->status = wc->status;
826b147ea7SChuck Lever 		if (wc->status)
836b147ea7SChuck Lever 			__entry->vendor_err = wc->vendor_err;
846b147ea7SChuck Lever 		else
856b147ea7SChuck Lever 			__entry->vendor_err = 0;
866b147ea7SChuck Lever 	),
876b147ea7SChuck Lever 
886b147ea7SChuck Lever 	TP_printk("cq.id=%u mr.id=%d status=%s (%lu/0x%x)",
896b147ea7SChuck Lever 		__entry->cq_id, __entry->completion_id,
906b147ea7SChuck Lever 		rdma_show_wc_status(__entry->status),
916b147ea7SChuck Lever 		__entry->status, __entry->vendor_err
926b147ea7SChuck Lever 	)
936b147ea7SChuck Lever );
946b147ea7SChuck Lever 
956b147ea7SChuck Lever #define DEFINE_MR_COMPLETION_EVENT(name)				\
966b147ea7SChuck Lever 		DEFINE_EVENT(rpcrdma_mr_completion_class, name,		\
976b147ea7SChuck Lever 				TP_PROTO(				\
986b147ea7SChuck Lever 					const struct ib_wc *wc,		\
996b147ea7SChuck Lever 					const struct rpc_rdma_cid *cid	\
1006b147ea7SChuck Lever 				),					\
1016b147ea7SChuck Lever 				TP_ARGS(wc, cid))
1026b147ea7SChuck 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 		__string(addr, rpcrdma_addrstr(r_xprt))
1941c443effSChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
1951c443effSChuck Lever 	),
1961c443effSChuck Lever 
1971c443effSChuck Lever 	TP_fast_assign(
1981c443effSChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
1991c443effSChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
2001c443effSChuck Lever 	),
2011c443effSChuck Lever 
20283189d15SChuck Lever 	TP_printk("peer=[%s]:%s",
20383189d15SChuck Lever 		__get_str(addr), __get_str(port)
2041c443effSChuck Lever 	)
2051c443effSChuck Lever );
2061c443effSChuck Lever 
2071c443effSChuck Lever #define DEFINE_RXPRT_EVENT(name)					\
2081c443effSChuck Lever 		DEFINE_EVENT(xprtrdma_rxprt, name,			\
2091c443effSChuck Lever 				TP_PROTO(				\
2101c443effSChuck Lever 					const struct rpcrdma_xprt *r_xprt \
2111c443effSChuck Lever 				),					\
2121c443effSChuck Lever 				TP_ARGS(r_xprt))
2131c443effSChuck Lever 
2147b020f17SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_connect_class,
2157b020f17SChuck Lever 	TP_PROTO(
2167b020f17SChuck Lever 		const struct rpcrdma_xprt *r_xprt,
2177b020f17SChuck Lever 		int rc
2187b020f17SChuck Lever 	),
2197b020f17SChuck Lever 
2207b020f17SChuck Lever 	TP_ARGS(r_xprt, rc),
2217b020f17SChuck Lever 
2227b020f17SChuck Lever 	TP_STRUCT__entry(
2237b020f17SChuck Lever 		__field(int, rc)
2247b020f17SChuck Lever 		__field(int, connect_status)
2257b020f17SChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
2267b020f17SChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
2277b020f17SChuck Lever 	),
2287b020f17SChuck Lever 
2297b020f17SChuck Lever 	TP_fast_assign(
2307b020f17SChuck Lever 		__entry->rc = rc;
231e28ce900SChuck Lever 		__entry->connect_status = r_xprt->rx_ep->re_connect_status;
2327b020f17SChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
2337b020f17SChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
2347b020f17SChuck Lever 	),
2357b020f17SChuck Lever 
23683189d15SChuck Lever 	TP_printk("peer=[%s]:%s rc=%d connection status=%d",
23783189d15SChuck Lever 		__get_str(addr), __get_str(port),
2387b020f17SChuck Lever 		__entry->rc, __entry->connect_status
2397b020f17SChuck Lever 	)
2407b020f17SChuck Lever );
2417b020f17SChuck Lever 
2427b020f17SChuck Lever #define DEFINE_CONN_EVENT(name)						\
2437b020f17SChuck Lever 		DEFINE_EVENT(xprtrdma_connect_class, xprtrdma_##name,	\
2447b020f17SChuck Lever 				TP_PROTO(				\
2457b020f17SChuck Lever 					const struct rpcrdma_xprt *r_xprt, \
2467b020f17SChuck Lever 					int rc				\
2477b020f17SChuck Lever 				),					\
2487b020f17SChuck Lever 				TP_ARGS(r_xprt, rc))
2497b020f17SChuck Lever 
25058f10ad4SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_rdch_event,
25158f10ad4SChuck Lever 	TP_PROTO(
25258f10ad4SChuck Lever 		const struct rpc_task *task,
25358f10ad4SChuck Lever 		unsigned int pos,
25458f10ad4SChuck Lever 		struct rpcrdma_mr *mr,
25558f10ad4SChuck Lever 		int nsegs
25658f10ad4SChuck Lever 	),
25758f10ad4SChuck Lever 
25858f10ad4SChuck Lever 	TP_ARGS(task, pos, mr, nsegs),
25958f10ad4SChuck Lever 
26058f10ad4SChuck Lever 	TP_STRUCT__entry(
26158f10ad4SChuck Lever 		__field(unsigned int, task_id)
26258f10ad4SChuck Lever 		__field(unsigned int, client_id)
26358f10ad4SChuck Lever 		__field(unsigned int, pos)
26458f10ad4SChuck Lever 		__field(int, nents)
26558f10ad4SChuck Lever 		__field(u32, handle)
26658f10ad4SChuck Lever 		__field(u32, length)
26758f10ad4SChuck Lever 		__field(u64, offset)
26858f10ad4SChuck Lever 		__field(int, nsegs)
26958f10ad4SChuck Lever 	),
27058f10ad4SChuck Lever 
27158f10ad4SChuck Lever 	TP_fast_assign(
27258f10ad4SChuck Lever 		__entry->task_id = task->tk_pid;
27358f10ad4SChuck Lever 		__entry->client_id = task->tk_client->cl_clid;
27458f10ad4SChuck Lever 		__entry->pos = pos;
27558f10ad4SChuck Lever 		__entry->nents = mr->mr_nents;
27658f10ad4SChuck Lever 		__entry->handle = mr->mr_handle;
27758f10ad4SChuck Lever 		__entry->length = mr->mr_length;
27858f10ad4SChuck Lever 		__entry->offset = mr->mr_offset;
27958f10ad4SChuck Lever 		__entry->nsegs = nsegs;
28058f10ad4SChuck Lever 	),
28158f10ad4SChuck Lever 
282aba11831SChuck Lever 	TP_printk("task:%u@%u pos=%u %u@0x%016llx:0x%08x (%s)",
283aba11831SChuck Lever 		__entry->task_id, __entry->client_id,
28458f10ad4SChuck Lever 		__entry->pos, __entry->length,
28558f10ad4SChuck Lever 		(unsigned long long)__entry->offset, __entry->handle,
28658f10ad4SChuck Lever 		__entry->nents < __entry->nsegs ? "more" : "last"
28758f10ad4SChuck Lever 	)
28858f10ad4SChuck Lever );
28958f10ad4SChuck Lever 
29058f10ad4SChuck Lever #define DEFINE_RDCH_EVENT(name)						\
291aba11831SChuck Lever 		DEFINE_EVENT(xprtrdma_rdch_event, xprtrdma_chunk_##name,\
29258f10ad4SChuck Lever 				TP_PROTO(				\
29358f10ad4SChuck Lever 					const struct rpc_task *task,	\
29458f10ad4SChuck Lever 					unsigned int pos,		\
29558f10ad4SChuck Lever 					struct rpcrdma_mr *mr,		\
29658f10ad4SChuck Lever 					int nsegs			\
29758f10ad4SChuck Lever 				),					\
29858f10ad4SChuck Lever 				TP_ARGS(task, pos, mr, nsegs))
29958f10ad4SChuck Lever 
30058f10ad4SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_wrch_event,
30158f10ad4SChuck Lever 	TP_PROTO(
30258f10ad4SChuck Lever 		const struct rpc_task *task,
30358f10ad4SChuck Lever 		struct rpcrdma_mr *mr,
30458f10ad4SChuck Lever 		int nsegs
30558f10ad4SChuck Lever 	),
30658f10ad4SChuck Lever 
30758f10ad4SChuck Lever 	TP_ARGS(task, mr, nsegs),
30858f10ad4SChuck Lever 
30958f10ad4SChuck Lever 	TP_STRUCT__entry(
31058f10ad4SChuck Lever 		__field(unsigned int, task_id)
31158f10ad4SChuck Lever 		__field(unsigned int, client_id)
31258f10ad4SChuck Lever 		__field(int, nents)
31358f10ad4SChuck Lever 		__field(u32, handle)
31458f10ad4SChuck Lever 		__field(u32, length)
31558f10ad4SChuck Lever 		__field(u64, offset)
31658f10ad4SChuck Lever 		__field(int, nsegs)
31758f10ad4SChuck Lever 	),
31858f10ad4SChuck Lever 
31958f10ad4SChuck Lever 	TP_fast_assign(
32058f10ad4SChuck Lever 		__entry->task_id = task->tk_pid;
32158f10ad4SChuck Lever 		__entry->client_id = task->tk_client->cl_clid;
32258f10ad4SChuck Lever 		__entry->nents = mr->mr_nents;
32358f10ad4SChuck Lever 		__entry->handle = mr->mr_handle;
32458f10ad4SChuck Lever 		__entry->length = mr->mr_length;
32558f10ad4SChuck Lever 		__entry->offset = mr->mr_offset;
32658f10ad4SChuck Lever 		__entry->nsegs = nsegs;
32758f10ad4SChuck Lever 	),
32858f10ad4SChuck Lever 
329aba11831SChuck Lever 	TP_printk("task:%u@%u %u@0x%016llx:0x%08x (%s)",
330aba11831SChuck Lever 		__entry->task_id, __entry->client_id,
33158f10ad4SChuck Lever 		__entry->length, (unsigned long long)__entry->offset,
33258f10ad4SChuck Lever 		__entry->handle,
33358f10ad4SChuck Lever 		__entry->nents < __entry->nsegs ? "more" : "last"
33458f10ad4SChuck Lever 	)
33558f10ad4SChuck Lever );
33658f10ad4SChuck Lever 
33758f10ad4SChuck Lever #define DEFINE_WRCH_EVENT(name)						\
338aba11831SChuck Lever 		DEFINE_EVENT(xprtrdma_wrch_event, xprtrdma_chunk_##name,\
33958f10ad4SChuck Lever 				TP_PROTO(				\
34058f10ad4SChuck Lever 					const struct rpc_task *task,	\
34158f10ad4SChuck Lever 					struct rpcrdma_mr *mr,		\
34258f10ad4SChuck Lever 					int nsegs			\
34358f10ad4SChuck Lever 				),					\
34458f10ad4SChuck Lever 				TP_ARGS(task, mr, nsegs))
34558f10ad4SChuck Lever 
346aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_BIDIRECTIONAL);
347aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_TO_DEVICE);
348aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_FROM_DEVICE);
349aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_NONE);
350aba11831SChuck Lever 
351aba11831SChuck Lever #define xprtrdma_show_direction(x)					\
352aba11831SChuck Lever 		__print_symbolic(x,					\
353aba11831SChuck Lever 				{ DMA_BIDIRECTIONAL, "BIDIR" },		\
354aba11831SChuck Lever 				{ DMA_TO_DEVICE, "TO_DEVICE" },		\
355aba11831SChuck Lever 				{ DMA_FROM_DEVICE, "FROM_DEVICE" },	\
356aba11831SChuck Lever 				{ DMA_NONE, "NONE" })
357aba11831SChuck Lever 
3587703db97SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_mr_class,
3597703db97SChuck Lever 	TP_PROTO(
3607703db97SChuck Lever 		const struct rpcrdma_mr *mr
3617703db97SChuck Lever 	),
3627703db97SChuck Lever 
3637703db97SChuck Lever 	TP_ARGS(mr),
3647703db97SChuck Lever 
3657703db97SChuck Lever 	TP_STRUCT__entry(
3667703db97SChuck Lever 		__field(unsigned int, task_id)
3677703db97SChuck Lever 		__field(unsigned int, client_id)
3687703db97SChuck Lever 		__field(u32, mr_id)
3697703db97SChuck Lever 		__field(int, nents)
3707703db97SChuck Lever 		__field(u32, handle)
3717703db97SChuck Lever 		__field(u32, length)
3727703db97SChuck Lever 		__field(u64, offset)
3737703db97SChuck Lever 		__field(u32, dir)
3747703db97SChuck Lever 	),
3757703db97SChuck Lever 
3767703db97SChuck Lever 	TP_fast_assign(
3777703db97SChuck Lever 		const struct rpcrdma_req *req = mr->mr_req;
378*21037b8cSChuck Lever 
379*21037b8cSChuck Lever 		if (req) {
3807703db97SChuck Lever 			const struct rpc_task *task = req->rl_slot.rq_task;
3817703db97SChuck Lever 
3827703db97SChuck Lever 			__entry->task_id = task->tk_pid;
3837703db97SChuck Lever 			__entry->client_id = task->tk_client->cl_clid;
384*21037b8cSChuck Lever 		} else {
385*21037b8cSChuck Lever 			__entry->task_id = 0;
386*21037b8cSChuck Lever 			__entry->client_id = -1;
387*21037b8cSChuck Lever 		}
38813bcf7e3SChuck Lever 		__entry->mr_id  = mr->mr_ibmr->res.id;
3897703db97SChuck Lever 		__entry->nents  = mr->mr_nents;
3907703db97SChuck Lever 		__entry->handle = mr->mr_handle;
3917703db97SChuck Lever 		__entry->length = mr->mr_length;
3927703db97SChuck Lever 		__entry->offset = mr->mr_offset;
3937703db97SChuck Lever 		__entry->dir    = mr->mr_dir;
3947703db97SChuck Lever 	),
3957703db97SChuck Lever 
3967703db97SChuck Lever 	TP_printk("task:%u@%u mr.id=%u nents=%d %u@0x%016llx:0x%08x (%s)",
3977703db97SChuck Lever 		__entry->task_id, __entry->client_id,
3987703db97SChuck Lever 		__entry->mr_id, __entry->nents, __entry->length,
3997703db97SChuck Lever 		(unsigned long long)__entry->offset, __entry->handle,
4007703db97SChuck Lever 		xprtrdma_show_direction(__entry->dir)
4017703db97SChuck Lever 	)
4027703db97SChuck Lever );
4037703db97SChuck Lever 
4047703db97SChuck Lever #define DEFINE_MR_EVENT(name)						\
4057703db97SChuck Lever 		DEFINE_EVENT(xprtrdma_mr_class,				\
4067703db97SChuck Lever 				xprtrdma_mr_##name,			\
4077703db97SChuck Lever 				TP_PROTO(				\
4087703db97SChuck Lever 					const struct rpcrdma_mr *mr	\
4097703db97SChuck Lever 				),					\
4107703db97SChuck Lever 				TP_ARGS(mr))
4117703db97SChuck Lever 
4127703db97SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_anonymous_mr_class,
4132937fedeSChuck Lever 	TP_PROTO(
4142937fedeSChuck Lever 		const struct rpcrdma_mr *mr
4152937fedeSChuck Lever 	),
4162937fedeSChuck Lever 
4172937fedeSChuck Lever 	TP_ARGS(mr),
4182937fedeSChuck Lever 
4192937fedeSChuck Lever 	TP_STRUCT__entry(
42062a89501SChuck Lever 		__field(u32, mr_id)
42162a89501SChuck Lever 		__field(int, nents)
4222937fedeSChuck Lever 		__field(u32, handle)
4232937fedeSChuck Lever 		__field(u32, length)
4242937fedeSChuck Lever 		__field(u64, offset)
425aba11831SChuck Lever 		__field(u32, dir)
4262937fedeSChuck Lever 	),
4272937fedeSChuck Lever 
4282937fedeSChuck Lever 	TP_fast_assign(
42913bcf7e3SChuck Lever 		__entry->mr_id  = mr->mr_ibmr->res.id;
43062a89501SChuck Lever 		__entry->nents  = mr->mr_nents;
4312937fedeSChuck Lever 		__entry->handle = mr->mr_handle;
4322937fedeSChuck Lever 		__entry->length = mr->mr_length;
4332937fedeSChuck Lever 		__entry->offset = mr->mr_offset;
434aba11831SChuck Lever 		__entry->dir    = mr->mr_dir;
4352937fedeSChuck Lever 	),
4362937fedeSChuck Lever 
43762a89501SChuck Lever 	TP_printk("mr.id=%u nents=%d %u@0x%016llx:0x%08x (%s)",
43862a89501SChuck Lever 		__entry->mr_id, __entry->nents, __entry->length,
439aba11831SChuck Lever 		(unsigned long long)__entry->offset, __entry->handle,
440aba11831SChuck Lever 		xprtrdma_show_direction(__entry->dir)
4412937fedeSChuck Lever 	)
4422937fedeSChuck Lever );
4432937fedeSChuck Lever 
4447703db97SChuck Lever #define DEFINE_ANON_MR_EVENT(name)					\
4457703db97SChuck Lever 		DEFINE_EVENT(xprtrdma_anonymous_mr_class,		\
4467703db97SChuck Lever 				xprtrdma_mr_##name,			\
4472937fedeSChuck Lever 				TP_PROTO(				\
4482937fedeSChuck Lever 					const struct rpcrdma_mr *mr	\
4492937fedeSChuck Lever 				),					\
4502937fedeSChuck Lever 				TP_ARGS(mr))
4512937fedeSChuck Lever 
452d11e9346SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_callback_class,
453fc1eb807SChuck Lever 	TP_PROTO(
454d11e9346SChuck Lever 		const struct rpcrdma_xprt *r_xprt,
455fc1eb807SChuck Lever 		const struct rpc_rqst *rqst
456fc1eb807SChuck Lever 	),
457fc1eb807SChuck Lever 
458d11e9346SChuck Lever 	TP_ARGS(r_xprt, rqst),
459fc1eb807SChuck Lever 
460fc1eb807SChuck Lever 	TP_STRUCT__entry(
461fc1eb807SChuck Lever 		__field(u32, xid)
462d11e9346SChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
463d11e9346SChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
464fc1eb807SChuck Lever 	),
465fc1eb807SChuck Lever 
466fc1eb807SChuck Lever 	TP_fast_assign(
467fc1eb807SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
468d11e9346SChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
469d11e9346SChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
470fc1eb807SChuck Lever 	),
471fc1eb807SChuck Lever 
472d11e9346SChuck Lever 	TP_printk("peer=[%s]:%s xid=0x%08x",
473d11e9346SChuck Lever 		__get_str(addr), __get_str(port), __entry->xid
474fc1eb807SChuck Lever 	)
475fc1eb807SChuck Lever );
476fc1eb807SChuck Lever 
477d11e9346SChuck Lever #define DEFINE_CALLBACK_EVENT(name)					\
478d11e9346SChuck Lever 		DEFINE_EVENT(xprtrdma_callback_class,			\
479d11e9346SChuck Lever 				xprtrdma_cb_##name,			\
480fc1eb807SChuck Lever 				TP_PROTO(				\
481d11e9346SChuck Lever 					const struct rpcrdma_xprt *r_xprt, \
482fc1eb807SChuck Lever 					const struct rpc_rqst *rqst	\
483fc1eb807SChuck Lever 				),					\
484d11e9346SChuck Lever 				TP_ARGS(r_xprt, rqst))
485fc1eb807SChuck Lever 
486b4a7f91cSChuck Lever /**
487b4744e00SChuck Lever  ** Connection events
488b4744e00SChuck Lever  **/
489b4744e00SChuck Lever 
490f54c870dSChuck Lever TRACE_EVENT(xprtrdma_inline_thresh,
491f54c870dSChuck Lever 	TP_PROTO(
492745b734cSChuck Lever 		const struct rpcrdma_ep *ep
493f54c870dSChuck Lever 	),
494f54c870dSChuck Lever 
495745b734cSChuck Lever 	TP_ARGS(ep),
496f54c870dSChuck Lever 
497f54c870dSChuck Lever 	TP_STRUCT__entry(
498f54c870dSChuck Lever 		__field(unsigned int, inline_send)
499f54c870dSChuck Lever 		__field(unsigned int, inline_recv)
500f54c870dSChuck Lever 		__field(unsigned int, max_send)
501f54c870dSChuck Lever 		__field(unsigned int, max_recv)
502745b734cSChuck Lever 		__array(unsigned char, srcaddr, sizeof(struct sockaddr_in6))
503745b734cSChuck Lever 		__array(unsigned char, dstaddr, sizeof(struct sockaddr_in6))
504f54c870dSChuck Lever 	),
505f54c870dSChuck Lever 
506f54c870dSChuck Lever 	TP_fast_assign(
507745b734cSChuck Lever 		const struct rdma_cm_id *id = ep->re_id;
508f54c870dSChuck Lever 
50993aa8e0aSChuck Lever 		__entry->inline_send = ep->re_inline_send;
51093aa8e0aSChuck Lever 		__entry->inline_recv = ep->re_inline_recv;
51193aa8e0aSChuck Lever 		__entry->max_send = ep->re_max_inline_send;
51293aa8e0aSChuck Lever 		__entry->max_recv = ep->re_max_inline_recv;
513745b734cSChuck Lever 		memcpy(__entry->srcaddr, &id->route.addr.src_addr,
514745b734cSChuck Lever 		       sizeof(struct sockaddr_in6));
515745b734cSChuck Lever 		memcpy(__entry->dstaddr, &id->route.addr.dst_addr,
516745b734cSChuck Lever 		       sizeof(struct sockaddr_in6));
517f54c870dSChuck Lever 	),
518f54c870dSChuck Lever 
519745b734cSChuck Lever 	TP_printk("%pISpc -> %pISpc neg send/recv=%u/%u, calc send/recv=%u/%u",
520745b734cSChuck Lever 		__entry->srcaddr, __entry->dstaddr,
521f54c870dSChuck Lever 		__entry->inline_send, __entry->inline_recv,
522f54c870dSChuck Lever 		__entry->max_send, __entry->max_recv
523f54c870dSChuck Lever 	)
524f54c870dSChuck Lever );
525f54c870dSChuck Lever 
5267b020f17SChuck Lever DEFINE_CONN_EVENT(connect);
5277b020f17SChuck Lever DEFINE_CONN_EVENT(disconnect);
5287b020f17SChuck Lever 
5297b020f17SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_op_inject_dsc);
5307b020f17SChuck Lever 
5317b020f17SChuck Lever TRACE_EVENT(xprtrdma_op_connect,
532b4744e00SChuck Lever 	TP_PROTO(
533b4744e00SChuck Lever 		const struct rpcrdma_xprt *r_xprt,
5347b020f17SChuck Lever 		unsigned long delay
535b4744e00SChuck Lever 	),
536b4744e00SChuck Lever 
5377b020f17SChuck Lever 	TP_ARGS(r_xprt, delay),
538b4744e00SChuck Lever 
539b4744e00SChuck Lever 	TP_STRUCT__entry(
5407b020f17SChuck Lever 		__field(unsigned long, delay)
541b4744e00SChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
542b4744e00SChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
543b4744e00SChuck Lever 	),
544b4744e00SChuck Lever 
545b4744e00SChuck Lever 	TP_fast_assign(
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 
55183189d15SChuck Lever 	TP_printk("peer=[%s]:%s delay=%lu",
55283189d15SChuck Lever 		__get_str(addr), __get_str(port), __entry->delay
553b4744e00SChuck Lever 	)
554b4744e00SChuck Lever );
555b4744e00SChuck Lever 
556b4744e00SChuck Lever 
557675dd90aSChuck Lever TRACE_EVENT(xprtrdma_op_set_cto,
558675dd90aSChuck Lever 	TP_PROTO(
559675dd90aSChuck Lever 		const struct rpcrdma_xprt *r_xprt,
560675dd90aSChuck Lever 		unsigned long connect,
561675dd90aSChuck Lever 		unsigned long reconnect
562675dd90aSChuck Lever 	),
563675dd90aSChuck Lever 
564675dd90aSChuck Lever 	TP_ARGS(r_xprt, connect, reconnect),
565675dd90aSChuck Lever 
566675dd90aSChuck Lever 	TP_STRUCT__entry(
567675dd90aSChuck Lever 		__field(unsigned long, connect)
568675dd90aSChuck Lever 		__field(unsigned long, reconnect)
569675dd90aSChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
570675dd90aSChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
571675dd90aSChuck Lever 	),
572675dd90aSChuck Lever 
573675dd90aSChuck Lever 	TP_fast_assign(
574675dd90aSChuck Lever 		__entry->connect = connect;
575675dd90aSChuck Lever 		__entry->reconnect = reconnect;
576675dd90aSChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
577675dd90aSChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
578675dd90aSChuck Lever 	),
579675dd90aSChuck Lever 
58083189d15SChuck Lever 	TP_printk("peer=[%s]:%s connect=%lu reconnect=%lu",
58183189d15SChuck Lever 		__get_str(addr), __get_str(port),
582675dd90aSChuck Lever 		__entry->connect / HZ, __entry->reconnect / HZ
583675dd90aSChuck Lever 	)
584675dd90aSChuck Lever );
585675dd90aSChuck Lever 
586b4744e00SChuck Lever /**
587ab03eff5SChuck Lever  ** Call events
588ab03eff5SChuck Lever  **/
589ab03eff5SChuck Lever 
5901c443effSChuck Lever TRACE_EVENT(xprtrdma_createmrs,
5911c443effSChuck Lever 	TP_PROTO(
5921c443effSChuck Lever 		const struct rpcrdma_xprt *r_xprt,
5931c443effSChuck Lever 		unsigned int count
5941c443effSChuck Lever 	),
5951c443effSChuck Lever 
5961c443effSChuck Lever 	TP_ARGS(r_xprt, count),
5971c443effSChuck Lever 
5981c443effSChuck Lever 	TP_STRUCT__entry(
5996dc6ec9eSChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
6006dc6ec9eSChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
6011c443effSChuck Lever 		__field(unsigned int, count)
6021c443effSChuck Lever 	),
6031c443effSChuck Lever 
6041c443effSChuck Lever 	TP_fast_assign(
6051c443effSChuck Lever 		__entry->count = count;
6066dc6ec9eSChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
6076dc6ec9eSChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
6081c443effSChuck Lever 	),
6091c443effSChuck Lever 
61083189d15SChuck Lever 	TP_printk("peer=[%s]:%s created %u MRs",
61183189d15SChuck Lever 		__get_str(addr), __get_str(port), __entry->count
6126dc6ec9eSChuck Lever 	)
6136dc6ec9eSChuck Lever );
6146dc6ec9eSChuck Lever 
6150307cdecSChuck Lever TRACE_EVENT(xprtrdma_nomrs_err,
6166dc6ec9eSChuck Lever 	TP_PROTO(
6170307cdecSChuck Lever 		const struct rpcrdma_xprt *r_xprt,
6186dc6ec9eSChuck Lever 		const struct rpcrdma_req *req
6196dc6ec9eSChuck Lever 	),
6206dc6ec9eSChuck Lever 
6210307cdecSChuck Lever 	TP_ARGS(r_xprt, req),
6226dc6ec9eSChuck Lever 
6236dc6ec9eSChuck Lever 	TP_STRUCT__entry(
6246dc6ec9eSChuck Lever 		__field(unsigned int, task_id)
6256dc6ec9eSChuck Lever 		__field(unsigned int, client_id)
6260307cdecSChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
6270307cdecSChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
6286dc6ec9eSChuck Lever 	),
6296dc6ec9eSChuck Lever 
6306dc6ec9eSChuck Lever 	TP_fast_assign(
6316dc6ec9eSChuck Lever 		const struct rpc_rqst *rqst = &req->rl_slot;
6326dc6ec9eSChuck Lever 
6336dc6ec9eSChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
6346dc6ec9eSChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
6350307cdecSChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
6360307cdecSChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
6376dc6ec9eSChuck Lever 	),
6386dc6ec9eSChuck Lever 
6390307cdecSChuck Lever 	TP_printk("peer=[%s]:%s task:%u@%u",
6400307cdecSChuck Lever 		__get_str(addr), __get_str(port),
6410307cdecSChuck Lever 		__entry->task_id, __entry->client_id
6423b39f52aSChuck Lever 	)
6433b39f52aSChuck Lever );
6441c443effSChuck Lever 
645aba11831SChuck Lever DEFINE_RDCH_EVENT(read);
646aba11831SChuck Lever DEFINE_WRCH_EVENT(write);
647aba11831SChuck Lever DEFINE_WRCH_EVENT(reply);
648*21037b8cSChuck Lever DEFINE_WRCH_EVENT(wp);
64958f10ad4SChuck Lever 
650ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch);
651614f3c96SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch_pullup);
652614f3c96SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch_mapped);
653ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_readch);
654ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_areadch);
655ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_writech);
656ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_replych);
657ab03eff5SChuck Lever 
658ab03eff5SChuck Lever #define xprtrdma_show_chunktype(x)					\
659ab03eff5SChuck Lever 		__print_symbolic(x,					\
660ab03eff5SChuck Lever 				{ rpcrdma_noch, "inline" },		\
661614f3c96SChuck Lever 				{ rpcrdma_noch_pullup, "pullup" },	\
662614f3c96SChuck Lever 				{ rpcrdma_noch_mapped, "mapped" },	\
663ab03eff5SChuck Lever 				{ rpcrdma_readch, "read list" },	\
664ab03eff5SChuck Lever 				{ rpcrdma_areadch, "*read list" },	\
665ab03eff5SChuck Lever 				{ rpcrdma_writech, "write list" },	\
666ab03eff5SChuck Lever 				{ rpcrdma_replych, "reply chunk" })
667ab03eff5SChuck Lever 
668ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_marshal,
669ab03eff5SChuck Lever 	TP_PROTO(
6701310051cSChuck Lever 		const struct rpcrdma_req *req,
671ab03eff5SChuck Lever 		unsigned int rtype,
672ab03eff5SChuck Lever 		unsigned int wtype
673ab03eff5SChuck Lever 	),
674ab03eff5SChuck Lever 
6751310051cSChuck Lever 	TP_ARGS(req, rtype, wtype),
676ab03eff5SChuck Lever 
677ab03eff5SChuck Lever 	TP_STRUCT__entry(
678ab03eff5SChuck Lever 		__field(unsigned int, task_id)
679ab03eff5SChuck Lever 		__field(unsigned int, client_id)
680ab03eff5SChuck Lever 		__field(u32, xid)
681ab03eff5SChuck Lever 		__field(unsigned int, hdrlen)
682ab03eff5SChuck Lever 		__field(unsigned int, headlen)
683ab03eff5SChuck Lever 		__field(unsigned int, pagelen)
684ab03eff5SChuck Lever 		__field(unsigned int, taillen)
685ab03eff5SChuck Lever 		__field(unsigned int, rtype)
686ab03eff5SChuck Lever 		__field(unsigned int, wtype)
687ab03eff5SChuck Lever 	),
688ab03eff5SChuck Lever 
689ab03eff5SChuck Lever 	TP_fast_assign(
6901310051cSChuck Lever 		const struct rpc_rqst *rqst = &req->rl_slot;
6911310051cSChuck Lever 
692ab03eff5SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
693ab03eff5SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
694ab03eff5SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
6951310051cSChuck Lever 		__entry->hdrlen = req->rl_hdrbuf.len;
696ab03eff5SChuck Lever 		__entry->headlen = rqst->rq_snd_buf.head[0].iov_len;
697ab03eff5SChuck Lever 		__entry->pagelen = rqst->rq_snd_buf.page_len;
698ab03eff5SChuck Lever 		__entry->taillen = rqst->rq_snd_buf.tail[0].iov_len;
699ab03eff5SChuck Lever 		__entry->rtype = rtype;
700ab03eff5SChuck Lever 		__entry->wtype = wtype;
701ab03eff5SChuck Lever 	),
702ab03eff5SChuck Lever 
703ab03eff5SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x: hdr=%u xdr=%u/%u/%u %s/%s",
704ab03eff5SChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
705ab03eff5SChuck Lever 		__entry->hdrlen,
706ab03eff5SChuck Lever 		__entry->headlen, __entry->pagelen, __entry->taillen,
707ab03eff5SChuck Lever 		xprtrdma_show_chunktype(__entry->rtype),
708ab03eff5SChuck Lever 		xprtrdma_show_chunktype(__entry->wtype)
709ab03eff5SChuck Lever 	)
710ab03eff5SChuck Lever );
711ab03eff5SChuck Lever 
71217e4c443SChuck Lever TRACE_EVENT(xprtrdma_marshal_failed,
71317e4c443SChuck Lever 	TP_PROTO(const struct rpc_rqst *rqst,
71417e4c443SChuck Lever 		 int ret
71517e4c443SChuck Lever 	),
71617e4c443SChuck Lever 
71717e4c443SChuck Lever 	TP_ARGS(rqst, ret),
71817e4c443SChuck Lever 
71917e4c443SChuck Lever 	TP_STRUCT__entry(
72017e4c443SChuck Lever 		__field(unsigned int, task_id)
72117e4c443SChuck Lever 		__field(unsigned int, client_id)
72217e4c443SChuck Lever 		__field(u32, xid)
72317e4c443SChuck Lever 		__field(int, ret)
72417e4c443SChuck Lever 	),
72517e4c443SChuck Lever 
72617e4c443SChuck Lever 	TP_fast_assign(
72717e4c443SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
72817e4c443SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
72917e4c443SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
73017e4c443SChuck Lever 		__entry->ret = ret;
73117e4c443SChuck Lever 	),
73217e4c443SChuck Lever 
73317e4c443SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x: ret=%d",
73417e4c443SChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
73517e4c443SChuck Lever 		__entry->ret
73617e4c443SChuck Lever 	)
73717e4c443SChuck Lever );
73817e4c443SChuck Lever 
73905eb06d8SChuck Lever TRACE_EVENT(xprtrdma_prepsend_failed,
74005eb06d8SChuck Lever 	TP_PROTO(const struct rpc_rqst *rqst,
74105eb06d8SChuck Lever 		 int ret
74205eb06d8SChuck Lever 	),
74305eb06d8SChuck Lever 
74405eb06d8SChuck Lever 	TP_ARGS(rqst, ret),
74505eb06d8SChuck Lever 
74605eb06d8SChuck Lever 	TP_STRUCT__entry(
74705eb06d8SChuck Lever 		__field(unsigned int, task_id)
74805eb06d8SChuck Lever 		__field(unsigned int, client_id)
74905eb06d8SChuck Lever 		__field(u32, xid)
75005eb06d8SChuck Lever 		__field(int, ret)
75105eb06d8SChuck Lever 	),
75205eb06d8SChuck Lever 
75305eb06d8SChuck Lever 	TP_fast_assign(
75405eb06d8SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
75505eb06d8SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
75605eb06d8SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
75705eb06d8SChuck Lever 		__entry->ret = ret;
75805eb06d8SChuck Lever 	),
75905eb06d8SChuck Lever 
76005eb06d8SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x: ret=%d",
76105eb06d8SChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
76205eb06d8SChuck Lever 		__entry->ret
76305eb06d8SChuck Lever 	)
76405eb06d8SChuck Lever );
76505eb06d8SChuck Lever 
766ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_post_send,
767ab03eff5SChuck Lever 	TP_PROTO(
768bdb2ce82SChuck Lever 		const struct rpcrdma_req *req
769ab03eff5SChuck Lever 	),
770ab03eff5SChuck Lever 
771bdb2ce82SChuck Lever 	TP_ARGS(req),
772ab03eff5SChuck Lever 
773ab03eff5SChuck Lever 	TP_STRUCT__entry(
774b2e7467fSChuck Lever 		__field(u32, cq_id)
775b2e7467fSChuck Lever 		__field(int, completion_id)
7760c77668dSChuck Lever 		__field(unsigned int, task_id)
7770c77668dSChuck Lever 		__field(unsigned int, client_id)
778ab03eff5SChuck Lever 		__field(int, num_sge)
779470443e0SChuck Lever 		__field(int, signaled)
780ab03eff5SChuck Lever 	),
781ab03eff5SChuck Lever 
782ab03eff5SChuck Lever 	TP_fast_assign(
7830c77668dSChuck Lever 		const struct rpc_rqst *rqst = &req->rl_slot;
784b2e7467fSChuck Lever 		const struct rpcrdma_sendctx *sc = req->rl_sendctx;
7850c77668dSChuck Lever 
786b2e7467fSChuck Lever 		__entry->cq_id = sc->sc_cid.ci_queue_id;
787b2e7467fSChuck Lever 		__entry->completion_id = sc->sc_cid.ci_completion_id;
7880c77668dSChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
78910694ac9SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client ?
79010694ac9SChuck Lever 				     rqst->rq_task->tk_client->cl_clid : -1;
791dc15c3d5SChuck Lever 		__entry->num_sge = req->rl_wr.num_sge;
792dc15c3d5SChuck Lever 		__entry->signaled = req->rl_wr.send_flags & IB_SEND_SIGNALED;
793ab03eff5SChuck Lever 	),
794ab03eff5SChuck Lever 
795b2e7467fSChuck Lever 	TP_printk("task:%u@%u cq.id=%u cid=%d (%d SGE%s) %s",
7960c77668dSChuck Lever 		__entry->task_id, __entry->client_id,
797b2e7467fSChuck Lever 		__entry->cq_id, __entry->completion_id,
798b2e7467fSChuck Lever 		__entry->num_sge, (__entry->num_sge == 1 ? "" : "s"),
799bdb2ce82SChuck Lever 		(__entry->signaled ? "signaled" : "")
800ab03eff5SChuck Lever 	)
801ab03eff5SChuck Lever );
802ab03eff5SChuck Lever 
803d9ae8134SChuck Lever TRACE_EVENT(xprtrdma_post_send_err,
804d9ae8134SChuck Lever 	TP_PROTO(
805d9ae8134SChuck Lever 		const struct rpcrdma_xprt *r_xprt,
806d9ae8134SChuck Lever 		const struct rpcrdma_req *req,
807d9ae8134SChuck Lever 		int rc
808d9ae8134SChuck Lever 	),
809d9ae8134SChuck Lever 
810d9ae8134SChuck Lever 	TP_ARGS(r_xprt, req, rc),
811d9ae8134SChuck Lever 
812d9ae8134SChuck Lever 	TP_STRUCT__entry(
813d9ae8134SChuck Lever 		__field(u32, cq_id)
814d9ae8134SChuck Lever 		__field(unsigned int, task_id)
815d9ae8134SChuck Lever 		__field(unsigned int, client_id)
816d9ae8134SChuck Lever 		__field(int, rc)
817d9ae8134SChuck Lever 	),
818d9ae8134SChuck Lever 
819d9ae8134SChuck Lever 	TP_fast_assign(
820d9ae8134SChuck Lever 		const struct rpc_rqst *rqst = &req->rl_slot;
821d9ae8134SChuck Lever 		const struct rpcrdma_ep *ep = r_xprt->rx_ep;
822d9ae8134SChuck Lever 
823d9ae8134SChuck Lever 		__entry->cq_id = ep ? ep->re_attr.recv_cq->res.id : 0;
824d9ae8134SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
825d9ae8134SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client ?
826d9ae8134SChuck Lever 				     rqst->rq_task->tk_client->cl_clid : -1;
827d9ae8134SChuck Lever 		__entry->rc = rc;
828d9ae8134SChuck Lever 	),
829d9ae8134SChuck Lever 
830d9ae8134SChuck Lever 	TP_printk("task:%u@%u cq.id=%u rc=%d",
831d9ae8134SChuck Lever 		__entry->task_id, __entry->client_id,
832d9ae8134SChuck Lever 		__entry->cq_id, __entry->rc
833d9ae8134SChuck Lever 	)
834d9ae8134SChuck Lever );
835d9ae8134SChuck Lever 
836b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_post_recv,
837b4a7f91cSChuck Lever 	TP_PROTO(
8382dfdcd88SChuck Lever 		const struct rpcrdma_rep *rep
839b4a7f91cSChuck Lever 	),
840b4a7f91cSChuck Lever 
8412dfdcd88SChuck Lever 	TP_ARGS(rep),
842b4a7f91cSChuck Lever 
843b4a7f91cSChuck Lever 	TP_STRUCT__entry(
844af5865d2SChuck Lever 		__field(u32, cq_id)
845af5865d2SChuck Lever 		__field(int, completion_id)
846b4a7f91cSChuck Lever 	),
847b4a7f91cSChuck Lever 
848b4a7f91cSChuck Lever 	TP_fast_assign(
849af5865d2SChuck Lever 		__entry->cq_id = rep->rr_cid.ci_queue_id;
850af5865d2SChuck Lever 		__entry->completion_id = rep->rr_cid.ci_completion_id;
851b4a7f91cSChuck Lever 	),
852b4a7f91cSChuck Lever 
853af5865d2SChuck Lever 	TP_printk("cq.id=%d cid=%d",
854af5865d2SChuck Lever 		__entry->cq_id, __entry->completion_id
855b4a7f91cSChuck Lever 	)
856b4a7f91cSChuck Lever );
857b4a7f91cSChuck Lever 
8587c8d9e7cSChuck Lever TRACE_EVENT(xprtrdma_post_recvs,
8597c8d9e7cSChuck Lever 	TP_PROTO(
8607c8d9e7cSChuck Lever 		const struct rpcrdma_xprt *r_xprt,
861683f31c3SChuck Lever 		unsigned int count
8627c8d9e7cSChuck Lever 	),
8637c8d9e7cSChuck Lever 
864683f31c3SChuck Lever 	TP_ARGS(r_xprt, count),
8657c8d9e7cSChuck Lever 
8667c8d9e7cSChuck Lever 	TP_STRUCT__entry(
86783189d15SChuck Lever 		__field(u32, cq_id)
8687c8d9e7cSChuck Lever 		__field(unsigned int, count)
8697c8d9e7cSChuck Lever 		__field(int, posted)
8707c8d9e7cSChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
8717c8d9e7cSChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
8727c8d9e7cSChuck Lever 	),
8737c8d9e7cSChuck Lever 
8747c8d9e7cSChuck Lever 	TP_fast_assign(
87583189d15SChuck Lever 		const struct rpcrdma_ep *ep = r_xprt->rx_ep;
87683189d15SChuck Lever 
87783189d15SChuck Lever 		__entry->cq_id = ep->re_attr.recv_cq->res.id;
8787c8d9e7cSChuck Lever 		__entry->count = count;
87983189d15SChuck Lever 		__entry->posted = ep->re_receive_count;
8807c8d9e7cSChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
8817c8d9e7cSChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
8827c8d9e7cSChuck Lever 	),
8837c8d9e7cSChuck Lever 
884683f31c3SChuck Lever 	TP_printk("peer=[%s]:%s cq.id=%d %u new recvs, %d active",
88583189d15SChuck Lever 		__get_str(addr), __get_str(port), __entry->cq_id,
886683f31c3SChuck Lever 		__entry->count, __entry->posted
887683f31c3SChuck Lever 	)
888683f31c3SChuck Lever );
889683f31c3SChuck Lever 
890683f31c3SChuck Lever TRACE_EVENT(xprtrdma_post_recvs_err,
891683f31c3SChuck Lever 	TP_PROTO(
892683f31c3SChuck Lever 		const struct rpcrdma_xprt *r_xprt,
893683f31c3SChuck Lever 		int status
894683f31c3SChuck Lever 	),
895683f31c3SChuck Lever 
896683f31c3SChuck Lever 	TP_ARGS(r_xprt, status),
897683f31c3SChuck Lever 
898683f31c3SChuck Lever 	TP_STRUCT__entry(
899683f31c3SChuck Lever 		__field(u32, cq_id)
900683f31c3SChuck Lever 		__field(int, status)
901683f31c3SChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
902683f31c3SChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
903683f31c3SChuck Lever 	),
904683f31c3SChuck Lever 
905683f31c3SChuck Lever 	TP_fast_assign(
906683f31c3SChuck Lever 		const struct rpcrdma_ep *ep = r_xprt->rx_ep;
907683f31c3SChuck Lever 
908683f31c3SChuck Lever 		__entry->cq_id = ep->re_attr.recv_cq->res.id;
909683f31c3SChuck Lever 		__entry->status = status;
910683f31c3SChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
911683f31c3SChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
912683f31c3SChuck Lever 	),
913683f31c3SChuck Lever 
914683f31c3SChuck Lever 	TP_printk("peer=[%s]:%s cq.id=%d rc=%d",
915683f31c3SChuck Lever 		__get_str(addr), __get_str(port), __entry->cq_id,
916683f31c3SChuck Lever 		__entry->status
917ab03eff5SChuck Lever 	)
918ab03eff5SChuck Lever );
919ab03eff5SChuck Lever 
92036a55edfSChuck Lever TRACE_EVENT(xprtrdma_post_linv_err,
9214b93dab3SChuck Lever 	TP_PROTO(
9224b93dab3SChuck Lever 		const struct rpcrdma_req *req,
9234b93dab3SChuck Lever 		int status
9244b93dab3SChuck Lever 	),
9254b93dab3SChuck Lever 
9264b93dab3SChuck Lever 	TP_ARGS(req, status),
9274b93dab3SChuck Lever 
9284b93dab3SChuck Lever 	TP_STRUCT__entry(
92936a55edfSChuck Lever 		__field(unsigned int, task_id)
93036a55edfSChuck Lever 		__field(unsigned int, client_id)
9314b93dab3SChuck Lever 		__field(int, status)
9324b93dab3SChuck Lever 	),
9334b93dab3SChuck Lever 
9344b93dab3SChuck Lever 	TP_fast_assign(
93536a55edfSChuck Lever 		const struct rpc_task *task = req->rl_slot.rq_task;
93636a55edfSChuck Lever 
93736a55edfSChuck Lever 		__entry->task_id = task->tk_pid;
93836a55edfSChuck Lever 		__entry->client_id = task->tk_client->cl_clid;
9394b93dab3SChuck Lever 		__entry->status = status;
9404b93dab3SChuck Lever 	),
9414b93dab3SChuck Lever 
94236a55edfSChuck Lever 	TP_printk("task:%u@%u status=%d",
94336a55edfSChuck Lever 		__entry->task_id, __entry->client_id, __entry->status
9444b93dab3SChuck Lever 	)
9454b93dab3SChuck Lever );
9464b93dab3SChuck Lever 
947ab03eff5SChuck Lever /**
948ab03eff5SChuck Lever  ** Completion events
949ab03eff5SChuck Lever  **/
950ab03eff5SChuck Lever 
951c30f259aSChuck Lever DEFINE_RECEIVE_COMPLETION_EVENT(xprtrdma_wc_receive);
952c30f259aSChuck Lever 
953b2e7467fSChuck Lever DEFINE_COMPLETION_EVENT(xprtrdma_wc_send);
9546b147ea7SChuck Lever DEFINE_MR_COMPLETION_EVENT(xprtrdma_wc_fastreg);
9556b147ea7SChuck Lever DEFINE_MR_COMPLETION_EVENT(xprtrdma_wc_li);
9566b147ea7SChuck Lever DEFINE_MR_COMPLETION_EVENT(xprtrdma_wc_li_wake);
9576b147ea7SChuck Lever DEFINE_MR_COMPLETION_EVENT(xprtrdma_wc_li_done);
9582937fedeSChuck Lever 
95953b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_alloc,
96053b2c1cbSChuck Lever 	TP_PROTO(
96153b2c1cbSChuck Lever 		const struct rpcrdma_mr *mr,
96253b2c1cbSChuck Lever 		int rc
96353b2c1cbSChuck Lever 	),
96453b2c1cbSChuck Lever 
96553b2c1cbSChuck Lever 	TP_ARGS(mr, rc),
96653b2c1cbSChuck Lever 
96753b2c1cbSChuck Lever 	TP_STRUCT__entry(
96862a89501SChuck Lever 		__field(u32, mr_id)
96953b2c1cbSChuck Lever 		__field(int, rc)
97053b2c1cbSChuck Lever 	),
97153b2c1cbSChuck Lever 
97253b2c1cbSChuck Lever 	TP_fast_assign(
97313bcf7e3SChuck Lever 		__entry->mr_id = mr->mr_ibmr->res.id;
97453b2c1cbSChuck Lever 		__entry->rc = rc;
97553b2c1cbSChuck Lever 	),
97653b2c1cbSChuck Lever 
97762a89501SChuck Lever 	TP_printk("mr.id=%u: rc=%d",
97862a89501SChuck Lever 		__entry->mr_id, __entry->rc
97953b2c1cbSChuck Lever 	)
98053b2c1cbSChuck Lever );
98153b2c1cbSChuck Lever 
98253b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_dereg,
98353b2c1cbSChuck Lever 	TP_PROTO(
98453b2c1cbSChuck Lever 		const struct rpcrdma_mr *mr,
98553b2c1cbSChuck Lever 		int rc
98653b2c1cbSChuck Lever 	),
98753b2c1cbSChuck Lever 
98853b2c1cbSChuck Lever 	TP_ARGS(mr, rc),
98953b2c1cbSChuck Lever 
99053b2c1cbSChuck Lever 	TP_STRUCT__entry(
99162a89501SChuck Lever 		__field(u32, mr_id)
99262a89501SChuck Lever 		__field(int, nents)
99353b2c1cbSChuck Lever 		__field(u32, handle)
99453b2c1cbSChuck Lever 		__field(u32, length)
99553b2c1cbSChuck Lever 		__field(u64, offset)
99653b2c1cbSChuck Lever 		__field(u32, dir)
99753b2c1cbSChuck Lever 		__field(int, rc)
99853b2c1cbSChuck Lever 	),
99953b2c1cbSChuck Lever 
100053b2c1cbSChuck Lever 	TP_fast_assign(
100113bcf7e3SChuck Lever 		__entry->mr_id  = mr->mr_ibmr->res.id;
100262a89501SChuck Lever 		__entry->nents  = mr->mr_nents;
100353b2c1cbSChuck Lever 		__entry->handle = mr->mr_handle;
100453b2c1cbSChuck Lever 		__entry->length = mr->mr_length;
100553b2c1cbSChuck Lever 		__entry->offset = mr->mr_offset;
100653b2c1cbSChuck Lever 		__entry->dir    = mr->mr_dir;
100753b2c1cbSChuck Lever 		__entry->rc	= rc;
100853b2c1cbSChuck Lever 	),
100953b2c1cbSChuck Lever 
101062a89501SChuck Lever 	TP_printk("mr.id=%u nents=%d %u@0x%016llx:0x%08x (%s): rc=%d",
101162a89501SChuck Lever 		__entry->mr_id, __entry->nents, __entry->length,
101253b2c1cbSChuck Lever 		(unsigned long long)__entry->offset, __entry->handle,
101353b2c1cbSChuck Lever 		xprtrdma_show_direction(__entry->dir),
101453b2c1cbSChuck Lever 		__entry->rc
101553b2c1cbSChuck Lever 	)
101653b2c1cbSChuck Lever );
101753b2c1cbSChuck Lever 
101853b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_sgerr,
101953b2c1cbSChuck Lever 	TP_PROTO(
102053b2c1cbSChuck Lever 		const struct rpcrdma_mr *mr,
102153b2c1cbSChuck Lever 		int sg_nents
102253b2c1cbSChuck Lever 	),
102353b2c1cbSChuck Lever 
102453b2c1cbSChuck Lever 	TP_ARGS(mr, sg_nents),
102553b2c1cbSChuck Lever 
102653b2c1cbSChuck Lever 	TP_STRUCT__entry(
102762a89501SChuck Lever 		__field(u32, mr_id)
102853b2c1cbSChuck Lever 		__field(u64, addr)
102953b2c1cbSChuck Lever 		__field(u32, dir)
103053b2c1cbSChuck Lever 		__field(int, nents)
103153b2c1cbSChuck Lever 	),
103253b2c1cbSChuck Lever 
103353b2c1cbSChuck Lever 	TP_fast_assign(
103413bcf7e3SChuck Lever 		__entry->mr_id = mr->mr_ibmr->res.id;
103553b2c1cbSChuck Lever 		__entry->addr = mr->mr_sg->dma_address;
103653b2c1cbSChuck Lever 		__entry->dir = mr->mr_dir;
103753b2c1cbSChuck Lever 		__entry->nents = sg_nents;
103853b2c1cbSChuck Lever 	),
103953b2c1cbSChuck Lever 
104062a89501SChuck Lever 	TP_printk("mr.id=%u DMA addr=0x%llx (%s) sg_nents=%d",
104162a89501SChuck Lever 		__entry->mr_id, __entry->addr,
104253b2c1cbSChuck Lever 		xprtrdma_show_direction(__entry->dir),
104353b2c1cbSChuck Lever 		__entry->nents
104453b2c1cbSChuck Lever 	)
104553b2c1cbSChuck Lever );
104653b2c1cbSChuck Lever 
104753b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_maperr,
104853b2c1cbSChuck Lever 	TP_PROTO(
104953b2c1cbSChuck Lever 		const struct rpcrdma_mr *mr,
105053b2c1cbSChuck Lever 		int num_mapped
105153b2c1cbSChuck Lever 	),
105253b2c1cbSChuck Lever 
105353b2c1cbSChuck Lever 	TP_ARGS(mr, num_mapped),
105453b2c1cbSChuck Lever 
105553b2c1cbSChuck Lever 	TP_STRUCT__entry(
105662a89501SChuck Lever 		__field(u32, mr_id)
105753b2c1cbSChuck Lever 		__field(u64, addr)
105853b2c1cbSChuck Lever 		__field(u32, dir)
105953b2c1cbSChuck Lever 		__field(int, num_mapped)
106053b2c1cbSChuck Lever 		__field(int, nents)
106153b2c1cbSChuck Lever 	),
106253b2c1cbSChuck Lever 
106353b2c1cbSChuck Lever 	TP_fast_assign(
106413bcf7e3SChuck Lever 		__entry->mr_id = mr->mr_ibmr->res.id;
106553b2c1cbSChuck Lever 		__entry->addr = mr->mr_sg->dma_address;
106653b2c1cbSChuck Lever 		__entry->dir = mr->mr_dir;
106753b2c1cbSChuck Lever 		__entry->num_mapped = num_mapped;
106853b2c1cbSChuck Lever 		__entry->nents = mr->mr_nents;
106953b2c1cbSChuck Lever 	),
107053b2c1cbSChuck Lever 
107162a89501SChuck Lever 	TP_printk("mr.id=%u DMA addr=0x%llx (%s) nents=%d of %d",
107262a89501SChuck Lever 		__entry->mr_id, __entry->addr,
107353b2c1cbSChuck Lever 		xprtrdma_show_direction(__entry->dir),
107453b2c1cbSChuck Lever 		__entry->num_mapped, __entry->nents
107553b2c1cbSChuck Lever 	)
107653b2c1cbSChuck Lever );
107753b2c1cbSChuck Lever 
10784ddd0fc3SChuck Lever DEFINE_MR_EVENT(fastreg);
1079d379eaa8SChuck Lever DEFINE_MR_EVENT(localinv);
10804ddd0fc3SChuck Lever DEFINE_MR_EVENT(reminv);
1081d379eaa8SChuck Lever DEFINE_MR_EVENT(map);
10827703db97SChuck Lever 
10837703db97SChuck Lever DEFINE_ANON_MR_EVENT(unmap);
108458f10ad4SChuck Lever 
108553b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_dma_maperr,
108653b2c1cbSChuck Lever 	TP_PROTO(
108753b2c1cbSChuck Lever 		u64 addr
108853b2c1cbSChuck Lever 	),
108953b2c1cbSChuck Lever 
109053b2c1cbSChuck Lever 	TP_ARGS(addr),
109153b2c1cbSChuck Lever 
109253b2c1cbSChuck Lever 	TP_STRUCT__entry(
109353b2c1cbSChuck Lever 		__field(u64, addr)
109453b2c1cbSChuck Lever 	),
109553b2c1cbSChuck Lever 
109653b2c1cbSChuck Lever 	TP_fast_assign(
109753b2c1cbSChuck Lever 		__entry->addr = addr;
109853b2c1cbSChuck Lever 	),
109953b2c1cbSChuck Lever 
110053b2c1cbSChuck Lever 	TP_printk("dma addr=0x%llx\n", __entry->addr)
110153b2c1cbSChuck Lever );
110253b2c1cbSChuck Lever 
1103b4a7f91cSChuck Lever /**
1104b4a7f91cSChuck Lever  ** Reply events
1105b4a7f91cSChuck Lever  **/
1106b4a7f91cSChuck Lever 
1107b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_reply,
1108b4a7f91cSChuck Lever 	TP_PROTO(
1109b4a7f91cSChuck Lever 		const struct rpc_task *task,
1110b4a7f91cSChuck Lever 		const struct rpcrdma_rep *rep,
1111b4a7f91cSChuck Lever 		unsigned int credits
1112b4a7f91cSChuck Lever 	),
1113b4a7f91cSChuck Lever 
111403ffd924SChuck Lever 	TP_ARGS(task, rep, credits),
1115b4a7f91cSChuck Lever 
1116b4a7f91cSChuck Lever 	TP_STRUCT__entry(
1117b4a7f91cSChuck Lever 		__field(unsigned int, task_id)
1118b4a7f91cSChuck Lever 		__field(unsigned int, client_id)
1119b4a7f91cSChuck Lever 		__field(u32, xid)
1120b4a7f91cSChuck Lever 		__field(unsigned int, credits)
1121b4a7f91cSChuck Lever 	),
1122b4a7f91cSChuck Lever 
1123b4a7f91cSChuck Lever 	TP_fast_assign(
1124b4a7f91cSChuck Lever 		__entry->task_id = task->tk_pid;
1125b4a7f91cSChuck Lever 		__entry->client_id = task->tk_client->cl_clid;
1126b4a7f91cSChuck Lever 		__entry->xid = be32_to_cpu(rep->rr_xid);
1127b4a7f91cSChuck Lever 		__entry->credits = credits;
1128b4a7f91cSChuck Lever 	),
1129b4a7f91cSChuck Lever 
113003ffd924SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x credits=%u",
1131b4a7f91cSChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
113203ffd924SChuck Lever 		__entry->credits
1133b4a7f91cSChuck Lever 	)
1134b4a7f91cSChuck Lever );
1135b4a7f91cSChuck Lever 
11363a9568feSChuck Lever DEFINE_REPLY_EVENT(vers);
11373a9568feSChuck Lever DEFINE_REPLY_EVENT(rqst);
11383a9568feSChuck Lever DEFINE_REPLY_EVENT(short);
11393a9568feSChuck Lever DEFINE_REPLY_EVENT(hdr);
1140b4a7f91cSChuck Lever 
11413821e232SChuck Lever TRACE_EVENT(xprtrdma_err_vers,
1142e48f083eSChuck Lever 	TP_PROTO(
11433821e232SChuck Lever 		const struct rpc_rqst *rqst,
11443821e232SChuck Lever 		__be32 *min,
11453821e232SChuck Lever 		__be32 *max
1146e48f083eSChuck Lever 	),
1147e48f083eSChuck Lever 
11483821e232SChuck Lever 	TP_ARGS(rqst, min, max),
1149e48f083eSChuck Lever 
1150e48f083eSChuck Lever 	TP_STRUCT__entry(
1151e48f083eSChuck Lever 		__field(unsigned int, task_id)
1152e48f083eSChuck Lever 		__field(unsigned int, client_id)
11533821e232SChuck Lever 		__field(u32, xid)
11543821e232SChuck Lever 		__field(u32, min)
11553821e232SChuck Lever 		__field(u32, max)
11563821e232SChuck Lever 	),
11573821e232SChuck Lever 
11583821e232SChuck Lever 	TP_fast_assign(
11593821e232SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
11603821e232SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
11613821e232SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
11623821e232SChuck Lever 		__entry->min = be32_to_cpup(min);
11633821e232SChuck Lever 		__entry->max = be32_to_cpup(max);
11643821e232SChuck Lever 	),
11653821e232SChuck Lever 
11663821e232SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x versions=[%u, %u]",
11673821e232SChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
11683821e232SChuck Lever 		__entry->min, __entry->max
11693821e232SChuck Lever 	)
11703821e232SChuck Lever );
11713821e232SChuck Lever 
11723821e232SChuck Lever TRACE_EVENT(xprtrdma_err_chunk,
11733821e232SChuck Lever 	TP_PROTO(
11743821e232SChuck Lever 		const struct rpc_rqst *rqst
11753821e232SChuck Lever 	),
11763821e232SChuck Lever 
11773821e232SChuck Lever 	TP_ARGS(rqst),
11783821e232SChuck Lever 
11793821e232SChuck Lever 	TP_STRUCT__entry(
11803821e232SChuck Lever 		__field(unsigned int, task_id)
11813821e232SChuck Lever 		__field(unsigned int, client_id)
1182e48f083eSChuck Lever 		__field(u32, xid)
1183e48f083eSChuck Lever 	),
1184e48f083eSChuck Lever 
1185e48f083eSChuck Lever 	TP_fast_assign(
11863821e232SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
11873821e232SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
11883821e232SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
1189e48f083eSChuck Lever 	),
1190e48f083eSChuck Lever 
11913821e232SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x",
11923821e232SChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid
1193e48f083eSChuck Lever 	)
1194e48f083eSChuck Lever );
1195e48f083eSChuck Lever 
11963821e232SChuck Lever TRACE_EVENT(xprtrdma_err_unrecognized,
11973821e232SChuck Lever 	TP_PROTO(
11983821e232SChuck Lever 		const struct rpc_rqst *rqst,
11993821e232SChuck Lever 		__be32 *procedure
12003821e232SChuck Lever 	),
12013821e232SChuck Lever 
12023821e232SChuck Lever 	TP_ARGS(rqst, procedure),
12033821e232SChuck Lever 
12043821e232SChuck Lever 	TP_STRUCT__entry(
12053821e232SChuck Lever 		__field(unsigned int, task_id)
12063821e232SChuck Lever 		__field(unsigned int, client_id)
12073821e232SChuck Lever 		__field(u32, xid)
12083821e232SChuck Lever 		__field(u32, procedure)
12093821e232SChuck Lever 	),
12103821e232SChuck Lever 
12113821e232SChuck Lever 	TP_fast_assign(
12123821e232SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
12133821e232SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
12143821e232SChuck Lever 		__entry->procedure = be32_to_cpup(procedure);
12153821e232SChuck Lever 	),
12163821e232SChuck Lever 
12173821e232SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x procedure=%u",
12183821e232SChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
12193821e232SChuck Lever 		__entry->procedure
12203821e232SChuck Lever 	)
12213821e232SChuck Lever );
1222e48f083eSChuck Lever 
1223e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_fixup,
1224e11b7c96SChuck Lever 	TP_PROTO(
1225e11b7c96SChuck Lever 		const struct rpc_rqst *rqst,
1226d4957f01SChuck Lever 		unsigned long fixup
1227e11b7c96SChuck Lever 	),
1228e11b7c96SChuck Lever 
1229d4957f01SChuck Lever 	TP_ARGS(rqst, fixup),
1230e11b7c96SChuck Lever 
1231e11b7c96SChuck Lever 	TP_STRUCT__entry(
1232e11b7c96SChuck Lever 		__field(unsigned int, task_id)
1233e11b7c96SChuck Lever 		__field(unsigned int, client_id)
1234d4957f01SChuck Lever 		__field(unsigned long, fixup)
1235d4957f01SChuck Lever 		__field(size_t, headlen)
1236d4957f01SChuck Lever 		__field(unsigned int, pagelen)
1237d4957f01SChuck Lever 		__field(size_t, taillen)
1238e11b7c96SChuck Lever 	),
1239e11b7c96SChuck Lever 
1240e11b7c96SChuck Lever 	TP_fast_assign(
1241e11b7c96SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
1242e11b7c96SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
1243d4957f01SChuck Lever 		__entry->fixup = fixup;
1244d4957f01SChuck Lever 		__entry->headlen = rqst->rq_rcv_buf.head[0].iov_len;
1245d4957f01SChuck Lever 		__entry->pagelen = rqst->rq_rcv_buf.page_len;
1246d4957f01SChuck Lever 		__entry->taillen = rqst->rq_rcv_buf.tail[0].iov_len;
1247e11b7c96SChuck Lever 	),
1248e11b7c96SChuck Lever 
1249d4957f01SChuck Lever 	TP_printk("task:%u@%u fixup=%lu xdr=%zu/%u/%zu",
1250d4957f01SChuck Lever 		__entry->task_id, __entry->client_id, __entry->fixup,
1251d4957f01SChuck Lever 		__entry->headlen, __entry->pagelen, __entry->taillen
1252e11b7c96SChuck Lever 	)
1253e11b7c96SChuck Lever );
1254e11b7c96SChuck Lever 
1255e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_decode_seg,
1256e11b7c96SChuck Lever 	TP_PROTO(
1257e11b7c96SChuck Lever 		u32 handle,
1258e11b7c96SChuck Lever 		u32 length,
1259e11b7c96SChuck Lever 		u64 offset
1260e11b7c96SChuck Lever 	),
1261e11b7c96SChuck Lever 
1262e11b7c96SChuck Lever 	TP_ARGS(handle, length, offset),
1263e11b7c96SChuck Lever 
1264e11b7c96SChuck Lever 	TP_STRUCT__entry(
1265e11b7c96SChuck Lever 		__field(u32, handle)
1266e11b7c96SChuck Lever 		__field(u32, length)
1267e11b7c96SChuck Lever 		__field(u64, offset)
1268e11b7c96SChuck Lever 	),
1269e11b7c96SChuck Lever 
1270e11b7c96SChuck Lever 	TP_fast_assign(
1271e11b7c96SChuck Lever 		__entry->handle = handle;
1272e11b7c96SChuck Lever 		__entry->length = length;
1273e11b7c96SChuck Lever 		__entry->offset = offset;
1274e11b7c96SChuck Lever 	),
1275e11b7c96SChuck Lever 
1276e11b7c96SChuck Lever 	TP_printk("%u@0x%016llx:0x%08x",
1277e11b7c96SChuck Lever 		__entry->length, (unsigned long long)__entry->offset,
1278e11b7c96SChuck Lever 		__entry->handle
1279e11b7c96SChuck Lever 	)
1280e11b7c96SChuck Lever );
1281e11b7c96SChuck Lever 
12828e24e191SChuck Lever TRACE_EVENT(xprtrdma_mrs_zap,
12838e24e191SChuck Lever 	TP_PROTO(
12848e24e191SChuck Lever 		const struct rpc_task *task
12858e24e191SChuck Lever 	),
12868e24e191SChuck Lever 
12878e24e191SChuck Lever 	TP_ARGS(task),
12888e24e191SChuck Lever 
12898e24e191SChuck Lever 	TP_STRUCT__entry(
12908e24e191SChuck Lever 		__field(unsigned int, task_id)
12918e24e191SChuck Lever 		__field(unsigned int, client_id)
12928e24e191SChuck Lever 	),
12938e24e191SChuck Lever 
12948e24e191SChuck Lever 	TP_fast_assign(
12958e24e191SChuck Lever 		__entry->task_id = task->tk_pid;
12968e24e191SChuck Lever 		__entry->client_id = task->tk_client->cl_clid;
12978e24e191SChuck Lever 	),
12988e24e191SChuck Lever 
12998e24e191SChuck Lever 	TP_printk("task:%u@%u",
13008e24e191SChuck Lever 		__entry->task_id, __entry->client_id
13018e24e191SChuck Lever 	)
13028e24e191SChuck Lever );
13038e24e191SChuck Lever 
1304fc1eb807SChuck Lever /**
1305fc1eb807SChuck Lever  ** Callback events
1306fc1eb807SChuck Lever  **/
1307fc1eb807SChuck Lever 
1308fc1eb807SChuck Lever TRACE_EVENT(xprtrdma_cb_setup,
1309fc1eb807SChuck Lever 	TP_PROTO(
1310fc1eb807SChuck Lever 		const struct rpcrdma_xprt *r_xprt,
1311fc1eb807SChuck Lever 		unsigned int reqs
1312fc1eb807SChuck Lever 	),
1313fc1eb807SChuck Lever 
1314fc1eb807SChuck Lever 	TP_ARGS(r_xprt, reqs),
1315fc1eb807SChuck Lever 
1316fc1eb807SChuck Lever 	TP_STRUCT__entry(
1317fc1eb807SChuck Lever 		__field(unsigned int, reqs)
1318fc1eb807SChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
1319fc1eb807SChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
1320fc1eb807SChuck Lever 	),
1321fc1eb807SChuck Lever 
1322fc1eb807SChuck Lever 	TP_fast_assign(
1323fc1eb807SChuck Lever 		__entry->reqs = reqs;
1324fc1eb807SChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
1325fc1eb807SChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
1326fc1eb807SChuck Lever 	),
1327fc1eb807SChuck Lever 
132883189d15SChuck Lever 	TP_printk("peer=[%s]:%s %u reqs",
132983189d15SChuck Lever 		__get_str(addr), __get_str(port), __entry->reqs
1330fc1eb807SChuck Lever 	)
1331fc1eb807SChuck Lever );
1332fc1eb807SChuck Lever 
1333d11e9346SChuck Lever DEFINE_CALLBACK_EVENT(call);
1334d11e9346SChuck Lever DEFINE_CALLBACK_EVENT(reply);
133507e10308SChuck Lever 
133698895edbSChuck Lever /**
133798895edbSChuck Lever  ** Server-side RPC/RDMA events
133898895edbSChuck Lever  **/
133998895edbSChuck Lever 
1340e979a173SChuck Lever DECLARE_EVENT_CLASS(svcrdma_accept_class,
1341e979a173SChuck Lever 	TP_PROTO(
1342e979a173SChuck Lever 		const struct svcxprt_rdma *rdma,
1343e979a173SChuck Lever 		long status
1344e979a173SChuck Lever 	),
1345e979a173SChuck Lever 
1346e979a173SChuck Lever 	TP_ARGS(rdma, status),
1347e979a173SChuck Lever 
1348e979a173SChuck Lever 	TP_STRUCT__entry(
1349e979a173SChuck Lever 		__field(long, status)
1350e979a173SChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1351e979a173SChuck Lever 	),
1352e979a173SChuck Lever 
1353e979a173SChuck Lever 	TP_fast_assign(
1354e979a173SChuck Lever 		__entry->status = status;
1355e979a173SChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1356e979a173SChuck Lever 	),
1357e979a173SChuck Lever 
1358e979a173SChuck Lever 	TP_printk("addr=%s status=%ld",
1359e979a173SChuck Lever 		__get_str(addr), __entry->status
1360e979a173SChuck Lever 	)
1361e979a173SChuck Lever );
1362e979a173SChuck Lever 
1363e979a173SChuck Lever #define DEFINE_ACCEPT_EVENT(name) \
1364e979a173SChuck Lever 		DEFINE_EVENT(svcrdma_accept_class, svcrdma_##name##_err, \
1365e979a173SChuck Lever 				TP_PROTO( \
1366e979a173SChuck Lever 					const struct svcxprt_rdma *rdma, \
1367e979a173SChuck Lever 					long status \
1368e979a173SChuck Lever 				), \
1369e979a173SChuck Lever 				TP_ARGS(rdma, status))
1370e979a173SChuck Lever 
1371e979a173SChuck Lever DEFINE_ACCEPT_EVENT(pd);
1372e979a173SChuck Lever DEFINE_ACCEPT_EVENT(qp);
1373e979a173SChuck Lever DEFINE_ACCEPT_EVENT(fabric);
1374e979a173SChuck Lever DEFINE_ACCEPT_EVENT(initdepth);
1375e979a173SChuck Lever DEFINE_ACCEPT_EVENT(accept);
1376e979a173SChuck Lever 
137798895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_MSG);
137898895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_NOMSG);
137998895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_MSGP);
138098895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_DONE);
138198895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_ERROR);
138298895edbSChuck Lever 
138398895edbSChuck Lever #define show_rpcrdma_proc(x)						\
138498895edbSChuck Lever 		__print_symbolic(x,					\
138598895edbSChuck Lever 				{ RDMA_MSG, "RDMA_MSG" },		\
138698895edbSChuck Lever 				{ RDMA_NOMSG, "RDMA_NOMSG" },		\
138798895edbSChuck Lever 				{ RDMA_MSGP, "RDMA_MSGP" },		\
138898895edbSChuck Lever 				{ RDMA_DONE, "RDMA_DONE" },		\
138998895edbSChuck Lever 				{ RDMA_ERROR, "RDMA_ERROR" })
139098895edbSChuck Lever 
139198895edbSChuck Lever TRACE_EVENT(svcrdma_decode_rqst,
139298895edbSChuck Lever 	TP_PROTO(
1393007140eeSChuck Lever 		const struct svc_rdma_recv_ctxt *ctxt,
139498895edbSChuck Lever 		__be32 *p,
139598895edbSChuck Lever 		unsigned int hdrlen
139698895edbSChuck Lever 	),
139798895edbSChuck Lever 
1398007140eeSChuck Lever 	TP_ARGS(ctxt, p, hdrlen),
139998895edbSChuck Lever 
140098895edbSChuck Lever 	TP_STRUCT__entry(
1401007140eeSChuck Lever 		__field(u32, cq_id)
1402007140eeSChuck Lever 		__field(int, completion_id)
140398895edbSChuck Lever 		__field(u32, xid)
140498895edbSChuck Lever 		__field(u32, vers)
140598895edbSChuck Lever 		__field(u32, proc)
140698895edbSChuck Lever 		__field(u32, credits)
140798895edbSChuck Lever 		__field(unsigned int, hdrlen)
140898895edbSChuck Lever 	),
140998895edbSChuck Lever 
141098895edbSChuck Lever 	TP_fast_assign(
1411007140eeSChuck Lever 		__entry->cq_id = ctxt->rc_cid.ci_queue_id;
1412007140eeSChuck Lever 		__entry->completion_id = ctxt->rc_cid.ci_completion_id;
141398895edbSChuck Lever 		__entry->xid = be32_to_cpup(p++);
141498895edbSChuck Lever 		__entry->vers = be32_to_cpup(p++);
141598895edbSChuck Lever 		__entry->credits = be32_to_cpup(p++);
141698895edbSChuck Lever 		__entry->proc = be32_to_cpup(p);
141798895edbSChuck Lever 		__entry->hdrlen = hdrlen;
141898895edbSChuck Lever 	),
141998895edbSChuck Lever 
1420007140eeSChuck Lever 	TP_printk("cq.id=%u cid=%d xid=0x%08x vers=%u credits=%u proc=%s hdrlen=%u",
1421007140eeSChuck Lever 		__entry->cq_id, __entry->completion_id,
142298895edbSChuck Lever 		__entry->xid, __entry->vers, __entry->credits,
142398895edbSChuck Lever 		show_rpcrdma_proc(__entry->proc), __entry->hdrlen)
142498895edbSChuck Lever );
142598895edbSChuck Lever 
142627ce6294SChuck Lever TRACE_EVENT(svcrdma_decode_short_err,
142798895edbSChuck Lever 	TP_PROTO(
1428007140eeSChuck Lever 		const struct svc_rdma_recv_ctxt *ctxt,
142998895edbSChuck Lever 		unsigned int hdrlen
143098895edbSChuck Lever 	),
143198895edbSChuck Lever 
1432007140eeSChuck Lever 	TP_ARGS(ctxt, hdrlen),
143398895edbSChuck Lever 
143498895edbSChuck Lever 	TP_STRUCT__entry(
1435007140eeSChuck Lever 		__field(u32, cq_id)
1436007140eeSChuck Lever 		__field(int, completion_id)
143798895edbSChuck Lever 		__field(unsigned int, hdrlen)
143898895edbSChuck Lever 	),
143998895edbSChuck Lever 
144098895edbSChuck Lever 	TP_fast_assign(
1441007140eeSChuck Lever 		__entry->cq_id = ctxt->rc_cid.ci_queue_id;
1442007140eeSChuck Lever 		__entry->completion_id = ctxt->rc_cid.ci_completion_id;
144398895edbSChuck Lever 		__entry->hdrlen = hdrlen;
144498895edbSChuck Lever 	),
144598895edbSChuck Lever 
1446007140eeSChuck Lever 	TP_printk("cq.id=%u cid=%d hdrlen=%u",
1447007140eeSChuck Lever 		__entry->cq_id, __entry->completion_id,
1448007140eeSChuck Lever 		__entry->hdrlen)
144998895edbSChuck Lever );
145098895edbSChuck Lever 
145198895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_badreq_event,
145298895edbSChuck Lever 	TP_PROTO(
1453007140eeSChuck Lever 		const struct svc_rdma_recv_ctxt *ctxt,
145498895edbSChuck Lever 		__be32 *p
145598895edbSChuck Lever 	),
145698895edbSChuck Lever 
1457007140eeSChuck Lever 	TP_ARGS(ctxt, p),
145898895edbSChuck Lever 
145998895edbSChuck Lever 	TP_STRUCT__entry(
1460007140eeSChuck Lever 		__field(u32, cq_id)
1461007140eeSChuck Lever 		__field(int, completion_id)
146298895edbSChuck Lever 		__field(u32, xid)
146398895edbSChuck Lever 		__field(u32, vers)
146498895edbSChuck Lever 		__field(u32, proc)
146598895edbSChuck Lever 		__field(u32, credits)
146698895edbSChuck Lever 	),
146798895edbSChuck Lever 
146898895edbSChuck Lever 	TP_fast_assign(
1469007140eeSChuck Lever 		__entry->cq_id = ctxt->rc_cid.ci_queue_id;
1470007140eeSChuck Lever 		__entry->completion_id = ctxt->rc_cid.ci_completion_id;
147198895edbSChuck Lever 		__entry->xid = be32_to_cpup(p++);
147298895edbSChuck Lever 		__entry->vers = be32_to_cpup(p++);
147398895edbSChuck Lever 		__entry->credits = be32_to_cpup(p++);
147498895edbSChuck Lever 		__entry->proc = be32_to_cpup(p);
147598895edbSChuck Lever 	),
147698895edbSChuck Lever 
1477007140eeSChuck Lever 	TP_printk("cq.id=%u cid=%d xid=0x%08x vers=%u credits=%u proc=%u",
1478007140eeSChuck Lever 		__entry->cq_id, __entry->completion_id,
147998895edbSChuck Lever 		__entry->xid, __entry->vers, __entry->credits, __entry->proc)
148098895edbSChuck Lever );
148198895edbSChuck Lever 
148298895edbSChuck Lever #define DEFINE_BADREQ_EVENT(name)					\
148327ce6294SChuck Lever 		DEFINE_EVENT(svcrdma_badreq_event,			\
148427ce6294SChuck Lever 			     svcrdma_decode_##name##_err,		\
148598895edbSChuck Lever 				TP_PROTO(				\
1486007140eeSChuck Lever 					const struct svc_rdma_recv_ctxt *ctxt,	\
148798895edbSChuck Lever 					__be32 *p			\
148898895edbSChuck Lever 				),					\
1489007140eeSChuck Lever 				TP_ARGS(ctxt, p))
149098895edbSChuck Lever 
149198895edbSChuck Lever DEFINE_BADREQ_EVENT(badvers);
149298895edbSChuck Lever DEFINE_BADREQ_EVENT(drop);
149398895edbSChuck Lever DEFINE_BADREQ_EVENT(badproc);
149498895edbSChuck Lever DEFINE_BADREQ_EVENT(parse);
149598895edbSChuck Lever 
14966911f3e1SChuck Lever TRACE_EVENT(svcrdma_encode_wseg,
14976911f3e1SChuck Lever 	TP_PROTO(
14986911f3e1SChuck Lever 		const struct svc_rdma_send_ctxt *ctxt,
14996911f3e1SChuck Lever 		u32 segno,
15006911f3e1SChuck Lever 		u32 handle,
15016911f3e1SChuck Lever 		u32 length,
15026911f3e1SChuck Lever 		u64 offset
15036911f3e1SChuck Lever 	),
15046911f3e1SChuck Lever 
15056911f3e1SChuck Lever 	TP_ARGS(ctxt, segno, handle, length, offset),
15066911f3e1SChuck Lever 
15076911f3e1SChuck Lever 	TP_STRUCT__entry(
15086911f3e1SChuck Lever 		__field(u32, cq_id)
15096911f3e1SChuck Lever 		__field(int, completion_id)
15106911f3e1SChuck Lever 		__field(u32, segno)
15116911f3e1SChuck Lever 		__field(u32, handle)
15126911f3e1SChuck Lever 		__field(u32, length)
15136911f3e1SChuck Lever 		__field(u64, offset)
15146911f3e1SChuck Lever 	),
15156911f3e1SChuck Lever 
15166911f3e1SChuck Lever 	TP_fast_assign(
15176911f3e1SChuck Lever 		__entry->cq_id = ctxt->sc_cid.ci_queue_id;
15186911f3e1SChuck Lever 		__entry->completion_id = ctxt->sc_cid.ci_completion_id;
15196911f3e1SChuck Lever 		__entry->segno = segno;
15206911f3e1SChuck Lever 		__entry->handle = handle;
15216911f3e1SChuck Lever 		__entry->length = length;
15226911f3e1SChuck Lever 		__entry->offset = offset;
15236911f3e1SChuck Lever 	),
15246911f3e1SChuck Lever 
15256911f3e1SChuck Lever 	TP_printk("cq_id=%u cid=%d segno=%u %u@0x%016llx:0x%08x",
15266911f3e1SChuck Lever 		__entry->cq_id, __entry->completion_id,
15276911f3e1SChuck Lever 		__entry->segno, __entry->length,
15286911f3e1SChuck Lever 		(unsigned long long)__entry->offset, __entry->handle
15296911f3e1SChuck Lever 	)
15306911f3e1SChuck Lever );
15316911f3e1SChuck Lever 
153278147ca8SChuck Lever TRACE_EVENT(svcrdma_decode_rseg,
153378147ca8SChuck Lever 	TP_PROTO(
153478147ca8SChuck Lever 		const struct rpc_rdma_cid *cid,
153578147ca8SChuck Lever 		const struct svc_rdma_chunk *chunk,
153678147ca8SChuck Lever 		const struct svc_rdma_segment *segment
153778147ca8SChuck Lever 	),
153878147ca8SChuck Lever 
153978147ca8SChuck Lever 	TP_ARGS(cid, chunk, segment),
154078147ca8SChuck Lever 
154178147ca8SChuck Lever 	TP_STRUCT__entry(
154278147ca8SChuck Lever 		__field(u32, cq_id)
154378147ca8SChuck Lever 		__field(int, completion_id)
154478147ca8SChuck Lever 		__field(u32, segno)
154578147ca8SChuck Lever 		__field(u32, position)
154678147ca8SChuck Lever 		__field(u32, handle)
154778147ca8SChuck Lever 		__field(u32, length)
154878147ca8SChuck Lever 		__field(u64, offset)
154978147ca8SChuck Lever 	),
155078147ca8SChuck Lever 
155178147ca8SChuck Lever 	TP_fast_assign(
155278147ca8SChuck Lever 		__entry->cq_id = cid->ci_queue_id;
155378147ca8SChuck Lever 		__entry->completion_id = cid->ci_completion_id;
155478147ca8SChuck Lever 		__entry->segno = chunk->ch_segcount;
155578147ca8SChuck Lever 		__entry->position = chunk->ch_position;
155678147ca8SChuck Lever 		__entry->handle = segment->rs_handle;
155778147ca8SChuck Lever 		__entry->length = segment->rs_length;
155878147ca8SChuck Lever 		__entry->offset = segment->rs_offset;
155978147ca8SChuck Lever 	),
156078147ca8SChuck Lever 
156178147ca8SChuck Lever 	TP_printk("cq_id=%u cid=%d segno=%u position=%u %u@0x%016llx:0x%08x",
156278147ca8SChuck Lever 		__entry->cq_id, __entry->completion_id,
156378147ca8SChuck Lever 		__entry->segno, __entry->position, __entry->length,
156478147ca8SChuck Lever 		(unsigned long long)__entry->offset, __entry->handle
156578147ca8SChuck Lever 	)
156678147ca8SChuck Lever );
156778147ca8SChuck Lever 
156878147ca8SChuck Lever TRACE_EVENT(svcrdma_decode_wseg,
156978147ca8SChuck Lever 	TP_PROTO(
157078147ca8SChuck Lever 		const struct rpc_rdma_cid *cid,
157178147ca8SChuck Lever 		const struct svc_rdma_chunk *chunk,
157278147ca8SChuck Lever 		u32 segno
157378147ca8SChuck Lever 	),
157478147ca8SChuck Lever 
157578147ca8SChuck Lever 	TP_ARGS(cid, chunk, segno),
157678147ca8SChuck Lever 
157778147ca8SChuck Lever 	TP_STRUCT__entry(
157878147ca8SChuck Lever 		__field(u32, cq_id)
157978147ca8SChuck Lever 		__field(int, completion_id)
158078147ca8SChuck Lever 		__field(u32, segno)
158178147ca8SChuck Lever 		__field(u32, handle)
158278147ca8SChuck Lever 		__field(u32, length)
158378147ca8SChuck Lever 		__field(u64, offset)
158478147ca8SChuck Lever 	),
158578147ca8SChuck Lever 
158678147ca8SChuck Lever 	TP_fast_assign(
158778147ca8SChuck Lever 		const struct svc_rdma_segment *segment =
158878147ca8SChuck Lever 			&chunk->ch_segments[segno];
158978147ca8SChuck Lever 
159078147ca8SChuck Lever 		__entry->cq_id = cid->ci_queue_id;
159178147ca8SChuck Lever 		__entry->completion_id = cid->ci_completion_id;
159278147ca8SChuck Lever 		__entry->segno = segno;
159378147ca8SChuck Lever 		__entry->handle = segment->rs_handle;
159478147ca8SChuck Lever 		__entry->length = segment->rs_length;
159578147ca8SChuck Lever 		__entry->offset = segment->rs_offset;
159678147ca8SChuck Lever 	),
159778147ca8SChuck Lever 
159878147ca8SChuck Lever 	TP_printk("cq_id=%u cid=%d segno=%u %u@0x%016llx:0x%08x",
159978147ca8SChuck Lever 		__entry->cq_id, __entry->completion_id,
160078147ca8SChuck Lever 		__entry->segno, __entry->length,
160178147ca8SChuck Lever 		(unsigned long long)__entry->offset, __entry->handle
160278147ca8SChuck Lever 	)
160378147ca8SChuck Lever );
160478147ca8SChuck Lever 
160598895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_error_event,
160698895edbSChuck Lever 	TP_PROTO(
160798895edbSChuck Lever 		__be32 xid
160898895edbSChuck Lever 	),
160998895edbSChuck Lever 
161098895edbSChuck Lever 	TP_ARGS(xid),
161198895edbSChuck Lever 
161298895edbSChuck Lever 	TP_STRUCT__entry(
161398895edbSChuck Lever 		__field(u32, xid)
161498895edbSChuck Lever 	),
161598895edbSChuck Lever 
161698895edbSChuck Lever 	TP_fast_assign(
161798895edbSChuck Lever 		__entry->xid = be32_to_cpu(xid);
161898895edbSChuck Lever 	),
161998895edbSChuck Lever 
162098895edbSChuck Lever 	TP_printk("xid=0x%08x",
162198895edbSChuck Lever 		__entry->xid
162298895edbSChuck Lever 	)
162398895edbSChuck Lever );
162498895edbSChuck Lever 
162598895edbSChuck Lever #define DEFINE_ERROR_EVENT(name)					\
162698895edbSChuck Lever 		DEFINE_EVENT(svcrdma_error_event, svcrdma_err_##name,	\
162798895edbSChuck Lever 				TP_PROTO(				\
162898895edbSChuck Lever 					__be32 xid			\
162998895edbSChuck Lever 				),					\
163098895edbSChuck Lever 				TP_ARGS(xid))
163198895edbSChuck Lever 
163298895edbSChuck Lever DEFINE_ERROR_EVENT(vers);
163398895edbSChuck Lever DEFINE_ERROR_EVENT(chunk);
163498895edbSChuck Lever 
1635bd2abef3SChuck Lever /**
1636bd2abef3SChuck Lever  ** Server-side RDMA API events
1637bd2abef3SChuck Lever  **/
1638bd2abef3SChuck Lever 
1639832b2cb9SChuck Lever DECLARE_EVENT_CLASS(svcrdma_dma_map_class,
1640bd2abef3SChuck Lever 	TP_PROTO(
1641bd2abef3SChuck Lever 		const struct svcxprt_rdma *rdma,
1642832b2cb9SChuck Lever 		u64 dma_addr,
1643832b2cb9SChuck Lever 		u32 length
1644bd2abef3SChuck Lever 	),
1645bd2abef3SChuck Lever 
1646832b2cb9SChuck Lever 	TP_ARGS(rdma, dma_addr, length),
1647bd2abef3SChuck Lever 
1648bd2abef3SChuck Lever 	TP_STRUCT__entry(
1649832b2cb9SChuck Lever 		__field(u64, dma_addr)
1650832b2cb9SChuck Lever 		__field(u32, length)
1651bd2abef3SChuck Lever 		__string(device, rdma->sc_cm_id->device->name)
1652bd2abef3SChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1653bd2abef3SChuck Lever 	),
1654bd2abef3SChuck Lever 
1655bd2abef3SChuck Lever 	TP_fast_assign(
1656832b2cb9SChuck Lever 		__entry->dma_addr = dma_addr;
1657832b2cb9SChuck Lever 		__entry->length = length;
1658bd2abef3SChuck Lever 		__assign_str(device, rdma->sc_cm_id->device->name);
1659bd2abef3SChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1660bd2abef3SChuck Lever 	),
1661bd2abef3SChuck Lever 
1662832b2cb9SChuck Lever 	TP_printk("addr=%s device=%s dma_addr=%llu length=%u",
1663832b2cb9SChuck Lever 		__get_str(addr), __get_str(device),
1664832b2cb9SChuck Lever 		__entry->dma_addr, __entry->length
1665bd2abef3SChuck Lever 	)
1666bd2abef3SChuck Lever );
1667bd2abef3SChuck Lever 
1668832b2cb9SChuck Lever #define DEFINE_SVC_DMA_EVENT(name)					\
1669832b2cb9SChuck Lever 		DEFINE_EVENT(svcrdma_dma_map_class, svcrdma_##name,	\
1670832b2cb9SChuck Lever 				TP_PROTO(				\
1671832b2cb9SChuck Lever 					const struct svcxprt_rdma *rdma,\
1672832b2cb9SChuck Lever 					u64 dma_addr,			\
1673832b2cb9SChuck Lever 					u32 length			\
1674832b2cb9SChuck Lever 				),					\
1675832b2cb9SChuck Lever 				TP_ARGS(rdma, dma_addr, length))
1676832b2cb9SChuck Lever 
1677832b2cb9SChuck Lever DEFINE_SVC_DMA_EVENT(dma_map_page);
16782371bcc0SChuck Lever DEFINE_SVC_DMA_EVENT(dma_map_err);
1679832b2cb9SChuck Lever DEFINE_SVC_DMA_EVENT(dma_unmap_page);
1680832b2cb9SChuck Lever 
16812abfbe7eSChuck Lever TRACE_EVENT(svcrdma_dma_map_rw_err,
1682bd2abef3SChuck Lever 	TP_PROTO(
1683bd2abef3SChuck Lever 		const struct svcxprt_rdma *rdma,
16842abfbe7eSChuck Lever 		unsigned int nents,
1685bd2abef3SChuck Lever 		int status
1686bd2abef3SChuck Lever 	),
1687bd2abef3SChuck Lever 
16882abfbe7eSChuck Lever 	TP_ARGS(rdma, nents, status),
1689bd2abef3SChuck Lever 
1690bd2abef3SChuck Lever 	TP_STRUCT__entry(
1691bd2abef3SChuck Lever 		__field(int, status)
16922abfbe7eSChuck Lever 		__field(unsigned int, nents)
1693bd2abef3SChuck Lever 		__string(device, rdma->sc_cm_id->device->name)
1694bd2abef3SChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1695bd2abef3SChuck Lever 	),
1696bd2abef3SChuck Lever 
1697bd2abef3SChuck Lever 	TP_fast_assign(
1698bd2abef3SChuck Lever 		__entry->status = status;
16992abfbe7eSChuck Lever 		__entry->nents = nents;
1700bd2abef3SChuck Lever 		__assign_str(device, rdma->sc_cm_id->device->name);
1701bd2abef3SChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1702bd2abef3SChuck Lever 	),
1703bd2abef3SChuck Lever 
17042abfbe7eSChuck Lever 	TP_printk("addr=%s device=%s nents=%u status=%d",
17052abfbe7eSChuck Lever 		__get_str(addr), __get_str(device), __entry->nents,
17062abfbe7eSChuck Lever 		__entry->status
1707bd2abef3SChuck Lever 	)
1708bd2abef3SChuck Lever );
1709bd2abef3SChuck Lever 
1710f4e53e1cSChuck Lever TRACE_EVENT(svcrdma_no_rwctx_err,
1711f4e53e1cSChuck Lever 	TP_PROTO(
1712f4e53e1cSChuck Lever 		const struct svcxprt_rdma *rdma,
1713f4e53e1cSChuck Lever 		unsigned int num_sges
1714f4e53e1cSChuck Lever 	),
1715f4e53e1cSChuck Lever 
1716f4e53e1cSChuck Lever 	TP_ARGS(rdma, num_sges),
1717f4e53e1cSChuck Lever 
1718f4e53e1cSChuck Lever 	TP_STRUCT__entry(
1719f4e53e1cSChuck Lever 		__field(unsigned int, num_sges)
1720f4e53e1cSChuck Lever 		__string(device, rdma->sc_cm_id->device->name)
1721f4e53e1cSChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1722f4e53e1cSChuck Lever 	),
1723f4e53e1cSChuck Lever 
1724f4e53e1cSChuck Lever 	TP_fast_assign(
1725f4e53e1cSChuck Lever 		__entry->num_sges = num_sges;
1726f4e53e1cSChuck Lever 		__assign_str(device, rdma->sc_cm_id->device->name);
1727f4e53e1cSChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1728f4e53e1cSChuck Lever 	),
1729f4e53e1cSChuck Lever 
1730f4e53e1cSChuck Lever 	TP_printk("addr=%s device=%s num_sges=%d",
1731f4e53e1cSChuck Lever 		__get_str(addr), __get_str(device), __entry->num_sges
1732f4e53e1cSChuck Lever 	)
1733f4e53e1cSChuck Lever );
1734f4e53e1cSChuck Lever 
17359d200638SChuck Lever TRACE_EVENT(svcrdma_page_overrun_err,
17369d200638SChuck Lever 	TP_PROTO(
17379d200638SChuck Lever 		const struct svcxprt_rdma *rdma,
17389d200638SChuck Lever 		const struct svc_rqst *rqst,
17399d200638SChuck Lever 		unsigned int pageno
17409d200638SChuck Lever 	),
17419d200638SChuck Lever 
17429d200638SChuck Lever 	TP_ARGS(rdma, rqst, pageno),
17439d200638SChuck Lever 
17449d200638SChuck Lever 	TP_STRUCT__entry(
17459d200638SChuck Lever 		__field(unsigned int, pageno)
17469d200638SChuck Lever 		__field(u32, xid)
17479d200638SChuck Lever 		__string(device, rdma->sc_cm_id->device->name)
17489d200638SChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
17499d200638SChuck Lever 	),
17509d200638SChuck Lever 
17519d200638SChuck Lever 	TP_fast_assign(
17529d200638SChuck Lever 		__entry->pageno = pageno;
17539d200638SChuck Lever 		__entry->xid = __be32_to_cpu(rqst->rq_xid);
17549d200638SChuck Lever 		__assign_str(device, rdma->sc_cm_id->device->name);
17559d200638SChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
17569d200638SChuck Lever 	),
17579d200638SChuck Lever 
17589d200638SChuck Lever 	TP_printk("addr=%s device=%s xid=0x%08x pageno=%u", __get_str(addr),
17599d200638SChuck Lever 		__get_str(device), __entry->xid, __entry->pageno
17609d200638SChuck Lever 	)
17619d200638SChuck Lever );
17629d200638SChuck Lever 
1763dbc17acdSChuck Lever TRACE_EVENT(svcrdma_small_wrch_err,
1764dbc17acdSChuck Lever 	TP_PROTO(
1765dbc17acdSChuck Lever 		const struct svcxprt_rdma *rdma,
1766dbc17acdSChuck Lever 		unsigned int remaining,
1767dbc17acdSChuck Lever 		unsigned int seg_no,
1768dbc17acdSChuck Lever 		unsigned int num_segs
1769dbc17acdSChuck Lever 	),
1770dbc17acdSChuck Lever 
1771dbc17acdSChuck Lever 	TP_ARGS(rdma, remaining, seg_no, num_segs),
1772dbc17acdSChuck Lever 
1773dbc17acdSChuck Lever 	TP_STRUCT__entry(
1774dbc17acdSChuck Lever 		__field(unsigned int, remaining)
1775dbc17acdSChuck Lever 		__field(unsigned int, seg_no)
1776dbc17acdSChuck Lever 		__field(unsigned int, num_segs)
1777dbc17acdSChuck Lever 		__string(device, rdma->sc_cm_id->device->name)
1778dbc17acdSChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1779dbc17acdSChuck Lever 	),
1780dbc17acdSChuck Lever 
1781dbc17acdSChuck Lever 	TP_fast_assign(
1782dbc17acdSChuck Lever 		__entry->remaining = remaining;
1783dbc17acdSChuck Lever 		__entry->seg_no = seg_no;
1784dbc17acdSChuck Lever 		__entry->num_segs = num_segs;
1785dbc17acdSChuck Lever 		__assign_str(device, rdma->sc_cm_id->device->name);
1786dbc17acdSChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1787dbc17acdSChuck Lever 	),
1788dbc17acdSChuck Lever 
1789dbc17acdSChuck Lever 	TP_printk("addr=%s device=%s remaining=%u seg_no=%u num_segs=%u",
1790dbc17acdSChuck Lever 		__get_str(addr), __get_str(device), __entry->remaining,
1791dbc17acdSChuck Lever 		__entry->seg_no, __entry->num_segs
1792dbc17acdSChuck Lever 	)
1793dbc17acdSChuck Lever );
1794dbc17acdSChuck Lever 
17950dabe948SChuck Lever TRACE_EVENT(svcrdma_send_pullup,
17960dabe948SChuck Lever 	TP_PROTO(
17979d0b09d5SChuck Lever 		const struct svc_rdma_send_ctxt *ctxt,
17989d0b09d5SChuck Lever 		unsigned int msglen
17990dabe948SChuck Lever 	),
18000dabe948SChuck Lever 
18019d0b09d5SChuck Lever 	TP_ARGS(ctxt, msglen),
18020dabe948SChuck Lever 
18030dabe948SChuck Lever 	TP_STRUCT__entry(
18049d0b09d5SChuck Lever 		__field(u32, cq_id)
18059d0b09d5SChuck Lever 		__field(int, completion_id)
18069d0b09d5SChuck Lever 		__field(unsigned int, hdrlen)
18079d0b09d5SChuck Lever 		__field(unsigned int, msglen)
18080dabe948SChuck Lever 	),
18090dabe948SChuck Lever 
18100dabe948SChuck Lever 	TP_fast_assign(
18119d0b09d5SChuck Lever 		__entry->cq_id = ctxt->sc_cid.ci_queue_id;
18129d0b09d5SChuck Lever 		__entry->completion_id = ctxt->sc_cid.ci_completion_id;
18139d0b09d5SChuck Lever 		__entry->hdrlen = ctxt->sc_hdrbuf.len,
18149d0b09d5SChuck Lever 		__entry->msglen = msglen;
18150dabe948SChuck Lever 	),
18160dabe948SChuck Lever 
18179d0b09d5SChuck Lever 	TP_printk("cq_id=%u cid=%d hdr=%u msg=%u (total %u)",
18189d0b09d5SChuck Lever 		__entry->cq_id, __entry->completion_id,
18199d0b09d5SChuck Lever 		__entry->hdrlen, __entry->msglen,
18209d0b09d5SChuck Lever 		__entry->hdrlen + __entry->msglen)
18210dabe948SChuck Lever );
18220dabe948SChuck Lever 
18233f8f25c6SChuck Lever TRACE_EVENT(svcrdma_send_err,
1824bd2abef3SChuck Lever 	TP_PROTO(
1825bd2abef3SChuck Lever 		const struct svc_rqst *rqst,
1826bd2abef3SChuck Lever 		int status
1827bd2abef3SChuck Lever 	),
1828bd2abef3SChuck Lever 
1829bd2abef3SChuck Lever 	TP_ARGS(rqst, status),
1830bd2abef3SChuck Lever 
1831bd2abef3SChuck Lever 	TP_STRUCT__entry(
1832bd2abef3SChuck Lever 		__field(int, status)
1833bd2abef3SChuck Lever 		__field(u32, xid)
1834bd2abef3SChuck Lever 		__string(addr, rqst->rq_xprt->xpt_remotebuf)
1835bd2abef3SChuck Lever 	),
1836bd2abef3SChuck Lever 
1837bd2abef3SChuck Lever 	TP_fast_assign(
1838bd2abef3SChuck Lever 		__entry->status = status;
1839bd2abef3SChuck Lever 		__entry->xid = __be32_to_cpu(rqst->rq_xid);
1840bd2abef3SChuck Lever 		__assign_str(addr, rqst->rq_xprt->xpt_remotebuf);
1841bd2abef3SChuck Lever 	),
1842bd2abef3SChuck Lever 
18433f8f25c6SChuck Lever 	TP_printk("addr=%s xid=0x%08x status=%d", __get_str(addr),
1844bd2abef3SChuck Lever 		__entry->xid, __entry->status
1845bd2abef3SChuck Lever 	)
1846bd2abef3SChuck Lever );
1847bd2abef3SChuck Lever 
1848bd2abef3SChuck Lever TRACE_EVENT(svcrdma_post_send,
1849bd2abef3SChuck Lever 	TP_PROTO(
185017f70f8dSChuck Lever 		const struct svc_rdma_send_ctxt *ctxt
1851bd2abef3SChuck Lever 	),
1852bd2abef3SChuck Lever 
185317f70f8dSChuck Lever 	TP_ARGS(ctxt),
1854bd2abef3SChuck Lever 
1855bd2abef3SChuck Lever 	TP_STRUCT__entry(
185617f70f8dSChuck Lever 		__field(u32, cq_id)
185717f70f8dSChuck Lever 		__field(int, completion_id)
1858bd2abef3SChuck Lever 		__field(unsigned int, num_sge)
1859bd2abef3SChuck Lever 		__field(u32, inv_rkey)
1860bd2abef3SChuck Lever 	),
1861bd2abef3SChuck Lever 
1862bd2abef3SChuck Lever 	TP_fast_assign(
186317f70f8dSChuck Lever 		const struct ib_send_wr *wr = &ctxt->sc_send_wr;
186417f70f8dSChuck Lever 
186517f70f8dSChuck Lever 		__entry->cq_id = ctxt->sc_cid.ci_queue_id;
186617f70f8dSChuck Lever 		__entry->completion_id = ctxt->sc_cid.ci_completion_id;
1867bd2abef3SChuck Lever 		__entry->num_sge = wr->num_sge;
1868bd2abef3SChuck Lever 		__entry->inv_rkey = (wr->opcode == IB_WR_SEND_WITH_INV) ?
1869bd2abef3SChuck Lever 					wr->ex.invalidate_rkey : 0;
1870bd2abef3SChuck Lever 	),
1871bd2abef3SChuck Lever 
187217f70f8dSChuck Lever 	TP_printk("cq_id=%u cid=%d num_sge=%u inv_rkey=0x%08x",
187317f70f8dSChuck Lever 		__entry->cq_id, __entry->completion_id,
187417f70f8dSChuck Lever 		__entry->num_sge, __entry->inv_rkey
1875bd2abef3SChuck Lever 	)
1876bd2abef3SChuck Lever );
1877bd2abef3SChuck Lever 
18783ac56c2fSChuck Lever DEFINE_COMPLETION_EVENT(svcrdma_wc_send);
1879bd2abef3SChuck Lever 
1880bd2abef3SChuck Lever TRACE_EVENT(svcrdma_post_recv,
1881bd2abef3SChuck Lever 	TP_PROTO(
18829b3bcf8cSChuck Lever 		const struct svc_rdma_recv_ctxt *ctxt
1883bd2abef3SChuck Lever 	),
1884bd2abef3SChuck Lever 
18859b3bcf8cSChuck Lever 	TP_ARGS(ctxt),
1886bd2abef3SChuck Lever 
1887bd2abef3SChuck Lever 	TP_STRUCT__entry(
18889b3bcf8cSChuck Lever 		__field(u32, cq_id)
18899b3bcf8cSChuck Lever 		__field(int, completion_id)
1890bd2abef3SChuck Lever 	),
1891bd2abef3SChuck Lever 
1892bd2abef3SChuck Lever 	TP_fast_assign(
18939b3bcf8cSChuck Lever 		__entry->cq_id = ctxt->rc_cid.ci_queue_id;
18949b3bcf8cSChuck Lever 		__entry->completion_id = ctxt->rc_cid.ci_completion_id;
1895bd2abef3SChuck Lever 	),
1896bd2abef3SChuck Lever 
18979b3bcf8cSChuck Lever 	TP_printk("cq.id=%d cid=%d",
18989b3bcf8cSChuck Lever 		__entry->cq_id, __entry->completion_id
1899bd2abef3SChuck Lever 	)
1900bd2abef3SChuck Lever );
1901bd2abef3SChuck Lever 
1902c30f259aSChuck Lever DEFINE_RECEIVE_COMPLETION_EVENT(svcrdma_wc_receive);
19039b3bcf8cSChuck Lever 
19049b3bcf8cSChuck Lever TRACE_EVENT(svcrdma_rq_post_err,
1905bd2abef3SChuck Lever 	TP_PROTO(
19069b3bcf8cSChuck Lever 		const struct svcxprt_rdma *rdma,
19079b3bcf8cSChuck Lever 		int status
1908bd2abef3SChuck Lever 	),
1909bd2abef3SChuck Lever 
19109b3bcf8cSChuck Lever 	TP_ARGS(rdma, status),
1911bd2abef3SChuck Lever 
1912bd2abef3SChuck Lever 	TP_STRUCT__entry(
19139b3bcf8cSChuck Lever 		__field(int, status)
19149b3bcf8cSChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1915bd2abef3SChuck Lever 	),
1916bd2abef3SChuck Lever 
1917bd2abef3SChuck Lever 	TP_fast_assign(
19189b3bcf8cSChuck Lever 		__entry->status = status;
19199b3bcf8cSChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1920bd2abef3SChuck Lever 	),
1921bd2abef3SChuck Lever 
19229b3bcf8cSChuck Lever 	TP_printk("addr=%s status=%d",
19239b3bcf8cSChuck Lever 		__get_str(addr), __entry->status
1924bd2abef3SChuck Lever 	)
1925bd2abef3SChuck Lever );
1926bd2abef3SChuck Lever 
1927b704be09SChuck Lever DECLARE_EVENT_CLASS(svcrdma_post_chunk_class,
1928bd2abef3SChuck Lever 	TP_PROTO(
19296787f0beSChuck Lever 		const struct rpc_rdma_cid *cid,
1930e28b4fc6SChuck Lever 		int sqecount
1931bd2abef3SChuck Lever 	),
1932bd2abef3SChuck Lever 
19336787f0beSChuck Lever 	TP_ARGS(cid, sqecount),
1934bd2abef3SChuck Lever 
1935bd2abef3SChuck Lever 	TP_STRUCT__entry(
19366787f0beSChuck Lever 		__field(u32, cq_id)
19376787f0beSChuck Lever 		__field(int, completion_id)
1938bd2abef3SChuck Lever 		__field(int, sqecount)
1939bd2abef3SChuck Lever 	),
1940bd2abef3SChuck Lever 
1941bd2abef3SChuck Lever 	TP_fast_assign(
19426787f0beSChuck Lever 		__entry->cq_id = cid->ci_queue_id;
19436787f0beSChuck Lever 		__entry->completion_id = cid->ci_completion_id;
1944bd2abef3SChuck Lever 		__entry->sqecount = sqecount;
1945bd2abef3SChuck Lever 	),
1946bd2abef3SChuck Lever 
19476787f0beSChuck Lever 	TP_printk("cq.id=%u cid=%d sqecount=%d",
19486787f0beSChuck Lever 		__entry->cq_id, __entry->completion_id,
19496787f0beSChuck Lever 		__entry->sqecount
1950bd2abef3SChuck Lever 	)
1951bd2abef3SChuck Lever );
1952bd2abef3SChuck Lever 
1953b704be09SChuck Lever #define DEFINE_POST_CHUNK_EVENT(name)					\
1954b704be09SChuck Lever 		DEFINE_EVENT(svcrdma_post_chunk_class,			\
1955b704be09SChuck Lever 				svcrdma_post_##name##_chunk,		\
1956b704be09SChuck Lever 				TP_PROTO(				\
1957b704be09SChuck Lever 					const struct rpc_rdma_cid *cid,	\
1958b704be09SChuck Lever 					int sqecount			\
1959b704be09SChuck Lever 				),					\
1960b704be09SChuck Lever 				TP_ARGS(cid, sqecount))
1961b704be09SChuck Lever 
1962b704be09SChuck Lever DEFINE_POST_CHUNK_EVENT(read);
1963b704be09SChuck Lever DEFINE_POST_CHUNK_EVENT(write);
1964b704be09SChuck Lever DEFINE_POST_CHUNK_EVENT(reply);
1965b704be09SChuck Lever 
19666787f0beSChuck Lever DEFINE_COMPLETION_EVENT(svcrdma_wc_read);
19676787f0beSChuck Lever DEFINE_COMPLETION_EVENT(svcrdma_wc_write);
1968bd2abef3SChuck Lever 
1969bd2abef3SChuck Lever TRACE_EVENT(svcrdma_qp_error,
1970bd2abef3SChuck Lever 	TP_PROTO(
1971bd2abef3SChuck Lever 		const struct ib_event *event,
1972bd2abef3SChuck Lever 		const struct sockaddr *sap
1973bd2abef3SChuck Lever 	),
1974bd2abef3SChuck Lever 
1975bd2abef3SChuck Lever 	TP_ARGS(event, sap),
1976bd2abef3SChuck Lever 
1977bd2abef3SChuck Lever 	TP_STRUCT__entry(
1978bd2abef3SChuck Lever 		__field(unsigned int, event)
1979bd2abef3SChuck Lever 		__string(device, event->device->name)
1980bd2abef3SChuck Lever 		__array(__u8, addr, INET6_ADDRSTRLEN + 10)
1981bd2abef3SChuck Lever 	),
1982bd2abef3SChuck Lever 
1983bd2abef3SChuck Lever 	TP_fast_assign(
1984bd2abef3SChuck Lever 		__entry->event = event->event;
1985bd2abef3SChuck Lever 		__assign_str(device, event->device->name);
1986bd2abef3SChuck Lever 		snprintf(__entry->addr, sizeof(__entry->addr) - 1,
1987bd2abef3SChuck Lever 			 "%pISpc", sap);
1988bd2abef3SChuck Lever 	),
1989bd2abef3SChuck Lever 
1990bd2abef3SChuck Lever 	TP_printk("addr=%s dev=%s event=%s (%u)",
1991bd2abef3SChuck Lever 		__entry->addr, __get_str(device),
1992bd2abef3SChuck Lever 		rdma_show_ib_event(__entry->event), __entry->event
1993bd2abef3SChuck Lever 	)
1994bd2abef3SChuck Lever );
1995bd2abef3SChuck Lever 
1996bd2abef3SChuck Lever DECLARE_EVENT_CLASS(svcrdma_sendqueue_event,
1997bd2abef3SChuck Lever 	TP_PROTO(
1998bd2abef3SChuck Lever 		const struct svcxprt_rdma *rdma
1999bd2abef3SChuck Lever 	),
2000bd2abef3SChuck Lever 
2001bd2abef3SChuck Lever 	TP_ARGS(rdma),
2002bd2abef3SChuck Lever 
2003bd2abef3SChuck Lever 	TP_STRUCT__entry(
2004bd2abef3SChuck Lever 		__field(int, avail)
2005bd2abef3SChuck Lever 		__field(int, depth)
2006bd2abef3SChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
2007bd2abef3SChuck Lever 	),
2008bd2abef3SChuck Lever 
2009bd2abef3SChuck Lever 	TP_fast_assign(
2010bd2abef3SChuck Lever 		__entry->avail = atomic_read(&rdma->sc_sq_avail);
2011bd2abef3SChuck Lever 		__entry->depth = rdma->sc_sq_depth;
2012bd2abef3SChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
2013bd2abef3SChuck Lever 	),
2014bd2abef3SChuck Lever 
2015bd2abef3SChuck Lever 	TP_printk("addr=%s sc_sq_avail=%d/%d",
2016bd2abef3SChuck Lever 		__get_str(addr), __entry->avail, __entry->depth
2017bd2abef3SChuck Lever 	)
2018bd2abef3SChuck Lever );
2019bd2abef3SChuck Lever 
2020bd2abef3SChuck Lever #define DEFINE_SQ_EVENT(name)						\
2021bd2abef3SChuck Lever 		DEFINE_EVENT(svcrdma_sendqueue_event, svcrdma_sq_##name,\
2022bd2abef3SChuck Lever 				TP_PROTO(				\
2023bd2abef3SChuck Lever 					const struct svcxprt_rdma *rdma \
2024bd2abef3SChuck Lever 				),					\
2025bd2abef3SChuck Lever 				TP_ARGS(rdma))
2026bd2abef3SChuck Lever 
2027bd2abef3SChuck Lever DEFINE_SQ_EVENT(full);
2028bd2abef3SChuck Lever DEFINE_SQ_EVENT(retry);
2029bd2abef3SChuck Lever 
2030e28b4fc6SChuck Lever TRACE_EVENT(svcrdma_sq_post_err,
2031e28b4fc6SChuck Lever 	TP_PROTO(
2032e28b4fc6SChuck Lever 		const struct svcxprt_rdma *rdma,
2033e28b4fc6SChuck Lever 		int status
2034e28b4fc6SChuck Lever 	),
2035e28b4fc6SChuck Lever 
2036e28b4fc6SChuck Lever 	TP_ARGS(rdma, status),
2037e28b4fc6SChuck Lever 
2038e28b4fc6SChuck Lever 	TP_STRUCT__entry(
2039e28b4fc6SChuck Lever 		__field(int, avail)
2040e28b4fc6SChuck Lever 		__field(int, depth)
2041e28b4fc6SChuck Lever 		__field(int, status)
2042e28b4fc6SChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
2043e28b4fc6SChuck Lever 	),
2044e28b4fc6SChuck Lever 
2045e28b4fc6SChuck Lever 	TP_fast_assign(
2046e28b4fc6SChuck Lever 		__entry->avail = atomic_read(&rdma->sc_sq_avail);
2047e28b4fc6SChuck Lever 		__entry->depth = rdma->sc_sq_depth;
2048e28b4fc6SChuck Lever 		__entry->status = status;
2049e28b4fc6SChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
2050e28b4fc6SChuck Lever 	),
2051e28b4fc6SChuck Lever 
2052e28b4fc6SChuck Lever 	TP_printk("addr=%s sc_sq_avail=%d/%d status=%d",
2053e28b4fc6SChuck Lever 		__get_str(addr), __entry->avail, __entry->depth,
2054e28b4fc6SChuck Lever 		__entry->status
2055e28b4fc6SChuck Lever 	)
2056e28b4fc6SChuck Lever );
2057e28b4fc6SChuck Lever 
2058e48f083eSChuck Lever #endif /* _TRACE_RPCRDMA_H */
2059e48f083eSChuck Lever 
2060e48f083eSChuck Lever #include <trace/define_trace.h>
2061