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 /** 15ab03eff5SChuck Lever ** Call events 16ab03eff5SChuck Lever **/ 17ab03eff5SChuck Lever 18ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch); 19ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_readch); 20ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_areadch); 21ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_writech); 22ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_replych); 23ab03eff5SChuck Lever 24ab03eff5SChuck Lever #define xprtrdma_show_chunktype(x) \ 25ab03eff5SChuck Lever __print_symbolic(x, \ 26ab03eff5SChuck Lever { rpcrdma_noch, "inline" }, \ 27ab03eff5SChuck Lever { rpcrdma_readch, "read list" }, \ 28ab03eff5SChuck Lever { rpcrdma_areadch, "*read list" }, \ 29ab03eff5SChuck Lever { rpcrdma_writech, "write list" }, \ 30ab03eff5SChuck Lever { rpcrdma_replych, "reply chunk" }) 31ab03eff5SChuck Lever 32ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_marshal, 33ab03eff5SChuck Lever TP_PROTO( 34ab03eff5SChuck Lever const struct rpc_rqst *rqst, 35ab03eff5SChuck Lever unsigned int hdrlen, 36ab03eff5SChuck Lever unsigned int rtype, 37ab03eff5SChuck Lever unsigned int wtype 38ab03eff5SChuck Lever ), 39ab03eff5SChuck Lever 40ab03eff5SChuck Lever TP_ARGS(rqst, hdrlen, rtype, wtype), 41ab03eff5SChuck Lever 42ab03eff5SChuck Lever TP_STRUCT__entry( 43ab03eff5SChuck Lever __field(unsigned int, task_id) 44ab03eff5SChuck Lever __field(unsigned int, client_id) 45ab03eff5SChuck Lever __field(u32, xid) 46ab03eff5SChuck Lever __field(unsigned int, hdrlen) 47ab03eff5SChuck Lever __field(unsigned int, headlen) 48ab03eff5SChuck Lever __field(unsigned int, pagelen) 49ab03eff5SChuck Lever __field(unsigned int, taillen) 50ab03eff5SChuck Lever __field(unsigned int, rtype) 51ab03eff5SChuck Lever __field(unsigned int, wtype) 52ab03eff5SChuck Lever ), 53ab03eff5SChuck Lever 54ab03eff5SChuck Lever TP_fast_assign( 55ab03eff5SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 56ab03eff5SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 57ab03eff5SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 58ab03eff5SChuck Lever __entry->hdrlen = hdrlen; 59ab03eff5SChuck Lever __entry->headlen = rqst->rq_snd_buf.head[0].iov_len; 60ab03eff5SChuck Lever __entry->pagelen = rqst->rq_snd_buf.page_len; 61ab03eff5SChuck Lever __entry->taillen = rqst->rq_snd_buf.tail[0].iov_len; 62ab03eff5SChuck Lever __entry->rtype = rtype; 63ab03eff5SChuck Lever __entry->wtype = wtype; 64ab03eff5SChuck Lever ), 65ab03eff5SChuck Lever 66ab03eff5SChuck Lever TP_printk("task:%u@%u xid=0x%08x: hdr=%u xdr=%u/%u/%u %s/%s", 67ab03eff5SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 68ab03eff5SChuck Lever __entry->hdrlen, 69ab03eff5SChuck Lever __entry->headlen, __entry->pagelen, __entry->taillen, 70ab03eff5SChuck Lever xprtrdma_show_chunktype(__entry->rtype), 71ab03eff5SChuck Lever xprtrdma_show_chunktype(__entry->wtype) 72ab03eff5SChuck Lever ) 73ab03eff5SChuck Lever ); 74ab03eff5SChuck Lever 75ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_post_send, 76ab03eff5SChuck Lever TP_PROTO( 77ab03eff5SChuck Lever const struct rpcrdma_req *req, 78ab03eff5SChuck Lever int status 79ab03eff5SChuck Lever ), 80ab03eff5SChuck Lever 81ab03eff5SChuck Lever TP_ARGS(req, status), 82ab03eff5SChuck Lever 83ab03eff5SChuck Lever TP_STRUCT__entry( 84ab03eff5SChuck Lever __field(const void *, req) 85ab03eff5SChuck Lever __field(int, num_sge) 86ab03eff5SChuck Lever __field(bool, signaled) 87ab03eff5SChuck Lever __field(int, status) 88ab03eff5SChuck Lever ), 89ab03eff5SChuck Lever 90ab03eff5SChuck Lever TP_fast_assign( 91ab03eff5SChuck Lever __entry->req = req; 92ab03eff5SChuck Lever __entry->num_sge = req->rl_sendctx->sc_wr.num_sge; 93ab03eff5SChuck Lever __entry->signaled = req->rl_sendctx->sc_wr.send_flags & 94ab03eff5SChuck Lever IB_SEND_SIGNALED; 95ab03eff5SChuck Lever __entry->status = status; 96ab03eff5SChuck Lever ), 97ab03eff5SChuck Lever 98ab03eff5SChuck Lever TP_printk("req=%p, %d SGEs%s, status=%d", 99ab03eff5SChuck Lever __entry->req, __entry->num_sge, 100ab03eff5SChuck Lever (__entry->signaled ? ", signaled" : ""), 101ab03eff5SChuck Lever __entry->status 102ab03eff5SChuck Lever ) 103ab03eff5SChuck Lever ); 104ab03eff5SChuck Lever 105ab03eff5SChuck Lever /** 106ab03eff5SChuck Lever ** Completion events 107ab03eff5SChuck Lever **/ 108ab03eff5SChuck Lever 109ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_wc_send, 110ab03eff5SChuck Lever TP_PROTO( 111ab03eff5SChuck Lever const struct rpcrdma_sendctx *sc, 112ab03eff5SChuck Lever const struct ib_wc *wc 113ab03eff5SChuck Lever ), 114ab03eff5SChuck Lever 115ab03eff5SChuck Lever TP_ARGS(sc, wc), 116ab03eff5SChuck Lever 117ab03eff5SChuck Lever TP_STRUCT__entry( 118ab03eff5SChuck Lever __field(const void *, req) 119ab03eff5SChuck Lever __field(unsigned int, unmap_count) 120ab03eff5SChuck Lever __field(unsigned int, status) 121ab03eff5SChuck Lever __field(unsigned int, vendor_err) 122ab03eff5SChuck Lever ), 123ab03eff5SChuck Lever 124ab03eff5SChuck Lever TP_fast_assign( 125ab03eff5SChuck Lever __entry->req = sc->sc_req; 126ab03eff5SChuck Lever __entry->unmap_count = sc->sc_unmap_count; 127ab03eff5SChuck Lever __entry->status = wc->status; 128ab03eff5SChuck Lever __entry->vendor_err = __entry->status ? wc->vendor_err : 0; 129ab03eff5SChuck Lever ), 130ab03eff5SChuck Lever 131ab03eff5SChuck Lever TP_printk("req=%p, unmapped %u pages: %s (%u/0x%x)", 132ab03eff5SChuck Lever __entry->req, __entry->unmap_count, 133ab03eff5SChuck Lever rdma_show_wc_status(__entry->status), 134ab03eff5SChuck Lever __entry->status, __entry->vendor_err 135ab03eff5SChuck Lever ) 136ab03eff5SChuck Lever ); 137ab03eff5SChuck Lever 138e48f083eSChuck Lever #endif /* _TRACE_RPCRDMA_H */ 139e48f083eSChuck Lever 140e48f083eSChuck Lever #include <trace/define_trace.h> 141