xref: /openbmc/linux/include/trace/events/rpcrdma.h (revision eef2d8d4)
1e48f083eSChuck Lever /* SPDX-License-Identifier: GPL-2.0 */
2e48f083eSChuck Lever /*
398895edbSChuck Lever  * Copyright (c) 2017, 2018 Oracle.  All rights reserved.
498895edbSChuck Lever  *
598895edbSChuck Lever  * Trace point definitions for the "rpcrdma" subsystem.
6e48f083eSChuck Lever  */
7e48f083eSChuck Lever #undef TRACE_SYSTEM
8e48f083eSChuck Lever #define TRACE_SYSTEM rpcrdma
9e48f083eSChuck Lever 
10e48f083eSChuck Lever #if !defined(_TRACE_RPCRDMA_H) || defined(TRACE_HEADER_MULTI_READ)
11e48f083eSChuck Lever #define _TRACE_RPCRDMA_H
12e48f083eSChuck Lever 
1353b2c1cbSChuck Lever #include <linux/scatterlist.h>
14f7bd657bSChuck Lever #include <linux/sunrpc/rpc_rdma_cid.h>
15e48f083eSChuck Lever #include <linux/tracepoint.h>
16b3d03daaSChuck Lever #include <rdma/ib_cm.h>
17e48f083eSChuck Lever #include <trace/events/rdma.h>
18e48f083eSChuck Lever 
19ab03eff5SChuck Lever /**
20b4a7f91cSChuck Lever  ** Event classes
21b4a7f91cSChuck Lever  **/
22b4a7f91cSChuck Lever 
23f7bd657bSChuck Lever DECLARE_EVENT_CLASS(rpcrdma_completion_class,
24f7bd657bSChuck Lever 	TP_PROTO(
25f7bd657bSChuck Lever 		const struct ib_wc *wc,
26f7bd657bSChuck Lever 		const struct rpc_rdma_cid *cid
27f7bd657bSChuck Lever 	),
28f7bd657bSChuck Lever 
29f7bd657bSChuck Lever 	TP_ARGS(wc, cid),
30f7bd657bSChuck Lever 
31f7bd657bSChuck Lever 	TP_STRUCT__entry(
32f7bd657bSChuck Lever 		__field(u32, cq_id)
33f7bd657bSChuck Lever 		__field(int, completion_id)
34f7bd657bSChuck Lever 		__field(unsigned long, status)
35f7bd657bSChuck Lever 		__field(unsigned int, vendor_err)
36f7bd657bSChuck Lever 	),
37f7bd657bSChuck Lever 
38f7bd657bSChuck Lever 	TP_fast_assign(
39f7bd657bSChuck Lever 		__entry->cq_id = cid->ci_queue_id;
40f7bd657bSChuck Lever 		__entry->completion_id = cid->ci_completion_id;
41f7bd657bSChuck Lever 		__entry->status = wc->status;
42f7bd657bSChuck Lever 		if (wc->status)
43f7bd657bSChuck Lever 			__entry->vendor_err = wc->vendor_err;
44f7bd657bSChuck Lever 		else
45f7bd657bSChuck Lever 			__entry->vendor_err = 0;
46f7bd657bSChuck Lever 	),
47f7bd657bSChuck Lever 
48f7bd657bSChuck Lever 	TP_printk("cq.id=%u cid=%d status=%s (%lu/0x%x)",
49f7bd657bSChuck Lever 		__entry->cq_id, __entry->completion_id,
50f7bd657bSChuck Lever 		rdma_show_wc_status(__entry->status),
51f7bd657bSChuck Lever 		__entry->status, __entry->vendor_err
52f7bd657bSChuck Lever 	)
53f7bd657bSChuck Lever );
54f7bd657bSChuck Lever 
55f7bd657bSChuck Lever #define DEFINE_COMPLETION_EVENT(name)					\
56f7bd657bSChuck Lever 		DEFINE_EVENT(rpcrdma_completion_class, name,		\
57f7bd657bSChuck Lever 				TP_PROTO(				\
58f7bd657bSChuck Lever 					const struct ib_wc *wc,		\
59f7bd657bSChuck Lever 					const struct rpc_rdma_cid *cid	\
60f7bd657bSChuck Lever 				),					\
61f7bd657bSChuck Lever 				TP_ARGS(wc, cid))
62f7bd657bSChuck Lever 
63*eef2d8d4SChuck Lever DECLARE_EVENT_CLASS(rpcrdma_send_completion_class,
64*eef2d8d4SChuck Lever 	TP_PROTO(
65*eef2d8d4SChuck Lever 		const struct ib_wc *wc,
66*eef2d8d4SChuck Lever 		const struct rpc_rdma_cid *cid
67*eef2d8d4SChuck Lever 	),
68*eef2d8d4SChuck Lever 
69*eef2d8d4SChuck Lever 	TP_ARGS(wc, cid),
70*eef2d8d4SChuck Lever 
71*eef2d8d4SChuck Lever 	TP_STRUCT__entry(
72*eef2d8d4SChuck Lever 		__field(u32, cq_id)
73*eef2d8d4SChuck Lever 		__field(int, completion_id)
74*eef2d8d4SChuck Lever 	),
75*eef2d8d4SChuck Lever 
76*eef2d8d4SChuck Lever 	TP_fast_assign(
77*eef2d8d4SChuck Lever 		__entry->cq_id = cid->ci_queue_id;
78*eef2d8d4SChuck Lever 		__entry->completion_id = cid->ci_completion_id;
79*eef2d8d4SChuck Lever 	),
80*eef2d8d4SChuck Lever 
81*eef2d8d4SChuck Lever 	TP_printk("cq.id=%u cid=%d",
82*eef2d8d4SChuck Lever 		__entry->cq_id, __entry->completion_id
83*eef2d8d4SChuck Lever 	)
84*eef2d8d4SChuck Lever );
85*eef2d8d4SChuck Lever 
86*eef2d8d4SChuck Lever #define DEFINE_SEND_COMPLETION_EVENT(name)				\
87*eef2d8d4SChuck Lever 		DEFINE_EVENT(rpcrdma_send_completion_class, name,	\
88*eef2d8d4SChuck Lever 				TP_PROTO(				\
89*eef2d8d4SChuck Lever 					const struct ib_wc *wc,		\
90*eef2d8d4SChuck Lever 					const struct rpc_rdma_cid *cid	\
91*eef2d8d4SChuck Lever 				),					\
92*eef2d8d4SChuck Lever 				TP_ARGS(wc, cid))
93*eef2d8d4SChuck Lever 
94*eef2d8d4SChuck Lever DECLARE_EVENT_CLASS(rpcrdma_send_flush_class,
95*eef2d8d4SChuck Lever 	TP_PROTO(
96*eef2d8d4SChuck Lever 		const struct ib_wc *wc,
97*eef2d8d4SChuck Lever 		const struct rpc_rdma_cid *cid
98*eef2d8d4SChuck Lever 	),
99*eef2d8d4SChuck Lever 
100*eef2d8d4SChuck Lever 	TP_ARGS(wc, cid),
101*eef2d8d4SChuck Lever 
102*eef2d8d4SChuck Lever 	TP_STRUCT__entry(
103*eef2d8d4SChuck Lever 		__field(u32, cq_id)
104*eef2d8d4SChuck Lever 		__field(int, completion_id)
105*eef2d8d4SChuck Lever 		__field(unsigned long, status)
106*eef2d8d4SChuck Lever 		__field(unsigned int, vendor_err)
107*eef2d8d4SChuck Lever 	),
108*eef2d8d4SChuck Lever 
109*eef2d8d4SChuck Lever 	TP_fast_assign(
110*eef2d8d4SChuck Lever 		__entry->cq_id = cid->ci_queue_id;
111*eef2d8d4SChuck Lever 		__entry->completion_id = cid->ci_completion_id;
112*eef2d8d4SChuck Lever 		__entry->status = wc->status;
113*eef2d8d4SChuck Lever 		__entry->vendor_err = wc->vendor_err;
114*eef2d8d4SChuck Lever 	),
115*eef2d8d4SChuck Lever 
116*eef2d8d4SChuck Lever 	TP_printk("cq.id=%u cid=%d status=%s (%lu/0x%x)",
117*eef2d8d4SChuck Lever 		__entry->cq_id, __entry->completion_id,
118*eef2d8d4SChuck Lever 		rdma_show_wc_status(__entry->status),
119*eef2d8d4SChuck Lever 		__entry->status, __entry->vendor_err
120*eef2d8d4SChuck Lever 	)
121*eef2d8d4SChuck Lever );
122*eef2d8d4SChuck Lever 
123*eef2d8d4SChuck Lever #define DEFINE_SEND_FLUSH_EVENT(name)					\
124*eef2d8d4SChuck Lever 		DEFINE_EVENT(rpcrdma_send_flush_class, name,		\
125*eef2d8d4SChuck Lever 				TP_PROTO(				\
126*eef2d8d4SChuck Lever 					const struct ib_wc *wc,		\
127*eef2d8d4SChuck Lever 					const struct rpc_rdma_cid *cid	\
128*eef2d8d4SChuck Lever 				),					\
129*eef2d8d4SChuck Lever 				TP_ARGS(wc, cid))
130*eef2d8d4SChuck Lever 
1316b147ea7SChuck Lever DECLARE_EVENT_CLASS(rpcrdma_mr_completion_class,
1326b147ea7SChuck Lever 	TP_PROTO(
1336b147ea7SChuck Lever 		const struct ib_wc *wc,
1346b147ea7SChuck Lever 		const struct rpc_rdma_cid *cid
1356b147ea7SChuck Lever 	),
1366b147ea7SChuck Lever 
1376b147ea7SChuck Lever 	TP_ARGS(wc, cid),
1386b147ea7SChuck Lever 
1396b147ea7SChuck Lever 	TP_STRUCT__entry(
1406b147ea7SChuck Lever 		__field(u32, cq_id)
1416b147ea7SChuck Lever 		__field(int, completion_id)
1426b147ea7SChuck Lever 		__field(unsigned long, status)
1436b147ea7SChuck Lever 		__field(unsigned int, vendor_err)
1446b147ea7SChuck Lever 	),
1456b147ea7SChuck Lever 
1466b147ea7SChuck Lever 	TP_fast_assign(
1476b147ea7SChuck Lever 		__entry->cq_id = cid->ci_queue_id;
1486b147ea7SChuck Lever 		__entry->completion_id = cid->ci_completion_id;
1496b147ea7SChuck Lever 		__entry->status = wc->status;
1506b147ea7SChuck Lever 		if (wc->status)
1516b147ea7SChuck Lever 			__entry->vendor_err = wc->vendor_err;
1526b147ea7SChuck Lever 		else
1536b147ea7SChuck Lever 			__entry->vendor_err = 0;
1546b147ea7SChuck Lever 	),
1556b147ea7SChuck Lever 
1566b147ea7SChuck Lever 	TP_printk("cq.id=%u mr.id=%d status=%s (%lu/0x%x)",
1576b147ea7SChuck Lever 		__entry->cq_id, __entry->completion_id,
1586b147ea7SChuck Lever 		rdma_show_wc_status(__entry->status),
1596b147ea7SChuck Lever 		__entry->status, __entry->vendor_err
1606b147ea7SChuck Lever 	)
1616b147ea7SChuck Lever );
1626b147ea7SChuck Lever 
1636b147ea7SChuck Lever #define DEFINE_MR_COMPLETION_EVENT(name)				\
1646b147ea7SChuck Lever 		DEFINE_EVENT(rpcrdma_mr_completion_class, name,		\
1656b147ea7SChuck Lever 				TP_PROTO(				\
1666b147ea7SChuck Lever 					const struct ib_wc *wc,		\
1676b147ea7SChuck Lever 					const struct rpc_rdma_cid *cid	\
1686b147ea7SChuck Lever 				),					\
1696b147ea7SChuck Lever 				TP_ARGS(wc, cid))
1706b147ea7SChuck Lever 
171c30f259aSChuck Lever DECLARE_EVENT_CLASS(rpcrdma_receive_completion_class,
172c30f259aSChuck Lever 	TP_PROTO(
173c30f259aSChuck Lever 		const struct ib_wc *wc,
174c30f259aSChuck Lever 		const struct rpc_rdma_cid *cid
175c30f259aSChuck Lever 	),
176c30f259aSChuck Lever 
177c30f259aSChuck Lever 	TP_ARGS(wc, cid),
178c30f259aSChuck Lever 
179c30f259aSChuck Lever 	TP_STRUCT__entry(
180c30f259aSChuck Lever 		__field(u32, cq_id)
181c30f259aSChuck Lever 		__field(int, completion_id)
182c30f259aSChuck Lever 		__field(u32, received)
183c30f259aSChuck Lever 		__field(unsigned long, status)
184c30f259aSChuck Lever 		__field(unsigned int, vendor_err)
185c30f259aSChuck Lever 	),
186c30f259aSChuck Lever 
187c30f259aSChuck Lever 	TP_fast_assign(
188c30f259aSChuck Lever 		__entry->cq_id = cid->ci_queue_id;
189c30f259aSChuck Lever 		__entry->completion_id = cid->ci_completion_id;
190c30f259aSChuck Lever 		__entry->status = wc->status;
191c30f259aSChuck Lever 		if (wc->status) {
192c30f259aSChuck Lever 			__entry->received = 0;
193c30f259aSChuck Lever 			__entry->vendor_err = wc->vendor_err;
194c30f259aSChuck Lever 		} else {
195c30f259aSChuck Lever 			__entry->received = wc->byte_len;
196c30f259aSChuck Lever 			__entry->vendor_err = 0;
197c30f259aSChuck Lever 		}
198c30f259aSChuck Lever 	),
199c30f259aSChuck Lever 
200c30f259aSChuck Lever 	TP_printk("cq.id=%u cid=%d status=%s (%lu/0x%x) received=%u",
201c30f259aSChuck Lever 		__entry->cq_id, __entry->completion_id,
202c30f259aSChuck Lever 		rdma_show_wc_status(__entry->status),
203c30f259aSChuck Lever 		__entry->status, __entry->vendor_err,
204c30f259aSChuck Lever 		__entry->received
205c30f259aSChuck Lever 	)
206c30f259aSChuck Lever );
207c30f259aSChuck Lever 
208c30f259aSChuck Lever #define DEFINE_RECEIVE_COMPLETION_EVENT(name)				\
209c30f259aSChuck Lever 		DEFINE_EVENT(rpcrdma_receive_completion_class, name,	\
210c30f259aSChuck Lever 				TP_PROTO(				\
211c30f259aSChuck Lever 					const struct ib_wc *wc,		\
212c30f259aSChuck Lever 					const struct rpc_rdma_cid *cid	\
213c30f259aSChuck Lever 				),					\
214c30f259aSChuck Lever 				TP_ARGS(wc, cid))
215c30f259aSChuck Lever 
2168dcc5721SChuck Lever DECLARE_EVENT_CLASS(rpcrdma_receive_success_class,
2178dcc5721SChuck Lever 	TP_PROTO(
2188dcc5721SChuck Lever 		const struct ib_wc *wc,
2198dcc5721SChuck Lever 		const struct rpc_rdma_cid *cid
2208dcc5721SChuck Lever 	),
2218dcc5721SChuck Lever 
2228dcc5721SChuck Lever 	TP_ARGS(wc, cid),
2238dcc5721SChuck Lever 
2248dcc5721SChuck Lever 	TP_STRUCT__entry(
2258dcc5721SChuck Lever 		__field(u32, cq_id)
2268dcc5721SChuck Lever 		__field(int, completion_id)
2278dcc5721SChuck Lever 		__field(u32, received)
2288dcc5721SChuck Lever 	),
2298dcc5721SChuck Lever 
2308dcc5721SChuck Lever 	TP_fast_assign(
2318dcc5721SChuck Lever 		__entry->cq_id = cid->ci_queue_id;
2328dcc5721SChuck Lever 		__entry->completion_id = cid->ci_completion_id;
2338dcc5721SChuck Lever 		__entry->received = wc->byte_len;
2348dcc5721SChuck Lever 	),
2358dcc5721SChuck Lever 
2368dcc5721SChuck Lever 	TP_printk("cq.id=%u cid=%d received=%u",
2378dcc5721SChuck Lever 		__entry->cq_id, __entry->completion_id,
2388dcc5721SChuck Lever 		__entry->received
2398dcc5721SChuck Lever 	)
2408dcc5721SChuck Lever );
2418dcc5721SChuck Lever 
2428dcc5721SChuck Lever #define DEFINE_RECEIVE_SUCCESS_EVENT(name)				\
2438dcc5721SChuck Lever 		DEFINE_EVENT(rpcrdma_receive_success_class, name,	\
2448dcc5721SChuck Lever 				TP_PROTO(				\
2458dcc5721SChuck Lever 					const struct ib_wc *wc,		\
2468dcc5721SChuck Lever 					const struct rpc_rdma_cid *cid	\
2478dcc5721SChuck Lever 				),					\
2488dcc5721SChuck Lever 				TP_ARGS(wc, cid))
2498dcc5721SChuck Lever 
2508dcc5721SChuck Lever DECLARE_EVENT_CLASS(rpcrdma_receive_flush_class,
2518dcc5721SChuck Lever 	TP_PROTO(
2528dcc5721SChuck Lever 		const struct ib_wc *wc,
2538dcc5721SChuck Lever 		const struct rpc_rdma_cid *cid
2548dcc5721SChuck Lever 	),
2558dcc5721SChuck Lever 
2568dcc5721SChuck Lever 	TP_ARGS(wc, cid),
2578dcc5721SChuck Lever 
2588dcc5721SChuck Lever 	TP_STRUCT__entry(
2598dcc5721SChuck Lever 		__field(u32, cq_id)
2608dcc5721SChuck Lever 		__field(int, completion_id)
2618dcc5721SChuck Lever 		__field(unsigned long, status)
2628dcc5721SChuck Lever 		__field(unsigned int, vendor_err)
2638dcc5721SChuck Lever 	),
2648dcc5721SChuck Lever 
2658dcc5721SChuck Lever 	TP_fast_assign(
2668dcc5721SChuck Lever 		__entry->cq_id = cid->ci_queue_id;
2678dcc5721SChuck Lever 		__entry->completion_id = cid->ci_completion_id;
2688dcc5721SChuck Lever 		__entry->status = wc->status;
2698dcc5721SChuck Lever 		__entry->vendor_err = wc->vendor_err;
2708dcc5721SChuck Lever 	),
2718dcc5721SChuck Lever 
2728dcc5721SChuck Lever 	TP_printk("cq.id=%u cid=%d status=%s (%lu/0x%x)",
2738dcc5721SChuck Lever 		__entry->cq_id, __entry->completion_id,
2748dcc5721SChuck Lever 		rdma_show_wc_status(__entry->status),
2758dcc5721SChuck Lever 		__entry->status, __entry->vendor_err
2768dcc5721SChuck Lever 	)
2778dcc5721SChuck Lever );
2788dcc5721SChuck Lever 
2798dcc5721SChuck Lever #define DEFINE_RECEIVE_FLUSH_EVENT(name)				\
2808dcc5721SChuck Lever 		DEFINE_EVENT(rpcrdma_receive_flush_class, name,		\
2818dcc5721SChuck Lever 				TP_PROTO(				\
2828dcc5721SChuck Lever 					const struct ib_wc *wc,		\
2838dcc5721SChuck Lever 					const struct rpc_rdma_cid *cid	\
2848dcc5721SChuck Lever 				),					\
2858dcc5721SChuck Lever 				TP_ARGS(wc, cid))
2868dcc5721SChuck Lever 
2873a9568feSChuck Lever DECLARE_EVENT_CLASS(xprtrdma_reply_class,
288b4a7f91cSChuck Lever 	TP_PROTO(
289b4a7f91cSChuck Lever 		const struct rpcrdma_rep *rep
290b4a7f91cSChuck Lever 	),
291b4a7f91cSChuck Lever 
292b4a7f91cSChuck Lever 	TP_ARGS(rep),
293b4a7f91cSChuck Lever 
294b4a7f91cSChuck Lever 	TP_STRUCT__entry(
295b4a7f91cSChuck Lever 		__field(u32, xid)
296b4a7f91cSChuck Lever 		__field(u32, version)
297b4a7f91cSChuck Lever 		__field(u32, proc)
2983a9568feSChuck Lever 		__string(addr, rpcrdma_addrstr(rep->rr_rxprt))
2993a9568feSChuck Lever 		__string(port, rpcrdma_portstr(rep->rr_rxprt))
300b4a7f91cSChuck Lever 	),
301b4a7f91cSChuck Lever 
302b4a7f91cSChuck Lever 	TP_fast_assign(
303b4a7f91cSChuck Lever 		__entry->xid = be32_to_cpu(rep->rr_xid);
304b4a7f91cSChuck Lever 		__entry->version = be32_to_cpu(rep->rr_vers);
305b4a7f91cSChuck Lever 		__entry->proc = be32_to_cpu(rep->rr_proc);
3063a9568feSChuck Lever 		__assign_str(addr, rpcrdma_addrstr(rep->rr_rxprt));
3073a9568feSChuck Lever 		__assign_str(port, rpcrdma_portstr(rep->rr_rxprt));
308b4a7f91cSChuck Lever 	),
309b4a7f91cSChuck Lever 
3103a9568feSChuck Lever 	TP_printk("peer=[%s]:%s xid=0x%08x version=%u proc=%u",
3113a9568feSChuck Lever 		__get_str(addr), __get_str(port),
3123a9568feSChuck Lever 		__entry->xid, __entry->version, __entry->proc
313b4a7f91cSChuck Lever 	)
314b4a7f91cSChuck Lever );
315b4a7f91cSChuck Lever 
316b4a7f91cSChuck Lever #define DEFINE_REPLY_EVENT(name)					\
3173a9568feSChuck Lever 		DEFINE_EVENT(xprtrdma_reply_class,			\
3183a9568feSChuck Lever 				xprtrdma_reply_##name##_err,		\
319b4a7f91cSChuck Lever 				TP_PROTO(				\
320b4a7f91cSChuck Lever 					const struct rpcrdma_rep *rep	\
321b4a7f91cSChuck Lever 				),					\
322b4a7f91cSChuck Lever 				TP_ARGS(rep))
323b4a7f91cSChuck Lever 
3241c443effSChuck Lever DECLARE_EVENT_CLASS(xprtrdma_rxprt,
3251c443effSChuck Lever 	TP_PROTO(
3261c443effSChuck Lever 		const struct rpcrdma_xprt *r_xprt
3271c443effSChuck Lever 	),
3281c443effSChuck Lever 
3291c443effSChuck Lever 	TP_ARGS(r_xprt),
3301c443effSChuck Lever 
3311c443effSChuck Lever 	TP_STRUCT__entry(
3321c443effSChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
3331c443effSChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
3341c443effSChuck Lever 	),
3351c443effSChuck Lever 
3361c443effSChuck Lever 	TP_fast_assign(
3371c443effSChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
3381c443effSChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
3391c443effSChuck Lever 	),
3401c443effSChuck Lever 
34183189d15SChuck Lever 	TP_printk("peer=[%s]:%s",
34283189d15SChuck Lever 		__get_str(addr), __get_str(port)
3431c443effSChuck Lever 	)
3441c443effSChuck Lever );
3451c443effSChuck Lever 
3461c443effSChuck Lever #define DEFINE_RXPRT_EVENT(name)					\
3471c443effSChuck Lever 		DEFINE_EVENT(xprtrdma_rxprt, name,			\
3481c443effSChuck Lever 				TP_PROTO(				\
3491c443effSChuck Lever 					const struct rpcrdma_xprt *r_xprt \
3501c443effSChuck Lever 				),					\
3511c443effSChuck Lever 				TP_ARGS(r_xprt))
3521c443effSChuck Lever 
3537b020f17SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_connect_class,
3547b020f17SChuck Lever 	TP_PROTO(
3557b020f17SChuck Lever 		const struct rpcrdma_xprt *r_xprt,
3567b020f17SChuck Lever 		int rc
3577b020f17SChuck Lever 	),
3587b020f17SChuck Lever 
3597b020f17SChuck Lever 	TP_ARGS(r_xprt, rc),
3607b020f17SChuck Lever 
3617b020f17SChuck Lever 	TP_STRUCT__entry(
3627b020f17SChuck Lever 		__field(int, rc)
3637b020f17SChuck Lever 		__field(int, connect_status)
3647b020f17SChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
3657b020f17SChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
3667b020f17SChuck Lever 	),
3677b020f17SChuck Lever 
3687b020f17SChuck Lever 	TP_fast_assign(
3697b020f17SChuck Lever 		__entry->rc = rc;
370e28ce900SChuck Lever 		__entry->connect_status = r_xprt->rx_ep->re_connect_status;
3717b020f17SChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
3727b020f17SChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
3737b020f17SChuck Lever 	),
3747b020f17SChuck Lever 
37583189d15SChuck Lever 	TP_printk("peer=[%s]:%s rc=%d connection status=%d",
37683189d15SChuck Lever 		__get_str(addr), __get_str(port),
3777b020f17SChuck Lever 		__entry->rc, __entry->connect_status
3787b020f17SChuck Lever 	)
3797b020f17SChuck Lever );
3807b020f17SChuck Lever 
3817b020f17SChuck Lever #define DEFINE_CONN_EVENT(name)						\
3827b020f17SChuck Lever 		DEFINE_EVENT(xprtrdma_connect_class, xprtrdma_##name,	\
3837b020f17SChuck Lever 				TP_PROTO(				\
3847b020f17SChuck Lever 					const struct rpcrdma_xprt *r_xprt, \
3857b020f17SChuck Lever 					int rc				\
3867b020f17SChuck Lever 				),					\
3877b020f17SChuck Lever 				TP_ARGS(r_xprt, rc))
3887b020f17SChuck Lever 
38958f10ad4SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_rdch_event,
39058f10ad4SChuck Lever 	TP_PROTO(
39158f10ad4SChuck Lever 		const struct rpc_task *task,
39258f10ad4SChuck Lever 		unsigned int pos,
39358f10ad4SChuck Lever 		struct rpcrdma_mr *mr,
39458f10ad4SChuck Lever 		int nsegs
39558f10ad4SChuck Lever 	),
39658f10ad4SChuck Lever 
39758f10ad4SChuck Lever 	TP_ARGS(task, pos, mr, nsegs),
39858f10ad4SChuck Lever 
39958f10ad4SChuck Lever 	TP_STRUCT__entry(
40058f10ad4SChuck Lever 		__field(unsigned int, task_id)
40158f10ad4SChuck Lever 		__field(unsigned int, client_id)
40258f10ad4SChuck Lever 		__field(unsigned int, pos)
40358f10ad4SChuck Lever 		__field(int, nents)
40458f10ad4SChuck Lever 		__field(u32, handle)
40558f10ad4SChuck Lever 		__field(u32, length)
40658f10ad4SChuck Lever 		__field(u64, offset)
40758f10ad4SChuck Lever 		__field(int, nsegs)
40858f10ad4SChuck Lever 	),
40958f10ad4SChuck Lever 
41058f10ad4SChuck Lever 	TP_fast_assign(
41158f10ad4SChuck Lever 		__entry->task_id = task->tk_pid;
41258f10ad4SChuck Lever 		__entry->client_id = task->tk_client->cl_clid;
41358f10ad4SChuck Lever 		__entry->pos = pos;
41458f10ad4SChuck Lever 		__entry->nents = mr->mr_nents;
41558f10ad4SChuck Lever 		__entry->handle = mr->mr_handle;
41658f10ad4SChuck Lever 		__entry->length = mr->mr_length;
41758f10ad4SChuck Lever 		__entry->offset = mr->mr_offset;
41858f10ad4SChuck Lever 		__entry->nsegs = nsegs;
41958f10ad4SChuck Lever 	),
42058f10ad4SChuck Lever 
421aba11831SChuck Lever 	TP_printk("task:%u@%u pos=%u %u@0x%016llx:0x%08x (%s)",
422aba11831SChuck Lever 		__entry->task_id, __entry->client_id,
42358f10ad4SChuck Lever 		__entry->pos, __entry->length,
42458f10ad4SChuck Lever 		(unsigned long long)__entry->offset, __entry->handle,
42558f10ad4SChuck Lever 		__entry->nents < __entry->nsegs ? "more" : "last"
42658f10ad4SChuck Lever 	)
42758f10ad4SChuck Lever );
42858f10ad4SChuck Lever 
42958f10ad4SChuck Lever #define DEFINE_RDCH_EVENT(name)						\
430aba11831SChuck Lever 		DEFINE_EVENT(xprtrdma_rdch_event, xprtrdma_chunk_##name,\
43158f10ad4SChuck Lever 				TP_PROTO(				\
43258f10ad4SChuck Lever 					const struct rpc_task *task,	\
43358f10ad4SChuck Lever 					unsigned int pos,		\
43458f10ad4SChuck Lever 					struct rpcrdma_mr *mr,		\
43558f10ad4SChuck Lever 					int nsegs			\
43658f10ad4SChuck Lever 				),					\
43758f10ad4SChuck Lever 				TP_ARGS(task, pos, mr, nsegs))
43858f10ad4SChuck Lever 
43958f10ad4SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_wrch_event,
44058f10ad4SChuck Lever 	TP_PROTO(
44158f10ad4SChuck Lever 		const struct rpc_task *task,
44258f10ad4SChuck Lever 		struct rpcrdma_mr *mr,
44358f10ad4SChuck Lever 		int nsegs
44458f10ad4SChuck Lever 	),
44558f10ad4SChuck Lever 
44658f10ad4SChuck Lever 	TP_ARGS(task, mr, nsegs),
44758f10ad4SChuck Lever 
44858f10ad4SChuck Lever 	TP_STRUCT__entry(
44958f10ad4SChuck Lever 		__field(unsigned int, task_id)
45058f10ad4SChuck Lever 		__field(unsigned int, client_id)
45158f10ad4SChuck Lever 		__field(int, nents)
45258f10ad4SChuck Lever 		__field(u32, handle)
45358f10ad4SChuck Lever 		__field(u32, length)
45458f10ad4SChuck Lever 		__field(u64, offset)
45558f10ad4SChuck Lever 		__field(int, nsegs)
45658f10ad4SChuck Lever 	),
45758f10ad4SChuck Lever 
45858f10ad4SChuck Lever 	TP_fast_assign(
45958f10ad4SChuck Lever 		__entry->task_id = task->tk_pid;
46058f10ad4SChuck Lever 		__entry->client_id = task->tk_client->cl_clid;
46158f10ad4SChuck Lever 		__entry->nents = mr->mr_nents;
46258f10ad4SChuck Lever 		__entry->handle = mr->mr_handle;
46358f10ad4SChuck Lever 		__entry->length = mr->mr_length;
46458f10ad4SChuck Lever 		__entry->offset = mr->mr_offset;
46558f10ad4SChuck Lever 		__entry->nsegs = nsegs;
46658f10ad4SChuck Lever 	),
46758f10ad4SChuck Lever 
468aba11831SChuck Lever 	TP_printk("task:%u@%u %u@0x%016llx:0x%08x (%s)",
469aba11831SChuck Lever 		__entry->task_id, __entry->client_id,
47058f10ad4SChuck Lever 		__entry->length, (unsigned long long)__entry->offset,
47158f10ad4SChuck Lever 		__entry->handle,
47258f10ad4SChuck Lever 		__entry->nents < __entry->nsegs ? "more" : "last"
47358f10ad4SChuck Lever 	)
47458f10ad4SChuck Lever );
47558f10ad4SChuck Lever 
47658f10ad4SChuck Lever #define DEFINE_WRCH_EVENT(name)						\
477aba11831SChuck Lever 		DEFINE_EVENT(xprtrdma_wrch_event, xprtrdma_chunk_##name,\
47858f10ad4SChuck Lever 				TP_PROTO(				\
47958f10ad4SChuck Lever 					const struct rpc_task *task,	\
48058f10ad4SChuck Lever 					struct rpcrdma_mr *mr,		\
48158f10ad4SChuck Lever 					int nsegs			\
48258f10ad4SChuck Lever 				),					\
48358f10ad4SChuck Lever 				TP_ARGS(task, mr, nsegs))
48458f10ad4SChuck Lever 
485aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_BIDIRECTIONAL);
486aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_TO_DEVICE);
487aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_FROM_DEVICE);
488aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_NONE);
489aba11831SChuck Lever 
490aba11831SChuck Lever #define xprtrdma_show_direction(x)					\
491aba11831SChuck Lever 		__print_symbolic(x,					\
492aba11831SChuck Lever 				{ DMA_BIDIRECTIONAL, "BIDIR" },		\
493aba11831SChuck Lever 				{ DMA_TO_DEVICE, "TO_DEVICE" },		\
494aba11831SChuck Lever 				{ DMA_FROM_DEVICE, "FROM_DEVICE" },	\
495aba11831SChuck Lever 				{ DMA_NONE, "NONE" })
496aba11831SChuck Lever 
4977703db97SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_mr_class,
4987703db97SChuck Lever 	TP_PROTO(
4997703db97SChuck Lever 		const struct rpcrdma_mr *mr
5007703db97SChuck Lever 	),
5017703db97SChuck Lever 
5027703db97SChuck Lever 	TP_ARGS(mr),
5037703db97SChuck Lever 
5047703db97SChuck Lever 	TP_STRUCT__entry(
5057703db97SChuck Lever 		__field(unsigned int, task_id)
5067703db97SChuck Lever 		__field(unsigned int, client_id)
5077703db97SChuck Lever 		__field(u32, mr_id)
5087703db97SChuck Lever 		__field(int, nents)
5097703db97SChuck Lever 		__field(u32, handle)
5107703db97SChuck Lever 		__field(u32, length)
5117703db97SChuck Lever 		__field(u64, offset)
5127703db97SChuck Lever 		__field(u32, dir)
5137703db97SChuck Lever 	),
5147703db97SChuck Lever 
5157703db97SChuck Lever 	TP_fast_assign(
5167703db97SChuck Lever 		const struct rpcrdma_req *req = mr->mr_req;
5177703db97SChuck Lever 		const struct rpc_task *task = req->rl_slot.rq_task;
5187703db97SChuck Lever 
5197703db97SChuck Lever 		__entry->task_id = task->tk_pid;
5207703db97SChuck Lever 		__entry->client_id = task->tk_client->cl_clid;
52113bcf7e3SChuck Lever 		__entry->mr_id  = mr->mr_ibmr->res.id;
5227703db97SChuck Lever 		__entry->nents  = mr->mr_nents;
5237703db97SChuck Lever 		__entry->handle = mr->mr_handle;
5247703db97SChuck Lever 		__entry->length = mr->mr_length;
5257703db97SChuck Lever 		__entry->offset = mr->mr_offset;
5267703db97SChuck Lever 		__entry->dir    = mr->mr_dir;
5277703db97SChuck Lever 	),
5287703db97SChuck Lever 
5297703db97SChuck Lever 	TP_printk("task:%u@%u mr.id=%u nents=%d %u@0x%016llx:0x%08x (%s)",
5307703db97SChuck Lever 		__entry->task_id, __entry->client_id,
5317703db97SChuck Lever 		__entry->mr_id, __entry->nents, __entry->length,
5327703db97SChuck Lever 		(unsigned long long)__entry->offset, __entry->handle,
5337703db97SChuck Lever 		xprtrdma_show_direction(__entry->dir)
5347703db97SChuck Lever 	)
5357703db97SChuck Lever );
5367703db97SChuck Lever 
5377703db97SChuck Lever #define DEFINE_MR_EVENT(name)						\
5387703db97SChuck Lever 		DEFINE_EVENT(xprtrdma_mr_class,				\
5397703db97SChuck Lever 				xprtrdma_mr_##name,			\
5407703db97SChuck Lever 				TP_PROTO(				\
5417703db97SChuck Lever 					const struct rpcrdma_mr *mr	\
5427703db97SChuck Lever 				),					\
5437703db97SChuck Lever 				TP_ARGS(mr))
5447703db97SChuck Lever 
5457703db97SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_anonymous_mr_class,
5462937fedeSChuck Lever 	TP_PROTO(
5472937fedeSChuck Lever 		const struct rpcrdma_mr *mr
5482937fedeSChuck Lever 	),
5492937fedeSChuck Lever 
5502937fedeSChuck Lever 	TP_ARGS(mr),
5512937fedeSChuck Lever 
5522937fedeSChuck Lever 	TP_STRUCT__entry(
55362a89501SChuck Lever 		__field(u32, mr_id)
55462a89501SChuck Lever 		__field(int, nents)
5552937fedeSChuck Lever 		__field(u32, handle)
5562937fedeSChuck Lever 		__field(u32, length)
5572937fedeSChuck Lever 		__field(u64, offset)
558aba11831SChuck Lever 		__field(u32, dir)
5592937fedeSChuck Lever 	),
5602937fedeSChuck Lever 
5612937fedeSChuck Lever 	TP_fast_assign(
56213bcf7e3SChuck Lever 		__entry->mr_id  = mr->mr_ibmr->res.id;
56362a89501SChuck Lever 		__entry->nents  = mr->mr_nents;
5642937fedeSChuck Lever 		__entry->handle = mr->mr_handle;
5652937fedeSChuck Lever 		__entry->length = mr->mr_length;
5662937fedeSChuck Lever 		__entry->offset = mr->mr_offset;
567aba11831SChuck Lever 		__entry->dir    = mr->mr_dir;
5682937fedeSChuck Lever 	),
5692937fedeSChuck Lever 
57062a89501SChuck Lever 	TP_printk("mr.id=%u nents=%d %u@0x%016llx:0x%08x (%s)",
57162a89501SChuck Lever 		__entry->mr_id, __entry->nents, __entry->length,
572aba11831SChuck Lever 		(unsigned long long)__entry->offset, __entry->handle,
573aba11831SChuck Lever 		xprtrdma_show_direction(__entry->dir)
5742937fedeSChuck Lever 	)
5752937fedeSChuck Lever );
5762937fedeSChuck Lever 
5777703db97SChuck Lever #define DEFINE_ANON_MR_EVENT(name)					\
5787703db97SChuck Lever 		DEFINE_EVENT(xprtrdma_anonymous_mr_class,		\
5797703db97SChuck Lever 				xprtrdma_mr_##name,			\
5802937fedeSChuck Lever 				TP_PROTO(				\
5812937fedeSChuck Lever 					const struct rpcrdma_mr *mr	\
5822937fedeSChuck Lever 				),					\
5832937fedeSChuck Lever 				TP_ARGS(mr))
5842937fedeSChuck Lever 
585d11e9346SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_callback_class,
586fc1eb807SChuck Lever 	TP_PROTO(
587d11e9346SChuck Lever 		const struct rpcrdma_xprt *r_xprt,
588fc1eb807SChuck Lever 		const struct rpc_rqst *rqst
589fc1eb807SChuck Lever 	),
590fc1eb807SChuck Lever 
591d11e9346SChuck Lever 	TP_ARGS(r_xprt, rqst),
592fc1eb807SChuck Lever 
593fc1eb807SChuck Lever 	TP_STRUCT__entry(
594fc1eb807SChuck Lever 		__field(u32, xid)
595d11e9346SChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
596d11e9346SChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
597fc1eb807SChuck Lever 	),
598fc1eb807SChuck Lever 
599fc1eb807SChuck Lever 	TP_fast_assign(
600fc1eb807SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
601d11e9346SChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
602d11e9346SChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
603fc1eb807SChuck Lever 	),
604fc1eb807SChuck Lever 
605d11e9346SChuck Lever 	TP_printk("peer=[%s]:%s xid=0x%08x",
606d11e9346SChuck Lever 		__get_str(addr), __get_str(port), __entry->xid
607fc1eb807SChuck Lever 	)
608fc1eb807SChuck Lever );
609fc1eb807SChuck Lever 
610d11e9346SChuck Lever #define DEFINE_CALLBACK_EVENT(name)					\
611d11e9346SChuck Lever 		DEFINE_EVENT(xprtrdma_callback_class,			\
612d11e9346SChuck Lever 				xprtrdma_cb_##name,			\
613fc1eb807SChuck Lever 				TP_PROTO(				\
614d11e9346SChuck Lever 					const struct rpcrdma_xprt *r_xprt, \
615fc1eb807SChuck Lever 					const struct rpc_rqst *rqst	\
616fc1eb807SChuck Lever 				),					\
617d11e9346SChuck Lever 				TP_ARGS(r_xprt, rqst))
618fc1eb807SChuck Lever 
619b4a7f91cSChuck Lever /**
620b4744e00SChuck Lever  ** Connection events
621b4744e00SChuck Lever  **/
622b4744e00SChuck Lever 
623f54c870dSChuck Lever TRACE_EVENT(xprtrdma_inline_thresh,
624f54c870dSChuck Lever 	TP_PROTO(
625745b734cSChuck Lever 		const struct rpcrdma_ep *ep
626f54c870dSChuck Lever 	),
627f54c870dSChuck Lever 
628745b734cSChuck Lever 	TP_ARGS(ep),
629f54c870dSChuck Lever 
630f54c870dSChuck Lever 	TP_STRUCT__entry(
631f54c870dSChuck Lever 		__field(unsigned int, inline_send)
632f54c870dSChuck Lever 		__field(unsigned int, inline_recv)
633f54c870dSChuck Lever 		__field(unsigned int, max_send)
634f54c870dSChuck Lever 		__field(unsigned int, max_recv)
635745b734cSChuck Lever 		__array(unsigned char, srcaddr, sizeof(struct sockaddr_in6))
636745b734cSChuck Lever 		__array(unsigned char, dstaddr, sizeof(struct sockaddr_in6))
637f54c870dSChuck Lever 	),
638f54c870dSChuck Lever 
639f54c870dSChuck Lever 	TP_fast_assign(
640745b734cSChuck Lever 		const struct rdma_cm_id *id = ep->re_id;
641f54c870dSChuck Lever 
64293aa8e0aSChuck Lever 		__entry->inline_send = ep->re_inline_send;
64393aa8e0aSChuck Lever 		__entry->inline_recv = ep->re_inline_recv;
64493aa8e0aSChuck Lever 		__entry->max_send = ep->re_max_inline_send;
64593aa8e0aSChuck Lever 		__entry->max_recv = ep->re_max_inline_recv;
646745b734cSChuck Lever 		memcpy(__entry->srcaddr, &id->route.addr.src_addr,
647745b734cSChuck Lever 		       sizeof(struct sockaddr_in6));
648745b734cSChuck Lever 		memcpy(__entry->dstaddr, &id->route.addr.dst_addr,
649745b734cSChuck Lever 		       sizeof(struct sockaddr_in6));
650f54c870dSChuck Lever 	),
651f54c870dSChuck Lever 
652745b734cSChuck Lever 	TP_printk("%pISpc -> %pISpc neg send/recv=%u/%u, calc send/recv=%u/%u",
653745b734cSChuck Lever 		__entry->srcaddr, __entry->dstaddr,
654f54c870dSChuck Lever 		__entry->inline_send, __entry->inline_recv,
655f54c870dSChuck Lever 		__entry->max_send, __entry->max_recv
656f54c870dSChuck Lever 	)
657f54c870dSChuck Lever );
658f54c870dSChuck Lever 
6597b020f17SChuck Lever DEFINE_CONN_EVENT(connect);
6607b020f17SChuck Lever DEFINE_CONN_EVENT(disconnect);
6617b020f17SChuck Lever 
6627b020f17SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_op_inject_dsc);
6637b020f17SChuck Lever 
6647b020f17SChuck Lever TRACE_EVENT(xprtrdma_op_connect,
665b4744e00SChuck Lever 	TP_PROTO(
666b4744e00SChuck Lever 		const struct rpcrdma_xprt *r_xprt,
6677b020f17SChuck Lever 		unsigned long delay
668b4744e00SChuck Lever 	),
669b4744e00SChuck Lever 
6707b020f17SChuck Lever 	TP_ARGS(r_xprt, delay),
671b4744e00SChuck Lever 
672b4744e00SChuck Lever 	TP_STRUCT__entry(
6737b020f17SChuck Lever 		__field(unsigned long, delay)
674b4744e00SChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
675b4744e00SChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
676b4744e00SChuck Lever 	),
677b4744e00SChuck Lever 
678b4744e00SChuck Lever 	TP_fast_assign(
6797b020f17SChuck Lever 		__entry->delay = delay;
680b4744e00SChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
681b4744e00SChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
682b4744e00SChuck Lever 	),
683b4744e00SChuck Lever 
68483189d15SChuck Lever 	TP_printk("peer=[%s]:%s delay=%lu",
68583189d15SChuck Lever 		__get_str(addr), __get_str(port), __entry->delay
686b4744e00SChuck Lever 	)
687b4744e00SChuck Lever );
688b4744e00SChuck Lever 
689b4744e00SChuck Lever 
690675dd90aSChuck Lever TRACE_EVENT(xprtrdma_op_set_cto,
691675dd90aSChuck Lever 	TP_PROTO(
692675dd90aSChuck Lever 		const struct rpcrdma_xprt *r_xprt,
693675dd90aSChuck Lever 		unsigned long connect,
694675dd90aSChuck Lever 		unsigned long reconnect
695675dd90aSChuck Lever 	),
696675dd90aSChuck Lever 
697675dd90aSChuck Lever 	TP_ARGS(r_xprt, connect, reconnect),
698675dd90aSChuck Lever 
699675dd90aSChuck Lever 	TP_STRUCT__entry(
700675dd90aSChuck Lever 		__field(unsigned long, connect)
701675dd90aSChuck Lever 		__field(unsigned long, reconnect)
702675dd90aSChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
703675dd90aSChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
704675dd90aSChuck Lever 	),
705675dd90aSChuck Lever 
706675dd90aSChuck Lever 	TP_fast_assign(
707675dd90aSChuck Lever 		__entry->connect = connect;
708675dd90aSChuck Lever 		__entry->reconnect = reconnect;
709675dd90aSChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
710675dd90aSChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
711675dd90aSChuck Lever 	),
712675dd90aSChuck Lever 
71383189d15SChuck Lever 	TP_printk("peer=[%s]:%s connect=%lu reconnect=%lu",
71483189d15SChuck Lever 		__get_str(addr), __get_str(port),
715675dd90aSChuck Lever 		__entry->connect / HZ, __entry->reconnect / HZ
716675dd90aSChuck Lever 	)
717675dd90aSChuck Lever );
718675dd90aSChuck Lever 
719b4744e00SChuck Lever /**
720ab03eff5SChuck Lever  ** Call events
721ab03eff5SChuck Lever  **/
722ab03eff5SChuck Lever 
7231c443effSChuck Lever TRACE_EVENT(xprtrdma_createmrs,
7241c443effSChuck Lever 	TP_PROTO(
7251c443effSChuck Lever 		const struct rpcrdma_xprt *r_xprt,
7261c443effSChuck Lever 		unsigned int count
7271c443effSChuck Lever 	),
7281c443effSChuck Lever 
7291c443effSChuck Lever 	TP_ARGS(r_xprt, count),
7301c443effSChuck Lever 
7311c443effSChuck Lever 	TP_STRUCT__entry(
7326dc6ec9eSChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
7336dc6ec9eSChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
7341c443effSChuck Lever 		__field(unsigned int, count)
7351c443effSChuck Lever 	),
7361c443effSChuck Lever 
7371c443effSChuck Lever 	TP_fast_assign(
7381c443effSChuck Lever 		__entry->count = count;
7396dc6ec9eSChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
7406dc6ec9eSChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
7411c443effSChuck Lever 	),
7421c443effSChuck Lever 
74383189d15SChuck Lever 	TP_printk("peer=[%s]:%s created %u MRs",
74483189d15SChuck Lever 		__get_str(addr), __get_str(port), __entry->count
7456dc6ec9eSChuck Lever 	)
7466dc6ec9eSChuck Lever );
7476dc6ec9eSChuck Lever 
7480307cdecSChuck Lever TRACE_EVENT(xprtrdma_nomrs_err,
7496dc6ec9eSChuck Lever 	TP_PROTO(
7500307cdecSChuck Lever 		const struct rpcrdma_xprt *r_xprt,
7516dc6ec9eSChuck Lever 		const struct rpcrdma_req *req
7526dc6ec9eSChuck Lever 	),
7536dc6ec9eSChuck Lever 
7540307cdecSChuck Lever 	TP_ARGS(r_xprt, req),
7556dc6ec9eSChuck Lever 
7566dc6ec9eSChuck Lever 	TP_STRUCT__entry(
7576dc6ec9eSChuck Lever 		__field(unsigned int, task_id)
7586dc6ec9eSChuck Lever 		__field(unsigned int, client_id)
7590307cdecSChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
7600307cdecSChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
7616dc6ec9eSChuck Lever 	),
7626dc6ec9eSChuck Lever 
7636dc6ec9eSChuck Lever 	TP_fast_assign(
7646dc6ec9eSChuck Lever 		const struct rpc_rqst *rqst = &req->rl_slot;
7656dc6ec9eSChuck Lever 
7666dc6ec9eSChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
7676dc6ec9eSChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
7680307cdecSChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
7690307cdecSChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
7706dc6ec9eSChuck Lever 	),
7716dc6ec9eSChuck Lever 
7720307cdecSChuck Lever 	TP_printk("peer=[%s]:%s task:%u@%u",
7730307cdecSChuck Lever 		__get_str(addr), __get_str(port),
7740307cdecSChuck Lever 		__entry->task_id, __entry->client_id
7753b39f52aSChuck Lever 	)
7763b39f52aSChuck Lever );
7771c443effSChuck Lever 
778aba11831SChuck Lever DEFINE_RDCH_EVENT(read);
779aba11831SChuck Lever DEFINE_WRCH_EVENT(write);
780aba11831SChuck Lever DEFINE_WRCH_EVENT(reply);
78158f10ad4SChuck Lever 
782ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch);
783614f3c96SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch_pullup);
784614f3c96SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch_mapped);
785ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_readch);
786ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_areadch);
787ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_writech);
788ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_replych);
789ab03eff5SChuck Lever 
790ab03eff5SChuck Lever #define xprtrdma_show_chunktype(x)					\
791ab03eff5SChuck Lever 		__print_symbolic(x,					\
792ab03eff5SChuck Lever 				{ rpcrdma_noch, "inline" },		\
793614f3c96SChuck Lever 				{ rpcrdma_noch_pullup, "pullup" },	\
794614f3c96SChuck Lever 				{ rpcrdma_noch_mapped, "mapped" },	\
795ab03eff5SChuck Lever 				{ rpcrdma_readch, "read list" },	\
796ab03eff5SChuck Lever 				{ rpcrdma_areadch, "*read list" },	\
797ab03eff5SChuck Lever 				{ rpcrdma_writech, "write list" },	\
798ab03eff5SChuck Lever 				{ rpcrdma_replych, "reply chunk" })
799ab03eff5SChuck Lever 
800ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_marshal,
801ab03eff5SChuck Lever 	TP_PROTO(
8021310051cSChuck Lever 		const struct rpcrdma_req *req,
803ab03eff5SChuck Lever 		unsigned int rtype,
804ab03eff5SChuck Lever 		unsigned int wtype
805ab03eff5SChuck Lever 	),
806ab03eff5SChuck Lever 
8071310051cSChuck Lever 	TP_ARGS(req, rtype, wtype),
808ab03eff5SChuck Lever 
809ab03eff5SChuck Lever 	TP_STRUCT__entry(
810ab03eff5SChuck Lever 		__field(unsigned int, task_id)
811ab03eff5SChuck Lever 		__field(unsigned int, client_id)
812ab03eff5SChuck Lever 		__field(u32, xid)
813ab03eff5SChuck Lever 		__field(unsigned int, hdrlen)
814ab03eff5SChuck Lever 		__field(unsigned int, headlen)
815ab03eff5SChuck Lever 		__field(unsigned int, pagelen)
816ab03eff5SChuck Lever 		__field(unsigned int, taillen)
817ab03eff5SChuck Lever 		__field(unsigned int, rtype)
818ab03eff5SChuck Lever 		__field(unsigned int, wtype)
819ab03eff5SChuck Lever 	),
820ab03eff5SChuck Lever 
821ab03eff5SChuck Lever 	TP_fast_assign(
8221310051cSChuck Lever 		const struct rpc_rqst *rqst = &req->rl_slot;
8231310051cSChuck Lever 
824ab03eff5SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
825ab03eff5SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
826ab03eff5SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
8271310051cSChuck Lever 		__entry->hdrlen = req->rl_hdrbuf.len;
828ab03eff5SChuck Lever 		__entry->headlen = rqst->rq_snd_buf.head[0].iov_len;
829ab03eff5SChuck Lever 		__entry->pagelen = rqst->rq_snd_buf.page_len;
830ab03eff5SChuck Lever 		__entry->taillen = rqst->rq_snd_buf.tail[0].iov_len;
831ab03eff5SChuck Lever 		__entry->rtype = rtype;
832ab03eff5SChuck Lever 		__entry->wtype = wtype;
833ab03eff5SChuck Lever 	),
834ab03eff5SChuck Lever 
835ab03eff5SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x: hdr=%u xdr=%u/%u/%u %s/%s",
836ab03eff5SChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
837ab03eff5SChuck Lever 		__entry->hdrlen,
838ab03eff5SChuck Lever 		__entry->headlen, __entry->pagelen, __entry->taillen,
839ab03eff5SChuck Lever 		xprtrdma_show_chunktype(__entry->rtype),
840ab03eff5SChuck Lever 		xprtrdma_show_chunktype(__entry->wtype)
841ab03eff5SChuck Lever 	)
842ab03eff5SChuck Lever );
843ab03eff5SChuck Lever 
84417e4c443SChuck Lever TRACE_EVENT(xprtrdma_marshal_failed,
84517e4c443SChuck Lever 	TP_PROTO(const struct rpc_rqst *rqst,
84617e4c443SChuck Lever 		 int ret
84717e4c443SChuck Lever 	),
84817e4c443SChuck Lever 
84917e4c443SChuck Lever 	TP_ARGS(rqst, ret),
85017e4c443SChuck Lever 
85117e4c443SChuck Lever 	TP_STRUCT__entry(
85217e4c443SChuck Lever 		__field(unsigned int, task_id)
85317e4c443SChuck Lever 		__field(unsigned int, client_id)
85417e4c443SChuck Lever 		__field(u32, xid)
85517e4c443SChuck Lever 		__field(int, ret)
85617e4c443SChuck Lever 	),
85717e4c443SChuck Lever 
85817e4c443SChuck Lever 	TP_fast_assign(
85917e4c443SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
86017e4c443SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
86117e4c443SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
86217e4c443SChuck Lever 		__entry->ret = ret;
86317e4c443SChuck Lever 	),
86417e4c443SChuck Lever 
86517e4c443SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x: ret=%d",
86617e4c443SChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
86717e4c443SChuck Lever 		__entry->ret
86817e4c443SChuck Lever 	)
86917e4c443SChuck Lever );
87017e4c443SChuck Lever 
87105eb06d8SChuck Lever TRACE_EVENT(xprtrdma_prepsend_failed,
87205eb06d8SChuck Lever 	TP_PROTO(const struct rpc_rqst *rqst,
87305eb06d8SChuck Lever 		 int ret
87405eb06d8SChuck Lever 	),
87505eb06d8SChuck Lever 
87605eb06d8SChuck Lever 	TP_ARGS(rqst, ret),
87705eb06d8SChuck Lever 
87805eb06d8SChuck Lever 	TP_STRUCT__entry(
87905eb06d8SChuck Lever 		__field(unsigned int, task_id)
88005eb06d8SChuck Lever 		__field(unsigned int, client_id)
88105eb06d8SChuck Lever 		__field(u32, xid)
88205eb06d8SChuck Lever 		__field(int, ret)
88305eb06d8SChuck Lever 	),
88405eb06d8SChuck Lever 
88505eb06d8SChuck Lever 	TP_fast_assign(
88605eb06d8SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
88705eb06d8SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
88805eb06d8SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
88905eb06d8SChuck Lever 		__entry->ret = ret;
89005eb06d8SChuck Lever 	),
89105eb06d8SChuck Lever 
89205eb06d8SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x: ret=%d",
89305eb06d8SChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
89405eb06d8SChuck Lever 		__entry->ret
89505eb06d8SChuck Lever 	)
89605eb06d8SChuck Lever );
89705eb06d8SChuck Lever 
898ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_post_send,
899ab03eff5SChuck Lever 	TP_PROTO(
900bdb2ce82SChuck Lever 		const struct rpcrdma_req *req
901ab03eff5SChuck Lever 	),
902ab03eff5SChuck Lever 
903bdb2ce82SChuck Lever 	TP_ARGS(req),
904ab03eff5SChuck Lever 
905ab03eff5SChuck Lever 	TP_STRUCT__entry(
906b2e7467fSChuck Lever 		__field(u32, cq_id)
907b2e7467fSChuck Lever 		__field(int, completion_id)
9080c77668dSChuck Lever 		__field(unsigned int, task_id)
9090c77668dSChuck Lever 		__field(unsigned int, client_id)
910ab03eff5SChuck Lever 		__field(int, num_sge)
911470443e0SChuck Lever 		__field(int, signaled)
912ab03eff5SChuck Lever 	),
913ab03eff5SChuck Lever 
914ab03eff5SChuck Lever 	TP_fast_assign(
9150c77668dSChuck Lever 		const struct rpc_rqst *rqst = &req->rl_slot;
916b2e7467fSChuck Lever 		const struct rpcrdma_sendctx *sc = req->rl_sendctx;
9170c77668dSChuck Lever 
918b2e7467fSChuck Lever 		__entry->cq_id = sc->sc_cid.ci_queue_id;
919b2e7467fSChuck Lever 		__entry->completion_id = sc->sc_cid.ci_completion_id;
9200c77668dSChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
92110694ac9SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client ?
92210694ac9SChuck Lever 				     rqst->rq_task->tk_client->cl_clid : -1;
923dc15c3d5SChuck Lever 		__entry->num_sge = req->rl_wr.num_sge;
924dc15c3d5SChuck Lever 		__entry->signaled = req->rl_wr.send_flags & IB_SEND_SIGNALED;
925ab03eff5SChuck Lever 	),
926ab03eff5SChuck Lever 
927b2e7467fSChuck Lever 	TP_printk("task:%u@%u cq.id=%u cid=%d (%d SGE%s) %s",
9280c77668dSChuck Lever 		__entry->task_id, __entry->client_id,
929b2e7467fSChuck Lever 		__entry->cq_id, __entry->completion_id,
930b2e7467fSChuck Lever 		__entry->num_sge, (__entry->num_sge == 1 ? "" : "s"),
931bdb2ce82SChuck Lever 		(__entry->signaled ? "signaled" : "")
932ab03eff5SChuck Lever 	)
933ab03eff5SChuck Lever );
934ab03eff5SChuck Lever 
935d9ae8134SChuck Lever TRACE_EVENT(xprtrdma_post_send_err,
936d9ae8134SChuck Lever 	TP_PROTO(
937d9ae8134SChuck Lever 		const struct rpcrdma_xprt *r_xprt,
938d9ae8134SChuck Lever 		const struct rpcrdma_req *req,
939d9ae8134SChuck Lever 		int rc
940d9ae8134SChuck Lever 	),
941d9ae8134SChuck Lever 
942d9ae8134SChuck Lever 	TP_ARGS(r_xprt, req, rc),
943d9ae8134SChuck Lever 
944d9ae8134SChuck Lever 	TP_STRUCT__entry(
945d9ae8134SChuck Lever 		__field(u32, cq_id)
946d9ae8134SChuck Lever 		__field(unsigned int, task_id)
947d9ae8134SChuck Lever 		__field(unsigned int, client_id)
948d9ae8134SChuck Lever 		__field(int, rc)
949d9ae8134SChuck Lever 	),
950d9ae8134SChuck Lever 
951d9ae8134SChuck Lever 	TP_fast_assign(
952d9ae8134SChuck Lever 		const struct rpc_rqst *rqst = &req->rl_slot;
953d9ae8134SChuck Lever 		const struct rpcrdma_ep *ep = r_xprt->rx_ep;
954d9ae8134SChuck Lever 
955d9ae8134SChuck Lever 		__entry->cq_id = ep ? ep->re_attr.recv_cq->res.id : 0;
956d9ae8134SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
957d9ae8134SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client ?
958d9ae8134SChuck Lever 				     rqst->rq_task->tk_client->cl_clid : -1;
959d9ae8134SChuck Lever 		__entry->rc = rc;
960d9ae8134SChuck Lever 	),
961d9ae8134SChuck Lever 
962d9ae8134SChuck Lever 	TP_printk("task:%u@%u cq.id=%u rc=%d",
963d9ae8134SChuck Lever 		__entry->task_id, __entry->client_id,
964d9ae8134SChuck Lever 		__entry->cq_id, __entry->rc
965d9ae8134SChuck Lever 	)
966d9ae8134SChuck Lever );
967d9ae8134SChuck Lever 
968b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_post_recv,
969b4a7f91cSChuck Lever 	TP_PROTO(
9702dfdcd88SChuck Lever 		const struct rpcrdma_rep *rep
971b4a7f91cSChuck Lever 	),
972b4a7f91cSChuck Lever 
9732dfdcd88SChuck Lever 	TP_ARGS(rep),
974b4a7f91cSChuck Lever 
975b4a7f91cSChuck Lever 	TP_STRUCT__entry(
976af5865d2SChuck Lever 		__field(u32, cq_id)
977af5865d2SChuck Lever 		__field(int, completion_id)
978b4a7f91cSChuck Lever 	),
979b4a7f91cSChuck Lever 
980b4a7f91cSChuck Lever 	TP_fast_assign(
981af5865d2SChuck Lever 		__entry->cq_id = rep->rr_cid.ci_queue_id;
982af5865d2SChuck Lever 		__entry->completion_id = rep->rr_cid.ci_completion_id;
983b4a7f91cSChuck Lever 	),
984b4a7f91cSChuck Lever 
985af5865d2SChuck Lever 	TP_printk("cq.id=%d cid=%d",
986af5865d2SChuck Lever 		__entry->cq_id, __entry->completion_id
987b4a7f91cSChuck Lever 	)
988b4a7f91cSChuck Lever );
989b4a7f91cSChuck Lever 
9907c8d9e7cSChuck Lever TRACE_EVENT(xprtrdma_post_recvs,
9917c8d9e7cSChuck Lever 	TP_PROTO(
9927c8d9e7cSChuck Lever 		const struct rpcrdma_xprt *r_xprt,
993683f31c3SChuck Lever 		unsigned int count
9947c8d9e7cSChuck Lever 	),
9957c8d9e7cSChuck Lever 
996683f31c3SChuck Lever 	TP_ARGS(r_xprt, count),
9977c8d9e7cSChuck Lever 
9987c8d9e7cSChuck Lever 	TP_STRUCT__entry(
99983189d15SChuck Lever 		__field(u32, cq_id)
10007c8d9e7cSChuck Lever 		__field(unsigned int, count)
10017c8d9e7cSChuck Lever 		__field(int, posted)
10027c8d9e7cSChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
10037c8d9e7cSChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
10047c8d9e7cSChuck Lever 	),
10057c8d9e7cSChuck Lever 
10067c8d9e7cSChuck Lever 	TP_fast_assign(
100783189d15SChuck Lever 		const struct rpcrdma_ep *ep = r_xprt->rx_ep;
100883189d15SChuck Lever 
100983189d15SChuck Lever 		__entry->cq_id = ep->re_attr.recv_cq->res.id;
10107c8d9e7cSChuck Lever 		__entry->count = count;
101183189d15SChuck Lever 		__entry->posted = ep->re_receive_count;
10127c8d9e7cSChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
10137c8d9e7cSChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
10147c8d9e7cSChuck Lever 	),
10157c8d9e7cSChuck Lever 
1016683f31c3SChuck Lever 	TP_printk("peer=[%s]:%s cq.id=%d %u new recvs, %d active",
101783189d15SChuck Lever 		__get_str(addr), __get_str(port), __entry->cq_id,
1018683f31c3SChuck Lever 		__entry->count, __entry->posted
1019683f31c3SChuck Lever 	)
1020683f31c3SChuck Lever );
1021683f31c3SChuck Lever 
1022683f31c3SChuck Lever TRACE_EVENT(xprtrdma_post_recvs_err,
1023683f31c3SChuck Lever 	TP_PROTO(
1024683f31c3SChuck Lever 		const struct rpcrdma_xprt *r_xprt,
1025683f31c3SChuck Lever 		int status
1026683f31c3SChuck Lever 	),
1027683f31c3SChuck Lever 
1028683f31c3SChuck Lever 	TP_ARGS(r_xprt, status),
1029683f31c3SChuck Lever 
1030683f31c3SChuck Lever 	TP_STRUCT__entry(
1031683f31c3SChuck Lever 		__field(u32, cq_id)
1032683f31c3SChuck Lever 		__field(int, status)
1033683f31c3SChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
1034683f31c3SChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
1035683f31c3SChuck Lever 	),
1036683f31c3SChuck Lever 
1037683f31c3SChuck Lever 	TP_fast_assign(
1038683f31c3SChuck Lever 		const struct rpcrdma_ep *ep = r_xprt->rx_ep;
1039683f31c3SChuck Lever 
1040683f31c3SChuck Lever 		__entry->cq_id = ep->re_attr.recv_cq->res.id;
1041683f31c3SChuck Lever 		__entry->status = status;
1042683f31c3SChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
1043683f31c3SChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
1044683f31c3SChuck Lever 	),
1045683f31c3SChuck Lever 
1046683f31c3SChuck Lever 	TP_printk("peer=[%s]:%s cq.id=%d rc=%d",
1047683f31c3SChuck Lever 		__get_str(addr), __get_str(port), __entry->cq_id,
1048683f31c3SChuck Lever 		__entry->status
1049ab03eff5SChuck Lever 	)
1050ab03eff5SChuck Lever );
1051ab03eff5SChuck Lever 
105236a55edfSChuck Lever TRACE_EVENT(xprtrdma_post_linv_err,
10534b93dab3SChuck Lever 	TP_PROTO(
10544b93dab3SChuck Lever 		const struct rpcrdma_req *req,
10554b93dab3SChuck Lever 		int status
10564b93dab3SChuck Lever 	),
10574b93dab3SChuck Lever 
10584b93dab3SChuck Lever 	TP_ARGS(req, status),
10594b93dab3SChuck Lever 
10604b93dab3SChuck Lever 	TP_STRUCT__entry(
106136a55edfSChuck Lever 		__field(unsigned int, task_id)
106236a55edfSChuck Lever 		__field(unsigned int, client_id)
10634b93dab3SChuck Lever 		__field(int, status)
10644b93dab3SChuck Lever 	),
10654b93dab3SChuck Lever 
10664b93dab3SChuck Lever 	TP_fast_assign(
106736a55edfSChuck Lever 		const struct rpc_task *task = req->rl_slot.rq_task;
106836a55edfSChuck Lever 
106936a55edfSChuck Lever 		__entry->task_id = task->tk_pid;
107036a55edfSChuck Lever 		__entry->client_id = task->tk_client->cl_clid;
10714b93dab3SChuck Lever 		__entry->status = status;
10724b93dab3SChuck Lever 	),
10734b93dab3SChuck Lever 
107436a55edfSChuck Lever 	TP_printk("task:%u@%u status=%d",
107536a55edfSChuck Lever 		__entry->task_id, __entry->client_id, __entry->status
10764b93dab3SChuck Lever 	)
10774b93dab3SChuck Lever );
10784b93dab3SChuck Lever 
1079ab03eff5SChuck Lever /**
1080ab03eff5SChuck Lever  ** Completion events
1081ab03eff5SChuck Lever  **/
1082ab03eff5SChuck Lever 
1083c30f259aSChuck Lever DEFINE_RECEIVE_COMPLETION_EVENT(xprtrdma_wc_receive);
1084c30f259aSChuck Lever 
1085b2e7467fSChuck Lever DEFINE_COMPLETION_EVENT(xprtrdma_wc_send);
10866b147ea7SChuck Lever DEFINE_MR_COMPLETION_EVENT(xprtrdma_wc_fastreg);
10876b147ea7SChuck Lever DEFINE_MR_COMPLETION_EVENT(xprtrdma_wc_li);
10886b147ea7SChuck Lever DEFINE_MR_COMPLETION_EVENT(xprtrdma_wc_li_wake);
10896b147ea7SChuck Lever DEFINE_MR_COMPLETION_EVENT(xprtrdma_wc_li_done);
10902937fedeSChuck Lever 
109153b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_alloc,
109253b2c1cbSChuck Lever 	TP_PROTO(
109353b2c1cbSChuck Lever 		const struct rpcrdma_mr *mr,
109453b2c1cbSChuck Lever 		int rc
109553b2c1cbSChuck Lever 	),
109653b2c1cbSChuck Lever 
109753b2c1cbSChuck Lever 	TP_ARGS(mr, rc),
109853b2c1cbSChuck Lever 
109953b2c1cbSChuck Lever 	TP_STRUCT__entry(
110062a89501SChuck Lever 		__field(u32, mr_id)
110153b2c1cbSChuck Lever 		__field(int, rc)
110253b2c1cbSChuck Lever 	),
110353b2c1cbSChuck Lever 
110453b2c1cbSChuck Lever 	TP_fast_assign(
110513bcf7e3SChuck Lever 		__entry->mr_id = mr->mr_ibmr->res.id;
110653b2c1cbSChuck Lever 		__entry->rc = rc;
110753b2c1cbSChuck Lever 	),
110853b2c1cbSChuck Lever 
110962a89501SChuck Lever 	TP_printk("mr.id=%u: rc=%d",
111062a89501SChuck Lever 		__entry->mr_id, __entry->rc
111153b2c1cbSChuck Lever 	)
111253b2c1cbSChuck Lever );
111353b2c1cbSChuck Lever 
111453b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_dereg,
111553b2c1cbSChuck Lever 	TP_PROTO(
111653b2c1cbSChuck Lever 		const struct rpcrdma_mr *mr,
111753b2c1cbSChuck Lever 		int rc
111853b2c1cbSChuck Lever 	),
111953b2c1cbSChuck Lever 
112053b2c1cbSChuck Lever 	TP_ARGS(mr, rc),
112153b2c1cbSChuck Lever 
112253b2c1cbSChuck Lever 	TP_STRUCT__entry(
112362a89501SChuck Lever 		__field(u32, mr_id)
112462a89501SChuck Lever 		__field(int, nents)
112553b2c1cbSChuck Lever 		__field(u32, handle)
112653b2c1cbSChuck Lever 		__field(u32, length)
112753b2c1cbSChuck Lever 		__field(u64, offset)
112853b2c1cbSChuck Lever 		__field(u32, dir)
112953b2c1cbSChuck Lever 		__field(int, rc)
113053b2c1cbSChuck Lever 	),
113153b2c1cbSChuck Lever 
113253b2c1cbSChuck Lever 	TP_fast_assign(
113313bcf7e3SChuck Lever 		__entry->mr_id  = mr->mr_ibmr->res.id;
113462a89501SChuck Lever 		__entry->nents  = mr->mr_nents;
113553b2c1cbSChuck Lever 		__entry->handle = mr->mr_handle;
113653b2c1cbSChuck Lever 		__entry->length = mr->mr_length;
113753b2c1cbSChuck Lever 		__entry->offset = mr->mr_offset;
113853b2c1cbSChuck Lever 		__entry->dir    = mr->mr_dir;
113953b2c1cbSChuck Lever 		__entry->rc	= rc;
114053b2c1cbSChuck Lever 	),
114153b2c1cbSChuck Lever 
114262a89501SChuck Lever 	TP_printk("mr.id=%u nents=%d %u@0x%016llx:0x%08x (%s): rc=%d",
114362a89501SChuck Lever 		__entry->mr_id, __entry->nents, __entry->length,
114453b2c1cbSChuck Lever 		(unsigned long long)__entry->offset, __entry->handle,
114553b2c1cbSChuck Lever 		xprtrdma_show_direction(__entry->dir),
114653b2c1cbSChuck Lever 		__entry->rc
114753b2c1cbSChuck Lever 	)
114853b2c1cbSChuck Lever );
114953b2c1cbSChuck Lever 
115053b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_sgerr,
115153b2c1cbSChuck Lever 	TP_PROTO(
115253b2c1cbSChuck Lever 		const struct rpcrdma_mr *mr,
115353b2c1cbSChuck Lever 		int sg_nents
115453b2c1cbSChuck Lever 	),
115553b2c1cbSChuck Lever 
115653b2c1cbSChuck Lever 	TP_ARGS(mr, sg_nents),
115753b2c1cbSChuck Lever 
115853b2c1cbSChuck Lever 	TP_STRUCT__entry(
115962a89501SChuck Lever 		__field(u32, mr_id)
116053b2c1cbSChuck Lever 		__field(u64, addr)
116153b2c1cbSChuck Lever 		__field(u32, dir)
116253b2c1cbSChuck Lever 		__field(int, nents)
116353b2c1cbSChuck Lever 	),
116453b2c1cbSChuck Lever 
116553b2c1cbSChuck Lever 	TP_fast_assign(
116613bcf7e3SChuck Lever 		__entry->mr_id = mr->mr_ibmr->res.id;
116753b2c1cbSChuck Lever 		__entry->addr = mr->mr_sg->dma_address;
116853b2c1cbSChuck Lever 		__entry->dir = mr->mr_dir;
116953b2c1cbSChuck Lever 		__entry->nents = sg_nents;
117053b2c1cbSChuck Lever 	),
117153b2c1cbSChuck Lever 
117262a89501SChuck Lever 	TP_printk("mr.id=%u DMA addr=0x%llx (%s) sg_nents=%d",
117362a89501SChuck Lever 		__entry->mr_id, __entry->addr,
117453b2c1cbSChuck Lever 		xprtrdma_show_direction(__entry->dir),
117553b2c1cbSChuck Lever 		__entry->nents
117653b2c1cbSChuck Lever 	)
117753b2c1cbSChuck Lever );
117853b2c1cbSChuck Lever 
117953b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_maperr,
118053b2c1cbSChuck Lever 	TP_PROTO(
118153b2c1cbSChuck Lever 		const struct rpcrdma_mr *mr,
118253b2c1cbSChuck Lever 		int num_mapped
118353b2c1cbSChuck Lever 	),
118453b2c1cbSChuck Lever 
118553b2c1cbSChuck Lever 	TP_ARGS(mr, num_mapped),
118653b2c1cbSChuck Lever 
118753b2c1cbSChuck Lever 	TP_STRUCT__entry(
118862a89501SChuck Lever 		__field(u32, mr_id)
118953b2c1cbSChuck Lever 		__field(u64, addr)
119053b2c1cbSChuck Lever 		__field(u32, dir)
119153b2c1cbSChuck Lever 		__field(int, num_mapped)
119253b2c1cbSChuck Lever 		__field(int, nents)
119353b2c1cbSChuck Lever 	),
119453b2c1cbSChuck Lever 
119553b2c1cbSChuck Lever 	TP_fast_assign(
119613bcf7e3SChuck Lever 		__entry->mr_id = mr->mr_ibmr->res.id;
119753b2c1cbSChuck Lever 		__entry->addr = mr->mr_sg->dma_address;
119853b2c1cbSChuck Lever 		__entry->dir = mr->mr_dir;
119953b2c1cbSChuck Lever 		__entry->num_mapped = num_mapped;
120053b2c1cbSChuck Lever 		__entry->nents = mr->mr_nents;
120153b2c1cbSChuck Lever 	),
120253b2c1cbSChuck Lever 
120362a89501SChuck Lever 	TP_printk("mr.id=%u DMA addr=0x%llx (%s) nents=%d of %d",
120462a89501SChuck Lever 		__entry->mr_id, __entry->addr,
120553b2c1cbSChuck Lever 		xprtrdma_show_direction(__entry->dir),
120653b2c1cbSChuck Lever 		__entry->num_mapped, __entry->nents
120753b2c1cbSChuck Lever 	)
120853b2c1cbSChuck Lever );
120953b2c1cbSChuck Lever 
12104ddd0fc3SChuck Lever DEFINE_MR_EVENT(fastreg);
1211d379eaa8SChuck Lever DEFINE_MR_EVENT(localinv);
12124ddd0fc3SChuck Lever DEFINE_MR_EVENT(reminv);
1213d379eaa8SChuck Lever DEFINE_MR_EVENT(map);
12147703db97SChuck Lever 
12157703db97SChuck Lever DEFINE_ANON_MR_EVENT(unmap);
121658f10ad4SChuck Lever 
121753b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_dma_maperr,
121853b2c1cbSChuck Lever 	TP_PROTO(
121953b2c1cbSChuck Lever 		u64 addr
122053b2c1cbSChuck Lever 	),
122153b2c1cbSChuck Lever 
122253b2c1cbSChuck Lever 	TP_ARGS(addr),
122353b2c1cbSChuck Lever 
122453b2c1cbSChuck Lever 	TP_STRUCT__entry(
122553b2c1cbSChuck Lever 		__field(u64, addr)
122653b2c1cbSChuck Lever 	),
122753b2c1cbSChuck Lever 
122853b2c1cbSChuck Lever 	TP_fast_assign(
122953b2c1cbSChuck Lever 		__entry->addr = addr;
123053b2c1cbSChuck Lever 	),
123153b2c1cbSChuck Lever 
123253b2c1cbSChuck Lever 	TP_printk("dma addr=0x%llx\n", __entry->addr)
123353b2c1cbSChuck Lever );
123453b2c1cbSChuck Lever 
1235b4a7f91cSChuck Lever /**
1236b4a7f91cSChuck Lever  ** Reply events
1237b4a7f91cSChuck Lever  **/
1238b4a7f91cSChuck Lever 
1239b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_reply,
1240b4a7f91cSChuck Lever 	TP_PROTO(
1241b4a7f91cSChuck Lever 		const struct rpc_task *task,
1242b4a7f91cSChuck Lever 		const struct rpcrdma_rep *rep,
1243b4a7f91cSChuck Lever 		unsigned int credits
1244b4a7f91cSChuck Lever 	),
1245b4a7f91cSChuck Lever 
124603ffd924SChuck Lever 	TP_ARGS(task, rep, credits),
1247b4a7f91cSChuck Lever 
1248b4a7f91cSChuck Lever 	TP_STRUCT__entry(
1249b4a7f91cSChuck Lever 		__field(unsigned int, task_id)
1250b4a7f91cSChuck Lever 		__field(unsigned int, client_id)
1251b4a7f91cSChuck Lever 		__field(u32, xid)
1252b4a7f91cSChuck Lever 		__field(unsigned int, credits)
1253b4a7f91cSChuck Lever 	),
1254b4a7f91cSChuck Lever 
1255b4a7f91cSChuck Lever 	TP_fast_assign(
1256b4a7f91cSChuck Lever 		__entry->task_id = task->tk_pid;
1257b4a7f91cSChuck Lever 		__entry->client_id = task->tk_client->cl_clid;
1258b4a7f91cSChuck Lever 		__entry->xid = be32_to_cpu(rep->rr_xid);
1259b4a7f91cSChuck Lever 		__entry->credits = credits;
1260b4a7f91cSChuck Lever 	),
1261b4a7f91cSChuck Lever 
126203ffd924SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x credits=%u",
1263b4a7f91cSChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
126403ffd924SChuck Lever 		__entry->credits
1265b4a7f91cSChuck Lever 	)
1266b4a7f91cSChuck Lever );
1267b4a7f91cSChuck Lever 
12683a9568feSChuck Lever DEFINE_REPLY_EVENT(vers);
12693a9568feSChuck Lever DEFINE_REPLY_EVENT(rqst);
12703a9568feSChuck Lever DEFINE_REPLY_EVENT(short);
12713a9568feSChuck Lever DEFINE_REPLY_EVENT(hdr);
1272b4a7f91cSChuck Lever 
12733821e232SChuck Lever TRACE_EVENT(xprtrdma_err_vers,
1274e48f083eSChuck Lever 	TP_PROTO(
12753821e232SChuck Lever 		const struct rpc_rqst *rqst,
12763821e232SChuck Lever 		__be32 *min,
12773821e232SChuck Lever 		__be32 *max
1278e48f083eSChuck Lever 	),
1279e48f083eSChuck Lever 
12803821e232SChuck Lever 	TP_ARGS(rqst, min, max),
1281e48f083eSChuck Lever 
1282e48f083eSChuck Lever 	TP_STRUCT__entry(
1283e48f083eSChuck Lever 		__field(unsigned int, task_id)
1284e48f083eSChuck Lever 		__field(unsigned int, client_id)
12853821e232SChuck Lever 		__field(u32, xid)
12863821e232SChuck Lever 		__field(u32, min)
12873821e232SChuck Lever 		__field(u32, max)
12883821e232SChuck Lever 	),
12893821e232SChuck Lever 
12903821e232SChuck Lever 	TP_fast_assign(
12913821e232SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
12923821e232SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
12933821e232SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
12943821e232SChuck Lever 		__entry->min = be32_to_cpup(min);
12953821e232SChuck Lever 		__entry->max = be32_to_cpup(max);
12963821e232SChuck Lever 	),
12973821e232SChuck Lever 
12983821e232SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x versions=[%u, %u]",
12993821e232SChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
13003821e232SChuck Lever 		__entry->min, __entry->max
13013821e232SChuck Lever 	)
13023821e232SChuck Lever );
13033821e232SChuck Lever 
13043821e232SChuck Lever TRACE_EVENT(xprtrdma_err_chunk,
13053821e232SChuck Lever 	TP_PROTO(
13063821e232SChuck Lever 		const struct rpc_rqst *rqst
13073821e232SChuck Lever 	),
13083821e232SChuck Lever 
13093821e232SChuck Lever 	TP_ARGS(rqst),
13103821e232SChuck Lever 
13113821e232SChuck Lever 	TP_STRUCT__entry(
13123821e232SChuck Lever 		__field(unsigned int, task_id)
13133821e232SChuck Lever 		__field(unsigned int, client_id)
1314e48f083eSChuck Lever 		__field(u32, xid)
1315e48f083eSChuck Lever 	),
1316e48f083eSChuck Lever 
1317e48f083eSChuck Lever 	TP_fast_assign(
13183821e232SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
13193821e232SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
13203821e232SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
1321e48f083eSChuck Lever 	),
1322e48f083eSChuck Lever 
13233821e232SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x",
13243821e232SChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid
1325e48f083eSChuck Lever 	)
1326e48f083eSChuck Lever );
1327e48f083eSChuck Lever 
13283821e232SChuck Lever TRACE_EVENT(xprtrdma_err_unrecognized,
13293821e232SChuck Lever 	TP_PROTO(
13303821e232SChuck Lever 		const struct rpc_rqst *rqst,
13313821e232SChuck Lever 		__be32 *procedure
13323821e232SChuck Lever 	),
13333821e232SChuck Lever 
13343821e232SChuck Lever 	TP_ARGS(rqst, procedure),
13353821e232SChuck Lever 
13363821e232SChuck Lever 	TP_STRUCT__entry(
13373821e232SChuck Lever 		__field(unsigned int, task_id)
13383821e232SChuck Lever 		__field(unsigned int, client_id)
13393821e232SChuck Lever 		__field(u32, xid)
13403821e232SChuck Lever 		__field(u32, procedure)
13413821e232SChuck Lever 	),
13423821e232SChuck Lever 
13433821e232SChuck Lever 	TP_fast_assign(
13443821e232SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
13453821e232SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
13463821e232SChuck Lever 		__entry->procedure = be32_to_cpup(procedure);
13473821e232SChuck Lever 	),
13483821e232SChuck Lever 
13493821e232SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x procedure=%u",
13503821e232SChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
13513821e232SChuck Lever 		__entry->procedure
13523821e232SChuck Lever 	)
13533821e232SChuck Lever );
1354e48f083eSChuck Lever 
1355e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_fixup,
1356e11b7c96SChuck Lever 	TP_PROTO(
1357e11b7c96SChuck Lever 		const struct rpc_rqst *rqst,
1358d4957f01SChuck Lever 		unsigned long fixup
1359e11b7c96SChuck Lever 	),
1360e11b7c96SChuck Lever 
1361d4957f01SChuck Lever 	TP_ARGS(rqst, fixup),
1362e11b7c96SChuck Lever 
1363e11b7c96SChuck Lever 	TP_STRUCT__entry(
1364e11b7c96SChuck Lever 		__field(unsigned int, task_id)
1365e11b7c96SChuck Lever 		__field(unsigned int, client_id)
1366d4957f01SChuck Lever 		__field(unsigned long, fixup)
1367d4957f01SChuck Lever 		__field(size_t, headlen)
1368d4957f01SChuck Lever 		__field(unsigned int, pagelen)
1369d4957f01SChuck Lever 		__field(size_t, taillen)
1370e11b7c96SChuck Lever 	),
1371e11b7c96SChuck Lever 
1372e11b7c96SChuck Lever 	TP_fast_assign(
1373e11b7c96SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
1374e11b7c96SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
1375d4957f01SChuck Lever 		__entry->fixup = fixup;
1376d4957f01SChuck Lever 		__entry->headlen = rqst->rq_rcv_buf.head[0].iov_len;
1377d4957f01SChuck Lever 		__entry->pagelen = rqst->rq_rcv_buf.page_len;
1378d4957f01SChuck Lever 		__entry->taillen = rqst->rq_rcv_buf.tail[0].iov_len;
1379e11b7c96SChuck Lever 	),
1380e11b7c96SChuck Lever 
1381d4957f01SChuck Lever 	TP_printk("task:%u@%u fixup=%lu xdr=%zu/%u/%zu",
1382d4957f01SChuck Lever 		__entry->task_id, __entry->client_id, __entry->fixup,
1383d4957f01SChuck Lever 		__entry->headlen, __entry->pagelen, __entry->taillen
1384e11b7c96SChuck Lever 	)
1385e11b7c96SChuck Lever );
1386e11b7c96SChuck Lever 
1387e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_decode_seg,
1388e11b7c96SChuck Lever 	TP_PROTO(
1389e11b7c96SChuck Lever 		u32 handle,
1390e11b7c96SChuck Lever 		u32 length,
1391e11b7c96SChuck Lever 		u64 offset
1392e11b7c96SChuck Lever 	),
1393e11b7c96SChuck Lever 
1394e11b7c96SChuck Lever 	TP_ARGS(handle, length, offset),
1395e11b7c96SChuck Lever 
1396e11b7c96SChuck Lever 	TP_STRUCT__entry(
1397e11b7c96SChuck Lever 		__field(u32, handle)
1398e11b7c96SChuck Lever 		__field(u32, length)
1399e11b7c96SChuck Lever 		__field(u64, offset)
1400e11b7c96SChuck Lever 	),
1401e11b7c96SChuck Lever 
1402e11b7c96SChuck Lever 	TP_fast_assign(
1403e11b7c96SChuck Lever 		__entry->handle = handle;
1404e11b7c96SChuck Lever 		__entry->length = length;
1405e11b7c96SChuck Lever 		__entry->offset = offset;
1406e11b7c96SChuck Lever 	),
1407e11b7c96SChuck Lever 
1408e11b7c96SChuck Lever 	TP_printk("%u@0x%016llx:0x%08x",
1409e11b7c96SChuck Lever 		__entry->length, (unsigned long long)__entry->offset,
1410e11b7c96SChuck Lever 		__entry->handle
1411e11b7c96SChuck Lever 	)
1412e11b7c96SChuck Lever );
1413e11b7c96SChuck Lever 
14148e24e191SChuck Lever TRACE_EVENT(xprtrdma_mrs_zap,
14158e24e191SChuck Lever 	TP_PROTO(
14168e24e191SChuck Lever 		const struct rpc_task *task
14178e24e191SChuck Lever 	),
14188e24e191SChuck Lever 
14198e24e191SChuck Lever 	TP_ARGS(task),
14208e24e191SChuck Lever 
14218e24e191SChuck Lever 	TP_STRUCT__entry(
14228e24e191SChuck Lever 		__field(unsigned int, task_id)
14238e24e191SChuck Lever 		__field(unsigned int, client_id)
14248e24e191SChuck Lever 	),
14258e24e191SChuck Lever 
14268e24e191SChuck Lever 	TP_fast_assign(
14278e24e191SChuck Lever 		__entry->task_id = task->tk_pid;
14288e24e191SChuck Lever 		__entry->client_id = task->tk_client->cl_clid;
14298e24e191SChuck Lever 	),
14308e24e191SChuck Lever 
14318e24e191SChuck Lever 	TP_printk("task:%u@%u",
14328e24e191SChuck Lever 		__entry->task_id, __entry->client_id
14338e24e191SChuck Lever 	)
14348e24e191SChuck Lever );
14358e24e191SChuck Lever 
1436fc1eb807SChuck Lever /**
1437fc1eb807SChuck Lever  ** Callback events
1438fc1eb807SChuck Lever  **/
1439fc1eb807SChuck Lever 
1440fc1eb807SChuck Lever TRACE_EVENT(xprtrdma_cb_setup,
1441fc1eb807SChuck Lever 	TP_PROTO(
1442fc1eb807SChuck Lever 		const struct rpcrdma_xprt *r_xprt,
1443fc1eb807SChuck Lever 		unsigned int reqs
1444fc1eb807SChuck Lever 	),
1445fc1eb807SChuck Lever 
1446fc1eb807SChuck Lever 	TP_ARGS(r_xprt, reqs),
1447fc1eb807SChuck Lever 
1448fc1eb807SChuck Lever 	TP_STRUCT__entry(
1449fc1eb807SChuck Lever 		__field(unsigned int, reqs)
1450fc1eb807SChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
1451fc1eb807SChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
1452fc1eb807SChuck Lever 	),
1453fc1eb807SChuck Lever 
1454fc1eb807SChuck Lever 	TP_fast_assign(
1455fc1eb807SChuck Lever 		__entry->reqs = reqs;
1456fc1eb807SChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
1457fc1eb807SChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
1458fc1eb807SChuck Lever 	),
1459fc1eb807SChuck Lever 
146083189d15SChuck Lever 	TP_printk("peer=[%s]:%s %u reqs",
146183189d15SChuck Lever 		__get_str(addr), __get_str(port), __entry->reqs
1462fc1eb807SChuck Lever 	)
1463fc1eb807SChuck Lever );
1464fc1eb807SChuck Lever 
1465d11e9346SChuck Lever DEFINE_CALLBACK_EVENT(call);
1466d11e9346SChuck Lever DEFINE_CALLBACK_EVENT(reply);
146707e10308SChuck Lever 
146898895edbSChuck Lever /**
146998895edbSChuck Lever  ** Server-side RPC/RDMA events
147098895edbSChuck Lever  **/
147198895edbSChuck Lever 
1472e979a173SChuck Lever DECLARE_EVENT_CLASS(svcrdma_accept_class,
1473e979a173SChuck Lever 	TP_PROTO(
1474e979a173SChuck Lever 		const struct svcxprt_rdma *rdma,
1475e979a173SChuck Lever 		long status
1476e979a173SChuck Lever 	),
1477e979a173SChuck Lever 
1478e979a173SChuck Lever 	TP_ARGS(rdma, status),
1479e979a173SChuck Lever 
1480e979a173SChuck Lever 	TP_STRUCT__entry(
1481e979a173SChuck Lever 		__field(long, status)
1482e979a173SChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1483e979a173SChuck Lever 	),
1484e979a173SChuck Lever 
1485e979a173SChuck Lever 	TP_fast_assign(
1486e979a173SChuck Lever 		__entry->status = status;
1487e979a173SChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1488e979a173SChuck Lever 	),
1489e979a173SChuck Lever 
1490e979a173SChuck Lever 	TP_printk("addr=%s status=%ld",
1491e979a173SChuck Lever 		__get_str(addr), __entry->status
1492e979a173SChuck Lever 	)
1493e979a173SChuck Lever );
1494e979a173SChuck Lever 
1495e979a173SChuck Lever #define DEFINE_ACCEPT_EVENT(name) \
1496e979a173SChuck Lever 		DEFINE_EVENT(svcrdma_accept_class, svcrdma_##name##_err, \
1497e979a173SChuck Lever 				TP_PROTO( \
1498e979a173SChuck Lever 					const struct svcxprt_rdma *rdma, \
1499e979a173SChuck Lever 					long status \
1500e979a173SChuck Lever 				), \
1501e979a173SChuck Lever 				TP_ARGS(rdma, status))
1502e979a173SChuck Lever 
1503e979a173SChuck Lever DEFINE_ACCEPT_EVENT(pd);
1504e979a173SChuck Lever DEFINE_ACCEPT_EVENT(qp);
1505e979a173SChuck Lever DEFINE_ACCEPT_EVENT(fabric);
1506e979a173SChuck Lever DEFINE_ACCEPT_EVENT(initdepth);
1507e979a173SChuck Lever DEFINE_ACCEPT_EVENT(accept);
1508e979a173SChuck Lever 
150998895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_MSG);
151098895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_NOMSG);
151198895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_MSGP);
151298895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_DONE);
151398895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_ERROR);
151498895edbSChuck Lever 
151598895edbSChuck Lever #define show_rpcrdma_proc(x)						\
151698895edbSChuck Lever 		__print_symbolic(x,					\
151798895edbSChuck Lever 				{ RDMA_MSG, "RDMA_MSG" },		\
151898895edbSChuck Lever 				{ RDMA_NOMSG, "RDMA_NOMSG" },		\
151998895edbSChuck Lever 				{ RDMA_MSGP, "RDMA_MSGP" },		\
152098895edbSChuck Lever 				{ RDMA_DONE, "RDMA_DONE" },		\
152198895edbSChuck Lever 				{ RDMA_ERROR, "RDMA_ERROR" })
152298895edbSChuck Lever 
152398895edbSChuck Lever TRACE_EVENT(svcrdma_decode_rqst,
152498895edbSChuck Lever 	TP_PROTO(
1525007140eeSChuck Lever 		const struct svc_rdma_recv_ctxt *ctxt,
152698895edbSChuck Lever 		__be32 *p,
152798895edbSChuck Lever 		unsigned int hdrlen
152898895edbSChuck Lever 	),
152998895edbSChuck Lever 
1530007140eeSChuck Lever 	TP_ARGS(ctxt, p, hdrlen),
153198895edbSChuck Lever 
153298895edbSChuck Lever 	TP_STRUCT__entry(
1533007140eeSChuck Lever 		__field(u32, cq_id)
1534007140eeSChuck Lever 		__field(int, completion_id)
153598895edbSChuck Lever 		__field(u32, xid)
153698895edbSChuck Lever 		__field(u32, vers)
153798895edbSChuck Lever 		__field(u32, proc)
153898895edbSChuck Lever 		__field(u32, credits)
153998895edbSChuck Lever 		__field(unsigned int, hdrlen)
154098895edbSChuck Lever 	),
154198895edbSChuck Lever 
154298895edbSChuck Lever 	TP_fast_assign(
1543007140eeSChuck Lever 		__entry->cq_id = ctxt->rc_cid.ci_queue_id;
1544007140eeSChuck Lever 		__entry->completion_id = ctxt->rc_cid.ci_completion_id;
154598895edbSChuck Lever 		__entry->xid = be32_to_cpup(p++);
154698895edbSChuck Lever 		__entry->vers = be32_to_cpup(p++);
154798895edbSChuck Lever 		__entry->credits = be32_to_cpup(p++);
154898895edbSChuck Lever 		__entry->proc = be32_to_cpup(p);
154998895edbSChuck Lever 		__entry->hdrlen = hdrlen;
155098895edbSChuck Lever 	),
155198895edbSChuck Lever 
1552007140eeSChuck Lever 	TP_printk("cq.id=%u cid=%d xid=0x%08x vers=%u credits=%u proc=%s hdrlen=%u",
1553007140eeSChuck Lever 		__entry->cq_id, __entry->completion_id,
155498895edbSChuck Lever 		__entry->xid, __entry->vers, __entry->credits,
155598895edbSChuck Lever 		show_rpcrdma_proc(__entry->proc), __entry->hdrlen)
155698895edbSChuck Lever );
155798895edbSChuck Lever 
155827ce6294SChuck Lever TRACE_EVENT(svcrdma_decode_short_err,
155998895edbSChuck Lever 	TP_PROTO(
1560007140eeSChuck Lever 		const struct svc_rdma_recv_ctxt *ctxt,
156198895edbSChuck Lever 		unsigned int hdrlen
156298895edbSChuck Lever 	),
156398895edbSChuck Lever 
1564007140eeSChuck Lever 	TP_ARGS(ctxt, hdrlen),
156598895edbSChuck Lever 
156698895edbSChuck Lever 	TP_STRUCT__entry(
1567007140eeSChuck Lever 		__field(u32, cq_id)
1568007140eeSChuck Lever 		__field(int, completion_id)
156998895edbSChuck Lever 		__field(unsigned int, hdrlen)
157098895edbSChuck Lever 	),
157198895edbSChuck Lever 
157298895edbSChuck Lever 	TP_fast_assign(
1573007140eeSChuck Lever 		__entry->cq_id = ctxt->rc_cid.ci_queue_id;
1574007140eeSChuck Lever 		__entry->completion_id = ctxt->rc_cid.ci_completion_id;
157598895edbSChuck Lever 		__entry->hdrlen = hdrlen;
157698895edbSChuck Lever 	),
157798895edbSChuck Lever 
1578007140eeSChuck Lever 	TP_printk("cq.id=%u cid=%d hdrlen=%u",
1579007140eeSChuck Lever 		__entry->cq_id, __entry->completion_id,
1580007140eeSChuck Lever 		__entry->hdrlen)
158198895edbSChuck Lever );
158298895edbSChuck Lever 
158398895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_badreq_event,
158498895edbSChuck Lever 	TP_PROTO(
1585007140eeSChuck Lever 		const struct svc_rdma_recv_ctxt *ctxt,
158698895edbSChuck Lever 		__be32 *p
158798895edbSChuck Lever 	),
158898895edbSChuck Lever 
1589007140eeSChuck Lever 	TP_ARGS(ctxt, p),
159098895edbSChuck Lever 
159198895edbSChuck Lever 	TP_STRUCT__entry(
1592007140eeSChuck Lever 		__field(u32, cq_id)
1593007140eeSChuck Lever 		__field(int, completion_id)
159498895edbSChuck Lever 		__field(u32, xid)
159598895edbSChuck Lever 		__field(u32, vers)
159698895edbSChuck Lever 		__field(u32, proc)
159798895edbSChuck Lever 		__field(u32, credits)
159898895edbSChuck Lever 	),
159998895edbSChuck Lever 
160098895edbSChuck Lever 	TP_fast_assign(
1601007140eeSChuck Lever 		__entry->cq_id = ctxt->rc_cid.ci_queue_id;
1602007140eeSChuck Lever 		__entry->completion_id = ctxt->rc_cid.ci_completion_id;
160398895edbSChuck Lever 		__entry->xid = be32_to_cpup(p++);
160498895edbSChuck Lever 		__entry->vers = be32_to_cpup(p++);
160598895edbSChuck Lever 		__entry->credits = be32_to_cpup(p++);
160698895edbSChuck Lever 		__entry->proc = be32_to_cpup(p);
160798895edbSChuck Lever 	),
160898895edbSChuck Lever 
1609007140eeSChuck Lever 	TP_printk("cq.id=%u cid=%d xid=0x%08x vers=%u credits=%u proc=%u",
1610007140eeSChuck Lever 		__entry->cq_id, __entry->completion_id,
161198895edbSChuck Lever 		__entry->xid, __entry->vers, __entry->credits, __entry->proc)
161298895edbSChuck Lever );
161398895edbSChuck Lever 
161498895edbSChuck Lever #define DEFINE_BADREQ_EVENT(name)					\
161527ce6294SChuck Lever 		DEFINE_EVENT(svcrdma_badreq_event,			\
161627ce6294SChuck Lever 			     svcrdma_decode_##name##_err,		\
161798895edbSChuck Lever 				TP_PROTO(				\
1618007140eeSChuck Lever 					const struct svc_rdma_recv_ctxt *ctxt,	\
161998895edbSChuck Lever 					__be32 *p			\
162098895edbSChuck Lever 				),					\
1621007140eeSChuck Lever 				TP_ARGS(ctxt, p))
162298895edbSChuck Lever 
162398895edbSChuck Lever DEFINE_BADREQ_EVENT(badvers);
162498895edbSChuck Lever DEFINE_BADREQ_EVENT(drop);
162598895edbSChuck Lever DEFINE_BADREQ_EVENT(badproc);
162698895edbSChuck Lever DEFINE_BADREQ_EVENT(parse);
162798895edbSChuck Lever 
16286911f3e1SChuck Lever TRACE_EVENT(svcrdma_encode_wseg,
16296911f3e1SChuck Lever 	TP_PROTO(
16306911f3e1SChuck Lever 		const struct svc_rdma_send_ctxt *ctxt,
16316911f3e1SChuck Lever 		u32 segno,
16326911f3e1SChuck Lever 		u32 handle,
16336911f3e1SChuck Lever 		u32 length,
16346911f3e1SChuck Lever 		u64 offset
16356911f3e1SChuck Lever 	),
16366911f3e1SChuck Lever 
16376911f3e1SChuck Lever 	TP_ARGS(ctxt, segno, handle, length, offset),
16386911f3e1SChuck Lever 
16396911f3e1SChuck Lever 	TP_STRUCT__entry(
16406911f3e1SChuck Lever 		__field(u32, cq_id)
16416911f3e1SChuck Lever 		__field(int, completion_id)
16426911f3e1SChuck Lever 		__field(u32, segno)
16436911f3e1SChuck Lever 		__field(u32, handle)
16446911f3e1SChuck Lever 		__field(u32, length)
16456911f3e1SChuck Lever 		__field(u64, offset)
16466911f3e1SChuck Lever 	),
16476911f3e1SChuck Lever 
16486911f3e1SChuck Lever 	TP_fast_assign(
16496911f3e1SChuck Lever 		__entry->cq_id = ctxt->sc_cid.ci_queue_id;
16506911f3e1SChuck Lever 		__entry->completion_id = ctxt->sc_cid.ci_completion_id;
16516911f3e1SChuck Lever 		__entry->segno = segno;
16526911f3e1SChuck Lever 		__entry->handle = handle;
16536911f3e1SChuck Lever 		__entry->length = length;
16546911f3e1SChuck Lever 		__entry->offset = offset;
16556911f3e1SChuck Lever 	),
16566911f3e1SChuck Lever 
16576911f3e1SChuck Lever 	TP_printk("cq_id=%u cid=%d segno=%u %u@0x%016llx:0x%08x",
16586911f3e1SChuck Lever 		__entry->cq_id, __entry->completion_id,
16596911f3e1SChuck Lever 		__entry->segno, __entry->length,
16606911f3e1SChuck Lever 		(unsigned long long)__entry->offset, __entry->handle
16616911f3e1SChuck Lever 	)
16626911f3e1SChuck Lever );
16636911f3e1SChuck Lever 
166478147ca8SChuck Lever TRACE_EVENT(svcrdma_decode_rseg,
166578147ca8SChuck Lever 	TP_PROTO(
166678147ca8SChuck Lever 		const struct rpc_rdma_cid *cid,
166778147ca8SChuck Lever 		const struct svc_rdma_chunk *chunk,
166878147ca8SChuck Lever 		const struct svc_rdma_segment *segment
166978147ca8SChuck Lever 	),
167078147ca8SChuck Lever 
167178147ca8SChuck Lever 	TP_ARGS(cid, chunk, segment),
167278147ca8SChuck Lever 
167378147ca8SChuck Lever 	TP_STRUCT__entry(
167478147ca8SChuck Lever 		__field(u32, cq_id)
167578147ca8SChuck Lever 		__field(int, completion_id)
167678147ca8SChuck Lever 		__field(u32, segno)
167778147ca8SChuck Lever 		__field(u32, position)
167878147ca8SChuck Lever 		__field(u32, handle)
167978147ca8SChuck Lever 		__field(u32, length)
168078147ca8SChuck Lever 		__field(u64, offset)
168178147ca8SChuck Lever 	),
168278147ca8SChuck Lever 
168378147ca8SChuck Lever 	TP_fast_assign(
168478147ca8SChuck Lever 		__entry->cq_id = cid->ci_queue_id;
168578147ca8SChuck Lever 		__entry->completion_id = cid->ci_completion_id;
168678147ca8SChuck Lever 		__entry->segno = chunk->ch_segcount;
168778147ca8SChuck Lever 		__entry->position = chunk->ch_position;
168878147ca8SChuck Lever 		__entry->handle = segment->rs_handle;
168978147ca8SChuck Lever 		__entry->length = segment->rs_length;
169078147ca8SChuck Lever 		__entry->offset = segment->rs_offset;
169178147ca8SChuck Lever 	),
169278147ca8SChuck Lever 
169378147ca8SChuck Lever 	TP_printk("cq_id=%u cid=%d segno=%u position=%u %u@0x%016llx:0x%08x",
169478147ca8SChuck Lever 		__entry->cq_id, __entry->completion_id,
169578147ca8SChuck Lever 		__entry->segno, __entry->position, __entry->length,
169678147ca8SChuck Lever 		(unsigned long long)__entry->offset, __entry->handle
169778147ca8SChuck Lever 	)
169878147ca8SChuck Lever );
169978147ca8SChuck Lever 
170078147ca8SChuck Lever TRACE_EVENT(svcrdma_decode_wseg,
170178147ca8SChuck Lever 	TP_PROTO(
170278147ca8SChuck Lever 		const struct rpc_rdma_cid *cid,
170378147ca8SChuck Lever 		const struct svc_rdma_chunk *chunk,
170478147ca8SChuck Lever 		u32 segno
170578147ca8SChuck Lever 	),
170678147ca8SChuck Lever 
170778147ca8SChuck Lever 	TP_ARGS(cid, chunk, segno),
170878147ca8SChuck Lever 
170978147ca8SChuck Lever 	TP_STRUCT__entry(
171078147ca8SChuck Lever 		__field(u32, cq_id)
171178147ca8SChuck Lever 		__field(int, completion_id)
171278147ca8SChuck Lever 		__field(u32, segno)
171378147ca8SChuck Lever 		__field(u32, handle)
171478147ca8SChuck Lever 		__field(u32, length)
171578147ca8SChuck Lever 		__field(u64, offset)
171678147ca8SChuck Lever 	),
171778147ca8SChuck Lever 
171878147ca8SChuck Lever 	TP_fast_assign(
171978147ca8SChuck Lever 		const struct svc_rdma_segment *segment =
172078147ca8SChuck Lever 			&chunk->ch_segments[segno];
172178147ca8SChuck Lever 
172278147ca8SChuck Lever 		__entry->cq_id = cid->ci_queue_id;
172378147ca8SChuck Lever 		__entry->completion_id = cid->ci_completion_id;
172478147ca8SChuck Lever 		__entry->segno = segno;
172578147ca8SChuck Lever 		__entry->handle = segment->rs_handle;
172678147ca8SChuck Lever 		__entry->length = segment->rs_length;
172778147ca8SChuck Lever 		__entry->offset = segment->rs_offset;
172878147ca8SChuck Lever 	),
172978147ca8SChuck Lever 
173078147ca8SChuck Lever 	TP_printk("cq_id=%u cid=%d segno=%u %u@0x%016llx:0x%08x",
173178147ca8SChuck Lever 		__entry->cq_id, __entry->completion_id,
173278147ca8SChuck Lever 		__entry->segno, __entry->length,
173378147ca8SChuck Lever 		(unsigned long long)__entry->offset, __entry->handle
173478147ca8SChuck Lever 	)
173578147ca8SChuck Lever );
173678147ca8SChuck Lever 
173798895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_error_event,
173898895edbSChuck Lever 	TP_PROTO(
173998895edbSChuck Lever 		__be32 xid
174098895edbSChuck Lever 	),
174198895edbSChuck Lever 
174298895edbSChuck Lever 	TP_ARGS(xid),
174398895edbSChuck Lever 
174498895edbSChuck Lever 	TP_STRUCT__entry(
174598895edbSChuck Lever 		__field(u32, xid)
174698895edbSChuck Lever 	),
174798895edbSChuck Lever 
174898895edbSChuck Lever 	TP_fast_assign(
174998895edbSChuck Lever 		__entry->xid = be32_to_cpu(xid);
175098895edbSChuck Lever 	),
175198895edbSChuck Lever 
175298895edbSChuck Lever 	TP_printk("xid=0x%08x",
175398895edbSChuck Lever 		__entry->xid
175498895edbSChuck Lever 	)
175598895edbSChuck Lever );
175698895edbSChuck Lever 
175798895edbSChuck Lever #define DEFINE_ERROR_EVENT(name)					\
175898895edbSChuck Lever 		DEFINE_EVENT(svcrdma_error_event, svcrdma_err_##name,	\
175998895edbSChuck Lever 				TP_PROTO(				\
176098895edbSChuck Lever 					__be32 xid			\
176198895edbSChuck Lever 				),					\
176298895edbSChuck Lever 				TP_ARGS(xid))
176398895edbSChuck Lever 
176498895edbSChuck Lever DEFINE_ERROR_EVENT(vers);
176598895edbSChuck Lever DEFINE_ERROR_EVENT(chunk);
176698895edbSChuck Lever 
1767bd2abef3SChuck Lever /**
1768bd2abef3SChuck Lever  ** Server-side RDMA API events
1769bd2abef3SChuck Lever  **/
1770bd2abef3SChuck Lever 
1771832b2cb9SChuck Lever DECLARE_EVENT_CLASS(svcrdma_dma_map_class,
1772bd2abef3SChuck Lever 	TP_PROTO(
1773bd2abef3SChuck Lever 		const struct svcxprt_rdma *rdma,
1774832b2cb9SChuck Lever 		u64 dma_addr,
1775832b2cb9SChuck Lever 		u32 length
1776bd2abef3SChuck Lever 	),
1777bd2abef3SChuck Lever 
1778832b2cb9SChuck Lever 	TP_ARGS(rdma, dma_addr, length),
1779bd2abef3SChuck Lever 
1780bd2abef3SChuck Lever 	TP_STRUCT__entry(
1781832b2cb9SChuck Lever 		__field(u64, dma_addr)
1782832b2cb9SChuck Lever 		__field(u32, length)
1783bd2abef3SChuck Lever 		__string(device, rdma->sc_cm_id->device->name)
1784bd2abef3SChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1785bd2abef3SChuck Lever 	),
1786bd2abef3SChuck Lever 
1787bd2abef3SChuck Lever 	TP_fast_assign(
1788832b2cb9SChuck Lever 		__entry->dma_addr = dma_addr;
1789832b2cb9SChuck Lever 		__entry->length = length;
1790bd2abef3SChuck Lever 		__assign_str(device, rdma->sc_cm_id->device->name);
1791bd2abef3SChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1792bd2abef3SChuck Lever 	),
1793bd2abef3SChuck Lever 
1794832b2cb9SChuck Lever 	TP_printk("addr=%s device=%s dma_addr=%llu length=%u",
1795832b2cb9SChuck Lever 		__get_str(addr), __get_str(device),
1796832b2cb9SChuck Lever 		__entry->dma_addr, __entry->length
1797bd2abef3SChuck Lever 	)
1798bd2abef3SChuck Lever );
1799bd2abef3SChuck Lever 
1800832b2cb9SChuck Lever #define DEFINE_SVC_DMA_EVENT(name)					\
1801832b2cb9SChuck Lever 		DEFINE_EVENT(svcrdma_dma_map_class, svcrdma_##name,	\
1802832b2cb9SChuck Lever 				TP_PROTO(				\
1803832b2cb9SChuck Lever 					const struct svcxprt_rdma *rdma,\
1804832b2cb9SChuck Lever 					u64 dma_addr,			\
1805832b2cb9SChuck Lever 					u32 length			\
1806832b2cb9SChuck Lever 				),					\
1807832b2cb9SChuck Lever 				TP_ARGS(rdma, dma_addr, length))
1808832b2cb9SChuck Lever 
1809832b2cb9SChuck Lever DEFINE_SVC_DMA_EVENT(dma_map_page);
18102371bcc0SChuck Lever DEFINE_SVC_DMA_EVENT(dma_map_err);
1811832b2cb9SChuck Lever DEFINE_SVC_DMA_EVENT(dma_unmap_page);
1812832b2cb9SChuck Lever 
18132abfbe7eSChuck Lever TRACE_EVENT(svcrdma_dma_map_rw_err,
1814bd2abef3SChuck Lever 	TP_PROTO(
1815bd2abef3SChuck Lever 		const struct svcxprt_rdma *rdma,
18162abfbe7eSChuck Lever 		unsigned int nents,
1817bd2abef3SChuck Lever 		int status
1818bd2abef3SChuck Lever 	),
1819bd2abef3SChuck Lever 
18202abfbe7eSChuck Lever 	TP_ARGS(rdma, nents, status),
1821bd2abef3SChuck Lever 
1822bd2abef3SChuck Lever 	TP_STRUCT__entry(
1823bd2abef3SChuck Lever 		__field(int, status)
18242abfbe7eSChuck Lever 		__field(unsigned int, nents)
1825bd2abef3SChuck Lever 		__string(device, rdma->sc_cm_id->device->name)
1826bd2abef3SChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1827bd2abef3SChuck Lever 	),
1828bd2abef3SChuck Lever 
1829bd2abef3SChuck Lever 	TP_fast_assign(
1830bd2abef3SChuck Lever 		__entry->status = status;
18312abfbe7eSChuck Lever 		__entry->nents = nents;
1832bd2abef3SChuck Lever 		__assign_str(device, rdma->sc_cm_id->device->name);
1833bd2abef3SChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1834bd2abef3SChuck Lever 	),
1835bd2abef3SChuck Lever 
18362abfbe7eSChuck Lever 	TP_printk("addr=%s device=%s nents=%u status=%d",
18372abfbe7eSChuck Lever 		__get_str(addr), __get_str(device), __entry->nents,
18382abfbe7eSChuck Lever 		__entry->status
1839bd2abef3SChuck Lever 	)
1840bd2abef3SChuck Lever );
1841bd2abef3SChuck Lever 
1842f4e53e1cSChuck Lever TRACE_EVENT(svcrdma_no_rwctx_err,
1843f4e53e1cSChuck Lever 	TP_PROTO(
1844f4e53e1cSChuck Lever 		const struct svcxprt_rdma *rdma,
1845f4e53e1cSChuck Lever 		unsigned int num_sges
1846f4e53e1cSChuck Lever 	),
1847f4e53e1cSChuck Lever 
1848f4e53e1cSChuck Lever 	TP_ARGS(rdma, num_sges),
1849f4e53e1cSChuck Lever 
1850f4e53e1cSChuck Lever 	TP_STRUCT__entry(
1851f4e53e1cSChuck Lever 		__field(unsigned int, num_sges)
1852f4e53e1cSChuck Lever 		__string(device, rdma->sc_cm_id->device->name)
1853f4e53e1cSChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1854f4e53e1cSChuck Lever 	),
1855f4e53e1cSChuck Lever 
1856f4e53e1cSChuck Lever 	TP_fast_assign(
1857f4e53e1cSChuck Lever 		__entry->num_sges = num_sges;
1858f4e53e1cSChuck Lever 		__assign_str(device, rdma->sc_cm_id->device->name);
1859f4e53e1cSChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1860f4e53e1cSChuck Lever 	),
1861f4e53e1cSChuck Lever 
1862f4e53e1cSChuck Lever 	TP_printk("addr=%s device=%s num_sges=%d",
1863f4e53e1cSChuck Lever 		__get_str(addr), __get_str(device), __entry->num_sges
1864f4e53e1cSChuck Lever 	)
1865f4e53e1cSChuck Lever );
1866f4e53e1cSChuck Lever 
18679d200638SChuck Lever TRACE_EVENT(svcrdma_page_overrun_err,
18689d200638SChuck Lever 	TP_PROTO(
18699d200638SChuck Lever 		const struct svcxprt_rdma *rdma,
18709d200638SChuck Lever 		const struct svc_rqst *rqst,
18719d200638SChuck Lever 		unsigned int pageno
18729d200638SChuck Lever 	),
18739d200638SChuck Lever 
18749d200638SChuck Lever 	TP_ARGS(rdma, rqst, pageno),
18759d200638SChuck Lever 
18769d200638SChuck Lever 	TP_STRUCT__entry(
18779d200638SChuck Lever 		__field(unsigned int, pageno)
18789d200638SChuck Lever 		__field(u32, xid)
18799d200638SChuck Lever 		__string(device, rdma->sc_cm_id->device->name)
18809d200638SChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
18819d200638SChuck Lever 	),
18829d200638SChuck Lever 
18839d200638SChuck Lever 	TP_fast_assign(
18849d200638SChuck Lever 		__entry->pageno = pageno;
18859d200638SChuck Lever 		__entry->xid = __be32_to_cpu(rqst->rq_xid);
18869d200638SChuck Lever 		__assign_str(device, rdma->sc_cm_id->device->name);
18879d200638SChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
18889d200638SChuck Lever 	),
18899d200638SChuck Lever 
18909d200638SChuck Lever 	TP_printk("addr=%s device=%s xid=0x%08x pageno=%u", __get_str(addr),
18919d200638SChuck Lever 		__get_str(device), __entry->xid, __entry->pageno
18929d200638SChuck Lever 	)
18939d200638SChuck Lever );
18949d200638SChuck Lever 
1895dbc17acdSChuck Lever TRACE_EVENT(svcrdma_small_wrch_err,
1896dbc17acdSChuck Lever 	TP_PROTO(
1897dbc17acdSChuck Lever 		const struct svcxprt_rdma *rdma,
1898dbc17acdSChuck Lever 		unsigned int remaining,
1899dbc17acdSChuck Lever 		unsigned int seg_no,
1900dbc17acdSChuck Lever 		unsigned int num_segs
1901dbc17acdSChuck Lever 	),
1902dbc17acdSChuck Lever 
1903dbc17acdSChuck Lever 	TP_ARGS(rdma, remaining, seg_no, num_segs),
1904dbc17acdSChuck Lever 
1905dbc17acdSChuck Lever 	TP_STRUCT__entry(
1906dbc17acdSChuck Lever 		__field(unsigned int, remaining)
1907dbc17acdSChuck Lever 		__field(unsigned int, seg_no)
1908dbc17acdSChuck Lever 		__field(unsigned int, num_segs)
1909dbc17acdSChuck Lever 		__string(device, rdma->sc_cm_id->device->name)
1910dbc17acdSChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1911dbc17acdSChuck Lever 	),
1912dbc17acdSChuck Lever 
1913dbc17acdSChuck Lever 	TP_fast_assign(
1914dbc17acdSChuck Lever 		__entry->remaining = remaining;
1915dbc17acdSChuck Lever 		__entry->seg_no = seg_no;
1916dbc17acdSChuck Lever 		__entry->num_segs = num_segs;
1917dbc17acdSChuck Lever 		__assign_str(device, rdma->sc_cm_id->device->name);
1918dbc17acdSChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1919dbc17acdSChuck Lever 	),
1920dbc17acdSChuck Lever 
1921dbc17acdSChuck Lever 	TP_printk("addr=%s device=%s remaining=%u seg_no=%u num_segs=%u",
1922dbc17acdSChuck Lever 		__get_str(addr), __get_str(device), __entry->remaining,
1923dbc17acdSChuck Lever 		__entry->seg_no, __entry->num_segs
1924dbc17acdSChuck Lever 	)
1925dbc17acdSChuck Lever );
1926dbc17acdSChuck Lever 
19270dabe948SChuck Lever TRACE_EVENT(svcrdma_send_pullup,
19280dabe948SChuck Lever 	TP_PROTO(
19299d0b09d5SChuck Lever 		const struct svc_rdma_send_ctxt *ctxt,
19309d0b09d5SChuck Lever 		unsigned int msglen
19310dabe948SChuck Lever 	),
19320dabe948SChuck Lever 
19339d0b09d5SChuck Lever 	TP_ARGS(ctxt, msglen),
19340dabe948SChuck Lever 
19350dabe948SChuck Lever 	TP_STRUCT__entry(
19369d0b09d5SChuck Lever 		__field(u32, cq_id)
19379d0b09d5SChuck Lever 		__field(int, completion_id)
19389d0b09d5SChuck Lever 		__field(unsigned int, hdrlen)
19399d0b09d5SChuck Lever 		__field(unsigned int, msglen)
19400dabe948SChuck Lever 	),
19410dabe948SChuck Lever 
19420dabe948SChuck Lever 	TP_fast_assign(
19439d0b09d5SChuck Lever 		__entry->cq_id = ctxt->sc_cid.ci_queue_id;
19449d0b09d5SChuck Lever 		__entry->completion_id = ctxt->sc_cid.ci_completion_id;
19459d0b09d5SChuck Lever 		__entry->hdrlen = ctxt->sc_hdrbuf.len,
19469d0b09d5SChuck Lever 		__entry->msglen = msglen;
19470dabe948SChuck Lever 	),
19480dabe948SChuck Lever 
19499d0b09d5SChuck Lever 	TP_printk("cq_id=%u cid=%d hdr=%u msg=%u (total %u)",
19509d0b09d5SChuck Lever 		__entry->cq_id, __entry->completion_id,
19519d0b09d5SChuck Lever 		__entry->hdrlen, __entry->msglen,
19529d0b09d5SChuck Lever 		__entry->hdrlen + __entry->msglen)
19530dabe948SChuck Lever );
19540dabe948SChuck Lever 
19553f8f25c6SChuck Lever TRACE_EVENT(svcrdma_send_err,
1956bd2abef3SChuck Lever 	TP_PROTO(
1957bd2abef3SChuck Lever 		const struct svc_rqst *rqst,
1958bd2abef3SChuck Lever 		int status
1959bd2abef3SChuck Lever 	),
1960bd2abef3SChuck Lever 
1961bd2abef3SChuck Lever 	TP_ARGS(rqst, status),
1962bd2abef3SChuck Lever 
1963bd2abef3SChuck Lever 	TP_STRUCT__entry(
1964bd2abef3SChuck Lever 		__field(int, status)
1965bd2abef3SChuck Lever 		__field(u32, xid)
1966bd2abef3SChuck Lever 		__string(addr, rqst->rq_xprt->xpt_remotebuf)
1967bd2abef3SChuck Lever 	),
1968bd2abef3SChuck Lever 
1969bd2abef3SChuck Lever 	TP_fast_assign(
1970bd2abef3SChuck Lever 		__entry->status = status;
1971bd2abef3SChuck Lever 		__entry->xid = __be32_to_cpu(rqst->rq_xid);
1972bd2abef3SChuck Lever 		__assign_str(addr, rqst->rq_xprt->xpt_remotebuf);
1973bd2abef3SChuck Lever 	),
1974bd2abef3SChuck Lever 
19753f8f25c6SChuck Lever 	TP_printk("addr=%s xid=0x%08x status=%d", __get_str(addr),
1976bd2abef3SChuck Lever 		__entry->xid, __entry->status
1977bd2abef3SChuck Lever 	)
1978bd2abef3SChuck Lever );
1979bd2abef3SChuck Lever 
1980bd2abef3SChuck Lever TRACE_EVENT(svcrdma_post_send,
1981bd2abef3SChuck Lever 	TP_PROTO(
198217f70f8dSChuck Lever 		const struct svc_rdma_send_ctxt *ctxt
1983bd2abef3SChuck Lever 	),
1984bd2abef3SChuck Lever 
198517f70f8dSChuck Lever 	TP_ARGS(ctxt),
1986bd2abef3SChuck Lever 
1987bd2abef3SChuck Lever 	TP_STRUCT__entry(
198817f70f8dSChuck Lever 		__field(u32, cq_id)
198917f70f8dSChuck Lever 		__field(int, completion_id)
1990bd2abef3SChuck Lever 		__field(unsigned int, num_sge)
1991bd2abef3SChuck Lever 		__field(u32, inv_rkey)
1992bd2abef3SChuck Lever 	),
1993bd2abef3SChuck Lever 
1994bd2abef3SChuck Lever 	TP_fast_assign(
199517f70f8dSChuck Lever 		const struct ib_send_wr *wr = &ctxt->sc_send_wr;
199617f70f8dSChuck Lever 
199717f70f8dSChuck Lever 		__entry->cq_id = ctxt->sc_cid.ci_queue_id;
199817f70f8dSChuck Lever 		__entry->completion_id = ctxt->sc_cid.ci_completion_id;
1999bd2abef3SChuck Lever 		__entry->num_sge = wr->num_sge;
2000bd2abef3SChuck Lever 		__entry->inv_rkey = (wr->opcode == IB_WR_SEND_WITH_INV) ?
2001bd2abef3SChuck Lever 					wr->ex.invalidate_rkey : 0;
2002bd2abef3SChuck Lever 	),
2003bd2abef3SChuck Lever 
200417f70f8dSChuck Lever 	TP_printk("cq_id=%u cid=%d num_sge=%u inv_rkey=0x%08x",
200517f70f8dSChuck Lever 		__entry->cq_id, __entry->completion_id,
200617f70f8dSChuck Lever 		__entry->num_sge, __entry->inv_rkey
2007bd2abef3SChuck Lever 	)
2008bd2abef3SChuck Lever );
2009bd2abef3SChuck Lever 
2010*eef2d8d4SChuck Lever DEFINE_SEND_COMPLETION_EVENT(svcrdma_wc_send);
2011*eef2d8d4SChuck Lever DEFINE_SEND_FLUSH_EVENT(svcrdma_wc_send_flush);
2012*eef2d8d4SChuck Lever DEFINE_SEND_FLUSH_EVENT(svcrdma_wc_send_err);
2013bd2abef3SChuck Lever 
2014bd2abef3SChuck Lever TRACE_EVENT(svcrdma_post_recv,
2015bd2abef3SChuck Lever 	TP_PROTO(
20169b3bcf8cSChuck Lever 		const struct svc_rdma_recv_ctxt *ctxt
2017bd2abef3SChuck Lever 	),
2018bd2abef3SChuck Lever 
20199b3bcf8cSChuck Lever 	TP_ARGS(ctxt),
2020bd2abef3SChuck Lever 
2021bd2abef3SChuck Lever 	TP_STRUCT__entry(
20229b3bcf8cSChuck Lever 		__field(u32, cq_id)
20239b3bcf8cSChuck Lever 		__field(int, completion_id)
2024bd2abef3SChuck Lever 	),
2025bd2abef3SChuck Lever 
2026bd2abef3SChuck Lever 	TP_fast_assign(
20279b3bcf8cSChuck Lever 		__entry->cq_id = ctxt->rc_cid.ci_queue_id;
20289b3bcf8cSChuck Lever 		__entry->completion_id = ctxt->rc_cid.ci_completion_id;
2029bd2abef3SChuck Lever 	),
2030bd2abef3SChuck Lever 
20319b3bcf8cSChuck Lever 	TP_printk("cq.id=%d cid=%d",
20329b3bcf8cSChuck Lever 		__entry->cq_id, __entry->completion_id
2033bd2abef3SChuck Lever 	)
2034bd2abef3SChuck Lever );
2035bd2abef3SChuck Lever 
20368dcc5721SChuck Lever DEFINE_RECEIVE_SUCCESS_EVENT(svcrdma_wc_recv);
20378dcc5721SChuck Lever DEFINE_RECEIVE_FLUSH_EVENT(svcrdma_wc_recv_flush);
20388dcc5721SChuck Lever DEFINE_RECEIVE_FLUSH_EVENT(svcrdma_wc_recv_err);
20399b3bcf8cSChuck Lever 
20409b3bcf8cSChuck Lever TRACE_EVENT(svcrdma_rq_post_err,
2041bd2abef3SChuck Lever 	TP_PROTO(
20429b3bcf8cSChuck Lever 		const struct svcxprt_rdma *rdma,
20439b3bcf8cSChuck Lever 		int status
2044bd2abef3SChuck Lever 	),
2045bd2abef3SChuck Lever 
20469b3bcf8cSChuck Lever 	TP_ARGS(rdma, status),
2047bd2abef3SChuck Lever 
2048bd2abef3SChuck Lever 	TP_STRUCT__entry(
20499b3bcf8cSChuck Lever 		__field(int, status)
20509b3bcf8cSChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
2051bd2abef3SChuck Lever 	),
2052bd2abef3SChuck Lever 
2053bd2abef3SChuck Lever 	TP_fast_assign(
20549b3bcf8cSChuck Lever 		__entry->status = status;
20559b3bcf8cSChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
2056bd2abef3SChuck Lever 	),
2057bd2abef3SChuck Lever 
20589b3bcf8cSChuck Lever 	TP_printk("addr=%s status=%d",
20599b3bcf8cSChuck Lever 		__get_str(addr), __entry->status
2060bd2abef3SChuck Lever 	)
2061bd2abef3SChuck Lever );
2062bd2abef3SChuck Lever 
2063b704be09SChuck Lever DECLARE_EVENT_CLASS(svcrdma_post_chunk_class,
2064bd2abef3SChuck Lever 	TP_PROTO(
20656787f0beSChuck Lever 		const struct rpc_rdma_cid *cid,
2066e28b4fc6SChuck Lever 		int sqecount
2067bd2abef3SChuck Lever 	),
2068bd2abef3SChuck Lever 
20696787f0beSChuck Lever 	TP_ARGS(cid, sqecount),
2070bd2abef3SChuck Lever 
2071bd2abef3SChuck Lever 	TP_STRUCT__entry(
20726787f0beSChuck Lever 		__field(u32, cq_id)
20736787f0beSChuck Lever 		__field(int, completion_id)
2074bd2abef3SChuck Lever 		__field(int, sqecount)
2075bd2abef3SChuck Lever 	),
2076bd2abef3SChuck Lever 
2077bd2abef3SChuck Lever 	TP_fast_assign(
20786787f0beSChuck Lever 		__entry->cq_id = cid->ci_queue_id;
20796787f0beSChuck Lever 		__entry->completion_id = cid->ci_completion_id;
2080bd2abef3SChuck Lever 		__entry->sqecount = sqecount;
2081bd2abef3SChuck Lever 	),
2082bd2abef3SChuck Lever 
20836787f0beSChuck Lever 	TP_printk("cq.id=%u cid=%d sqecount=%d",
20846787f0beSChuck Lever 		__entry->cq_id, __entry->completion_id,
20856787f0beSChuck Lever 		__entry->sqecount
2086bd2abef3SChuck Lever 	)
2087bd2abef3SChuck Lever );
2088bd2abef3SChuck Lever 
2089b704be09SChuck Lever #define DEFINE_POST_CHUNK_EVENT(name)					\
2090b704be09SChuck Lever 		DEFINE_EVENT(svcrdma_post_chunk_class,			\
2091b704be09SChuck Lever 				svcrdma_post_##name##_chunk,		\
2092b704be09SChuck Lever 				TP_PROTO(				\
2093b704be09SChuck Lever 					const struct rpc_rdma_cid *cid,	\
2094b704be09SChuck Lever 					int sqecount			\
2095b704be09SChuck Lever 				),					\
2096b704be09SChuck Lever 				TP_ARGS(cid, sqecount))
2097b704be09SChuck Lever 
2098b704be09SChuck Lever DEFINE_POST_CHUNK_EVENT(read);
2099b704be09SChuck Lever DEFINE_POST_CHUNK_EVENT(write);
2100b704be09SChuck Lever DEFINE_POST_CHUNK_EVENT(reply);
2101b704be09SChuck Lever 
21026787f0beSChuck Lever DEFINE_COMPLETION_EVENT(svcrdma_wc_read);
21036787f0beSChuck Lever DEFINE_COMPLETION_EVENT(svcrdma_wc_write);
2104bd2abef3SChuck Lever 
2105bd2abef3SChuck Lever TRACE_EVENT(svcrdma_qp_error,
2106bd2abef3SChuck Lever 	TP_PROTO(
2107bd2abef3SChuck Lever 		const struct ib_event *event,
2108bd2abef3SChuck Lever 		const struct sockaddr *sap
2109bd2abef3SChuck Lever 	),
2110bd2abef3SChuck Lever 
2111bd2abef3SChuck Lever 	TP_ARGS(event, sap),
2112bd2abef3SChuck Lever 
2113bd2abef3SChuck Lever 	TP_STRUCT__entry(
2114bd2abef3SChuck Lever 		__field(unsigned int, event)
2115bd2abef3SChuck Lever 		__string(device, event->device->name)
2116bd2abef3SChuck Lever 		__array(__u8, addr, INET6_ADDRSTRLEN + 10)
2117bd2abef3SChuck Lever 	),
2118bd2abef3SChuck Lever 
2119bd2abef3SChuck Lever 	TP_fast_assign(
2120bd2abef3SChuck Lever 		__entry->event = event->event;
2121bd2abef3SChuck Lever 		__assign_str(device, event->device->name);
2122bd2abef3SChuck Lever 		snprintf(__entry->addr, sizeof(__entry->addr) - 1,
2123bd2abef3SChuck Lever 			 "%pISpc", sap);
2124bd2abef3SChuck Lever 	),
2125bd2abef3SChuck Lever 
2126bd2abef3SChuck Lever 	TP_printk("addr=%s dev=%s event=%s (%u)",
2127bd2abef3SChuck Lever 		__entry->addr, __get_str(device),
2128bd2abef3SChuck Lever 		rdma_show_ib_event(__entry->event), __entry->event
2129bd2abef3SChuck Lever 	)
2130bd2abef3SChuck Lever );
2131bd2abef3SChuck Lever 
2132bd2abef3SChuck Lever DECLARE_EVENT_CLASS(svcrdma_sendqueue_event,
2133bd2abef3SChuck Lever 	TP_PROTO(
2134bd2abef3SChuck Lever 		const struct svcxprt_rdma *rdma
2135bd2abef3SChuck Lever 	),
2136bd2abef3SChuck Lever 
2137bd2abef3SChuck Lever 	TP_ARGS(rdma),
2138bd2abef3SChuck Lever 
2139bd2abef3SChuck Lever 	TP_STRUCT__entry(
2140bd2abef3SChuck Lever 		__field(int, avail)
2141bd2abef3SChuck Lever 		__field(int, depth)
2142bd2abef3SChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
2143bd2abef3SChuck Lever 	),
2144bd2abef3SChuck Lever 
2145bd2abef3SChuck Lever 	TP_fast_assign(
2146bd2abef3SChuck Lever 		__entry->avail = atomic_read(&rdma->sc_sq_avail);
2147bd2abef3SChuck Lever 		__entry->depth = rdma->sc_sq_depth;
2148bd2abef3SChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
2149bd2abef3SChuck Lever 	),
2150bd2abef3SChuck Lever 
2151bd2abef3SChuck Lever 	TP_printk("addr=%s sc_sq_avail=%d/%d",
2152bd2abef3SChuck Lever 		__get_str(addr), __entry->avail, __entry->depth
2153bd2abef3SChuck Lever 	)
2154bd2abef3SChuck Lever );
2155bd2abef3SChuck Lever 
2156bd2abef3SChuck Lever #define DEFINE_SQ_EVENT(name)						\
2157bd2abef3SChuck Lever 		DEFINE_EVENT(svcrdma_sendqueue_event, svcrdma_sq_##name,\
2158bd2abef3SChuck Lever 				TP_PROTO(				\
2159bd2abef3SChuck Lever 					const struct svcxprt_rdma *rdma \
2160bd2abef3SChuck Lever 				),					\
2161bd2abef3SChuck Lever 				TP_ARGS(rdma))
2162bd2abef3SChuck Lever 
2163bd2abef3SChuck Lever DEFINE_SQ_EVENT(full);
2164bd2abef3SChuck Lever DEFINE_SQ_EVENT(retry);
2165bd2abef3SChuck Lever 
2166e28b4fc6SChuck Lever TRACE_EVENT(svcrdma_sq_post_err,
2167e28b4fc6SChuck Lever 	TP_PROTO(
2168e28b4fc6SChuck Lever 		const struct svcxprt_rdma *rdma,
2169e28b4fc6SChuck Lever 		int status
2170e28b4fc6SChuck Lever 	),
2171e28b4fc6SChuck Lever 
2172e28b4fc6SChuck Lever 	TP_ARGS(rdma, status),
2173e28b4fc6SChuck Lever 
2174e28b4fc6SChuck Lever 	TP_STRUCT__entry(
2175e28b4fc6SChuck Lever 		__field(int, avail)
2176e28b4fc6SChuck Lever 		__field(int, depth)
2177e28b4fc6SChuck Lever 		__field(int, status)
2178e28b4fc6SChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
2179e28b4fc6SChuck Lever 	),
2180e28b4fc6SChuck Lever 
2181e28b4fc6SChuck Lever 	TP_fast_assign(
2182e28b4fc6SChuck Lever 		__entry->avail = atomic_read(&rdma->sc_sq_avail);
2183e28b4fc6SChuck Lever 		__entry->depth = rdma->sc_sq_depth;
2184e28b4fc6SChuck Lever 		__entry->status = status;
2185e28b4fc6SChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
2186e28b4fc6SChuck Lever 	),
2187e28b4fc6SChuck Lever 
2188e28b4fc6SChuck Lever 	TP_printk("addr=%s sc_sq_avail=%d/%d status=%d",
2189e28b4fc6SChuck Lever 		__get_str(addr), __entry->avail, __entry->depth,
2190e28b4fc6SChuck Lever 		__entry->status
2191e28b4fc6SChuck Lever 	)
2192e28b4fc6SChuck Lever );
2193e28b4fc6SChuck Lever 
2194e48f083eSChuck Lever #endif /* _TRACE_RPCRDMA_H */
2195e48f083eSChuck Lever 
2196e48f083eSChuck Lever #include <trace/define_trace.h>
2197