xref: /openbmc/linux/include/trace/events/rpcrdma.h (revision 3f8f25c6)
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>
14e48f083eSChuck Lever #include <linux/tracepoint.h>
15e48f083eSChuck Lever #include <trace/events/rdma.h>
16e48f083eSChuck Lever 
17ab03eff5SChuck Lever /**
18b4a7f91cSChuck Lever  ** Event classes
19b4a7f91cSChuck Lever  **/
20b4a7f91cSChuck Lever 
21b4a7f91cSChuck Lever DECLARE_EVENT_CLASS(xprtrdma_reply_event,
22b4a7f91cSChuck Lever 	TP_PROTO(
23b4a7f91cSChuck Lever 		const struct rpcrdma_rep *rep
24b4a7f91cSChuck Lever 	),
25b4a7f91cSChuck Lever 
26b4a7f91cSChuck Lever 	TP_ARGS(rep),
27b4a7f91cSChuck Lever 
28b4a7f91cSChuck Lever 	TP_STRUCT__entry(
29b4a7f91cSChuck Lever 		__field(const void *, rep)
30b4a7f91cSChuck Lever 		__field(const void *, r_xprt)
31b4a7f91cSChuck Lever 		__field(u32, xid)
32b4a7f91cSChuck Lever 		__field(u32, version)
33b4a7f91cSChuck Lever 		__field(u32, proc)
34b4a7f91cSChuck Lever 	),
35b4a7f91cSChuck Lever 
36b4a7f91cSChuck Lever 	TP_fast_assign(
37b4a7f91cSChuck Lever 		__entry->rep = rep;
38b4a7f91cSChuck Lever 		__entry->r_xprt = rep->rr_rxprt;
39b4a7f91cSChuck Lever 		__entry->xid = be32_to_cpu(rep->rr_xid);
40b4a7f91cSChuck Lever 		__entry->version = be32_to_cpu(rep->rr_vers);
41b4a7f91cSChuck Lever 		__entry->proc = be32_to_cpu(rep->rr_proc);
42b4a7f91cSChuck Lever 	),
43b4a7f91cSChuck Lever 
44b4a7f91cSChuck Lever 	TP_printk("rxprt %p xid=0x%08x rep=%p: version %u proc %u",
45b4a7f91cSChuck Lever 		__entry->r_xprt, __entry->xid, __entry->rep,
46b4a7f91cSChuck Lever 		__entry->version, __entry->proc
47b4a7f91cSChuck Lever 	)
48b4a7f91cSChuck Lever );
49b4a7f91cSChuck Lever 
50b4a7f91cSChuck Lever #define DEFINE_REPLY_EVENT(name)					\
51b4a7f91cSChuck Lever 		DEFINE_EVENT(xprtrdma_reply_event, name,		\
52b4a7f91cSChuck Lever 				TP_PROTO(				\
53b4a7f91cSChuck Lever 					const struct rpcrdma_rep *rep	\
54b4a7f91cSChuck Lever 				),					\
55b4a7f91cSChuck Lever 				TP_ARGS(rep))
56b4a7f91cSChuck Lever 
571c443effSChuck Lever DECLARE_EVENT_CLASS(xprtrdma_rxprt,
581c443effSChuck Lever 	TP_PROTO(
591c443effSChuck Lever 		const struct rpcrdma_xprt *r_xprt
601c443effSChuck Lever 	),
611c443effSChuck Lever 
621c443effSChuck Lever 	TP_ARGS(r_xprt),
631c443effSChuck Lever 
641c443effSChuck Lever 	TP_STRUCT__entry(
651c443effSChuck Lever 		__field(const void *, r_xprt)
661c443effSChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
671c443effSChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
681c443effSChuck Lever 	),
691c443effSChuck Lever 
701c443effSChuck Lever 	TP_fast_assign(
711c443effSChuck Lever 		__entry->r_xprt = r_xprt;
721c443effSChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
731c443effSChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
741c443effSChuck Lever 	),
751c443effSChuck Lever 
761c443effSChuck Lever 	TP_printk("peer=[%s]:%s r_xprt=%p",
771c443effSChuck Lever 		__get_str(addr), __get_str(port), __entry->r_xprt
781c443effSChuck Lever 	)
791c443effSChuck Lever );
801c443effSChuck Lever 
811c443effSChuck Lever #define DEFINE_RXPRT_EVENT(name)					\
821c443effSChuck Lever 		DEFINE_EVENT(xprtrdma_rxprt, name,			\
831c443effSChuck Lever 				TP_PROTO(				\
841c443effSChuck Lever 					const struct rpcrdma_xprt *r_xprt \
851c443effSChuck Lever 				),					\
861c443effSChuck Lever 				TP_ARGS(r_xprt))
871c443effSChuck Lever 
887b020f17SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_connect_class,
897b020f17SChuck Lever 	TP_PROTO(
907b020f17SChuck Lever 		const struct rpcrdma_xprt *r_xprt,
917b020f17SChuck Lever 		int rc
927b020f17SChuck Lever 	),
937b020f17SChuck Lever 
947b020f17SChuck Lever 	TP_ARGS(r_xprt, rc),
957b020f17SChuck Lever 
967b020f17SChuck Lever 	TP_STRUCT__entry(
977b020f17SChuck Lever 		__field(const void *, r_xprt)
987b020f17SChuck Lever 		__field(int, rc)
997b020f17SChuck Lever 		__field(int, connect_status)
1007b020f17SChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
1017b020f17SChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
1027b020f17SChuck Lever 	),
1037b020f17SChuck Lever 
1047b020f17SChuck Lever 	TP_fast_assign(
1057b020f17SChuck Lever 		__entry->r_xprt = r_xprt;
1067b020f17SChuck Lever 		__entry->rc = rc;
107e28ce900SChuck Lever 		__entry->connect_status = r_xprt->rx_ep->re_connect_status;
1087b020f17SChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
1097b020f17SChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
1107b020f17SChuck Lever 	),
1117b020f17SChuck Lever 
112d6ccebf9SChuck Lever 	TP_printk("peer=[%s]:%s r_xprt=%p: rc=%d connection status=%d",
1137b020f17SChuck Lever 		__get_str(addr), __get_str(port), __entry->r_xprt,
1147b020f17SChuck Lever 		__entry->rc, __entry->connect_status
1157b020f17SChuck Lever 	)
1167b020f17SChuck Lever );
1177b020f17SChuck Lever 
1187b020f17SChuck Lever #define DEFINE_CONN_EVENT(name)						\
1197b020f17SChuck Lever 		DEFINE_EVENT(xprtrdma_connect_class, xprtrdma_##name,	\
1207b020f17SChuck Lever 				TP_PROTO(				\
1217b020f17SChuck Lever 					const struct rpcrdma_xprt *r_xprt, \
1227b020f17SChuck Lever 					int rc				\
1237b020f17SChuck Lever 				),					\
1247b020f17SChuck Lever 				TP_ARGS(r_xprt, rc))
1257b020f17SChuck Lever 
12658f10ad4SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_rdch_event,
12758f10ad4SChuck Lever 	TP_PROTO(
12858f10ad4SChuck Lever 		const struct rpc_task *task,
12958f10ad4SChuck Lever 		unsigned int pos,
13058f10ad4SChuck Lever 		struct rpcrdma_mr *mr,
13158f10ad4SChuck Lever 		int nsegs
13258f10ad4SChuck Lever 	),
13358f10ad4SChuck Lever 
13458f10ad4SChuck Lever 	TP_ARGS(task, pos, mr, nsegs),
13558f10ad4SChuck Lever 
13658f10ad4SChuck Lever 	TP_STRUCT__entry(
13758f10ad4SChuck Lever 		__field(unsigned int, task_id)
13858f10ad4SChuck Lever 		__field(unsigned int, client_id)
13958f10ad4SChuck Lever 		__field(unsigned int, pos)
14058f10ad4SChuck Lever 		__field(int, nents)
14158f10ad4SChuck Lever 		__field(u32, handle)
14258f10ad4SChuck Lever 		__field(u32, length)
14358f10ad4SChuck Lever 		__field(u64, offset)
14458f10ad4SChuck Lever 		__field(int, nsegs)
14558f10ad4SChuck Lever 	),
14658f10ad4SChuck Lever 
14758f10ad4SChuck Lever 	TP_fast_assign(
14858f10ad4SChuck Lever 		__entry->task_id = task->tk_pid;
14958f10ad4SChuck Lever 		__entry->client_id = task->tk_client->cl_clid;
15058f10ad4SChuck Lever 		__entry->pos = pos;
15158f10ad4SChuck Lever 		__entry->nents = mr->mr_nents;
15258f10ad4SChuck Lever 		__entry->handle = mr->mr_handle;
15358f10ad4SChuck Lever 		__entry->length = mr->mr_length;
15458f10ad4SChuck Lever 		__entry->offset = mr->mr_offset;
15558f10ad4SChuck Lever 		__entry->nsegs = nsegs;
15658f10ad4SChuck Lever 	),
15758f10ad4SChuck Lever 
158aba11831SChuck Lever 	TP_printk("task:%u@%u pos=%u %u@0x%016llx:0x%08x (%s)",
159aba11831SChuck Lever 		__entry->task_id, __entry->client_id,
16058f10ad4SChuck Lever 		__entry->pos, __entry->length,
16158f10ad4SChuck Lever 		(unsigned long long)__entry->offset, __entry->handle,
16258f10ad4SChuck Lever 		__entry->nents < __entry->nsegs ? "more" : "last"
16358f10ad4SChuck Lever 	)
16458f10ad4SChuck Lever );
16558f10ad4SChuck Lever 
16658f10ad4SChuck Lever #define DEFINE_RDCH_EVENT(name)						\
167aba11831SChuck Lever 		DEFINE_EVENT(xprtrdma_rdch_event, xprtrdma_chunk_##name,\
16858f10ad4SChuck Lever 				TP_PROTO(				\
16958f10ad4SChuck Lever 					const struct rpc_task *task,	\
17058f10ad4SChuck Lever 					unsigned int pos,		\
17158f10ad4SChuck Lever 					struct rpcrdma_mr *mr,		\
17258f10ad4SChuck Lever 					int nsegs			\
17358f10ad4SChuck Lever 				),					\
17458f10ad4SChuck Lever 				TP_ARGS(task, pos, mr, nsegs))
17558f10ad4SChuck Lever 
17658f10ad4SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_wrch_event,
17758f10ad4SChuck Lever 	TP_PROTO(
17858f10ad4SChuck Lever 		const struct rpc_task *task,
17958f10ad4SChuck Lever 		struct rpcrdma_mr *mr,
18058f10ad4SChuck Lever 		int nsegs
18158f10ad4SChuck Lever 	),
18258f10ad4SChuck Lever 
18358f10ad4SChuck Lever 	TP_ARGS(task, mr, nsegs),
18458f10ad4SChuck Lever 
18558f10ad4SChuck Lever 	TP_STRUCT__entry(
18658f10ad4SChuck Lever 		__field(unsigned int, task_id)
18758f10ad4SChuck Lever 		__field(unsigned int, client_id)
18858f10ad4SChuck Lever 		__field(int, nents)
18958f10ad4SChuck Lever 		__field(u32, handle)
19058f10ad4SChuck Lever 		__field(u32, length)
19158f10ad4SChuck Lever 		__field(u64, offset)
19258f10ad4SChuck Lever 		__field(int, nsegs)
19358f10ad4SChuck Lever 	),
19458f10ad4SChuck Lever 
19558f10ad4SChuck Lever 	TP_fast_assign(
19658f10ad4SChuck Lever 		__entry->task_id = task->tk_pid;
19758f10ad4SChuck Lever 		__entry->client_id = task->tk_client->cl_clid;
19858f10ad4SChuck Lever 		__entry->nents = mr->mr_nents;
19958f10ad4SChuck Lever 		__entry->handle = mr->mr_handle;
20058f10ad4SChuck Lever 		__entry->length = mr->mr_length;
20158f10ad4SChuck Lever 		__entry->offset = mr->mr_offset;
20258f10ad4SChuck Lever 		__entry->nsegs = nsegs;
20358f10ad4SChuck Lever 	),
20458f10ad4SChuck Lever 
205aba11831SChuck Lever 	TP_printk("task:%u@%u %u@0x%016llx:0x%08x (%s)",
206aba11831SChuck Lever 		__entry->task_id, __entry->client_id,
20758f10ad4SChuck Lever 		__entry->length, (unsigned long long)__entry->offset,
20858f10ad4SChuck Lever 		__entry->handle,
20958f10ad4SChuck Lever 		__entry->nents < __entry->nsegs ? "more" : "last"
21058f10ad4SChuck Lever 	)
21158f10ad4SChuck Lever );
21258f10ad4SChuck Lever 
21358f10ad4SChuck Lever #define DEFINE_WRCH_EVENT(name)						\
214aba11831SChuck Lever 		DEFINE_EVENT(xprtrdma_wrch_event, xprtrdma_chunk_##name,\
21558f10ad4SChuck Lever 				TP_PROTO(				\
21658f10ad4SChuck Lever 					const struct rpc_task *task,	\
21758f10ad4SChuck Lever 					struct rpcrdma_mr *mr,		\
21858f10ad4SChuck Lever 					int nsegs			\
21958f10ad4SChuck Lever 				),					\
22058f10ad4SChuck Lever 				TP_ARGS(task, mr, nsegs))
22158f10ad4SChuck Lever 
22258f10ad4SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_frwr_done,
22358f10ad4SChuck Lever 	TP_PROTO(
22458f10ad4SChuck Lever 		const struct ib_wc *wc,
22558f10ad4SChuck Lever 		const struct rpcrdma_frwr *frwr
22658f10ad4SChuck Lever 	),
22758f10ad4SChuck Lever 
22858f10ad4SChuck Lever 	TP_ARGS(wc, frwr),
22958f10ad4SChuck Lever 
23058f10ad4SChuck Lever 	TP_STRUCT__entry(
23162a89501SChuck Lever 		__field(u32, mr_id)
23258f10ad4SChuck Lever 		__field(unsigned int, status)
23358f10ad4SChuck Lever 		__field(unsigned int, vendor_err)
23458f10ad4SChuck Lever 	),
23558f10ad4SChuck Lever 
23658f10ad4SChuck Lever 	TP_fast_assign(
23762a89501SChuck Lever 		__entry->mr_id = frwr->fr_mr->res.id;
23858f10ad4SChuck Lever 		__entry->status = wc->status;
23958f10ad4SChuck Lever 		__entry->vendor_err = __entry->status ? wc->vendor_err : 0;
24058f10ad4SChuck Lever 	),
24158f10ad4SChuck Lever 
24258f10ad4SChuck Lever 	TP_printk(
24362a89501SChuck Lever 		"mr.id=%u: %s (%u/0x%x)",
24462a89501SChuck Lever 		__entry->mr_id, rdma_show_wc_status(__entry->status),
24558f10ad4SChuck Lever 		__entry->status, __entry->vendor_err
24658f10ad4SChuck Lever 	)
24758f10ad4SChuck Lever );
24858f10ad4SChuck Lever 
24958f10ad4SChuck Lever #define DEFINE_FRWR_DONE_EVENT(name)					\
25058f10ad4SChuck Lever 		DEFINE_EVENT(xprtrdma_frwr_done, name,			\
25158f10ad4SChuck Lever 				TP_PROTO(				\
25258f10ad4SChuck Lever 					const struct ib_wc *wc,		\
25358f10ad4SChuck Lever 					const struct rpcrdma_frwr *frwr	\
25458f10ad4SChuck Lever 				),					\
25558f10ad4SChuck Lever 				TP_ARGS(wc, frwr))
25658f10ad4SChuck Lever 
257aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_BIDIRECTIONAL);
258aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_TO_DEVICE);
259aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_FROM_DEVICE);
260aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_NONE);
261aba11831SChuck Lever 
262aba11831SChuck Lever #define xprtrdma_show_direction(x)					\
263aba11831SChuck Lever 		__print_symbolic(x,					\
264aba11831SChuck Lever 				{ DMA_BIDIRECTIONAL, "BIDIR" },		\
265aba11831SChuck Lever 				{ DMA_TO_DEVICE, "TO_DEVICE" },		\
266aba11831SChuck Lever 				{ DMA_FROM_DEVICE, "FROM_DEVICE" },	\
267aba11831SChuck Lever 				{ DMA_NONE, "NONE" })
268aba11831SChuck Lever 
2692937fedeSChuck Lever DECLARE_EVENT_CLASS(xprtrdma_mr,
2702937fedeSChuck Lever 	TP_PROTO(
2712937fedeSChuck Lever 		const struct rpcrdma_mr *mr
2722937fedeSChuck Lever 	),
2732937fedeSChuck Lever 
2742937fedeSChuck Lever 	TP_ARGS(mr),
2752937fedeSChuck Lever 
2762937fedeSChuck Lever 	TP_STRUCT__entry(
27762a89501SChuck Lever 		__field(u32, mr_id)
27862a89501SChuck Lever 		__field(int, nents)
2792937fedeSChuck Lever 		__field(u32, handle)
2802937fedeSChuck Lever 		__field(u32, length)
2812937fedeSChuck Lever 		__field(u64, offset)
282aba11831SChuck Lever 		__field(u32, dir)
2832937fedeSChuck Lever 	),
2842937fedeSChuck Lever 
2852937fedeSChuck Lever 	TP_fast_assign(
28662a89501SChuck Lever 		__entry->mr_id  = mr->frwr.fr_mr->res.id;
28762a89501SChuck Lever 		__entry->nents  = mr->mr_nents;
2882937fedeSChuck Lever 		__entry->handle = mr->mr_handle;
2892937fedeSChuck Lever 		__entry->length = mr->mr_length;
2902937fedeSChuck Lever 		__entry->offset = mr->mr_offset;
291aba11831SChuck Lever 		__entry->dir    = mr->mr_dir;
2922937fedeSChuck Lever 	),
2932937fedeSChuck Lever 
29462a89501SChuck Lever 	TP_printk("mr.id=%u nents=%d %u@0x%016llx:0x%08x (%s)",
29562a89501SChuck Lever 		__entry->mr_id, __entry->nents, __entry->length,
296aba11831SChuck Lever 		(unsigned long long)__entry->offset, __entry->handle,
297aba11831SChuck Lever 		xprtrdma_show_direction(__entry->dir)
2982937fedeSChuck Lever 	)
2992937fedeSChuck Lever );
3002937fedeSChuck Lever 
3012937fedeSChuck Lever #define DEFINE_MR_EVENT(name) \
302d379eaa8SChuck Lever 		DEFINE_EVENT(xprtrdma_mr, xprtrdma_mr_##name, \
3032937fedeSChuck Lever 				TP_PROTO( \
3042937fedeSChuck Lever 					const struct rpcrdma_mr *mr \
3052937fedeSChuck Lever 				), \
3062937fedeSChuck Lever 				TP_ARGS(mr))
3072937fedeSChuck Lever 
308fc1eb807SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_cb_event,
309fc1eb807SChuck Lever 	TP_PROTO(
310fc1eb807SChuck Lever 		const struct rpc_rqst *rqst
311fc1eb807SChuck Lever 	),
312fc1eb807SChuck Lever 
313fc1eb807SChuck Lever 	TP_ARGS(rqst),
314fc1eb807SChuck Lever 
315fc1eb807SChuck Lever 	TP_STRUCT__entry(
316fc1eb807SChuck Lever 		__field(const void *, rqst)
317fc1eb807SChuck Lever 		__field(const void *, rep)
318fc1eb807SChuck Lever 		__field(const void *, req)
319fc1eb807SChuck Lever 		__field(u32, xid)
320fc1eb807SChuck Lever 	),
321fc1eb807SChuck Lever 
322fc1eb807SChuck Lever 	TP_fast_assign(
323fc1eb807SChuck Lever 		__entry->rqst = rqst;
324fc1eb807SChuck Lever 		__entry->req = rpcr_to_rdmar(rqst);
325fc1eb807SChuck Lever 		__entry->rep = rpcr_to_rdmar(rqst)->rl_reply;
326fc1eb807SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
327fc1eb807SChuck Lever 	),
328fc1eb807SChuck Lever 
329fc1eb807SChuck Lever 	TP_printk("xid=0x%08x, rqst=%p req=%p rep=%p",
330fc1eb807SChuck Lever 		__entry->xid, __entry->rqst, __entry->req, __entry->rep
331fc1eb807SChuck Lever 	)
332fc1eb807SChuck Lever );
333fc1eb807SChuck Lever 
334fc1eb807SChuck Lever #define DEFINE_CB_EVENT(name)						\
335fc1eb807SChuck Lever 		DEFINE_EVENT(xprtrdma_cb_event, name,			\
336fc1eb807SChuck Lever 				TP_PROTO(				\
337fc1eb807SChuck Lever 					const struct rpc_rqst *rqst	\
338fc1eb807SChuck Lever 				),					\
339fc1eb807SChuck Lever 				TP_ARGS(rqst))
340fc1eb807SChuck Lever 
341b4a7f91cSChuck Lever /**
342b4744e00SChuck Lever  ** Connection events
343b4744e00SChuck Lever  **/
344b4744e00SChuck Lever 
345f54c870dSChuck Lever TRACE_EVENT(xprtrdma_inline_thresh,
346f54c870dSChuck Lever 	TP_PROTO(
347745b734cSChuck Lever 		const struct rpcrdma_ep *ep
348f54c870dSChuck Lever 	),
349f54c870dSChuck Lever 
350745b734cSChuck Lever 	TP_ARGS(ep),
351f54c870dSChuck Lever 
352f54c870dSChuck Lever 	TP_STRUCT__entry(
353f54c870dSChuck Lever 		__field(unsigned int, inline_send)
354f54c870dSChuck Lever 		__field(unsigned int, inline_recv)
355f54c870dSChuck Lever 		__field(unsigned int, max_send)
356f54c870dSChuck Lever 		__field(unsigned int, max_recv)
357745b734cSChuck Lever 		__array(unsigned char, srcaddr, sizeof(struct sockaddr_in6))
358745b734cSChuck Lever 		__array(unsigned char, dstaddr, sizeof(struct sockaddr_in6))
359f54c870dSChuck Lever 	),
360f54c870dSChuck Lever 
361f54c870dSChuck Lever 	TP_fast_assign(
362745b734cSChuck Lever 		const struct rdma_cm_id *id = ep->re_id;
363f54c870dSChuck Lever 
36493aa8e0aSChuck Lever 		__entry->inline_send = ep->re_inline_send;
36593aa8e0aSChuck Lever 		__entry->inline_recv = ep->re_inline_recv;
36693aa8e0aSChuck Lever 		__entry->max_send = ep->re_max_inline_send;
36793aa8e0aSChuck Lever 		__entry->max_recv = ep->re_max_inline_recv;
368745b734cSChuck Lever 		memcpy(__entry->srcaddr, &id->route.addr.src_addr,
369745b734cSChuck Lever 		       sizeof(struct sockaddr_in6));
370745b734cSChuck Lever 		memcpy(__entry->dstaddr, &id->route.addr.dst_addr,
371745b734cSChuck Lever 		       sizeof(struct sockaddr_in6));
372f54c870dSChuck Lever 	),
373f54c870dSChuck Lever 
374745b734cSChuck Lever 	TP_printk("%pISpc -> %pISpc neg send/recv=%u/%u, calc send/recv=%u/%u",
375745b734cSChuck Lever 		__entry->srcaddr, __entry->dstaddr,
376f54c870dSChuck Lever 		__entry->inline_send, __entry->inline_recv,
377f54c870dSChuck Lever 		__entry->max_send, __entry->max_recv
378f54c870dSChuck Lever 	)
379f54c870dSChuck Lever );
380f54c870dSChuck Lever 
3817b020f17SChuck Lever DEFINE_CONN_EVENT(connect);
3827b020f17SChuck Lever DEFINE_CONN_EVENT(disconnect);
3837b020f17SChuck Lever 
3847b020f17SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_op_inject_dsc);
385a52c23b8SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_op_setport);
3867b020f17SChuck Lever 
3877b020f17SChuck Lever TRACE_EVENT(xprtrdma_op_connect,
388b4744e00SChuck Lever 	TP_PROTO(
389b4744e00SChuck Lever 		const struct rpcrdma_xprt *r_xprt,
3907b020f17SChuck Lever 		unsigned long delay
391b4744e00SChuck Lever 	),
392b4744e00SChuck Lever 
3937b020f17SChuck Lever 	TP_ARGS(r_xprt, delay),
394b4744e00SChuck Lever 
395b4744e00SChuck Lever 	TP_STRUCT__entry(
396b4744e00SChuck Lever 		__field(const void *, r_xprt)
3977b020f17SChuck Lever 		__field(unsigned long, delay)
398b4744e00SChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
399b4744e00SChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
400b4744e00SChuck Lever 	),
401b4744e00SChuck Lever 
402b4744e00SChuck Lever 	TP_fast_assign(
403b4744e00SChuck Lever 		__entry->r_xprt = r_xprt;
4047b020f17SChuck Lever 		__entry->delay = delay;
405b4744e00SChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
406b4744e00SChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
407b4744e00SChuck Lever 	),
408b4744e00SChuck Lever 
4097b020f17SChuck Lever 	TP_printk("peer=[%s]:%s r_xprt=%p delay=%lu",
4107b020f17SChuck Lever 		__get_str(addr), __get_str(port), __entry->r_xprt,
4117b020f17SChuck Lever 		__entry->delay
412b4744e00SChuck Lever 	)
413b4744e00SChuck Lever );
414b4744e00SChuck Lever 
415b4744e00SChuck Lever 
416675dd90aSChuck Lever TRACE_EVENT(xprtrdma_op_set_cto,
417675dd90aSChuck Lever 	TP_PROTO(
418675dd90aSChuck Lever 		const struct rpcrdma_xprt *r_xprt,
419675dd90aSChuck Lever 		unsigned long connect,
420675dd90aSChuck Lever 		unsigned long reconnect
421675dd90aSChuck Lever 	),
422675dd90aSChuck Lever 
423675dd90aSChuck Lever 	TP_ARGS(r_xprt, connect, reconnect),
424675dd90aSChuck Lever 
425675dd90aSChuck Lever 	TP_STRUCT__entry(
426675dd90aSChuck Lever 		__field(const void *, r_xprt)
427675dd90aSChuck Lever 		__field(unsigned long, connect)
428675dd90aSChuck Lever 		__field(unsigned long, reconnect)
429675dd90aSChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
430675dd90aSChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
431675dd90aSChuck Lever 	),
432675dd90aSChuck Lever 
433675dd90aSChuck Lever 	TP_fast_assign(
434675dd90aSChuck Lever 		__entry->r_xprt = r_xprt;
435675dd90aSChuck Lever 		__entry->connect = connect;
436675dd90aSChuck Lever 		__entry->reconnect = reconnect;
437675dd90aSChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
438675dd90aSChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
439675dd90aSChuck Lever 	),
440675dd90aSChuck Lever 
441675dd90aSChuck Lever 	TP_printk("peer=[%s]:%s r_xprt=%p: connect=%lu reconnect=%lu",
442675dd90aSChuck Lever 		__get_str(addr), __get_str(port), __entry->r_xprt,
443675dd90aSChuck Lever 		__entry->connect / HZ, __entry->reconnect / HZ
444675dd90aSChuck Lever 	)
445675dd90aSChuck Lever );
446675dd90aSChuck Lever 
447f9521d53SChuck Lever TRACE_EVENT(xprtrdma_qp_event,
448643cf323SChuck Lever 	TP_PROTO(
449745b734cSChuck Lever 		const struct rpcrdma_ep *ep,
450643cf323SChuck Lever 		const struct ib_event *event
451643cf323SChuck Lever 	),
452643cf323SChuck Lever 
453745b734cSChuck Lever 	TP_ARGS(ep, event),
454643cf323SChuck Lever 
455643cf323SChuck Lever 	TP_STRUCT__entry(
456745b734cSChuck Lever 		__field(unsigned long, event)
457643cf323SChuck Lever 		__string(name, event->device->name)
458745b734cSChuck Lever 		__array(unsigned char, srcaddr, sizeof(struct sockaddr_in6))
459745b734cSChuck Lever 		__array(unsigned char, dstaddr, sizeof(struct sockaddr_in6))
460643cf323SChuck Lever 	),
461643cf323SChuck Lever 
462643cf323SChuck Lever 	TP_fast_assign(
463745b734cSChuck Lever 		const struct rdma_cm_id *id = ep->re_id;
464745b734cSChuck Lever 
465643cf323SChuck Lever 		__entry->event = event->event;
466643cf323SChuck Lever 		__assign_str(name, event->device->name);
467745b734cSChuck Lever 		memcpy(__entry->srcaddr, &id->route.addr.src_addr,
468745b734cSChuck Lever 		       sizeof(struct sockaddr_in6));
469745b734cSChuck Lever 		memcpy(__entry->dstaddr, &id->route.addr.dst_addr,
470745b734cSChuck Lever 		       sizeof(struct sockaddr_in6));
471643cf323SChuck Lever 	),
472643cf323SChuck Lever 
473745b734cSChuck Lever 	TP_printk("%pISpc -> %pISpc device=%s %s (%lu)",
474745b734cSChuck Lever 		__entry->srcaddr, __entry->dstaddr, __get_str(name),
475745b734cSChuck Lever 		rdma_show_ib_event(__entry->event), __entry->event
476643cf323SChuck Lever 	)
477643cf323SChuck Lever );
478643cf323SChuck Lever 
479b4744e00SChuck Lever /**
480ab03eff5SChuck Lever  ** Call events
481ab03eff5SChuck Lever  **/
482ab03eff5SChuck Lever 
4831c443effSChuck Lever TRACE_EVENT(xprtrdma_createmrs,
4841c443effSChuck Lever 	TP_PROTO(
4851c443effSChuck Lever 		const struct rpcrdma_xprt *r_xprt,
4861c443effSChuck Lever 		unsigned int count
4871c443effSChuck Lever 	),
4881c443effSChuck Lever 
4891c443effSChuck Lever 	TP_ARGS(r_xprt, count),
4901c443effSChuck Lever 
4911c443effSChuck Lever 	TP_STRUCT__entry(
4921c443effSChuck Lever 		__field(const void *, r_xprt)
4936dc6ec9eSChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
4946dc6ec9eSChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
4951c443effSChuck Lever 		__field(unsigned int, count)
4961c443effSChuck Lever 	),
4971c443effSChuck Lever 
4981c443effSChuck Lever 	TP_fast_assign(
4991c443effSChuck Lever 		__entry->r_xprt = r_xprt;
5001c443effSChuck Lever 		__entry->count = count;
5016dc6ec9eSChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
5026dc6ec9eSChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
5031c443effSChuck Lever 	),
5041c443effSChuck Lever 
5056dc6ec9eSChuck Lever 	TP_printk("peer=[%s]:%s r_xprt=%p: created %u MRs",
5066dc6ec9eSChuck Lever 		__get_str(addr), __get_str(port), __entry->r_xprt,
5076dc6ec9eSChuck Lever 		__entry->count
5086dc6ec9eSChuck Lever 	)
5096dc6ec9eSChuck Lever );
5106dc6ec9eSChuck Lever 
5116dc6ec9eSChuck Lever TRACE_EVENT(xprtrdma_mr_get,
5126dc6ec9eSChuck Lever 	TP_PROTO(
5136dc6ec9eSChuck Lever 		const struct rpcrdma_req *req
5146dc6ec9eSChuck Lever 	),
5156dc6ec9eSChuck Lever 
5166dc6ec9eSChuck Lever 	TP_ARGS(req),
5176dc6ec9eSChuck Lever 
5186dc6ec9eSChuck Lever 	TP_STRUCT__entry(
5196dc6ec9eSChuck Lever 		__field(const void *, req)
5206dc6ec9eSChuck Lever 		__field(unsigned int, task_id)
5216dc6ec9eSChuck Lever 		__field(unsigned int, client_id)
5226dc6ec9eSChuck Lever 		__field(u32, xid)
5236dc6ec9eSChuck Lever 	),
5246dc6ec9eSChuck Lever 
5256dc6ec9eSChuck Lever 	TP_fast_assign(
5266dc6ec9eSChuck Lever 		const struct rpc_rqst *rqst = &req->rl_slot;
5276dc6ec9eSChuck Lever 
5286dc6ec9eSChuck Lever 		__entry->req = req;
5296dc6ec9eSChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
5306dc6ec9eSChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
5316dc6ec9eSChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
5326dc6ec9eSChuck Lever 	),
5336dc6ec9eSChuck Lever 
5346dc6ec9eSChuck Lever 	TP_printk("task:%u@%u xid=0x%08x req=%p",
5356dc6ec9eSChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
5366dc6ec9eSChuck Lever 		__entry->req
5371c443effSChuck Lever 	)
5381c443effSChuck Lever );
5391c443effSChuck Lever 
5403b39f52aSChuck Lever TRACE_EVENT(xprtrdma_nomrs,
5413b39f52aSChuck Lever 	TP_PROTO(
5423b39f52aSChuck Lever 		const struct rpcrdma_req *req
5433b39f52aSChuck Lever 	),
5443b39f52aSChuck Lever 
5453b39f52aSChuck Lever 	TP_ARGS(req),
5463b39f52aSChuck Lever 
5473b39f52aSChuck Lever 	TP_STRUCT__entry(
5483b39f52aSChuck Lever 		__field(const void *, req)
5493b39f52aSChuck Lever 		__field(unsigned int, task_id)
5503b39f52aSChuck Lever 		__field(unsigned int, client_id)
5513b39f52aSChuck Lever 		__field(u32, xid)
5523b39f52aSChuck Lever 	),
5533b39f52aSChuck Lever 
5543b39f52aSChuck Lever 	TP_fast_assign(
5553b39f52aSChuck Lever 		const struct rpc_rqst *rqst = &req->rl_slot;
5563b39f52aSChuck Lever 
5573b39f52aSChuck Lever 		__entry->req = req;
5583b39f52aSChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
5593b39f52aSChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
5603b39f52aSChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
5613b39f52aSChuck Lever 	),
5623b39f52aSChuck Lever 
5633b39f52aSChuck Lever 	TP_printk("task:%u@%u xid=0x%08x req=%p",
5643b39f52aSChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
5653b39f52aSChuck Lever 		__entry->req
5663b39f52aSChuck Lever 	)
5673b39f52aSChuck Lever );
5681c443effSChuck Lever 
569aba11831SChuck Lever DEFINE_RDCH_EVENT(read);
570aba11831SChuck Lever DEFINE_WRCH_EVENT(write);
571aba11831SChuck Lever DEFINE_WRCH_EVENT(reply);
57258f10ad4SChuck Lever 
573ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch);
574614f3c96SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch_pullup);
575614f3c96SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch_mapped);
576ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_readch);
577ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_areadch);
578ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_writech);
579ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_replych);
580ab03eff5SChuck Lever 
581ab03eff5SChuck Lever #define xprtrdma_show_chunktype(x)					\
582ab03eff5SChuck Lever 		__print_symbolic(x,					\
583ab03eff5SChuck Lever 				{ rpcrdma_noch, "inline" },		\
584614f3c96SChuck Lever 				{ rpcrdma_noch_pullup, "pullup" },	\
585614f3c96SChuck Lever 				{ rpcrdma_noch_mapped, "mapped" },	\
586ab03eff5SChuck Lever 				{ rpcrdma_readch, "read list" },	\
587ab03eff5SChuck Lever 				{ rpcrdma_areadch, "*read list" },	\
588ab03eff5SChuck Lever 				{ rpcrdma_writech, "write list" },	\
589ab03eff5SChuck Lever 				{ rpcrdma_replych, "reply chunk" })
590ab03eff5SChuck Lever 
591ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_marshal,
592ab03eff5SChuck Lever 	TP_PROTO(
5931310051cSChuck Lever 		const struct rpcrdma_req *req,
594ab03eff5SChuck Lever 		unsigned int rtype,
595ab03eff5SChuck Lever 		unsigned int wtype
596ab03eff5SChuck Lever 	),
597ab03eff5SChuck Lever 
5981310051cSChuck Lever 	TP_ARGS(req, rtype, wtype),
599ab03eff5SChuck Lever 
600ab03eff5SChuck Lever 	TP_STRUCT__entry(
601ab03eff5SChuck Lever 		__field(unsigned int, task_id)
602ab03eff5SChuck Lever 		__field(unsigned int, client_id)
603ab03eff5SChuck Lever 		__field(u32, xid)
604ab03eff5SChuck Lever 		__field(unsigned int, hdrlen)
605ab03eff5SChuck Lever 		__field(unsigned int, headlen)
606ab03eff5SChuck Lever 		__field(unsigned int, pagelen)
607ab03eff5SChuck Lever 		__field(unsigned int, taillen)
608ab03eff5SChuck Lever 		__field(unsigned int, rtype)
609ab03eff5SChuck Lever 		__field(unsigned int, wtype)
610ab03eff5SChuck Lever 	),
611ab03eff5SChuck Lever 
612ab03eff5SChuck Lever 	TP_fast_assign(
6131310051cSChuck Lever 		const struct rpc_rqst *rqst = &req->rl_slot;
6141310051cSChuck Lever 
615ab03eff5SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
616ab03eff5SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
617ab03eff5SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
6181310051cSChuck Lever 		__entry->hdrlen = req->rl_hdrbuf.len;
619ab03eff5SChuck Lever 		__entry->headlen = rqst->rq_snd_buf.head[0].iov_len;
620ab03eff5SChuck Lever 		__entry->pagelen = rqst->rq_snd_buf.page_len;
621ab03eff5SChuck Lever 		__entry->taillen = rqst->rq_snd_buf.tail[0].iov_len;
622ab03eff5SChuck Lever 		__entry->rtype = rtype;
623ab03eff5SChuck Lever 		__entry->wtype = wtype;
624ab03eff5SChuck Lever 	),
625ab03eff5SChuck Lever 
626ab03eff5SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x: hdr=%u xdr=%u/%u/%u %s/%s",
627ab03eff5SChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
628ab03eff5SChuck Lever 		__entry->hdrlen,
629ab03eff5SChuck Lever 		__entry->headlen, __entry->pagelen, __entry->taillen,
630ab03eff5SChuck Lever 		xprtrdma_show_chunktype(__entry->rtype),
631ab03eff5SChuck Lever 		xprtrdma_show_chunktype(__entry->wtype)
632ab03eff5SChuck Lever 	)
633ab03eff5SChuck Lever );
634ab03eff5SChuck Lever 
63517e4c443SChuck Lever TRACE_EVENT(xprtrdma_marshal_failed,
63617e4c443SChuck Lever 	TP_PROTO(const struct rpc_rqst *rqst,
63717e4c443SChuck Lever 		 int ret
63817e4c443SChuck Lever 	),
63917e4c443SChuck Lever 
64017e4c443SChuck Lever 	TP_ARGS(rqst, ret),
64117e4c443SChuck Lever 
64217e4c443SChuck Lever 	TP_STRUCT__entry(
64317e4c443SChuck Lever 		__field(unsigned int, task_id)
64417e4c443SChuck Lever 		__field(unsigned int, client_id)
64517e4c443SChuck Lever 		__field(u32, xid)
64617e4c443SChuck Lever 		__field(int, ret)
64717e4c443SChuck Lever 	),
64817e4c443SChuck Lever 
64917e4c443SChuck Lever 	TP_fast_assign(
65017e4c443SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
65117e4c443SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
65217e4c443SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
65317e4c443SChuck Lever 		__entry->ret = ret;
65417e4c443SChuck Lever 	),
65517e4c443SChuck Lever 
65617e4c443SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x: ret=%d",
65717e4c443SChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
65817e4c443SChuck Lever 		__entry->ret
65917e4c443SChuck Lever 	)
66017e4c443SChuck Lever );
66117e4c443SChuck Lever 
66205eb06d8SChuck Lever TRACE_EVENT(xprtrdma_prepsend_failed,
66305eb06d8SChuck Lever 	TP_PROTO(const struct rpc_rqst *rqst,
66405eb06d8SChuck Lever 		 int ret
66505eb06d8SChuck Lever 	),
66605eb06d8SChuck Lever 
66705eb06d8SChuck Lever 	TP_ARGS(rqst, ret),
66805eb06d8SChuck Lever 
66905eb06d8SChuck Lever 	TP_STRUCT__entry(
67005eb06d8SChuck Lever 		__field(unsigned int, task_id)
67105eb06d8SChuck Lever 		__field(unsigned int, client_id)
67205eb06d8SChuck Lever 		__field(u32, xid)
67305eb06d8SChuck Lever 		__field(int, ret)
67405eb06d8SChuck Lever 	),
67505eb06d8SChuck Lever 
67605eb06d8SChuck Lever 	TP_fast_assign(
67705eb06d8SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
67805eb06d8SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
67905eb06d8SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
68005eb06d8SChuck Lever 		__entry->ret = ret;
68105eb06d8SChuck Lever 	),
68205eb06d8SChuck Lever 
68305eb06d8SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x: ret=%d",
68405eb06d8SChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
68505eb06d8SChuck Lever 		__entry->ret
68605eb06d8SChuck Lever 	)
68705eb06d8SChuck Lever );
68805eb06d8SChuck Lever 
689ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_post_send,
690ab03eff5SChuck Lever 	TP_PROTO(
691bdb2ce82SChuck Lever 		const struct rpcrdma_req *req
692ab03eff5SChuck Lever 	),
693ab03eff5SChuck Lever 
694bdb2ce82SChuck Lever 	TP_ARGS(req),
695ab03eff5SChuck Lever 
696ab03eff5SChuck Lever 	TP_STRUCT__entry(
697ab03eff5SChuck Lever 		__field(const void *, req)
698cb586decSChuck Lever 		__field(const void *, sc)
6990c77668dSChuck Lever 		__field(unsigned int, task_id)
7000c77668dSChuck Lever 		__field(unsigned int, client_id)
701ab03eff5SChuck Lever 		__field(int, num_sge)
702470443e0SChuck Lever 		__field(int, signaled)
703ab03eff5SChuck Lever 	),
704ab03eff5SChuck Lever 
705ab03eff5SChuck Lever 	TP_fast_assign(
7060c77668dSChuck Lever 		const struct rpc_rqst *rqst = &req->rl_slot;
7070c77668dSChuck Lever 
7080c77668dSChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
70910694ac9SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client ?
71010694ac9SChuck Lever 				     rqst->rq_task->tk_client->cl_clid : -1;
711ab03eff5SChuck Lever 		__entry->req = req;
712cb586decSChuck Lever 		__entry->sc = req->rl_sendctx;
713dc15c3d5SChuck Lever 		__entry->num_sge = req->rl_wr.num_sge;
714dc15c3d5SChuck Lever 		__entry->signaled = req->rl_wr.send_flags & IB_SEND_SIGNALED;
715ab03eff5SChuck Lever 	),
716ab03eff5SChuck Lever 
717bdb2ce82SChuck Lever 	TP_printk("task:%u@%u req=%p sc=%p (%d SGE%s) %s",
7180c77668dSChuck Lever 		__entry->task_id, __entry->client_id,
719cb586decSChuck Lever 		__entry->req, __entry->sc, __entry->num_sge,
7200c77668dSChuck Lever 		(__entry->num_sge == 1 ? "" : "s"),
721bdb2ce82SChuck Lever 		(__entry->signaled ? "signaled" : "")
722ab03eff5SChuck Lever 	)
723ab03eff5SChuck Lever );
724ab03eff5SChuck Lever 
725b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_post_recv,
726b4a7f91cSChuck Lever 	TP_PROTO(
7272dfdcd88SChuck Lever 		const struct rpcrdma_rep *rep
728b4a7f91cSChuck Lever 	),
729b4a7f91cSChuck Lever 
7302dfdcd88SChuck Lever 	TP_ARGS(rep),
731b4a7f91cSChuck Lever 
732b4a7f91cSChuck Lever 	TP_STRUCT__entry(
7332dfdcd88SChuck Lever 		__field(const void *, rep)
734b4a7f91cSChuck Lever 	),
735b4a7f91cSChuck Lever 
736b4a7f91cSChuck Lever 	TP_fast_assign(
7372dfdcd88SChuck Lever 		__entry->rep = rep;
738b4a7f91cSChuck Lever 	),
739b4a7f91cSChuck Lever 
7402dfdcd88SChuck Lever 	TP_printk("rep=%p",
7412dfdcd88SChuck Lever 		__entry->rep
742b4a7f91cSChuck Lever 	)
743b4a7f91cSChuck Lever );
744b4a7f91cSChuck Lever 
7457c8d9e7cSChuck Lever TRACE_EVENT(xprtrdma_post_recvs,
7467c8d9e7cSChuck Lever 	TP_PROTO(
7477c8d9e7cSChuck Lever 		const struct rpcrdma_xprt *r_xprt,
7487c8d9e7cSChuck Lever 		unsigned int count,
7497c8d9e7cSChuck Lever 		int status
7507c8d9e7cSChuck Lever 	),
7517c8d9e7cSChuck Lever 
7527c8d9e7cSChuck Lever 	TP_ARGS(r_xprt, count, status),
7537c8d9e7cSChuck Lever 
7547c8d9e7cSChuck Lever 	TP_STRUCT__entry(
7557c8d9e7cSChuck Lever 		__field(const void *, r_xprt)
7567c8d9e7cSChuck Lever 		__field(unsigned int, count)
7577c8d9e7cSChuck Lever 		__field(int, status)
7587c8d9e7cSChuck Lever 		__field(int, posted)
7597c8d9e7cSChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
7607c8d9e7cSChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
7617c8d9e7cSChuck Lever 	),
7627c8d9e7cSChuck Lever 
7637c8d9e7cSChuck Lever 	TP_fast_assign(
7647c8d9e7cSChuck Lever 		__entry->r_xprt = r_xprt;
7657c8d9e7cSChuck Lever 		__entry->count = count;
7667c8d9e7cSChuck Lever 		__entry->status = status;
767e28ce900SChuck Lever 		__entry->posted = r_xprt->rx_ep->re_receive_count;
7687c8d9e7cSChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
7697c8d9e7cSChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
7707c8d9e7cSChuck Lever 	),
7717c8d9e7cSChuck Lever 
7727c8d9e7cSChuck Lever 	TP_printk("peer=[%s]:%s r_xprt=%p: %u new recvs, %d active (rc %d)",
7737c8d9e7cSChuck Lever 		__get_str(addr), __get_str(port), __entry->r_xprt,
7747c8d9e7cSChuck Lever 		__entry->count, __entry->posted, __entry->status
775ab03eff5SChuck Lever 	)
776ab03eff5SChuck Lever );
777ab03eff5SChuck Lever 
7784b93dab3SChuck Lever TRACE_EVENT(xprtrdma_post_linv,
7794b93dab3SChuck Lever 	TP_PROTO(
7804b93dab3SChuck Lever 		const struct rpcrdma_req *req,
7814b93dab3SChuck Lever 		int status
7824b93dab3SChuck Lever 	),
7834b93dab3SChuck Lever 
7844b93dab3SChuck Lever 	TP_ARGS(req, status),
7854b93dab3SChuck Lever 
7864b93dab3SChuck Lever 	TP_STRUCT__entry(
7874b93dab3SChuck Lever 		__field(const void *, req)
7884b93dab3SChuck Lever 		__field(int, status)
7894b93dab3SChuck Lever 		__field(u32, xid)
7904b93dab3SChuck Lever 	),
7914b93dab3SChuck Lever 
7924b93dab3SChuck Lever 	TP_fast_assign(
7934b93dab3SChuck Lever 		__entry->req = req;
7944b93dab3SChuck Lever 		__entry->status = status;
7954b93dab3SChuck Lever 		__entry->xid = be32_to_cpu(req->rl_slot.rq_xid);
7964b93dab3SChuck Lever 	),
7974b93dab3SChuck Lever 
7984b93dab3SChuck Lever 	TP_printk("req=%p xid=0x%08x status=%d",
7994b93dab3SChuck Lever 		__entry->req, __entry->xid, __entry->status
8004b93dab3SChuck Lever 	)
8014b93dab3SChuck Lever );
8024b93dab3SChuck Lever 
803ab03eff5SChuck Lever /**
804ab03eff5SChuck Lever  ** Completion events
805ab03eff5SChuck Lever  **/
806ab03eff5SChuck Lever 
807ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_wc_send,
808ab03eff5SChuck Lever 	TP_PROTO(
809ab03eff5SChuck Lever 		const struct rpcrdma_sendctx *sc,
810ab03eff5SChuck Lever 		const struct ib_wc *wc
811ab03eff5SChuck Lever 	),
812ab03eff5SChuck Lever 
813ab03eff5SChuck Lever 	TP_ARGS(sc, wc),
814ab03eff5SChuck Lever 
815ab03eff5SChuck Lever 	TP_STRUCT__entry(
816ab03eff5SChuck Lever 		__field(const void *, req)
817cb586decSChuck Lever 		__field(const void *, sc)
818ab03eff5SChuck Lever 		__field(unsigned int, unmap_count)
819ab03eff5SChuck Lever 		__field(unsigned int, status)
820ab03eff5SChuck Lever 		__field(unsigned int, vendor_err)
821ab03eff5SChuck Lever 	),
822ab03eff5SChuck Lever 
823ab03eff5SChuck Lever 	TP_fast_assign(
824ab03eff5SChuck Lever 		__entry->req = sc->sc_req;
825cb586decSChuck Lever 		__entry->sc = sc;
826ab03eff5SChuck Lever 		__entry->unmap_count = sc->sc_unmap_count;
827ab03eff5SChuck Lever 		__entry->status = wc->status;
828ab03eff5SChuck Lever 		__entry->vendor_err = __entry->status ? wc->vendor_err : 0;
829ab03eff5SChuck Lever 	),
830ab03eff5SChuck Lever 
831cb586decSChuck Lever 	TP_printk("req=%p sc=%p unmapped=%u: %s (%u/0x%x)",
832cb586decSChuck Lever 		__entry->req, __entry->sc, __entry->unmap_count,
833ab03eff5SChuck Lever 		rdma_show_wc_status(__entry->status),
834ab03eff5SChuck Lever 		__entry->status, __entry->vendor_err
835ab03eff5SChuck Lever 	)
836ab03eff5SChuck Lever );
837ab03eff5SChuck Lever 
838b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_wc_receive,
839b4a7f91cSChuck Lever 	TP_PROTO(
840b4a7f91cSChuck Lever 		const struct ib_wc *wc
841b4a7f91cSChuck Lever 	),
842b4a7f91cSChuck Lever 
8430e0b854cSChuck Lever 	TP_ARGS(wc),
844b4a7f91cSChuck Lever 
845b4a7f91cSChuck Lever 	TP_STRUCT__entry(
8462dfdcd88SChuck Lever 		__field(const void *, rep)
8470e0b854cSChuck Lever 		__field(u32, byte_len)
848b4a7f91cSChuck Lever 		__field(unsigned int, status)
8490e0b854cSChuck Lever 		__field(u32, vendor_err)
850b4a7f91cSChuck Lever 	),
851b4a7f91cSChuck Lever 
852b4a7f91cSChuck Lever 	TP_fast_assign(
8532dfdcd88SChuck Lever 		__entry->rep = container_of(wc->wr_cqe, struct rpcrdma_rep,
8542dfdcd88SChuck Lever 					    rr_cqe);
855b4a7f91cSChuck Lever 		__entry->status = wc->status;
8560e0b854cSChuck Lever 		if (wc->status) {
8570e0b854cSChuck Lever 			__entry->byte_len = 0;
8580e0b854cSChuck Lever 			__entry->vendor_err = wc->vendor_err;
8590e0b854cSChuck Lever 		} else {
8600e0b854cSChuck Lever 			__entry->byte_len = wc->byte_len;
8610e0b854cSChuck Lever 			__entry->vendor_err = 0;
8620e0b854cSChuck Lever 		}
863b4a7f91cSChuck Lever 	),
864b4a7f91cSChuck Lever 
8652dfdcd88SChuck Lever 	TP_printk("rep=%p %u bytes: %s (%u/0x%x)",
8662dfdcd88SChuck Lever 		__entry->rep, __entry->byte_len,
867b4a7f91cSChuck Lever 		rdma_show_wc_status(__entry->status),
868b4a7f91cSChuck Lever 		__entry->status, __entry->vendor_err
869b4a7f91cSChuck Lever 	)
870b4a7f91cSChuck Lever );
871b4a7f91cSChuck Lever 
87258f10ad4SChuck Lever DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_fastreg);
8732937fedeSChuck Lever DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_li);
8742937fedeSChuck Lever DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_li_wake);
875d8099fedSChuck Lever DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_li_done);
8762937fedeSChuck Lever 
87753b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_alloc,
87853b2c1cbSChuck Lever 	TP_PROTO(
87953b2c1cbSChuck Lever 		const struct rpcrdma_mr *mr,
88053b2c1cbSChuck Lever 		int rc
88153b2c1cbSChuck Lever 	),
88253b2c1cbSChuck Lever 
88353b2c1cbSChuck Lever 	TP_ARGS(mr, rc),
88453b2c1cbSChuck Lever 
88553b2c1cbSChuck Lever 	TP_STRUCT__entry(
88662a89501SChuck Lever 		__field(u32, mr_id)
88753b2c1cbSChuck Lever 		__field(int, rc)
88853b2c1cbSChuck Lever 	),
88953b2c1cbSChuck Lever 
89053b2c1cbSChuck Lever 	TP_fast_assign(
89162a89501SChuck Lever 		__entry->mr_id = mr->frwr.fr_mr->res.id;
89253b2c1cbSChuck Lever 		__entry->rc = rc;
89353b2c1cbSChuck Lever 	),
89453b2c1cbSChuck Lever 
89562a89501SChuck Lever 	TP_printk("mr.id=%u: rc=%d",
89662a89501SChuck Lever 		__entry->mr_id, __entry->rc
89753b2c1cbSChuck Lever 	)
89853b2c1cbSChuck Lever );
89953b2c1cbSChuck Lever 
90053b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_dereg,
90153b2c1cbSChuck Lever 	TP_PROTO(
90253b2c1cbSChuck Lever 		const struct rpcrdma_mr *mr,
90353b2c1cbSChuck Lever 		int rc
90453b2c1cbSChuck Lever 	),
90553b2c1cbSChuck Lever 
90653b2c1cbSChuck Lever 	TP_ARGS(mr, rc),
90753b2c1cbSChuck Lever 
90853b2c1cbSChuck Lever 	TP_STRUCT__entry(
90962a89501SChuck Lever 		__field(u32, mr_id)
91062a89501SChuck Lever 		__field(int, nents)
91153b2c1cbSChuck Lever 		__field(u32, handle)
91253b2c1cbSChuck Lever 		__field(u32, length)
91353b2c1cbSChuck Lever 		__field(u64, offset)
91453b2c1cbSChuck Lever 		__field(u32, dir)
91553b2c1cbSChuck Lever 		__field(int, rc)
91653b2c1cbSChuck Lever 	),
91753b2c1cbSChuck Lever 
91853b2c1cbSChuck Lever 	TP_fast_assign(
91962a89501SChuck Lever 		__entry->mr_id  = mr->frwr.fr_mr->res.id;
92062a89501SChuck Lever 		__entry->nents  = mr->mr_nents;
92153b2c1cbSChuck Lever 		__entry->handle = mr->mr_handle;
92253b2c1cbSChuck Lever 		__entry->length = mr->mr_length;
92353b2c1cbSChuck Lever 		__entry->offset = mr->mr_offset;
92453b2c1cbSChuck Lever 		__entry->dir    = mr->mr_dir;
92553b2c1cbSChuck Lever 		__entry->rc	= rc;
92653b2c1cbSChuck Lever 	),
92753b2c1cbSChuck Lever 
92862a89501SChuck Lever 	TP_printk("mr.id=%u nents=%d %u@0x%016llx:0x%08x (%s): rc=%d",
92962a89501SChuck Lever 		__entry->mr_id, __entry->nents, __entry->length,
93053b2c1cbSChuck Lever 		(unsigned long long)__entry->offset, __entry->handle,
93153b2c1cbSChuck Lever 		xprtrdma_show_direction(__entry->dir),
93253b2c1cbSChuck Lever 		__entry->rc
93353b2c1cbSChuck Lever 	)
93453b2c1cbSChuck Lever );
93553b2c1cbSChuck Lever 
93653b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_sgerr,
93753b2c1cbSChuck Lever 	TP_PROTO(
93853b2c1cbSChuck Lever 		const struct rpcrdma_mr *mr,
93953b2c1cbSChuck Lever 		int sg_nents
94053b2c1cbSChuck Lever 	),
94153b2c1cbSChuck Lever 
94253b2c1cbSChuck Lever 	TP_ARGS(mr, sg_nents),
94353b2c1cbSChuck Lever 
94453b2c1cbSChuck Lever 	TP_STRUCT__entry(
94562a89501SChuck Lever 		__field(u32, mr_id)
94653b2c1cbSChuck Lever 		__field(u64, addr)
94753b2c1cbSChuck Lever 		__field(u32, dir)
94853b2c1cbSChuck Lever 		__field(int, nents)
94953b2c1cbSChuck Lever 	),
95053b2c1cbSChuck Lever 
95153b2c1cbSChuck Lever 	TP_fast_assign(
95262a89501SChuck Lever 		__entry->mr_id = mr->frwr.fr_mr->res.id;
95353b2c1cbSChuck Lever 		__entry->addr = mr->mr_sg->dma_address;
95453b2c1cbSChuck Lever 		__entry->dir = mr->mr_dir;
95553b2c1cbSChuck Lever 		__entry->nents = sg_nents;
95653b2c1cbSChuck Lever 	),
95753b2c1cbSChuck Lever 
95862a89501SChuck Lever 	TP_printk("mr.id=%u DMA addr=0x%llx (%s) sg_nents=%d",
95962a89501SChuck Lever 		__entry->mr_id, __entry->addr,
96053b2c1cbSChuck Lever 		xprtrdma_show_direction(__entry->dir),
96153b2c1cbSChuck Lever 		__entry->nents
96253b2c1cbSChuck Lever 	)
96353b2c1cbSChuck Lever );
96453b2c1cbSChuck Lever 
96553b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_maperr,
96653b2c1cbSChuck Lever 	TP_PROTO(
96753b2c1cbSChuck Lever 		const struct rpcrdma_mr *mr,
96853b2c1cbSChuck Lever 		int num_mapped
96953b2c1cbSChuck Lever 	),
97053b2c1cbSChuck Lever 
97153b2c1cbSChuck Lever 	TP_ARGS(mr, num_mapped),
97253b2c1cbSChuck Lever 
97353b2c1cbSChuck Lever 	TP_STRUCT__entry(
97462a89501SChuck Lever 		__field(u32, mr_id)
97553b2c1cbSChuck Lever 		__field(u64, addr)
97653b2c1cbSChuck Lever 		__field(u32, dir)
97753b2c1cbSChuck Lever 		__field(int, num_mapped)
97853b2c1cbSChuck Lever 		__field(int, nents)
97953b2c1cbSChuck Lever 	),
98053b2c1cbSChuck Lever 
98153b2c1cbSChuck Lever 	TP_fast_assign(
98262a89501SChuck Lever 		__entry->mr_id = mr->frwr.fr_mr->res.id;
98353b2c1cbSChuck Lever 		__entry->addr = mr->mr_sg->dma_address;
98453b2c1cbSChuck Lever 		__entry->dir = mr->mr_dir;
98553b2c1cbSChuck Lever 		__entry->num_mapped = num_mapped;
98653b2c1cbSChuck Lever 		__entry->nents = mr->mr_nents;
98753b2c1cbSChuck Lever 	),
98853b2c1cbSChuck Lever 
98962a89501SChuck Lever 	TP_printk("mr.id=%u DMA addr=0x%llx (%s) nents=%d of %d",
99062a89501SChuck Lever 		__entry->mr_id, __entry->addr,
99153b2c1cbSChuck Lever 		xprtrdma_show_direction(__entry->dir),
99253b2c1cbSChuck Lever 		__entry->num_mapped, __entry->nents
99353b2c1cbSChuck Lever 	)
99453b2c1cbSChuck Lever );
99553b2c1cbSChuck Lever 
996d379eaa8SChuck Lever DEFINE_MR_EVENT(localinv);
997d379eaa8SChuck Lever DEFINE_MR_EVENT(map);
998d379eaa8SChuck Lever DEFINE_MR_EVENT(unmap);
99962a89501SChuck Lever DEFINE_MR_EVENT(reminv);
1000d379eaa8SChuck Lever DEFINE_MR_EVENT(recycle);
100158f10ad4SChuck Lever 
100253b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_dma_maperr,
100353b2c1cbSChuck Lever 	TP_PROTO(
100453b2c1cbSChuck Lever 		u64 addr
100553b2c1cbSChuck Lever 	),
100653b2c1cbSChuck Lever 
100753b2c1cbSChuck Lever 	TP_ARGS(addr),
100853b2c1cbSChuck Lever 
100953b2c1cbSChuck Lever 	TP_STRUCT__entry(
101053b2c1cbSChuck Lever 		__field(u64, addr)
101153b2c1cbSChuck Lever 	),
101253b2c1cbSChuck Lever 
101353b2c1cbSChuck Lever 	TP_fast_assign(
101453b2c1cbSChuck Lever 		__entry->addr = addr;
101553b2c1cbSChuck Lever 	),
101653b2c1cbSChuck Lever 
101753b2c1cbSChuck Lever 	TP_printk("dma addr=0x%llx\n", __entry->addr)
101853b2c1cbSChuck Lever );
101953b2c1cbSChuck Lever 
1020b4a7f91cSChuck Lever /**
1021b4a7f91cSChuck Lever  ** Reply events
1022b4a7f91cSChuck Lever  **/
1023b4a7f91cSChuck Lever 
1024b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_reply,
1025b4a7f91cSChuck Lever 	TP_PROTO(
1026b4a7f91cSChuck Lever 		const struct rpc_task *task,
1027b4a7f91cSChuck Lever 		const struct rpcrdma_rep *rep,
1028b4a7f91cSChuck Lever 		const struct rpcrdma_req *req,
1029b4a7f91cSChuck Lever 		unsigned int credits
1030b4a7f91cSChuck Lever 	),
1031b4a7f91cSChuck Lever 
1032b4a7f91cSChuck Lever 	TP_ARGS(task, rep, req, credits),
1033b4a7f91cSChuck Lever 
1034b4a7f91cSChuck Lever 	TP_STRUCT__entry(
1035b4a7f91cSChuck Lever 		__field(unsigned int, task_id)
1036b4a7f91cSChuck Lever 		__field(unsigned int, client_id)
1037b4a7f91cSChuck Lever 		__field(const void *, rep)
1038b4a7f91cSChuck Lever 		__field(const void *, req)
1039b4a7f91cSChuck Lever 		__field(u32, xid)
1040b4a7f91cSChuck Lever 		__field(unsigned int, credits)
1041b4a7f91cSChuck Lever 	),
1042b4a7f91cSChuck Lever 
1043b4a7f91cSChuck Lever 	TP_fast_assign(
1044b4a7f91cSChuck Lever 		__entry->task_id = task->tk_pid;
1045b4a7f91cSChuck Lever 		__entry->client_id = task->tk_client->cl_clid;
1046b4a7f91cSChuck Lever 		__entry->rep = rep;
1047b4a7f91cSChuck Lever 		__entry->req = req;
1048b4a7f91cSChuck Lever 		__entry->xid = be32_to_cpu(rep->rr_xid);
1049b4a7f91cSChuck Lever 		__entry->credits = credits;
1050b4a7f91cSChuck Lever 	),
1051b4a7f91cSChuck Lever 
1052b4a7f91cSChuck Lever 	TP_printk("task:%u@%u xid=0x%08x, %u credits, rep=%p -> req=%p",
1053b4a7f91cSChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
1054b4a7f91cSChuck Lever 		__entry->credits, __entry->rep, __entry->req
1055b4a7f91cSChuck Lever 	)
1056b4a7f91cSChuck Lever );
1057b4a7f91cSChuck Lever 
1058b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_defer_cmp,
1059b4a7f91cSChuck Lever 	TP_PROTO(
1060b4a7f91cSChuck Lever 		const struct rpcrdma_rep *rep
1061b4a7f91cSChuck Lever 	),
1062b4a7f91cSChuck Lever 
1063b4a7f91cSChuck Lever 	TP_ARGS(rep),
1064b4a7f91cSChuck Lever 
1065b4a7f91cSChuck Lever 	TP_STRUCT__entry(
1066b4a7f91cSChuck Lever 		__field(unsigned int, task_id)
1067b4a7f91cSChuck Lever 		__field(unsigned int, client_id)
1068b4a7f91cSChuck Lever 		__field(const void *, rep)
1069b4a7f91cSChuck Lever 		__field(u32, xid)
1070b4a7f91cSChuck Lever 	),
1071b4a7f91cSChuck Lever 
1072b4a7f91cSChuck Lever 	TP_fast_assign(
1073b4a7f91cSChuck Lever 		__entry->task_id = rep->rr_rqst->rq_task->tk_pid;
1074b4a7f91cSChuck Lever 		__entry->client_id = rep->rr_rqst->rq_task->tk_client->cl_clid;
1075b4a7f91cSChuck Lever 		__entry->rep = rep;
1076b4a7f91cSChuck Lever 		__entry->xid = be32_to_cpu(rep->rr_xid);
1077b4a7f91cSChuck Lever 	),
1078b4a7f91cSChuck Lever 
1079b4a7f91cSChuck Lever 	TP_printk("task:%u@%u xid=0x%08x rep=%p",
1080b4a7f91cSChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
1081b4a7f91cSChuck Lever 		__entry->rep
1082b4a7f91cSChuck Lever 	)
1083b4a7f91cSChuck Lever );
1084b4a7f91cSChuck Lever 
1085b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_vers);
1086b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_rqst);
1087b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_short);
1088b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_hdr);
1089b4a7f91cSChuck Lever 
1090e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_fixup,
1091e11b7c96SChuck Lever 	TP_PROTO(
1092e11b7c96SChuck Lever 		const struct rpc_rqst *rqst,
1093d4957f01SChuck Lever 		unsigned long fixup
1094e11b7c96SChuck Lever 	),
1095e11b7c96SChuck Lever 
1096d4957f01SChuck Lever 	TP_ARGS(rqst, fixup),
1097e11b7c96SChuck Lever 
1098e11b7c96SChuck Lever 	TP_STRUCT__entry(
1099e11b7c96SChuck Lever 		__field(unsigned int, task_id)
1100e11b7c96SChuck Lever 		__field(unsigned int, client_id)
1101d4957f01SChuck Lever 		__field(unsigned long, fixup)
1102d4957f01SChuck Lever 		__field(size_t, headlen)
1103d4957f01SChuck Lever 		__field(unsigned int, pagelen)
1104d4957f01SChuck Lever 		__field(size_t, taillen)
1105e11b7c96SChuck Lever 	),
1106e11b7c96SChuck Lever 
1107e11b7c96SChuck Lever 	TP_fast_assign(
1108e11b7c96SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
1109e11b7c96SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
1110d4957f01SChuck Lever 		__entry->fixup = fixup;
1111d4957f01SChuck Lever 		__entry->headlen = rqst->rq_rcv_buf.head[0].iov_len;
1112d4957f01SChuck Lever 		__entry->pagelen = rqst->rq_rcv_buf.page_len;
1113d4957f01SChuck Lever 		__entry->taillen = rqst->rq_rcv_buf.tail[0].iov_len;
1114e11b7c96SChuck Lever 	),
1115e11b7c96SChuck Lever 
1116d4957f01SChuck Lever 	TP_printk("task:%u@%u fixup=%lu xdr=%zu/%u/%zu",
1117d4957f01SChuck Lever 		__entry->task_id, __entry->client_id, __entry->fixup,
1118d4957f01SChuck Lever 		__entry->headlen, __entry->pagelen, __entry->taillen
1119e11b7c96SChuck Lever 	)
1120e11b7c96SChuck Lever );
1121e11b7c96SChuck Lever 
1122e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_decode_seg,
1123e11b7c96SChuck Lever 	TP_PROTO(
1124e11b7c96SChuck Lever 		u32 handle,
1125e11b7c96SChuck Lever 		u32 length,
1126e11b7c96SChuck Lever 		u64 offset
1127e11b7c96SChuck Lever 	),
1128e11b7c96SChuck Lever 
1129e11b7c96SChuck Lever 	TP_ARGS(handle, length, offset),
1130e11b7c96SChuck Lever 
1131e11b7c96SChuck Lever 	TP_STRUCT__entry(
1132e11b7c96SChuck Lever 		__field(u32, handle)
1133e11b7c96SChuck Lever 		__field(u32, length)
1134e11b7c96SChuck Lever 		__field(u64, offset)
1135e11b7c96SChuck Lever 	),
1136e11b7c96SChuck Lever 
1137e11b7c96SChuck Lever 	TP_fast_assign(
1138e11b7c96SChuck Lever 		__entry->handle = handle;
1139e11b7c96SChuck Lever 		__entry->length = length;
1140e11b7c96SChuck Lever 		__entry->offset = offset;
1141e11b7c96SChuck Lever 	),
1142e11b7c96SChuck Lever 
1143e11b7c96SChuck Lever 	TP_printk("%u@0x%016llx:0x%08x",
1144e11b7c96SChuck Lever 		__entry->length, (unsigned long long)__entry->offset,
1145e11b7c96SChuck Lever 		__entry->handle
1146e11b7c96SChuck Lever 	)
1147e11b7c96SChuck Lever );
1148e11b7c96SChuck Lever 
1149fc1eb807SChuck Lever /**
1150ae724676SChuck Lever  ** Allocation/release of rpcrdma_reqs and rpcrdma_reps
1151ae724676SChuck Lever  **/
1152ae724676SChuck Lever 
1153395069fcSChuck Lever TRACE_EVENT(xprtrdma_op_allocate,
1154ae724676SChuck Lever 	TP_PROTO(
1155ae724676SChuck Lever 		const struct rpc_task *task,
1156ae724676SChuck Lever 		const struct rpcrdma_req *req
1157ae724676SChuck Lever 	),
1158ae724676SChuck Lever 
1159ae724676SChuck Lever 	TP_ARGS(task, req),
1160ae724676SChuck Lever 
1161ae724676SChuck Lever 	TP_STRUCT__entry(
1162ae724676SChuck Lever 		__field(unsigned int, task_id)
1163ae724676SChuck Lever 		__field(unsigned int, client_id)
1164ae724676SChuck Lever 		__field(const void *, req)
1165ae724676SChuck Lever 		__field(size_t, callsize)
1166ae724676SChuck Lever 		__field(size_t, rcvsize)
1167ae724676SChuck Lever 	),
1168ae724676SChuck Lever 
1169ae724676SChuck Lever 	TP_fast_assign(
1170ae724676SChuck Lever 		__entry->task_id = task->tk_pid;
1171ae724676SChuck Lever 		__entry->client_id = task->tk_client->cl_clid;
1172ae724676SChuck Lever 		__entry->req = req;
1173ae724676SChuck Lever 		__entry->callsize = task->tk_rqstp->rq_callsize;
1174ae724676SChuck Lever 		__entry->rcvsize = task->tk_rqstp->rq_rcvsize;
1175ae724676SChuck Lever 	),
1176ae724676SChuck Lever 
11777c8d9e7cSChuck Lever 	TP_printk("task:%u@%u req=%p (%zu, %zu)",
1178ae724676SChuck Lever 		__entry->task_id, __entry->client_id,
11797c8d9e7cSChuck Lever 		__entry->req, __entry->callsize, __entry->rcvsize
1180ae724676SChuck Lever 	)
1181ae724676SChuck Lever );
1182ae724676SChuck Lever 
1183395069fcSChuck Lever TRACE_EVENT(xprtrdma_op_free,
1184ae724676SChuck Lever 	TP_PROTO(
1185ae724676SChuck Lever 		const struct rpc_task *task,
1186ae724676SChuck Lever 		const struct rpcrdma_req *req
1187ae724676SChuck Lever 	),
1188ae724676SChuck Lever 
1189ae724676SChuck Lever 	TP_ARGS(task, req),
1190ae724676SChuck Lever 
1191ae724676SChuck Lever 	TP_STRUCT__entry(
1192ae724676SChuck Lever 		__field(unsigned int, task_id)
1193ae724676SChuck Lever 		__field(unsigned int, client_id)
1194ae724676SChuck Lever 		__field(const void *, req)
1195ae724676SChuck Lever 		__field(const void *, rep)
1196ae724676SChuck Lever 	),
1197ae724676SChuck Lever 
1198ae724676SChuck Lever 	TP_fast_assign(
1199ae724676SChuck Lever 		__entry->task_id = task->tk_pid;
1200ae724676SChuck Lever 		__entry->client_id = task->tk_client->cl_clid;
1201ae724676SChuck Lever 		__entry->req = req;
1202ae724676SChuck Lever 		__entry->rep = req->rl_reply;
1203ae724676SChuck Lever 	),
1204ae724676SChuck Lever 
1205ae724676SChuck Lever 	TP_printk("task:%u@%u req=%p rep=%p",
1206ae724676SChuck Lever 		__entry->task_id, __entry->client_id,
1207ae724676SChuck Lever 		__entry->req, __entry->rep
1208ae724676SChuck Lever 	)
1209ae724676SChuck Lever );
1210ae724676SChuck Lever 
1211ae724676SChuck Lever /**
1212fc1eb807SChuck Lever  ** Callback events
1213fc1eb807SChuck Lever  **/
1214fc1eb807SChuck Lever 
1215fc1eb807SChuck Lever TRACE_EVENT(xprtrdma_cb_setup,
1216fc1eb807SChuck Lever 	TP_PROTO(
1217fc1eb807SChuck Lever 		const struct rpcrdma_xprt *r_xprt,
1218fc1eb807SChuck Lever 		unsigned int reqs
1219fc1eb807SChuck Lever 	),
1220fc1eb807SChuck Lever 
1221fc1eb807SChuck Lever 	TP_ARGS(r_xprt, reqs),
1222fc1eb807SChuck Lever 
1223fc1eb807SChuck Lever 	TP_STRUCT__entry(
1224fc1eb807SChuck Lever 		__field(const void *, r_xprt)
1225fc1eb807SChuck Lever 		__field(unsigned int, reqs)
1226fc1eb807SChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
1227fc1eb807SChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
1228fc1eb807SChuck Lever 	),
1229fc1eb807SChuck Lever 
1230fc1eb807SChuck Lever 	TP_fast_assign(
1231fc1eb807SChuck Lever 		__entry->r_xprt = r_xprt;
1232fc1eb807SChuck Lever 		__entry->reqs = reqs;
1233fc1eb807SChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
1234fc1eb807SChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
1235fc1eb807SChuck Lever 	),
1236fc1eb807SChuck Lever 
1237fc1eb807SChuck Lever 	TP_printk("peer=[%s]:%s r_xprt=%p: %u reqs",
1238fc1eb807SChuck Lever 		__get_str(addr), __get_str(port),
1239fc1eb807SChuck Lever 		__entry->r_xprt, __entry->reqs
1240fc1eb807SChuck Lever 	)
1241fc1eb807SChuck Lever );
1242fc1eb807SChuck Lever 
1243fc1eb807SChuck Lever DEFINE_CB_EVENT(xprtrdma_cb_call);
1244fc1eb807SChuck Lever DEFINE_CB_EVENT(xprtrdma_cb_reply);
1245fc1eb807SChuck Lever 
124607e10308SChuck Lever TRACE_EVENT(xprtrdma_leaked_rep,
124707e10308SChuck Lever 	TP_PROTO(
124807e10308SChuck Lever 		const struct rpc_rqst *rqst,
124907e10308SChuck Lever 		const struct rpcrdma_rep *rep
125007e10308SChuck Lever 	),
125107e10308SChuck Lever 
125207e10308SChuck Lever 	TP_ARGS(rqst, rep),
125307e10308SChuck Lever 
125407e10308SChuck Lever 	TP_STRUCT__entry(
125507e10308SChuck Lever 		__field(unsigned int, task_id)
125607e10308SChuck Lever 		__field(unsigned int, client_id)
125707e10308SChuck Lever 		__field(u32, xid)
125807e10308SChuck Lever 		__field(const void *, rep)
125907e10308SChuck Lever 	),
126007e10308SChuck Lever 
126107e10308SChuck Lever 	TP_fast_assign(
126207e10308SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
126307e10308SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
126407e10308SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
126507e10308SChuck Lever 		__entry->rep = rep;
126607e10308SChuck Lever 	),
126707e10308SChuck Lever 
126807e10308SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x rep=%p",
126907e10308SChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
127007e10308SChuck Lever 		__entry->rep
127107e10308SChuck Lever 	)
127207e10308SChuck Lever );
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(
133198895edbSChuck Lever 		__be32 *p,
133298895edbSChuck Lever 		unsigned int hdrlen
133398895edbSChuck Lever 	),
133498895edbSChuck Lever 
133598895edbSChuck Lever 	TP_ARGS(p, hdrlen),
133698895edbSChuck Lever 
133798895edbSChuck Lever 	TP_STRUCT__entry(
133898895edbSChuck Lever 		__field(u32, xid)
133998895edbSChuck Lever 		__field(u32, vers)
134098895edbSChuck Lever 		__field(u32, proc)
134198895edbSChuck Lever 		__field(u32, credits)
134298895edbSChuck Lever 		__field(unsigned int, hdrlen)
134398895edbSChuck Lever 	),
134498895edbSChuck Lever 
134598895edbSChuck Lever 	TP_fast_assign(
134698895edbSChuck Lever 		__entry->xid = be32_to_cpup(p++);
134798895edbSChuck Lever 		__entry->vers = be32_to_cpup(p++);
134898895edbSChuck Lever 		__entry->credits = be32_to_cpup(p++);
134998895edbSChuck Lever 		__entry->proc = be32_to_cpup(p);
135098895edbSChuck Lever 		__entry->hdrlen = hdrlen;
135198895edbSChuck Lever 	),
135298895edbSChuck Lever 
135398895edbSChuck Lever 	TP_printk("xid=0x%08x vers=%u credits=%u proc=%s hdrlen=%u",
135498895edbSChuck Lever 		__entry->xid, __entry->vers, __entry->credits,
135598895edbSChuck Lever 		show_rpcrdma_proc(__entry->proc), __entry->hdrlen)
135698895edbSChuck Lever );
135798895edbSChuck Lever 
135827ce6294SChuck Lever TRACE_EVENT(svcrdma_decode_short_err,
135998895edbSChuck Lever 	TP_PROTO(
136098895edbSChuck Lever 		unsigned int hdrlen
136198895edbSChuck Lever 	),
136298895edbSChuck Lever 
136398895edbSChuck Lever 	TP_ARGS(hdrlen),
136498895edbSChuck Lever 
136598895edbSChuck Lever 	TP_STRUCT__entry(
136698895edbSChuck Lever 		__field(unsigned int, hdrlen)
136798895edbSChuck Lever 	),
136898895edbSChuck Lever 
136998895edbSChuck Lever 	TP_fast_assign(
137098895edbSChuck Lever 		__entry->hdrlen = hdrlen;
137198895edbSChuck Lever 	),
137298895edbSChuck Lever 
137398895edbSChuck Lever 	TP_printk("hdrlen=%u", __entry->hdrlen)
137498895edbSChuck Lever );
137598895edbSChuck Lever 
137698895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_badreq_event,
137798895edbSChuck Lever 	TP_PROTO(
137898895edbSChuck Lever 		__be32 *p
137998895edbSChuck Lever 	),
138098895edbSChuck Lever 
138198895edbSChuck Lever 	TP_ARGS(p),
138298895edbSChuck Lever 
138398895edbSChuck Lever 	TP_STRUCT__entry(
138498895edbSChuck Lever 		__field(u32, xid)
138598895edbSChuck Lever 		__field(u32, vers)
138698895edbSChuck Lever 		__field(u32, proc)
138798895edbSChuck Lever 		__field(u32, credits)
138898895edbSChuck Lever 	),
138998895edbSChuck Lever 
139098895edbSChuck Lever 	TP_fast_assign(
139198895edbSChuck Lever 		__entry->xid = be32_to_cpup(p++);
139298895edbSChuck Lever 		__entry->vers = be32_to_cpup(p++);
139398895edbSChuck Lever 		__entry->credits = be32_to_cpup(p++);
139498895edbSChuck Lever 		__entry->proc = be32_to_cpup(p);
139598895edbSChuck Lever 	),
139698895edbSChuck Lever 
139798895edbSChuck Lever 	TP_printk("xid=0x%08x vers=%u credits=%u proc=%u",
139898895edbSChuck Lever 		__entry->xid, __entry->vers, __entry->credits, __entry->proc)
139998895edbSChuck Lever );
140098895edbSChuck Lever 
140198895edbSChuck Lever #define DEFINE_BADREQ_EVENT(name)					\
140227ce6294SChuck Lever 		DEFINE_EVENT(svcrdma_badreq_event,			\
140327ce6294SChuck Lever 			     svcrdma_decode_##name##_err,		\
140498895edbSChuck Lever 				TP_PROTO(				\
140598895edbSChuck Lever 					__be32 *p			\
140698895edbSChuck Lever 				),					\
140798895edbSChuck Lever 				TP_ARGS(p))
140898895edbSChuck Lever 
140998895edbSChuck Lever DEFINE_BADREQ_EVENT(badvers);
141098895edbSChuck Lever DEFINE_BADREQ_EVENT(drop);
141198895edbSChuck Lever DEFINE_BADREQ_EVENT(badproc);
141298895edbSChuck Lever DEFINE_BADREQ_EVENT(parse);
141398895edbSChuck Lever 
141498895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_segment_event,
141598895edbSChuck Lever 	TP_PROTO(
141698895edbSChuck Lever 		u32 handle,
141798895edbSChuck Lever 		u32 length,
141898895edbSChuck Lever 		u64 offset
141998895edbSChuck Lever 	),
142098895edbSChuck Lever 
142198895edbSChuck Lever 	TP_ARGS(handle, length, offset),
142298895edbSChuck Lever 
142398895edbSChuck Lever 	TP_STRUCT__entry(
142498895edbSChuck Lever 		__field(u32, handle)
142598895edbSChuck Lever 		__field(u32, length)
142698895edbSChuck Lever 		__field(u64, offset)
142798895edbSChuck Lever 	),
142898895edbSChuck Lever 
142998895edbSChuck Lever 	TP_fast_assign(
143098895edbSChuck Lever 		__entry->handle = handle;
143198895edbSChuck Lever 		__entry->length = length;
143298895edbSChuck Lever 		__entry->offset = offset;
143398895edbSChuck Lever 	),
143498895edbSChuck Lever 
143598895edbSChuck Lever 	TP_printk("%u@0x%016llx:0x%08x",
143698895edbSChuck Lever 		__entry->length, (unsigned long long)__entry->offset,
143798895edbSChuck Lever 		__entry->handle
143898895edbSChuck Lever 	)
143998895edbSChuck Lever );
144098895edbSChuck Lever 
144198895edbSChuck Lever #define DEFINE_SEGMENT_EVENT(name)					\
1442e604aad2SChuck Lever 		DEFINE_EVENT(svcrdma_segment_event, svcrdma_##name,\
144398895edbSChuck Lever 				TP_PROTO(				\
144498895edbSChuck Lever 					u32 handle,			\
144598895edbSChuck Lever 					u32 length,			\
144698895edbSChuck Lever 					u64 offset			\
144798895edbSChuck Lever 				),					\
144898895edbSChuck Lever 				TP_ARGS(handle, length, offset))
144998895edbSChuck Lever 
1450e604aad2SChuck Lever DEFINE_SEGMENT_EVENT(decode_wseg);
1451e604aad2SChuck Lever DEFINE_SEGMENT_EVENT(encode_rseg);
1452a406c563SChuck Lever DEFINE_SEGMENT_EVENT(send_rseg);
1453e604aad2SChuck Lever DEFINE_SEGMENT_EVENT(encode_wseg);
1454a406c563SChuck Lever DEFINE_SEGMENT_EVENT(send_wseg);
145598895edbSChuck Lever 
145698895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_chunk_event,
145798895edbSChuck Lever 	TP_PROTO(
145898895edbSChuck Lever 		u32 length
145998895edbSChuck Lever 	),
146098895edbSChuck Lever 
146198895edbSChuck Lever 	TP_ARGS(length),
146298895edbSChuck Lever 
146398895edbSChuck Lever 	TP_STRUCT__entry(
146498895edbSChuck Lever 		__field(u32, length)
146598895edbSChuck Lever 	),
146698895edbSChuck Lever 
146798895edbSChuck Lever 	TP_fast_assign(
146898895edbSChuck Lever 		__entry->length = length;
146998895edbSChuck Lever 	),
147098895edbSChuck Lever 
147198895edbSChuck Lever 	TP_printk("length=%u",
147298895edbSChuck Lever 		__entry->length
147398895edbSChuck Lever 	)
147498895edbSChuck Lever );
147598895edbSChuck Lever 
147698895edbSChuck Lever #define DEFINE_CHUNK_EVENT(name)					\
1477a406c563SChuck Lever 		DEFINE_EVENT(svcrdma_chunk_event, svcrdma_##name,	\
147898895edbSChuck Lever 				TP_PROTO(				\
147998895edbSChuck Lever 					u32 length			\
148098895edbSChuck Lever 				),					\
148198895edbSChuck Lever 				TP_ARGS(length))
148298895edbSChuck Lever 
1483a406c563SChuck Lever DEFINE_CHUNK_EVENT(send_pzr);
1484a406c563SChuck Lever DEFINE_CHUNK_EVENT(encode_write_chunk);
1485a406c563SChuck Lever DEFINE_CHUNK_EVENT(send_write_chunk);
1486a406c563SChuck Lever DEFINE_CHUNK_EVENT(encode_read_chunk);
1487a406c563SChuck Lever DEFINE_CHUNK_EVENT(send_reply_chunk);
148898895edbSChuck Lever 
1489a406c563SChuck Lever TRACE_EVENT(svcrdma_send_read_chunk,
149098895edbSChuck Lever 	TP_PROTO(
149198895edbSChuck Lever 		u32 length,
149298895edbSChuck Lever 		u32 position
149398895edbSChuck Lever 	),
149498895edbSChuck Lever 
149598895edbSChuck Lever 	TP_ARGS(length, position),
149698895edbSChuck Lever 
149798895edbSChuck Lever 	TP_STRUCT__entry(
149898895edbSChuck Lever 		__field(u32, length)
149998895edbSChuck Lever 		__field(u32, position)
150098895edbSChuck Lever 	),
150198895edbSChuck Lever 
150298895edbSChuck Lever 	TP_fast_assign(
150398895edbSChuck Lever 		__entry->length = length;
150498895edbSChuck Lever 		__entry->position = position;
150598895edbSChuck Lever 	),
150698895edbSChuck Lever 
150798895edbSChuck Lever 	TP_printk("length=%u position=%u",
150898895edbSChuck Lever 		__entry->length, __entry->position
150998895edbSChuck Lever 	)
151098895edbSChuck Lever );
151198895edbSChuck Lever 
151298895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_error_event,
151398895edbSChuck Lever 	TP_PROTO(
151498895edbSChuck Lever 		__be32 xid
151598895edbSChuck Lever 	),
151698895edbSChuck Lever 
151798895edbSChuck Lever 	TP_ARGS(xid),
151898895edbSChuck Lever 
151998895edbSChuck Lever 	TP_STRUCT__entry(
152098895edbSChuck Lever 		__field(u32, xid)
152198895edbSChuck Lever 	),
152298895edbSChuck Lever 
152398895edbSChuck Lever 	TP_fast_assign(
152498895edbSChuck Lever 		__entry->xid = be32_to_cpu(xid);
152598895edbSChuck Lever 	),
152698895edbSChuck Lever 
152798895edbSChuck Lever 	TP_printk("xid=0x%08x",
152898895edbSChuck Lever 		__entry->xid
152998895edbSChuck Lever 	)
153098895edbSChuck Lever );
153198895edbSChuck Lever 
153298895edbSChuck Lever #define DEFINE_ERROR_EVENT(name)					\
153398895edbSChuck Lever 		DEFINE_EVENT(svcrdma_error_event, svcrdma_err_##name,	\
153498895edbSChuck Lever 				TP_PROTO(				\
153598895edbSChuck Lever 					__be32 xid			\
153698895edbSChuck Lever 				),					\
153798895edbSChuck Lever 				TP_ARGS(xid))
153898895edbSChuck Lever 
153998895edbSChuck Lever DEFINE_ERROR_EVENT(vers);
154098895edbSChuck Lever DEFINE_ERROR_EVENT(chunk);
154198895edbSChuck Lever 
1542bd2abef3SChuck Lever /**
1543bd2abef3SChuck Lever  ** Server-side RDMA API events
1544bd2abef3SChuck Lever  **/
1545bd2abef3SChuck Lever 
1546832b2cb9SChuck Lever DECLARE_EVENT_CLASS(svcrdma_dma_map_class,
1547bd2abef3SChuck Lever 	TP_PROTO(
1548bd2abef3SChuck Lever 		const struct svcxprt_rdma *rdma,
1549832b2cb9SChuck Lever 		u64 dma_addr,
1550832b2cb9SChuck Lever 		u32 length
1551bd2abef3SChuck Lever 	),
1552bd2abef3SChuck Lever 
1553832b2cb9SChuck Lever 	TP_ARGS(rdma, dma_addr, length),
1554bd2abef3SChuck Lever 
1555bd2abef3SChuck Lever 	TP_STRUCT__entry(
1556832b2cb9SChuck Lever 		__field(u64, dma_addr)
1557832b2cb9SChuck Lever 		__field(u32, length)
1558bd2abef3SChuck Lever 		__string(device, rdma->sc_cm_id->device->name)
1559bd2abef3SChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1560bd2abef3SChuck Lever 	),
1561bd2abef3SChuck Lever 
1562bd2abef3SChuck Lever 	TP_fast_assign(
1563832b2cb9SChuck Lever 		__entry->dma_addr = dma_addr;
1564832b2cb9SChuck Lever 		__entry->length = length;
1565bd2abef3SChuck Lever 		__assign_str(device, rdma->sc_cm_id->device->name);
1566bd2abef3SChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1567bd2abef3SChuck Lever 	),
1568bd2abef3SChuck Lever 
1569832b2cb9SChuck Lever 	TP_printk("addr=%s device=%s dma_addr=%llu length=%u",
1570832b2cb9SChuck Lever 		__get_str(addr), __get_str(device),
1571832b2cb9SChuck Lever 		__entry->dma_addr, __entry->length
1572bd2abef3SChuck Lever 	)
1573bd2abef3SChuck Lever );
1574bd2abef3SChuck Lever 
1575832b2cb9SChuck Lever #define DEFINE_SVC_DMA_EVENT(name)					\
1576832b2cb9SChuck Lever 		DEFINE_EVENT(svcrdma_dma_map_class, svcrdma_##name,	\
1577832b2cb9SChuck Lever 				TP_PROTO(				\
1578832b2cb9SChuck Lever 					const struct svcxprt_rdma *rdma,\
1579832b2cb9SChuck Lever 					u64 dma_addr,			\
1580832b2cb9SChuck Lever 					u32 length			\
1581832b2cb9SChuck Lever 				),					\
1582832b2cb9SChuck Lever 				TP_ARGS(rdma, dma_addr, length))
1583832b2cb9SChuck Lever 
1584832b2cb9SChuck Lever DEFINE_SVC_DMA_EVENT(dma_map_page);
1585832b2cb9SChuck Lever DEFINE_SVC_DMA_EVENT(dma_unmap_page);
1586832b2cb9SChuck Lever 
15872abfbe7eSChuck Lever TRACE_EVENT(svcrdma_dma_map_rw_err,
1588bd2abef3SChuck Lever 	TP_PROTO(
1589bd2abef3SChuck Lever 		const struct svcxprt_rdma *rdma,
15902abfbe7eSChuck Lever 		unsigned int nents,
1591bd2abef3SChuck Lever 		int status
1592bd2abef3SChuck Lever 	),
1593bd2abef3SChuck Lever 
15942abfbe7eSChuck Lever 	TP_ARGS(rdma, nents, status),
1595bd2abef3SChuck Lever 
1596bd2abef3SChuck Lever 	TP_STRUCT__entry(
1597bd2abef3SChuck Lever 		__field(int, status)
15982abfbe7eSChuck Lever 		__field(unsigned int, nents)
1599bd2abef3SChuck Lever 		__string(device, rdma->sc_cm_id->device->name)
1600bd2abef3SChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1601bd2abef3SChuck Lever 	),
1602bd2abef3SChuck Lever 
1603bd2abef3SChuck Lever 	TP_fast_assign(
1604bd2abef3SChuck Lever 		__entry->status = status;
16052abfbe7eSChuck Lever 		__entry->nents = nents;
1606bd2abef3SChuck Lever 		__assign_str(device, rdma->sc_cm_id->device->name);
1607bd2abef3SChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1608bd2abef3SChuck Lever 	),
1609bd2abef3SChuck Lever 
16102abfbe7eSChuck Lever 	TP_printk("addr=%s device=%s nents=%u status=%d",
16112abfbe7eSChuck Lever 		__get_str(addr), __get_str(device), __entry->nents,
16122abfbe7eSChuck Lever 		__entry->status
1613bd2abef3SChuck Lever 	)
1614bd2abef3SChuck Lever );
1615bd2abef3SChuck Lever 
1616f4e53e1cSChuck Lever TRACE_EVENT(svcrdma_no_rwctx_err,
1617f4e53e1cSChuck Lever 	TP_PROTO(
1618f4e53e1cSChuck Lever 		const struct svcxprt_rdma *rdma,
1619f4e53e1cSChuck Lever 		unsigned int num_sges
1620f4e53e1cSChuck Lever 	),
1621f4e53e1cSChuck Lever 
1622f4e53e1cSChuck Lever 	TP_ARGS(rdma, num_sges),
1623f4e53e1cSChuck Lever 
1624f4e53e1cSChuck Lever 	TP_STRUCT__entry(
1625f4e53e1cSChuck Lever 		__field(unsigned int, num_sges)
1626f4e53e1cSChuck Lever 		__string(device, rdma->sc_cm_id->device->name)
1627f4e53e1cSChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1628f4e53e1cSChuck Lever 	),
1629f4e53e1cSChuck Lever 
1630f4e53e1cSChuck Lever 	TP_fast_assign(
1631f4e53e1cSChuck Lever 		__entry->num_sges = num_sges;
1632f4e53e1cSChuck Lever 		__assign_str(device, rdma->sc_cm_id->device->name);
1633f4e53e1cSChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1634f4e53e1cSChuck Lever 	),
1635f4e53e1cSChuck Lever 
1636f4e53e1cSChuck Lever 	TP_printk("addr=%s device=%s num_sges=%d",
1637f4e53e1cSChuck Lever 		__get_str(addr), __get_str(device), __entry->num_sges
1638f4e53e1cSChuck Lever 	)
1639f4e53e1cSChuck Lever );
1640f4e53e1cSChuck Lever 
16419d200638SChuck Lever TRACE_EVENT(svcrdma_page_overrun_err,
16429d200638SChuck Lever 	TP_PROTO(
16439d200638SChuck Lever 		const struct svcxprt_rdma *rdma,
16449d200638SChuck Lever 		const struct svc_rqst *rqst,
16459d200638SChuck Lever 		unsigned int pageno
16469d200638SChuck Lever 	),
16479d200638SChuck Lever 
16489d200638SChuck Lever 	TP_ARGS(rdma, rqst, pageno),
16499d200638SChuck Lever 
16509d200638SChuck Lever 	TP_STRUCT__entry(
16519d200638SChuck Lever 		__field(unsigned int, pageno)
16529d200638SChuck Lever 		__field(u32, xid)
16539d200638SChuck Lever 		__string(device, rdma->sc_cm_id->device->name)
16549d200638SChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
16559d200638SChuck Lever 	),
16569d200638SChuck Lever 
16579d200638SChuck Lever 	TP_fast_assign(
16589d200638SChuck Lever 		__entry->pageno = pageno;
16599d200638SChuck Lever 		__entry->xid = __be32_to_cpu(rqst->rq_xid);
16609d200638SChuck Lever 		__assign_str(device, rdma->sc_cm_id->device->name);
16619d200638SChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
16629d200638SChuck Lever 	),
16639d200638SChuck Lever 
16649d200638SChuck Lever 	TP_printk("addr=%s device=%s xid=0x%08x pageno=%u", __get_str(addr),
16659d200638SChuck Lever 		__get_str(device), __entry->xid, __entry->pageno
16669d200638SChuck Lever 	)
16679d200638SChuck Lever );
16689d200638SChuck Lever 
1669dbc17acdSChuck Lever TRACE_EVENT(svcrdma_small_wrch_err,
1670dbc17acdSChuck Lever 	TP_PROTO(
1671dbc17acdSChuck Lever 		const struct svcxprt_rdma *rdma,
1672dbc17acdSChuck Lever 		unsigned int remaining,
1673dbc17acdSChuck Lever 		unsigned int seg_no,
1674dbc17acdSChuck Lever 		unsigned int num_segs
1675dbc17acdSChuck Lever 	),
1676dbc17acdSChuck Lever 
1677dbc17acdSChuck Lever 	TP_ARGS(rdma, remaining, seg_no, num_segs),
1678dbc17acdSChuck Lever 
1679dbc17acdSChuck Lever 	TP_STRUCT__entry(
1680dbc17acdSChuck Lever 		__field(unsigned int, remaining)
1681dbc17acdSChuck Lever 		__field(unsigned int, seg_no)
1682dbc17acdSChuck Lever 		__field(unsigned int, num_segs)
1683dbc17acdSChuck Lever 		__string(device, rdma->sc_cm_id->device->name)
1684dbc17acdSChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1685dbc17acdSChuck Lever 	),
1686dbc17acdSChuck Lever 
1687dbc17acdSChuck Lever 	TP_fast_assign(
1688dbc17acdSChuck Lever 		__entry->remaining = remaining;
1689dbc17acdSChuck Lever 		__entry->seg_no = seg_no;
1690dbc17acdSChuck Lever 		__entry->num_segs = num_segs;
1691dbc17acdSChuck Lever 		__assign_str(device, rdma->sc_cm_id->device->name);
1692dbc17acdSChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1693dbc17acdSChuck Lever 	),
1694dbc17acdSChuck Lever 
1695dbc17acdSChuck Lever 	TP_printk("addr=%s device=%s remaining=%u seg_no=%u num_segs=%u",
1696dbc17acdSChuck Lever 		__get_str(addr), __get_str(device), __entry->remaining,
1697dbc17acdSChuck Lever 		__entry->seg_no, __entry->num_segs
1698dbc17acdSChuck Lever 	)
1699dbc17acdSChuck Lever );
1700dbc17acdSChuck Lever 
17010dabe948SChuck Lever TRACE_EVENT(svcrdma_send_pullup,
17020dabe948SChuck Lever 	TP_PROTO(
17030dabe948SChuck Lever 		unsigned int len
17040dabe948SChuck Lever 	),
17050dabe948SChuck Lever 
17060dabe948SChuck Lever 	TP_ARGS(len),
17070dabe948SChuck Lever 
17080dabe948SChuck Lever 	TP_STRUCT__entry(
17090dabe948SChuck Lever 		__field(unsigned int, len)
17100dabe948SChuck Lever 	),
17110dabe948SChuck Lever 
17120dabe948SChuck Lever 	TP_fast_assign(
17130dabe948SChuck Lever 		__entry->len = len;
17140dabe948SChuck Lever 	),
17150dabe948SChuck Lever 
17160dabe948SChuck Lever 	TP_printk("len=%u", __entry->len)
17170dabe948SChuck Lever );
17180dabe948SChuck Lever 
17193f8f25c6SChuck Lever TRACE_EVENT(svcrdma_send_err,
1720bd2abef3SChuck Lever 	TP_PROTO(
1721bd2abef3SChuck Lever 		const struct svc_rqst *rqst,
1722bd2abef3SChuck Lever 		int status
1723bd2abef3SChuck Lever 	),
1724bd2abef3SChuck Lever 
1725bd2abef3SChuck Lever 	TP_ARGS(rqst, status),
1726bd2abef3SChuck Lever 
1727bd2abef3SChuck Lever 	TP_STRUCT__entry(
1728bd2abef3SChuck Lever 		__field(int, status)
1729bd2abef3SChuck Lever 		__field(u32, xid)
1730bd2abef3SChuck Lever 		__string(addr, rqst->rq_xprt->xpt_remotebuf)
1731bd2abef3SChuck Lever 	),
1732bd2abef3SChuck Lever 
1733bd2abef3SChuck Lever 	TP_fast_assign(
1734bd2abef3SChuck Lever 		__entry->status = status;
1735bd2abef3SChuck Lever 		__entry->xid = __be32_to_cpu(rqst->rq_xid);
1736bd2abef3SChuck Lever 		__assign_str(addr, rqst->rq_xprt->xpt_remotebuf);
1737bd2abef3SChuck Lever 	),
1738bd2abef3SChuck Lever 
17393f8f25c6SChuck Lever 	TP_printk("addr=%s xid=0x%08x status=%d", __get_str(addr),
1740bd2abef3SChuck Lever 		__entry->xid, __entry->status
1741bd2abef3SChuck Lever 	)
1742bd2abef3SChuck Lever );
1743bd2abef3SChuck Lever 
1744bd2abef3SChuck Lever DECLARE_EVENT_CLASS(svcrdma_sendcomp_event,
1745bd2abef3SChuck Lever 	TP_PROTO(
1746bd2abef3SChuck Lever 		const struct ib_wc *wc
1747bd2abef3SChuck Lever 	),
1748bd2abef3SChuck Lever 
1749bd2abef3SChuck Lever 	TP_ARGS(wc),
1750bd2abef3SChuck Lever 
1751bd2abef3SChuck Lever 	TP_STRUCT__entry(
1752bd2abef3SChuck Lever 		__field(const void *, cqe)
1753bd2abef3SChuck Lever 		__field(unsigned int, status)
1754bd2abef3SChuck Lever 		__field(unsigned int, vendor_err)
1755bd2abef3SChuck Lever 	),
1756bd2abef3SChuck Lever 
1757bd2abef3SChuck Lever 	TP_fast_assign(
1758bd2abef3SChuck Lever 		__entry->cqe = wc->wr_cqe;
1759bd2abef3SChuck Lever 		__entry->status = wc->status;
1760bd2abef3SChuck Lever 		if (wc->status)
1761bd2abef3SChuck Lever 			__entry->vendor_err = wc->vendor_err;
1762bd2abef3SChuck Lever 		else
1763bd2abef3SChuck Lever 			__entry->vendor_err = 0;
1764bd2abef3SChuck Lever 	),
1765bd2abef3SChuck Lever 
1766bd2abef3SChuck Lever 	TP_printk("cqe=%p status=%s (%u/0x%x)",
1767bd2abef3SChuck Lever 		__entry->cqe, rdma_show_wc_status(__entry->status),
1768bd2abef3SChuck Lever 		__entry->status, __entry->vendor_err
1769bd2abef3SChuck Lever 	)
1770bd2abef3SChuck Lever );
1771bd2abef3SChuck Lever 
1772bd2abef3SChuck Lever #define DEFINE_SENDCOMP_EVENT(name)					\
1773bd2abef3SChuck Lever 		DEFINE_EVENT(svcrdma_sendcomp_event, svcrdma_wc_##name,	\
1774bd2abef3SChuck Lever 				TP_PROTO(				\
1775bd2abef3SChuck Lever 					const struct ib_wc *wc		\
1776bd2abef3SChuck Lever 				),					\
1777bd2abef3SChuck Lever 				TP_ARGS(wc))
1778bd2abef3SChuck Lever 
1779bd2abef3SChuck Lever TRACE_EVENT(svcrdma_post_send,
1780bd2abef3SChuck Lever 	TP_PROTO(
1781e28b4fc6SChuck Lever 		const struct ib_send_wr *wr
1782bd2abef3SChuck Lever 	),
1783bd2abef3SChuck Lever 
1784e28b4fc6SChuck Lever 	TP_ARGS(wr),
1785bd2abef3SChuck Lever 
1786bd2abef3SChuck Lever 	TP_STRUCT__entry(
1787bd2abef3SChuck Lever 		__field(const void *, cqe)
1788bd2abef3SChuck Lever 		__field(unsigned int, num_sge)
1789bd2abef3SChuck Lever 		__field(u32, inv_rkey)
1790bd2abef3SChuck Lever 	),
1791bd2abef3SChuck Lever 
1792bd2abef3SChuck Lever 	TP_fast_assign(
1793bd2abef3SChuck Lever 		__entry->cqe = wr->wr_cqe;
1794bd2abef3SChuck Lever 		__entry->num_sge = wr->num_sge;
1795bd2abef3SChuck Lever 		__entry->inv_rkey = (wr->opcode == IB_WR_SEND_WITH_INV) ?
1796bd2abef3SChuck Lever 					wr->ex.invalidate_rkey : 0;
1797bd2abef3SChuck Lever 	),
1798bd2abef3SChuck Lever 
1799e28b4fc6SChuck Lever 	TP_printk("cqe=%p num_sge=%u inv_rkey=0x%08x",
1800bd2abef3SChuck Lever 		__entry->cqe, __entry->num_sge,
1801e28b4fc6SChuck Lever 		__entry->inv_rkey
1802bd2abef3SChuck Lever 	)
1803bd2abef3SChuck Lever );
1804bd2abef3SChuck Lever 
1805bd2abef3SChuck Lever DEFINE_SENDCOMP_EVENT(send);
1806bd2abef3SChuck Lever 
1807bd2abef3SChuck Lever TRACE_EVENT(svcrdma_post_recv,
1808bd2abef3SChuck Lever 	TP_PROTO(
1809bd2abef3SChuck Lever 		const struct ib_recv_wr *wr,
1810bd2abef3SChuck Lever 		int status
1811bd2abef3SChuck Lever 	),
1812bd2abef3SChuck Lever 
1813bd2abef3SChuck Lever 	TP_ARGS(wr, status),
1814bd2abef3SChuck Lever 
1815bd2abef3SChuck Lever 	TP_STRUCT__entry(
1816bd2abef3SChuck Lever 		__field(const void *, cqe)
1817bd2abef3SChuck Lever 		__field(int, status)
1818bd2abef3SChuck Lever 	),
1819bd2abef3SChuck Lever 
1820bd2abef3SChuck Lever 	TP_fast_assign(
1821bd2abef3SChuck Lever 		__entry->cqe = wr->wr_cqe;
1822bd2abef3SChuck Lever 		__entry->status = status;
1823bd2abef3SChuck Lever 	),
1824bd2abef3SChuck Lever 
1825bd2abef3SChuck Lever 	TP_printk("cqe=%p status=%d",
1826bd2abef3SChuck Lever 		__entry->cqe, __entry->status
1827bd2abef3SChuck Lever 	)
1828bd2abef3SChuck Lever );
1829bd2abef3SChuck Lever 
1830bd2abef3SChuck Lever TRACE_EVENT(svcrdma_wc_receive,
1831bd2abef3SChuck Lever 	TP_PROTO(
1832bd2abef3SChuck Lever 		const struct ib_wc *wc
1833bd2abef3SChuck Lever 	),
1834bd2abef3SChuck Lever 
1835bd2abef3SChuck Lever 	TP_ARGS(wc),
1836bd2abef3SChuck Lever 
1837bd2abef3SChuck Lever 	TP_STRUCT__entry(
1838bd2abef3SChuck Lever 		__field(const void *, cqe)
1839bd2abef3SChuck Lever 		__field(u32, byte_len)
1840bd2abef3SChuck Lever 		__field(unsigned int, status)
1841bd2abef3SChuck Lever 		__field(u32, vendor_err)
1842bd2abef3SChuck Lever 	),
1843bd2abef3SChuck Lever 
1844bd2abef3SChuck Lever 	TP_fast_assign(
1845bd2abef3SChuck Lever 		__entry->cqe = wc->wr_cqe;
1846bd2abef3SChuck Lever 		__entry->status = wc->status;
1847bd2abef3SChuck Lever 		if (wc->status) {
1848bd2abef3SChuck Lever 			__entry->byte_len = 0;
1849bd2abef3SChuck Lever 			__entry->vendor_err = wc->vendor_err;
1850bd2abef3SChuck Lever 		} else {
1851bd2abef3SChuck Lever 			__entry->byte_len = wc->byte_len;
1852bd2abef3SChuck Lever 			__entry->vendor_err = 0;
1853bd2abef3SChuck Lever 		}
1854bd2abef3SChuck Lever 	),
1855bd2abef3SChuck Lever 
1856bd2abef3SChuck Lever 	TP_printk("cqe=%p byte_len=%u status=%s (%u/0x%x)",
1857bd2abef3SChuck Lever 		__entry->cqe, __entry->byte_len,
1858bd2abef3SChuck Lever 		rdma_show_wc_status(__entry->status),
1859bd2abef3SChuck Lever 		__entry->status, __entry->vendor_err
1860bd2abef3SChuck Lever 	)
1861bd2abef3SChuck Lever );
1862bd2abef3SChuck Lever 
1863bd2abef3SChuck Lever TRACE_EVENT(svcrdma_post_rw,
1864bd2abef3SChuck Lever 	TP_PROTO(
1865bd2abef3SChuck Lever 		const void *cqe,
1866e28b4fc6SChuck Lever 		int sqecount
1867bd2abef3SChuck Lever 	),
1868bd2abef3SChuck Lever 
1869e28b4fc6SChuck Lever 	TP_ARGS(cqe, sqecount),
1870bd2abef3SChuck Lever 
1871bd2abef3SChuck Lever 	TP_STRUCT__entry(
1872bd2abef3SChuck Lever 		__field(const void *, cqe)
1873bd2abef3SChuck Lever 		__field(int, sqecount)
1874bd2abef3SChuck Lever 	),
1875bd2abef3SChuck Lever 
1876bd2abef3SChuck Lever 	TP_fast_assign(
1877bd2abef3SChuck Lever 		__entry->cqe = cqe;
1878bd2abef3SChuck Lever 		__entry->sqecount = sqecount;
1879bd2abef3SChuck Lever 	),
1880bd2abef3SChuck Lever 
1881e28b4fc6SChuck Lever 	TP_printk("cqe=%p sqecount=%d",
1882e28b4fc6SChuck Lever 		__entry->cqe, __entry->sqecount
1883bd2abef3SChuck Lever 	)
1884bd2abef3SChuck Lever );
1885bd2abef3SChuck Lever 
1886bd2abef3SChuck Lever DEFINE_SENDCOMP_EVENT(read);
1887bd2abef3SChuck Lever DEFINE_SENDCOMP_EVENT(write);
1888bd2abef3SChuck Lever 
1889bd2abef3SChuck Lever TRACE_EVENT(svcrdma_qp_error,
1890bd2abef3SChuck Lever 	TP_PROTO(
1891bd2abef3SChuck Lever 		const struct ib_event *event,
1892bd2abef3SChuck Lever 		const struct sockaddr *sap
1893bd2abef3SChuck Lever 	),
1894bd2abef3SChuck Lever 
1895bd2abef3SChuck Lever 	TP_ARGS(event, sap),
1896bd2abef3SChuck Lever 
1897bd2abef3SChuck Lever 	TP_STRUCT__entry(
1898bd2abef3SChuck Lever 		__field(unsigned int, event)
1899bd2abef3SChuck Lever 		__string(device, event->device->name)
1900bd2abef3SChuck Lever 		__array(__u8, addr, INET6_ADDRSTRLEN + 10)
1901bd2abef3SChuck Lever 	),
1902bd2abef3SChuck Lever 
1903bd2abef3SChuck Lever 	TP_fast_assign(
1904bd2abef3SChuck Lever 		__entry->event = event->event;
1905bd2abef3SChuck Lever 		__assign_str(device, event->device->name);
1906bd2abef3SChuck Lever 		snprintf(__entry->addr, sizeof(__entry->addr) - 1,
1907bd2abef3SChuck Lever 			 "%pISpc", sap);
1908bd2abef3SChuck Lever 	),
1909bd2abef3SChuck Lever 
1910bd2abef3SChuck Lever 	TP_printk("addr=%s dev=%s event=%s (%u)",
1911bd2abef3SChuck Lever 		__entry->addr, __get_str(device),
1912bd2abef3SChuck Lever 		rdma_show_ib_event(__entry->event), __entry->event
1913bd2abef3SChuck Lever 	)
1914bd2abef3SChuck Lever );
1915bd2abef3SChuck Lever 
1916bd2abef3SChuck Lever DECLARE_EVENT_CLASS(svcrdma_sendqueue_event,
1917bd2abef3SChuck Lever 	TP_PROTO(
1918bd2abef3SChuck Lever 		const struct svcxprt_rdma *rdma
1919bd2abef3SChuck Lever 	),
1920bd2abef3SChuck Lever 
1921bd2abef3SChuck Lever 	TP_ARGS(rdma),
1922bd2abef3SChuck Lever 
1923bd2abef3SChuck Lever 	TP_STRUCT__entry(
1924bd2abef3SChuck Lever 		__field(int, avail)
1925bd2abef3SChuck Lever 		__field(int, depth)
1926bd2abef3SChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1927bd2abef3SChuck Lever 	),
1928bd2abef3SChuck Lever 
1929bd2abef3SChuck Lever 	TP_fast_assign(
1930bd2abef3SChuck Lever 		__entry->avail = atomic_read(&rdma->sc_sq_avail);
1931bd2abef3SChuck Lever 		__entry->depth = rdma->sc_sq_depth;
1932bd2abef3SChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1933bd2abef3SChuck Lever 	),
1934bd2abef3SChuck Lever 
1935bd2abef3SChuck Lever 	TP_printk("addr=%s sc_sq_avail=%d/%d",
1936bd2abef3SChuck Lever 		__get_str(addr), __entry->avail, __entry->depth
1937bd2abef3SChuck Lever 	)
1938bd2abef3SChuck Lever );
1939bd2abef3SChuck Lever 
1940bd2abef3SChuck Lever #define DEFINE_SQ_EVENT(name)						\
1941bd2abef3SChuck Lever 		DEFINE_EVENT(svcrdma_sendqueue_event, svcrdma_sq_##name,\
1942bd2abef3SChuck Lever 				TP_PROTO(				\
1943bd2abef3SChuck Lever 					const struct svcxprt_rdma *rdma \
1944bd2abef3SChuck Lever 				),					\
1945bd2abef3SChuck Lever 				TP_ARGS(rdma))
1946bd2abef3SChuck Lever 
1947bd2abef3SChuck Lever DEFINE_SQ_EVENT(full);
1948bd2abef3SChuck Lever DEFINE_SQ_EVENT(retry);
1949bd2abef3SChuck Lever 
1950e28b4fc6SChuck Lever TRACE_EVENT(svcrdma_sq_post_err,
1951e28b4fc6SChuck Lever 	TP_PROTO(
1952e28b4fc6SChuck Lever 		const struct svcxprt_rdma *rdma,
1953e28b4fc6SChuck Lever 		int status
1954e28b4fc6SChuck Lever 	),
1955e28b4fc6SChuck Lever 
1956e28b4fc6SChuck Lever 	TP_ARGS(rdma, status),
1957e28b4fc6SChuck Lever 
1958e28b4fc6SChuck Lever 	TP_STRUCT__entry(
1959e28b4fc6SChuck Lever 		__field(int, avail)
1960e28b4fc6SChuck Lever 		__field(int, depth)
1961e28b4fc6SChuck Lever 		__field(int, status)
1962e28b4fc6SChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1963e28b4fc6SChuck Lever 	),
1964e28b4fc6SChuck Lever 
1965e28b4fc6SChuck Lever 	TP_fast_assign(
1966e28b4fc6SChuck Lever 		__entry->avail = atomic_read(&rdma->sc_sq_avail);
1967e28b4fc6SChuck Lever 		__entry->depth = rdma->sc_sq_depth;
1968e28b4fc6SChuck Lever 		__entry->status = status;
1969e28b4fc6SChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1970e28b4fc6SChuck Lever 	),
1971e28b4fc6SChuck Lever 
1972e28b4fc6SChuck Lever 	TP_printk("addr=%s sc_sq_avail=%d/%d status=%d",
1973e28b4fc6SChuck Lever 		__get_str(addr), __entry->avail, __entry->depth,
1974e28b4fc6SChuck Lever 		__entry->status
1975e28b4fc6SChuck Lever 	)
1976e28b4fc6SChuck Lever );
1977e28b4fc6SChuck Lever 
1978e48f083eSChuck Lever #endif /* _TRACE_RPCRDMA_H */
1979e48f083eSChuck Lever 
1980e48f083eSChuck Lever #include <trace/define_trace.h>
1981