xref: /openbmc/linux/include/trace/events/rpcrdma.h (revision c30f259a)
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*c30f259aSChuck Lever DECLARE_EVENT_CLASS(rpcrdma_receive_completion_class,
64*c30f259aSChuck Lever 	TP_PROTO(
65*c30f259aSChuck Lever 		const struct ib_wc *wc,
66*c30f259aSChuck Lever 		const struct rpc_rdma_cid *cid
67*c30f259aSChuck Lever 	),
68*c30f259aSChuck Lever 
69*c30f259aSChuck Lever 	TP_ARGS(wc, cid),
70*c30f259aSChuck Lever 
71*c30f259aSChuck Lever 	TP_STRUCT__entry(
72*c30f259aSChuck Lever 		__field(u32, cq_id)
73*c30f259aSChuck Lever 		__field(int, completion_id)
74*c30f259aSChuck Lever 		__field(u32, received)
75*c30f259aSChuck Lever 		__field(unsigned long, status)
76*c30f259aSChuck Lever 		__field(unsigned int, vendor_err)
77*c30f259aSChuck Lever 	),
78*c30f259aSChuck Lever 
79*c30f259aSChuck Lever 	TP_fast_assign(
80*c30f259aSChuck Lever 		__entry->cq_id = cid->ci_queue_id;
81*c30f259aSChuck Lever 		__entry->completion_id = cid->ci_completion_id;
82*c30f259aSChuck Lever 		__entry->status = wc->status;
83*c30f259aSChuck Lever 		if (wc->status) {
84*c30f259aSChuck Lever 			__entry->received = 0;
85*c30f259aSChuck Lever 			__entry->vendor_err = wc->vendor_err;
86*c30f259aSChuck Lever 		} else {
87*c30f259aSChuck Lever 			__entry->received = wc->byte_len;
88*c30f259aSChuck Lever 			__entry->vendor_err = 0;
89*c30f259aSChuck Lever 		}
90*c30f259aSChuck Lever 	),
91*c30f259aSChuck Lever 
92*c30f259aSChuck Lever 	TP_printk("cq.id=%u cid=%d status=%s (%lu/0x%x) received=%u",
93*c30f259aSChuck Lever 		__entry->cq_id, __entry->completion_id,
94*c30f259aSChuck Lever 		rdma_show_wc_status(__entry->status),
95*c30f259aSChuck Lever 		__entry->status, __entry->vendor_err,
96*c30f259aSChuck Lever 		__entry->received
97*c30f259aSChuck Lever 	)
98*c30f259aSChuck Lever );
99*c30f259aSChuck Lever 
100*c30f259aSChuck Lever #define DEFINE_RECEIVE_COMPLETION_EVENT(name)				\
101*c30f259aSChuck Lever 		DEFINE_EVENT(rpcrdma_receive_completion_class, name,	\
102*c30f259aSChuck Lever 				TP_PROTO(				\
103*c30f259aSChuck Lever 					const struct ib_wc *wc,		\
104*c30f259aSChuck Lever 					const struct rpc_rdma_cid *cid	\
105*c30f259aSChuck Lever 				),					\
106*c30f259aSChuck Lever 				TP_ARGS(wc, cid))
107*c30f259aSChuck Lever 
1083a9568feSChuck Lever DECLARE_EVENT_CLASS(xprtrdma_reply_class,
109b4a7f91cSChuck Lever 	TP_PROTO(
110b4a7f91cSChuck Lever 		const struct rpcrdma_rep *rep
111b4a7f91cSChuck Lever 	),
112b4a7f91cSChuck Lever 
113b4a7f91cSChuck Lever 	TP_ARGS(rep),
114b4a7f91cSChuck Lever 
115b4a7f91cSChuck Lever 	TP_STRUCT__entry(
116b4a7f91cSChuck Lever 		__field(u32, xid)
117b4a7f91cSChuck Lever 		__field(u32, version)
118b4a7f91cSChuck Lever 		__field(u32, proc)
1193a9568feSChuck Lever 		__string(addr, rpcrdma_addrstr(rep->rr_rxprt))
1203a9568feSChuck Lever 		__string(port, rpcrdma_portstr(rep->rr_rxprt))
121b4a7f91cSChuck Lever 	),
122b4a7f91cSChuck Lever 
123b4a7f91cSChuck Lever 	TP_fast_assign(
124b4a7f91cSChuck Lever 		__entry->xid = be32_to_cpu(rep->rr_xid);
125b4a7f91cSChuck Lever 		__entry->version = be32_to_cpu(rep->rr_vers);
126b4a7f91cSChuck Lever 		__entry->proc = be32_to_cpu(rep->rr_proc);
1273a9568feSChuck Lever 		__assign_str(addr, rpcrdma_addrstr(rep->rr_rxprt));
1283a9568feSChuck Lever 		__assign_str(port, rpcrdma_portstr(rep->rr_rxprt));
129b4a7f91cSChuck Lever 	),
130b4a7f91cSChuck Lever 
1313a9568feSChuck Lever 	TP_printk("peer=[%s]:%s xid=0x%08x version=%u proc=%u",
1323a9568feSChuck Lever 		__get_str(addr), __get_str(port),
1333a9568feSChuck Lever 		__entry->xid, __entry->version, __entry->proc
134b4a7f91cSChuck Lever 	)
135b4a7f91cSChuck Lever );
136b4a7f91cSChuck Lever 
137b4a7f91cSChuck Lever #define DEFINE_REPLY_EVENT(name)					\
1383a9568feSChuck Lever 		DEFINE_EVENT(xprtrdma_reply_class,			\
1393a9568feSChuck Lever 				xprtrdma_reply_##name##_err,		\
140b4a7f91cSChuck Lever 				TP_PROTO(				\
141b4a7f91cSChuck Lever 					const struct rpcrdma_rep *rep	\
142b4a7f91cSChuck Lever 				),					\
143b4a7f91cSChuck Lever 				TP_ARGS(rep))
144b4a7f91cSChuck Lever 
1451c443effSChuck Lever DECLARE_EVENT_CLASS(xprtrdma_rxprt,
1461c443effSChuck Lever 	TP_PROTO(
1471c443effSChuck Lever 		const struct rpcrdma_xprt *r_xprt
1481c443effSChuck Lever 	),
1491c443effSChuck Lever 
1501c443effSChuck Lever 	TP_ARGS(r_xprt),
1511c443effSChuck Lever 
1521c443effSChuck Lever 	TP_STRUCT__entry(
1531c443effSChuck Lever 		__field(const void *, r_xprt)
1541c443effSChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
1551c443effSChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
1561c443effSChuck Lever 	),
1571c443effSChuck Lever 
1581c443effSChuck Lever 	TP_fast_assign(
1591c443effSChuck Lever 		__entry->r_xprt = r_xprt;
1601c443effSChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
1611c443effSChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
1621c443effSChuck Lever 	),
1631c443effSChuck Lever 
1641c443effSChuck Lever 	TP_printk("peer=[%s]:%s r_xprt=%p",
1651c443effSChuck Lever 		__get_str(addr), __get_str(port), __entry->r_xprt
1661c443effSChuck Lever 	)
1671c443effSChuck Lever );
1681c443effSChuck Lever 
1691c443effSChuck Lever #define DEFINE_RXPRT_EVENT(name)					\
1701c443effSChuck Lever 		DEFINE_EVENT(xprtrdma_rxprt, name,			\
1711c443effSChuck Lever 				TP_PROTO(				\
1721c443effSChuck Lever 					const struct rpcrdma_xprt *r_xprt \
1731c443effSChuck Lever 				),					\
1741c443effSChuck Lever 				TP_ARGS(r_xprt))
1751c443effSChuck Lever 
1767b020f17SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_connect_class,
1777b020f17SChuck Lever 	TP_PROTO(
1787b020f17SChuck Lever 		const struct rpcrdma_xprt *r_xprt,
1797b020f17SChuck Lever 		int rc
1807b020f17SChuck Lever 	),
1817b020f17SChuck Lever 
1827b020f17SChuck Lever 	TP_ARGS(r_xprt, rc),
1837b020f17SChuck Lever 
1847b020f17SChuck Lever 	TP_STRUCT__entry(
1857b020f17SChuck Lever 		__field(const void *, r_xprt)
1867b020f17SChuck Lever 		__field(int, rc)
1877b020f17SChuck Lever 		__field(int, connect_status)
1887b020f17SChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
1897b020f17SChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
1907b020f17SChuck Lever 	),
1917b020f17SChuck Lever 
1927b020f17SChuck Lever 	TP_fast_assign(
1937b020f17SChuck Lever 		__entry->r_xprt = r_xprt;
1947b020f17SChuck Lever 		__entry->rc = rc;
195e28ce900SChuck Lever 		__entry->connect_status = r_xprt->rx_ep->re_connect_status;
1967b020f17SChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
1977b020f17SChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
1987b020f17SChuck Lever 	),
1997b020f17SChuck Lever 
200d6ccebf9SChuck Lever 	TP_printk("peer=[%s]:%s r_xprt=%p: rc=%d connection status=%d",
2017b020f17SChuck Lever 		__get_str(addr), __get_str(port), __entry->r_xprt,
2027b020f17SChuck Lever 		__entry->rc, __entry->connect_status
2037b020f17SChuck Lever 	)
2047b020f17SChuck Lever );
2057b020f17SChuck Lever 
2067b020f17SChuck Lever #define DEFINE_CONN_EVENT(name)						\
2077b020f17SChuck Lever 		DEFINE_EVENT(xprtrdma_connect_class, xprtrdma_##name,	\
2087b020f17SChuck Lever 				TP_PROTO(				\
2097b020f17SChuck Lever 					const struct rpcrdma_xprt *r_xprt, \
2107b020f17SChuck Lever 					int rc				\
2117b020f17SChuck Lever 				),					\
2127b020f17SChuck Lever 				TP_ARGS(r_xprt, rc))
2137b020f17SChuck Lever 
21458f10ad4SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_rdch_event,
21558f10ad4SChuck Lever 	TP_PROTO(
21658f10ad4SChuck Lever 		const struct rpc_task *task,
21758f10ad4SChuck Lever 		unsigned int pos,
21858f10ad4SChuck Lever 		struct rpcrdma_mr *mr,
21958f10ad4SChuck Lever 		int nsegs
22058f10ad4SChuck Lever 	),
22158f10ad4SChuck Lever 
22258f10ad4SChuck Lever 	TP_ARGS(task, pos, mr, nsegs),
22358f10ad4SChuck Lever 
22458f10ad4SChuck Lever 	TP_STRUCT__entry(
22558f10ad4SChuck Lever 		__field(unsigned int, task_id)
22658f10ad4SChuck Lever 		__field(unsigned int, client_id)
22758f10ad4SChuck Lever 		__field(unsigned int, pos)
22858f10ad4SChuck Lever 		__field(int, nents)
22958f10ad4SChuck Lever 		__field(u32, handle)
23058f10ad4SChuck Lever 		__field(u32, length)
23158f10ad4SChuck Lever 		__field(u64, offset)
23258f10ad4SChuck Lever 		__field(int, nsegs)
23358f10ad4SChuck Lever 	),
23458f10ad4SChuck Lever 
23558f10ad4SChuck Lever 	TP_fast_assign(
23658f10ad4SChuck Lever 		__entry->task_id = task->tk_pid;
23758f10ad4SChuck Lever 		__entry->client_id = task->tk_client->cl_clid;
23858f10ad4SChuck Lever 		__entry->pos = pos;
23958f10ad4SChuck Lever 		__entry->nents = mr->mr_nents;
24058f10ad4SChuck Lever 		__entry->handle = mr->mr_handle;
24158f10ad4SChuck Lever 		__entry->length = mr->mr_length;
24258f10ad4SChuck Lever 		__entry->offset = mr->mr_offset;
24358f10ad4SChuck Lever 		__entry->nsegs = nsegs;
24458f10ad4SChuck Lever 	),
24558f10ad4SChuck Lever 
246aba11831SChuck Lever 	TP_printk("task:%u@%u pos=%u %u@0x%016llx:0x%08x (%s)",
247aba11831SChuck Lever 		__entry->task_id, __entry->client_id,
24858f10ad4SChuck Lever 		__entry->pos, __entry->length,
24958f10ad4SChuck Lever 		(unsigned long long)__entry->offset, __entry->handle,
25058f10ad4SChuck Lever 		__entry->nents < __entry->nsegs ? "more" : "last"
25158f10ad4SChuck Lever 	)
25258f10ad4SChuck Lever );
25358f10ad4SChuck Lever 
25458f10ad4SChuck Lever #define DEFINE_RDCH_EVENT(name)						\
255aba11831SChuck Lever 		DEFINE_EVENT(xprtrdma_rdch_event, xprtrdma_chunk_##name,\
25658f10ad4SChuck Lever 				TP_PROTO(				\
25758f10ad4SChuck Lever 					const struct rpc_task *task,	\
25858f10ad4SChuck Lever 					unsigned int pos,		\
25958f10ad4SChuck Lever 					struct rpcrdma_mr *mr,		\
26058f10ad4SChuck Lever 					int nsegs			\
26158f10ad4SChuck Lever 				),					\
26258f10ad4SChuck Lever 				TP_ARGS(task, pos, mr, nsegs))
26358f10ad4SChuck Lever 
26458f10ad4SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_wrch_event,
26558f10ad4SChuck Lever 	TP_PROTO(
26658f10ad4SChuck Lever 		const struct rpc_task *task,
26758f10ad4SChuck Lever 		struct rpcrdma_mr *mr,
26858f10ad4SChuck Lever 		int nsegs
26958f10ad4SChuck Lever 	),
27058f10ad4SChuck Lever 
27158f10ad4SChuck Lever 	TP_ARGS(task, mr, nsegs),
27258f10ad4SChuck Lever 
27358f10ad4SChuck Lever 	TP_STRUCT__entry(
27458f10ad4SChuck Lever 		__field(unsigned int, task_id)
27558f10ad4SChuck Lever 		__field(unsigned int, client_id)
27658f10ad4SChuck Lever 		__field(int, nents)
27758f10ad4SChuck Lever 		__field(u32, handle)
27858f10ad4SChuck Lever 		__field(u32, length)
27958f10ad4SChuck Lever 		__field(u64, offset)
28058f10ad4SChuck Lever 		__field(int, nsegs)
28158f10ad4SChuck Lever 	),
28258f10ad4SChuck Lever 
28358f10ad4SChuck Lever 	TP_fast_assign(
28458f10ad4SChuck Lever 		__entry->task_id = task->tk_pid;
28558f10ad4SChuck Lever 		__entry->client_id = task->tk_client->cl_clid;
28658f10ad4SChuck Lever 		__entry->nents = mr->mr_nents;
28758f10ad4SChuck Lever 		__entry->handle = mr->mr_handle;
28858f10ad4SChuck Lever 		__entry->length = mr->mr_length;
28958f10ad4SChuck Lever 		__entry->offset = mr->mr_offset;
29058f10ad4SChuck Lever 		__entry->nsegs = nsegs;
29158f10ad4SChuck Lever 	),
29258f10ad4SChuck Lever 
293aba11831SChuck Lever 	TP_printk("task:%u@%u %u@0x%016llx:0x%08x (%s)",
294aba11831SChuck Lever 		__entry->task_id, __entry->client_id,
29558f10ad4SChuck Lever 		__entry->length, (unsigned long long)__entry->offset,
29658f10ad4SChuck Lever 		__entry->handle,
29758f10ad4SChuck Lever 		__entry->nents < __entry->nsegs ? "more" : "last"
29858f10ad4SChuck Lever 	)
29958f10ad4SChuck Lever );
30058f10ad4SChuck Lever 
30158f10ad4SChuck Lever #define DEFINE_WRCH_EVENT(name)						\
302aba11831SChuck Lever 		DEFINE_EVENT(xprtrdma_wrch_event, xprtrdma_chunk_##name,\
30358f10ad4SChuck Lever 				TP_PROTO(				\
30458f10ad4SChuck Lever 					const struct rpc_task *task,	\
30558f10ad4SChuck Lever 					struct rpcrdma_mr *mr,		\
30658f10ad4SChuck Lever 					int nsegs			\
30758f10ad4SChuck Lever 				),					\
30858f10ad4SChuck Lever 				TP_ARGS(task, mr, nsegs))
30958f10ad4SChuck Lever 
310aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_BIDIRECTIONAL);
311aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_TO_DEVICE);
312aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_FROM_DEVICE);
313aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_NONE);
314aba11831SChuck Lever 
315aba11831SChuck Lever #define xprtrdma_show_direction(x)					\
316aba11831SChuck Lever 		__print_symbolic(x,					\
317aba11831SChuck Lever 				{ DMA_BIDIRECTIONAL, "BIDIR" },		\
318aba11831SChuck Lever 				{ DMA_TO_DEVICE, "TO_DEVICE" },		\
319aba11831SChuck Lever 				{ DMA_FROM_DEVICE, "FROM_DEVICE" },	\
320aba11831SChuck Lever 				{ DMA_NONE, "NONE" })
321aba11831SChuck Lever 
3227703db97SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_mr_class,
3237703db97SChuck Lever 	TP_PROTO(
3247703db97SChuck Lever 		const struct rpcrdma_mr *mr
3257703db97SChuck Lever 	),
3267703db97SChuck Lever 
3277703db97SChuck Lever 	TP_ARGS(mr),
3287703db97SChuck Lever 
3297703db97SChuck Lever 	TP_STRUCT__entry(
3307703db97SChuck Lever 		__field(unsigned int, task_id)
3317703db97SChuck Lever 		__field(unsigned int, client_id)
3327703db97SChuck Lever 		__field(u32, mr_id)
3337703db97SChuck Lever 		__field(int, nents)
3347703db97SChuck Lever 		__field(u32, handle)
3357703db97SChuck Lever 		__field(u32, length)
3367703db97SChuck Lever 		__field(u64, offset)
3377703db97SChuck Lever 		__field(u32, dir)
3387703db97SChuck Lever 	),
3397703db97SChuck Lever 
3407703db97SChuck Lever 	TP_fast_assign(
3417703db97SChuck Lever 		const struct rpcrdma_req *req = mr->mr_req;
3427703db97SChuck Lever 		const struct rpc_task *task = req->rl_slot.rq_task;
3437703db97SChuck Lever 
3447703db97SChuck Lever 		__entry->task_id = task->tk_pid;
3457703db97SChuck Lever 		__entry->client_id = task->tk_client->cl_clid;
3467703db97SChuck Lever 		__entry->mr_id  = mr->frwr.fr_mr->res.id;
3477703db97SChuck Lever 		__entry->nents  = mr->mr_nents;
3487703db97SChuck Lever 		__entry->handle = mr->mr_handle;
3497703db97SChuck Lever 		__entry->length = mr->mr_length;
3507703db97SChuck Lever 		__entry->offset = mr->mr_offset;
3517703db97SChuck Lever 		__entry->dir    = mr->mr_dir;
3527703db97SChuck Lever 	),
3537703db97SChuck Lever 
3547703db97SChuck Lever 	TP_printk("task:%u@%u mr.id=%u nents=%d %u@0x%016llx:0x%08x (%s)",
3557703db97SChuck Lever 		__entry->task_id, __entry->client_id,
3567703db97SChuck Lever 		__entry->mr_id, __entry->nents, __entry->length,
3577703db97SChuck Lever 		(unsigned long long)__entry->offset, __entry->handle,
3587703db97SChuck Lever 		xprtrdma_show_direction(__entry->dir)
3597703db97SChuck Lever 	)
3607703db97SChuck Lever );
3617703db97SChuck Lever 
3627703db97SChuck Lever #define DEFINE_MR_EVENT(name)						\
3637703db97SChuck Lever 		DEFINE_EVENT(xprtrdma_mr_class,				\
3647703db97SChuck Lever 				xprtrdma_mr_##name,			\
3657703db97SChuck Lever 				TP_PROTO(				\
3667703db97SChuck Lever 					const struct rpcrdma_mr *mr	\
3677703db97SChuck Lever 				),					\
3687703db97SChuck Lever 				TP_ARGS(mr))
3697703db97SChuck Lever 
3707703db97SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_anonymous_mr_class,
3712937fedeSChuck Lever 	TP_PROTO(
3722937fedeSChuck Lever 		const struct rpcrdma_mr *mr
3732937fedeSChuck Lever 	),
3742937fedeSChuck Lever 
3752937fedeSChuck Lever 	TP_ARGS(mr),
3762937fedeSChuck Lever 
3772937fedeSChuck Lever 	TP_STRUCT__entry(
37862a89501SChuck Lever 		__field(u32, mr_id)
37962a89501SChuck Lever 		__field(int, nents)
3802937fedeSChuck Lever 		__field(u32, handle)
3812937fedeSChuck Lever 		__field(u32, length)
3822937fedeSChuck Lever 		__field(u64, offset)
383aba11831SChuck Lever 		__field(u32, dir)
3842937fedeSChuck Lever 	),
3852937fedeSChuck Lever 
3862937fedeSChuck Lever 	TP_fast_assign(
38762a89501SChuck Lever 		__entry->mr_id  = mr->frwr.fr_mr->res.id;
38862a89501SChuck Lever 		__entry->nents  = mr->mr_nents;
3892937fedeSChuck Lever 		__entry->handle = mr->mr_handle;
3902937fedeSChuck Lever 		__entry->length = mr->mr_length;
3912937fedeSChuck Lever 		__entry->offset = mr->mr_offset;
392aba11831SChuck Lever 		__entry->dir    = mr->mr_dir;
3932937fedeSChuck Lever 	),
3942937fedeSChuck Lever 
39562a89501SChuck Lever 	TP_printk("mr.id=%u nents=%d %u@0x%016llx:0x%08x (%s)",
39662a89501SChuck Lever 		__entry->mr_id, __entry->nents, __entry->length,
397aba11831SChuck Lever 		(unsigned long long)__entry->offset, __entry->handle,
398aba11831SChuck Lever 		xprtrdma_show_direction(__entry->dir)
3992937fedeSChuck Lever 	)
4002937fedeSChuck Lever );
4012937fedeSChuck Lever 
4027703db97SChuck Lever #define DEFINE_ANON_MR_EVENT(name)					\
4037703db97SChuck Lever 		DEFINE_EVENT(xprtrdma_anonymous_mr_class,		\
4047703db97SChuck Lever 				xprtrdma_mr_##name,			\
4052937fedeSChuck Lever 				TP_PROTO(				\
4062937fedeSChuck Lever 					const struct rpcrdma_mr *mr	\
4072937fedeSChuck Lever 				),					\
4082937fedeSChuck Lever 				TP_ARGS(mr))
4092937fedeSChuck Lever 
410d11e9346SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_callback_class,
411fc1eb807SChuck Lever 	TP_PROTO(
412d11e9346SChuck Lever 		const struct rpcrdma_xprt *r_xprt,
413fc1eb807SChuck Lever 		const struct rpc_rqst *rqst
414fc1eb807SChuck Lever 	),
415fc1eb807SChuck Lever 
416d11e9346SChuck Lever 	TP_ARGS(r_xprt, rqst),
417fc1eb807SChuck Lever 
418fc1eb807SChuck Lever 	TP_STRUCT__entry(
419fc1eb807SChuck Lever 		__field(u32, xid)
420d11e9346SChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
421d11e9346SChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
422fc1eb807SChuck Lever 	),
423fc1eb807SChuck Lever 
424fc1eb807SChuck Lever 	TP_fast_assign(
425fc1eb807SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
426d11e9346SChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
427d11e9346SChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
428fc1eb807SChuck Lever 	),
429fc1eb807SChuck Lever 
430d11e9346SChuck Lever 	TP_printk("peer=[%s]:%s xid=0x%08x",
431d11e9346SChuck Lever 		__get_str(addr), __get_str(port), __entry->xid
432fc1eb807SChuck Lever 	)
433fc1eb807SChuck Lever );
434fc1eb807SChuck Lever 
435d11e9346SChuck Lever #define DEFINE_CALLBACK_EVENT(name)					\
436d11e9346SChuck Lever 		DEFINE_EVENT(xprtrdma_callback_class,			\
437d11e9346SChuck Lever 				xprtrdma_cb_##name,			\
438fc1eb807SChuck Lever 				TP_PROTO(				\
439d11e9346SChuck Lever 					const struct rpcrdma_xprt *r_xprt, \
440fc1eb807SChuck Lever 					const struct rpc_rqst *rqst	\
441fc1eb807SChuck Lever 				),					\
442d11e9346SChuck Lever 				TP_ARGS(r_xprt, rqst))
443fc1eb807SChuck Lever 
444b4a7f91cSChuck Lever /**
445b4744e00SChuck Lever  ** Connection events
446b4744e00SChuck Lever  **/
447b4744e00SChuck Lever 
448f54c870dSChuck Lever TRACE_EVENT(xprtrdma_inline_thresh,
449f54c870dSChuck Lever 	TP_PROTO(
450745b734cSChuck Lever 		const struct rpcrdma_ep *ep
451f54c870dSChuck Lever 	),
452f54c870dSChuck Lever 
453745b734cSChuck Lever 	TP_ARGS(ep),
454f54c870dSChuck Lever 
455f54c870dSChuck Lever 	TP_STRUCT__entry(
456f54c870dSChuck Lever 		__field(unsigned int, inline_send)
457f54c870dSChuck Lever 		__field(unsigned int, inline_recv)
458f54c870dSChuck Lever 		__field(unsigned int, max_send)
459f54c870dSChuck Lever 		__field(unsigned int, max_recv)
460745b734cSChuck Lever 		__array(unsigned char, srcaddr, sizeof(struct sockaddr_in6))
461745b734cSChuck Lever 		__array(unsigned char, dstaddr, sizeof(struct sockaddr_in6))
462f54c870dSChuck Lever 	),
463f54c870dSChuck Lever 
464f54c870dSChuck Lever 	TP_fast_assign(
465745b734cSChuck Lever 		const struct rdma_cm_id *id = ep->re_id;
466f54c870dSChuck Lever 
46793aa8e0aSChuck Lever 		__entry->inline_send = ep->re_inline_send;
46893aa8e0aSChuck Lever 		__entry->inline_recv = ep->re_inline_recv;
46993aa8e0aSChuck Lever 		__entry->max_send = ep->re_max_inline_send;
47093aa8e0aSChuck Lever 		__entry->max_recv = ep->re_max_inline_recv;
471745b734cSChuck Lever 		memcpy(__entry->srcaddr, &id->route.addr.src_addr,
472745b734cSChuck Lever 		       sizeof(struct sockaddr_in6));
473745b734cSChuck Lever 		memcpy(__entry->dstaddr, &id->route.addr.dst_addr,
474745b734cSChuck Lever 		       sizeof(struct sockaddr_in6));
475f54c870dSChuck Lever 	),
476f54c870dSChuck Lever 
477745b734cSChuck Lever 	TP_printk("%pISpc -> %pISpc neg send/recv=%u/%u, calc send/recv=%u/%u",
478745b734cSChuck Lever 		__entry->srcaddr, __entry->dstaddr,
479f54c870dSChuck Lever 		__entry->inline_send, __entry->inline_recv,
480f54c870dSChuck Lever 		__entry->max_send, __entry->max_recv
481f54c870dSChuck Lever 	)
482f54c870dSChuck Lever );
483f54c870dSChuck Lever 
4847b020f17SChuck Lever DEFINE_CONN_EVENT(connect);
4857b020f17SChuck Lever DEFINE_CONN_EVENT(disconnect);
4867b020f17SChuck Lever 
4877b020f17SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_op_inject_dsc);
4887b020f17SChuck Lever 
4897b020f17SChuck Lever TRACE_EVENT(xprtrdma_op_connect,
490b4744e00SChuck Lever 	TP_PROTO(
491b4744e00SChuck Lever 		const struct rpcrdma_xprt *r_xprt,
4927b020f17SChuck Lever 		unsigned long delay
493b4744e00SChuck Lever 	),
494b4744e00SChuck Lever 
4957b020f17SChuck Lever 	TP_ARGS(r_xprt, delay),
496b4744e00SChuck Lever 
497b4744e00SChuck Lever 	TP_STRUCT__entry(
498b4744e00SChuck Lever 		__field(const void *, r_xprt)
4997b020f17SChuck Lever 		__field(unsigned long, delay)
500b4744e00SChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
501b4744e00SChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
502b4744e00SChuck Lever 	),
503b4744e00SChuck Lever 
504b4744e00SChuck Lever 	TP_fast_assign(
505b4744e00SChuck Lever 		__entry->r_xprt = r_xprt;
5067b020f17SChuck Lever 		__entry->delay = delay;
507b4744e00SChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
508b4744e00SChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
509b4744e00SChuck Lever 	),
510b4744e00SChuck Lever 
5117b020f17SChuck Lever 	TP_printk("peer=[%s]:%s r_xprt=%p delay=%lu",
5127b020f17SChuck Lever 		__get_str(addr), __get_str(port), __entry->r_xprt,
5137b020f17SChuck Lever 		__entry->delay
514b4744e00SChuck Lever 	)
515b4744e00SChuck Lever );
516b4744e00SChuck Lever 
517b4744e00SChuck Lever 
518675dd90aSChuck Lever TRACE_EVENT(xprtrdma_op_set_cto,
519675dd90aSChuck Lever 	TP_PROTO(
520675dd90aSChuck Lever 		const struct rpcrdma_xprt *r_xprt,
521675dd90aSChuck Lever 		unsigned long connect,
522675dd90aSChuck Lever 		unsigned long reconnect
523675dd90aSChuck Lever 	),
524675dd90aSChuck Lever 
525675dd90aSChuck Lever 	TP_ARGS(r_xprt, connect, reconnect),
526675dd90aSChuck Lever 
527675dd90aSChuck Lever 	TP_STRUCT__entry(
528675dd90aSChuck Lever 		__field(const void *, r_xprt)
529675dd90aSChuck Lever 		__field(unsigned long, connect)
530675dd90aSChuck Lever 		__field(unsigned long, reconnect)
531675dd90aSChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
532675dd90aSChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
533675dd90aSChuck Lever 	),
534675dd90aSChuck Lever 
535675dd90aSChuck Lever 	TP_fast_assign(
536675dd90aSChuck Lever 		__entry->r_xprt = r_xprt;
537675dd90aSChuck Lever 		__entry->connect = connect;
538675dd90aSChuck Lever 		__entry->reconnect = reconnect;
539675dd90aSChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
540675dd90aSChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
541675dd90aSChuck Lever 	),
542675dd90aSChuck Lever 
543675dd90aSChuck Lever 	TP_printk("peer=[%s]:%s r_xprt=%p: connect=%lu reconnect=%lu",
544675dd90aSChuck Lever 		__get_str(addr), __get_str(port), __entry->r_xprt,
545675dd90aSChuck Lever 		__entry->connect / HZ, __entry->reconnect / HZ
546675dd90aSChuck Lever 	)
547675dd90aSChuck Lever );
548675dd90aSChuck Lever 
549f9521d53SChuck Lever TRACE_EVENT(xprtrdma_qp_event,
550643cf323SChuck Lever 	TP_PROTO(
551745b734cSChuck Lever 		const struct rpcrdma_ep *ep,
552643cf323SChuck Lever 		const struct ib_event *event
553643cf323SChuck Lever 	),
554643cf323SChuck Lever 
555745b734cSChuck Lever 	TP_ARGS(ep, event),
556643cf323SChuck Lever 
557643cf323SChuck Lever 	TP_STRUCT__entry(
558745b734cSChuck Lever 		__field(unsigned long, event)
559643cf323SChuck Lever 		__string(name, event->device->name)
560745b734cSChuck Lever 		__array(unsigned char, srcaddr, sizeof(struct sockaddr_in6))
561745b734cSChuck Lever 		__array(unsigned char, dstaddr, sizeof(struct sockaddr_in6))
562643cf323SChuck Lever 	),
563643cf323SChuck Lever 
564643cf323SChuck Lever 	TP_fast_assign(
565745b734cSChuck Lever 		const struct rdma_cm_id *id = ep->re_id;
566745b734cSChuck Lever 
567643cf323SChuck Lever 		__entry->event = event->event;
568643cf323SChuck Lever 		__assign_str(name, event->device->name);
569745b734cSChuck Lever 		memcpy(__entry->srcaddr, &id->route.addr.src_addr,
570745b734cSChuck Lever 		       sizeof(struct sockaddr_in6));
571745b734cSChuck Lever 		memcpy(__entry->dstaddr, &id->route.addr.dst_addr,
572745b734cSChuck Lever 		       sizeof(struct sockaddr_in6));
573643cf323SChuck Lever 	),
574643cf323SChuck Lever 
575745b734cSChuck Lever 	TP_printk("%pISpc -> %pISpc device=%s %s (%lu)",
576745b734cSChuck Lever 		__entry->srcaddr, __entry->dstaddr, __get_str(name),
577745b734cSChuck Lever 		rdma_show_ib_event(__entry->event), __entry->event
578643cf323SChuck Lever 	)
579643cf323SChuck Lever );
580643cf323SChuck Lever 
581b4744e00SChuck Lever /**
582ab03eff5SChuck Lever  ** Call events
583ab03eff5SChuck Lever  **/
584ab03eff5SChuck Lever 
5851c443effSChuck Lever TRACE_EVENT(xprtrdma_createmrs,
5861c443effSChuck Lever 	TP_PROTO(
5871c443effSChuck Lever 		const struct rpcrdma_xprt *r_xprt,
5881c443effSChuck Lever 		unsigned int count
5891c443effSChuck Lever 	),
5901c443effSChuck Lever 
5911c443effSChuck Lever 	TP_ARGS(r_xprt, count),
5921c443effSChuck Lever 
5931c443effSChuck Lever 	TP_STRUCT__entry(
5941c443effSChuck Lever 		__field(const void *, r_xprt)
5956dc6ec9eSChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
5966dc6ec9eSChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
5971c443effSChuck Lever 		__field(unsigned int, count)
5981c443effSChuck Lever 	),
5991c443effSChuck Lever 
6001c443effSChuck Lever 	TP_fast_assign(
6011c443effSChuck Lever 		__entry->r_xprt = r_xprt;
6021c443effSChuck Lever 		__entry->count = count;
6036dc6ec9eSChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
6046dc6ec9eSChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
6051c443effSChuck Lever 	),
6061c443effSChuck Lever 
6076dc6ec9eSChuck Lever 	TP_printk("peer=[%s]:%s r_xprt=%p: created %u MRs",
6086dc6ec9eSChuck Lever 		__get_str(addr), __get_str(port), __entry->r_xprt,
6096dc6ec9eSChuck Lever 		__entry->count
6106dc6ec9eSChuck Lever 	)
6116dc6ec9eSChuck Lever );
6126dc6ec9eSChuck Lever 
6130307cdecSChuck Lever TRACE_EVENT(xprtrdma_nomrs_err,
6146dc6ec9eSChuck Lever 	TP_PROTO(
6150307cdecSChuck Lever 		const struct rpcrdma_xprt *r_xprt,
6166dc6ec9eSChuck Lever 		const struct rpcrdma_req *req
6176dc6ec9eSChuck Lever 	),
6186dc6ec9eSChuck Lever 
6190307cdecSChuck Lever 	TP_ARGS(r_xprt, req),
6206dc6ec9eSChuck Lever 
6216dc6ec9eSChuck Lever 	TP_STRUCT__entry(
6226dc6ec9eSChuck Lever 		__field(unsigned int, task_id)
6236dc6ec9eSChuck Lever 		__field(unsigned int, client_id)
6240307cdecSChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
6250307cdecSChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
6266dc6ec9eSChuck Lever 	),
6276dc6ec9eSChuck Lever 
6286dc6ec9eSChuck Lever 	TP_fast_assign(
6296dc6ec9eSChuck Lever 		const struct rpc_rqst *rqst = &req->rl_slot;
6306dc6ec9eSChuck Lever 
6316dc6ec9eSChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
6326dc6ec9eSChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
6330307cdecSChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
6340307cdecSChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
6356dc6ec9eSChuck Lever 	),
6366dc6ec9eSChuck Lever 
6370307cdecSChuck Lever 	TP_printk("peer=[%s]:%s task:%u@%u",
6380307cdecSChuck Lever 		__get_str(addr), __get_str(port),
6390307cdecSChuck Lever 		__entry->task_id, __entry->client_id
6403b39f52aSChuck Lever 	)
6413b39f52aSChuck Lever );
6421c443effSChuck Lever 
643aba11831SChuck Lever DEFINE_RDCH_EVENT(read);
644aba11831SChuck Lever DEFINE_WRCH_EVENT(write);
645aba11831SChuck Lever DEFINE_WRCH_EVENT(reply);
64658f10ad4SChuck Lever 
647ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch);
648614f3c96SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch_pullup);
649614f3c96SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch_mapped);
650ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_readch);
651ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_areadch);
652ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_writech);
653ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_replych);
654ab03eff5SChuck Lever 
655ab03eff5SChuck Lever #define xprtrdma_show_chunktype(x)					\
656ab03eff5SChuck Lever 		__print_symbolic(x,					\
657ab03eff5SChuck Lever 				{ rpcrdma_noch, "inline" },		\
658614f3c96SChuck Lever 				{ rpcrdma_noch_pullup, "pullup" },	\
659614f3c96SChuck Lever 				{ rpcrdma_noch_mapped, "mapped" },	\
660ab03eff5SChuck Lever 				{ rpcrdma_readch, "read list" },	\
661ab03eff5SChuck Lever 				{ rpcrdma_areadch, "*read list" },	\
662ab03eff5SChuck Lever 				{ rpcrdma_writech, "write list" },	\
663ab03eff5SChuck Lever 				{ rpcrdma_replych, "reply chunk" })
664ab03eff5SChuck Lever 
665ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_marshal,
666ab03eff5SChuck Lever 	TP_PROTO(
6671310051cSChuck Lever 		const struct rpcrdma_req *req,
668ab03eff5SChuck Lever 		unsigned int rtype,
669ab03eff5SChuck Lever 		unsigned int wtype
670ab03eff5SChuck Lever 	),
671ab03eff5SChuck Lever 
6721310051cSChuck Lever 	TP_ARGS(req, rtype, wtype),
673ab03eff5SChuck Lever 
674ab03eff5SChuck Lever 	TP_STRUCT__entry(
675ab03eff5SChuck Lever 		__field(unsigned int, task_id)
676ab03eff5SChuck Lever 		__field(unsigned int, client_id)
677ab03eff5SChuck Lever 		__field(u32, xid)
678ab03eff5SChuck Lever 		__field(unsigned int, hdrlen)
679ab03eff5SChuck Lever 		__field(unsigned int, headlen)
680ab03eff5SChuck Lever 		__field(unsigned int, pagelen)
681ab03eff5SChuck Lever 		__field(unsigned int, taillen)
682ab03eff5SChuck Lever 		__field(unsigned int, rtype)
683ab03eff5SChuck Lever 		__field(unsigned int, wtype)
684ab03eff5SChuck Lever 	),
685ab03eff5SChuck Lever 
686ab03eff5SChuck Lever 	TP_fast_assign(
6871310051cSChuck Lever 		const struct rpc_rqst *rqst = &req->rl_slot;
6881310051cSChuck Lever 
689ab03eff5SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
690ab03eff5SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
691ab03eff5SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
6921310051cSChuck Lever 		__entry->hdrlen = req->rl_hdrbuf.len;
693ab03eff5SChuck Lever 		__entry->headlen = rqst->rq_snd_buf.head[0].iov_len;
694ab03eff5SChuck Lever 		__entry->pagelen = rqst->rq_snd_buf.page_len;
695ab03eff5SChuck Lever 		__entry->taillen = rqst->rq_snd_buf.tail[0].iov_len;
696ab03eff5SChuck Lever 		__entry->rtype = rtype;
697ab03eff5SChuck Lever 		__entry->wtype = wtype;
698ab03eff5SChuck Lever 	),
699ab03eff5SChuck Lever 
700ab03eff5SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x: hdr=%u xdr=%u/%u/%u %s/%s",
701ab03eff5SChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
702ab03eff5SChuck Lever 		__entry->hdrlen,
703ab03eff5SChuck Lever 		__entry->headlen, __entry->pagelen, __entry->taillen,
704ab03eff5SChuck Lever 		xprtrdma_show_chunktype(__entry->rtype),
705ab03eff5SChuck Lever 		xprtrdma_show_chunktype(__entry->wtype)
706ab03eff5SChuck Lever 	)
707ab03eff5SChuck Lever );
708ab03eff5SChuck Lever 
70917e4c443SChuck Lever TRACE_EVENT(xprtrdma_marshal_failed,
71017e4c443SChuck Lever 	TP_PROTO(const struct rpc_rqst *rqst,
71117e4c443SChuck Lever 		 int ret
71217e4c443SChuck Lever 	),
71317e4c443SChuck Lever 
71417e4c443SChuck Lever 	TP_ARGS(rqst, ret),
71517e4c443SChuck Lever 
71617e4c443SChuck Lever 	TP_STRUCT__entry(
71717e4c443SChuck Lever 		__field(unsigned int, task_id)
71817e4c443SChuck Lever 		__field(unsigned int, client_id)
71917e4c443SChuck Lever 		__field(u32, xid)
72017e4c443SChuck Lever 		__field(int, ret)
72117e4c443SChuck Lever 	),
72217e4c443SChuck Lever 
72317e4c443SChuck Lever 	TP_fast_assign(
72417e4c443SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
72517e4c443SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
72617e4c443SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
72717e4c443SChuck Lever 		__entry->ret = ret;
72817e4c443SChuck Lever 	),
72917e4c443SChuck Lever 
73017e4c443SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x: ret=%d",
73117e4c443SChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
73217e4c443SChuck Lever 		__entry->ret
73317e4c443SChuck Lever 	)
73417e4c443SChuck Lever );
73517e4c443SChuck Lever 
73605eb06d8SChuck Lever TRACE_EVENT(xprtrdma_prepsend_failed,
73705eb06d8SChuck Lever 	TP_PROTO(const struct rpc_rqst *rqst,
73805eb06d8SChuck Lever 		 int ret
73905eb06d8SChuck Lever 	),
74005eb06d8SChuck Lever 
74105eb06d8SChuck Lever 	TP_ARGS(rqst, ret),
74205eb06d8SChuck Lever 
74305eb06d8SChuck Lever 	TP_STRUCT__entry(
74405eb06d8SChuck Lever 		__field(unsigned int, task_id)
74505eb06d8SChuck Lever 		__field(unsigned int, client_id)
74605eb06d8SChuck Lever 		__field(u32, xid)
74705eb06d8SChuck Lever 		__field(int, ret)
74805eb06d8SChuck Lever 	),
74905eb06d8SChuck Lever 
75005eb06d8SChuck Lever 	TP_fast_assign(
75105eb06d8SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
75205eb06d8SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
75305eb06d8SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
75405eb06d8SChuck Lever 		__entry->ret = ret;
75505eb06d8SChuck Lever 	),
75605eb06d8SChuck Lever 
75705eb06d8SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x: ret=%d",
75805eb06d8SChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
75905eb06d8SChuck Lever 		__entry->ret
76005eb06d8SChuck Lever 	)
76105eb06d8SChuck Lever );
76205eb06d8SChuck Lever 
763ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_post_send,
764ab03eff5SChuck Lever 	TP_PROTO(
765bdb2ce82SChuck Lever 		const struct rpcrdma_req *req
766ab03eff5SChuck Lever 	),
767ab03eff5SChuck Lever 
768bdb2ce82SChuck Lever 	TP_ARGS(req),
769ab03eff5SChuck Lever 
770ab03eff5SChuck Lever 	TP_STRUCT__entry(
771b2e7467fSChuck Lever 		__field(u32, cq_id)
772b2e7467fSChuck Lever 		__field(int, completion_id)
7730c77668dSChuck Lever 		__field(unsigned int, task_id)
7740c77668dSChuck Lever 		__field(unsigned int, client_id)
775ab03eff5SChuck Lever 		__field(int, num_sge)
776470443e0SChuck Lever 		__field(int, signaled)
777ab03eff5SChuck Lever 	),
778ab03eff5SChuck Lever 
779ab03eff5SChuck Lever 	TP_fast_assign(
7800c77668dSChuck Lever 		const struct rpc_rqst *rqst = &req->rl_slot;
781b2e7467fSChuck Lever 		const struct rpcrdma_sendctx *sc = req->rl_sendctx;
7820c77668dSChuck Lever 
783b2e7467fSChuck Lever 		__entry->cq_id = sc->sc_cid.ci_queue_id;
784b2e7467fSChuck Lever 		__entry->completion_id = sc->sc_cid.ci_completion_id;
7850c77668dSChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
78610694ac9SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client ?
78710694ac9SChuck Lever 				     rqst->rq_task->tk_client->cl_clid : -1;
788dc15c3d5SChuck Lever 		__entry->num_sge = req->rl_wr.num_sge;
789dc15c3d5SChuck Lever 		__entry->signaled = req->rl_wr.send_flags & IB_SEND_SIGNALED;
790ab03eff5SChuck Lever 	),
791ab03eff5SChuck Lever 
792b2e7467fSChuck Lever 	TP_printk("task:%u@%u cq.id=%u cid=%d (%d SGE%s) %s",
7930c77668dSChuck Lever 		__entry->task_id, __entry->client_id,
794b2e7467fSChuck Lever 		__entry->cq_id, __entry->completion_id,
795b2e7467fSChuck Lever 		__entry->num_sge, (__entry->num_sge == 1 ? "" : "s"),
796bdb2ce82SChuck Lever 		(__entry->signaled ? "signaled" : "")
797ab03eff5SChuck Lever 	)
798ab03eff5SChuck Lever );
799ab03eff5SChuck Lever 
800b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_post_recv,
801b4a7f91cSChuck Lever 	TP_PROTO(
8022dfdcd88SChuck Lever 		const struct rpcrdma_rep *rep
803b4a7f91cSChuck Lever 	),
804b4a7f91cSChuck Lever 
8052dfdcd88SChuck Lever 	TP_ARGS(rep),
806b4a7f91cSChuck Lever 
807b4a7f91cSChuck Lever 	TP_STRUCT__entry(
808af5865d2SChuck Lever 		__field(u32, cq_id)
809af5865d2SChuck Lever 		__field(int, completion_id)
810b4a7f91cSChuck Lever 	),
811b4a7f91cSChuck Lever 
812b4a7f91cSChuck Lever 	TP_fast_assign(
813af5865d2SChuck Lever 		__entry->cq_id = rep->rr_cid.ci_queue_id;
814af5865d2SChuck Lever 		__entry->completion_id = rep->rr_cid.ci_completion_id;
815b4a7f91cSChuck Lever 	),
816b4a7f91cSChuck Lever 
817af5865d2SChuck Lever 	TP_printk("cq.id=%d cid=%d",
818af5865d2SChuck Lever 		__entry->cq_id, __entry->completion_id
819b4a7f91cSChuck Lever 	)
820b4a7f91cSChuck Lever );
821b4a7f91cSChuck Lever 
8227c8d9e7cSChuck Lever TRACE_EVENT(xprtrdma_post_recvs,
8237c8d9e7cSChuck Lever 	TP_PROTO(
8247c8d9e7cSChuck Lever 		const struct rpcrdma_xprt *r_xprt,
8257c8d9e7cSChuck Lever 		unsigned int count,
8267c8d9e7cSChuck Lever 		int status
8277c8d9e7cSChuck Lever 	),
8287c8d9e7cSChuck Lever 
8297c8d9e7cSChuck Lever 	TP_ARGS(r_xprt, count, status),
8307c8d9e7cSChuck Lever 
8317c8d9e7cSChuck Lever 	TP_STRUCT__entry(
8327c8d9e7cSChuck Lever 		__field(const void *, r_xprt)
8337c8d9e7cSChuck Lever 		__field(unsigned int, count)
8347c8d9e7cSChuck Lever 		__field(int, status)
8357c8d9e7cSChuck Lever 		__field(int, posted)
8367c8d9e7cSChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
8377c8d9e7cSChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
8387c8d9e7cSChuck Lever 	),
8397c8d9e7cSChuck Lever 
8407c8d9e7cSChuck Lever 	TP_fast_assign(
8417c8d9e7cSChuck Lever 		__entry->r_xprt = r_xprt;
8427c8d9e7cSChuck Lever 		__entry->count = count;
8437c8d9e7cSChuck Lever 		__entry->status = status;
844e28ce900SChuck Lever 		__entry->posted = r_xprt->rx_ep->re_receive_count;
8457c8d9e7cSChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
8467c8d9e7cSChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
8477c8d9e7cSChuck Lever 	),
8487c8d9e7cSChuck Lever 
8497c8d9e7cSChuck Lever 	TP_printk("peer=[%s]:%s r_xprt=%p: %u new recvs, %d active (rc %d)",
8507c8d9e7cSChuck Lever 		__get_str(addr), __get_str(port), __entry->r_xprt,
8517c8d9e7cSChuck Lever 		__entry->count, __entry->posted, __entry->status
852ab03eff5SChuck Lever 	)
853ab03eff5SChuck Lever );
854ab03eff5SChuck Lever 
85536a55edfSChuck Lever TRACE_EVENT(xprtrdma_post_linv_err,
8564b93dab3SChuck Lever 	TP_PROTO(
8574b93dab3SChuck Lever 		const struct rpcrdma_req *req,
8584b93dab3SChuck Lever 		int status
8594b93dab3SChuck Lever 	),
8604b93dab3SChuck Lever 
8614b93dab3SChuck Lever 	TP_ARGS(req, status),
8624b93dab3SChuck Lever 
8634b93dab3SChuck Lever 	TP_STRUCT__entry(
86436a55edfSChuck Lever 		__field(unsigned int, task_id)
86536a55edfSChuck Lever 		__field(unsigned int, client_id)
8664b93dab3SChuck Lever 		__field(int, status)
8674b93dab3SChuck Lever 	),
8684b93dab3SChuck Lever 
8694b93dab3SChuck Lever 	TP_fast_assign(
87036a55edfSChuck Lever 		const struct rpc_task *task = req->rl_slot.rq_task;
87136a55edfSChuck Lever 
87236a55edfSChuck Lever 		__entry->task_id = task->tk_pid;
87336a55edfSChuck Lever 		__entry->client_id = task->tk_client->cl_clid;
8744b93dab3SChuck Lever 		__entry->status = status;
8754b93dab3SChuck Lever 	),
8764b93dab3SChuck Lever 
87736a55edfSChuck Lever 	TP_printk("task:%u@%u status=%d",
87836a55edfSChuck Lever 		__entry->task_id, __entry->client_id, __entry->status
8794b93dab3SChuck Lever 	)
8804b93dab3SChuck Lever );
8814b93dab3SChuck Lever 
882ab03eff5SChuck Lever /**
883ab03eff5SChuck Lever  ** Completion events
884ab03eff5SChuck Lever  **/
885ab03eff5SChuck Lever 
886*c30f259aSChuck Lever DEFINE_RECEIVE_COMPLETION_EVENT(xprtrdma_wc_receive);
887*c30f259aSChuck Lever 
888b2e7467fSChuck Lever DEFINE_COMPLETION_EVENT(xprtrdma_wc_send);
8895ecef9c8SChuck Lever DEFINE_COMPLETION_EVENT(xprtrdma_wc_fastreg);
8905ecef9c8SChuck Lever DEFINE_COMPLETION_EVENT(xprtrdma_wc_li);
8915ecef9c8SChuck Lever DEFINE_COMPLETION_EVENT(xprtrdma_wc_li_wake);
8925ecef9c8SChuck Lever DEFINE_COMPLETION_EVENT(xprtrdma_wc_li_done);
8932937fedeSChuck Lever 
89453b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_alloc,
89553b2c1cbSChuck Lever 	TP_PROTO(
89653b2c1cbSChuck Lever 		const struct rpcrdma_mr *mr,
89753b2c1cbSChuck Lever 		int rc
89853b2c1cbSChuck Lever 	),
89953b2c1cbSChuck Lever 
90053b2c1cbSChuck Lever 	TP_ARGS(mr, rc),
90153b2c1cbSChuck Lever 
90253b2c1cbSChuck Lever 	TP_STRUCT__entry(
90362a89501SChuck Lever 		__field(u32, mr_id)
90453b2c1cbSChuck Lever 		__field(int, rc)
90553b2c1cbSChuck Lever 	),
90653b2c1cbSChuck Lever 
90753b2c1cbSChuck Lever 	TP_fast_assign(
90862a89501SChuck Lever 		__entry->mr_id = mr->frwr.fr_mr->res.id;
90953b2c1cbSChuck Lever 		__entry->rc = rc;
91053b2c1cbSChuck Lever 	),
91153b2c1cbSChuck Lever 
91262a89501SChuck Lever 	TP_printk("mr.id=%u: rc=%d",
91362a89501SChuck Lever 		__entry->mr_id, __entry->rc
91453b2c1cbSChuck Lever 	)
91553b2c1cbSChuck Lever );
91653b2c1cbSChuck Lever 
91753b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_dereg,
91853b2c1cbSChuck Lever 	TP_PROTO(
91953b2c1cbSChuck Lever 		const struct rpcrdma_mr *mr,
92053b2c1cbSChuck Lever 		int rc
92153b2c1cbSChuck Lever 	),
92253b2c1cbSChuck Lever 
92353b2c1cbSChuck Lever 	TP_ARGS(mr, rc),
92453b2c1cbSChuck Lever 
92553b2c1cbSChuck Lever 	TP_STRUCT__entry(
92662a89501SChuck Lever 		__field(u32, mr_id)
92762a89501SChuck Lever 		__field(int, nents)
92853b2c1cbSChuck Lever 		__field(u32, handle)
92953b2c1cbSChuck Lever 		__field(u32, length)
93053b2c1cbSChuck Lever 		__field(u64, offset)
93153b2c1cbSChuck Lever 		__field(u32, dir)
93253b2c1cbSChuck Lever 		__field(int, rc)
93353b2c1cbSChuck Lever 	),
93453b2c1cbSChuck Lever 
93553b2c1cbSChuck Lever 	TP_fast_assign(
93662a89501SChuck Lever 		__entry->mr_id  = mr->frwr.fr_mr->res.id;
93762a89501SChuck Lever 		__entry->nents  = mr->mr_nents;
93853b2c1cbSChuck Lever 		__entry->handle = mr->mr_handle;
93953b2c1cbSChuck Lever 		__entry->length = mr->mr_length;
94053b2c1cbSChuck Lever 		__entry->offset = mr->mr_offset;
94153b2c1cbSChuck Lever 		__entry->dir    = mr->mr_dir;
94253b2c1cbSChuck Lever 		__entry->rc	= rc;
94353b2c1cbSChuck Lever 	),
94453b2c1cbSChuck Lever 
94562a89501SChuck Lever 	TP_printk("mr.id=%u nents=%d %u@0x%016llx:0x%08x (%s): rc=%d",
94662a89501SChuck Lever 		__entry->mr_id, __entry->nents, __entry->length,
94753b2c1cbSChuck Lever 		(unsigned long long)__entry->offset, __entry->handle,
94853b2c1cbSChuck Lever 		xprtrdma_show_direction(__entry->dir),
94953b2c1cbSChuck Lever 		__entry->rc
95053b2c1cbSChuck Lever 	)
95153b2c1cbSChuck Lever );
95253b2c1cbSChuck Lever 
95353b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_sgerr,
95453b2c1cbSChuck Lever 	TP_PROTO(
95553b2c1cbSChuck Lever 		const struct rpcrdma_mr *mr,
95653b2c1cbSChuck Lever 		int sg_nents
95753b2c1cbSChuck Lever 	),
95853b2c1cbSChuck Lever 
95953b2c1cbSChuck Lever 	TP_ARGS(mr, sg_nents),
96053b2c1cbSChuck Lever 
96153b2c1cbSChuck Lever 	TP_STRUCT__entry(
96262a89501SChuck Lever 		__field(u32, mr_id)
96353b2c1cbSChuck Lever 		__field(u64, addr)
96453b2c1cbSChuck Lever 		__field(u32, dir)
96553b2c1cbSChuck Lever 		__field(int, nents)
96653b2c1cbSChuck Lever 	),
96753b2c1cbSChuck Lever 
96853b2c1cbSChuck Lever 	TP_fast_assign(
96962a89501SChuck Lever 		__entry->mr_id = mr->frwr.fr_mr->res.id;
97053b2c1cbSChuck Lever 		__entry->addr = mr->mr_sg->dma_address;
97153b2c1cbSChuck Lever 		__entry->dir = mr->mr_dir;
97253b2c1cbSChuck Lever 		__entry->nents = sg_nents;
97353b2c1cbSChuck Lever 	),
97453b2c1cbSChuck Lever 
97562a89501SChuck Lever 	TP_printk("mr.id=%u DMA addr=0x%llx (%s) sg_nents=%d",
97662a89501SChuck Lever 		__entry->mr_id, __entry->addr,
97753b2c1cbSChuck Lever 		xprtrdma_show_direction(__entry->dir),
97853b2c1cbSChuck Lever 		__entry->nents
97953b2c1cbSChuck Lever 	)
98053b2c1cbSChuck Lever );
98153b2c1cbSChuck Lever 
98253b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_maperr,
98353b2c1cbSChuck Lever 	TP_PROTO(
98453b2c1cbSChuck Lever 		const struct rpcrdma_mr *mr,
98553b2c1cbSChuck Lever 		int num_mapped
98653b2c1cbSChuck Lever 	),
98753b2c1cbSChuck Lever 
98853b2c1cbSChuck Lever 	TP_ARGS(mr, num_mapped),
98953b2c1cbSChuck Lever 
99053b2c1cbSChuck Lever 	TP_STRUCT__entry(
99162a89501SChuck Lever 		__field(u32, mr_id)
99253b2c1cbSChuck Lever 		__field(u64, addr)
99353b2c1cbSChuck Lever 		__field(u32, dir)
99453b2c1cbSChuck Lever 		__field(int, num_mapped)
99553b2c1cbSChuck Lever 		__field(int, nents)
99653b2c1cbSChuck Lever 	),
99753b2c1cbSChuck Lever 
99853b2c1cbSChuck Lever 	TP_fast_assign(
99962a89501SChuck Lever 		__entry->mr_id = mr->frwr.fr_mr->res.id;
100053b2c1cbSChuck Lever 		__entry->addr = mr->mr_sg->dma_address;
100153b2c1cbSChuck Lever 		__entry->dir = mr->mr_dir;
100253b2c1cbSChuck Lever 		__entry->num_mapped = num_mapped;
100353b2c1cbSChuck Lever 		__entry->nents = mr->mr_nents;
100453b2c1cbSChuck Lever 	),
100553b2c1cbSChuck Lever 
100662a89501SChuck Lever 	TP_printk("mr.id=%u DMA addr=0x%llx (%s) nents=%d of %d",
100762a89501SChuck Lever 		__entry->mr_id, __entry->addr,
100853b2c1cbSChuck Lever 		xprtrdma_show_direction(__entry->dir),
100953b2c1cbSChuck Lever 		__entry->num_mapped, __entry->nents
101053b2c1cbSChuck Lever 	)
101153b2c1cbSChuck Lever );
101253b2c1cbSChuck Lever 
1013d379eaa8SChuck Lever DEFINE_MR_EVENT(localinv);
1014d379eaa8SChuck Lever DEFINE_MR_EVENT(map);
10157703db97SChuck Lever 
10167703db97SChuck Lever DEFINE_ANON_MR_EVENT(unmap);
10177703db97SChuck Lever DEFINE_ANON_MR_EVENT(recycle);
101858f10ad4SChuck Lever 
101953b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_dma_maperr,
102053b2c1cbSChuck Lever 	TP_PROTO(
102153b2c1cbSChuck Lever 		u64 addr
102253b2c1cbSChuck Lever 	),
102353b2c1cbSChuck Lever 
102453b2c1cbSChuck Lever 	TP_ARGS(addr),
102553b2c1cbSChuck Lever 
102653b2c1cbSChuck Lever 	TP_STRUCT__entry(
102753b2c1cbSChuck Lever 		__field(u64, addr)
102853b2c1cbSChuck Lever 	),
102953b2c1cbSChuck Lever 
103053b2c1cbSChuck Lever 	TP_fast_assign(
103153b2c1cbSChuck Lever 		__entry->addr = addr;
103253b2c1cbSChuck Lever 	),
103353b2c1cbSChuck Lever 
103453b2c1cbSChuck Lever 	TP_printk("dma addr=0x%llx\n", __entry->addr)
103553b2c1cbSChuck Lever );
103653b2c1cbSChuck Lever 
1037b4a7f91cSChuck Lever /**
1038b4a7f91cSChuck Lever  ** Reply events
1039b4a7f91cSChuck Lever  **/
1040b4a7f91cSChuck Lever 
1041b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_reply,
1042b4a7f91cSChuck Lever 	TP_PROTO(
1043b4a7f91cSChuck Lever 		const struct rpc_task *task,
1044b4a7f91cSChuck Lever 		const struct rpcrdma_rep *rep,
1045b4a7f91cSChuck Lever 		unsigned int credits
1046b4a7f91cSChuck Lever 	),
1047b4a7f91cSChuck Lever 
104803ffd924SChuck Lever 	TP_ARGS(task, rep, credits),
1049b4a7f91cSChuck Lever 
1050b4a7f91cSChuck Lever 	TP_STRUCT__entry(
1051b4a7f91cSChuck Lever 		__field(unsigned int, task_id)
1052b4a7f91cSChuck Lever 		__field(unsigned int, client_id)
1053b4a7f91cSChuck Lever 		__field(u32, xid)
1054b4a7f91cSChuck Lever 		__field(unsigned int, credits)
1055b4a7f91cSChuck Lever 	),
1056b4a7f91cSChuck Lever 
1057b4a7f91cSChuck Lever 	TP_fast_assign(
1058b4a7f91cSChuck Lever 		__entry->task_id = task->tk_pid;
1059b4a7f91cSChuck Lever 		__entry->client_id = task->tk_client->cl_clid;
1060b4a7f91cSChuck Lever 		__entry->xid = be32_to_cpu(rep->rr_xid);
1061b4a7f91cSChuck Lever 		__entry->credits = credits;
1062b4a7f91cSChuck Lever 	),
1063b4a7f91cSChuck Lever 
106403ffd924SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x credits=%u",
1065b4a7f91cSChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
106603ffd924SChuck Lever 		__entry->credits
1067b4a7f91cSChuck Lever 	)
1068b4a7f91cSChuck Lever );
1069b4a7f91cSChuck Lever 
10703a9568feSChuck Lever DEFINE_REPLY_EVENT(vers);
10713a9568feSChuck Lever DEFINE_REPLY_EVENT(rqst);
10723a9568feSChuck Lever DEFINE_REPLY_EVENT(short);
10733a9568feSChuck Lever DEFINE_REPLY_EVENT(hdr);
1074b4a7f91cSChuck Lever 
10753821e232SChuck Lever TRACE_EVENT(xprtrdma_err_vers,
1076e48f083eSChuck Lever 	TP_PROTO(
10773821e232SChuck Lever 		const struct rpc_rqst *rqst,
10783821e232SChuck Lever 		__be32 *min,
10793821e232SChuck Lever 		__be32 *max
1080e48f083eSChuck Lever 	),
1081e48f083eSChuck Lever 
10823821e232SChuck Lever 	TP_ARGS(rqst, min, max),
1083e48f083eSChuck Lever 
1084e48f083eSChuck Lever 	TP_STRUCT__entry(
1085e48f083eSChuck Lever 		__field(unsigned int, task_id)
1086e48f083eSChuck Lever 		__field(unsigned int, client_id)
10873821e232SChuck Lever 		__field(u32, xid)
10883821e232SChuck Lever 		__field(u32, min)
10893821e232SChuck Lever 		__field(u32, max)
10903821e232SChuck Lever 	),
10913821e232SChuck Lever 
10923821e232SChuck Lever 	TP_fast_assign(
10933821e232SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
10943821e232SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
10953821e232SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
10963821e232SChuck Lever 		__entry->min = be32_to_cpup(min);
10973821e232SChuck Lever 		__entry->max = be32_to_cpup(max);
10983821e232SChuck Lever 	),
10993821e232SChuck Lever 
11003821e232SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x versions=[%u, %u]",
11013821e232SChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
11023821e232SChuck Lever 		__entry->min, __entry->max
11033821e232SChuck Lever 	)
11043821e232SChuck Lever );
11053821e232SChuck Lever 
11063821e232SChuck Lever TRACE_EVENT(xprtrdma_err_chunk,
11073821e232SChuck Lever 	TP_PROTO(
11083821e232SChuck Lever 		const struct rpc_rqst *rqst
11093821e232SChuck Lever 	),
11103821e232SChuck Lever 
11113821e232SChuck Lever 	TP_ARGS(rqst),
11123821e232SChuck Lever 
11133821e232SChuck Lever 	TP_STRUCT__entry(
11143821e232SChuck Lever 		__field(unsigned int, task_id)
11153821e232SChuck Lever 		__field(unsigned int, client_id)
1116e48f083eSChuck Lever 		__field(u32, xid)
1117e48f083eSChuck Lever 	),
1118e48f083eSChuck Lever 
1119e48f083eSChuck Lever 	TP_fast_assign(
11203821e232SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
11213821e232SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
11223821e232SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
1123e48f083eSChuck Lever 	),
1124e48f083eSChuck Lever 
11253821e232SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x",
11263821e232SChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid
1127e48f083eSChuck Lever 	)
1128e48f083eSChuck Lever );
1129e48f083eSChuck Lever 
11303821e232SChuck Lever TRACE_EVENT(xprtrdma_err_unrecognized,
11313821e232SChuck Lever 	TP_PROTO(
11323821e232SChuck Lever 		const struct rpc_rqst *rqst,
11333821e232SChuck Lever 		__be32 *procedure
11343821e232SChuck Lever 	),
11353821e232SChuck Lever 
11363821e232SChuck Lever 	TP_ARGS(rqst, procedure),
11373821e232SChuck Lever 
11383821e232SChuck Lever 	TP_STRUCT__entry(
11393821e232SChuck Lever 		__field(unsigned int, task_id)
11403821e232SChuck Lever 		__field(unsigned int, client_id)
11413821e232SChuck Lever 		__field(u32, xid)
11423821e232SChuck Lever 		__field(u32, procedure)
11433821e232SChuck Lever 	),
11443821e232SChuck Lever 
11453821e232SChuck Lever 	TP_fast_assign(
11463821e232SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
11473821e232SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
11483821e232SChuck Lever 		__entry->procedure = be32_to_cpup(procedure);
11493821e232SChuck Lever 	),
11503821e232SChuck Lever 
11513821e232SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x procedure=%u",
11523821e232SChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
11533821e232SChuck Lever 		__entry->procedure
11543821e232SChuck Lever 	)
11553821e232SChuck Lever );
1156e48f083eSChuck Lever 
1157e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_fixup,
1158e11b7c96SChuck Lever 	TP_PROTO(
1159e11b7c96SChuck Lever 		const struct rpc_rqst *rqst,
1160d4957f01SChuck Lever 		unsigned long fixup
1161e11b7c96SChuck Lever 	),
1162e11b7c96SChuck Lever 
1163d4957f01SChuck Lever 	TP_ARGS(rqst, fixup),
1164e11b7c96SChuck Lever 
1165e11b7c96SChuck Lever 	TP_STRUCT__entry(
1166e11b7c96SChuck Lever 		__field(unsigned int, task_id)
1167e11b7c96SChuck Lever 		__field(unsigned int, client_id)
1168d4957f01SChuck Lever 		__field(unsigned long, fixup)
1169d4957f01SChuck Lever 		__field(size_t, headlen)
1170d4957f01SChuck Lever 		__field(unsigned int, pagelen)
1171d4957f01SChuck Lever 		__field(size_t, taillen)
1172e11b7c96SChuck Lever 	),
1173e11b7c96SChuck Lever 
1174e11b7c96SChuck Lever 	TP_fast_assign(
1175e11b7c96SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
1176e11b7c96SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
1177d4957f01SChuck Lever 		__entry->fixup = fixup;
1178d4957f01SChuck Lever 		__entry->headlen = rqst->rq_rcv_buf.head[0].iov_len;
1179d4957f01SChuck Lever 		__entry->pagelen = rqst->rq_rcv_buf.page_len;
1180d4957f01SChuck Lever 		__entry->taillen = rqst->rq_rcv_buf.tail[0].iov_len;
1181e11b7c96SChuck Lever 	),
1182e11b7c96SChuck Lever 
1183d4957f01SChuck Lever 	TP_printk("task:%u@%u fixup=%lu xdr=%zu/%u/%zu",
1184d4957f01SChuck Lever 		__entry->task_id, __entry->client_id, __entry->fixup,
1185d4957f01SChuck Lever 		__entry->headlen, __entry->pagelen, __entry->taillen
1186e11b7c96SChuck Lever 	)
1187e11b7c96SChuck Lever );
1188e11b7c96SChuck Lever 
1189e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_decode_seg,
1190e11b7c96SChuck Lever 	TP_PROTO(
1191e11b7c96SChuck Lever 		u32 handle,
1192e11b7c96SChuck Lever 		u32 length,
1193e11b7c96SChuck Lever 		u64 offset
1194e11b7c96SChuck Lever 	),
1195e11b7c96SChuck Lever 
1196e11b7c96SChuck Lever 	TP_ARGS(handle, length, offset),
1197e11b7c96SChuck Lever 
1198e11b7c96SChuck Lever 	TP_STRUCT__entry(
1199e11b7c96SChuck Lever 		__field(u32, handle)
1200e11b7c96SChuck Lever 		__field(u32, length)
1201e11b7c96SChuck Lever 		__field(u64, offset)
1202e11b7c96SChuck Lever 	),
1203e11b7c96SChuck Lever 
1204e11b7c96SChuck Lever 	TP_fast_assign(
1205e11b7c96SChuck Lever 		__entry->handle = handle;
1206e11b7c96SChuck Lever 		__entry->length = length;
1207e11b7c96SChuck Lever 		__entry->offset = offset;
1208e11b7c96SChuck Lever 	),
1209e11b7c96SChuck Lever 
1210e11b7c96SChuck Lever 	TP_printk("%u@0x%016llx:0x%08x",
1211e11b7c96SChuck Lever 		__entry->length, (unsigned long long)__entry->offset,
1212e11b7c96SChuck Lever 		__entry->handle
1213e11b7c96SChuck Lever 	)
1214e11b7c96SChuck Lever );
1215e11b7c96SChuck Lever 
12168e24e191SChuck Lever TRACE_EVENT(xprtrdma_mrs_zap,
12178e24e191SChuck Lever 	TP_PROTO(
12188e24e191SChuck Lever 		const struct rpc_task *task
12198e24e191SChuck Lever 	),
12208e24e191SChuck Lever 
12218e24e191SChuck Lever 	TP_ARGS(task),
12228e24e191SChuck Lever 
12238e24e191SChuck Lever 	TP_STRUCT__entry(
12248e24e191SChuck Lever 		__field(unsigned int, task_id)
12258e24e191SChuck Lever 		__field(unsigned int, client_id)
12268e24e191SChuck Lever 	),
12278e24e191SChuck Lever 
12288e24e191SChuck Lever 	TP_fast_assign(
12298e24e191SChuck Lever 		__entry->task_id = task->tk_pid;
12308e24e191SChuck Lever 		__entry->client_id = task->tk_client->cl_clid;
12318e24e191SChuck Lever 	),
12328e24e191SChuck Lever 
12338e24e191SChuck Lever 	TP_printk("task:%u@%u",
12348e24e191SChuck Lever 		__entry->task_id, __entry->client_id
12358e24e191SChuck Lever 	)
12368e24e191SChuck Lever );
12378e24e191SChuck Lever 
1238fc1eb807SChuck Lever /**
1239fc1eb807SChuck Lever  ** Callback events
1240fc1eb807SChuck Lever  **/
1241fc1eb807SChuck Lever 
1242fc1eb807SChuck Lever TRACE_EVENT(xprtrdma_cb_setup,
1243fc1eb807SChuck Lever 	TP_PROTO(
1244fc1eb807SChuck Lever 		const struct rpcrdma_xprt *r_xprt,
1245fc1eb807SChuck Lever 		unsigned int reqs
1246fc1eb807SChuck Lever 	),
1247fc1eb807SChuck Lever 
1248fc1eb807SChuck Lever 	TP_ARGS(r_xprt, reqs),
1249fc1eb807SChuck Lever 
1250fc1eb807SChuck Lever 	TP_STRUCT__entry(
1251fc1eb807SChuck Lever 		__field(const void *, r_xprt)
1252fc1eb807SChuck Lever 		__field(unsigned int, reqs)
1253fc1eb807SChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
1254fc1eb807SChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
1255fc1eb807SChuck Lever 	),
1256fc1eb807SChuck Lever 
1257fc1eb807SChuck Lever 	TP_fast_assign(
1258fc1eb807SChuck Lever 		__entry->r_xprt = r_xprt;
1259fc1eb807SChuck Lever 		__entry->reqs = reqs;
1260fc1eb807SChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
1261fc1eb807SChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
1262fc1eb807SChuck Lever 	),
1263fc1eb807SChuck Lever 
1264fc1eb807SChuck Lever 	TP_printk("peer=[%s]:%s r_xprt=%p: %u reqs",
1265fc1eb807SChuck Lever 		__get_str(addr), __get_str(port),
1266fc1eb807SChuck Lever 		__entry->r_xprt, __entry->reqs
1267fc1eb807SChuck Lever 	)
1268fc1eb807SChuck Lever );
1269fc1eb807SChuck Lever 
1270d11e9346SChuck Lever DEFINE_CALLBACK_EVENT(call);
1271d11e9346SChuck Lever DEFINE_CALLBACK_EVENT(reply);
127207e10308SChuck Lever 
127398895edbSChuck Lever /**
127498895edbSChuck Lever  ** Server-side RPC/RDMA events
127598895edbSChuck Lever  **/
127698895edbSChuck Lever 
1277e979a173SChuck Lever DECLARE_EVENT_CLASS(svcrdma_accept_class,
1278e979a173SChuck Lever 	TP_PROTO(
1279e979a173SChuck Lever 		const struct svcxprt_rdma *rdma,
1280e979a173SChuck Lever 		long status
1281e979a173SChuck Lever 	),
1282e979a173SChuck Lever 
1283e979a173SChuck Lever 	TP_ARGS(rdma, status),
1284e979a173SChuck Lever 
1285e979a173SChuck Lever 	TP_STRUCT__entry(
1286e979a173SChuck Lever 		__field(long, status)
1287e979a173SChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1288e979a173SChuck Lever 	),
1289e979a173SChuck Lever 
1290e979a173SChuck Lever 	TP_fast_assign(
1291e979a173SChuck Lever 		__entry->status = status;
1292e979a173SChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1293e979a173SChuck Lever 	),
1294e979a173SChuck Lever 
1295e979a173SChuck Lever 	TP_printk("addr=%s status=%ld",
1296e979a173SChuck Lever 		__get_str(addr), __entry->status
1297e979a173SChuck Lever 	)
1298e979a173SChuck Lever );
1299e979a173SChuck Lever 
1300e979a173SChuck Lever #define DEFINE_ACCEPT_EVENT(name) \
1301e979a173SChuck Lever 		DEFINE_EVENT(svcrdma_accept_class, svcrdma_##name##_err, \
1302e979a173SChuck Lever 				TP_PROTO( \
1303e979a173SChuck Lever 					const struct svcxprt_rdma *rdma, \
1304e979a173SChuck Lever 					long status \
1305e979a173SChuck Lever 				), \
1306e979a173SChuck Lever 				TP_ARGS(rdma, status))
1307e979a173SChuck Lever 
1308e979a173SChuck Lever DEFINE_ACCEPT_EVENT(pd);
1309e979a173SChuck Lever DEFINE_ACCEPT_EVENT(qp);
1310e979a173SChuck Lever DEFINE_ACCEPT_EVENT(fabric);
1311e979a173SChuck Lever DEFINE_ACCEPT_EVENT(initdepth);
1312e979a173SChuck Lever DEFINE_ACCEPT_EVENT(accept);
1313e979a173SChuck Lever 
131498895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_MSG);
131598895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_NOMSG);
131698895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_MSGP);
131798895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_DONE);
131898895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_ERROR);
131998895edbSChuck Lever 
132098895edbSChuck Lever #define show_rpcrdma_proc(x)						\
132198895edbSChuck Lever 		__print_symbolic(x,					\
132298895edbSChuck Lever 				{ RDMA_MSG, "RDMA_MSG" },		\
132398895edbSChuck Lever 				{ RDMA_NOMSG, "RDMA_NOMSG" },		\
132498895edbSChuck Lever 				{ RDMA_MSGP, "RDMA_MSGP" },		\
132598895edbSChuck Lever 				{ RDMA_DONE, "RDMA_DONE" },		\
132698895edbSChuck Lever 				{ RDMA_ERROR, "RDMA_ERROR" })
132798895edbSChuck Lever 
132898895edbSChuck Lever TRACE_EVENT(svcrdma_decode_rqst,
132998895edbSChuck Lever 	TP_PROTO(
1330007140eeSChuck Lever 		const struct svc_rdma_recv_ctxt *ctxt,
133198895edbSChuck Lever 		__be32 *p,
133298895edbSChuck Lever 		unsigned int hdrlen
133398895edbSChuck Lever 	),
133498895edbSChuck Lever 
1335007140eeSChuck Lever 	TP_ARGS(ctxt, p, hdrlen),
133698895edbSChuck Lever 
133798895edbSChuck Lever 	TP_STRUCT__entry(
1338007140eeSChuck Lever 		__field(u32, cq_id)
1339007140eeSChuck Lever 		__field(int, completion_id)
134098895edbSChuck Lever 		__field(u32, xid)
134198895edbSChuck Lever 		__field(u32, vers)
134298895edbSChuck Lever 		__field(u32, proc)
134398895edbSChuck Lever 		__field(u32, credits)
134498895edbSChuck Lever 		__field(unsigned int, hdrlen)
134598895edbSChuck Lever 	),
134698895edbSChuck Lever 
134798895edbSChuck Lever 	TP_fast_assign(
1348007140eeSChuck Lever 		__entry->cq_id = ctxt->rc_cid.ci_queue_id;
1349007140eeSChuck Lever 		__entry->completion_id = ctxt->rc_cid.ci_completion_id;
135098895edbSChuck Lever 		__entry->xid = be32_to_cpup(p++);
135198895edbSChuck Lever 		__entry->vers = be32_to_cpup(p++);
135298895edbSChuck Lever 		__entry->credits = be32_to_cpup(p++);
135398895edbSChuck Lever 		__entry->proc = be32_to_cpup(p);
135498895edbSChuck Lever 		__entry->hdrlen = hdrlen;
135598895edbSChuck Lever 	),
135698895edbSChuck Lever 
1357007140eeSChuck Lever 	TP_printk("cq.id=%u cid=%d xid=0x%08x vers=%u credits=%u proc=%s hdrlen=%u",
1358007140eeSChuck Lever 		__entry->cq_id, __entry->completion_id,
135998895edbSChuck Lever 		__entry->xid, __entry->vers, __entry->credits,
136098895edbSChuck Lever 		show_rpcrdma_proc(__entry->proc), __entry->hdrlen)
136198895edbSChuck Lever );
136298895edbSChuck Lever 
136327ce6294SChuck Lever TRACE_EVENT(svcrdma_decode_short_err,
136498895edbSChuck Lever 	TP_PROTO(
1365007140eeSChuck Lever 		const struct svc_rdma_recv_ctxt *ctxt,
136698895edbSChuck Lever 		unsigned int hdrlen
136798895edbSChuck Lever 	),
136898895edbSChuck Lever 
1369007140eeSChuck Lever 	TP_ARGS(ctxt, hdrlen),
137098895edbSChuck Lever 
137198895edbSChuck Lever 	TP_STRUCT__entry(
1372007140eeSChuck Lever 		__field(u32, cq_id)
1373007140eeSChuck Lever 		__field(int, completion_id)
137498895edbSChuck Lever 		__field(unsigned int, hdrlen)
137598895edbSChuck Lever 	),
137698895edbSChuck Lever 
137798895edbSChuck Lever 	TP_fast_assign(
1378007140eeSChuck Lever 		__entry->cq_id = ctxt->rc_cid.ci_queue_id;
1379007140eeSChuck Lever 		__entry->completion_id = ctxt->rc_cid.ci_completion_id;
138098895edbSChuck Lever 		__entry->hdrlen = hdrlen;
138198895edbSChuck Lever 	),
138298895edbSChuck Lever 
1383007140eeSChuck Lever 	TP_printk("cq.id=%u cid=%d hdrlen=%u",
1384007140eeSChuck Lever 		__entry->cq_id, __entry->completion_id,
1385007140eeSChuck Lever 		__entry->hdrlen)
138698895edbSChuck Lever );
138798895edbSChuck Lever 
138898895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_badreq_event,
138998895edbSChuck Lever 	TP_PROTO(
1390007140eeSChuck Lever 		const struct svc_rdma_recv_ctxt *ctxt,
139198895edbSChuck Lever 		__be32 *p
139298895edbSChuck Lever 	),
139398895edbSChuck Lever 
1394007140eeSChuck Lever 	TP_ARGS(ctxt, p),
139598895edbSChuck Lever 
139698895edbSChuck Lever 	TP_STRUCT__entry(
1397007140eeSChuck Lever 		__field(u32, cq_id)
1398007140eeSChuck Lever 		__field(int, completion_id)
139998895edbSChuck Lever 		__field(u32, xid)
140098895edbSChuck Lever 		__field(u32, vers)
140198895edbSChuck Lever 		__field(u32, proc)
140298895edbSChuck Lever 		__field(u32, credits)
140398895edbSChuck Lever 	),
140498895edbSChuck Lever 
140598895edbSChuck Lever 	TP_fast_assign(
1406007140eeSChuck Lever 		__entry->cq_id = ctxt->rc_cid.ci_queue_id;
1407007140eeSChuck Lever 		__entry->completion_id = ctxt->rc_cid.ci_completion_id;
140898895edbSChuck Lever 		__entry->xid = be32_to_cpup(p++);
140998895edbSChuck Lever 		__entry->vers = be32_to_cpup(p++);
141098895edbSChuck Lever 		__entry->credits = be32_to_cpup(p++);
141198895edbSChuck Lever 		__entry->proc = be32_to_cpup(p);
141298895edbSChuck Lever 	),
141398895edbSChuck Lever 
1414007140eeSChuck Lever 	TP_printk("cq.id=%u cid=%d xid=0x%08x vers=%u credits=%u proc=%u",
1415007140eeSChuck Lever 		__entry->cq_id, __entry->completion_id,
141698895edbSChuck Lever 		__entry->xid, __entry->vers, __entry->credits, __entry->proc)
141798895edbSChuck Lever );
141898895edbSChuck Lever 
141998895edbSChuck Lever #define DEFINE_BADREQ_EVENT(name)					\
142027ce6294SChuck Lever 		DEFINE_EVENT(svcrdma_badreq_event,			\
142127ce6294SChuck Lever 			     svcrdma_decode_##name##_err,		\
142298895edbSChuck Lever 				TP_PROTO(				\
1423007140eeSChuck Lever 					const struct svc_rdma_recv_ctxt *ctxt,	\
142498895edbSChuck Lever 					__be32 *p			\
142598895edbSChuck Lever 				),					\
1426007140eeSChuck Lever 				TP_ARGS(ctxt, p))
142798895edbSChuck Lever 
142898895edbSChuck Lever DEFINE_BADREQ_EVENT(badvers);
142998895edbSChuck Lever DEFINE_BADREQ_EVENT(drop);
143098895edbSChuck Lever DEFINE_BADREQ_EVENT(badproc);
143198895edbSChuck Lever DEFINE_BADREQ_EVENT(parse);
143298895edbSChuck Lever 
14336911f3e1SChuck Lever TRACE_EVENT(svcrdma_encode_wseg,
14346911f3e1SChuck Lever 	TP_PROTO(
14356911f3e1SChuck Lever 		const struct svc_rdma_send_ctxt *ctxt,
14366911f3e1SChuck Lever 		u32 segno,
14376911f3e1SChuck Lever 		u32 handle,
14386911f3e1SChuck Lever 		u32 length,
14396911f3e1SChuck Lever 		u64 offset
14406911f3e1SChuck Lever 	),
14416911f3e1SChuck Lever 
14426911f3e1SChuck Lever 	TP_ARGS(ctxt, segno, handle, length, offset),
14436911f3e1SChuck Lever 
14446911f3e1SChuck Lever 	TP_STRUCT__entry(
14456911f3e1SChuck Lever 		__field(u32, cq_id)
14466911f3e1SChuck Lever 		__field(int, completion_id)
14476911f3e1SChuck Lever 		__field(u32, segno)
14486911f3e1SChuck Lever 		__field(u32, handle)
14496911f3e1SChuck Lever 		__field(u32, length)
14506911f3e1SChuck Lever 		__field(u64, offset)
14516911f3e1SChuck Lever 	),
14526911f3e1SChuck Lever 
14536911f3e1SChuck Lever 	TP_fast_assign(
14546911f3e1SChuck Lever 		__entry->cq_id = ctxt->sc_cid.ci_queue_id;
14556911f3e1SChuck Lever 		__entry->completion_id = ctxt->sc_cid.ci_completion_id;
14566911f3e1SChuck Lever 		__entry->segno = segno;
14576911f3e1SChuck Lever 		__entry->handle = handle;
14586911f3e1SChuck Lever 		__entry->length = length;
14596911f3e1SChuck Lever 		__entry->offset = offset;
14606911f3e1SChuck Lever 	),
14616911f3e1SChuck Lever 
14626911f3e1SChuck Lever 	TP_printk("cq_id=%u cid=%d segno=%u %u@0x%016llx:0x%08x",
14636911f3e1SChuck Lever 		__entry->cq_id, __entry->completion_id,
14646911f3e1SChuck Lever 		__entry->segno, __entry->length,
14656911f3e1SChuck Lever 		(unsigned long long)__entry->offset, __entry->handle
14666911f3e1SChuck Lever 	)
14676911f3e1SChuck Lever );
14686911f3e1SChuck Lever 
146978147ca8SChuck Lever TRACE_EVENT(svcrdma_decode_rseg,
147078147ca8SChuck Lever 	TP_PROTO(
147178147ca8SChuck Lever 		const struct rpc_rdma_cid *cid,
147278147ca8SChuck Lever 		const struct svc_rdma_chunk *chunk,
147378147ca8SChuck Lever 		const struct svc_rdma_segment *segment
147478147ca8SChuck Lever 	),
147578147ca8SChuck Lever 
147678147ca8SChuck Lever 	TP_ARGS(cid, chunk, segment),
147778147ca8SChuck Lever 
147878147ca8SChuck Lever 	TP_STRUCT__entry(
147978147ca8SChuck Lever 		__field(u32, cq_id)
148078147ca8SChuck Lever 		__field(int, completion_id)
148178147ca8SChuck Lever 		__field(u32, segno)
148278147ca8SChuck Lever 		__field(u32, position)
148378147ca8SChuck Lever 		__field(u32, handle)
148478147ca8SChuck Lever 		__field(u32, length)
148578147ca8SChuck Lever 		__field(u64, offset)
148678147ca8SChuck Lever 	),
148778147ca8SChuck Lever 
148878147ca8SChuck Lever 	TP_fast_assign(
148978147ca8SChuck Lever 		__entry->cq_id = cid->ci_queue_id;
149078147ca8SChuck Lever 		__entry->completion_id = cid->ci_completion_id;
149178147ca8SChuck Lever 		__entry->segno = chunk->ch_segcount;
149278147ca8SChuck Lever 		__entry->position = chunk->ch_position;
149378147ca8SChuck Lever 		__entry->handle = segment->rs_handle;
149478147ca8SChuck Lever 		__entry->length = segment->rs_length;
149578147ca8SChuck Lever 		__entry->offset = segment->rs_offset;
149678147ca8SChuck Lever 	),
149778147ca8SChuck Lever 
149878147ca8SChuck Lever 	TP_printk("cq_id=%u cid=%d segno=%u position=%u %u@0x%016llx:0x%08x",
149978147ca8SChuck Lever 		__entry->cq_id, __entry->completion_id,
150078147ca8SChuck Lever 		__entry->segno, __entry->position, __entry->length,
150178147ca8SChuck Lever 		(unsigned long long)__entry->offset, __entry->handle
150278147ca8SChuck Lever 	)
150378147ca8SChuck Lever );
150478147ca8SChuck Lever 
150578147ca8SChuck Lever TRACE_EVENT(svcrdma_decode_wseg,
150678147ca8SChuck Lever 	TP_PROTO(
150778147ca8SChuck Lever 		const struct rpc_rdma_cid *cid,
150878147ca8SChuck Lever 		const struct svc_rdma_chunk *chunk,
150978147ca8SChuck Lever 		u32 segno
151078147ca8SChuck Lever 	),
151178147ca8SChuck Lever 
151278147ca8SChuck Lever 	TP_ARGS(cid, chunk, segno),
151378147ca8SChuck Lever 
151478147ca8SChuck Lever 	TP_STRUCT__entry(
151578147ca8SChuck Lever 		__field(u32, cq_id)
151678147ca8SChuck Lever 		__field(int, completion_id)
151778147ca8SChuck Lever 		__field(u32, segno)
151878147ca8SChuck Lever 		__field(u32, handle)
151978147ca8SChuck Lever 		__field(u32, length)
152078147ca8SChuck Lever 		__field(u64, offset)
152178147ca8SChuck Lever 	),
152278147ca8SChuck Lever 
152378147ca8SChuck Lever 	TP_fast_assign(
152478147ca8SChuck Lever 		const struct svc_rdma_segment *segment =
152578147ca8SChuck Lever 			&chunk->ch_segments[segno];
152678147ca8SChuck Lever 
152778147ca8SChuck Lever 		__entry->cq_id = cid->ci_queue_id;
152878147ca8SChuck Lever 		__entry->completion_id = cid->ci_completion_id;
152978147ca8SChuck Lever 		__entry->segno = segno;
153078147ca8SChuck Lever 		__entry->handle = segment->rs_handle;
153178147ca8SChuck Lever 		__entry->length = segment->rs_length;
153278147ca8SChuck Lever 		__entry->offset = segment->rs_offset;
153378147ca8SChuck Lever 	),
153478147ca8SChuck Lever 
153578147ca8SChuck Lever 	TP_printk("cq_id=%u cid=%d segno=%u %u@0x%016llx:0x%08x",
153678147ca8SChuck Lever 		__entry->cq_id, __entry->completion_id,
153778147ca8SChuck Lever 		__entry->segno, __entry->length,
153878147ca8SChuck Lever 		(unsigned long long)__entry->offset, __entry->handle
153978147ca8SChuck Lever 	)
154078147ca8SChuck Lever );
154178147ca8SChuck Lever 
154298895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_error_event,
154398895edbSChuck Lever 	TP_PROTO(
154498895edbSChuck Lever 		__be32 xid
154598895edbSChuck Lever 	),
154698895edbSChuck Lever 
154798895edbSChuck Lever 	TP_ARGS(xid),
154898895edbSChuck Lever 
154998895edbSChuck Lever 	TP_STRUCT__entry(
155098895edbSChuck Lever 		__field(u32, xid)
155198895edbSChuck Lever 	),
155298895edbSChuck Lever 
155398895edbSChuck Lever 	TP_fast_assign(
155498895edbSChuck Lever 		__entry->xid = be32_to_cpu(xid);
155598895edbSChuck Lever 	),
155698895edbSChuck Lever 
155798895edbSChuck Lever 	TP_printk("xid=0x%08x",
155898895edbSChuck Lever 		__entry->xid
155998895edbSChuck Lever 	)
156098895edbSChuck Lever );
156198895edbSChuck Lever 
156298895edbSChuck Lever #define DEFINE_ERROR_EVENT(name)					\
156398895edbSChuck Lever 		DEFINE_EVENT(svcrdma_error_event, svcrdma_err_##name,	\
156498895edbSChuck Lever 				TP_PROTO(				\
156598895edbSChuck Lever 					__be32 xid			\
156698895edbSChuck Lever 				),					\
156798895edbSChuck Lever 				TP_ARGS(xid))
156898895edbSChuck Lever 
156998895edbSChuck Lever DEFINE_ERROR_EVENT(vers);
157098895edbSChuck Lever DEFINE_ERROR_EVENT(chunk);
157198895edbSChuck Lever 
1572bd2abef3SChuck Lever /**
1573bd2abef3SChuck Lever  ** Server-side RDMA API events
1574bd2abef3SChuck Lever  **/
1575bd2abef3SChuck Lever 
1576832b2cb9SChuck Lever DECLARE_EVENT_CLASS(svcrdma_dma_map_class,
1577bd2abef3SChuck Lever 	TP_PROTO(
1578bd2abef3SChuck Lever 		const struct svcxprt_rdma *rdma,
1579832b2cb9SChuck Lever 		u64 dma_addr,
1580832b2cb9SChuck Lever 		u32 length
1581bd2abef3SChuck Lever 	),
1582bd2abef3SChuck Lever 
1583832b2cb9SChuck Lever 	TP_ARGS(rdma, dma_addr, length),
1584bd2abef3SChuck Lever 
1585bd2abef3SChuck Lever 	TP_STRUCT__entry(
1586832b2cb9SChuck Lever 		__field(u64, dma_addr)
1587832b2cb9SChuck Lever 		__field(u32, length)
1588bd2abef3SChuck Lever 		__string(device, rdma->sc_cm_id->device->name)
1589bd2abef3SChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1590bd2abef3SChuck Lever 	),
1591bd2abef3SChuck Lever 
1592bd2abef3SChuck Lever 	TP_fast_assign(
1593832b2cb9SChuck Lever 		__entry->dma_addr = dma_addr;
1594832b2cb9SChuck Lever 		__entry->length = length;
1595bd2abef3SChuck Lever 		__assign_str(device, rdma->sc_cm_id->device->name);
1596bd2abef3SChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1597bd2abef3SChuck Lever 	),
1598bd2abef3SChuck Lever 
1599832b2cb9SChuck Lever 	TP_printk("addr=%s device=%s dma_addr=%llu length=%u",
1600832b2cb9SChuck Lever 		__get_str(addr), __get_str(device),
1601832b2cb9SChuck Lever 		__entry->dma_addr, __entry->length
1602bd2abef3SChuck Lever 	)
1603bd2abef3SChuck Lever );
1604bd2abef3SChuck Lever 
1605832b2cb9SChuck Lever #define DEFINE_SVC_DMA_EVENT(name)					\
1606832b2cb9SChuck Lever 		DEFINE_EVENT(svcrdma_dma_map_class, svcrdma_##name,	\
1607832b2cb9SChuck Lever 				TP_PROTO(				\
1608832b2cb9SChuck Lever 					const struct svcxprt_rdma *rdma,\
1609832b2cb9SChuck Lever 					u64 dma_addr,			\
1610832b2cb9SChuck Lever 					u32 length			\
1611832b2cb9SChuck Lever 				),					\
1612832b2cb9SChuck Lever 				TP_ARGS(rdma, dma_addr, length))
1613832b2cb9SChuck Lever 
1614832b2cb9SChuck Lever DEFINE_SVC_DMA_EVENT(dma_map_page);
16152371bcc0SChuck Lever DEFINE_SVC_DMA_EVENT(dma_map_err);
1616832b2cb9SChuck Lever DEFINE_SVC_DMA_EVENT(dma_unmap_page);
1617832b2cb9SChuck Lever 
16182abfbe7eSChuck Lever TRACE_EVENT(svcrdma_dma_map_rw_err,
1619bd2abef3SChuck Lever 	TP_PROTO(
1620bd2abef3SChuck Lever 		const struct svcxprt_rdma *rdma,
16212abfbe7eSChuck Lever 		unsigned int nents,
1622bd2abef3SChuck Lever 		int status
1623bd2abef3SChuck Lever 	),
1624bd2abef3SChuck Lever 
16252abfbe7eSChuck Lever 	TP_ARGS(rdma, nents, status),
1626bd2abef3SChuck Lever 
1627bd2abef3SChuck Lever 	TP_STRUCT__entry(
1628bd2abef3SChuck Lever 		__field(int, status)
16292abfbe7eSChuck Lever 		__field(unsigned int, nents)
1630bd2abef3SChuck Lever 		__string(device, rdma->sc_cm_id->device->name)
1631bd2abef3SChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1632bd2abef3SChuck Lever 	),
1633bd2abef3SChuck Lever 
1634bd2abef3SChuck Lever 	TP_fast_assign(
1635bd2abef3SChuck Lever 		__entry->status = status;
16362abfbe7eSChuck Lever 		__entry->nents = nents;
1637bd2abef3SChuck Lever 		__assign_str(device, rdma->sc_cm_id->device->name);
1638bd2abef3SChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1639bd2abef3SChuck Lever 	),
1640bd2abef3SChuck Lever 
16412abfbe7eSChuck Lever 	TP_printk("addr=%s device=%s nents=%u status=%d",
16422abfbe7eSChuck Lever 		__get_str(addr), __get_str(device), __entry->nents,
16432abfbe7eSChuck Lever 		__entry->status
1644bd2abef3SChuck Lever 	)
1645bd2abef3SChuck Lever );
1646bd2abef3SChuck Lever 
1647f4e53e1cSChuck Lever TRACE_EVENT(svcrdma_no_rwctx_err,
1648f4e53e1cSChuck Lever 	TP_PROTO(
1649f4e53e1cSChuck Lever 		const struct svcxprt_rdma *rdma,
1650f4e53e1cSChuck Lever 		unsigned int num_sges
1651f4e53e1cSChuck Lever 	),
1652f4e53e1cSChuck Lever 
1653f4e53e1cSChuck Lever 	TP_ARGS(rdma, num_sges),
1654f4e53e1cSChuck Lever 
1655f4e53e1cSChuck Lever 	TP_STRUCT__entry(
1656f4e53e1cSChuck Lever 		__field(unsigned int, num_sges)
1657f4e53e1cSChuck Lever 		__string(device, rdma->sc_cm_id->device->name)
1658f4e53e1cSChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1659f4e53e1cSChuck Lever 	),
1660f4e53e1cSChuck Lever 
1661f4e53e1cSChuck Lever 	TP_fast_assign(
1662f4e53e1cSChuck Lever 		__entry->num_sges = num_sges;
1663f4e53e1cSChuck Lever 		__assign_str(device, rdma->sc_cm_id->device->name);
1664f4e53e1cSChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1665f4e53e1cSChuck Lever 	),
1666f4e53e1cSChuck Lever 
1667f4e53e1cSChuck Lever 	TP_printk("addr=%s device=%s num_sges=%d",
1668f4e53e1cSChuck Lever 		__get_str(addr), __get_str(device), __entry->num_sges
1669f4e53e1cSChuck Lever 	)
1670f4e53e1cSChuck Lever );
1671f4e53e1cSChuck Lever 
16729d200638SChuck Lever TRACE_EVENT(svcrdma_page_overrun_err,
16739d200638SChuck Lever 	TP_PROTO(
16749d200638SChuck Lever 		const struct svcxprt_rdma *rdma,
16759d200638SChuck Lever 		const struct svc_rqst *rqst,
16769d200638SChuck Lever 		unsigned int pageno
16779d200638SChuck Lever 	),
16789d200638SChuck Lever 
16799d200638SChuck Lever 	TP_ARGS(rdma, rqst, pageno),
16809d200638SChuck Lever 
16819d200638SChuck Lever 	TP_STRUCT__entry(
16829d200638SChuck Lever 		__field(unsigned int, pageno)
16839d200638SChuck Lever 		__field(u32, xid)
16849d200638SChuck Lever 		__string(device, rdma->sc_cm_id->device->name)
16859d200638SChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
16869d200638SChuck Lever 	),
16879d200638SChuck Lever 
16889d200638SChuck Lever 	TP_fast_assign(
16899d200638SChuck Lever 		__entry->pageno = pageno;
16909d200638SChuck Lever 		__entry->xid = __be32_to_cpu(rqst->rq_xid);
16919d200638SChuck Lever 		__assign_str(device, rdma->sc_cm_id->device->name);
16929d200638SChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
16939d200638SChuck Lever 	),
16949d200638SChuck Lever 
16959d200638SChuck Lever 	TP_printk("addr=%s device=%s xid=0x%08x pageno=%u", __get_str(addr),
16969d200638SChuck Lever 		__get_str(device), __entry->xid, __entry->pageno
16979d200638SChuck Lever 	)
16989d200638SChuck Lever );
16999d200638SChuck Lever 
1700dbc17acdSChuck Lever TRACE_EVENT(svcrdma_small_wrch_err,
1701dbc17acdSChuck Lever 	TP_PROTO(
1702dbc17acdSChuck Lever 		const struct svcxprt_rdma *rdma,
1703dbc17acdSChuck Lever 		unsigned int remaining,
1704dbc17acdSChuck Lever 		unsigned int seg_no,
1705dbc17acdSChuck Lever 		unsigned int num_segs
1706dbc17acdSChuck Lever 	),
1707dbc17acdSChuck Lever 
1708dbc17acdSChuck Lever 	TP_ARGS(rdma, remaining, seg_no, num_segs),
1709dbc17acdSChuck Lever 
1710dbc17acdSChuck Lever 	TP_STRUCT__entry(
1711dbc17acdSChuck Lever 		__field(unsigned int, remaining)
1712dbc17acdSChuck Lever 		__field(unsigned int, seg_no)
1713dbc17acdSChuck Lever 		__field(unsigned int, num_segs)
1714dbc17acdSChuck Lever 		__string(device, rdma->sc_cm_id->device->name)
1715dbc17acdSChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1716dbc17acdSChuck Lever 	),
1717dbc17acdSChuck Lever 
1718dbc17acdSChuck Lever 	TP_fast_assign(
1719dbc17acdSChuck Lever 		__entry->remaining = remaining;
1720dbc17acdSChuck Lever 		__entry->seg_no = seg_no;
1721dbc17acdSChuck Lever 		__entry->num_segs = num_segs;
1722dbc17acdSChuck Lever 		__assign_str(device, rdma->sc_cm_id->device->name);
1723dbc17acdSChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1724dbc17acdSChuck Lever 	),
1725dbc17acdSChuck Lever 
1726dbc17acdSChuck Lever 	TP_printk("addr=%s device=%s remaining=%u seg_no=%u num_segs=%u",
1727dbc17acdSChuck Lever 		__get_str(addr), __get_str(device), __entry->remaining,
1728dbc17acdSChuck Lever 		__entry->seg_no, __entry->num_segs
1729dbc17acdSChuck Lever 	)
1730dbc17acdSChuck Lever );
1731dbc17acdSChuck Lever 
17320dabe948SChuck Lever TRACE_EVENT(svcrdma_send_pullup,
17330dabe948SChuck Lever 	TP_PROTO(
17349d0b09d5SChuck Lever 		const struct svc_rdma_send_ctxt *ctxt,
17359d0b09d5SChuck Lever 		unsigned int msglen
17360dabe948SChuck Lever 	),
17370dabe948SChuck Lever 
17389d0b09d5SChuck Lever 	TP_ARGS(ctxt, msglen),
17390dabe948SChuck Lever 
17400dabe948SChuck Lever 	TP_STRUCT__entry(
17419d0b09d5SChuck Lever 		__field(u32, cq_id)
17429d0b09d5SChuck Lever 		__field(int, completion_id)
17439d0b09d5SChuck Lever 		__field(unsigned int, hdrlen)
17449d0b09d5SChuck Lever 		__field(unsigned int, msglen)
17450dabe948SChuck Lever 	),
17460dabe948SChuck Lever 
17470dabe948SChuck Lever 	TP_fast_assign(
17489d0b09d5SChuck Lever 		__entry->cq_id = ctxt->sc_cid.ci_queue_id;
17499d0b09d5SChuck Lever 		__entry->completion_id = ctxt->sc_cid.ci_completion_id;
17509d0b09d5SChuck Lever 		__entry->hdrlen = ctxt->sc_hdrbuf.len,
17519d0b09d5SChuck Lever 		__entry->msglen = msglen;
17520dabe948SChuck Lever 	),
17530dabe948SChuck Lever 
17549d0b09d5SChuck Lever 	TP_printk("cq_id=%u cid=%d hdr=%u msg=%u (total %u)",
17559d0b09d5SChuck Lever 		__entry->cq_id, __entry->completion_id,
17569d0b09d5SChuck Lever 		__entry->hdrlen, __entry->msglen,
17579d0b09d5SChuck Lever 		__entry->hdrlen + __entry->msglen)
17580dabe948SChuck Lever );
17590dabe948SChuck Lever 
17603f8f25c6SChuck Lever TRACE_EVENT(svcrdma_send_err,
1761bd2abef3SChuck Lever 	TP_PROTO(
1762bd2abef3SChuck Lever 		const struct svc_rqst *rqst,
1763bd2abef3SChuck Lever 		int status
1764bd2abef3SChuck Lever 	),
1765bd2abef3SChuck Lever 
1766bd2abef3SChuck Lever 	TP_ARGS(rqst, status),
1767bd2abef3SChuck Lever 
1768bd2abef3SChuck Lever 	TP_STRUCT__entry(
1769bd2abef3SChuck Lever 		__field(int, status)
1770bd2abef3SChuck Lever 		__field(u32, xid)
1771bd2abef3SChuck Lever 		__string(addr, rqst->rq_xprt->xpt_remotebuf)
1772bd2abef3SChuck Lever 	),
1773bd2abef3SChuck Lever 
1774bd2abef3SChuck Lever 	TP_fast_assign(
1775bd2abef3SChuck Lever 		__entry->status = status;
1776bd2abef3SChuck Lever 		__entry->xid = __be32_to_cpu(rqst->rq_xid);
1777bd2abef3SChuck Lever 		__assign_str(addr, rqst->rq_xprt->xpt_remotebuf);
1778bd2abef3SChuck Lever 	),
1779bd2abef3SChuck Lever 
17803f8f25c6SChuck Lever 	TP_printk("addr=%s xid=0x%08x status=%d", __get_str(addr),
1781bd2abef3SChuck Lever 		__entry->xid, __entry->status
1782bd2abef3SChuck Lever 	)
1783bd2abef3SChuck Lever );
1784bd2abef3SChuck Lever 
1785bd2abef3SChuck Lever TRACE_EVENT(svcrdma_post_send,
1786bd2abef3SChuck Lever 	TP_PROTO(
178717f70f8dSChuck Lever 		const struct svc_rdma_send_ctxt *ctxt
1788bd2abef3SChuck Lever 	),
1789bd2abef3SChuck Lever 
179017f70f8dSChuck Lever 	TP_ARGS(ctxt),
1791bd2abef3SChuck Lever 
1792bd2abef3SChuck Lever 	TP_STRUCT__entry(
179317f70f8dSChuck Lever 		__field(u32, cq_id)
179417f70f8dSChuck Lever 		__field(int, completion_id)
1795bd2abef3SChuck Lever 		__field(unsigned int, num_sge)
1796bd2abef3SChuck Lever 		__field(u32, inv_rkey)
1797bd2abef3SChuck Lever 	),
1798bd2abef3SChuck Lever 
1799bd2abef3SChuck Lever 	TP_fast_assign(
180017f70f8dSChuck Lever 		const struct ib_send_wr *wr = &ctxt->sc_send_wr;
180117f70f8dSChuck Lever 
180217f70f8dSChuck Lever 		__entry->cq_id = ctxt->sc_cid.ci_queue_id;
180317f70f8dSChuck Lever 		__entry->completion_id = ctxt->sc_cid.ci_completion_id;
1804bd2abef3SChuck Lever 		__entry->num_sge = wr->num_sge;
1805bd2abef3SChuck Lever 		__entry->inv_rkey = (wr->opcode == IB_WR_SEND_WITH_INV) ?
1806bd2abef3SChuck Lever 					wr->ex.invalidate_rkey : 0;
1807bd2abef3SChuck Lever 	),
1808bd2abef3SChuck Lever 
180917f70f8dSChuck Lever 	TP_printk("cq_id=%u cid=%d num_sge=%u inv_rkey=0x%08x",
181017f70f8dSChuck Lever 		__entry->cq_id, __entry->completion_id,
181117f70f8dSChuck Lever 		__entry->num_sge, __entry->inv_rkey
1812bd2abef3SChuck Lever 	)
1813bd2abef3SChuck Lever );
1814bd2abef3SChuck Lever 
18153ac56c2fSChuck Lever DEFINE_COMPLETION_EVENT(svcrdma_wc_send);
1816bd2abef3SChuck Lever 
1817bd2abef3SChuck Lever TRACE_EVENT(svcrdma_post_recv,
1818bd2abef3SChuck Lever 	TP_PROTO(
18199b3bcf8cSChuck Lever 		const struct svc_rdma_recv_ctxt *ctxt
1820bd2abef3SChuck Lever 	),
1821bd2abef3SChuck Lever 
18229b3bcf8cSChuck Lever 	TP_ARGS(ctxt),
1823bd2abef3SChuck Lever 
1824bd2abef3SChuck Lever 	TP_STRUCT__entry(
18259b3bcf8cSChuck Lever 		__field(u32, cq_id)
18269b3bcf8cSChuck Lever 		__field(int, completion_id)
1827bd2abef3SChuck Lever 	),
1828bd2abef3SChuck Lever 
1829bd2abef3SChuck Lever 	TP_fast_assign(
18309b3bcf8cSChuck Lever 		__entry->cq_id = ctxt->rc_cid.ci_queue_id;
18319b3bcf8cSChuck Lever 		__entry->completion_id = ctxt->rc_cid.ci_completion_id;
1832bd2abef3SChuck Lever 	),
1833bd2abef3SChuck Lever 
18349b3bcf8cSChuck Lever 	TP_printk("cq.id=%d cid=%d",
18359b3bcf8cSChuck Lever 		__entry->cq_id, __entry->completion_id
1836bd2abef3SChuck Lever 	)
1837bd2abef3SChuck Lever );
1838bd2abef3SChuck Lever 
1839*c30f259aSChuck Lever DEFINE_RECEIVE_COMPLETION_EVENT(svcrdma_wc_receive);
18409b3bcf8cSChuck Lever 
18419b3bcf8cSChuck Lever TRACE_EVENT(svcrdma_rq_post_err,
1842bd2abef3SChuck Lever 	TP_PROTO(
18439b3bcf8cSChuck Lever 		const struct svcxprt_rdma *rdma,
18449b3bcf8cSChuck Lever 		int status
1845bd2abef3SChuck Lever 	),
1846bd2abef3SChuck Lever 
18479b3bcf8cSChuck Lever 	TP_ARGS(rdma, status),
1848bd2abef3SChuck Lever 
1849bd2abef3SChuck Lever 	TP_STRUCT__entry(
18509b3bcf8cSChuck Lever 		__field(int, status)
18519b3bcf8cSChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1852bd2abef3SChuck Lever 	),
1853bd2abef3SChuck Lever 
1854bd2abef3SChuck Lever 	TP_fast_assign(
18559b3bcf8cSChuck Lever 		__entry->status = status;
18569b3bcf8cSChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1857bd2abef3SChuck Lever 	),
1858bd2abef3SChuck Lever 
18599b3bcf8cSChuck Lever 	TP_printk("addr=%s status=%d",
18609b3bcf8cSChuck Lever 		__get_str(addr), __entry->status
1861bd2abef3SChuck Lever 	)
1862bd2abef3SChuck Lever );
1863bd2abef3SChuck Lever 
1864b704be09SChuck Lever DECLARE_EVENT_CLASS(svcrdma_post_chunk_class,
1865bd2abef3SChuck Lever 	TP_PROTO(
18666787f0beSChuck Lever 		const struct rpc_rdma_cid *cid,
1867e28b4fc6SChuck Lever 		int sqecount
1868bd2abef3SChuck Lever 	),
1869bd2abef3SChuck Lever 
18706787f0beSChuck Lever 	TP_ARGS(cid, sqecount),
1871bd2abef3SChuck Lever 
1872bd2abef3SChuck Lever 	TP_STRUCT__entry(
18736787f0beSChuck Lever 		__field(u32, cq_id)
18746787f0beSChuck Lever 		__field(int, completion_id)
1875bd2abef3SChuck Lever 		__field(int, sqecount)
1876bd2abef3SChuck Lever 	),
1877bd2abef3SChuck Lever 
1878bd2abef3SChuck Lever 	TP_fast_assign(
18796787f0beSChuck Lever 		__entry->cq_id = cid->ci_queue_id;
18806787f0beSChuck Lever 		__entry->completion_id = cid->ci_completion_id;
1881bd2abef3SChuck Lever 		__entry->sqecount = sqecount;
1882bd2abef3SChuck Lever 	),
1883bd2abef3SChuck Lever 
18846787f0beSChuck Lever 	TP_printk("cq.id=%u cid=%d sqecount=%d",
18856787f0beSChuck Lever 		__entry->cq_id, __entry->completion_id,
18866787f0beSChuck Lever 		__entry->sqecount
1887bd2abef3SChuck Lever 	)
1888bd2abef3SChuck Lever );
1889bd2abef3SChuck Lever 
1890b704be09SChuck Lever #define DEFINE_POST_CHUNK_EVENT(name)					\
1891b704be09SChuck Lever 		DEFINE_EVENT(svcrdma_post_chunk_class,			\
1892b704be09SChuck Lever 				svcrdma_post_##name##_chunk,		\
1893b704be09SChuck Lever 				TP_PROTO(				\
1894b704be09SChuck Lever 					const struct rpc_rdma_cid *cid,	\
1895b704be09SChuck Lever 					int sqecount			\
1896b704be09SChuck Lever 				),					\
1897b704be09SChuck Lever 				TP_ARGS(cid, sqecount))
1898b704be09SChuck Lever 
1899b704be09SChuck Lever DEFINE_POST_CHUNK_EVENT(read);
1900b704be09SChuck Lever DEFINE_POST_CHUNK_EVENT(write);
1901b704be09SChuck Lever DEFINE_POST_CHUNK_EVENT(reply);
1902b704be09SChuck Lever 
19036787f0beSChuck Lever DEFINE_COMPLETION_EVENT(svcrdma_wc_read);
19046787f0beSChuck Lever DEFINE_COMPLETION_EVENT(svcrdma_wc_write);
1905bd2abef3SChuck Lever 
1906bd2abef3SChuck Lever TRACE_EVENT(svcrdma_qp_error,
1907bd2abef3SChuck Lever 	TP_PROTO(
1908bd2abef3SChuck Lever 		const struct ib_event *event,
1909bd2abef3SChuck Lever 		const struct sockaddr *sap
1910bd2abef3SChuck Lever 	),
1911bd2abef3SChuck Lever 
1912bd2abef3SChuck Lever 	TP_ARGS(event, sap),
1913bd2abef3SChuck Lever 
1914bd2abef3SChuck Lever 	TP_STRUCT__entry(
1915bd2abef3SChuck Lever 		__field(unsigned int, event)
1916bd2abef3SChuck Lever 		__string(device, event->device->name)
1917bd2abef3SChuck Lever 		__array(__u8, addr, INET6_ADDRSTRLEN + 10)
1918bd2abef3SChuck Lever 	),
1919bd2abef3SChuck Lever 
1920bd2abef3SChuck Lever 	TP_fast_assign(
1921bd2abef3SChuck Lever 		__entry->event = event->event;
1922bd2abef3SChuck Lever 		__assign_str(device, event->device->name);
1923bd2abef3SChuck Lever 		snprintf(__entry->addr, sizeof(__entry->addr) - 1,
1924bd2abef3SChuck Lever 			 "%pISpc", sap);
1925bd2abef3SChuck Lever 	),
1926bd2abef3SChuck Lever 
1927bd2abef3SChuck Lever 	TP_printk("addr=%s dev=%s event=%s (%u)",
1928bd2abef3SChuck Lever 		__entry->addr, __get_str(device),
1929bd2abef3SChuck Lever 		rdma_show_ib_event(__entry->event), __entry->event
1930bd2abef3SChuck Lever 	)
1931bd2abef3SChuck Lever );
1932bd2abef3SChuck Lever 
1933bd2abef3SChuck Lever DECLARE_EVENT_CLASS(svcrdma_sendqueue_event,
1934bd2abef3SChuck Lever 	TP_PROTO(
1935bd2abef3SChuck Lever 		const struct svcxprt_rdma *rdma
1936bd2abef3SChuck Lever 	),
1937bd2abef3SChuck Lever 
1938bd2abef3SChuck Lever 	TP_ARGS(rdma),
1939bd2abef3SChuck Lever 
1940bd2abef3SChuck Lever 	TP_STRUCT__entry(
1941bd2abef3SChuck Lever 		__field(int, avail)
1942bd2abef3SChuck Lever 		__field(int, depth)
1943bd2abef3SChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1944bd2abef3SChuck Lever 	),
1945bd2abef3SChuck Lever 
1946bd2abef3SChuck Lever 	TP_fast_assign(
1947bd2abef3SChuck Lever 		__entry->avail = atomic_read(&rdma->sc_sq_avail);
1948bd2abef3SChuck Lever 		__entry->depth = rdma->sc_sq_depth;
1949bd2abef3SChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1950bd2abef3SChuck Lever 	),
1951bd2abef3SChuck Lever 
1952bd2abef3SChuck Lever 	TP_printk("addr=%s sc_sq_avail=%d/%d",
1953bd2abef3SChuck Lever 		__get_str(addr), __entry->avail, __entry->depth
1954bd2abef3SChuck Lever 	)
1955bd2abef3SChuck Lever );
1956bd2abef3SChuck Lever 
1957bd2abef3SChuck Lever #define DEFINE_SQ_EVENT(name)						\
1958bd2abef3SChuck Lever 		DEFINE_EVENT(svcrdma_sendqueue_event, svcrdma_sq_##name,\
1959bd2abef3SChuck Lever 				TP_PROTO(				\
1960bd2abef3SChuck Lever 					const struct svcxprt_rdma *rdma \
1961bd2abef3SChuck Lever 				),					\
1962bd2abef3SChuck Lever 				TP_ARGS(rdma))
1963bd2abef3SChuck Lever 
1964bd2abef3SChuck Lever DEFINE_SQ_EVENT(full);
1965bd2abef3SChuck Lever DEFINE_SQ_EVENT(retry);
1966bd2abef3SChuck Lever 
1967e28b4fc6SChuck Lever TRACE_EVENT(svcrdma_sq_post_err,
1968e28b4fc6SChuck Lever 	TP_PROTO(
1969e28b4fc6SChuck Lever 		const struct svcxprt_rdma *rdma,
1970e28b4fc6SChuck Lever 		int status
1971e28b4fc6SChuck Lever 	),
1972e28b4fc6SChuck Lever 
1973e28b4fc6SChuck Lever 	TP_ARGS(rdma, status),
1974e28b4fc6SChuck Lever 
1975e28b4fc6SChuck Lever 	TP_STRUCT__entry(
1976e28b4fc6SChuck Lever 		__field(int, avail)
1977e28b4fc6SChuck Lever 		__field(int, depth)
1978e28b4fc6SChuck Lever 		__field(int, status)
1979e28b4fc6SChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1980e28b4fc6SChuck Lever 	),
1981e28b4fc6SChuck Lever 
1982e28b4fc6SChuck Lever 	TP_fast_assign(
1983e28b4fc6SChuck Lever 		__entry->avail = atomic_read(&rdma->sc_sq_avail);
1984e28b4fc6SChuck Lever 		__entry->depth = rdma->sc_sq_depth;
1985e28b4fc6SChuck Lever 		__entry->status = status;
1986e28b4fc6SChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1987e28b4fc6SChuck Lever 	),
1988e28b4fc6SChuck Lever 
1989e28b4fc6SChuck Lever 	TP_printk("addr=%s sc_sq_avail=%d/%d status=%d",
1990e28b4fc6SChuck Lever 		__get_str(addr), __entry->avail, __entry->depth,
1991e28b4fc6SChuck Lever 		__entry->status
1992e28b4fc6SChuck Lever 	)
1993e28b4fc6SChuck Lever );
1994e28b4fc6SChuck Lever 
1995e48f083eSChuck Lever #endif /* _TRACE_RPCRDMA_H */
1996e48f083eSChuck Lever 
1997e48f083eSChuck Lever #include <trace/define_trace.h>
1998