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 270b4a7f91cSChuck Lever /** 271ab03eff5SChuck Lever ** Call events 272ab03eff5SChuck Lever **/ 273ab03eff5SChuck Lever 2741c443effSChuck Lever TRACE_EVENT(xprtrdma_createmrs, 2751c443effSChuck Lever TP_PROTO( 2761c443effSChuck Lever const struct rpcrdma_xprt *r_xprt, 2771c443effSChuck Lever unsigned int count 2781c443effSChuck Lever ), 2791c443effSChuck Lever 2801c443effSChuck Lever TP_ARGS(r_xprt, count), 2811c443effSChuck Lever 2821c443effSChuck Lever TP_STRUCT__entry( 2831c443effSChuck Lever __field(const void *, r_xprt) 2841c443effSChuck Lever __field(unsigned int, count) 2851c443effSChuck Lever ), 2861c443effSChuck Lever 2871c443effSChuck Lever TP_fast_assign( 2881c443effSChuck Lever __entry->r_xprt = r_xprt; 2891c443effSChuck Lever __entry->count = count; 2901c443effSChuck Lever ), 2911c443effSChuck Lever 2921c443effSChuck Lever TP_printk("r_xprt=%p: created %u MRs", 2931c443effSChuck Lever __entry->r_xprt, __entry->count 2941c443effSChuck Lever ) 2951c443effSChuck Lever ); 2961c443effSChuck Lever 2971c443effSChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_nomrs); 2981c443effSChuck Lever 29958f10ad4SChuck Lever DEFINE_RDCH_EVENT(xprtrdma_read_chunk); 30058f10ad4SChuck Lever DEFINE_WRCH_EVENT(xprtrdma_write_chunk); 30158f10ad4SChuck Lever DEFINE_WRCH_EVENT(xprtrdma_reply_chunk); 30258f10ad4SChuck Lever 303ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch); 304ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_readch); 305ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_areadch); 306ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_writech); 307ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_replych); 308ab03eff5SChuck Lever 309ab03eff5SChuck Lever #define xprtrdma_show_chunktype(x) \ 310ab03eff5SChuck Lever __print_symbolic(x, \ 311ab03eff5SChuck Lever { rpcrdma_noch, "inline" }, \ 312ab03eff5SChuck Lever { rpcrdma_readch, "read list" }, \ 313ab03eff5SChuck Lever { rpcrdma_areadch, "*read list" }, \ 314ab03eff5SChuck Lever { rpcrdma_writech, "write list" }, \ 315ab03eff5SChuck Lever { rpcrdma_replych, "reply chunk" }) 316ab03eff5SChuck Lever 317ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_marshal, 318ab03eff5SChuck Lever TP_PROTO( 319ab03eff5SChuck Lever const struct rpc_rqst *rqst, 320ab03eff5SChuck Lever unsigned int hdrlen, 321ab03eff5SChuck Lever unsigned int rtype, 322ab03eff5SChuck Lever unsigned int wtype 323ab03eff5SChuck Lever ), 324ab03eff5SChuck Lever 325ab03eff5SChuck Lever TP_ARGS(rqst, hdrlen, rtype, wtype), 326ab03eff5SChuck Lever 327ab03eff5SChuck Lever TP_STRUCT__entry( 328ab03eff5SChuck Lever __field(unsigned int, task_id) 329ab03eff5SChuck Lever __field(unsigned int, client_id) 330ab03eff5SChuck Lever __field(u32, xid) 331ab03eff5SChuck Lever __field(unsigned int, hdrlen) 332ab03eff5SChuck Lever __field(unsigned int, headlen) 333ab03eff5SChuck Lever __field(unsigned int, pagelen) 334ab03eff5SChuck Lever __field(unsigned int, taillen) 335ab03eff5SChuck Lever __field(unsigned int, rtype) 336ab03eff5SChuck Lever __field(unsigned int, wtype) 337ab03eff5SChuck Lever ), 338ab03eff5SChuck Lever 339ab03eff5SChuck Lever TP_fast_assign( 340ab03eff5SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 341ab03eff5SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 342ab03eff5SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 343ab03eff5SChuck Lever __entry->hdrlen = hdrlen; 344ab03eff5SChuck Lever __entry->headlen = rqst->rq_snd_buf.head[0].iov_len; 345ab03eff5SChuck Lever __entry->pagelen = rqst->rq_snd_buf.page_len; 346ab03eff5SChuck Lever __entry->taillen = rqst->rq_snd_buf.tail[0].iov_len; 347ab03eff5SChuck Lever __entry->rtype = rtype; 348ab03eff5SChuck Lever __entry->wtype = wtype; 349ab03eff5SChuck Lever ), 350ab03eff5SChuck Lever 351ab03eff5SChuck Lever TP_printk("task:%u@%u xid=0x%08x: hdr=%u xdr=%u/%u/%u %s/%s", 352ab03eff5SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 353ab03eff5SChuck Lever __entry->hdrlen, 354ab03eff5SChuck Lever __entry->headlen, __entry->pagelen, __entry->taillen, 355ab03eff5SChuck Lever xprtrdma_show_chunktype(__entry->rtype), 356ab03eff5SChuck Lever xprtrdma_show_chunktype(__entry->wtype) 357ab03eff5SChuck Lever ) 358ab03eff5SChuck Lever ); 359ab03eff5SChuck Lever 360ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_post_send, 361ab03eff5SChuck Lever TP_PROTO( 362ab03eff5SChuck Lever const struct rpcrdma_req *req, 363ab03eff5SChuck Lever int status 364ab03eff5SChuck Lever ), 365ab03eff5SChuck Lever 366ab03eff5SChuck Lever TP_ARGS(req, status), 367ab03eff5SChuck Lever 368ab03eff5SChuck Lever TP_STRUCT__entry( 369ab03eff5SChuck Lever __field(const void *, req) 370ab03eff5SChuck Lever __field(int, num_sge) 371ab03eff5SChuck Lever __field(bool, signaled) 372ab03eff5SChuck Lever __field(int, status) 373ab03eff5SChuck Lever ), 374ab03eff5SChuck Lever 375ab03eff5SChuck Lever TP_fast_assign( 376ab03eff5SChuck Lever __entry->req = req; 377ab03eff5SChuck Lever __entry->num_sge = req->rl_sendctx->sc_wr.num_sge; 378ab03eff5SChuck Lever __entry->signaled = req->rl_sendctx->sc_wr.send_flags & 379ab03eff5SChuck Lever IB_SEND_SIGNALED; 380ab03eff5SChuck Lever __entry->status = status; 381ab03eff5SChuck Lever ), 382ab03eff5SChuck Lever 383ab03eff5SChuck Lever TP_printk("req=%p, %d SGEs%s, status=%d", 384ab03eff5SChuck Lever __entry->req, __entry->num_sge, 385ab03eff5SChuck Lever (__entry->signaled ? ", signaled" : ""), 386ab03eff5SChuck Lever __entry->status 387ab03eff5SChuck Lever ) 388ab03eff5SChuck Lever ); 389ab03eff5SChuck Lever 390b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_post_recv, 391b4a7f91cSChuck Lever TP_PROTO( 392b4a7f91cSChuck Lever const struct rpcrdma_rep *rep, 393b4a7f91cSChuck Lever int status 394b4a7f91cSChuck Lever ), 395b4a7f91cSChuck Lever 396b4a7f91cSChuck Lever TP_ARGS(rep, status), 397b4a7f91cSChuck Lever 398b4a7f91cSChuck Lever TP_STRUCT__entry( 399b4a7f91cSChuck Lever __field(const void *, rep) 400b4a7f91cSChuck Lever __field(int, status) 401b4a7f91cSChuck Lever ), 402b4a7f91cSChuck Lever 403b4a7f91cSChuck Lever TP_fast_assign( 404b4a7f91cSChuck Lever __entry->rep = rep; 405b4a7f91cSChuck Lever __entry->status = status; 406b4a7f91cSChuck Lever ), 407b4a7f91cSChuck Lever 408b4a7f91cSChuck Lever TP_printk("rep=%p status=%d", 409b4a7f91cSChuck Lever __entry->rep, __entry->status 410b4a7f91cSChuck Lever ) 411b4a7f91cSChuck Lever ); 412b4a7f91cSChuck Lever 413ab03eff5SChuck Lever /** 414ab03eff5SChuck Lever ** Completion events 415ab03eff5SChuck Lever **/ 416ab03eff5SChuck Lever 417ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_wc_send, 418ab03eff5SChuck Lever TP_PROTO( 419ab03eff5SChuck Lever const struct rpcrdma_sendctx *sc, 420ab03eff5SChuck Lever const struct ib_wc *wc 421ab03eff5SChuck Lever ), 422ab03eff5SChuck Lever 423ab03eff5SChuck Lever TP_ARGS(sc, wc), 424ab03eff5SChuck Lever 425ab03eff5SChuck Lever TP_STRUCT__entry( 426ab03eff5SChuck Lever __field(const void *, req) 427ab03eff5SChuck Lever __field(unsigned int, unmap_count) 428ab03eff5SChuck Lever __field(unsigned int, status) 429ab03eff5SChuck Lever __field(unsigned int, vendor_err) 430ab03eff5SChuck Lever ), 431ab03eff5SChuck Lever 432ab03eff5SChuck Lever TP_fast_assign( 433ab03eff5SChuck Lever __entry->req = sc->sc_req; 434ab03eff5SChuck Lever __entry->unmap_count = sc->sc_unmap_count; 435ab03eff5SChuck Lever __entry->status = wc->status; 436ab03eff5SChuck Lever __entry->vendor_err = __entry->status ? wc->vendor_err : 0; 437ab03eff5SChuck Lever ), 438ab03eff5SChuck Lever 439ab03eff5SChuck Lever TP_printk("req=%p, unmapped %u pages: %s (%u/0x%x)", 440ab03eff5SChuck Lever __entry->req, __entry->unmap_count, 441ab03eff5SChuck Lever rdma_show_wc_status(__entry->status), 442ab03eff5SChuck Lever __entry->status, __entry->vendor_err 443ab03eff5SChuck Lever ) 444ab03eff5SChuck Lever ); 445ab03eff5SChuck Lever 446b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_wc_receive, 447b4a7f91cSChuck Lever TP_PROTO( 448b4a7f91cSChuck Lever const struct rpcrdma_rep *rep, 449b4a7f91cSChuck Lever const struct ib_wc *wc 450b4a7f91cSChuck Lever ), 451b4a7f91cSChuck Lever 452b4a7f91cSChuck Lever TP_ARGS(rep, wc), 453b4a7f91cSChuck Lever 454b4a7f91cSChuck Lever TP_STRUCT__entry( 455b4a7f91cSChuck Lever __field(const void *, rep) 456b4a7f91cSChuck Lever __field(unsigned int, byte_len) 457b4a7f91cSChuck Lever __field(unsigned int, status) 458b4a7f91cSChuck Lever __field(unsigned int, vendor_err) 459b4a7f91cSChuck Lever ), 460b4a7f91cSChuck Lever 461b4a7f91cSChuck Lever TP_fast_assign( 462b4a7f91cSChuck Lever __entry->rep = rep; 463b4a7f91cSChuck Lever __entry->byte_len = wc->byte_len; 464b4a7f91cSChuck Lever __entry->status = wc->status; 465b4a7f91cSChuck Lever __entry->vendor_err = __entry->status ? wc->vendor_err : 0; 466b4a7f91cSChuck Lever ), 467b4a7f91cSChuck Lever 468b4a7f91cSChuck Lever TP_printk("rep=%p, %u bytes: %s (%u/0x%x)", 469b4a7f91cSChuck Lever __entry->rep, __entry->byte_len, 470b4a7f91cSChuck Lever rdma_show_wc_status(__entry->status), 471b4a7f91cSChuck Lever __entry->status, __entry->vendor_err 472b4a7f91cSChuck Lever ) 473b4a7f91cSChuck Lever ); 474b4a7f91cSChuck Lever 47558f10ad4SChuck Lever DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_fastreg); 4762937fedeSChuck Lever DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_li); 4772937fedeSChuck Lever DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_li_wake); 4782937fedeSChuck Lever 4792937fedeSChuck Lever DEFINE_MR_EVENT(xprtrdma_localinv); 4802937fedeSChuck Lever DEFINE_MR_EVENT(xprtrdma_dma_unmap); 4812937fedeSChuck Lever DEFINE_MR_EVENT(xprtrdma_remoteinv); 4821c443effSChuck Lever DEFINE_MR_EVENT(xprtrdma_recover_mr); 48358f10ad4SChuck Lever 484b4a7f91cSChuck Lever /** 485b4a7f91cSChuck Lever ** Reply events 486b4a7f91cSChuck Lever **/ 487b4a7f91cSChuck Lever 488b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_reply, 489b4a7f91cSChuck Lever TP_PROTO( 490b4a7f91cSChuck Lever const struct rpc_task *task, 491b4a7f91cSChuck Lever const struct rpcrdma_rep *rep, 492b4a7f91cSChuck Lever const struct rpcrdma_req *req, 493b4a7f91cSChuck Lever unsigned int credits 494b4a7f91cSChuck Lever ), 495b4a7f91cSChuck Lever 496b4a7f91cSChuck Lever TP_ARGS(task, rep, req, credits), 497b4a7f91cSChuck Lever 498b4a7f91cSChuck Lever TP_STRUCT__entry( 499b4a7f91cSChuck Lever __field(unsigned int, task_id) 500b4a7f91cSChuck Lever __field(unsigned int, client_id) 501b4a7f91cSChuck Lever __field(const void *, rep) 502b4a7f91cSChuck Lever __field(const void *, req) 503b4a7f91cSChuck Lever __field(u32, xid) 504b4a7f91cSChuck Lever __field(unsigned int, credits) 505b4a7f91cSChuck Lever ), 506b4a7f91cSChuck Lever 507b4a7f91cSChuck Lever TP_fast_assign( 508b4a7f91cSChuck Lever __entry->task_id = task->tk_pid; 509b4a7f91cSChuck Lever __entry->client_id = task->tk_client->cl_clid; 510b4a7f91cSChuck Lever __entry->rep = rep; 511b4a7f91cSChuck Lever __entry->req = req; 512b4a7f91cSChuck Lever __entry->xid = be32_to_cpu(rep->rr_xid); 513b4a7f91cSChuck Lever __entry->credits = credits; 514b4a7f91cSChuck Lever ), 515b4a7f91cSChuck Lever 516b4a7f91cSChuck Lever TP_printk("task:%u@%u xid=0x%08x, %u credits, rep=%p -> req=%p", 517b4a7f91cSChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 518b4a7f91cSChuck Lever __entry->credits, __entry->rep, __entry->req 519b4a7f91cSChuck Lever ) 520b4a7f91cSChuck Lever ); 521b4a7f91cSChuck Lever 522b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_defer_cmp, 523b4a7f91cSChuck Lever TP_PROTO( 524b4a7f91cSChuck Lever const struct rpcrdma_rep *rep 525b4a7f91cSChuck Lever ), 526b4a7f91cSChuck Lever 527b4a7f91cSChuck Lever TP_ARGS(rep), 528b4a7f91cSChuck Lever 529b4a7f91cSChuck Lever TP_STRUCT__entry( 530b4a7f91cSChuck Lever __field(unsigned int, task_id) 531b4a7f91cSChuck Lever __field(unsigned int, client_id) 532b4a7f91cSChuck Lever __field(const void *, rep) 533b4a7f91cSChuck Lever __field(u32, xid) 534b4a7f91cSChuck Lever ), 535b4a7f91cSChuck Lever 536b4a7f91cSChuck Lever TP_fast_assign( 537b4a7f91cSChuck Lever __entry->task_id = rep->rr_rqst->rq_task->tk_pid; 538b4a7f91cSChuck Lever __entry->client_id = rep->rr_rqst->rq_task->tk_client->cl_clid; 539b4a7f91cSChuck Lever __entry->rep = rep; 540b4a7f91cSChuck Lever __entry->xid = be32_to_cpu(rep->rr_xid); 541b4a7f91cSChuck Lever ), 542b4a7f91cSChuck Lever 543b4a7f91cSChuck Lever TP_printk("task:%u@%u xid=0x%08x rep=%p", 544b4a7f91cSChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 545b4a7f91cSChuck Lever __entry->rep 546b4a7f91cSChuck Lever ) 547b4a7f91cSChuck Lever ); 548b4a7f91cSChuck Lever 549b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_vers); 550b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_rqst); 551b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_short); 552b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_hdr); 553b4a7f91cSChuck Lever 554e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_fixup, 555e11b7c96SChuck Lever TP_PROTO( 556e11b7c96SChuck Lever const struct rpc_rqst *rqst, 557e11b7c96SChuck Lever int len, 558e11b7c96SChuck Lever int hdrlen 559e11b7c96SChuck Lever ), 560e11b7c96SChuck Lever 561e11b7c96SChuck Lever TP_ARGS(rqst, len, hdrlen), 562e11b7c96SChuck Lever 563e11b7c96SChuck Lever TP_STRUCT__entry( 564e11b7c96SChuck Lever __field(unsigned int, task_id) 565e11b7c96SChuck Lever __field(unsigned int, client_id) 566e11b7c96SChuck Lever __field(const void *, base) 567e11b7c96SChuck Lever __field(int, len) 568e11b7c96SChuck Lever __field(int, hdrlen) 569e11b7c96SChuck Lever ), 570e11b7c96SChuck Lever 571e11b7c96SChuck Lever TP_fast_assign( 572e11b7c96SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 573e11b7c96SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 574e11b7c96SChuck Lever __entry->base = rqst->rq_rcv_buf.head[0].iov_base; 575e11b7c96SChuck Lever __entry->len = len; 576e11b7c96SChuck Lever __entry->hdrlen = hdrlen; 577e11b7c96SChuck Lever ), 578e11b7c96SChuck Lever 579e11b7c96SChuck Lever TP_printk("task:%u@%u base=%p len=%d hdrlen=%d", 580e11b7c96SChuck Lever __entry->task_id, __entry->client_id, 581e11b7c96SChuck Lever __entry->base, __entry->len, __entry->hdrlen 582e11b7c96SChuck Lever ) 583e11b7c96SChuck Lever ); 584e11b7c96SChuck Lever 585e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_fixup_pg, 586e11b7c96SChuck Lever TP_PROTO( 587e11b7c96SChuck Lever const struct rpc_rqst *rqst, 588e11b7c96SChuck Lever int pageno, 589e11b7c96SChuck Lever const void *pos, 590e11b7c96SChuck Lever int len, 591e11b7c96SChuck Lever int curlen 592e11b7c96SChuck Lever ), 593e11b7c96SChuck Lever 594e11b7c96SChuck Lever TP_ARGS(rqst, pageno, pos, len, curlen), 595e11b7c96SChuck Lever 596e11b7c96SChuck Lever TP_STRUCT__entry( 597e11b7c96SChuck Lever __field(unsigned int, task_id) 598e11b7c96SChuck Lever __field(unsigned int, client_id) 599e11b7c96SChuck Lever __field(const void *, pos) 600e11b7c96SChuck Lever __field(int, pageno) 601e11b7c96SChuck Lever __field(int, len) 602e11b7c96SChuck Lever __field(int, curlen) 603e11b7c96SChuck Lever ), 604e11b7c96SChuck Lever 605e11b7c96SChuck Lever TP_fast_assign( 606e11b7c96SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 607e11b7c96SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 608e11b7c96SChuck Lever __entry->pos = pos; 609e11b7c96SChuck Lever __entry->pageno = pageno; 610e11b7c96SChuck Lever __entry->len = len; 611e11b7c96SChuck Lever __entry->curlen = curlen; 612e11b7c96SChuck Lever ), 613e11b7c96SChuck Lever 614e11b7c96SChuck Lever TP_printk("task:%u@%u pageno=%d pos=%p len=%d curlen=%d", 615e11b7c96SChuck Lever __entry->task_id, __entry->client_id, 616e11b7c96SChuck Lever __entry->pageno, __entry->pos, __entry->len, __entry->curlen 617e11b7c96SChuck Lever ) 618e11b7c96SChuck Lever ); 619e11b7c96SChuck Lever 620e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_decode_seg, 621e11b7c96SChuck Lever TP_PROTO( 622e11b7c96SChuck Lever u32 handle, 623e11b7c96SChuck Lever u32 length, 624e11b7c96SChuck Lever u64 offset 625e11b7c96SChuck Lever ), 626e11b7c96SChuck Lever 627e11b7c96SChuck Lever TP_ARGS(handle, length, offset), 628e11b7c96SChuck Lever 629e11b7c96SChuck Lever TP_STRUCT__entry( 630e11b7c96SChuck Lever __field(u32, handle) 631e11b7c96SChuck Lever __field(u32, length) 632e11b7c96SChuck Lever __field(u64, offset) 633e11b7c96SChuck Lever ), 634e11b7c96SChuck Lever 635e11b7c96SChuck Lever TP_fast_assign( 636e11b7c96SChuck Lever __entry->handle = handle; 637e11b7c96SChuck Lever __entry->length = length; 638e11b7c96SChuck Lever __entry->offset = offset; 639e11b7c96SChuck Lever ), 640e11b7c96SChuck Lever 641e11b7c96SChuck Lever TP_printk("%u@0x%016llx:0x%08x", 642e11b7c96SChuck Lever __entry->length, (unsigned long long)__entry->offset, 643e11b7c96SChuck Lever __entry->handle 644e11b7c96SChuck Lever ) 645e11b7c96SChuck Lever ); 646e11b7c96SChuck Lever 647e48f083eSChuck Lever #endif /* _TRACE_RPCRDMA_H */ 648e48f083eSChuck Lever 649e48f083eSChuck Lever #include <trace/define_trace.h> 650