xref: /openbmc/linux/include/trace/events/rpcrdma.h (revision fc1eb807)
1e48f083eSChuck Lever /* SPDX-License-Identifier: GPL-2.0 */
2e48f083eSChuck Lever /*
3e48f083eSChuck Lever  * Copyright (c) 2017 Oracle.  All rights reserved.
4e48f083eSChuck Lever  */
5e48f083eSChuck Lever #undef TRACE_SYSTEM
6e48f083eSChuck Lever #define TRACE_SYSTEM rpcrdma
7e48f083eSChuck Lever 
8e48f083eSChuck Lever #if !defined(_TRACE_RPCRDMA_H) || defined(TRACE_HEADER_MULTI_READ)
9e48f083eSChuck Lever #define _TRACE_RPCRDMA_H
10e48f083eSChuck Lever 
11e48f083eSChuck Lever #include <linux/tracepoint.h>
12e48f083eSChuck Lever #include <trace/events/rdma.h>
13e48f083eSChuck Lever 
14ab03eff5SChuck Lever /**
15b4a7f91cSChuck Lever  ** Event classes
16b4a7f91cSChuck Lever  **/
17b4a7f91cSChuck Lever 
18b4a7f91cSChuck Lever DECLARE_EVENT_CLASS(xprtrdma_reply_event,
19b4a7f91cSChuck Lever 	TP_PROTO(
20b4a7f91cSChuck Lever 		const struct rpcrdma_rep *rep
21b4a7f91cSChuck Lever 	),
22b4a7f91cSChuck Lever 
23b4a7f91cSChuck Lever 	TP_ARGS(rep),
24b4a7f91cSChuck Lever 
25b4a7f91cSChuck Lever 	TP_STRUCT__entry(
26b4a7f91cSChuck Lever 		__field(const void *, rep)
27b4a7f91cSChuck Lever 		__field(const void *, r_xprt)
28b4a7f91cSChuck Lever 		__field(u32, xid)
29b4a7f91cSChuck Lever 		__field(u32, version)
30b4a7f91cSChuck Lever 		__field(u32, proc)
31b4a7f91cSChuck Lever 	),
32b4a7f91cSChuck Lever 
33b4a7f91cSChuck Lever 	TP_fast_assign(
34b4a7f91cSChuck Lever 		__entry->rep = rep;
35b4a7f91cSChuck Lever 		__entry->r_xprt = rep->rr_rxprt;
36b4a7f91cSChuck Lever 		__entry->xid = be32_to_cpu(rep->rr_xid);
37b4a7f91cSChuck Lever 		__entry->version = be32_to_cpu(rep->rr_vers);
38b4a7f91cSChuck Lever 		__entry->proc = be32_to_cpu(rep->rr_proc);
39b4a7f91cSChuck Lever 	),
40b4a7f91cSChuck Lever 
41b4a7f91cSChuck Lever 	TP_printk("rxprt %p xid=0x%08x rep=%p: version %u proc %u",
42b4a7f91cSChuck Lever 		__entry->r_xprt, __entry->xid, __entry->rep,
43b4a7f91cSChuck Lever 		__entry->version, __entry->proc
44b4a7f91cSChuck Lever 	)
45b4a7f91cSChuck Lever );
46b4a7f91cSChuck Lever 
47b4a7f91cSChuck Lever #define DEFINE_REPLY_EVENT(name)					\
48b4a7f91cSChuck Lever 		DEFINE_EVENT(xprtrdma_reply_event, name,		\
49b4a7f91cSChuck Lever 				TP_PROTO(				\
50b4a7f91cSChuck Lever 					const struct rpcrdma_rep *rep	\
51b4a7f91cSChuck Lever 				),					\
52b4a7f91cSChuck Lever 				TP_ARGS(rep))
53b4a7f91cSChuck Lever 
541c443effSChuck Lever DECLARE_EVENT_CLASS(xprtrdma_rxprt,
551c443effSChuck Lever 	TP_PROTO(
561c443effSChuck Lever 		const struct rpcrdma_xprt *r_xprt
571c443effSChuck Lever 	),
581c443effSChuck Lever 
591c443effSChuck Lever 	TP_ARGS(r_xprt),
601c443effSChuck Lever 
611c443effSChuck Lever 	TP_STRUCT__entry(
621c443effSChuck Lever 		__field(const void *, r_xprt)
631c443effSChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
641c443effSChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
651c443effSChuck Lever 	),
661c443effSChuck Lever 
671c443effSChuck Lever 	TP_fast_assign(
681c443effSChuck Lever 		__entry->r_xprt = r_xprt;
691c443effSChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
701c443effSChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
711c443effSChuck Lever 	),
721c443effSChuck Lever 
731c443effSChuck Lever 	TP_printk("peer=[%s]:%s r_xprt=%p",
741c443effSChuck Lever 		__get_str(addr), __get_str(port), __entry->r_xprt
751c443effSChuck Lever 	)
761c443effSChuck Lever );
771c443effSChuck Lever 
781c443effSChuck Lever #define DEFINE_RXPRT_EVENT(name)					\
791c443effSChuck Lever 		DEFINE_EVENT(xprtrdma_rxprt, name,			\
801c443effSChuck Lever 				TP_PROTO(				\
811c443effSChuck Lever 					const struct rpcrdma_xprt *r_xprt \
821c443effSChuck Lever 				),					\
831c443effSChuck Lever 				TP_ARGS(r_xprt))
841c443effSChuck Lever 
8558f10ad4SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_rdch_event,
8658f10ad4SChuck Lever 	TP_PROTO(
8758f10ad4SChuck Lever 		const struct rpc_task *task,
8858f10ad4SChuck Lever 		unsigned int pos,
8958f10ad4SChuck Lever 		struct rpcrdma_mr *mr,
9058f10ad4SChuck Lever 		int nsegs
9158f10ad4SChuck Lever 	),
9258f10ad4SChuck Lever 
9358f10ad4SChuck Lever 	TP_ARGS(task, pos, mr, nsegs),
9458f10ad4SChuck Lever 
9558f10ad4SChuck Lever 	TP_STRUCT__entry(
9658f10ad4SChuck Lever 		__field(unsigned int, task_id)
9758f10ad4SChuck Lever 		__field(unsigned int, client_id)
9858f10ad4SChuck Lever 		__field(const void *, mr)
9958f10ad4SChuck Lever 		__field(unsigned int, pos)
10058f10ad4SChuck Lever 		__field(int, nents)
10158f10ad4SChuck Lever 		__field(u32, handle)
10258f10ad4SChuck Lever 		__field(u32, length)
10358f10ad4SChuck Lever 		__field(u64, offset)
10458f10ad4SChuck Lever 		__field(int, nsegs)
10558f10ad4SChuck Lever 	),
10658f10ad4SChuck Lever 
10758f10ad4SChuck Lever 	TP_fast_assign(
10858f10ad4SChuck Lever 		__entry->task_id = task->tk_pid;
10958f10ad4SChuck Lever 		__entry->client_id = task->tk_client->cl_clid;
11058f10ad4SChuck Lever 		__entry->mr = mr;
11158f10ad4SChuck Lever 		__entry->pos = pos;
11258f10ad4SChuck Lever 		__entry->nents = mr->mr_nents;
11358f10ad4SChuck Lever 		__entry->handle = mr->mr_handle;
11458f10ad4SChuck Lever 		__entry->length = mr->mr_length;
11558f10ad4SChuck Lever 		__entry->offset = mr->mr_offset;
11658f10ad4SChuck Lever 		__entry->nsegs = nsegs;
11758f10ad4SChuck Lever 	),
11858f10ad4SChuck Lever 
11958f10ad4SChuck Lever 	TP_printk("task:%u@%u mr=%p pos=%u %u@0x%016llx:0x%08x (%s)",
12058f10ad4SChuck Lever 		__entry->task_id, __entry->client_id, __entry->mr,
12158f10ad4SChuck Lever 		__entry->pos, __entry->length,
12258f10ad4SChuck Lever 		(unsigned long long)__entry->offset, __entry->handle,
12358f10ad4SChuck Lever 		__entry->nents < __entry->nsegs ? "more" : "last"
12458f10ad4SChuck Lever 	)
12558f10ad4SChuck Lever );
12658f10ad4SChuck Lever 
12758f10ad4SChuck Lever #define DEFINE_RDCH_EVENT(name)						\
12858f10ad4SChuck Lever 		DEFINE_EVENT(xprtrdma_rdch_event, name,			\
12958f10ad4SChuck Lever 				TP_PROTO(				\
13058f10ad4SChuck Lever 					const struct rpc_task *task,	\
13158f10ad4SChuck Lever 					unsigned int pos,		\
13258f10ad4SChuck Lever 					struct rpcrdma_mr *mr,		\
13358f10ad4SChuck Lever 					int nsegs			\
13458f10ad4SChuck Lever 				),					\
13558f10ad4SChuck Lever 				TP_ARGS(task, pos, mr, nsegs))
13658f10ad4SChuck Lever 
13758f10ad4SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_wrch_event,
13858f10ad4SChuck Lever 	TP_PROTO(
13958f10ad4SChuck Lever 		const struct rpc_task *task,
14058f10ad4SChuck Lever 		struct rpcrdma_mr *mr,
14158f10ad4SChuck Lever 		int nsegs
14258f10ad4SChuck Lever 	),
14358f10ad4SChuck Lever 
14458f10ad4SChuck Lever 	TP_ARGS(task, mr, nsegs),
14558f10ad4SChuck Lever 
14658f10ad4SChuck Lever 	TP_STRUCT__entry(
14758f10ad4SChuck Lever 		__field(unsigned int, task_id)
14858f10ad4SChuck Lever 		__field(unsigned int, client_id)
14958f10ad4SChuck Lever 		__field(const void *, mr)
15058f10ad4SChuck Lever 		__field(int, nents)
15158f10ad4SChuck Lever 		__field(u32, handle)
15258f10ad4SChuck Lever 		__field(u32, length)
15358f10ad4SChuck Lever 		__field(u64, offset)
15458f10ad4SChuck Lever 		__field(int, nsegs)
15558f10ad4SChuck Lever 	),
15658f10ad4SChuck Lever 
15758f10ad4SChuck Lever 	TP_fast_assign(
15858f10ad4SChuck Lever 		__entry->task_id = task->tk_pid;
15958f10ad4SChuck Lever 		__entry->client_id = task->tk_client->cl_clid;
16058f10ad4SChuck Lever 		__entry->mr = mr;
16158f10ad4SChuck Lever 		__entry->nents = mr->mr_nents;
16258f10ad4SChuck Lever 		__entry->handle = mr->mr_handle;
16358f10ad4SChuck Lever 		__entry->length = mr->mr_length;
16458f10ad4SChuck Lever 		__entry->offset = mr->mr_offset;
16558f10ad4SChuck Lever 		__entry->nsegs = nsegs;
16658f10ad4SChuck Lever 	),
16758f10ad4SChuck Lever 
16858f10ad4SChuck Lever 	TP_printk("task:%u@%u mr=%p %u@0x%016llx:0x%08x (%s)",
16958f10ad4SChuck Lever 		__entry->task_id, __entry->client_id, __entry->mr,
17058f10ad4SChuck Lever 		__entry->length, (unsigned long long)__entry->offset,
17158f10ad4SChuck Lever 		__entry->handle,
17258f10ad4SChuck Lever 		__entry->nents < __entry->nsegs ? "more" : "last"
17358f10ad4SChuck Lever 	)
17458f10ad4SChuck Lever );
17558f10ad4SChuck Lever 
17658f10ad4SChuck Lever #define DEFINE_WRCH_EVENT(name)						\
17758f10ad4SChuck Lever 		DEFINE_EVENT(xprtrdma_wrch_event, name,			\
17858f10ad4SChuck Lever 				TP_PROTO(				\
17958f10ad4SChuck Lever 					const struct rpc_task *task,	\
18058f10ad4SChuck Lever 					struct rpcrdma_mr *mr,		\
18158f10ad4SChuck Lever 					int nsegs			\
18258f10ad4SChuck Lever 				),					\
18358f10ad4SChuck Lever 				TP_ARGS(task, mr, nsegs))
18458f10ad4SChuck Lever 
18558f10ad4SChuck Lever TRACE_DEFINE_ENUM(FRWR_IS_INVALID);
18658f10ad4SChuck Lever TRACE_DEFINE_ENUM(FRWR_IS_VALID);
18758f10ad4SChuck Lever TRACE_DEFINE_ENUM(FRWR_FLUSHED_FR);
18858f10ad4SChuck Lever TRACE_DEFINE_ENUM(FRWR_FLUSHED_LI);
18958f10ad4SChuck Lever 
19058f10ad4SChuck Lever #define xprtrdma_show_frwr_state(x)					\
19158f10ad4SChuck Lever 		__print_symbolic(x,					\
19258f10ad4SChuck Lever 				{ FRWR_IS_INVALID, "INVALID" },		\
19358f10ad4SChuck Lever 				{ FRWR_IS_VALID, "VALID" },		\
19458f10ad4SChuck Lever 				{ FRWR_FLUSHED_FR, "FLUSHED_FR" },	\
19558f10ad4SChuck Lever 				{ FRWR_FLUSHED_LI, "FLUSHED_LI" })
19658f10ad4SChuck Lever 
19758f10ad4SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_frwr_done,
19858f10ad4SChuck Lever 	TP_PROTO(
19958f10ad4SChuck Lever 		const struct ib_wc *wc,
20058f10ad4SChuck Lever 		const struct rpcrdma_frwr *frwr
20158f10ad4SChuck Lever 	),
20258f10ad4SChuck Lever 
20358f10ad4SChuck Lever 	TP_ARGS(wc, frwr),
20458f10ad4SChuck Lever 
20558f10ad4SChuck Lever 	TP_STRUCT__entry(
20658f10ad4SChuck Lever 		__field(const void *, mr)
20758f10ad4SChuck Lever 		__field(unsigned int, state)
20858f10ad4SChuck Lever 		__field(unsigned int, status)
20958f10ad4SChuck Lever 		__field(unsigned int, vendor_err)
21058f10ad4SChuck Lever 	),
21158f10ad4SChuck Lever 
21258f10ad4SChuck Lever 	TP_fast_assign(
21358f10ad4SChuck Lever 		__entry->mr = container_of(frwr, struct rpcrdma_mr, frwr);
21458f10ad4SChuck Lever 		__entry->state = frwr->fr_state;
21558f10ad4SChuck Lever 		__entry->status = wc->status;
21658f10ad4SChuck Lever 		__entry->vendor_err = __entry->status ? wc->vendor_err : 0;
21758f10ad4SChuck Lever 	),
21858f10ad4SChuck Lever 
21958f10ad4SChuck Lever 	TP_printk(
22058f10ad4SChuck Lever 		"mr=%p state=%s: %s (%u/0x%x)",
22158f10ad4SChuck Lever 		__entry->mr, xprtrdma_show_frwr_state(__entry->state),
22258f10ad4SChuck Lever 		rdma_show_wc_status(__entry->status),
22358f10ad4SChuck Lever 		__entry->status, __entry->vendor_err
22458f10ad4SChuck Lever 	)
22558f10ad4SChuck Lever );
22658f10ad4SChuck Lever 
22758f10ad4SChuck Lever #define DEFINE_FRWR_DONE_EVENT(name)					\
22858f10ad4SChuck Lever 		DEFINE_EVENT(xprtrdma_frwr_done, name,			\
22958f10ad4SChuck Lever 				TP_PROTO(				\
23058f10ad4SChuck Lever 					const struct ib_wc *wc,		\
23158f10ad4SChuck Lever 					const struct rpcrdma_frwr *frwr	\
23258f10ad4SChuck Lever 				),					\
23358f10ad4SChuck Lever 				TP_ARGS(wc, frwr))
23458f10ad4SChuck Lever 
2352937fedeSChuck Lever DECLARE_EVENT_CLASS(xprtrdma_mr,
2362937fedeSChuck Lever 	TP_PROTO(
2372937fedeSChuck Lever 		const struct rpcrdma_mr *mr
2382937fedeSChuck Lever 	),
2392937fedeSChuck Lever 
2402937fedeSChuck Lever 	TP_ARGS(mr),
2412937fedeSChuck Lever 
2422937fedeSChuck Lever 	TP_STRUCT__entry(
2432937fedeSChuck Lever 		__field(const void *, mr)
2442937fedeSChuck Lever 		__field(u32, handle)
2452937fedeSChuck Lever 		__field(u32, length)
2462937fedeSChuck Lever 		__field(u64, offset)
2472937fedeSChuck Lever 	),
2482937fedeSChuck Lever 
2492937fedeSChuck Lever 	TP_fast_assign(
2502937fedeSChuck Lever 		__entry->mr = mr;
2512937fedeSChuck Lever 		__entry->handle = mr->mr_handle;
2522937fedeSChuck Lever 		__entry->length = mr->mr_length;
2532937fedeSChuck Lever 		__entry->offset = mr->mr_offset;
2542937fedeSChuck Lever 	),
2552937fedeSChuck Lever 
2562937fedeSChuck Lever 	TP_printk("mr=%p %u@0x%016llx:0x%08x",
2572937fedeSChuck Lever 		__entry->mr, __entry->length,
2582937fedeSChuck Lever 		(unsigned long long)__entry->offset,
2592937fedeSChuck Lever 		__entry->handle
2602937fedeSChuck Lever 	)
2612937fedeSChuck Lever );
2622937fedeSChuck Lever 
2632937fedeSChuck Lever #define DEFINE_MR_EVENT(name) \
2642937fedeSChuck Lever 		DEFINE_EVENT(xprtrdma_mr, name, \
2652937fedeSChuck Lever 				TP_PROTO( \
2662937fedeSChuck Lever 					const struct rpcrdma_mr *mr \
2672937fedeSChuck Lever 				), \
2682937fedeSChuck Lever 				TP_ARGS(mr))
2692937fedeSChuck Lever 
270fc1eb807SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_cb_event,
271fc1eb807SChuck Lever 	TP_PROTO(
272fc1eb807SChuck Lever 		const struct rpc_rqst *rqst
273fc1eb807SChuck Lever 	),
274fc1eb807SChuck Lever 
275fc1eb807SChuck Lever 	TP_ARGS(rqst),
276fc1eb807SChuck Lever 
277fc1eb807SChuck Lever 	TP_STRUCT__entry(
278fc1eb807SChuck Lever 		__field(const void *, rqst)
279fc1eb807SChuck Lever 		__field(const void *, rep)
280fc1eb807SChuck Lever 		__field(const void *, req)
281fc1eb807SChuck Lever 		__field(u32, xid)
282fc1eb807SChuck Lever 	),
283fc1eb807SChuck Lever 
284fc1eb807SChuck Lever 	TP_fast_assign(
285fc1eb807SChuck Lever 		__entry->rqst = rqst;
286fc1eb807SChuck Lever 		__entry->req = rpcr_to_rdmar(rqst);
287fc1eb807SChuck Lever 		__entry->rep = rpcr_to_rdmar(rqst)->rl_reply;
288fc1eb807SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
289fc1eb807SChuck Lever 	),
290fc1eb807SChuck Lever 
291fc1eb807SChuck Lever 	TP_printk("xid=0x%08x, rqst=%p req=%p rep=%p",
292fc1eb807SChuck Lever 		__entry->xid, __entry->rqst, __entry->req, __entry->rep
293fc1eb807SChuck Lever 	)
294fc1eb807SChuck Lever );
295fc1eb807SChuck Lever 
296fc1eb807SChuck Lever #define DEFINE_CB_EVENT(name)						\
297fc1eb807SChuck Lever 		DEFINE_EVENT(xprtrdma_cb_event, name,			\
298fc1eb807SChuck Lever 				TP_PROTO(				\
299fc1eb807SChuck Lever 					const struct rpc_rqst *rqst	\
300fc1eb807SChuck Lever 				),					\
301fc1eb807SChuck Lever 				TP_ARGS(rqst))
302fc1eb807SChuck Lever 
303b4a7f91cSChuck Lever /**
304b4744e00SChuck Lever  ** Connection events
305b4744e00SChuck Lever  **/
306b4744e00SChuck Lever 
307b4744e00SChuck Lever TRACE_EVENT(xprtrdma_conn_upcall,
308b4744e00SChuck Lever 	TP_PROTO(
309b4744e00SChuck Lever 		const struct rpcrdma_xprt *r_xprt,
310b4744e00SChuck Lever 		struct rdma_cm_event *event
311b4744e00SChuck Lever 	),
312b4744e00SChuck Lever 
313b4744e00SChuck Lever 	TP_ARGS(r_xprt, event),
314b4744e00SChuck Lever 
315b4744e00SChuck Lever 	TP_STRUCT__entry(
316b4744e00SChuck Lever 		__field(const void *, r_xprt)
317b4744e00SChuck Lever 		__field(unsigned int, event)
318b4744e00SChuck Lever 		__field(int, status)
319b4744e00SChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
320b4744e00SChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
321b4744e00SChuck Lever 	),
322b4744e00SChuck Lever 
323b4744e00SChuck Lever 	TP_fast_assign(
324b4744e00SChuck Lever 		__entry->r_xprt = r_xprt;
325b4744e00SChuck Lever 		__entry->event = event->event;
326b4744e00SChuck Lever 		__entry->status = event->status;
327b4744e00SChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
328b4744e00SChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
329b4744e00SChuck Lever 	),
330b4744e00SChuck Lever 
331b4744e00SChuck Lever 	TP_printk("peer=[%s]:%s r_xprt=%p: %s (%u/%d)",
332b4744e00SChuck Lever 		__get_str(addr), __get_str(port),
333b4744e00SChuck Lever 		__entry->r_xprt, rdma_show_cm_event(__entry->event),
334b4744e00SChuck Lever 		__entry->event, __entry->status
335b4744e00SChuck Lever 	)
336b4744e00SChuck Lever );
337b4744e00SChuck Lever 
338b4744e00SChuck Lever TRACE_EVENT(xprtrdma_disconnect,
339b4744e00SChuck Lever 	TP_PROTO(
340b4744e00SChuck Lever 		const struct rpcrdma_xprt *r_xprt,
341b4744e00SChuck Lever 		int status
342b4744e00SChuck Lever 	),
343b4744e00SChuck Lever 
344b4744e00SChuck Lever 	TP_ARGS(r_xprt, status),
345b4744e00SChuck Lever 
346b4744e00SChuck Lever 	TP_STRUCT__entry(
347b4744e00SChuck Lever 		__field(const void *, r_xprt)
348b4744e00SChuck Lever 		__field(int, status)
349b4744e00SChuck Lever 		__field(int, connected)
350b4744e00SChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
351b4744e00SChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
352b4744e00SChuck Lever 	),
353b4744e00SChuck Lever 
354b4744e00SChuck Lever 	TP_fast_assign(
355b4744e00SChuck Lever 		__entry->r_xprt = r_xprt;
356b4744e00SChuck Lever 		__entry->status = status;
357b4744e00SChuck Lever 		__entry->connected = r_xprt->rx_ep.rep_connected;
358b4744e00SChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
359b4744e00SChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
360b4744e00SChuck Lever 	),
361b4744e00SChuck Lever 
362b4744e00SChuck Lever 	TP_printk("peer=[%s]:%s r_xprt=%p: status=%d %sconnected",
363b4744e00SChuck Lever 		__get_str(addr), __get_str(port),
364b4744e00SChuck Lever 		__entry->r_xprt, __entry->status,
365b4744e00SChuck Lever 		__entry->connected == 1 ? "still " : "dis"
366b4744e00SChuck Lever 	)
367b4744e00SChuck Lever );
368b4744e00SChuck Lever 
369b4744e00SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_conn_start);
370b4744e00SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_conn_tout);
371b4744e00SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_create);
372b4744e00SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_destroy);
373b4744e00SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_remove);
374b4744e00SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_reinsert);
375b4744e00SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_reconnect);
376b4744e00SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_inject_dsc);
377b4744e00SChuck Lever 
378b4744e00SChuck Lever /**
379ab03eff5SChuck Lever  ** Call events
380ab03eff5SChuck Lever  **/
381ab03eff5SChuck Lever 
3821c443effSChuck Lever TRACE_EVENT(xprtrdma_createmrs,
3831c443effSChuck Lever 	TP_PROTO(
3841c443effSChuck Lever 		const struct rpcrdma_xprt *r_xprt,
3851c443effSChuck Lever 		unsigned int count
3861c443effSChuck Lever 	),
3871c443effSChuck Lever 
3881c443effSChuck Lever 	TP_ARGS(r_xprt, count),
3891c443effSChuck Lever 
3901c443effSChuck Lever 	TP_STRUCT__entry(
3911c443effSChuck Lever 		__field(const void *, r_xprt)
3921c443effSChuck Lever 		__field(unsigned int, count)
3931c443effSChuck Lever 	),
3941c443effSChuck Lever 
3951c443effSChuck Lever 	TP_fast_assign(
3961c443effSChuck Lever 		__entry->r_xprt = r_xprt;
3971c443effSChuck Lever 		__entry->count = count;
3981c443effSChuck Lever 	),
3991c443effSChuck Lever 
4001c443effSChuck Lever 	TP_printk("r_xprt=%p: created %u MRs",
4011c443effSChuck Lever 		__entry->r_xprt, __entry->count
4021c443effSChuck Lever 	)
4031c443effSChuck Lever );
4041c443effSChuck Lever 
4051c443effSChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_nomrs);
4061c443effSChuck Lever 
40758f10ad4SChuck Lever DEFINE_RDCH_EVENT(xprtrdma_read_chunk);
40858f10ad4SChuck Lever DEFINE_WRCH_EVENT(xprtrdma_write_chunk);
40958f10ad4SChuck Lever DEFINE_WRCH_EVENT(xprtrdma_reply_chunk);
41058f10ad4SChuck Lever 
411ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch);
412ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_readch);
413ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_areadch);
414ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_writech);
415ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_replych);
416ab03eff5SChuck Lever 
417ab03eff5SChuck Lever #define xprtrdma_show_chunktype(x)					\
418ab03eff5SChuck Lever 		__print_symbolic(x,					\
419ab03eff5SChuck Lever 				{ rpcrdma_noch, "inline" },		\
420ab03eff5SChuck Lever 				{ rpcrdma_readch, "read list" },	\
421ab03eff5SChuck Lever 				{ rpcrdma_areadch, "*read list" },	\
422ab03eff5SChuck Lever 				{ rpcrdma_writech, "write list" },	\
423ab03eff5SChuck Lever 				{ rpcrdma_replych, "reply chunk" })
424ab03eff5SChuck Lever 
425ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_marshal,
426ab03eff5SChuck Lever 	TP_PROTO(
427ab03eff5SChuck Lever 		const struct rpc_rqst *rqst,
428ab03eff5SChuck Lever 		unsigned int hdrlen,
429ab03eff5SChuck Lever 		unsigned int rtype,
430ab03eff5SChuck Lever 		unsigned int wtype
431ab03eff5SChuck Lever 	),
432ab03eff5SChuck Lever 
433ab03eff5SChuck Lever 	TP_ARGS(rqst, hdrlen, rtype, wtype),
434ab03eff5SChuck Lever 
435ab03eff5SChuck Lever 	TP_STRUCT__entry(
436ab03eff5SChuck Lever 		__field(unsigned int, task_id)
437ab03eff5SChuck Lever 		__field(unsigned int, client_id)
438ab03eff5SChuck Lever 		__field(u32, xid)
439ab03eff5SChuck Lever 		__field(unsigned int, hdrlen)
440ab03eff5SChuck Lever 		__field(unsigned int, headlen)
441ab03eff5SChuck Lever 		__field(unsigned int, pagelen)
442ab03eff5SChuck Lever 		__field(unsigned int, taillen)
443ab03eff5SChuck Lever 		__field(unsigned int, rtype)
444ab03eff5SChuck Lever 		__field(unsigned int, wtype)
445ab03eff5SChuck Lever 	),
446ab03eff5SChuck Lever 
447ab03eff5SChuck Lever 	TP_fast_assign(
448ab03eff5SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
449ab03eff5SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
450ab03eff5SChuck Lever 		__entry->xid = be32_to_cpu(rqst->rq_xid);
451ab03eff5SChuck Lever 		__entry->hdrlen = hdrlen;
452ab03eff5SChuck Lever 		__entry->headlen = rqst->rq_snd_buf.head[0].iov_len;
453ab03eff5SChuck Lever 		__entry->pagelen = rqst->rq_snd_buf.page_len;
454ab03eff5SChuck Lever 		__entry->taillen = rqst->rq_snd_buf.tail[0].iov_len;
455ab03eff5SChuck Lever 		__entry->rtype = rtype;
456ab03eff5SChuck Lever 		__entry->wtype = wtype;
457ab03eff5SChuck Lever 	),
458ab03eff5SChuck Lever 
459ab03eff5SChuck Lever 	TP_printk("task:%u@%u xid=0x%08x: hdr=%u xdr=%u/%u/%u %s/%s",
460ab03eff5SChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
461ab03eff5SChuck Lever 		__entry->hdrlen,
462ab03eff5SChuck Lever 		__entry->headlen, __entry->pagelen, __entry->taillen,
463ab03eff5SChuck Lever 		xprtrdma_show_chunktype(__entry->rtype),
464ab03eff5SChuck Lever 		xprtrdma_show_chunktype(__entry->wtype)
465ab03eff5SChuck Lever 	)
466ab03eff5SChuck Lever );
467ab03eff5SChuck Lever 
468ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_post_send,
469ab03eff5SChuck Lever 	TP_PROTO(
470ab03eff5SChuck Lever 		const struct rpcrdma_req *req,
471ab03eff5SChuck Lever 		int status
472ab03eff5SChuck Lever 	),
473ab03eff5SChuck Lever 
474ab03eff5SChuck Lever 	TP_ARGS(req, status),
475ab03eff5SChuck Lever 
476ab03eff5SChuck Lever 	TP_STRUCT__entry(
477ab03eff5SChuck Lever 		__field(const void *, req)
478ab03eff5SChuck Lever 		__field(int, num_sge)
479ab03eff5SChuck Lever 		__field(bool, signaled)
480ab03eff5SChuck Lever 		__field(int, status)
481ab03eff5SChuck Lever 	),
482ab03eff5SChuck Lever 
483ab03eff5SChuck Lever 	TP_fast_assign(
484ab03eff5SChuck Lever 		__entry->req = req;
485ab03eff5SChuck Lever 		__entry->num_sge = req->rl_sendctx->sc_wr.num_sge;
486ab03eff5SChuck Lever 		__entry->signaled = req->rl_sendctx->sc_wr.send_flags &
487ab03eff5SChuck Lever 				    IB_SEND_SIGNALED;
488ab03eff5SChuck Lever 		__entry->status = status;
489ab03eff5SChuck Lever 	),
490ab03eff5SChuck Lever 
491ab03eff5SChuck Lever 	TP_printk("req=%p, %d SGEs%s, status=%d",
492ab03eff5SChuck Lever 		__entry->req, __entry->num_sge,
493ab03eff5SChuck Lever 		(__entry->signaled ? ", signaled" : ""),
494ab03eff5SChuck Lever 		__entry->status
495ab03eff5SChuck Lever 	)
496ab03eff5SChuck Lever );
497ab03eff5SChuck Lever 
498b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_post_recv,
499b4a7f91cSChuck Lever 	TP_PROTO(
500b4a7f91cSChuck Lever 		const struct rpcrdma_rep *rep,
501b4a7f91cSChuck Lever 		int status
502b4a7f91cSChuck Lever 	),
503b4a7f91cSChuck Lever 
504b4a7f91cSChuck Lever 	TP_ARGS(rep, status),
505b4a7f91cSChuck Lever 
506b4a7f91cSChuck Lever 	TP_STRUCT__entry(
507b4a7f91cSChuck Lever 		__field(const void *, rep)
508b4a7f91cSChuck Lever 		__field(int, status)
509b4a7f91cSChuck Lever 	),
510b4a7f91cSChuck Lever 
511b4a7f91cSChuck Lever 	TP_fast_assign(
512b4a7f91cSChuck Lever 		__entry->rep = rep;
513b4a7f91cSChuck Lever 		__entry->status = status;
514b4a7f91cSChuck Lever 	),
515b4a7f91cSChuck Lever 
516b4a7f91cSChuck Lever 	TP_printk("rep=%p status=%d",
517b4a7f91cSChuck Lever 		__entry->rep, __entry->status
518b4a7f91cSChuck Lever 	)
519b4a7f91cSChuck Lever );
520b4a7f91cSChuck Lever 
521ab03eff5SChuck Lever /**
522ab03eff5SChuck Lever  ** Completion events
523ab03eff5SChuck Lever  **/
524ab03eff5SChuck Lever 
525ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_wc_send,
526ab03eff5SChuck Lever 	TP_PROTO(
527ab03eff5SChuck Lever 		const struct rpcrdma_sendctx *sc,
528ab03eff5SChuck Lever 		const struct ib_wc *wc
529ab03eff5SChuck Lever 	),
530ab03eff5SChuck Lever 
531ab03eff5SChuck Lever 	TP_ARGS(sc, wc),
532ab03eff5SChuck Lever 
533ab03eff5SChuck Lever 	TP_STRUCT__entry(
534ab03eff5SChuck Lever 		__field(const void *, req)
535ab03eff5SChuck Lever 		__field(unsigned int, unmap_count)
536ab03eff5SChuck Lever 		__field(unsigned int, status)
537ab03eff5SChuck Lever 		__field(unsigned int, vendor_err)
538ab03eff5SChuck Lever 	),
539ab03eff5SChuck Lever 
540ab03eff5SChuck Lever 	TP_fast_assign(
541ab03eff5SChuck Lever 		__entry->req = sc->sc_req;
542ab03eff5SChuck Lever 		__entry->unmap_count = sc->sc_unmap_count;
543ab03eff5SChuck Lever 		__entry->status = wc->status;
544ab03eff5SChuck Lever 		__entry->vendor_err = __entry->status ? wc->vendor_err : 0;
545ab03eff5SChuck Lever 	),
546ab03eff5SChuck Lever 
547ab03eff5SChuck Lever 	TP_printk("req=%p, unmapped %u pages: %s (%u/0x%x)",
548ab03eff5SChuck Lever 		__entry->req, __entry->unmap_count,
549ab03eff5SChuck Lever 		rdma_show_wc_status(__entry->status),
550ab03eff5SChuck Lever 		__entry->status, __entry->vendor_err
551ab03eff5SChuck Lever 	)
552ab03eff5SChuck Lever );
553ab03eff5SChuck Lever 
554b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_wc_receive,
555b4a7f91cSChuck Lever 	TP_PROTO(
556b4a7f91cSChuck Lever 		const struct rpcrdma_rep *rep,
557b4a7f91cSChuck Lever 		const struct ib_wc *wc
558b4a7f91cSChuck Lever 	),
559b4a7f91cSChuck Lever 
560b4a7f91cSChuck Lever 	TP_ARGS(rep, wc),
561b4a7f91cSChuck Lever 
562b4a7f91cSChuck Lever 	TP_STRUCT__entry(
563b4a7f91cSChuck Lever 		__field(const void *, rep)
564b4a7f91cSChuck Lever 		__field(unsigned int, byte_len)
565b4a7f91cSChuck Lever 		__field(unsigned int, status)
566b4a7f91cSChuck Lever 		__field(unsigned int, vendor_err)
567b4a7f91cSChuck Lever 	),
568b4a7f91cSChuck Lever 
569b4a7f91cSChuck Lever 	TP_fast_assign(
570b4a7f91cSChuck Lever 		__entry->rep = rep;
571b4a7f91cSChuck Lever 		__entry->byte_len = wc->byte_len;
572b4a7f91cSChuck Lever 		__entry->status = wc->status;
573b4a7f91cSChuck Lever 		__entry->vendor_err = __entry->status ? wc->vendor_err : 0;
574b4a7f91cSChuck Lever 	),
575b4a7f91cSChuck Lever 
576b4a7f91cSChuck Lever 	TP_printk("rep=%p, %u bytes: %s (%u/0x%x)",
577b4a7f91cSChuck Lever 		__entry->rep, __entry->byte_len,
578b4a7f91cSChuck Lever 		rdma_show_wc_status(__entry->status),
579b4a7f91cSChuck Lever 		__entry->status, __entry->vendor_err
580b4a7f91cSChuck Lever 	)
581b4a7f91cSChuck Lever );
582b4a7f91cSChuck Lever 
58358f10ad4SChuck Lever DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_fastreg);
5842937fedeSChuck Lever DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_li);
5852937fedeSChuck Lever DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_li_wake);
5862937fedeSChuck Lever 
5872937fedeSChuck Lever DEFINE_MR_EVENT(xprtrdma_localinv);
5882937fedeSChuck Lever DEFINE_MR_EVENT(xprtrdma_dma_unmap);
5892937fedeSChuck Lever DEFINE_MR_EVENT(xprtrdma_remoteinv);
5901c443effSChuck Lever DEFINE_MR_EVENT(xprtrdma_recover_mr);
59158f10ad4SChuck Lever 
592b4a7f91cSChuck Lever /**
593b4a7f91cSChuck Lever  ** Reply events
594b4a7f91cSChuck Lever  **/
595b4a7f91cSChuck Lever 
596b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_reply,
597b4a7f91cSChuck Lever 	TP_PROTO(
598b4a7f91cSChuck Lever 		const struct rpc_task *task,
599b4a7f91cSChuck Lever 		const struct rpcrdma_rep *rep,
600b4a7f91cSChuck Lever 		const struct rpcrdma_req *req,
601b4a7f91cSChuck Lever 		unsigned int credits
602b4a7f91cSChuck Lever 	),
603b4a7f91cSChuck Lever 
604b4a7f91cSChuck Lever 	TP_ARGS(task, rep, req, credits),
605b4a7f91cSChuck Lever 
606b4a7f91cSChuck Lever 	TP_STRUCT__entry(
607b4a7f91cSChuck Lever 		__field(unsigned int, task_id)
608b4a7f91cSChuck Lever 		__field(unsigned int, client_id)
609b4a7f91cSChuck Lever 		__field(const void *, rep)
610b4a7f91cSChuck Lever 		__field(const void *, req)
611b4a7f91cSChuck Lever 		__field(u32, xid)
612b4a7f91cSChuck Lever 		__field(unsigned int, credits)
613b4a7f91cSChuck Lever 	),
614b4a7f91cSChuck Lever 
615b4a7f91cSChuck Lever 	TP_fast_assign(
616b4a7f91cSChuck Lever 		__entry->task_id = task->tk_pid;
617b4a7f91cSChuck Lever 		__entry->client_id = task->tk_client->cl_clid;
618b4a7f91cSChuck Lever 		__entry->rep = rep;
619b4a7f91cSChuck Lever 		__entry->req = req;
620b4a7f91cSChuck Lever 		__entry->xid = be32_to_cpu(rep->rr_xid);
621b4a7f91cSChuck Lever 		__entry->credits = credits;
622b4a7f91cSChuck Lever 	),
623b4a7f91cSChuck Lever 
624b4a7f91cSChuck Lever 	TP_printk("task:%u@%u xid=0x%08x, %u credits, rep=%p -> req=%p",
625b4a7f91cSChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
626b4a7f91cSChuck Lever 		__entry->credits, __entry->rep, __entry->req
627b4a7f91cSChuck Lever 	)
628b4a7f91cSChuck Lever );
629b4a7f91cSChuck Lever 
630b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_defer_cmp,
631b4a7f91cSChuck Lever 	TP_PROTO(
632b4a7f91cSChuck Lever 		const struct rpcrdma_rep *rep
633b4a7f91cSChuck Lever 	),
634b4a7f91cSChuck Lever 
635b4a7f91cSChuck Lever 	TP_ARGS(rep),
636b4a7f91cSChuck Lever 
637b4a7f91cSChuck Lever 	TP_STRUCT__entry(
638b4a7f91cSChuck Lever 		__field(unsigned int, task_id)
639b4a7f91cSChuck Lever 		__field(unsigned int, client_id)
640b4a7f91cSChuck Lever 		__field(const void *, rep)
641b4a7f91cSChuck Lever 		__field(u32, xid)
642b4a7f91cSChuck Lever 	),
643b4a7f91cSChuck Lever 
644b4a7f91cSChuck Lever 	TP_fast_assign(
645b4a7f91cSChuck Lever 		__entry->task_id = rep->rr_rqst->rq_task->tk_pid;
646b4a7f91cSChuck Lever 		__entry->client_id = rep->rr_rqst->rq_task->tk_client->cl_clid;
647b4a7f91cSChuck Lever 		__entry->rep = rep;
648b4a7f91cSChuck Lever 		__entry->xid = be32_to_cpu(rep->rr_xid);
649b4a7f91cSChuck Lever 	),
650b4a7f91cSChuck Lever 
651b4a7f91cSChuck Lever 	TP_printk("task:%u@%u xid=0x%08x rep=%p",
652b4a7f91cSChuck Lever 		__entry->task_id, __entry->client_id, __entry->xid,
653b4a7f91cSChuck Lever 		__entry->rep
654b4a7f91cSChuck Lever 	)
655b4a7f91cSChuck Lever );
656b4a7f91cSChuck Lever 
657b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_vers);
658b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_rqst);
659b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_short);
660b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_hdr);
661b4a7f91cSChuck Lever 
662e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_fixup,
663e11b7c96SChuck Lever 	TP_PROTO(
664e11b7c96SChuck Lever 		const struct rpc_rqst *rqst,
665e11b7c96SChuck Lever 		int len,
666e11b7c96SChuck Lever 		int hdrlen
667e11b7c96SChuck Lever 	),
668e11b7c96SChuck Lever 
669e11b7c96SChuck Lever 	TP_ARGS(rqst, len, hdrlen),
670e11b7c96SChuck Lever 
671e11b7c96SChuck Lever 	TP_STRUCT__entry(
672e11b7c96SChuck Lever 		__field(unsigned int, task_id)
673e11b7c96SChuck Lever 		__field(unsigned int, client_id)
674e11b7c96SChuck Lever 		__field(const void *, base)
675e11b7c96SChuck Lever 		__field(int, len)
676e11b7c96SChuck Lever 		__field(int, hdrlen)
677e11b7c96SChuck Lever 	),
678e11b7c96SChuck Lever 
679e11b7c96SChuck Lever 	TP_fast_assign(
680e11b7c96SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
681e11b7c96SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
682e11b7c96SChuck Lever 		__entry->base = rqst->rq_rcv_buf.head[0].iov_base;
683e11b7c96SChuck Lever 		__entry->len = len;
684e11b7c96SChuck Lever 		__entry->hdrlen = hdrlen;
685e11b7c96SChuck Lever 	),
686e11b7c96SChuck Lever 
687e11b7c96SChuck Lever 	TP_printk("task:%u@%u base=%p len=%d hdrlen=%d",
688e11b7c96SChuck Lever 		__entry->task_id, __entry->client_id,
689e11b7c96SChuck Lever 		__entry->base, __entry->len, __entry->hdrlen
690e11b7c96SChuck Lever 	)
691e11b7c96SChuck Lever );
692e11b7c96SChuck Lever 
693e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_fixup_pg,
694e11b7c96SChuck Lever 	TP_PROTO(
695e11b7c96SChuck Lever 		const struct rpc_rqst *rqst,
696e11b7c96SChuck Lever 		int pageno,
697e11b7c96SChuck Lever 		const void *pos,
698e11b7c96SChuck Lever 		int len,
699e11b7c96SChuck Lever 		int curlen
700e11b7c96SChuck Lever 	),
701e11b7c96SChuck Lever 
702e11b7c96SChuck Lever 	TP_ARGS(rqst, pageno, pos, len, curlen),
703e11b7c96SChuck Lever 
704e11b7c96SChuck Lever 	TP_STRUCT__entry(
705e11b7c96SChuck Lever 		__field(unsigned int, task_id)
706e11b7c96SChuck Lever 		__field(unsigned int, client_id)
707e11b7c96SChuck Lever 		__field(const void *, pos)
708e11b7c96SChuck Lever 		__field(int, pageno)
709e11b7c96SChuck Lever 		__field(int, len)
710e11b7c96SChuck Lever 		__field(int, curlen)
711e11b7c96SChuck Lever 	),
712e11b7c96SChuck Lever 
713e11b7c96SChuck Lever 	TP_fast_assign(
714e11b7c96SChuck Lever 		__entry->task_id = rqst->rq_task->tk_pid;
715e11b7c96SChuck Lever 		__entry->client_id = rqst->rq_task->tk_client->cl_clid;
716e11b7c96SChuck Lever 		__entry->pos = pos;
717e11b7c96SChuck Lever 		__entry->pageno = pageno;
718e11b7c96SChuck Lever 		__entry->len = len;
719e11b7c96SChuck Lever 		__entry->curlen = curlen;
720e11b7c96SChuck Lever 	),
721e11b7c96SChuck Lever 
722e11b7c96SChuck Lever 	TP_printk("task:%u@%u pageno=%d pos=%p len=%d curlen=%d",
723e11b7c96SChuck Lever 		__entry->task_id, __entry->client_id,
724e11b7c96SChuck Lever 		__entry->pageno, __entry->pos, __entry->len, __entry->curlen
725e11b7c96SChuck Lever 	)
726e11b7c96SChuck Lever );
727e11b7c96SChuck Lever 
728e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_decode_seg,
729e11b7c96SChuck Lever 	TP_PROTO(
730e11b7c96SChuck Lever 		u32 handle,
731e11b7c96SChuck Lever 		u32 length,
732e11b7c96SChuck Lever 		u64 offset
733e11b7c96SChuck Lever 	),
734e11b7c96SChuck Lever 
735e11b7c96SChuck Lever 	TP_ARGS(handle, length, offset),
736e11b7c96SChuck Lever 
737e11b7c96SChuck Lever 	TP_STRUCT__entry(
738e11b7c96SChuck Lever 		__field(u32, handle)
739e11b7c96SChuck Lever 		__field(u32, length)
740e11b7c96SChuck Lever 		__field(u64, offset)
741e11b7c96SChuck Lever 	),
742e11b7c96SChuck Lever 
743e11b7c96SChuck Lever 	TP_fast_assign(
744e11b7c96SChuck Lever 		__entry->handle = handle;
745e11b7c96SChuck Lever 		__entry->length = length;
746e11b7c96SChuck Lever 		__entry->offset = offset;
747e11b7c96SChuck Lever 	),
748e11b7c96SChuck Lever 
749e11b7c96SChuck Lever 	TP_printk("%u@0x%016llx:0x%08x",
750e11b7c96SChuck Lever 		__entry->length, (unsigned long long)__entry->offset,
751e11b7c96SChuck Lever 		__entry->handle
752e11b7c96SChuck Lever 	)
753e11b7c96SChuck Lever );
754e11b7c96SChuck Lever 
755fc1eb807SChuck Lever /**
756fc1eb807SChuck Lever  ** Callback events
757fc1eb807SChuck Lever  **/
758fc1eb807SChuck Lever 
759fc1eb807SChuck Lever TRACE_EVENT(xprtrdma_cb_setup,
760fc1eb807SChuck Lever 	TP_PROTO(
761fc1eb807SChuck Lever 		const struct rpcrdma_xprt *r_xprt,
762fc1eb807SChuck Lever 		unsigned int reqs
763fc1eb807SChuck Lever 	),
764fc1eb807SChuck Lever 
765fc1eb807SChuck Lever 	TP_ARGS(r_xprt, reqs),
766fc1eb807SChuck Lever 
767fc1eb807SChuck Lever 	TP_STRUCT__entry(
768fc1eb807SChuck Lever 		__field(const void *, r_xprt)
769fc1eb807SChuck Lever 		__field(unsigned int, reqs)
770fc1eb807SChuck Lever 		__string(addr, rpcrdma_addrstr(r_xprt))
771fc1eb807SChuck Lever 		__string(port, rpcrdma_portstr(r_xprt))
772fc1eb807SChuck Lever 	),
773fc1eb807SChuck Lever 
774fc1eb807SChuck Lever 	TP_fast_assign(
775fc1eb807SChuck Lever 		__entry->r_xprt = r_xprt;
776fc1eb807SChuck Lever 		__entry->reqs = reqs;
777fc1eb807SChuck Lever 		__assign_str(addr, rpcrdma_addrstr(r_xprt));
778fc1eb807SChuck Lever 		__assign_str(port, rpcrdma_portstr(r_xprt));
779fc1eb807SChuck Lever 	),
780fc1eb807SChuck Lever 
781fc1eb807SChuck Lever 	TP_printk("peer=[%s]:%s r_xprt=%p: %u reqs",
782fc1eb807SChuck Lever 		__get_str(addr), __get_str(port),
783fc1eb807SChuck Lever 		__entry->r_xprt, __entry->reqs
784fc1eb807SChuck Lever 	)
785fc1eb807SChuck Lever );
786fc1eb807SChuck Lever 
787fc1eb807SChuck Lever DEFINE_CB_EVENT(xprtrdma_cb_call);
788fc1eb807SChuck Lever DEFINE_CB_EVENT(xprtrdma_cb_reply);
789fc1eb807SChuck Lever 
790e48f083eSChuck Lever #endif /* _TRACE_RPCRDMA_H */
791e48f083eSChuck Lever 
792e48f083eSChuck Lever #include <trace/define_trace.h>
793