xref: /openbmc/linux/include/trace/events/rpcrdma.h (revision 4ddd0fc3)
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 
63c30f259aSChuck Lever DECLARE_EVENT_CLASS(rpcrdma_receive_completion_class,
64c30f259aSChuck Lever 	TP_PROTO(
65c30f259aSChuck Lever 		const struct ib_wc *wc,
66c30f259aSChuck Lever 		const struct rpc_rdma_cid *cid
67c30f259aSChuck Lever 	),
68c30f259aSChuck Lever 
69c30f259aSChuck Lever 	TP_ARGS(wc, cid),
70c30f259aSChuck Lever 
71c30f259aSChuck Lever 	TP_STRUCT__entry(
72c30f259aSChuck Lever 		__field(u32, cq_id)
73c30f259aSChuck Lever 		__field(int, completion_id)
74c30f259aSChuck Lever 		__field(u32, received)
75c30f259aSChuck Lever 		__field(unsigned long, status)
76c30f259aSChuck Lever 		__field(unsigned int, vendor_err)
77c30f259aSChuck Lever 	),
78c30f259aSChuck Lever 
79c30f259aSChuck Lever 	TP_fast_assign(
80c30f259aSChuck Lever 		__entry->cq_id = cid->ci_queue_id;
81c30f259aSChuck Lever 		__entry->completion_id = cid->ci_completion_id;
82c30f259aSChuck Lever 		__entry->status = wc->status;
83c30f259aSChuck Lever 		if (wc->status) {
84c30f259aSChuck Lever 			__entry->received = 0;
85c30f259aSChuck Lever 			__entry->vendor_err = wc->vendor_err;
86c30f259aSChuck Lever 		} else {
87c30f259aSChuck Lever 			__entry->received = wc->byte_len;
88c30f259aSChuck Lever 			__entry->vendor_err = 0;
89c30f259aSChuck Lever 		}
90c30f259aSChuck Lever 	),
91c30f259aSChuck Lever 
92c30f259aSChuck Lever 	TP_printk("cq.id=%u cid=%d status=%s (%lu/0x%x) received=%u",
93c30f259aSChuck Lever 		__entry->cq_id, __entry->completion_id,
94c30f259aSChuck Lever 		rdma_show_wc_status(__entry->status),
95c30f259aSChuck Lever 		__entry->status, __entry->vendor_err,
96c30f259aSChuck Lever 		__entry->received
97c30f259aSChuck Lever 	)
98c30f259aSChuck Lever );
99c30f259aSChuck Lever 
100c30f259aSChuck Lever #define DEFINE_RECEIVE_COMPLETION_EVENT(name)				\
101c30f259aSChuck Lever 		DEFINE_EVENT(rpcrdma_receive_completion_class, name,	\
102c30f259aSChuck Lever 				TP_PROTO(				\
103c30f259aSChuck Lever 					const struct ib_wc *wc,		\
104c30f259aSChuck Lever 					const struct rpc_rdma_cid *cid	\
105c30f259aSChuck Lever 				),					\
106c30f259aSChuck Lever 				TP_ARGS(wc, cid))
107c30f259aSChuck 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 
886c30f259aSChuck Lever DEFINE_RECEIVE_COMPLETION_EVENT(xprtrdma_wc_receive);
887c30f259aSChuck 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 
1013*4ddd0fc3SChuck Lever DEFINE_MR_EVENT(fastreg);
1014d379eaa8SChuck Lever DEFINE_MR_EVENT(localinv);
1015*4ddd0fc3SChuck Lever DEFINE_MR_EVENT(reminv);
1016d379eaa8SChuck Lever DEFINE_MR_EVENT(map);
10177703db97SChuck Lever 
10187703db97SChuck Lever DEFINE_ANON_MR_EVENT(unmap);
101958f10ad4SChuck Lever 
102053b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_dma_maperr,
102153b2c1cbSChuck Lever 	TP_PROTO(
102253b2c1cbSChuck Lever 		u64 addr
102353b2c1cbSChuck Lever 	),
102453b2c1cbSChuck Lever 
102553b2c1cbSChuck Lever 	TP_ARGS(addr),
102653b2c1cbSChuck Lever 
102753b2c1cbSChuck Lever 	TP_STRUCT__entry(
102853b2c1cbSChuck Lever 		__field(u64, addr)
102953b2c1cbSChuck Lever 	),
103053b2c1cbSChuck Lever 
103153b2c1cbSChuck Lever 	TP_fast_assign(
103253b2c1cbSChuck Lever 		__entry->addr = addr;
103353b2c1cbSChuck Lever 	),
103453b2c1cbSChuck Lever 
103553b2c1cbSChuck Lever 	TP_printk("dma addr=0x%llx\n", __entry->addr)
103653b2c1cbSChuck Lever );
103753b2c1cbSChuck Lever 
1038b4a7f91cSChuck Lever /**
1039b4a7f91cSChuck Lever  ** Reply events
1040b4a7f91cSChuck Lever  **/
1041b4a7f91cSChuck Lever 
1042b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_reply,
1043b4a7f91cSChuck Lever 	TP_PROTO(
1044b4a7f91cSChuck Lever 		const struct rpc_task *task,
1045b4a7f91cSChuck Lever 		const struct rpcrdma_rep *rep,
1046b4a7f91cSChuck Lever 		unsigned int credits
1047b4a7f91cSChuck Lever 	),
1048b4a7f91cSChuck Lever 
104903ffd924SChuck Lever 	TP_ARGS(task, rep, credits),
1050b4a7f91cSChuck Lever 
1051b4a7f91cSChuck Lever 	TP_STRUCT__entry(
1052b4a7f91cSChuck Lever 		__field(unsigned int, task_id)
1053b4a7f91cSChuck Lever 		__field(unsigned int, client_id)
1054b4a7f91cSChuck Lever 		__field(u32, xid)
1055b4a7f91cSChuck Lever 		__field(unsigned int, credits)
1056b4a7f91cSChuck Lever 	),
1057b4a7f91cSChuck Lever 
1058b4a7f91cSChuck Lever 	TP_fast_assign(
1059b4a7f91cSChuck Lever 		__entry->task_id = task->tk_pid;
1060b4a7f91cSChuck Lever 		__entry->client_id = task->tk_client->cl_clid;
1061b4a7f91cSChuck Lever 		__entry->xid = be32_to_cpu(rep->rr_xid);
1062b4a7f91cSChuck Lever 		__entry->credits = credits;
1063b4a7f91cSChuck Lever 	),
1064b4a7f91cSChuck Lever 
106503ffd924SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x credits=%u",
1066b4a7f91cSChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
106703ffd924SChuck Lever 		__entry->credits
1068b4a7f91cSChuck Lever 	)
1069b4a7f91cSChuck Lever );
1070b4a7f91cSChuck Lever 
10713a9568feSChuck Lever DEFINE_REPLY_EVENT(vers);
10723a9568feSChuck Lever DEFINE_REPLY_EVENT(rqst);
10733a9568feSChuck Lever DEFINE_REPLY_EVENT(short);
10743a9568feSChuck Lever DEFINE_REPLY_EVENT(hdr);
1075b4a7f91cSChuck Lever 
10763821e232SChuck Lever TRACE_EVENT(xprtrdma_err_vers,
1077e48f083eSChuck Lever 	TP_PROTO(
10783821e232SChuck Lever 		const struct rpc_rqst *rqst,
10793821e232SChuck Lever 		__be32 *min,
10803821e232SChuck Lever 		__be32 *max
1081e48f083eSChuck Lever 	),
1082e48f083eSChuck Lever 
10833821e232SChuck Lever 	TP_ARGS(rqst, min, max),
1084e48f083eSChuck Lever 
1085e48f083eSChuck Lever 	TP_STRUCT__entry(
1086e48f083eSChuck Lever 		__field(unsigned int, task_id)
1087e48f083eSChuck Lever 		__field(unsigned int, client_id)
10883821e232SChuck Lever 		__field(u32, xid)
10893821e232SChuck Lever 		__field(u32, min)
10903821e232SChuck Lever 		__field(u32, max)
10913821e232SChuck Lever 	),
10923821e232SChuck Lever 
10933821e232SChuck Lever 	TP_fast_assign(
10943821e232SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
10953821e232SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
10963821e232SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
10973821e232SChuck Lever 		__entry->min = be32_to_cpup(min);
10983821e232SChuck Lever 		__entry->max = be32_to_cpup(max);
10993821e232SChuck Lever 	),
11003821e232SChuck Lever 
11013821e232SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x versions=[%u, %u]",
11023821e232SChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
11033821e232SChuck Lever 		__entry->min, __entry->max
11043821e232SChuck Lever 	)
11053821e232SChuck Lever );
11063821e232SChuck Lever 
11073821e232SChuck Lever TRACE_EVENT(xprtrdma_err_chunk,
11083821e232SChuck Lever 	TP_PROTO(
11093821e232SChuck Lever 		const struct rpc_rqst *rqst
11103821e232SChuck Lever 	),
11113821e232SChuck Lever 
11123821e232SChuck Lever 	TP_ARGS(rqst),
11133821e232SChuck Lever 
11143821e232SChuck Lever 	TP_STRUCT__entry(
11153821e232SChuck Lever 		__field(unsigned int, task_id)
11163821e232SChuck Lever 		__field(unsigned int, client_id)
1117e48f083eSChuck Lever 		__field(u32, xid)
1118e48f083eSChuck Lever 	),
1119e48f083eSChuck Lever 
1120e48f083eSChuck Lever 	TP_fast_assign(
11213821e232SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
11223821e232SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
11233821e232SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
1124e48f083eSChuck Lever 	),
1125e48f083eSChuck Lever 
11263821e232SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x",
11273821e232SChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid
1128e48f083eSChuck Lever 	)
1129e48f083eSChuck Lever );
1130e48f083eSChuck Lever 
11313821e232SChuck Lever TRACE_EVENT(xprtrdma_err_unrecognized,
11323821e232SChuck Lever 	TP_PROTO(
11333821e232SChuck Lever 		const struct rpc_rqst *rqst,
11343821e232SChuck Lever 		__be32 *procedure
11353821e232SChuck Lever 	),
11363821e232SChuck Lever 
11373821e232SChuck Lever 	TP_ARGS(rqst, procedure),
11383821e232SChuck Lever 
11393821e232SChuck Lever 	TP_STRUCT__entry(
11403821e232SChuck Lever 		__field(unsigned int, task_id)
11413821e232SChuck Lever 		__field(unsigned int, client_id)
11423821e232SChuck Lever 		__field(u32, xid)
11433821e232SChuck Lever 		__field(u32, procedure)
11443821e232SChuck Lever 	),
11453821e232SChuck Lever 
11463821e232SChuck Lever 	TP_fast_assign(
11473821e232SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
11483821e232SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
11493821e232SChuck Lever 		__entry->procedure = be32_to_cpup(procedure);
11503821e232SChuck Lever 	),
11513821e232SChuck Lever 
11523821e232SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x procedure=%u",
11533821e232SChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
11543821e232SChuck Lever 		__entry->procedure
11553821e232SChuck Lever 	)
11563821e232SChuck Lever );
1157e48f083eSChuck Lever 
1158e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_fixup,
1159e11b7c96SChuck Lever 	TP_PROTO(
1160e11b7c96SChuck Lever 		const struct rpc_rqst *rqst,
1161d4957f01SChuck Lever 		unsigned long fixup
1162e11b7c96SChuck Lever 	),
1163e11b7c96SChuck Lever 
1164d4957f01SChuck Lever 	TP_ARGS(rqst, fixup),
1165e11b7c96SChuck Lever 
1166e11b7c96SChuck Lever 	TP_STRUCT__entry(
1167e11b7c96SChuck Lever 		__field(unsigned int, task_id)
1168e11b7c96SChuck Lever 		__field(unsigned int, client_id)
1169d4957f01SChuck Lever 		__field(unsigned long, fixup)
1170d4957f01SChuck Lever 		__field(size_t, headlen)
1171d4957f01SChuck Lever 		__field(unsigned int, pagelen)
1172d4957f01SChuck Lever 		__field(size_t, taillen)
1173e11b7c96SChuck Lever 	),
1174e11b7c96SChuck Lever 
1175e11b7c96SChuck Lever 	TP_fast_assign(
1176e11b7c96SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
1177e11b7c96SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
1178d4957f01SChuck Lever 		__entry->fixup = fixup;
1179d4957f01SChuck Lever 		__entry->headlen = rqst->rq_rcv_buf.head[0].iov_len;
1180d4957f01SChuck Lever 		__entry->pagelen = rqst->rq_rcv_buf.page_len;
1181d4957f01SChuck Lever 		__entry->taillen = rqst->rq_rcv_buf.tail[0].iov_len;
1182e11b7c96SChuck Lever 	),
1183e11b7c96SChuck Lever 
1184d4957f01SChuck Lever 	TP_printk("task:%u@%u fixup=%lu xdr=%zu/%u/%zu",
1185d4957f01SChuck Lever 		__entry->task_id, __entry->client_id, __entry->fixup,
1186d4957f01SChuck Lever 		__entry->headlen, __entry->pagelen, __entry->taillen
1187e11b7c96SChuck Lever 	)
1188e11b7c96SChuck Lever );
1189e11b7c96SChuck Lever 
1190e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_decode_seg,
1191e11b7c96SChuck Lever 	TP_PROTO(
1192e11b7c96SChuck Lever 		u32 handle,
1193e11b7c96SChuck Lever 		u32 length,
1194e11b7c96SChuck Lever 		u64 offset
1195e11b7c96SChuck Lever 	),
1196e11b7c96SChuck Lever 
1197e11b7c96SChuck Lever 	TP_ARGS(handle, length, offset),
1198e11b7c96SChuck Lever 
1199e11b7c96SChuck Lever 	TP_STRUCT__entry(
1200e11b7c96SChuck Lever 		__field(u32, handle)
1201e11b7c96SChuck Lever 		__field(u32, length)
1202e11b7c96SChuck Lever 		__field(u64, offset)
1203e11b7c96SChuck Lever 	),
1204e11b7c96SChuck Lever 
1205e11b7c96SChuck Lever 	TP_fast_assign(
1206e11b7c96SChuck Lever 		__entry->handle = handle;
1207e11b7c96SChuck Lever 		__entry->length = length;
1208e11b7c96SChuck Lever 		__entry->offset = offset;
1209e11b7c96SChuck Lever 	),
1210e11b7c96SChuck Lever 
1211e11b7c96SChuck Lever 	TP_printk("%u@0x%016llx:0x%08x",
1212e11b7c96SChuck Lever 		__entry->length, (unsigned long long)__entry->offset,
1213e11b7c96SChuck Lever 		__entry->handle
1214e11b7c96SChuck Lever 	)
1215e11b7c96SChuck Lever );
1216e11b7c96SChuck Lever 
12178e24e191SChuck Lever TRACE_EVENT(xprtrdma_mrs_zap,
12188e24e191SChuck Lever 	TP_PROTO(
12198e24e191SChuck Lever 		const struct rpc_task *task
12208e24e191SChuck Lever 	),
12218e24e191SChuck Lever 
12228e24e191SChuck Lever 	TP_ARGS(task),
12238e24e191SChuck Lever 
12248e24e191SChuck Lever 	TP_STRUCT__entry(
12258e24e191SChuck Lever 		__field(unsigned int, task_id)
12268e24e191SChuck Lever 		__field(unsigned int, client_id)
12278e24e191SChuck Lever 	),
12288e24e191SChuck Lever 
12298e24e191SChuck Lever 	TP_fast_assign(
12308e24e191SChuck Lever 		__entry->task_id = task->tk_pid;
12318e24e191SChuck Lever 		__entry->client_id = task->tk_client->cl_clid;
12328e24e191SChuck Lever 	),
12338e24e191SChuck Lever 
12348e24e191SChuck Lever 	TP_printk("task:%u@%u",
12358e24e191SChuck Lever 		__entry->task_id, __entry->client_id
12368e24e191SChuck Lever 	)
12378e24e191SChuck Lever );
12388e24e191SChuck Lever 
1239fc1eb807SChuck Lever /**
1240fc1eb807SChuck Lever  ** Callback events
1241fc1eb807SChuck Lever  **/
1242fc1eb807SChuck Lever 
1243fc1eb807SChuck Lever TRACE_EVENT(xprtrdma_cb_setup,
1244fc1eb807SChuck Lever 	TP_PROTO(
1245fc1eb807SChuck Lever 		const struct rpcrdma_xprt *r_xprt,
1246fc1eb807SChuck Lever 		unsigned int reqs
1247fc1eb807SChuck Lever 	),
1248fc1eb807SChuck Lever 
1249fc1eb807SChuck Lever 	TP_ARGS(r_xprt, reqs),
1250fc1eb807SChuck Lever 
1251fc1eb807SChuck Lever 	TP_STRUCT__entry(
1252fc1eb807SChuck Lever 		__field(const void *, r_xprt)
1253fc1eb807SChuck Lever 		__field(unsigned int, reqs)
1254fc1eb807SChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
1255fc1eb807SChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
1256fc1eb807SChuck Lever 	),
1257fc1eb807SChuck Lever 
1258fc1eb807SChuck Lever 	TP_fast_assign(
1259fc1eb807SChuck Lever 		__entry->r_xprt = r_xprt;
1260fc1eb807SChuck Lever 		__entry->reqs = reqs;
1261fc1eb807SChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
1262fc1eb807SChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
1263fc1eb807SChuck Lever 	),
1264fc1eb807SChuck Lever 
1265fc1eb807SChuck Lever 	TP_printk("peer=[%s]:%s r_xprt=%p: %u reqs",
1266fc1eb807SChuck Lever 		__get_str(addr), __get_str(port),
1267fc1eb807SChuck Lever 		__entry->r_xprt, __entry->reqs
1268fc1eb807SChuck Lever 	)
1269fc1eb807SChuck Lever );
1270fc1eb807SChuck Lever 
1271d11e9346SChuck Lever DEFINE_CALLBACK_EVENT(call);
1272d11e9346SChuck Lever DEFINE_CALLBACK_EVENT(reply);
127307e10308SChuck Lever 
127498895edbSChuck Lever /**
127598895edbSChuck Lever  ** Server-side RPC/RDMA events
127698895edbSChuck Lever  **/
127798895edbSChuck Lever 
1278e979a173SChuck Lever DECLARE_EVENT_CLASS(svcrdma_accept_class,
1279e979a173SChuck Lever 	TP_PROTO(
1280e979a173SChuck Lever 		const struct svcxprt_rdma *rdma,
1281e979a173SChuck Lever 		long status
1282e979a173SChuck Lever 	),
1283e979a173SChuck Lever 
1284e979a173SChuck Lever 	TP_ARGS(rdma, status),
1285e979a173SChuck Lever 
1286e979a173SChuck Lever 	TP_STRUCT__entry(
1287e979a173SChuck Lever 		__field(long, status)
1288e979a173SChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1289e979a173SChuck Lever 	),
1290e979a173SChuck Lever 
1291e979a173SChuck Lever 	TP_fast_assign(
1292e979a173SChuck Lever 		__entry->status = status;
1293e979a173SChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1294e979a173SChuck Lever 	),
1295e979a173SChuck Lever 
1296e979a173SChuck Lever 	TP_printk("addr=%s status=%ld",
1297e979a173SChuck Lever 		__get_str(addr), __entry->status
1298e979a173SChuck Lever 	)
1299e979a173SChuck Lever );
1300e979a173SChuck Lever 
1301e979a173SChuck Lever #define DEFINE_ACCEPT_EVENT(name) \
1302e979a173SChuck Lever 		DEFINE_EVENT(svcrdma_accept_class, svcrdma_##name##_err, \
1303e979a173SChuck Lever 				TP_PROTO( \
1304e979a173SChuck Lever 					const struct svcxprt_rdma *rdma, \
1305e979a173SChuck Lever 					long status \
1306e979a173SChuck Lever 				), \
1307e979a173SChuck Lever 				TP_ARGS(rdma, status))
1308e979a173SChuck Lever 
1309e979a173SChuck Lever DEFINE_ACCEPT_EVENT(pd);
1310e979a173SChuck Lever DEFINE_ACCEPT_EVENT(qp);
1311e979a173SChuck Lever DEFINE_ACCEPT_EVENT(fabric);
1312e979a173SChuck Lever DEFINE_ACCEPT_EVENT(initdepth);
1313e979a173SChuck Lever DEFINE_ACCEPT_EVENT(accept);
1314e979a173SChuck Lever 
131598895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_MSG);
131698895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_NOMSG);
131798895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_MSGP);
131898895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_DONE);
131998895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_ERROR);
132098895edbSChuck Lever 
132198895edbSChuck Lever #define show_rpcrdma_proc(x)						\
132298895edbSChuck Lever 		__print_symbolic(x,					\
132398895edbSChuck Lever 				{ RDMA_MSG, "RDMA_MSG" },		\
132498895edbSChuck Lever 				{ RDMA_NOMSG, "RDMA_NOMSG" },		\
132598895edbSChuck Lever 				{ RDMA_MSGP, "RDMA_MSGP" },		\
132698895edbSChuck Lever 				{ RDMA_DONE, "RDMA_DONE" },		\
132798895edbSChuck Lever 				{ RDMA_ERROR, "RDMA_ERROR" })
132898895edbSChuck Lever 
132998895edbSChuck Lever TRACE_EVENT(svcrdma_decode_rqst,
133098895edbSChuck Lever 	TP_PROTO(
1331007140eeSChuck Lever 		const struct svc_rdma_recv_ctxt *ctxt,
133298895edbSChuck Lever 		__be32 *p,
133398895edbSChuck Lever 		unsigned int hdrlen
133498895edbSChuck Lever 	),
133598895edbSChuck Lever 
1336007140eeSChuck Lever 	TP_ARGS(ctxt, p, hdrlen),
133798895edbSChuck Lever 
133898895edbSChuck Lever 	TP_STRUCT__entry(
1339007140eeSChuck Lever 		__field(u32, cq_id)
1340007140eeSChuck Lever 		__field(int, completion_id)
134198895edbSChuck Lever 		__field(u32, xid)
134298895edbSChuck Lever 		__field(u32, vers)
134398895edbSChuck Lever 		__field(u32, proc)
134498895edbSChuck Lever 		__field(u32, credits)
134598895edbSChuck Lever 		__field(unsigned int, hdrlen)
134698895edbSChuck Lever 	),
134798895edbSChuck Lever 
134898895edbSChuck Lever 	TP_fast_assign(
1349007140eeSChuck Lever 		__entry->cq_id = ctxt->rc_cid.ci_queue_id;
1350007140eeSChuck Lever 		__entry->completion_id = ctxt->rc_cid.ci_completion_id;
135198895edbSChuck Lever 		__entry->xid = be32_to_cpup(p++);
135298895edbSChuck Lever 		__entry->vers = be32_to_cpup(p++);
135398895edbSChuck Lever 		__entry->credits = be32_to_cpup(p++);
135498895edbSChuck Lever 		__entry->proc = be32_to_cpup(p);
135598895edbSChuck Lever 		__entry->hdrlen = hdrlen;
135698895edbSChuck Lever 	),
135798895edbSChuck Lever 
1358007140eeSChuck Lever 	TP_printk("cq.id=%u cid=%d xid=0x%08x vers=%u credits=%u proc=%s hdrlen=%u",
1359007140eeSChuck Lever 		__entry->cq_id, __entry->completion_id,
136098895edbSChuck Lever 		__entry->xid, __entry->vers, __entry->credits,
136198895edbSChuck Lever 		show_rpcrdma_proc(__entry->proc), __entry->hdrlen)
136298895edbSChuck Lever );
136398895edbSChuck Lever 
136427ce6294SChuck Lever TRACE_EVENT(svcrdma_decode_short_err,
136598895edbSChuck Lever 	TP_PROTO(
1366007140eeSChuck Lever 		const struct svc_rdma_recv_ctxt *ctxt,
136798895edbSChuck Lever 		unsigned int hdrlen
136898895edbSChuck Lever 	),
136998895edbSChuck Lever 
1370007140eeSChuck Lever 	TP_ARGS(ctxt, hdrlen),
137198895edbSChuck Lever 
137298895edbSChuck Lever 	TP_STRUCT__entry(
1373007140eeSChuck Lever 		__field(u32, cq_id)
1374007140eeSChuck Lever 		__field(int, completion_id)
137598895edbSChuck Lever 		__field(unsigned int, hdrlen)
137698895edbSChuck Lever 	),
137798895edbSChuck Lever 
137898895edbSChuck Lever 	TP_fast_assign(
1379007140eeSChuck Lever 		__entry->cq_id = ctxt->rc_cid.ci_queue_id;
1380007140eeSChuck Lever 		__entry->completion_id = ctxt->rc_cid.ci_completion_id;
138198895edbSChuck Lever 		__entry->hdrlen = hdrlen;
138298895edbSChuck Lever 	),
138398895edbSChuck Lever 
1384007140eeSChuck Lever 	TP_printk("cq.id=%u cid=%d hdrlen=%u",
1385007140eeSChuck Lever 		__entry->cq_id, __entry->completion_id,
1386007140eeSChuck Lever 		__entry->hdrlen)
138798895edbSChuck Lever );
138898895edbSChuck Lever 
138998895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_badreq_event,
139098895edbSChuck Lever 	TP_PROTO(
1391007140eeSChuck Lever 		const struct svc_rdma_recv_ctxt *ctxt,
139298895edbSChuck Lever 		__be32 *p
139398895edbSChuck Lever 	),
139498895edbSChuck Lever 
1395007140eeSChuck Lever 	TP_ARGS(ctxt, p),
139698895edbSChuck Lever 
139798895edbSChuck Lever 	TP_STRUCT__entry(
1398007140eeSChuck Lever 		__field(u32, cq_id)
1399007140eeSChuck Lever 		__field(int, completion_id)
140098895edbSChuck Lever 		__field(u32, xid)
140198895edbSChuck Lever 		__field(u32, vers)
140298895edbSChuck Lever 		__field(u32, proc)
140398895edbSChuck Lever 		__field(u32, credits)
140498895edbSChuck Lever 	),
140598895edbSChuck Lever 
140698895edbSChuck Lever 	TP_fast_assign(
1407007140eeSChuck Lever 		__entry->cq_id = ctxt->rc_cid.ci_queue_id;
1408007140eeSChuck Lever 		__entry->completion_id = ctxt->rc_cid.ci_completion_id;
140998895edbSChuck Lever 		__entry->xid = be32_to_cpup(p++);
141098895edbSChuck Lever 		__entry->vers = be32_to_cpup(p++);
141198895edbSChuck Lever 		__entry->credits = be32_to_cpup(p++);
141298895edbSChuck Lever 		__entry->proc = be32_to_cpup(p);
141398895edbSChuck Lever 	),
141498895edbSChuck Lever 
1415007140eeSChuck Lever 	TP_printk("cq.id=%u cid=%d xid=0x%08x vers=%u credits=%u proc=%u",
1416007140eeSChuck Lever 		__entry->cq_id, __entry->completion_id,
141798895edbSChuck Lever 		__entry->xid, __entry->vers, __entry->credits, __entry->proc)
141898895edbSChuck Lever );
141998895edbSChuck Lever 
142098895edbSChuck Lever #define DEFINE_BADREQ_EVENT(name)					\
142127ce6294SChuck Lever 		DEFINE_EVENT(svcrdma_badreq_event,			\
142227ce6294SChuck Lever 			     svcrdma_decode_##name##_err,		\
142398895edbSChuck Lever 				TP_PROTO(				\
1424007140eeSChuck Lever 					const struct svc_rdma_recv_ctxt *ctxt,	\
142598895edbSChuck Lever 					__be32 *p			\
142698895edbSChuck Lever 				),					\
1427007140eeSChuck Lever 				TP_ARGS(ctxt, p))
142898895edbSChuck Lever 
142998895edbSChuck Lever DEFINE_BADREQ_EVENT(badvers);
143098895edbSChuck Lever DEFINE_BADREQ_EVENT(drop);
143198895edbSChuck Lever DEFINE_BADREQ_EVENT(badproc);
143298895edbSChuck Lever DEFINE_BADREQ_EVENT(parse);
143398895edbSChuck Lever 
14346911f3e1SChuck Lever TRACE_EVENT(svcrdma_encode_wseg,
14356911f3e1SChuck Lever 	TP_PROTO(
14366911f3e1SChuck Lever 		const struct svc_rdma_send_ctxt *ctxt,
14376911f3e1SChuck Lever 		u32 segno,
14386911f3e1SChuck Lever 		u32 handle,
14396911f3e1SChuck Lever 		u32 length,
14406911f3e1SChuck Lever 		u64 offset
14416911f3e1SChuck Lever 	),
14426911f3e1SChuck Lever 
14436911f3e1SChuck Lever 	TP_ARGS(ctxt, segno, handle, length, offset),
14446911f3e1SChuck Lever 
14456911f3e1SChuck Lever 	TP_STRUCT__entry(
14466911f3e1SChuck Lever 		__field(u32, cq_id)
14476911f3e1SChuck Lever 		__field(int, completion_id)
14486911f3e1SChuck Lever 		__field(u32, segno)
14496911f3e1SChuck Lever 		__field(u32, handle)
14506911f3e1SChuck Lever 		__field(u32, length)
14516911f3e1SChuck Lever 		__field(u64, offset)
14526911f3e1SChuck Lever 	),
14536911f3e1SChuck Lever 
14546911f3e1SChuck Lever 	TP_fast_assign(
14556911f3e1SChuck Lever 		__entry->cq_id = ctxt->sc_cid.ci_queue_id;
14566911f3e1SChuck Lever 		__entry->completion_id = ctxt->sc_cid.ci_completion_id;
14576911f3e1SChuck Lever 		__entry->segno = segno;
14586911f3e1SChuck Lever 		__entry->handle = handle;
14596911f3e1SChuck Lever 		__entry->length = length;
14606911f3e1SChuck Lever 		__entry->offset = offset;
14616911f3e1SChuck Lever 	),
14626911f3e1SChuck Lever 
14636911f3e1SChuck Lever 	TP_printk("cq_id=%u cid=%d segno=%u %u@0x%016llx:0x%08x",
14646911f3e1SChuck Lever 		__entry->cq_id, __entry->completion_id,
14656911f3e1SChuck Lever 		__entry->segno, __entry->length,
14666911f3e1SChuck Lever 		(unsigned long long)__entry->offset, __entry->handle
14676911f3e1SChuck Lever 	)
14686911f3e1SChuck Lever );
14696911f3e1SChuck Lever 
147078147ca8SChuck Lever TRACE_EVENT(svcrdma_decode_rseg,
147178147ca8SChuck Lever 	TP_PROTO(
147278147ca8SChuck Lever 		const struct rpc_rdma_cid *cid,
147378147ca8SChuck Lever 		const struct svc_rdma_chunk *chunk,
147478147ca8SChuck Lever 		const struct svc_rdma_segment *segment
147578147ca8SChuck Lever 	),
147678147ca8SChuck Lever 
147778147ca8SChuck Lever 	TP_ARGS(cid, chunk, segment),
147878147ca8SChuck Lever 
147978147ca8SChuck Lever 	TP_STRUCT__entry(
148078147ca8SChuck Lever 		__field(u32, cq_id)
148178147ca8SChuck Lever 		__field(int, completion_id)
148278147ca8SChuck Lever 		__field(u32, segno)
148378147ca8SChuck Lever 		__field(u32, position)
148478147ca8SChuck Lever 		__field(u32, handle)
148578147ca8SChuck Lever 		__field(u32, length)
148678147ca8SChuck Lever 		__field(u64, offset)
148778147ca8SChuck Lever 	),
148878147ca8SChuck Lever 
148978147ca8SChuck Lever 	TP_fast_assign(
149078147ca8SChuck Lever 		__entry->cq_id = cid->ci_queue_id;
149178147ca8SChuck Lever 		__entry->completion_id = cid->ci_completion_id;
149278147ca8SChuck Lever 		__entry->segno = chunk->ch_segcount;
149378147ca8SChuck Lever 		__entry->position = chunk->ch_position;
149478147ca8SChuck Lever 		__entry->handle = segment->rs_handle;
149578147ca8SChuck Lever 		__entry->length = segment->rs_length;
149678147ca8SChuck Lever 		__entry->offset = segment->rs_offset;
149778147ca8SChuck Lever 	),
149878147ca8SChuck Lever 
149978147ca8SChuck Lever 	TP_printk("cq_id=%u cid=%d segno=%u position=%u %u@0x%016llx:0x%08x",
150078147ca8SChuck Lever 		__entry->cq_id, __entry->completion_id,
150178147ca8SChuck Lever 		__entry->segno, __entry->position, __entry->length,
150278147ca8SChuck Lever 		(unsigned long long)__entry->offset, __entry->handle
150378147ca8SChuck Lever 	)
150478147ca8SChuck Lever );
150578147ca8SChuck Lever 
150678147ca8SChuck Lever TRACE_EVENT(svcrdma_decode_wseg,
150778147ca8SChuck Lever 	TP_PROTO(
150878147ca8SChuck Lever 		const struct rpc_rdma_cid *cid,
150978147ca8SChuck Lever 		const struct svc_rdma_chunk *chunk,
151078147ca8SChuck Lever 		u32 segno
151178147ca8SChuck Lever 	),
151278147ca8SChuck Lever 
151378147ca8SChuck Lever 	TP_ARGS(cid, chunk, segno),
151478147ca8SChuck Lever 
151578147ca8SChuck Lever 	TP_STRUCT__entry(
151678147ca8SChuck Lever 		__field(u32, cq_id)
151778147ca8SChuck Lever 		__field(int, completion_id)
151878147ca8SChuck Lever 		__field(u32, segno)
151978147ca8SChuck Lever 		__field(u32, handle)
152078147ca8SChuck Lever 		__field(u32, length)
152178147ca8SChuck Lever 		__field(u64, offset)
152278147ca8SChuck Lever 	),
152378147ca8SChuck Lever 
152478147ca8SChuck Lever 	TP_fast_assign(
152578147ca8SChuck Lever 		const struct svc_rdma_segment *segment =
152678147ca8SChuck Lever 			&chunk->ch_segments[segno];
152778147ca8SChuck Lever 
152878147ca8SChuck Lever 		__entry->cq_id = cid->ci_queue_id;
152978147ca8SChuck Lever 		__entry->completion_id = cid->ci_completion_id;
153078147ca8SChuck Lever 		__entry->segno = segno;
153178147ca8SChuck Lever 		__entry->handle = segment->rs_handle;
153278147ca8SChuck Lever 		__entry->length = segment->rs_length;
153378147ca8SChuck Lever 		__entry->offset = segment->rs_offset;
153478147ca8SChuck Lever 	),
153578147ca8SChuck Lever 
153678147ca8SChuck Lever 	TP_printk("cq_id=%u cid=%d segno=%u %u@0x%016llx:0x%08x",
153778147ca8SChuck Lever 		__entry->cq_id, __entry->completion_id,
153878147ca8SChuck Lever 		__entry->segno, __entry->length,
153978147ca8SChuck Lever 		(unsigned long long)__entry->offset, __entry->handle
154078147ca8SChuck Lever 	)
154178147ca8SChuck Lever );
154278147ca8SChuck Lever 
154398895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_error_event,
154498895edbSChuck Lever 	TP_PROTO(
154598895edbSChuck Lever 		__be32 xid
154698895edbSChuck Lever 	),
154798895edbSChuck Lever 
154898895edbSChuck Lever 	TP_ARGS(xid),
154998895edbSChuck Lever 
155098895edbSChuck Lever 	TP_STRUCT__entry(
155198895edbSChuck Lever 		__field(u32, xid)
155298895edbSChuck Lever 	),
155398895edbSChuck Lever 
155498895edbSChuck Lever 	TP_fast_assign(
155598895edbSChuck Lever 		__entry->xid = be32_to_cpu(xid);
155698895edbSChuck Lever 	),
155798895edbSChuck Lever 
155898895edbSChuck Lever 	TP_printk("xid=0x%08x",
155998895edbSChuck Lever 		__entry->xid
156098895edbSChuck Lever 	)
156198895edbSChuck Lever );
156298895edbSChuck Lever 
156398895edbSChuck Lever #define DEFINE_ERROR_EVENT(name)					\
156498895edbSChuck Lever 		DEFINE_EVENT(svcrdma_error_event, svcrdma_err_##name,	\
156598895edbSChuck Lever 				TP_PROTO(				\
156698895edbSChuck Lever 					__be32 xid			\
156798895edbSChuck Lever 				),					\
156898895edbSChuck Lever 				TP_ARGS(xid))
156998895edbSChuck Lever 
157098895edbSChuck Lever DEFINE_ERROR_EVENT(vers);
157198895edbSChuck Lever DEFINE_ERROR_EVENT(chunk);
157298895edbSChuck Lever 
1573bd2abef3SChuck Lever /**
1574bd2abef3SChuck Lever  ** Server-side RDMA API events
1575bd2abef3SChuck Lever  **/
1576bd2abef3SChuck Lever 
1577832b2cb9SChuck Lever DECLARE_EVENT_CLASS(svcrdma_dma_map_class,
1578bd2abef3SChuck Lever 	TP_PROTO(
1579bd2abef3SChuck Lever 		const struct svcxprt_rdma *rdma,
1580832b2cb9SChuck Lever 		u64 dma_addr,
1581832b2cb9SChuck Lever 		u32 length
1582bd2abef3SChuck Lever 	),
1583bd2abef3SChuck Lever 
1584832b2cb9SChuck Lever 	TP_ARGS(rdma, dma_addr, length),
1585bd2abef3SChuck Lever 
1586bd2abef3SChuck Lever 	TP_STRUCT__entry(
1587832b2cb9SChuck Lever 		__field(u64, dma_addr)
1588832b2cb9SChuck Lever 		__field(u32, length)
1589bd2abef3SChuck Lever 		__string(device, rdma->sc_cm_id->device->name)
1590bd2abef3SChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1591bd2abef3SChuck Lever 	),
1592bd2abef3SChuck Lever 
1593bd2abef3SChuck Lever 	TP_fast_assign(
1594832b2cb9SChuck Lever 		__entry->dma_addr = dma_addr;
1595832b2cb9SChuck Lever 		__entry->length = length;
1596bd2abef3SChuck Lever 		__assign_str(device, rdma->sc_cm_id->device->name);
1597bd2abef3SChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1598bd2abef3SChuck Lever 	),
1599bd2abef3SChuck Lever 
1600832b2cb9SChuck Lever 	TP_printk("addr=%s device=%s dma_addr=%llu length=%u",
1601832b2cb9SChuck Lever 		__get_str(addr), __get_str(device),
1602832b2cb9SChuck Lever 		__entry->dma_addr, __entry->length
1603bd2abef3SChuck Lever 	)
1604bd2abef3SChuck Lever );
1605bd2abef3SChuck Lever 
1606832b2cb9SChuck Lever #define DEFINE_SVC_DMA_EVENT(name)					\
1607832b2cb9SChuck Lever 		DEFINE_EVENT(svcrdma_dma_map_class, svcrdma_##name,	\
1608832b2cb9SChuck Lever 				TP_PROTO(				\
1609832b2cb9SChuck Lever 					const struct svcxprt_rdma *rdma,\
1610832b2cb9SChuck Lever 					u64 dma_addr,			\
1611832b2cb9SChuck Lever 					u32 length			\
1612832b2cb9SChuck Lever 				),					\
1613832b2cb9SChuck Lever 				TP_ARGS(rdma, dma_addr, length))
1614832b2cb9SChuck Lever 
1615832b2cb9SChuck Lever DEFINE_SVC_DMA_EVENT(dma_map_page);
16162371bcc0SChuck Lever DEFINE_SVC_DMA_EVENT(dma_map_err);
1617832b2cb9SChuck Lever DEFINE_SVC_DMA_EVENT(dma_unmap_page);
1618832b2cb9SChuck Lever 
16192abfbe7eSChuck Lever TRACE_EVENT(svcrdma_dma_map_rw_err,
1620bd2abef3SChuck Lever 	TP_PROTO(
1621bd2abef3SChuck Lever 		const struct svcxprt_rdma *rdma,
16222abfbe7eSChuck Lever 		unsigned int nents,
1623bd2abef3SChuck Lever 		int status
1624bd2abef3SChuck Lever 	),
1625bd2abef3SChuck Lever 
16262abfbe7eSChuck Lever 	TP_ARGS(rdma, nents, status),
1627bd2abef3SChuck Lever 
1628bd2abef3SChuck Lever 	TP_STRUCT__entry(
1629bd2abef3SChuck Lever 		__field(int, status)
16302abfbe7eSChuck Lever 		__field(unsigned int, nents)
1631bd2abef3SChuck Lever 		__string(device, rdma->sc_cm_id->device->name)
1632bd2abef3SChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1633bd2abef3SChuck Lever 	),
1634bd2abef3SChuck Lever 
1635bd2abef3SChuck Lever 	TP_fast_assign(
1636bd2abef3SChuck Lever 		__entry->status = status;
16372abfbe7eSChuck Lever 		__entry->nents = nents;
1638bd2abef3SChuck Lever 		__assign_str(device, rdma->sc_cm_id->device->name);
1639bd2abef3SChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1640bd2abef3SChuck Lever 	),
1641bd2abef3SChuck Lever 
16422abfbe7eSChuck Lever 	TP_printk("addr=%s device=%s nents=%u status=%d",
16432abfbe7eSChuck Lever 		__get_str(addr), __get_str(device), __entry->nents,
16442abfbe7eSChuck Lever 		__entry->status
1645bd2abef3SChuck Lever 	)
1646bd2abef3SChuck Lever );
1647bd2abef3SChuck Lever 
1648f4e53e1cSChuck Lever TRACE_EVENT(svcrdma_no_rwctx_err,
1649f4e53e1cSChuck Lever 	TP_PROTO(
1650f4e53e1cSChuck Lever 		const struct svcxprt_rdma *rdma,
1651f4e53e1cSChuck Lever 		unsigned int num_sges
1652f4e53e1cSChuck Lever 	),
1653f4e53e1cSChuck Lever 
1654f4e53e1cSChuck Lever 	TP_ARGS(rdma, num_sges),
1655f4e53e1cSChuck Lever 
1656f4e53e1cSChuck Lever 	TP_STRUCT__entry(
1657f4e53e1cSChuck Lever 		__field(unsigned int, num_sges)
1658f4e53e1cSChuck Lever 		__string(device, rdma->sc_cm_id->device->name)
1659f4e53e1cSChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1660f4e53e1cSChuck Lever 	),
1661f4e53e1cSChuck Lever 
1662f4e53e1cSChuck Lever 	TP_fast_assign(
1663f4e53e1cSChuck Lever 		__entry->num_sges = num_sges;
1664f4e53e1cSChuck Lever 		__assign_str(device, rdma->sc_cm_id->device->name);
1665f4e53e1cSChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1666f4e53e1cSChuck Lever 	),
1667f4e53e1cSChuck Lever 
1668f4e53e1cSChuck Lever 	TP_printk("addr=%s device=%s num_sges=%d",
1669f4e53e1cSChuck Lever 		__get_str(addr), __get_str(device), __entry->num_sges
1670f4e53e1cSChuck Lever 	)
1671f4e53e1cSChuck Lever );
1672f4e53e1cSChuck Lever 
16739d200638SChuck Lever TRACE_EVENT(svcrdma_page_overrun_err,
16749d200638SChuck Lever 	TP_PROTO(
16759d200638SChuck Lever 		const struct svcxprt_rdma *rdma,
16769d200638SChuck Lever 		const struct svc_rqst *rqst,
16779d200638SChuck Lever 		unsigned int pageno
16789d200638SChuck Lever 	),
16799d200638SChuck Lever 
16809d200638SChuck Lever 	TP_ARGS(rdma, rqst, pageno),
16819d200638SChuck Lever 
16829d200638SChuck Lever 	TP_STRUCT__entry(
16839d200638SChuck Lever 		__field(unsigned int, pageno)
16849d200638SChuck Lever 		__field(u32, xid)
16859d200638SChuck Lever 		__string(device, rdma->sc_cm_id->device->name)
16869d200638SChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
16879d200638SChuck Lever 	),
16889d200638SChuck Lever 
16899d200638SChuck Lever 	TP_fast_assign(
16909d200638SChuck Lever 		__entry->pageno = pageno;
16919d200638SChuck Lever 		__entry->xid = __be32_to_cpu(rqst->rq_xid);
16929d200638SChuck Lever 		__assign_str(device, rdma->sc_cm_id->device->name);
16939d200638SChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
16949d200638SChuck Lever 	),
16959d200638SChuck Lever 
16969d200638SChuck Lever 	TP_printk("addr=%s device=%s xid=0x%08x pageno=%u", __get_str(addr),
16979d200638SChuck Lever 		__get_str(device), __entry->xid, __entry->pageno
16989d200638SChuck Lever 	)
16999d200638SChuck Lever );
17009d200638SChuck Lever 
1701dbc17acdSChuck Lever TRACE_EVENT(svcrdma_small_wrch_err,
1702dbc17acdSChuck Lever 	TP_PROTO(
1703dbc17acdSChuck Lever 		const struct svcxprt_rdma *rdma,
1704dbc17acdSChuck Lever 		unsigned int remaining,
1705dbc17acdSChuck Lever 		unsigned int seg_no,
1706dbc17acdSChuck Lever 		unsigned int num_segs
1707dbc17acdSChuck Lever 	),
1708dbc17acdSChuck Lever 
1709dbc17acdSChuck Lever 	TP_ARGS(rdma, remaining, seg_no, num_segs),
1710dbc17acdSChuck Lever 
1711dbc17acdSChuck Lever 	TP_STRUCT__entry(
1712dbc17acdSChuck Lever 		__field(unsigned int, remaining)
1713dbc17acdSChuck Lever 		__field(unsigned int, seg_no)
1714dbc17acdSChuck Lever 		__field(unsigned int, num_segs)
1715dbc17acdSChuck Lever 		__string(device, rdma->sc_cm_id->device->name)
1716dbc17acdSChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1717dbc17acdSChuck Lever 	),
1718dbc17acdSChuck Lever 
1719dbc17acdSChuck Lever 	TP_fast_assign(
1720dbc17acdSChuck Lever 		__entry->remaining = remaining;
1721dbc17acdSChuck Lever 		__entry->seg_no = seg_no;
1722dbc17acdSChuck Lever 		__entry->num_segs = num_segs;
1723dbc17acdSChuck Lever 		__assign_str(device, rdma->sc_cm_id->device->name);
1724dbc17acdSChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1725dbc17acdSChuck Lever 	),
1726dbc17acdSChuck Lever 
1727dbc17acdSChuck Lever 	TP_printk("addr=%s device=%s remaining=%u seg_no=%u num_segs=%u",
1728dbc17acdSChuck Lever 		__get_str(addr), __get_str(device), __entry->remaining,
1729dbc17acdSChuck Lever 		__entry->seg_no, __entry->num_segs
1730dbc17acdSChuck Lever 	)
1731dbc17acdSChuck Lever );
1732dbc17acdSChuck Lever 
17330dabe948SChuck Lever TRACE_EVENT(svcrdma_send_pullup,
17340dabe948SChuck Lever 	TP_PROTO(
17359d0b09d5SChuck Lever 		const struct svc_rdma_send_ctxt *ctxt,
17369d0b09d5SChuck Lever 		unsigned int msglen
17370dabe948SChuck Lever 	),
17380dabe948SChuck Lever 
17399d0b09d5SChuck Lever 	TP_ARGS(ctxt, msglen),
17400dabe948SChuck Lever 
17410dabe948SChuck Lever 	TP_STRUCT__entry(
17429d0b09d5SChuck Lever 		__field(u32, cq_id)
17439d0b09d5SChuck Lever 		__field(int, completion_id)
17449d0b09d5SChuck Lever 		__field(unsigned int, hdrlen)
17459d0b09d5SChuck Lever 		__field(unsigned int, msglen)
17460dabe948SChuck Lever 	),
17470dabe948SChuck Lever 
17480dabe948SChuck Lever 	TP_fast_assign(
17499d0b09d5SChuck Lever 		__entry->cq_id = ctxt->sc_cid.ci_queue_id;
17509d0b09d5SChuck Lever 		__entry->completion_id = ctxt->sc_cid.ci_completion_id;
17519d0b09d5SChuck Lever 		__entry->hdrlen = ctxt->sc_hdrbuf.len,
17529d0b09d5SChuck Lever 		__entry->msglen = msglen;
17530dabe948SChuck Lever 	),
17540dabe948SChuck Lever 
17559d0b09d5SChuck Lever 	TP_printk("cq_id=%u cid=%d hdr=%u msg=%u (total %u)",
17569d0b09d5SChuck Lever 		__entry->cq_id, __entry->completion_id,
17579d0b09d5SChuck Lever 		__entry->hdrlen, __entry->msglen,
17589d0b09d5SChuck Lever 		__entry->hdrlen + __entry->msglen)
17590dabe948SChuck Lever );
17600dabe948SChuck Lever 
17613f8f25c6SChuck Lever TRACE_EVENT(svcrdma_send_err,
1762bd2abef3SChuck Lever 	TP_PROTO(
1763bd2abef3SChuck Lever 		const struct svc_rqst *rqst,
1764bd2abef3SChuck Lever 		int status
1765bd2abef3SChuck Lever 	),
1766bd2abef3SChuck Lever 
1767bd2abef3SChuck Lever 	TP_ARGS(rqst, status),
1768bd2abef3SChuck Lever 
1769bd2abef3SChuck Lever 	TP_STRUCT__entry(
1770bd2abef3SChuck Lever 		__field(int, status)
1771bd2abef3SChuck Lever 		__field(u32, xid)
1772bd2abef3SChuck Lever 		__string(addr, rqst->rq_xprt->xpt_remotebuf)
1773bd2abef3SChuck Lever 	),
1774bd2abef3SChuck Lever 
1775bd2abef3SChuck Lever 	TP_fast_assign(
1776bd2abef3SChuck Lever 		__entry->status = status;
1777bd2abef3SChuck Lever 		__entry->xid = __be32_to_cpu(rqst->rq_xid);
1778bd2abef3SChuck Lever 		__assign_str(addr, rqst->rq_xprt->xpt_remotebuf);
1779bd2abef3SChuck Lever 	),
1780bd2abef3SChuck Lever 
17813f8f25c6SChuck Lever 	TP_printk("addr=%s xid=0x%08x status=%d", __get_str(addr),
1782bd2abef3SChuck Lever 		__entry->xid, __entry->status
1783bd2abef3SChuck Lever 	)
1784bd2abef3SChuck Lever );
1785bd2abef3SChuck Lever 
1786bd2abef3SChuck Lever TRACE_EVENT(svcrdma_post_send,
1787bd2abef3SChuck Lever 	TP_PROTO(
178817f70f8dSChuck Lever 		const struct svc_rdma_send_ctxt *ctxt
1789bd2abef3SChuck Lever 	),
1790bd2abef3SChuck Lever 
179117f70f8dSChuck Lever 	TP_ARGS(ctxt),
1792bd2abef3SChuck Lever 
1793bd2abef3SChuck Lever 	TP_STRUCT__entry(
179417f70f8dSChuck Lever 		__field(u32, cq_id)
179517f70f8dSChuck Lever 		__field(int, completion_id)
1796bd2abef3SChuck Lever 		__field(unsigned int, num_sge)
1797bd2abef3SChuck Lever 		__field(u32, inv_rkey)
1798bd2abef3SChuck Lever 	),
1799bd2abef3SChuck Lever 
1800bd2abef3SChuck Lever 	TP_fast_assign(
180117f70f8dSChuck Lever 		const struct ib_send_wr *wr = &ctxt->sc_send_wr;
180217f70f8dSChuck Lever 
180317f70f8dSChuck Lever 		__entry->cq_id = ctxt->sc_cid.ci_queue_id;
180417f70f8dSChuck Lever 		__entry->completion_id = ctxt->sc_cid.ci_completion_id;
1805bd2abef3SChuck Lever 		__entry->num_sge = wr->num_sge;
1806bd2abef3SChuck Lever 		__entry->inv_rkey = (wr->opcode == IB_WR_SEND_WITH_INV) ?
1807bd2abef3SChuck Lever 					wr->ex.invalidate_rkey : 0;
1808bd2abef3SChuck Lever 	),
1809bd2abef3SChuck Lever 
181017f70f8dSChuck Lever 	TP_printk("cq_id=%u cid=%d num_sge=%u inv_rkey=0x%08x",
181117f70f8dSChuck Lever 		__entry->cq_id, __entry->completion_id,
181217f70f8dSChuck Lever 		__entry->num_sge, __entry->inv_rkey
1813bd2abef3SChuck Lever 	)
1814bd2abef3SChuck Lever );
1815bd2abef3SChuck Lever 
18163ac56c2fSChuck Lever DEFINE_COMPLETION_EVENT(svcrdma_wc_send);
1817bd2abef3SChuck Lever 
1818bd2abef3SChuck Lever TRACE_EVENT(svcrdma_post_recv,
1819bd2abef3SChuck Lever 	TP_PROTO(
18209b3bcf8cSChuck Lever 		const struct svc_rdma_recv_ctxt *ctxt
1821bd2abef3SChuck Lever 	),
1822bd2abef3SChuck Lever 
18239b3bcf8cSChuck Lever 	TP_ARGS(ctxt),
1824bd2abef3SChuck Lever 
1825bd2abef3SChuck Lever 	TP_STRUCT__entry(
18269b3bcf8cSChuck Lever 		__field(u32, cq_id)
18279b3bcf8cSChuck Lever 		__field(int, completion_id)
1828bd2abef3SChuck Lever 	),
1829bd2abef3SChuck Lever 
1830bd2abef3SChuck Lever 	TP_fast_assign(
18319b3bcf8cSChuck Lever 		__entry->cq_id = ctxt->rc_cid.ci_queue_id;
18329b3bcf8cSChuck Lever 		__entry->completion_id = ctxt->rc_cid.ci_completion_id;
1833bd2abef3SChuck Lever 	),
1834bd2abef3SChuck Lever 
18359b3bcf8cSChuck Lever 	TP_printk("cq.id=%d cid=%d",
18369b3bcf8cSChuck Lever 		__entry->cq_id, __entry->completion_id
1837bd2abef3SChuck Lever 	)
1838bd2abef3SChuck Lever );
1839bd2abef3SChuck Lever 
1840c30f259aSChuck Lever DEFINE_RECEIVE_COMPLETION_EVENT(svcrdma_wc_receive);
18419b3bcf8cSChuck Lever 
18429b3bcf8cSChuck Lever TRACE_EVENT(svcrdma_rq_post_err,
1843bd2abef3SChuck Lever 	TP_PROTO(
18449b3bcf8cSChuck Lever 		const struct svcxprt_rdma *rdma,
18459b3bcf8cSChuck Lever 		int status
1846bd2abef3SChuck Lever 	),
1847bd2abef3SChuck Lever 
18489b3bcf8cSChuck Lever 	TP_ARGS(rdma, status),
1849bd2abef3SChuck Lever 
1850bd2abef3SChuck Lever 	TP_STRUCT__entry(
18519b3bcf8cSChuck Lever 		__field(int, status)
18529b3bcf8cSChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1853bd2abef3SChuck Lever 	),
1854bd2abef3SChuck Lever 
1855bd2abef3SChuck Lever 	TP_fast_assign(
18569b3bcf8cSChuck Lever 		__entry->status = status;
18579b3bcf8cSChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1858bd2abef3SChuck Lever 	),
1859bd2abef3SChuck Lever 
18609b3bcf8cSChuck Lever 	TP_printk("addr=%s status=%d",
18619b3bcf8cSChuck Lever 		__get_str(addr), __entry->status
1862bd2abef3SChuck Lever 	)
1863bd2abef3SChuck Lever );
1864bd2abef3SChuck Lever 
1865b704be09SChuck Lever DECLARE_EVENT_CLASS(svcrdma_post_chunk_class,
1866bd2abef3SChuck Lever 	TP_PROTO(
18676787f0beSChuck Lever 		const struct rpc_rdma_cid *cid,
1868e28b4fc6SChuck Lever 		int sqecount
1869bd2abef3SChuck Lever 	),
1870bd2abef3SChuck Lever 
18716787f0beSChuck Lever 	TP_ARGS(cid, sqecount),
1872bd2abef3SChuck Lever 
1873bd2abef3SChuck Lever 	TP_STRUCT__entry(
18746787f0beSChuck Lever 		__field(u32, cq_id)
18756787f0beSChuck Lever 		__field(int, completion_id)
1876bd2abef3SChuck Lever 		__field(int, sqecount)
1877bd2abef3SChuck Lever 	),
1878bd2abef3SChuck Lever 
1879bd2abef3SChuck Lever 	TP_fast_assign(
18806787f0beSChuck Lever 		__entry->cq_id = cid->ci_queue_id;
18816787f0beSChuck Lever 		__entry->completion_id = cid->ci_completion_id;
1882bd2abef3SChuck Lever 		__entry->sqecount = sqecount;
1883bd2abef3SChuck Lever 	),
1884bd2abef3SChuck Lever 
18856787f0beSChuck Lever 	TP_printk("cq.id=%u cid=%d sqecount=%d",
18866787f0beSChuck Lever 		__entry->cq_id, __entry->completion_id,
18876787f0beSChuck Lever 		__entry->sqecount
1888bd2abef3SChuck Lever 	)
1889bd2abef3SChuck Lever );
1890bd2abef3SChuck Lever 
1891b704be09SChuck Lever #define DEFINE_POST_CHUNK_EVENT(name)					\
1892b704be09SChuck Lever 		DEFINE_EVENT(svcrdma_post_chunk_class,			\
1893b704be09SChuck Lever 				svcrdma_post_##name##_chunk,		\
1894b704be09SChuck Lever 				TP_PROTO(				\
1895b704be09SChuck Lever 					const struct rpc_rdma_cid *cid,	\
1896b704be09SChuck Lever 					int sqecount			\
1897b704be09SChuck Lever 				),					\
1898b704be09SChuck Lever 				TP_ARGS(cid, sqecount))
1899b704be09SChuck Lever 
1900b704be09SChuck Lever DEFINE_POST_CHUNK_EVENT(read);
1901b704be09SChuck Lever DEFINE_POST_CHUNK_EVENT(write);
1902b704be09SChuck Lever DEFINE_POST_CHUNK_EVENT(reply);
1903b704be09SChuck Lever 
19046787f0beSChuck Lever DEFINE_COMPLETION_EVENT(svcrdma_wc_read);
19056787f0beSChuck Lever DEFINE_COMPLETION_EVENT(svcrdma_wc_write);
1906bd2abef3SChuck Lever 
1907bd2abef3SChuck Lever TRACE_EVENT(svcrdma_qp_error,
1908bd2abef3SChuck Lever 	TP_PROTO(
1909bd2abef3SChuck Lever 		const struct ib_event *event,
1910bd2abef3SChuck Lever 		const struct sockaddr *sap
1911bd2abef3SChuck Lever 	),
1912bd2abef3SChuck Lever 
1913bd2abef3SChuck Lever 	TP_ARGS(event, sap),
1914bd2abef3SChuck Lever 
1915bd2abef3SChuck Lever 	TP_STRUCT__entry(
1916bd2abef3SChuck Lever 		__field(unsigned int, event)
1917bd2abef3SChuck Lever 		__string(device, event->device->name)
1918bd2abef3SChuck Lever 		__array(__u8, addr, INET6_ADDRSTRLEN + 10)
1919bd2abef3SChuck Lever 	),
1920bd2abef3SChuck Lever 
1921bd2abef3SChuck Lever 	TP_fast_assign(
1922bd2abef3SChuck Lever 		__entry->event = event->event;
1923bd2abef3SChuck Lever 		__assign_str(device, event->device->name);
1924bd2abef3SChuck Lever 		snprintf(__entry->addr, sizeof(__entry->addr) - 1,
1925bd2abef3SChuck Lever 			 "%pISpc", sap);
1926bd2abef3SChuck Lever 	),
1927bd2abef3SChuck Lever 
1928bd2abef3SChuck Lever 	TP_printk("addr=%s dev=%s event=%s (%u)",
1929bd2abef3SChuck Lever 		__entry->addr, __get_str(device),
1930bd2abef3SChuck Lever 		rdma_show_ib_event(__entry->event), __entry->event
1931bd2abef3SChuck Lever 	)
1932bd2abef3SChuck Lever );
1933bd2abef3SChuck Lever 
1934bd2abef3SChuck Lever DECLARE_EVENT_CLASS(svcrdma_sendqueue_event,
1935bd2abef3SChuck Lever 	TP_PROTO(
1936bd2abef3SChuck Lever 		const struct svcxprt_rdma *rdma
1937bd2abef3SChuck Lever 	),
1938bd2abef3SChuck Lever 
1939bd2abef3SChuck Lever 	TP_ARGS(rdma),
1940bd2abef3SChuck Lever 
1941bd2abef3SChuck Lever 	TP_STRUCT__entry(
1942bd2abef3SChuck Lever 		__field(int, avail)
1943bd2abef3SChuck Lever 		__field(int, depth)
1944bd2abef3SChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1945bd2abef3SChuck Lever 	),
1946bd2abef3SChuck Lever 
1947bd2abef3SChuck Lever 	TP_fast_assign(
1948bd2abef3SChuck Lever 		__entry->avail = atomic_read(&rdma->sc_sq_avail);
1949bd2abef3SChuck Lever 		__entry->depth = rdma->sc_sq_depth;
1950bd2abef3SChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1951bd2abef3SChuck Lever 	),
1952bd2abef3SChuck Lever 
1953bd2abef3SChuck Lever 	TP_printk("addr=%s sc_sq_avail=%d/%d",
1954bd2abef3SChuck Lever 		__get_str(addr), __entry->avail, __entry->depth
1955bd2abef3SChuck Lever 	)
1956bd2abef3SChuck Lever );
1957bd2abef3SChuck Lever 
1958bd2abef3SChuck Lever #define DEFINE_SQ_EVENT(name)						\
1959bd2abef3SChuck Lever 		DEFINE_EVENT(svcrdma_sendqueue_event, svcrdma_sq_##name,\
1960bd2abef3SChuck Lever 				TP_PROTO(				\
1961bd2abef3SChuck Lever 					const struct svcxprt_rdma *rdma \
1962bd2abef3SChuck Lever 				),					\
1963bd2abef3SChuck Lever 				TP_ARGS(rdma))
1964bd2abef3SChuck Lever 
1965bd2abef3SChuck Lever DEFINE_SQ_EVENT(full);
1966bd2abef3SChuck Lever DEFINE_SQ_EVENT(retry);
1967bd2abef3SChuck Lever 
1968e28b4fc6SChuck Lever TRACE_EVENT(svcrdma_sq_post_err,
1969e28b4fc6SChuck Lever 	TP_PROTO(
1970e28b4fc6SChuck Lever 		const struct svcxprt_rdma *rdma,
1971e28b4fc6SChuck Lever 		int status
1972e28b4fc6SChuck Lever 	),
1973e28b4fc6SChuck Lever 
1974e28b4fc6SChuck Lever 	TP_ARGS(rdma, status),
1975e28b4fc6SChuck Lever 
1976e28b4fc6SChuck Lever 	TP_STRUCT__entry(
1977e28b4fc6SChuck Lever 		__field(int, avail)
1978e28b4fc6SChuck Lever 		__field(int, depth)
1979e28b4fc6SChuck Lever 		__field(int, status)
1980e28b4fc6SChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1981e28b4fc6SChuck Lever 	),
1982e28b4fc6SChuck Lever 
1983e28b4fc6SChuck Lever 	TP_fast_assign(
1984e28b4fc6SChuck Lever 		__entry->avail = atomic_read(&rdma->sc_sq_avail);
1985e28b4fc6SChuck Lever 		__entry->depth = rdma->sc_sq_depth;
1986e28b4fc6SChuck Lever 		__entry->status = status;
1987e28b4fc6SChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1988e28b4fc6SChuck Lever 	),
1989e28b4fc6SChuck Lever 
1990e28b4fc6SChuck Lever 	TP_printk("addr=%s sc_sq_avail=%d/%d status=%d",
1991e28b4fc6SChuck Lever 		__get_str(addr), __entry->avail, __entry->depth,
1992e28b4fc6SChuck Lever 		__entry->status
1993e28b4fc6SChuck Lever 	)
1994e28b4fc6SChuck Lever );
1995e28b4fc6SChuck Lever 
1996e48f083eSChuck Lever #endif /* _TRACE_RPCRDMA_H */
1997e48f083eSChuck Lever 
1998e48f083eSChuck Lever #include <trace/define_trace.h>
1999