xref: /openbmc/linux/include/trace/events/rpcrdma.h (revision 0dabe948)
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;
1077b020f17SChuck Lever 		__entry->connect_status = r_xprt->rx_ep.rep_connected;
1087b020f17SChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
1097b020f17SChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
1107b020f17SChuck Lever 	),
1117b020f17SChuck Lever 
1127b020f17SChuck Lever 	TP_printk("peer=[%s]:%s r_xprt=%p: rc=%d connect 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(
23158f10ad4SChuck Lever 		__field(const void *, mr)
23258f10ad4SChuck Lever 		__field(unsigned int, status)
23358f10ad4SChuck Lever 		__field(unsigned int, vendor_err)
23458f10ad4SChuck Lever 	),
23558f10ad4SChuck Lever 
23658f10ad4SChuck Lever 	TP_fast_assign(
23758f10ad4SChuck Lever 		__entry->mr = container_of(frwr, struct rpcrdma_mr, frwr);
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(
24384756894SChuck Lever 		"mr=%p: %s (%u/0x%x)",
24484756894SChuck Lever 		__entry->mr, 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(
2772937fedeSChuck Lever 		__field(const void *, mr)
2782937fedeSChuck Lever 		__field(u32, handle)
2792937fedeSChuck Lever 		__field(u32, length)
2802937fedeSChuck Lever 		__field(u64, offset)
281aba11831SChuck Lever 		__field(u32, dir)
2822937fedeSChuck Lever 	),
2832937fedeSChuck Lever 
2842937fedeSChuck Lever 	TP_fast_assign(
2852937fedeSChuck Lever 		__entry->mr = mr;
2862937fedeSChuck Lever 		__entry->handle = mr->mr_handle;
2872937fedeSChuck Lever 		__entry->length = mr->mr_length;
2882937fedeSChuck Lever 		__entry->offset = mr->mr_offset;
289aba11831SChuck Lever 		__entry->dir    = mr->mr_dir;
2902937fedeSChuck Lever 	),
2912937fedeSChuck Lever 
292aba11831SChuck Lever 	TP_printk("mr=%p %u@0x%016llx:0x%08x (%s)",
2932937fedeSChuck Lever 		__entry->mr, __entry->length,
294aba11831SChuck Lever 		(unsigned long long)__entry->offset, __entry->handle,
295aba11831SChuck Lever 		xprtrdma_show_direction(__entry->dir)
2962937fedeSChuck Lever 	)
2972937fedeSChuck Lever );
2982937fedeSChuck Lever 
2992937fedeSChuck Lever #define DEFINE_MR_EVENT(name) \
300d379eaa8SChuck Lever 		DEFINE_EVENT(xprtrdma_mr, xprtrdma_mr_##name, \
3012937fedeSChuck Lever 				TP_PROTO( \
3022937fedeSChuck Lever 					const struct rpcrdma_mr *mr \
3032937fedeSChuck Lever 				), \
3042937fedeSChuck Lever 				TP_ARGS(mr))
3052937fedeSChuck Lever 
306fc1eb807SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_cb_event,
307fc1eb807SChuck Lever 	TP_PROTO(
308fc1eb807SChuck Lever 		const struct rpc_rqst *rqst
309fc1eb807SChuck Lever 	),
310fc1eb807SChuck Lever 
311fc1eb807SChuck Lever 	TP_ARGS(rqst),
312fc1eb807SChuck Lever 
313fc1eb807SChuck Lever 	TP_STRUCT__entry(
314fc1eb807SChuck Lever 		__field(const void *, rqst)
315fc1eb807SChuck Lever 		__field(const void *, rep)
316fc1eb807SChuck Lever 		__field(const void *, req)
317fc1eb807SChuck Lever 		__field(u32, xid)
318fc1eb807SChuck Lever 	),
319fc1eb807SChuck Lever 
320fc1eb807SChuck Lever 	TP_fast_assign(
321fc1eb807SChuck Lever 		__entry->rqst = rqst;
322fc1eb807SChuck Lever 		__entry->req = rpcr_to_rdmar(rqst);
323fc1eb807SChuck Lever 		__entry->rep = rpcr_to_rdmar(rqst)->rl_reply;
324fc1eb807SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
325fc1eb807SChuck Lever 	),
326fc1eb807SChuck Lever 
327fc1eb807SChuck Lever 	TP_printk("xid=0x%08x, rqst=%p req=%p rep=%p",
328fc1eb807SChuck Lever 		__entry->xid, __entry->rqst, __entry->req, __entry->rep
329fc1eb807SChuck Lever 	)
330fc1eb807SChuck Lever );
331fc1eb807SChuck Lever 
332fc1eb807SChuck Lever #define DEFINE_CB_EVENT(name)						\
333fc1eb807SChuck Lever 		DEFINE_EVENT(xprtrdma_cb_event, name,			\
334fc1eb807SChuck Lever 				TP_PROTO(				\
335fc1eb807SChuck Lever 					const struct rpc_rqst *rqst	\
336fc1eb807SChuck Lever 				),					\
337fc1eb807SChuck Lever 				TP_ARGS(rqst))
338fc1eb807SChuck Lever 
339b4a7f91cSChuck Lever /**
340b4744e00SChuck Lever  ** Connection events
341b4744e00SChuck Lever  **/
342b4744e00SChuck Lever 
343ae38288eSChuck Lever TRACE_EVENT(xprtrdma_cm_event,
344b4744e00SChuck Lever 	TP_PROTO(
345b4744e00SChuck Lever 		const struct rpcrdma_xprt *r_xprt,
346b4744e00SChuck Lever 		struct rdma_cm_event *event
347b4744e00SChuck Lever 	),
348b4744e00SChuck Lever 
349b4744e00SChuck Lever 	TP_ARGS(r_xprt, event),
350b4744e00SChuck Lever 
351b4744e00SChuck Lever 	TP_STRUCT__entry(
352b4744e00SChuck Lever 		__field(const void *, r_xprt)
353b4744e00SChuck Lever 		__field(unsigned int, event)
354b4744e00SChuck Lever 		__field(int, status)
355b4744e00SChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
356b4744e00SChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
357b4744e00SChuck Lever 	),
358b4744e00SChuck Lever 
359b4744e00SChuck Lever 	TP_fast_assign(
360b4744e00SChuck Lever 		__entry->r_xprt = r_xprt;
361b4744e00SChuck Lever 		__entry->event = event->event;
362b4744e00SChuck Lever 		__entry->status = event->status;
363b4744e00SChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
364b4744e00SChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
365b4744e00SChuck Lever 	),
366b4744e00SChuck Lever 
367b4744e00SChuck Lever 	TP_printk("peer=[%s]:%s r_xprt=%p: %s (%u/%d)",
368b4744e00SChuck Lever 		__get_str(addr), __get_str(port),
369b4744e00SChuck Lever 		__entry->r_xprt, rdma_show_cm_event(__entry->event),
370b4744e00SChuck Lever 		__entry->event, __entry->status
371b4744e00SChuck Lever 	)
372b4744e00SChuck Lever );
373b4744e00SChuck Lever 
374f54c870dSChuck Lever TRACE_EVENT(xprtrdma_inline_thresh,
375f54c870dSChuck Lever 	TP_PROTO(
376f54c870dSChuck Lever 		const struct rpcrdma_xprt *r_xprt
377f54c870dSChuck Lever 	),
378f54c870dSChuck Lever 
379f54c870dSChuck Lever 	TP_ARGS(r_xprt),
380f54c870dSChuck Lever 
381f54c870dSChuck Lever 	TP_STRUCT__entry(
382f54c870dSChuck Lever 		__field(const void *, r_xprt)
383f54c870dSChuck Lever 		__field(unsigned int, inline_send)
384f54c870dSChuck Lever 		__field(unsigned int, inline_recv)
385f54c870dSChuck Lever 		__field(unsigned int, max_send)
386f54c870dSChuck Lever 		__field(unsigned int, max_recv)
387f54c870dSChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
388f54c870dSChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
389f54c870dSChuck Lever 	),
390f54c870dSChuck Lever 
391f54c870dSChuck Lever 	TP_fast_assign(
392f54c870dSChuck Lever 		const struct rpcrdma_ep *ep = &r_xprt->rx_ep;
393f54c870dSChuck Lever 
394f54c870dSChuck Lever 		__entry->r_xprt = r_xprt;
395f54c870dSChuck Lever 		__entry->inline_send = ep->rep_inline_send;
396f54c870dSChuck Lever 		__entry->inline_recv = ep->rep_inline_recv;
397f54c870dSChuck Lever 		__entry->max_send = ep->rep_max_inline_send;
398f54c870dSChuck Lever 		__entry->max_recv = ep->rep_max_inline_recv;
399f54c870dSChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
400f54c870dSChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
401f54c870dSChuck Lever 	),
402f54c870dSChuck Lever 
403f54c870dSChuck Lever 	TP_printk("peer=[%s]:%s r_xprt=%p neg send/recv=%u/%u, calc send/recv=%u/%u",
404f54c870dSChuck Lever 		__get_str(addr), __get_str(port), __entry->r_xprt,
405f54c870dSChuck Lever 		__entry->inline_send, __entry->inline_recv,
406f54c870dSChuck Lever 		__entry->max_send, __entry->max_recv
407f54c870dSChuck Lever 	)
408f54c870dSChuck Lever );
409f54c870dSChuck Lever 
4107b020f17SChuck Lever DEFINE_CONN_EVENT(connect);
4117b020f17SChuck Lever DEFINE_CONN_EVENT(disconnect);
4127b020f17SChuck Lever 
4137b020f17SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_create);
4147b020f17SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_op_destroy);
4157b020f17SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_remove);
4167b020f17SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_reinsert);
4177b020f17SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_op_inject_dsc);
4187b020f17SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_op_close);
419a52c23b8SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_op_setport);
4207b020f17SChuck Lever 
4217b020f17SChuck Lever TRACE_EVENT(xprtrdma_op_connect,
422b4744e00SChuck Lever 	TP_PROTO(
423b4744e00SChuck Lever 		const struct rpcrdma_xprt *r_xprt,
4247b020f17SChuck Lever 		unsigned long delay
425b4744e00SChuck Lever 	),
426b4744e00SChuck Lever 
4277b020f17SChuck Lever 	TP_ARGS(r_xprt, delay),
428b4744e00SChuck Lever 
429b4744e00SChuck Lever 	TP_STRUCT__entry(
430b4744e00SChuck Lever 		__field(const void *, r_xprt)
4317b020f17SChuck Lever 		__field(unsigned long, delay)
432b4744e00SChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
433b4744e00SChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
434b4744e00SChuck Lever 	),
435b4744e00SChuck Lever 
436b4744e00SChuck Lever 	TP_fast_assign(
437b4744e00SChuck Lever 		__entry->r_xprt = r_xprt;
4387b020f17SChuck Lever 		__entry->delay = delay;
439b4744e00SChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
440b4744e00SChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
441b4744e00SChuck Lever 	),
442b4744e00SChuck Lever 
4437b020f17SChuck Lever 	TP_printk("peer=[%s]:%s r_xprt=%p delay=%lu",
4447b020f17SChuck Lever 		__get_str(addr), __get_str(port), __entry->r_xprt,
4457b020f17SChuck Lever 		__entry->delay
446b4744e00SChuck Lever 	)
447b4744e00SChuck Lever );
448b4744e00SChuck Lever 
449b4744e00SChuck Lever 
450675dd90aSChuck Lever TRACE_EVENT(xprtrdma_op_set_cto,
451675dd90aSChuck Lever 	TP_PROTO(
452675dd90aSChuck Lever 		const struct rpcrdma_xprt *r_xprt,
453675dd90aSChuck Lever 		unsigned long connect,
454675dd90aSChuck Lever 		unsigned long reconnect
455675dd90aSChuck Lever 	),
456675dd90aSChuck Lever 
457675dd90aSChuck Lever 	TP_ARGS(r_xprt, connect, reconnect),
458675dd90aSChuck Lever 
459675dd90aSChuck Lever 	TP_STRUCT__entry(
460675dd90aSChuck Lever 		__field(const void *, r_xprt)
461675dd90aSChuck Lever 		__field(unsigned long, connect)
462675dd90aSChuck Lever 		__field(unsigned long, reconnect)
463675dd90aSChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
464675dd90aSChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
465675dd90aSChuck Lever 	),
466675dd90aSChuck Lever 
467675dd90aSChuck Lever 	TP_fast_assign(
468675dd90aSChuck Lever 		__entry->r_xprt = r_xprt;
469675dd90aSChuck Lever 		__entry->connect = connect;
470675dd90aSChuck Lever 		__entry->reconnect = reconnect;
471675dd90aSChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
472675dd90aSChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
473675dd90aSChuck Lever 	),
474675dd90aSChuck Lever 
475675dd90aSChuck Lever 	TP_printk("peer=[%s]:%s r_xprt=%p: connect=%lu reconnect=%lu",
476675dd90aSChuck Lever 		__get_str(addr), __get_str(port), __entry->r_xprt,
477675dd90aSChuck Lever 		__entry->connect / HZ, __entry->reconnect / HZ
478675dd90aSChuck Lever 	)
479675dd90aSChuck Lever );
480675dd90aSChuck Lever 
481f9521d53SChuck Lever TRACE_EVENT(xprtrdma_qp_event,
482643cf323SChuck Lever 	TP_PROTO(
483643cf323SChuck Lever 		const struct rpcrdma_xprt *r_xprt,
484643cf323SChuck Lever 		const struct ib_event *event
485643cf323SChuck Lever 	),
486643cf323SChuck Lever 
487643cf323SChuck Lever 	TP_ARGS(r_xprt, event),
488643cf323SChuck Lever 
489643cf323SChuck Lever 	TP_STRUCT__entry(
490643cf323SChuck Lever 		__field(const void *, r_xprt)
491643cf323SChuck Lever 		__field(unsigned int, event)
492643cf323SChuck Lever 		__string(name, event->device->name)
493643cf323SChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
494643cf323SChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
495643cf323SChuck Lever 	),
496643cf323SChuck Lever 
497643cf323SChuck Lever 	TP_fast_assign(
498643cf323SChuck Lever 		__entry->r_xprt = r_xprt;
499643cf323SChuck Lever 		__entry->event = event->event;
500643cf323SChuck Lever 		__assign_str(name, event->device->name);
501643cf323SChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
502643cf323SChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
503643cf323SChuck Lever 	),
504643cf323SChuck Lever 
505643cf323SChuck Lever 	TP_printk("peer=[%s]:%s r_xprt=%p: dev %s: %s (%u)",
506643cf323SChuck Lever 		__get_str(addr), __get_str(port), __entry->r_xprt,
507643cf323SChuck Lever 		__get_str(name), rdma_show_ib_event(__entry->event),
508643cf323SChuck Lever 		__entry->event
509643cf323SChuck Lever 	)
510643cf323SChuck Lever );
511643cf323SChuck Lever 
512b4744e00SChuck Lever /**
513ab03eff5SChuck Lever  ** Call events
514ab03eff5SChuck Lever  **/
515ab03eff5SChuck Lever 
5161c443effSChuck Lever TRACE_EVENT(xprtrdma_createmrs,
5171c443effSChuck Lever 	TP_PROTO(
5181c443effSChuck Lever 		const struct rpcrdma_xprt *r_xprt,
5191c443effSChuck Lever 		unsigned int count
5201c443effSChuck Lever 	),
5211c443effSChuck Lever 
5221c443effSChuck Lever 	TP_ARGS(r_xprt, count),
5231c443effSChuck Lever 
5241c443effSChuck Lever 	TP_STRUCT__entry(
5251c443effSChuck Lever 		__field(const void *, r_xprt)
5266dc6ec9eSChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
5276dc6ec9eSChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
5281c443effSChuck Lever 		__field(unsigned int, count)
5291c443effSChuck Lever 	),
5301c443effSChuck Lever 
5311c443effSChuck Lever 	TP_fast_assign(
5321c443effSChuck Lever 		__entry->r_xprt = r_xprt;
5331c443effSChuck Lever 		__entry->count = count;
5346dc6ec9eSChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
5356dc6ec9eSChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
5361c443effSChuck Lever 	),
5371c443effSChuck Lever 
5386dc6ec9eSChuck Lever 	TP_printk("peer=[%s]:%s r_xprt=%p: created %u MRs",
5396dc6ec9eSChuck Lever 		__get_str(addr), __get_str(port), __entry->r_xprt,
5406dc6ec9eSChuck Lever 		__entry->count
5416dc6ec9eSChuck Lever 	)
5426dc6ec9eSChuck Lever );
5436dc6ec9eSChuck Lever 
5446dc6ec9eSChuck Lever TRACE_EVENT(xprtrdma_mr_get,
5456dc6ec9eSChuck Lever 	TP_PROTO(
5466dc6ec9eSChuck Lever 		const struct rpcrdma_req *req
5476dc6ec9eSChuck Lever 	),
5486dc6ec9eSChuck Lever 
5496dc6ec9eSChuck Lever 	TP_ARGS(req),
5506dc6ec9eSChuck Lever 
5516dc6ec9eSChuck Lever 	TP_STRUCT__entry(
5526dc6ec9eSChuck Lever 		__field(const void *, req)
5536dc6ec9eSChuck Lever 		__field(unsigned int, task_id)
5546dc6ec9eSChuck Lever 		__field(unsigned int, client_id)
5556dc6ec9eSChuck Lever 		__field(u32, xid)
5566dc6ec9eSChuck Lever 	),
5576dc6ec9eSChuck Lever 
5586dc6ec9eSChuck Lever 	TP_fast_assign(
5596dc6ec9eSChuck Lever 		const struct rpc_rqst *rqst = &req->rl_slot;
5606dc6ec9eSChuck Lever 
5616dc6ec9eSChuck Lever 		__entry->req = req;
5626dc6ec9eSChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
5636dc6ec9eSChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
5646dc6ec9eSChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
5656dc6ec9eSChuck Lever 	),
5666dc6ec9eSChuck Lever 
5676dc6ec9eSChuck Lever 	TP_printk("task:%u@%u xid=0x%08x req=%p",
5686dc6ec9eSChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
5696dc6ec9eSChuck Lever 		__entry->req
5701c443effSChuck Lever 	)
5711c443effSChuck Lever );
5721c443effSChuck Lever 
5733b39f52aSChuck Lever TRACE_EVENT(xprtrdma_nomrs,
5743b39f52aSChuck Lever 	TP_PROTO(
5753b39f52aSChuck Lever 		const struct rpcrdma_req *req
5763b39f52aSChuck Lever 	),
5773b39f52aSChuck Lever 
5783b39f52aSChuck Lever 	TP_ARGS(req),
5793b39f52aSChuck Lever 
5803b39f52aSChuck Lever 	TP_STRUCT__entry(
5813b39f52aSChuck Lever 		__field(const void *, req)
5823b39f52aSChuck Lever 		__field(unsigned int, task_id)
5833b39f52aSChuck Lever 		__field(unsigned int, client_id)
5843b39f52aSChuck Lever 		__field(u32, xid)
5853b39f52aSChuck Lever 	),
5863b39f52aSChuck Lever 
5873b39f52aSChuck Lever 	TP_fast_assign(
5883b39f52aSChuck Lever 		const struct rpc_rqst *rqst = &req->rl_slot;
5893b39f52aSChuck Lever 
5903b39f52aSChuck Lever 		__entry->req = req;
5913b39f52aSChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
5923b39f52aSChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
5933b39f52aSChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
5943b39f52aSChuck Lever 	),
5953b39f52aSChuck Lever 
5963b39f52aSChuck Lever 	TP_printk("task:%u@%u xid=0x%08x req=%p",
5973b39f52aSChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
5983b39f52aSChuck Lever 		__entry->req
5993b39f52aSChuck Lever 	)
6003b39f52aSChuck Lever );
6011c443effSChuck Lever 
602aba11831SChuck Lever DEFINE_RDCH_EVENT(read);
603aba11831SChuck Lever DEFINE_WRCH_EVENT(write);
604aba11831SChuck Lever DEFINE_WRCH_EVENT(reply);
60558f10ad4SChuck Lever 
606ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch);
607614f3c96SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch_pullup);
608614f3c96SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch_mapped);
609ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_readch);
610ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_areadch);
611ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_writech);
612ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_replych);
613ab03eff5SChuck Lever 
614ab03eff5SChuck Lever #define xprtrdma_show_chunktype(x)					\
615ab03eff5SChuck Lever 		__print_symbolic(x,					\
616ab03eff5SChuck Lever 				{ rpcrdma_noch, "inline" },		\
617614f3c96SChuck Lever 				{ rpcrdma_noch_pullup, "pullup" },	\
618614f3c96SChuck Lever 				{ rpcrdma_noch_mapped, "mapped" },	\
619ab03eff5SChuck Lever 				{ rpcrdma_readch, "read list" },	\
620ab03eff5SChuck Lever 				{ rpcrdma_areadch, "*read list" },	\
621ab03eff5SChuck Lever 				{ rpcrdma_writech, "write list" },	\
622ab03eff5SChuck Lever 				{ rpcrdma_replych, "reply chunk" })
623ab03eff5SChuck Lever 
624ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_marshal,
625ab03eff5SChuck Lever 	TP_PROTO(
6261310051cSChuck Lever 		const struct rpcrdma_req *req,
627ab03eff5SChuck Lever 		unsigned int rtype,
628ab03eff5SChuck Lever 		unsigned int wtype
629ab03eff5SChuck Lever 	),
630ab03eff5SChuck Lever 
6311310051cSChuck Lever 	TP_ARGS(req, rtype, wtype),
632ab03eff5SChuck Lever 
633ab03eff5SChuck Lever 	TP_STRUCT__entry(
634ab03eff5SChuck Lever 		__field(unsigned int, task_id)
635ab03eff5SChuck Lever 		__field(unsigned int, client_id)
636ab03eff5SChuck Lever 		__field(u32, xid)
637ab03eff5SChuck Lever 		__field(unsigned int, hdrlen)
638ab03eff5SChuck Lever 		__field(unsigned int, headlen)
639ab03eff5SChuck Lever 		__field(unsigned int, pagelen)
640ab03eff5SChuck Lever 		__field(unsigned int, taillen)
641ab03eff5SChuck Lever 		__field(unsigned int, rtype)
642ab03eff5SChuck Lever 		__field(unsigned int, wtype)
643ab03eff5SChuck Lever 	),
644ab03eff5SChuck Lever 
645ab03eff5SChuck Lever 	TP_fast_assign(
6461310051cSChuck Lever 		const struct rpc_rqst *rqst = &req->rl_slot;
6471310051cSChuck Lever 
648ab03eff5SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
649ab03eff5SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
650ab03eff5SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
6511310051cSChuck Lever 		__entry->hdrlen = req->rl_hdrbuf.len;
652ab03eff5SChuck Lever 		__entry->headlen = rqst->rq_snd_buf.head[0].iov_len;
653ab03eff5SChuck Lever 		__entry->pagelen = rqst->rq_snd_buf.page_len;
654ab03eff5SChuck Lever 		__entry->taillen = rqst->rq_snd_buf.tail[0].iov_len;
655ab03eff5SChuck Lever 		__entry->rtype = rtype;
656ab03eff5SChuck Lever 		__entry->wtype = wtype;
657ab03eff5SChuck Lever 	),
658ab03eff5SChuck Lever 
659ab03eff5SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x: hdr=%u xdr=%u/%u/%u %s/%s",
660ab03eff5SChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
661ab03eff5SChuck Lever 		__entry->hdrlen,
662ab03eff5SChuck Lever 		__entry->headlen, __entry->pagelen, __entry->taillen,
663ab03eff5SChuck Lever 		xprtrdma_show_chunktype(__entry->rtype),
664ab03eff5SChuck Lever 		xprtrdma_show_chunktype(__entry->wtype)
665ab03eff5SChuck Lever 	)
666ab03eff5SChuck Lever );
667ab03eff5SChuck Lever 
66817e4c443SChuck Lever TRACE_EVENT(xprtrdma_marshal_failed,
66917e4c443SChuck Lever 	TP_PROTO(const struct rpc_rqst *rqst,
67017e4c443SChuck Lever 		 int ret
67117e4c443SChuck Lever 	),
67217e4c443SChuck Lever 
67317e4c443SChuck Lever 	TP_ARGS(rqst, ret),
67417e4c443SChuck Lever 
67517e4c443SChuck Lever 	TP_STRUCT__entry(
67617e4c443SChuck Lever 		__field(unsigned int, task_id)
67717e4c443SChuck Lever 		__field(unsigned int, client_id)
67817e4c443SChuck Lever 		__field(u32, xid)
67917e4c443SChuck Lever 		__field(int, ret)
68017e4c443SChuck Lever 	),
68117e4c443SChuck Lever 
68217e4c443SChuck Lever 	TP_fast_assign(
68317e4c443SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
68417e4c443SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
68517e4c443SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
68617e4c443SChuck Lever 		__entry->ret = ret;
68717e4c443SChuck Lever 	),
68817e4c443SChuck Lever 
68917e4c443SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x: ret=%d",
69017e4c443SChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
69117e4c443SChuck Lever 		__entry->ret
69217e4c443SChuck Lever 	)
69317e4c443SChuck Lever );
69417e4c443SChuck Lever 
69505eb06d8SChuck Lever TRACE_EVENT(xprtrdma_prepsend_failed,
69605eb06d8SChuck Lever 	TP_PROTO(const struct rpc_rqst *rqst,
69705eb06d8SChuck Lever 		 int ret
69805eb06d8SChuck Lever 	),
69905eb06d8SChuck Lever 
70005eb06d8SChuck Lever 	TP_ARGS(rqst, ret),
70105eb06d8SChuck Lever 
70205eb06d8SChuck Lever 	TP_STRUCT__entry(
70305eb06d8SChuck Lever 		__field(unsigned int, task_id)
70405eb06d8SChuck Lever 		__field(unsigned int, client_id)
70505eb06d8SChuck Lever 		__field(u32, xid)
70605eb06d8SChuck Lever 		__field(int, ret)
70705eb06d8SChuck Lever 	),
70805eb06d8SChuck Lever 
70905eb06d8SChuck Lever 	TP_fast_assign(
71005eb06d8SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
71105eb06d8SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
71205eb06d8SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
71305eb06d8SChuck Lever 		__entry->ret = ret;
71405eb06d8SChuck Lever 	),
71505eb06d8SChuck Lever 
71605eb06d8SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x: ret=%d",
71705eb06d8SChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
71805eb06d8SChuck Lever 		__entry->ret
71905eb06d8SChuck Lever 	)
72005eb06d8SChuck Lever );
72105eb06d8SChuck Lever 
722ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_post_send,
723ab03eff5SChuck Lever 	TP_PROTO(
724ab03eff5SChuck Lever 		const struct rpcrdma_req *req,
725ab03eff5SChuck Lever 		int status
726ab03eff5SChuck Lever 	),
727ab03eff5SChuck Lever 
728ab03eff5SChuck Lever 	TP_ARGS(req, status),
729ab03eff5SChuck Lever 
730ab03eff5SChuck Lever 	TP_STRUCT__entry(
731ab03eff5SChuck Lever 		__field(const void *, req)
732cb586decSChuck Lever 		__field(const void *, sc)
7330c77668dSChuck Lever 		__field(unsigned int, task_id)
7340c77668dSChuck Lever 		__field(unsigned int, client_id)
735ab03eff5SChuck Lever 		__field(int, num_sge)
736470443e0SChuck Lever 		__field(int, signaled)
737ab03eff5SChuck Lever 		__field(int, status)
738ab03eff5SChuck Lever 	),
739ab03eff5SChuck Lever 
740ab03eff5SChuck Lever 	TP_fast_assign(
7410c77668dSChuck Lever 		const struct rpc_rqst *rqst = &req->rl_slot;
7420c77668dSChuck Lever 
7430c77668dSChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
74410694ac9SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client ?
74510694ac9SChuck Lever 				     rqst->rq_task->tk_client->cl_clid : -1;
746ab03eff5SChuck Lever 		__entry->req = req;
747cb586decSChuck Lever 		__entry->sc = req->rl_sendctx;
748dc15c3d5SChuck Lever 		__entry->num_sge = req->rl_wr.num_sge;
749dc15c3d5SChuck Lever 		__entry->signaled = req->rl_wr.send_flags & IB_SEND_SIGNALED;
750ab03eff5SChuck Lever 		__entry->status = status;
751ab03eff5SChuck Lever 	),
752ab03eff5SChuck Lever 
753cb586decSChuck Lever 	TP_printk("task:%u@%u req=%p sc=%p (%d SGE%s) %sstatus=%d",
7540c77668dSChuck Lever 		__entry->task_id, __entry->client_id,
755cb586decSChuck Lever 		__entry->req, __entry->sc, __entry->num_sge,
7560c77668dSChuck Lever 		(__entry->num_sge == 1 ? "" : "s"),
7570c77668dSChuck Lever 		(__entry->signaled ? "signaled " : ""),
758ab03eff5SChuck Lever 		__entry->status
759ab03eff5SChuck Lever 	)
760ab03eff5SChuck Lever );
761ab03eff5SChuck Lever 
762b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_post_recv,
763b4a7f91cSChuck Lever 	TP_PROTO(
7642dfdcd88SChuck Lever 		const struct rpcrdma_rep *rep
765b4a7f91cSChuck Lever 	),
766b4a7f91cSChuck Lever 
7672dfdcd88SChuck Lever 	TP_ARGS(rep),
768b4a7f91cSChuck Lever 
769b4a7f91cSChuck Lever 	TP_STRUCT__entry(
7702dfdcd88SChuck Lever 		__field(const void *, rep)
771b4a7f91cSChuck Lever 	),
772b4a7f91cSChuck Lever 
773b4a7f91cSChuck Lever 	TP_fast_assign(
7742dfdcd88SChuck Lever 		__entry->rep = rep;
775b4a7f91cSChuck Lever 	),
776b4a7f91cSChuck Lever 
7772dfdcd88SChuck Lever 	TP_printk("rep=%p",
7782dfdcd88SChuck Lever 		__entry->rep
779b4a7f91cSChuck Lever 	)
780b4a7f91cSChuck Lever );
781b4a7f91cSChuck Lever 
7827c8d9e7cSChuck Lever TRACE_EVENT(xprtrdma_post_recvs,
7837c8d9e7cSChuck Lever 	TP_PROTO(
7847c8d9e7cSChuck Lever 		const struct rpcrdma_xprt *r_xprt,
7857c8d9e7cSChuck Lever 		unsigned int count,
7867c8d9e7cSChuck Lever 		int status
7877c8d9e7cSChuck Lever 	),
7887c8d9e7cSChuck Lever 
7897c8d9e7cSChuck Lever 	TP_ARGS(r_xprt, count, status),
7907c8d9e7cSChuck Lever 
7917c8d9e7cSChuck Lever 	TP_STRUCT__entry(
7927c8d9e7cSChuck Lever 		__field(const void *, r_xprt)
7937c8d9e7cSChuck Lever 		__field(unsigned int, count)
7947c8d9e7cSChuck Lever 		__field(int, status)
7957c8d9e7cSChuck Lever 		__field(int, posted)
7967c8d9e7cSChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
7977c8d9e7cSChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
7987c8d9e7cSChuck Lever 	),
7997c8d9e7cSChuck Lever 
8007c8d9e7cSChuck Lever 	TP_fast_assign(
8017c8d9e7cSChuck Lever 		__entry->r_xprt = r_xprt;
8027c8d9e7cSChuck Lever 		__entry->count = count;
8037c8d9e7cSChuck Lever 		__entry->status = status;
8046ceea368SChuck Lever 		__entry->posted = r_xprt->rx_ep.rep_receive_count;
8057c8d9e7cSChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
8067c8d9e7cSChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
8077c8d9e7cSChuck Lever 	),
8087c8d9e7cSChuck Lever 
8097c8d9e7cSChuck Lever 	TP_printk("peer=[%s]:%s r_xprt=%p: %u new recvs, %d active (rc %d)",
8107c8d9e7cSChuck Lever 		__get_str(addr), __get_str(port), __entry->r_xprt,
8117c8d9e7cSChuck Lever 		__entry->count, __entry->posted, __entry->status
812ab03eff5SChuck Lever 	)
813ab03eff5SChuck Lever );
814ab03eff5SChuck Lever 
8154b93dab3SChuck Lever TRACE_EVENT(xprtrdma_post_linv,
8164b93dab3SChuck Lever 	TP_PROTO(
8174b93dab3SChuck Lever 		const struct rpcrdma_req *req,
8184b93dab3SChuck Lever 		int status
8194b93dab3SChuck Lever 	),
8204b93dab3SChuck Lever 
8214b93dab3SChuck Lever 	TP_ARGS(req, status),
8224b93dab3SChuck Lever 
8234b93dab3SChuck Lever 	TP_STRUCT__entry(
8244b93dab3SChuck Lever 		__field(const void *, req)
8254b93dab3SChuck Lever 		__field(int, status)
8264b93dab3SChuck Lever 		__field(u32, xid)
8274b93dab3SChuck Lever 	),
8284b93dab3SChuck Lever 
8294b93dab3SChuck Lever 	TP_fast_assign(
8304b93dab3SChuck Lever 		__entry->req = req;
8314b93dab3SChuck Lever 		__entry->status = status;
8324b93dab3SChuck Lever 		__entry->xid = be32_to_cpu(req->rl_slot.rq_xid);
8334b93dab3SChuck Lever 	),
8344b93dab3SChuck Lever 
8354b93dab3SChuck Lever 	TP_printk("req=%p xid=0x%08x status=%d",
8364b93dab3SChuck Lever 		__entry->req, __entry->xid, __entry->status
8374b93dab3SChuck Lever 	)
8384b93dab3SChuck Lever );
8394b93dab3SChuck Lever 
840ab03eff5SChuck Lever /**
841ab03eff5SChuck Lever  ** Completion events
842ab03eff5SChuck Lever  **/
843ab03eff5SChuck Lever 
844ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_wc_send,
845ab03eff5SChuck Lever 	TP_PROTO(
846ab03eff5SChuck Lever 		const struct rpcrdma_sendctx *sc,
847ab03eff5SChuck Lever 		const struct ib_wc *wc
848ab03eff5SChuck Lever 	),
849ab03eff5SChuck Lever 
850ab03eff5SChuck Lever 	TP_ARGS(sc, wc),
851ab03eff5SChuck Lever 
852ab03eff5SChuck Lever 	TP_STRUCT__entry(
853ab03eff5SChuck Lever 		__field(const void *, req)
854cb586decSChuck Lever 		__field(const void *, sc)
855ab03eff5SChuck Lever 		__field(unsigned int, unmap_count)
856ab03eff5SChuck Lever 		__field(unsigned int, status)
857ab03eff5SChuck Lever 		__field(unsigned int, vendor_err)
858ab03eff5SChuck Lever 	),
859ab03eff5SChuck Lever 
860ab03eff5SChuck Lever 	TP_fast_assign(
861ab03eff5SChuck Lever 		__entry->req = sc->sc_req;
862cb586decSChuck Lever 		__entry->sc = sc;
863ab03eff5SChuck Lever 		__entry->unmap_count = sc->sc_unmap_count;
864ab03eff5SChuck Lever 		__entry->status = wc->status;
865ab03eff5SChuck Lever 		__entry->vendor_err = __entry->status ? wc->vendor_err : 0;
866ab03eff5SChuck Lever 	),
867ab03eff5SChuck Lever 
868cb586decSChuck Lever 	TP_printk("req=%p sc=%p unmapped=%u: %s (%u/0x%x)",
869cb586decSChuck Lever 		__entry->req, __entry->sc, __entry->unmap_count,
870ab03eff5SChuck Lever 		rdma_show_wc_status(__entry->status),
871ab03eff5SChuck Lever 		__entry->status, __entry->vendor_err
872ab03eff5SChuck Lever 	)
873ab03eff5SChuck Lever );
874ab03eff5SChuck Lever 
875b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_wc_receive,
876b4a7f91cSChuck Lever 	TP_PROTO(
877b4a7f91cSChuck Lever 		const struct ib_wc *wc
878b4a7f91cSChuck Lever 	),
879b4a7f91cSChuck Lever 
8800e0b854cSChuck Lever 	TP_ARGS(wc),
881b4a7f91cSChuck Lever 
882b4a7f91cSChuck Lever 	TP_STRUCT__entry(
8832dfdcd88SChuck Lever 		__field(const void *, rep)
8840e0b854cSChuck Lever 		__field(u32, byte_len)
885b4a7f91cSChuck Lever 		__field(unsigned int, status)
8860e0b854cSChuck Lever 		__field(u32, vendor_err)
887b4a7f91cSChuck Lever 	),
888b4a7f91cSChuck Lever 
889b4a7f91cSChuck Lever 	TP_fast_assign(
8902dfdcd88SChuck Lever 		__entry->rep = container_of(wc->wr_cqe, struct rpcrdma_rep,
8912dfdcd88SChuck Lever 					    rr_cqe);
892b4a7f91cSChuck Lever 		__entry->status = wc->status;
8930e0b854cSChuck Lever 		if (wc->status) {
8940e0b854cSChuck Lever 			__entry->byte_len = 0;
8950e0b854cSChuck Lever 			__entry->vendor_err = wc->vendor_err;
8960e0b854cSChuck Lever 		} else {
8970e0b854cSChuck Lever 			__entry->byte_len = wc->byte_len;
8980e0b854cSChuck Lever 			__entry->vendor_err = 0;
8990e0b854cSChuck Lever 		}
900b4a7f91cSChuck Lever 	),
901b4a7f91cSChuck Lever 
9022dfdcd88SChuck Lever 	TP_printk("rep=%p %u bytes: %s (%u/0x%x)",
9032dfdcd88SChuck Lever 		__entry->rep, __entry->byte_len,
904b4a7f91cSChuck Lever 		rdma_show_wc_status(__entry->status),
905b4a7f91cSChuck Lever 		__entry->status, __entry->vendor_err
906b4a7f91cSChuck Lever 	)
907b4a7f91cSChuck Lever );
908b4a7f91cSChuck Lever 
90958f10ad4SChuck Lever DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_fastreg);
9102937fedeSChuck Lever DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_li);
9112937fedeSChuck Lever DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_li_wake);
912d8099fedSChuck Lever DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_li_done);
9132937fedeSChuck Lever 
91453b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_alloc,
91553b2c1cbSChuck Lever 	TP_PROTO(
91653b2c1cbSChuck Lever 		const struct rpcrdma_mr *mr,
91753b2c1cbSChuck Lever 		int rc
91853b2c1cbSChuck Lever 	),
91953b2c1cbSChuck Lever 
92053b2c1cbSChuck Lever 	TP_ARGS(mr, rc),
92153b2c1cbSChuck Lever 
92253b2c1cbSChuck Lever 	TP_STRUCT__entry(
92353b2c1cbSChuck Lever 		__field(const void *, mr)
92453b2c1cbSChuck Lever 		__field(int, rc)
92553b2c1cbSChuck Lever 	),
92653b2c1cbSChuck Lever 
92753b2c1cbSChuck Lever 	TP_fast_assign(
92853b2c1cbSChuck Lever 		__entry->mr = mr;
92953b2c1cbSChuck Lever 		__entry->rc	= rc;
93053b2c1cbSChuck Lever 	),
93153b2c1cbSChuck Lever 
93253b2c1cbSChuck Lever 	TP_printk("mr=%p: rc=%d",
93353b2c1cbSChuck Lever 		__entry->mr, __entry->rc
93453b2c1cbSChuck Lever 	)
93553b2c1cbSChuck Lever );
93653b2c1cbSChuck Lever 
93753b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_dereg,
93853b2c1cbSChuck Lever 	TP_PROTO(
93953b2c1cbSChuck Lever 		const struct rpcrdma_mr *mr,
94053b2c1cbSChuck Lever 		int rc
94153b2c1cbSChuck Lever 	),
94253b2c1cbSChuck Lever 
94353b2c1cbSChuck Lever 	TP_ARGS(mr, rc),
94453b2c1cbSChuck Lever 
94553b2c1cbSChuck Lever 	TP_STRUCT__entry(
94653b2c1cbSChuck Lever 		__field(const void *, mr)
94753b2c1cbSChuck Lever 		__field(u32, handle)
94853b2c1cbSChuck Lever 		__field(u32, length)
94953b2c1cbSChuck Lever 		__field(u64, offset)
95053b2c1cbSChuck Lever 		__field(u32, dir)
95153b2c1cbSChuck Lever 		__field(int, rc)
95253b2c1cbSChuck Lever 	),
95353b2c1cbSChuck Lever 
95453b2c1cbSChuck Lever 	TP_fast_assign(
95553b2c1cbSChuck Lever 		__entry->mr = mr;
95653b2c1cbSChuck Lever 		__entry->handle = mr->mr_handle;
95753b2c1cbSChuck Lever 		__entry->length = mr->mr_length;
95853b2c1cbSChuck Lever 		__entry->offset = mr->mr_offset;
95953b2c1cbSChuck Lever 		__entry->dir    = mr->mr_dir;
96053b2c1cbSChuck Lever 		__entry->rc	= rc;
96153b2c1cbSChuck Lever 	),
96253b2c1cbSChuck Lever 
96353b2c1cbSChuck Lever 	TP_printk("mr=%p %u@0x%016llx:0x%08x (%s): rc=%d",
96453b2c1cbSChuck Lever 		__entry->mr, __entry->length,
96553b2c1cbSChuck Lever 		(unsigned long long)__entry->offset, __entry->handle,
96653b2c1cbSChuck Lever 		xprtrdma_show_direction(__entry->dir),
96753b2c1cbSChuck Lever 		__entry->rc
96853b2c1cbSChuck Lever 	)
96953b2c1cbSChuck Lever );
97053b2c1cbSChuck Lever 
97153b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_sgerr,
97253b2c1cbSChuck Lever 	TP_PROTO(
97353b2c1cbSChuck Lever 		const struct rpcrdma_mr *mr,
97453b2c1cbSChuck Lever 		int sg_nents
97553b2c1cbSChuck Lever 	),
97653b2c1cbSChuck Lever 
97753b2c1cbSChuck Lever 	TP_ARGS(mr, sg_nents),
97853b2c1cbSChuck Lever 
97953b2c1cbSChuck Lever 	TP_STRUCT__entry(
98053b2c1cbSChuck Lever 		__field(const void *, mr)
98153b2c1cbSChuck Lever 		__field(u64, addr)
98253b2c1cbSChuck Lever 		__field(u32, dir)
98353b2c1cbSChuck Lever 		__field(int, nents)
98453b2c1cbSChuck Lever 	),
98553b2c1cbSChuck Lever 
98653b2c1cbSChuck Lever 	TP_fast_assign(
98753b2c1cbSChuck Lever 		__entry->mr = mr;
98853b2c1cbSChuck Lever 		__entry->addr = mr->mr_sg->dma_address;
98953b2c1cbSChuck Lever 		__entry->dir = mr->mr_dir;
99053b2c1cbSChuck Lever 		__entry->nents = sg_nents;
99153b2c1cbSChuck Lever 	),
99253b2c1cbSChuck Lever 
99353b2c1cbSChuck Lever 	TP_printk("mr=%p dma addr=0x%llx (%s) sg_nents=%d",
99453b2c1cbSChuck Lever 		__entry->mr, __entry->addr,
99553b2c1cbSChuck Lever 		xprtrdma_show_direction(__entry->dir),
99653b2c1cbSChuck Lever 		__entry->nents
99753b2c1cbSChuck Lever 	)
99853b2c1cbSChuck Lever );
99953b2c1cbSChuck Lever 
100053b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_maperr,
100153b2c1cbSChuck Lever 	TP_PROTO(
100253b2c1cbSChuck Lever 		const struct rpcrdma_mr *mr,
100353b2c1cbSChuck Lever 		int num_mapped
100453b2c1cbSChuck Lever 	),
100553b2c1cbSChuck Lever 
100653b2c1cbSChuck Lever 	TP_ARGS(mr, num_mapped),
100753b2c1cbSChuck Lever 
100853b2c1cbSChuck Lever 	TP_STRUCT__entry(
100953b2c1cbSChuck Lever 		__field(const void *, mr)
101053b2c1cbSChuck Lever 		__field(u64, addr)
101153b2c1cbSChuck Lever 		__field(u32, dir)
101253b2c1cbSChuck Lever 		__field(int, num_mapped)
101353b2c1cbSChuck Lever 		__field(int, nents)
101453b2c1cbSChuck Lever 	),
101553b2c1cbSChuck Lever 
101653b2c1cbSChuck Lever 	TP_fast_assign(
101753b2c1cbSChuck Lever 		__entry->mr = mr;
101853b2c1cbSChuck Lever 		__entry->addr = mr->mr_sg->dma_address;
101953b2c1cbSChuck Lever 		__entry->dir = mr->mr_dir;
102053b2c1cbSChuck Lever 		__entry->num_mapped = num_mapped;
102153b2c1cbSChuck Lever 		__entry->nents = mr->mr_nents;
102253b2c1cbSChuck Lever 	),
102353b2c1cbSChuck Lever 
102453b2c1cbSChuck Lever 	TP_printk("mr=%p dma addr=0x%llx (%s) nents=%d of %d",
102553b2c1cbSChuck Lever 		__entry->mr, __entry->addr,
102653b2c1cbSChuck Lever 		xprtrdma_show_direction(__entry->dir),
102753b2c1cbSChuck Lever 		__entry->num_mapped, __entry->nents
102853b2c1cbSChuck Lever 	)
102953b2c1cbSChuck Lever );
103053b2c1cbSChuck Lever 
1031d379eaa8SChuck Lever DEFINE_MR_EVENT(localinv);
1032d379eaa8SChuck Lever DEFINE_MR_EVENT(map);
1033d379eaa8SChuck Lever DEFINE_MR_EVENT(unmap);
1034d379eaa8SChuck Lever DEFINE_MR_EVENT(remoteinv);
1035d379eaa8SChuck Lever DEFINE_MR_EVENT(recycle);
103658f10ad4SChuck Lever 
103753b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_dma_maperr,
103853b2c1cbSChuck Lever 	TP_PROTO(
103953b2c1cbSChuck Lever 		u64 addr
104053b2c1cbSChuck Lever 	),
104153b2c1cbSChuck Lever 
104253b2c1cbSChuck Lever 	TP_ARGS(addr),
104353b2c1cbSChuck Lever 
104453b2c1cbSChuck Lever 	TP_STRUCT__entry(
104553b2c1cbSChuck Lever 		__field(u64, addr)
104653b2c1cbSChuck Lever 	),
104753b2c1cbSChuck Lever 
104853b2c1cbSChuck Lever 	TP_fast_assign(
104953b2c1cbSChuck Lever 		__entry->addr = addr;
105053b2c1cbSChuck Lever 	),
105153b2c1cbSChuck Lever 
105253b2c1cbSChuck Lever 	TP_printk("dma addr=0x%llx\n", __entry->addr)
105353b2c1cbSChuck Lever );
105453b2c1cbSChuck Lever 
1055b4a7f91cSChuck Lever /**
1056b4a7f91cSChuck Lever  ** Reply events
1057b4a7f91cSChuck Lever  **/
1058b4a7f91cSChuck Lever 
1059b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_reply,
1060b4a7f91cSChuck Lever 	TP_PROTO(
1061b4a7f91cSChuck Lever 		const struct rpc_task *task,
1062b4a7f91cSChuck Lever 		const struct rpcrdma_rep *rep,
1063b4a7f91cSChuck Lever 		const struct rpcrdma_req *req,
1064b4a7f91cSChuck Lever 		unsigned int credits
1065b4a7f91cSChuck Lever 	),
1066b4a7f91cSChuck Lever 
1067b4a7f91cSChuck Lever 	TP_ARGS(task, rep, req, credits),
1068b4a7f91cSChuck Lever 
1069b4a7f91cSChuck Lever 	TP_STRUCT__entry(
1070b4a7f91cSChuck Lever 		__field(unsigned int, task_id)
1071b4a7f91cSChuck Lever 		__field(unsigned int, client_id)
1072b4a7f91cSChuck Lever 		__field(const void *, rep)
1073b4a7f91cSChuck Lever 		__field(const void *, req)
1074b4a7f91cSChuck Lever 		__field(u32, xid)
1075b4a7f91cSChuck Lever 		__field(unsigned int, credits)
1076b4a7f91cSChuck Lever 	),
1077b4a7f91cSChuck Lever 
1078b4a7f91cSChuck Lever 	TP_fast_assign(
1079b4a7f91cSChuck Lever 		__entry->task_id = task->tk_pid;
1080b4a7f91cSChuck Lever 		__entry->client_id = task->tk_client->cl_clid;
1081b4a7f91cSChuck Lever 		__entry->rep = rep;
1082b4a7f91cSChuck Lever 		__entry->req = req;
1083b4a7f91cSChuck Lever 		__entry->xid = be32_to_cpu(rep->rr_xid);
1084b4a7f91cSChuck Lever 		__entry->credits = credits;
1085b4a7f91cSChuck Lever 	),
1086b4a7f91cSChuck Lever 
1087b4a7f91cSChuck Lever 	TP_printk("task:%u@%u xid=0x%08x, %u credits, rep=%p -> req=%p",
1088b4a7f91cSChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
1089b4a7f91cSChuck Lever 		__entry->credits, __entry->rep, __entry->req
1090b4a7f91cSChuck Lever 	)
1091b4a7f91cSChuck Lever );
1092b4a7f91cSChuck Lever 
1093b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_defer_cmp,
1094b4a7f91cSChuck Lever 	TP_PROTO(
1095b4a7f91cSChuck Lever 		const struct rpcrdma_rep *rep
1096b4a7f91cSChuck Lever 	),
1097b4a7f91cSChuck Lever 
1098b4a7f91cSChuck Lever 	TP_ARGS(rep),
1099b4a7f91cSChuck Lever 
1100b4a7f91cSChuck Lever 	TP_STRUCT__entry(
1101b4a7f91cSChuck Lever 		__field(unsigned int, task_id)
1102b4a7f91cSChuck Lever 		__field(unsigned int, client_id)
1103b4a7f91cSChuck Lever 		__field(const void *, rep)
1104b4a7f91cSChuck Lever 		__field(u32, xid)
1105b4a7f91cSChuck Lever 	),
1106b4a7f91cSChuck Lever 
1107b4a7f91cSChuck Lever 	TP_fast_assign(
1108b4a7f91cSChuck Lever 		__entry->task_id = rep->rr_rqst->rq_task->tk_pid;
1109b4a7f91cSChuck Lever 		__entry->client_id = rep->rr_rqst->rq_task->tk_client->cl_clid;
1110b4a7f91cSChuck Lever 		__entry->rep = rep;
1111b4a7f91cSChuck Lever 		__entry->xid = be32_to_cpu(rep->rr_xid);
1112b4a7f91cSChuck Lever 	),
1113b4a7f91cSChuck Lever 
1114b4a7f91cSChuck Lever 	TP_printk("task:%u@%u xid=0x%08x rep=%p",
1115b4a7f91cSChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
1116b4a7f91cSChuck Lever 		__entry->rep
1117b4a7f91cSChuck Lever 	)
1118b4a7f91cSChuck Lever );
1119b4a7f91cSChuck Lever 
1120b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_vers);
1121b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_rqst);
1122b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_short);
1123b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_hdr);
1124b4a7f91cSChuck Lever 
1125e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_fixup,
1126e11b7c96SChuck Lever 	TP_PROTO(
1127e11b7c96SChuck Lever 		const struct rpc_rqst *rqst,
1128d4957f01SChuck Lever 		unsigned long fixup
1129e11b7c96SChuck Lever 	),
1130e11b7c96SChuck Lever 
1131d4957f01SChuck Lever 	TP_ARGS(rqst, fixup),
1132e11b7c96SChuck Lever 
1133e11b7c96SChuck Lever 	TP_STRUCT__entry(
1134e11b7c96SChuck Lever 		__field(unsigned int, task_id)
1135e11b7c96SChuck Lever 		__field(unsigned int, client_id)
1136d4957f01SChuck Lever 		__field(unsigned long, fixup)
1137d4957f01SChuck Lever 		__field(size_t, headlen)
1138d4957f01SChuck Lever 		__field(unsigned int, pagelen)
1139d4957f01SChuck Lever 		__field(size_t, taillen)
1140e11b7c96SChuck Lever 	),
1141e11b7c96SChuck Lever 
1142e11b7c96SChuck Lever 	TP_fast_assign(
1143e11b7c96SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
1144e11b7c96SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
1145d4957f01SChuck Lever 		__entry->fixup = fixup;
1146d4957f01SChuck Lever 		__entry->headlen = rqst->rq_rcv_buf.head[0].iov_len;
1147d4957f01SChuck Lever 		__entry->pagelen = rqst->rq_rcv_buf.page_len;
1148d4957f01SChuck Lever 		__entry->taillen = rqst->rq_rcv_buf.tail[0].iov_len;
1149e11b7c96SChuck Lever 	),
1150e11b7c96SChuck Lever 
1151d4957f01SChuck Lever 	TP_printk("task:%u@%u fixup=%lu xdr=%zu/%u/%zu",
1152d4957f01SChuck Lever 		__entry->task_id, __entry->client_id, __entry->fixup,
1153d4957f01SChuck Lever 		__entry->headlen, __entry->pagelen, __entry->taillen
1154e11b7c96SChuck Lever 	)
1155e11b7c96SChuck Lever );
1156e11b7c96SChuck Lever 
1157e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_decode_seg,
1158e11b7c96SChuck Lever 	TP_PROTO(
1159e11b7c96SChuck Lever 		u32 handle,
1160e11b7c96SChuck Lever 		u32 length,
1161e11b7c96SChuck Lever 		u64 offset
1162e11b7c96SChuck Lever 	),
1163e11b7c96SChuck Lever 
1164e11b7c96SChuck Lever 	TP_ARGS(handle, length, offset),
1165e11b7c96SChuck Lever 
1166e11b7c96SChuck Lever 	TP_STRUCT__entry(
1167e11b7c96SChuck Lever 		__field(u32, handle)
1168e11b7c96SChuck Lever 		__field(u32, length)
1169e11b7c96SChuck Lever 		__field(u64, offset)
1170e11b7c96SChuck Lever 	),
1171e11b7c96SChuck Lever 
1172e11b7c96SChuck Lever 	TP_fast_assign(
1173e11b7c96SChuck Lever 		__entry->handle = handle;
1174e11b7c96SChuck Lever 		__entry->length = length;
1175e11b7c96SChuck Lever 		__entry->offset = offset;
1176e11b7c96SChuck Lever 	),
1177e11b7c96SChuck Lever 
1178e11b7c96SChuck Lever 	TP_printk("%u@0x%016llx:0x%08x",
1179e11b7c96SChuck Lever 		__entry->length, (unsigned long long)__entry->offset,
1180e11b7c96SChuck Lever 		__entry->handle
1181e11b7c96SChuck Lever 	)
1182e11b7c96SChuck Lever );
1183e11b7c96SChuck Lever 
1184fc1eb807SChuck Lever /**
1185ae724676SChuck Lever  ** Allocation/release of rpcrdma_reqs and rpcrdma_reps
1186ae724676SChuck Lever  **/
1187ae724676SChuck Lever 
1188395069fcSChuck Lever TRACE_EVENT(xprtrdma_op_allocate,
1189ae724676SChuck Lever 	TP_PROTO(
1190ae724676SChuck Lever 		const struct rpc_task *task,
1191ae724676SChuck Lever 		const struct rpcrdma_req *req
1192ae724676SChuck Lever 	),
1193ae724676SChuck Lever 
1194ae724676SChuck Lever 	TP_ARGS(task, req),
1195ae724676SChuck Lever 
1196ae724676SChuck Lever 	TP_STRUCT__entry(
1197ae724676SChuck Lever 		__field(unsigned int, task_id)
1198ae724676SChuck Lever 		__field(unsigned int, client_id)
1199ae724676SChuck Lever 		__field(const void *, req)
1200ae724676SChuck Lever 		__field(size_t, callsize)
1201ae724676SChuck Lever 		__field(size_t, rcvsize)
1202ae724676SChuck Lever 	),
1203ae724676SChuck Lever 
1204ae724676SChuck Lever 	TP_fast_assign(
1205ae724676SChuck Lever 		__entry->task_id = task->tk_pid;
1206ae724676SChuck Lever 		__entry->client_id = task->tk_client->cl_clid;
1207ae724676SChuck Lever 		__entry->req = req;
1208ae724676SChuck Lever 		__entry->callsize = task->tk_rqstp->rq_callsize;
1209ae724676SChuck Lever 		__entry->rcvsize = task->tk_rqstp->rq_rcvsize;
1210ae724676SChuck Lever 	),
1211ae724676SChuck Lever 
12127c8d9e7cSChuck Lever 	TP_printk("task:%u@%u req=%p (%zu, %zu)",
1213ae724676SChuck Lever 		__entry->task_id, __entry->client_id,
12147c8d9e7cSChuck Lever 		__entry->req, __entry->callsize, __entry->rcvsize
1215ae724676SChuck Lever 	)
1216ae724676SChuck Lever );
1217ae724676SChuck Lever 
1218395069fcSChuck Lever TRACE_EVENT(xprtrdma_op_free,
1219ae724676SChuck Lever 	TP_PROTO(
1220ae724676SChuck Lever 		const struct rpc_task *task,
1221ae724676SChuck Lever 		const struct rpcrdma_req *req
1222ae724676SChuck Lever 	),
1223ae724676SChuck Lever 
1224ae724676SChuck Lever 	TP_ARGS(task, req),
1225ae724676SChuck Lever 
1226ae724676SChuck Lever 	TP_STRUCT__entry(
1227ae724676SChuck Lever 		__field(unsigned int, task_id)
1228ae724676SChuck Lever 		__field(unsigned int, client_id)
1229ae724676SChuck Lever 		__field(const void *, req)
1230ae724676SChuck Lever 		__field(const void *, rep)
1231ae724676SChuck Lever 	),
1232ae724676SChuck Lever 
1233ae724676SChuck Lever 	TP_fast_assign(
1234ae724676SChuck Lever 		__entry->task_id = task->tk_pid;
1235ae724676SChuck Lever 		__entry->client_id = task->tk_client->cl_clid;
1236ae724676SChuck Lever 		__entry->req = req;
1237ae724676SChuck Lever 		__entry->rep = req->rl_reply;
1238ae724676SChuck Lever 	),
1239ae724676SChuck Lever 
1240ae724676SChuck Lever 	TP_printk("task:%u@%u req=%p rep=%p",
1241ae724676SChuck Lever 		__entry->task_id, __entry->client_id,
1242ae724676SChuck Lever 		__entry->req, __entry->rep
1243ae724676SChuck Lever 	)
1244ae724676SChuck Lever );
1245ae724676SChuck Lever 
1246ae724676SChuck Lever /**
1247fc1eb807SChuck Lever  ** Callback events
1248fc1eb807SChuck Lever  **/
1249fc1eb807SChuck Lever 
1250fc1eb807SChuck Lever TRACE_EVENT(xprtrdma_cb_setup,
1251fc1eb807SChuck Lever 	TP_PROTO(
1252fc1eb807SChuck Lever 		const struct rpcrdma_xprt *r_xprt,
1253fc1eb807SChuck Lever 		unsigned int reqs
1254fc1eb807SChuck Lever 	),
1255fc1eb807SChuck Lever 
1256fc1eb807SChuck Lever 	TP_ARGS(r_xprt, reqs),
1257fc1eb807SChuck Lever 
1258fc1eb807SChuck Lever 	TP_STRUCT__entry(
1259fc1eb807SChuck Lever 		__field(const void *, r_xprt)
1260fc1eb807SChuck Lever 		__field(unsigned int, reqs)
1261fc1eb807SChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
1262fc1eb807SChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
1263fc1eb807SChuck Lever 	),
1264fc1eb807SChuck Lever 
1265fc1eb807SChuck Lever 	TP_fast_assign(
1266fc1eb807SChuck Lever 		__entry->r_xprt = r_xprt;
1267fc1eb807SChuck Lever 		__entry->reqs = reqs;
1268fc1eb807SChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
1269fc1eb807SChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
1270fc1eb807SChuck Lever 	),
1271fc1eb807SChuck Lever 
1272fc1eb807SChuck Lever 	TP_printk("peer=[%s]:%s r_xprt=%p: %u reqs",
1273fc1eb807SChuck Lever 		__get_str(addr), __get_str(port),
1274fc1eb807SChuck Lever 		__entry->r_xprt, __entry->reqs
1275fc1eb807SChuck Lever 	)
1276fc1eb807SChuck Lever );
1277fc1eb807SChuck Lever 
1278fc1eb807SChuck Lever DEFINE_CB_EVENT(xprtrdma_cb_call);
1279fc1eb807SChuck Lever DEFINE_CB_EVENT(xprtrdma_cb_reply);
1280fc1eb807SChuck Lever 
128107e10308SChuck Lever TRACE_EVENT(xprtrdma_leaked_rep,
128207e10308SChuck Lever 	TP_PROTO(
128307e10308SChuck Lever 		const struct rpc_rqst *rqst,
128407e10308SChuck Lever 		const struct rpcrdma_rep *rep
128507e10308SChuck Lever 	),
128607e10308SChuck Lever 
128707e10308SChuck Lever 	TP_ARGS(rqst, rep),
128807e10308SChuck Lever 
128907e10308SChuck Lever 	TP_STRUCT__entry(
129007e10308SChuck Lever 		__field(unsigned int, task_id)
129107e10308SChuck Lever 		__field(unsigned int, client_id)
129207e10308SChuck Lever 		__field(u32, xid)
129307e10308SChuck Lever 		__field(const void *, rep)
129407e10308SChuck Lever 	),
129507e10308SChuck Lever 
129607e10308SChuck Lever 	TP_fast_assign(
129707e10308SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
129807e10308SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
129907e10308SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
130007e10308SChuck Lever 		__entry->rep = rep;
130107e10308SChuck Lever 	),
130207e10308SChuck Lever 
130307e10308SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x rep=%p",
130407e10308SChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
130507e10308SChuck Lever 		__entry->rep
130607e10308SChuck Lever 	)
130707e10308SChuck Lever );
130807e10308SChuck Lever 
130998895edbSChuck Lever /**
131098895edbSChuck Lever  ** Server-side RPC/RDMA events
131198895edbSChuck Lever  **/
131298895edbSChuck Lever 
131398895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_xprt_event,
131498895edbSChuck Lever 	TP_PROTO(
131598895edbSChuck Lever 		const struct svc_xprt *xprt
131698895edbSChuck Lever 	),
131798895edbSChuck Lever 
131898895edbSChuck Lever 	TP_ARGS(xprt),
131998895edbSChuck Lever 
132098895edbSChuck Lever 	TP_STRUCT__entry(
132198895edbSChuck Lever 		__field(const void *, xprt)
132298895edbSChuck Lever 		__string(addr, xprt->xpt_remotebuf)
132398895edbSChuck Lever 	),
132498895edbSChuck Lever 
132598895edbSChuck Lever 	TP_fast_assign(
132698895edbSChuck Lever 		__entry->xprt = xprt;
132798895edbSChuck Lever 		__assign_str(addr, xprt->xpt_remotebuf);
132898895edbSChuck Lever 	),
132998895edbSChuck Lever 
133098895edbSChuck Lever 	TP_printk("xprt=%p addr=%s",
133198895edbSChuck Lever 		__entry->xprt, __get_str(addr)
133298895edbSChuck Lever 	)
133398895edbSChuck Lever );
133498895edbSChuck Lever 
133598895edbSChuck Lever #define DEFINE_XPRT_EVENT(name)						\
133698895edbSChuck Lever 		DEFINE_EVENT(svcrdma_xprt_event, svcrdma_xprt_##name,	\
133798895edbSChuck Lever 				TP_PROTO(				\
133898895edbSChuck Lever 					const struct svc_xprt *xprt	\
133998895edbSChuck Lever 				),					\
134098895edbSChuck Lever 				TP_ARGS(xprt))
134198895edbSChuck Lever 
134298895edbSChuck Lever DEFINE_XPRT_EVENT(accept);
134398895edbSChuck Lever DEFINE_XPRT_EVENT(fail);
134498895edbSChuck Lever DEFINE_XPRT_EVENT(free);
134598895edbSChuck Lever 
134698895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_MSG);
134798895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_NOMSG);
134898895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_MSGP);
134998895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_DONE);
135098895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_ERROR);
135198895edbSChuck Lever 
135298895edbSChuck Lever #define show_rpcrdma_proc(x)						\
135398895edbSChuck Lever 		__print_symbolic(x,					\
135498895edbSChuck Lever 				{ RDMA_MSG, "RDMA_MSG" },		\
135598895edbSChuck Lever 				{ RDMA_NOMSG, "RDMA_NOMSG" },		\
135698895edbSChuck Lever 				{ RDMA_MSGP, "RDMA_MSGP" },		\
135798895edbSChuck Lever 				{ RDMA_DONE, "RDMA_DONE" },		\
135898895edbSChuck Lever 				{ RDMA_ERROR, "RDMA_ERROR" })
135998895edbSChuck Lever 
136098895edbSChuck Lever TRACE_EVENT(svcrdma_decode_rqst,
136198895edbSChuck Lever 	TP_PROTO(
136298895edbSChuck Lever 		__be32 *p,
136398895edbSChuck Lever 		unsigned int hdrlen
136498895edbSChuck Lever 	),
136598895edbSChuck Lever 
136698895edbSChuck Lever 	TP_ARGS(p, hdrlen),
136798895edbSChuck Lever 
136898895edbSChuck Lever 	TP_STRUCT__entry(
136998895edbSChuck Lever 		__field(u32, xid)
137098895edbSChuck Lever 		__field(u32, vers)
137198895edbSChuck Lever 		__field(u32, proc)
137298895edbSChuck Lever 		__field(u32, credits)
137398895edbSChuck Lever 		__field(unsigned int, hdrlen)
137498895edbSChuck Lever 	),
137598895edbSChuck Lever 
137698895edbSChuck Lever 	TP_fast_assign(
137798895edbSChuck Lever 		__entry->xid = be32_to_cpup(p++);
137898895edbSChuck Lever 		__entry->vers = be32_to_cpup(p++);
137998895edbSChuck Lever 		__entry->credits = be32_to_cpup(p++);
138098895edbSChuck Lever 		__entry->proc = be32_to_cpup(p);
138198895edbSChuck Lever 		__entry->hdrlen = hdrlen;
138298895edbSChuck Lever 	),
138398895edbSChuck Lever 
138498895edbSChuck Lever 	TP_printk("xid=0x%08x vers=%u credits=%u proc=%s hdrlen=%u",
138598895edbSChuck Lever 		__entry->xid, __entry->vers, __entry->credits,
138698895edbSChuck Lever 		show_rpcrdma_proc(__entry->proc), __entry->hdrlen)
138798895edbSChuck Lever );
138898895edbSChuck Lever 
138998895edbSChuck Lever TRACE_EVENT(svcrdma_decode_short,
139098895edbSChuck Lever 	TP_PROTO(
139198895edbSChuck Lever 		unsigned int hdrlen
139298895edbSChuck Lever 	),
139398895edbSChuck Lever 
139498895edbSChuck Lever 	TP_ARGS(hdrlen),
139598895edbSChuck Lever 
139698895edbSChuck Lever 	TP_STRUCT__entry(
139798895edbSChuck Lever 		__field(unsigned int, hdrlen)
139898895edbSChuck Lever 	),
139998895edbSChuck Lever 
140098895edbSChuck Lever 	TP_fast_assign(
140198895edbSChuck Lever 		__entry->hdrlen = hdrlen;
140298895edbSChuck Lever 	),
140398895edbSChuck Lever 
140498895edbSChuck Lever 	TP_printk("hdrlen=%u", __entry->hdrlen)
140598895edbSChuck Lever );
140698895edbSChuck Lever 
140798895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_badreq_event,
140898895edbSChuck Lever 	TP_PROTO(
140998895edbSChuck Lever 		__be32 *p
141098895edbSChuck Lever 	),
141198895edbSChuck Lever 
141298895edbSChuck Lever 	TP_ARGS(p),
141398895edbSChuck Lever 
141498895edbSChuck Lever 	TP_STRUCT__entry(
141598895edbSChuck Lever 		__field(u32, xid)
141698895edbSChuck Lever 		__field(u32, vers)
141798895edbSChuck Lever 		__field(u32, proc)
141898895edbSChuck Lever 		__field(u32, credits)
141998895edbSChuck Lever 	),
142098895edbSChuck Lever 
142198895edbSChuck Lever 	TP_fast_assign(
142298895edbSChuck Lever 		__entry->xid = be32_to_cpup(p++);
142398895edbSChuck Lever 		__entry->vers = be32_to_cpup(p++);
142498895edbSChuck Lever 		__entry->credits = be32_to_cpup(p++);
142598895edbSChuck Lever 		__entry->proc = be32_to_cpup(p);
142698895edbSChuck Lever 	),
142798895edbSChuck Lever 
142898895edbSChuck Lever 	TP_printk("xid=0x%08x vers=%u credits=%u proc=%u",
142998895edbSChuck Lever 		__entry->xid, __entry->vers, __entry->credits, __entry->proc)
143098895edbSChuck Lever );
143198895edbSChuck Lever 
143298895edbSChuck Lever #define DEFINE_BADREQ_EVENT(name)					\
143398895edbSChuck Lever 		DEFINE_EVENT(svcrdma_badreq_event, svcrdma_decode_##name,\
143498895edbSChuck Lever 				TP_PROTO(				\
143598895edbSChuck Lever 					__be32 *p			\
143698895edbSChuck Lever 				),					\
143798895edbSChuck Lever 				TP_ARGS(p))
143898895edbSChuck Lever 
143998895edbSChuck Lever DEFINE_BADREQ_EVENT(badvers);
144098895edbSChuck Lever DEFINE_BADREQ_EVENT(drop);
144198895edbSChuck Lever DEFINE_BADREQ_EVENT(badproc);
144298895edbSChuck Lever DEFINE_BADREQ_EVENT(parse);
144398895edbSChuck Lever 
144498895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_segment_event,
144598895edbSChuck Lever 	TP_PROTO(
144698895edbSChuck Lever 		u32 handle,
144798895edbSChuck Lever 		u32 length,
144898895edbSChuck Lever 		u64 offset
144998895edbSChuck Lever 	),
145098895edbSChuck Lever 
145198895edbSChuck Lever 	TP_ARGS(handle, length, offset),
145298895edbSChuck Lever 
145398895edbSChuck Lever 	TP_STRUCT__entry(
145498895edbSChuck Lever 		__field(u32, handle)
145598895edbSChuck Lever 		__field(u32, length)
145698895edbSChuck Lever 		__field(u64, offset)
145798895edbSChuck Lever 	),
145898895edbSChuck Lever 
145998895edbSChuck Lever 	TP_fast_assign(
146098895edbSChuck Lever 		__entry->handle = handle;
146198895edbSChuck Lever 		__entry->length = length;
146298895edbSChuck Lever 		__entry->offset = offset;
146398895edbSChuck Lever 	),
146498895edbSChuck Lever 
146598895edbSChuck Lever 	TP_printk("%u@0x%016llx:0x%08x",
146698895edbSChuck Lever 		__entry->length, (unsigned long long)__entry->offset,
146798895edbSChuck Lever 		__entry->handle
146898895edbSChuck Lever 	)
146998895edbSChuck Lever );
147098895edbSChuck Lever 
147198895edbSChuck Lever #define DEFINE_SEGMENT_EVENT(name)					\
1472e604aad2SChuck Lever 		DEFINE_EVENT(svcrdma_segment_event, svcrdma_##name,\
147398895edbSChuck Lever 				TP_PROTO(				\
147498895edbSChuck Lever 					u32 handle,			\
147598895edbSChuck Lever 					u32 length,			\
147698895edbSChuck Lever 					u64 offset			\
147798895edbSChuck Lever 				),					\
147898895edbSChuck Lever 				TP_ARGS(handle, length, offset))
147998895edbSChuck Lever 
1480e604aad2SChuck Lever DEFINE_SEGMENT_EVENT(decode_wseg);
1481e604aad2SChuck Lever DEFINE_SEGMENT_EVENT(encode_rseg);
1482a406c563SChuck Lever DEFINE_SEGMENT_EVENT(send_rseg);
1483e604aad2SChuck Lever DEFINE_SEGMENT_EVENT(encode_wseg);
1484a406c563SChuck Lever DEFINE_SEGMENT_EVENT(send_wseg);
148598895edbSChuck Lever 
148698895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_chunk_event,
148798895edbSChuck Lever 	TP_PROTO(
148898895edbSChuck Lever 		u32 length
148998895edbSChuck Lever 	),
149098895edbSChuck Lever 
149198895edbSChuck Lever 	TP_ARGS(length),
149298895edbSChuck Lever 
149398895edbSChuck Lever 	TP_STRUCT__entry(
149498895edbSChuck Lever 		__field(u32, length)
149598895edbSChuck Lever 	),
149698895edbSChuck Lever 
149798895edbSChuck Lever 	TP_fast_assign(
149898895edbSChuck Lever 		__entry->length = length;
149998895edbSChuck Lever 	),
150098895edbSChuck Lever 
150198895edbSChuck Lever 	TP_printk("length=%u",
150298895edbSChuck Lever 		__entry->length
150398895edbSChuck Lever 	)
150498895edbSChuck Lever );
150598895edbSChuck Lever 
150698895edbSChuck Lever #define DEFINE_CHUNK_EVENT(name)					\
1507a406c563SChuck Lever 		DEFINE_EVENT(svcrdma_chunk_event, svcrdma_##name,	\
150898895edbSChuck Lever 				TP_PROTO(				\
150998895edbSChuck Lever 					u32 length			\
151098895edbSChuck Lever 				),					\
151198895edbSChuck Lever 				TP_ARGS(length))
151298895edbSChuck Lever 
1513a406c563SChuck Lever DEFINE_CHUNK_EVENT(send_pzr);
1514a406c563SChuck Lever DEFINE_CHUNK_EVENT(encode_write_chunk);
1515a406c563SChuck Lever DEFINE_CHUNK_EVENT(send_write_chunk);
1516a406c563SChuck Lever DEFINE_CHUNK_EVENT(encode_read_chunk);
1517a406c563SChuck Lever DEFINE_CHUNK_EVENT(send_reply_chunk);
151898895edbSChuck Lever 
1519a406c563SChuck Lever TRACE_EVENT(svcrdma_send_read_chunk,
152098895edbSChuck Lever 	TP_PROTO(
152198895edbSChuck Lever 		u32 length,
152298895edbSChuck Lever 		u32 position
152398895edbSChuck Lever 	),
152498895edbSChuck Lever 
152598895edbSChuck Lever 	TP_ARGS(length, position),
152698895edbSChuck Lever 
152798895edbSChuck Lever 	TP_STRUCT__entry(
152898895edbSChuck Lever 		__field(u32, length)
152998895edbSChuck Lever 		__field(u32, position)
153098895edbSChuck Lever 	),
153198895edbSChuck Lever 
153298895edbSChuck Lever 	TP_fast_assign(
153398895edbSChuck Lever 		__entry->length = length;
153498895edbSChuck Lever 		__entry->position = position;
153598895edbSChuck Lever 	),
153698895edbSChuck Lever 
153798895edbSChuck Lever 	TP_printk("length=%u position=%u",
153898895edbSChuck Lever 		__entry->length, __entry->position
153998895edbSChuck Lever 	)
154098895edbSChuck Lever );
154198895edbSChuck Lever 
154298895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_error_event,
154398895edbSChuck Lever 	TP_PROTO(
154498895edbSChuck Lever 		__be32 xid
154598895edbSChuck Lever 	),
154698895edbSChuck Lever 
154798895edbSChuck Lever 	TP_ARGS(xid),
154898895edbSChuck Lever 
154998895edbSChuck Lever 	TP_STRUCT__entry(
155098895edbSChuck Lever 		__field(u32, xid)
155198895edbSChuck Lever 	),
155298895edbSChuck Lever 
155398895edbSChuck Lever 	TP_fast_assign(
155498895edbSChuck Lever 		__entry->xid = be32_to_cpu(xid);
155598895edbSChuck Lever 	),
155698895edbSChuck Lever 
155798895edbSChuck Lever 	TP_printk("xid=0x%08x",
155898895edbSChuck Lever 		__entry->xid
155998895edbSChuck Lever 	)
156098895edbSChuck Lever );
156198895edbSChuck Lever 
156298895edbSChuck Lever #define DEFINE_ERROR_EVENT(name)					\
156398895edbSChuck Lever 		DEFINE_EVENT(svcrdma_error_event, svcrdma_err_##name,	\
156498895edbSChuck Lever 				TP_PROTO(				\
156598895edbSChuck Lever 					__be32 xid			\
156698895edbSChuck Lever 				),					\
156798895edbSChuck Lever 				TP_ARGS(xid))
156898895edbSChuck Lever 
156998895edbSChuck Lever DEFINE_ERROR_EVENT(vers);
157098895edbSChuck Lever DEFINE_ERROR_EVENT(chunk);
157198895edbSChuck Lever 
1572bd2abef3SChuck Lever /**
1573bd2abef3SChuck Lever  ** Server-side RDMA API events
1574bd2abef3SChuck Lever  **/
1575bd2abef3SChuck Lever 
1576832b2cb9SChuck Lever DECLARE_EVENT_CLASS(svcrdma_dma_map_class,
1577bd2abef3SChuck Lever 	TP_PROTO(
1578bd2abef3SChuck Lever 		const struct svcxprt_rdma *rdma,
1579832b2cb9SChuck Lever 		u64 dma_addr,
1580832b2cb9SChuck Lever 		u32 length
1581bd2abef3SChuck Lever 	),
1582bd2abef3SChuck Lever 
1583832b2cb9SChuck Lever 	TP_ARGS(rdma, dma_addr, length),
1584bd2abef3SChuck Lever 
1585bd2abef3SChuck Lever 	TP_STRUCT__entry(
1586832b2cb9SChuck Lever 		__field(u64, dma_addr)
1587832b2cb9SChuck Lever 		__field(u32, length)
1588bd2abef3SChuck Lever 		__string(device, rdma->sc_cm_id->device->name)
1589bd2abef3SChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1590bd2abef3SChuck Lever 	),
1591bd2abef3SChuck Lever 
1592bd2abef3SChuck Lever 	TP_fast_assign(
1593832b2cb9SChuck Lever 		__entry->dma_addr = dma_addr;
1594832b2cb9SChuck Lever 		__entry->length = length;
1595bd2abef3SChuck Lever 		__assign_str(device, rdma->sc_cm_id->device->name);
1596bd2abef3SChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1597bd2abef3SChuck Lever 	),
1598bd2abef3SChuck Lever 
1599832b2cb9SChuck Lever 	TP_printk("addr=%s device=%s dma_addr=%llu length=%u",
1600832b2cb9SChuck Lever 		__get_str(addr), __get_str(device),
1601832b2cb9SChuck Lever 		__entry->dma_addr, __entry->length
1602bd2abef3SChuck Lever 	)
1603bd2abef3SChuck Lever );
1604bd2abef3SChuck Lever 
1605832b2cb9SChuck Lever #define DEFINE_SVC_DMA_EVENT(name)					\
1606832b2cb9SChuck Lever 		DEFINE_EVENT(svcrdma_dma_map_class, svcrdma_##name,	\
1607832b2cb9SChuck Lever 				TP_PROTO(				\
1608832b2cb9SChuck Lever 					const struct svcxprt_rdma *rdma,\
1609832b2cb9SChuck Lever 					u64 dma_addr,			\
1610832b2cb9SChuck Lever 					u32 length			\
1611832b2cb9SChuck Lever 				),					\
1612832b2cb9SChuck Lever 				TP_ARGS(rdma, dma_addr, length))
1613832b2cb9SChuck Lever 
1614832b2cb9SChuck Lever DEFINE_SVC_DMA_EVENT(dma_map_page);
1615832b2cb9SChuck Lever DEFINE_SVC_DMA_EVENT(dma_unmap_page);
1616832b2cb9SChuck Lever 
1617bd2abef3SChuck Lever TRACE_EVENT(svcrdma_dma_map_rwctx,
1618bd2abef3SChuck Lever 	TP_PROTO(
1619bd2abef3SChuck Lever 		const struct svcxprt_rdma *rdma,
1620bd2abef3SChuck Lever 		int status
1621bd2abef3SChuck Lever 	),
1622bd2abef3SChuck Lever 
1623bd2abef3SChuck Lever 	TP_ARGS(rdma, status),
1624bd2abef3SChuck Lever 
1625bd2abef3SChuck Lever 	TP_STRUCT__entry(
1626bd2abef3SChuck Lever 		__field(int, status)
1627bd2abef3SChuck Lever 		__string(device, rdma->sc_cm_id->device->name)
1628bd2abef3SChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1629bd2abef3SChuck Lever 	),
1630bd2abef3SChuck Lever 
1631bd2abef3SChuck Lever 	TP_fast_assign(
1632bd2abef3SChuck Lever 		__entry->status = status;
1633bd2abef3SChuck Lever 		__assign_str(device, rdma->sc_cm_id->device->name);
1634bd2abef3SChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1635bd2abef3SChuck Lever 	),
1636bd2abef3SChuck Lever 
1637bd2abef3SChuck Lever 	TP_printk("addr=%s device=%s status=%d",
1638bd2abef3SChuck Lever 		__get_str(addr), __get_str(device), __entry->status
1639bd2abef3SChuck Lever 	)
1640bd2abef3SChuck Lever );
1641bd2abef3SChuck Lever 
16420dabe948SChuck Lever TRACE_EVENT(svcrdma_send_pullup,
16430dabe948SChuck Lever 	TP_PROTO(
16440dabe948SChuck Lever 		unsigned int len
16450dabe948SChuck Lever 	),
16460dabe948SChuck Lever 
16470dabe948SChuck Lever 	TP_ARGS(len),
16480dabe948SChuck Lever 
16490dabe948SChuck Lever 	TP_STRUCT__entry(
16500dabe948SChuck Lever 		__field(unsigned int, len)
16510dabe948SChuck Lever 	),
16520dabe948SChuck Lever 
16530dabe948SChuck Lever 	TP_fast_assign(
16540dabe948SChuck Lever 		__entry->len = len;
16550dabe948SChuck Lever 	),
16560dabe948SChuck Lever 
16570dabe948SChuck Lever 	TP_printk("len=%u", __entry->len)
16580dabe948SChuck Lever );
16590dabe948SChuck Lever 
1660bd2abef3SChuck Lever TRACE_EVENT(svcrdma_send_failed,
1661bd2abef3SChuck Lever 	TP_PROTO(
1662bd2abef3SChuck Lever 		const struct svc_rqst *rqst,
1663bd2abef3SChuck Lever 		int status
1664bd2abef3SChuck Lever 	),
1665bd2abef3SChuck Lever 
1666bd2abef3SChuck Lever 	TP_ARGS(rqst, status),
1667bd2abef3SChuck Lever 
1668bd2abef3SChuck Lever 	TP_STRUCT__entry(
1669bd2abef3SChuck Lever 		__field(int, status)
1670bd2abef3SChuck Lever 		__field(u32, xid)
1671bd2abef3SChuck Lever 		__field(const void *, xprt)
1672bd2abef3SChuck Lever 		__string(addr, rqst->rq_xprt->xpt_remotebuf)
1673bd2abef3SChuck Lever 	),
1674bd2abef3SChuck Lever 
1675bd2abef3SChuck Lever 	TP_fast_assign(
1676bd2abef3SChuck Lever 		__entry->status = status;
1677bd2abef3SChuck Lever 		__entry->xid = __be32_to_cpu(rqst->rq_xid);
1678bd2abef3SChuck Lever 		__entry->xprt = rqst->rq_xprt;
1679bd2abef3SChuck Lever 		__assign_str(addr, rqst->rq_xprt->xpt_remotebuf);
1680bd2abef3SChuck Lever 	),
1681bd2abef3SChuck Lever 
1682bd2abef3SChuck Lever 	TP_printk("xprt=%p addr=%s xid=0x%08x status=%d",
1683bd2abef3SChuck Lever 		__entry->xprt, __get_str(addr),
1684bd2abef3SChuck Lever 		__entry->xid, __entry->status
1685bd2abef3SChuck Lever 	)
1686bd2abef3SChuck Lever );
1687bd2abef3SChuck Lever 
1688bd2abef3SChuck Lever DECLARE_EVENT_CLASS(svcrdma_sendcomp_event,
1689bd2abef3SChuck Lever 	TP_PROTO(
1690bd2abef3SChuck Lever 		const struct ib_wc *wc
1691bd2abef3SChuck Lever 	),
1692bd2abef3SChuck Lever 
1693bd2abef3SChuck Lever 	TP_ARGS(wc),
1694bd2abef3SChuck Lever 
1695bd2abef3SChuck Lever 	TP_STRUCT__entry(
1696bd2abef3SChuck Lever 		__field(const void *, cqe)
1697bd2abef3SChuck Lever 		__field(unsigned int, status)
1698bd2abef3SChuck Lever 		__field(unsigned int, vendor_err)
1699bd2abef3SChuck Lever 	),
1700bd2abef3SChuck Lever 
1701bd2abef3SChuck Lever 	TP_fast_assign(
1702bd2abef3SChuck Lever 		__entry->cqe = wc->wr_cqe;
1703bd2abef3SChuck Lever 		__entry->status = wc->status;
1704bd2abef3SChuck Lever 		if (wc->status)
1705bd2abef3SChuck Lever 			__entry->vendor_err = wc->vendor_err;
1706bd2abef3SChuck Lever 		else
1707bd2abef3SChuck Lever 			__entry->vendor_err = 0;
1708bd2abef3SChuck Lever 	),
1709bd2abef3SChuck Lever 
1710bd2abef3SChuck Lever 	TP_printk("cqe=%p status=%s (%u/0x%x)",
1711bd2abef3SChuck Lever 		__entry->cqe, rdma_show_wc_status(__entry->status),
1712bd2abef3SChuck Lever 		__entry->status, __entry->vendor_err
1713bd2abef3SChuck Lever 	)
1714bd2abef3SChuck Lever );
1715bd2abef3SChuck Lever 
1716bd2abef3SChuck Lever #define DEFINE_SENDCOMP_EVENT(name)					\
1717bd2abef3SChuck Lever 		DEFINE_EVENT(svcrdma_sendcomp_event, svcrdma_wc_##name,	\
1718bd2abef3SChuck Lever 				TP_PROTO(				\
1719bd2abef3SChuck Lever 					const struct ib_wc *wc		\
1720bd2abef3SChuck Lever 				),					\
1721bd2abef3SChuck Lever 				TP_ARGS(wc))
1722bd2abef3SChuck Lever 
1723bd2abef3SChuck Lever TRACE_EVENT(svcrdma_post_send,
1724bd2abef3SChuck Lever 	TP_PROTO(
1725bd2abef3SChuck Lever 		const struct ib_send_wr *wr,
1726bd2abef3SChuck Lever 		int status
1727bd2abef3SChuck Lever 	),
1728bd2abef3SChuck Lever 
1729bd2abef3SChuck Lever 	TP_ARGS(wr, status),
1730bd2abef3SChuck Lever 
1731bd2abef3SChuck Lever 	TP_STRUCT__entry(
1732bd2abef3SChuck Lever 		__field(const void *, cqe)
1733bd2abef3SChuck Lever 		__field(unsigned int, num_sge)
1734bd2abef3SChuck Lever 		__field(u32, inv_rkey)
1735bd2abef3SChuck Lever 		__field(int, status)
1736bd2abef3SChuck Lever 	),
1737bd2abef3SChuck Lever 
1738bd2abef3SChuck Lever 	TP_fast_assign(
1739bd2abef3SChuck Lever 		__entry->cqe = wr->wr_cqe;
1740bd2abef3SChuck Lever 		__entry->num_sge = wr->num_sge;
1741bd2abef3SChuck Lever 		__entry->inv_rkey = (wr->opcode == IB_WR_SEND_WITH_INV) ?
1742bd2abef3SChuck Lever 					wr->ex.invalidate_rkey : 0;
1743bd2abef3SChuck Lever 		__entry->status = status;
1744bd2abef3SChuck Lever 	),
1745bd2abef3SChuck Lever 
1746bd2abef3SChuck Lever 	TP_printk("cqe=%p num_sge=%u inv_rkey=0x%08x status=%d",
1747bd2abef3SChuck Lever 		__entry->cqe, __entry->num_sge,
1748bd2abef3SChuck Lever 		__entry->inv_rkey, __entry->status
1749bd2abef3SChuck Lever 	)
1750bd2abef3SChuck Lever );
1751bd2abef3SChuck Lever 
1752bd2abef3SChuck Lever DEFINE_SENDCOMP_EVENT(send);
1753bd2abef3SChuck Lever 
1754bd2abef3SChuck Lever TRACE_EVENT(svcrdma_post_recv,
1755bd2abef3SChuck Lever 	TP_PROTO(
1756bd2abef3SChuck Lever 		const struct ib_recv_wr *wr,
1757bd2abef3SChuck Lever 		int status
1758bd2abef3SChuck Lever 	),
1759bd2abef3SChuck Lever 
1760bd2abef3SChuck Lever 	TP_ARGS(wr, status),
1761bd2abef3SChuck Lever 
1762bd2abef3SChuck Lever 	TP_STRUCT__entry(
1763bd2abef3SChuck Lever 		__field(const void *, cqe)
1764bd2abef3SChuck Lever 		__field(int, status)
1765bd2abef3SChuck Lever 	),
1766bd2abef3SChuck Lever 
1767bd2abef3SChuck Lever 	TP_fast_assign(
1768bd2abef3SChuck Lever 		__entry->cqe = wr->wr_cqe;
1769bd2abef3SChuck Lever 		__entry->status = status;
1770bd2abef3SChuck Lever 	),
1771bd2abef3SChuck Lever 
1772bd2abef3SChuck Lever 	TP_printk("cqe=%p status=%d",
1773bd2abef3SChuck Lever 		__entry->cqe, __entry->status
1774bd2abef3SChuck Lever 	)
1775bd2abef3SChuck Lever );
1776bd2abef3SChuck Lever 
1777bd2abef3SChuck Lever TRACE_EVENT(svcrdma_wc_receive,
1778bd2abef3SChuck Lever 	TP_PROTO(
1779bd2abef3SChuck Lever 		const struct ib_wc *wc
1780bd2abef3SChuck Lever 	),
1781bd2abef3SChuck Lever 
1782bd2abef3SChuck Lever 	TP_ARGS(wc),
1783bd2abef3SChuck Lever 
1784bd2abef3SChuck Lever 	TP_STRUCT__entry(
1785bd2abef3SChuck Lever 		__field(const void *, cqe)
1786bd2abef3SChuck Lever 		__field(u32, byte_len)
1787bd2abef3SChuck Lever 		__field(unsigned int, status)
1788bd2abef3SChuck Lever 		__field(u32, vendor_err)
1789bd2abef3SChuck Lever 	),
1790bd2abef3SChuck Lever 
1791bd2abef3SChuck Lever 	TP_fast_assign(
1792bd2abef3SChuck Lever 		__entry->cqe = wc->wr_cqe;
1793bd2abef3SChuck Lever 		__entry->status = wc->status;
1794bd2abef3SChuck Lever 		if (wc->status) {
1795bd2abef3SChuck Lever 			__entry->byte_len = 0;
1796bd2abef3SChuck Lever 			__entry->vendor_err = wc->vendor_err;
1797bd2abef3SChuck Lever 		} else {
1798bd2abef3SChuck Lever 			__entry->byte_len = wc->byte_len;
1799bd2abef3SChuck Lever 			__entry->vendor_err = 0;
1800bd2abef3SChuck Lever 		}
1801bd2abef3SChuck Lever 	),
1802bd2abef3SChuck Lever 
1803bd2abef3SChuck Lever 	TP_printk("cqe=%p byte_len=%u status=%s (%u/0x%x)",
1804bd2abef3SChuck Lever 		__entry->cqe, __entry->byte_len,
1805bd2abef3SChuck Lever 		rdma_show_wc_status(__entry->status),
1806bd2abef3SChuck Lever 		__entry->status, __entry->vendor_err
1807bd2abef3SChuck Lever 	)
1808bd2abef3SChuck Lever );
1809bd2abef3SChuck Lever 
1810bd2abef3SChuck Lever TRACE_EVENT(svcrdma_post_rw,
1811bd2abef3SChuck Lever 	TP_PROTO(
1812bd2abef3SChuck Lever 		const void *cqe,
1813bd2abef3SChuck Lever 		int sqecount,
1814bd2abef3SChuck Lever 		int status
1815bd2abef3SChuck Lever 	),
1816bd2abef3SChuck Lever 
1817bd2abef3SChuck Lever 	TP_ARGS(cqe, sqecount, status),
1818bd2abef3SChuck Lever 
1819bd2abef3SChuck Lever 	TP_STRUCT__entry(
1820bd2abef3SChuck Lever 		__field(const void *, cqe)
1821bd2abef3SChuck Lever 		__field(int, sqecount)
1822bd2abef3SChuck Lever 		__field(int, status)
1823bd2abef3SChuck Lever 	),
1824bd2abef3SChuck Lever 
1825bd2abef3SChuck Lever 	TP_fast_assign(
1826bd2abef3SChuck Lever 		__entry->cqe = cqe;
1827bd2abef3SChuck Lever 		__entry->sqecount = sqecount;
1828bd2abef3SChuck Lever 		__entry->status = status;
1829bd2abef3SChuck Lever 	),
1830bd2abef3SChuck Lever 
1831bd2abef3SChuck Lever 	TP_printk("cqe=%p sqecount=%d status=%d",
1832bd2abef3SChuck Lever 		__entry->cqe, __entry->sqecount, __entry->status
1833bd2abef3SChuck Lever 	)
1834bd2abef3SChuck Lever );
1835bd2abef3SChuck Lever 
1836bd2abef3SChuck Lever DEFINE_SENDCOMP_EVENT(read);
1837bd2abef3SChuck Lever DEFINE_SENDCOMP_EVENT(write);
1838bd2abef3SChuck Lever 
1839bd2abef3SChuck Lever TRACE_EVENT(svcrdma_qp_error,
1840bd2abef3SChuck Lever 	TP_PROTO(
1841bd2abef3SChuck Lever 		const struct ib_event *event,
1842bd2abef3SChuck Lever 		const struct sockaddr *sap
1843bd2abef3SChuck Lever 	),
1844bd2abef3SChuck Lever 
1845bd2abef3SChuck Lever 	TP_ARGS(event, sap),
1846bd2abef3SChuck Lever 
1847bd2abef3SChuck Lever 	TP_STRUCT__entry(
1848bd2abef3SChuck Lever 		__field(unsigned int, event)
1849bd2abef3SChuck Lever 		__string(device, event->device->name)
1850bd2abef3SChuck Lever 		__array(__u8, addr, INET6_ADDRSTRLEN + 10)
1851bd2abef3SChuck Lever 	),
1852bd2abef3SChuck Lever 
1853bd2abef3SChuck Lever 	TP_fast_assign(
1854bd2abef3SChuck Lever 		__entry->event = event->event;
1855bd2abef3SChuck Lever 		__assign_str(device, event->device->name);
1856bd2abef3SChuck Lever 		snprintf(__entry->addr, sizeof(__entry->addr) - 1,
1857bd2abef3SChuck Lever 			 "%pISpc", sap);
1858bd2abef3SChuck Lever 	),
1859bd2abef3SChuck Lever 
1860bd2abef3SChuck Lever 	TP_printk("addr=%s dev=%s event=%s (%u)",
1861bd2abef3SChuck Lever 		__entry->addr, __get_str(device),
1862bd2abef3SChuck Lever 		rdma_show_ib_event(__entry->event), __entry->event
1863bd2abef3SChuck Lever 	)
1864bd2abef3SChuck Lever );
1865bd2abef3SChuck Lever 
1866bd2abef3SChuck Lever DECLARE_EVENT_CLASS(svcrdma_sendqueue_event,
1867bd2abef3SChuck Lever 	TP_PROTO(
1868bd2abef3SChuck Lever 		const struct svcxprt_rdma *rdma
1869bd2abef3SChuck Lever 	),
1870bd2abef3SChuck Lever 
1871bd2abef3SChuck Lever 	TP_ARGS(rdma),
1872bd2abef3SChuck Lever 
1873bd2abef3SChuck Lever 	TP_STRUCT__entry(
1874bd2abef3SChuck Lever 		__field(int, avail)
1875bd2abef3SChuck Lever 		__field(int, depth)
1876bd2abef3SChuck Lever 		__string(addr, rdma->sc_xprt.xpt_remotebuf)
1877bd2abef3SChuck Lever 	),
1878bd2abef3SChuck Lever 
1879bd2abef3SChuck Lever 	TP_fast_assign(
1880bd2abef3SChuck Lever 		__entry->avail = atomic_read(&rdma->sc_sq_avail);
1881bd2abef3SChuck Lever 		__entry->depth = rdma->sc_sq_depth;
1882bd2abef3SChuck Lever 		__assign_str(addr, rdma->sc_xprt.xpt_remotebuf);
1883bd2abef3SChuck Lever 	),
1884bd2abef3SChuck Lever 
1885bd2abef3SChuck Lever 	TP_printk("addr=%s sc_sq_avail=%d/%d",
1886bd2abef3SChuck Lever 		__get_str(addr), __entry->avail, __entry->depth
1887bd2abef3SChuck Lever 	)
1888bd2abef3SChuck Lever );
1889bd2abef3SChuck Lever 
1890bd2abef3SChuck Lever #define DEFINE_SQ_EVENT(name)						\
1891bd2abef3SChuck Lever 		DEFINE_EVENT(svcrdma_sendqueue_event, svcrdma_sq_##name,\
1892bd2abef3SChuck Lever 				TP_PROTO(				\
1893bd2abef3SChuck Lever 					const struct svcxprt_rdma *rdma \
1894bd2abef3SChuck Lever 				),					\
1895bd2abef3SChuck Lever 				TP_ARGS(rdma))
1896bd2abef3SChuck Lever 
1897bd2abef3SChuck Lever DEFINE_SQ_EVENT(full);
1898bd2abef3SChuck Lever DEFINE_SQ_EVENT(retry);
1899bd2abef3SChuck Lever 
1900e48f083eSChuck Lever #endif /* _TRACE_RPCRDMA_H */
1901e48f083eSChuck Lever 
1902e48f083eSChuck Lever #include <trace/define_trace.h>
1903