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 5458f10ad4SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_rdch_event, 5558f10ad4SChuck Lever TP_PROTO( 5658f10ad4SChuck Lever const struct rpc_task *task, 5758f10ad4SChuck Lever unsigned int pos, 5858f10ad4SChuck Lever struct rpcrdma_mr *mr, 5958f10ad4SChuck Lever int nsegs 6058f10ad4SChuck Lever ), 6158f10ad4SChuck Lever 6258f10ad4SChuck Lever TP_ARGS(task, pos, mr, nsegs), 6358f10ad4SChuck Lever 6458f10ad4SChuck Lever TP_STRUCT__entry( 6558f10ad4SChuck Lever __field(unsigned int, task_id) 6658f10ad4SChuck Lever __field(unsigned int, client_id) 6758f10ad4SChuck Lever __field(const void *, mr) 6858f10ad4SChuck Lever __field(unsigned int, pos) 6958f10ad4SChuck Lever __field(int, nents) 7058f10ad4SChuck Lever __field(u32, handle) 7158f10ad4SChuck Lever __field(u32, length) 7258f10ad4SChuck Lever __field(u64, offset) 7358f10ad4SChuck Lever __field(int, nsegs) 7458f10ad4SChuck Lever ), 7558f10ad4SChuck Lever 7658f10ad4SChuck Lever TP_fast_assign( 7758f10ad4SChuck Lever __entry->task_id = task->tk_pid; 7858f10ad4SChuck Lever __entry->client_id = task->tk_client->cl_clid; 7958f10ad4SChuck Lever __entry->mr = mr; 8058f10ad4SChuck Lever __entry->pos = pos; 8158f10ad4SChuck Lever __entry->nents = mr->mr_nents; 8258f10ad4SChuck Lever __entry->handle = mr->mr_handle; 8358f10ad4SChuck Lever __entry->length = mr->mr_length; 8458f10ad4SChuck Lever __entry->offset = mr->mr_offset; 8558f10ad4SChuck Lever __entry->nsegs = nsegs; 8658f10ad4SChuck Lever ), 8758f10ad4SChuck Lever 8858f10ad4SChuck Lever TP_printk("task:%u@%u mr=%p pos=%u %u@0x%016llx:0x%08x (%s)", 8958f10ad4SChuck Lever __entry->task_id, __entry->client_id, __entry->mr, 9058f10ad4SChuck Lever __entry->pos, __entry->length, 9158f10ad4SChuck Lever (unsigned long long)__entry->offset, __entry->handle, 9258f10ad4SChuck Lever __entry->nents < __entry->nsegs ? "more" : "last" 9358f10ad4SChuck Lever ) 9458f10ad4SChuck Lever ); 9558f10ad4SChuck Lever 9658f10ad4SChuck Lever #define DEFINE_RDCH_EVENT(name) \ 9758f10ad4SChuck Lever DEFINE_EVENT(xprtrdma_rdch_event, name, \ 9858f10ad4SChuck Lever TP_PROTO( \ 9958f10ad4SChuck Lever const struct rpc_task *task, \ 10058f10ad4SChuck Lever unsigned int pos, \ 10158f10ad4SChuck Lever struct rpcrdma_mr *mr, \ 10258f10ad4SChuck Lever int nsegs \ 10358f10ad4SChuck Lever ), \ 10458f10ad4SChuck Lever TP_ARGS(task, pos, mr, nsegs)) 10558f10ad4SChuck Lever 10658f10ad4SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_wrch_event, 10758f10ad4SChuck Lever TP_PROTO( 10858f10ad4SChuck Lever const struct rpc_task *task, 10958f10ad4SChuck Lever struct rpcrdma_mr *mr, 11058f10ad4SChuck Lever int nsegs 11158f10ad4SChuck Lever ), 11258f10ad4SChuck Lever 11358f10ad4SChuck Lever TP_ARGS(task, mr, nsegs), 11458f10ad4SChuck Lever 11558f10ad4SChuck Lever TP_STRUCT__entry( 11658f10ad4SChuck Lever __field(unsigned int, task_id) 11758f10ad4SChuck Lever __field(unsigned int, client_id) 11858f10ad4SChuck Lever __field(const void *, mr) 11958f10ad4SChuck Lever __field(int, nents) 12058f10ad4SChuck Lever __field(u32, handle) 12158f10ad4SChuck Lever __field(u32, length) 12258f10ad4SChuck Lever __field(u64, offset) 12358f10ad4SChuck Lever __field(int, nsegs) 12458f10ad4SChuck Lever ), 12558f10ad4SChuck Lever 12658f10ad4SChuck Lever TP_fast_assign( 12758f10ad4SChuck Lever __entry->task_id = task->tk_pid; 12858f10ad4SChuck Lever __entry->client_id = task->tk_client->cl_clid; 12958f10ad4SChuck Lever __entry->mr = mr; 13058f10ad4SChuck Lever __entry->nents = mr->mr_nents; 13158f10ad4SChuck Lever __entry->handle = mr->mr_handle; 13258f10ad4SChuck Lever __entry->length = mr->mr_length; 13358f10ad4SChuck Lever __entry->offset = mr->mr_offset; 13458f10ad4SChuck Lever __entry->nsegs = nsegs; 13558f10ad4SChuck Lever ), 13658f10ad4SChuck Lever 13758f10ad4SChuck Lever TP_printk("task:%u@%u mr=%p %u@0x%016llx:0x%08x (%s)", 13858f10ad4SChuck Lever __entry->task_id, __entry->client_id, __entry->mr, 13958f10ad4SChuck Lever __entry->length, (unsigned long long)__entry->offset, 14058f10ad4SChuck Lever __entry->handle, 14158f10ad4SChuck Lever __entry->nents < __entry->nsegs ? "more" : "last" 14258f10ad4SChuck Lever ) 14358f10ad4SChuck Lever ); 14458f10ad4SChuck Lever 14558f10ad4SChuck Lever #define DEFINE_WRCH_EVENT(name) \ 14658f10ad4SChuck Lever DEFINE_EVENT(xprtrdma_wrch_event, name, \ 14758f10ad4SChuck Lever TP_PROTO( \ 14858f10ad4SChuck Lever const struct rpc_task *task, \ 14958f10ad4SChuck Lever struct rpcrdma_mr *mr, \ 15058f10ad4SChuck Lever int nsegs \ 15158f10ad4SChuck Lever ), \ 15258f10ad4SChuck Lever TP_ARGS(task, mr, nsegs)) 15358f10ad4SChuck Lever 15458f10ad4SChuck Lever TRACE_DEFINE_ENUM(FRWR_IS_INVALID); 15558f10ad4SChuck Lever TRACE_DEFINE_ENUM(FRWR_IS_VALID); 15658f10ad4SChuck Lever TRACE_DEFINE_ENUM(FRWR_FLUSHED_FR); 15758f10ad4SChuck Lever TRACE_DEFINE_ENUM(FRWR_FLUSHED_LI); 15858f10ad4SChuck Lever 15958f10ad4SChuck Lever #define xprtrdma_show_frwr_state(x) \ 16058f10ad4SChuck Lever __print_symbolic(x, \ 16158f10ad4SChuck Lever { FRWR_IS_INVALID, "INVALID" }, \ 16258f10ad4SChuck Lever { FRWR_IS_VALID, "VALID" }, \ 16358f10ad4SChuck Lever { FRWR_FLUSHED_FR, "FLUSHED_FR" }, \ 16458f10ad4SChuck Lever { FRWR_FLUSHED_LI, "FLUSHED_LI" }) 16558f10ad4SChuck Lever 16658f10ad4SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_frwr_done, 16758f10ad4SChuck Lever TP_PROTO( 16858f10ad4SChuck Lever const struct ib_wc *wc, 16958f10ad4SChuck Lever const struct rpcrdma_frwr *frwr 17058f10ad4SChuck Lever ), 17158f10ad4SChuck Lever 17258f10ad4SChuck Lever TP_ARGS(wc, frwr), 17358f10ad4SChuck Lever 17458f10ad4SChuck Lever TP_STRUCT__entry( 17558f10ad4SChuck Lever __field(const void *, mr) 17658f10ad4SChuck Lever __field(unsigned int, state) 17758f10ad4SChuck Lever __field(unsigned int, status) 17858f10ad4SChuck Lever __field(unsigned int, vendor_err) 17958f10ad4SChuck Lever ), 18058f10ad4SChuck Lever 18158f10ad4SChuck Lever TP_fast_assign( 18258f10ad4SChuck Lever __entry->mr = container_of(frwr, struct rpcrdma_mr, frwr); 18358f10ad4SChuck Lever __entry->state = frwr->fr_state; 18458f10ad4SChuck Lever __entry->status = wc->status; 18558f10ad4SChuck Lever __entry->vendor_err = __entry->status ? wc->vendor_err : 0; 18658f10ad4SChuck Lever ), 18758f10ad4SChuck Lever 18858f10ad4SChuck Lever TP_printk( 18958f10ad4SChuck Lever "mr=%p state=%s: %s (%u/0x%x)", 19058f10ad4SChuck Lever __entry->mr, xprtrdma_show_frwr_state(__entry->state), 19158f10ad4SChuck Lever rdma_show_wc_status(__entry->status), 19258f10ad4SChuck Lever __entry->status, __entry->vendor_err 19358f10ad4SChuck Lever ) 19458f10ad4SChuck Lever ); 19558f10ad4SChuck Lever 19658f10ad4SChuck Lever #define DEFINE_FRWR_DONE_EVENT(name) \ 19758f10ad4SChuck Lever DEFINE_EVENT(xprtrdma_frwr_done, name, \ 19858f10ad4SChuck Lever TP_PROTO( \ 19958f10ad4SChuck Lever const struct ib_wc *wc, \ 20058f10ad4SChuck Lever const struct rpcrdma_frwr *frwr \ 20158f10ad4SChuck Lever ), \ 20258f10ad4SChuck Lever TP_ARGS(wc, frwr)) 20358f10ad4SChuck Lever 204b4a7f91cSChuck Lever /** 205ab03eff5SChuck Lever ** Call events 206ab03eff5SChuck Lever **/ 207ab03eff5SChuck Lever 20858f10ad4SChuck Lever DEFINE_RDCH_EVENT(xprtrdma_read_chunk); 20958f10ad4SChuck Lever DEFINE_WRCH_EVENT(xprtrdma_write_chunk); 21058f10ad4SChuck Lever DEFINE_WRCH_EVENT(xprtrdma_reply_chunk); 21158f10ad4SChuck Lever 212ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch); 213ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_readch); 214ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_areadch); 215ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_writech); 216ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_replych); 217ab03eff5SChuck Lever 218ab03eff5SChuck Lever #define xprtrdma_show_chunktype(x) \ 219ab03eff5SChuck Lever __print_symbolic(x, \ 220ab03eff5SChuck Lever { rpcrdma_noch, "inline" }, \ 221ab03eff5SChuck Lever { rpcrdma_readch, "read list" }, \ 222ab03eff5SChuck Lever { rpcrdma_areadch, "*read list" }, \ 223ab03eff5SChuck Lever { rpcrdma_writech, "write list" }, \ 224ab03eff5SChuck Lever { rpcrdma_replych, "reply chunk" }) 225ab03eff5SChuck Lever 226ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_marshal, 227ab03eff5SChuck Lever TP_PROTO( 228ab03eff5SChuck Lever const struct rpc_rqst *rqst, 229ab03eff5SChuck Lever unsigned int hdrlen, 230ab03eff5SChuck Lever unsigned int rtype, 231ab03eff5SChuck Lever unsigned int wtype 232ab03eff5SChuck Lever ), 233ab03eff5SChuck Lever 234ab03eff5SChuck Lever TP_ARGS(rqst, hdrlen, rtype, wtype), 235ab03eff5SChuck Lever 236ab03eff5SChuck Lever TP_STRUCT__entry( 237ab03eff5SChuck Lever __field(unsigned int, task_id) 238ab03eff5SChuck Lever __field(unsigned int, client_id) 239ab03eff5SChuck Lever __field(u32, xid) 240ab03eff5SChuck Lever __field(unsigned int, hdrlen) 241ab03eff5SChuck Lever __field(unsigned int, headlen) 242ab03eff5SChuck Lever __field(unsigned int, pagelen) 243ab03eff5SChuck Lever __field(unsigned int, taillen) 244ab03eff5SChuck Lever __field(unsigned int, rtype) 245ab03eff5SChuck Lever __field(unsigned int, wtype) 246ab03eff5SChuck Lever ), 247ab03eff5SChuck Lever 248ab03eff5SChuck Lever TP_fast_assign( 249ab03eff5SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 250ab03eff5SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 251ab03eff5SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 252ab03eff5SChuck Lever __entry->hdrlen = hdrlen; 253ab03eff5SChuck Lever __entry->headlen = rqst->rq_snd_buf.head[0].iov_len; 254ab03eff5SChuck Lever __entry->pagelen = rqst->rq_snd_buf.page_len; 255ab03eff5SChuck Lever __entry->taillen = rqst->rq_snd_buf.tail[0].iov_len; 256ab03eff5SChuck Lever __entry->rtype = rtype; 257ab03eff5SChuck Lever __entry->wtype = wtype; 258ab03eff5SChuck Lever ), 259ab03eff5SChuck Lever 260ab03eff5SChuck Lever TP_printk("task:%u@%u xid=0x%08x: hdr=%u xdr=%u/%u/%u %s/%s", 261ab03eff5SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 262ab03eff5SChuck Lever __entry->hdrlen, 263ab03eff5SChuck Lever __entry->headlen, __entry->pagelen, __entry->taillen, 264ab03eff5SChuck Lever xprtrdma_show_chunktype(__entry->rtype), 265ab03eff5SChuck Lever xprtrdma_show_chunktype(__entry->wtype) 266ab03eff5SChuck Lever ) 267ab03eff5SChuck Lever ); 268ab03eff5SChuck Lever 269ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_post_send, 270ab03eff5SChuck Lever TP_PROTO( 271ab03eff5SChuck Lever const struct rpcrdma_req *req, 272ab03eff5SChuck Lever int status 273ab03eff5SChuck Lever ), 274ab03eff5SChuck Lever 275ab03eff5SChuck Lever TP_ARGS(req, status), 276ab03eff5SChuck Lever 277ab03eff5SChuck Lever TP_STRUCT__entry( 278ab03eff5SChuck Lever __field(const void *, req) 279ab03eff5SChuck Lever __field(int, num_sge) 280ab03eff5SChuck Lever __field(bool, signaled) 281ab03eff5SChuck Lever __field(int, status) 282ab03eff5SChuck Lever ), 283ab03eff5SChuck Lever 284ab03eff5SChuck Lever TP_fast_assign( 285ab03eff5SChuck Lever __entry->req = req; 286ab03eff5SChuck Lever __entry->num_sge = req->rl_sendctx->sc_wr.num_sge; 287ab03eff5SChuck Lever __entry->signaled = req->rl_sendctx->sc_wr.send_flags & 288ab03eff5SChuck Lever IB_SEND_SIGNALED; 289ab03eff5SChuck Lever __entry->status = status; 290ab03eff5SChuck Lever ), 291ab03eff5SChuck Lever 292ab03eff5SChuck Lever TP_printk("req=%p, %d SGEs%s, status=%d", 293ab03eff5SChuck Lever __entry->req, __entry->num_sge, 294ab03eff5SChuck Lever (__entry->signaled ? ", signaled" : ""), 295ab03eff5SChuck Lever __entry->status 296ab03eff5SChuck Lever ) 297ab03eff5SChuck Lever ); 298ab03eff5SChuck Lever 299b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_post_recv, 300b4a7f91cSChuck Lever TP_PROTO( 301b4a7f91cSChuck Lever const struct rpcrdma_rep *rep, 302b4a7f91cSChuck Lever int status 303b4a7f91cSChuck Lever ), 304b4a7f91cSChuck Lever 305b4a7f91cSChuck Lever TP_ARGS(rep, status), 306b4a7f91cSChuck Lever 307b4a7f91cSChuck Lever TP_STRUCT__entry( 308b4a7f91cSChuck Lever __field(const void *, rep) 309b4a7f91cSChuck Lever __field(int, status) 310b4a7f91cSChuck Lever ), 311b4a7f91cSChuck Lever 312b4a7f91cSChuck Lever TP_fast_assign( 313b4a7f91cSChuck Lever __entry->rep = rep; 314b4a7f91cSChuck Lever __entry->status = status; 315b4a7f91cSChuck Lever ), 316b4a7f91cSChuck Lever 317b4a7f91cSChuck Lever TP_printk("rep=%p status=%d", 318b4a7f91cSChuck Lever __entry->rep, __entry->status 319b4a7f91cSChuck Lever ) 320b4a7f91cSChuck Lever ); 321b4a7f91cSChuck Lever 322ab03eff5SChuck Lever /** 323ab03eff5SChuck Lever ** Completion events 324ab03eff5SChuck Lever **/ 325ab03eff5SChuck Lever 326ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_wc_send, 327ab03eff5SChuck Lever TP_PROTO( 328ab03eff5SChuck Lever const struct rpcrdma_sendctx *sc, 329ab03eff5SChuck Lever const struct ib_wc *wc 330ab03eff5SChuck Lever ), 331ab03eff5SChuck Lever 332ab03eff5SChuck Lever TP_ARGS(sc, wc), 333ab03eff5SChuck Lever 334ab03eff5SChuck Lever TP_STRUCT__entry( 335ab03eff5SChuck Lever __field(const void *, req) 336ab03eff5SChuck Lever __field(unsigned int, unmap_count) 337ab03eff5SChuck Lever __field(unsigned int, status) 338ab03eff5SChuck Lever __field(unsigned int, vendor_err) 339ab03eff5SChuck Lever ), 340ab03eff5SChuck Lever 341ab03eff5SChuck Lever TP_fast_assign( 342ab03eff5SChuck Lever __entry->req = sc->sc_req; 343ab03eff5SChuck Lever __entry->unmap_count = sc->sc_unmap_count; 344ab03eff5SChuck Lever __entry->status = wc->status; 345ab03eff5SChuck Lever __entry->vendor_err = __entry->status ? wc->vendor_err : 0; 346ab03eff5SChuck Lever ), 347ab03eff5SChuck Lever 348ab03eff5SChuck Lever TP_printk("req=%p, unmapped %u pages: %s (%u/0x%x)", 349ab03eff5SChuck Lever __entry->req, __entry->unmap_count, 350ab03eff5SChuck Lever rdma_show_wc_status(__entry->status), 351ab03eff5SChuck Lever __entry->status, __entry->vendor_err 352ab03eff5SChuck Lever ) 353ab03eff5SChuck Lever ); 354ab03eff5SChuck Lever 355b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_wc_receive, 356b4a7f91cSChuck Lever TP_PROTO( 357b4a7f91cSChuck Lever const struct rpcrdma_rep *rep, 358b4a7f91cSChuck Lever const struct ib_wc *wc 359b4a7f91cSChuck Lever ), 360b4a7f91cSChuck Lever 361b4a7f91cSChuck Lever TP_ARGS(rep, wc), 362b4a7f91cSChuck Lever 363b4a7f91cSChuck Lever TP_STRUCT__entry( 364b4a7f91cSChuck Lever __field(const void *, rep) 365b4a7f91cSChuck Lever __field(unsigned int, byte_len) 366b4a7f91cSChuck Lever __field(unsigned int, status) 367b4a7f91cSChuck Lever __field(unsigned int, vendor_err) 368b4a7f91cSChuck Lever ), 369b4a7f91cSChuck Lever 370b4a7f91cSChuck Lever TP_fast_assign( 371b4a7f91cSChuck Lever __entry->rep = rep; 372b4a7f91cSChuck Lever __entry->byte_len = wc->byte_len; 373b4a7f91cSChuck Lever __entry->status = wc->status; 374b4a7f91cSChuck Lever __entry->vendor_err = __entry->status ? wc->vendor_err : 0; 375b4a7f91cSChuck Lever ), 376b4a7f91cSChuck Lever 377b4a7f91cSChuck Lever TP_printk("rep=%p, %u bytes: %s (%u/0x%x)", 378b4a7f91cSChuck Lever __entry->rep, __entry->byte_len, 379b4a7f91cSChuck Lever rdma_show_wc_status(__entry->status), 380b4a7f91cSChuck Lever __entry->status, __entry->vendor_err 381b4a7f91cSChuck Lever ) 382b4a7f91cSChuck Lever ); 383b4a7f91cSChuck Lever 38458f10ad4SChuck Lever DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_fastreg); 38558f10ad4SChuck Lever 386b4a7f91cSChuck Lever /** 387b4a7f91cSChuck Lever ** Reply events 388b4a7f91cSChuck Lever **/ 389b4a7f91cSChuck Lever 390b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_reply, 391b4a7f91cSChuck Lever TP_PROTO( 392b4a7f91cSChuck Lever const struct rpc_task *task, 393b4a7f91cSChuck Lever const struct rpcrdma_rep *rep, 394b4a7f91cSChuck Lever const struct rpcrdma_req *req, 395b4a7f91cSChuck Lever unsigned int credits 396b4a7f91cSChuck Lever ), 397b4a7f91cSChuck Lever 398b4a7f91cSChuck Lever TP_ARGS(task, rep, req, credits), 399b4a7f91cSChuck Lever 400b4a7f91cSChuck Lever TP_STRUCT__entry( 401b4a7f91cSChuck Lever __field(unsigned int, task_id) 402b4a7f91cSChuck Lever __field(unsigned int, client_id) 403b4a7f91cSChuck Lever __field(const void *, rep) 404b4a7f91cSChuck Lever __field(const void *, req) 405b4a7f91cSChuck Lever __field(u32, xid) 406b4a7f91cSChuck Lever __field(unsigned int, credits) 407b4a7f91cSChuck Lever ), 408b4a7f91cSChuck Lever 409b4a7f91cSChuck Lever TP_fast_assign( 410b4a7f91cSChuck Lever __entry->task_id = task->tk_pid; 411b4a7f91cSChuck Lever __entry->client_id = task->tk_client->cl_clid; 412b4a7f91cSChuck Lever __entry->rep = rep; 413b4a7f91cSChuck Lever __entry->req = req; 414b4a7f91cSChuck Lever __entry->xid = be32_to_cpu(rep->rr_xid); 415b4a7f91cSChuck Lever __entry->credits = credits; 416b4a7f91cSChuck Lever ), 417b4a7f91cSChuck Lever 418b4a7f91cSChuck Lever TP_printk("task:%u@%u xid=0x%08x, %u credits, rep=%p -> req=%p", 419b4a7f91cSChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 420b4a7f91cSChuck Lever __entry->credits, __entry->rep, __entry->req 421b4a7f91cSChuck Lever ) 422b4a7f91cSChuck Lever ); 423b4a7f91cSChuck Lever 424b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_defer_cmp, 425b4a7f91cSChuck Lever TP_PROTO( 426b4a7f91cSChuck Lever const struct rpcrdma_rep *rep 427b4a7f91cSChuck Lever ), 428b4a7f91cSChuck Lever 429b4a7f91cSChuck Lever TP_ARGS(rep), 430b4a7f91cSChuck Lever 431b4a7f91cSChuck Lever TP_STRUCT__entry( 432b4a7f91cSChuck Lever __field(unsigned int, task_id) 433b4a7f91cSChuck Lever __field(unsigned int, client_id) 434b4a7f91cSChuck Lever __field(const void *, rep) 435b4a7f91cSChuck Lever __field(u32, xid) 436b4a7f91cSChuck Lever ), 437b4a7f91cSChuck Lever 438b4a7f91cSChuck Lever TP_fast_assign( 439b4a7f91cSChuck Lever __entry->task_id = rep->rr_rqst->rq_task->tk_pid; 440b4a7f91cSChuck Lever __entry->client_id = rep->rr_rqst->rq_task->tk_client->cl_clid; 441b4a7f91cSChuck Lever __entry->rep = rep; 442b4a7f91cSChuck Lever __entry->xid = be32_to_cpu(rep->rr_xid); 443b4a7f91cSChuck Lever ), 444b4a7f91cSChuck Lever 445b4a7f91cSChuck Lever TP_printk("task:%u@%u xid=0x%08x rep=%p", 446b4a7f91cSChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 447b4a7f91cSChuck Lever __entry->rep 448b4a7f91cSChuck Lever ) 449b4a7f91cSChuck Lever ); 450b4a7f91cSChuck Lever 451b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_vers); 452b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_rqst); 453b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_short); 454b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_hdr); 455b4a7f91cSChuck Lever 456e48f083eSChuck Lever #endif /* _TRACE_RPCRDMA_H */ 457e48f083eSChuck Lever 458e48f083eSChuck Lever #include <trace/define_trace.h> 459