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> 14f7bd657bSChuck Lever #include <linux/sunrpc/rpc_rdma_cid.h> 15e48f083eSChuck Lever #include <linux/tracepoint.h> 16b3d03daaSChuck Lever #include <rdma/ib_cm.h> 17e48f083eSChuck Lever #include <trace/events/rdma.h> 18e48f083eSChuck Lever 19ab03eff5SChuck Lever /** 20b4a7f91cSChuck Lever ** Event classes 21b4a7f91cSChuck Lever **/ 22b4a7f91cSChuck Lever 23f7bd657bSChuck Lever DECLARE_EVENT_CLASS(rpcrdma_completion_class, 24f7bd657bSChuck Lever TP_PROTO( 25f7bd657bSChuck Lever const struct ib_wc *wc, 26f7bd657bSChuck Lever const struct rpc_rdma_cid *cid 27f7bd657bSChuck Lever ), 28f7bd657bSChuck Lever 29f7bd657bSChuck Lever TP_ARGS(wc, cid), 30f7bd657bSChuck Lever 31f7bd657bSChuck Lever TP_STRUCT__entry( 32f7bd657bSChuck Lever __field(u32, cq_id) 33f7bd657bSChuck Lever __field(int, completion_id) 34f7bd657bSChuck Lever __field(unsigned long, status) 35f7bd657bSChuck Lever __field(unsigned int, vendor_err) 36f7bd657bSChuck Lever ), 37f7bd657bSChuck Lever 38f7bd657bSChuck Lever TP_fast_assign( 39f7bd657bSChuck Lever __entry->cq_id = cid->ci_queue_id; 40f7bd657bSChuck Lever __entry->completion_id = cid->ci_completion_id; 41f7bd657bSChuck Lever __entry->status = wc->status; 42f7bd657bSChuck Lever if (wc->status) 43f7bd657bSChuck Lever __entry->vendor_err = wc->vendor_err; 44f7bd657bSChuck Lever else 45f7bd657bSChuck Lever __entry->vendor_err = 0; 46f7bd657bSChuck Lever ), 47f7bd657bSChuck Lever 48f7bd657bSChuck Lever TP_printk("cq.id=%u cid=%d status=%s (%lu/0x%x)", 49f7bd657bSChuck Lever __entry->cq_id, __entry->completion_id, 50f7bd657bSChuck Lever rdma_show_wc_status(__entry->status), 51f7bd657bSChuck Lever __entry->status, __entry->vendor_err 52f7bd657bSChuck Lever ) 53f7bd657bSChuck Lever ); 54f7bd657bSChuck Lever 55f7bd657bSChuck Lever #define DEFINE_COMPLETION_EVENT(name) \ 56f7bd657bSChuck Lever DEFINE_EVENT(rpcrdma_completion_class, name, \ 57f7bd657bSChuck Lever TP_PROTO( \ 58f7bd657bSChuck Lever const struct ib_wc *wc, \ 59f7bd657bSChuck Lever const struct rpc_rdma_cid *cid \ 60f7bd657bSChuck Lever ), \ 61f7bd657bSChuck Lever TP_ARGS(wc, cid)) 62f7bd657bSChuck Lever 63b4a7f91cSChuck Lever DECLARE_EVENT_CLASS(xprtrdma_reply_event, 64b4a7f91cSChuck Lever TP_PROTO( 65b4a7f91cSChuck Lever const struct rpcrdma_rep *rep 66b4a7f91cSChuck Lever ), 67b4a7f91cSChuck Lever 68b4a7f91cSChuck Lever TP_ARGS(rep), 69b4a7f91cSChuck Lever 70b4a7f91cSChuck Lever TP_STRUCT__entry( 71b4a7f91cSChuck Lever __field(const void *, rep) 72b4a7f91cSChuck Lever __field(const void *, r_xprt) 73b4a7f91cSChuck Lever __field(u32, xid) 74b4a7f91cSChuck Lever __field(u32, version) 75b4a7f91cSChuck Lever __field(u32, proc) 76b4a7f91cSChuck Lever ), 77b4a7f91cSChuck Lever 78b4a7f91cSChuck Lever TP_fast_assign( 79b4a7f91cSChuck Lever __entry->rep = rep; 80b4a7f91cSChuck Lever __entry->r_xprt = rep->rr_rxprt; 81b4a7f91cSChuck Lever __entry->xid = be32_to_cpu(rep->rr_xid); 82b4a7f91cSChuck Lever __entry->version = be32_to_cpu(rep->rr_vers); 83b4a7f91cSChuck Lever __entry->proc = be32_to_cpu(rep->rr_proc); 84b4a7f91cSChuck Lever ), 85b4a7f91cSChuck Lever 86b4a7f91cSChuck Lever TP_printk("rxprt %p xid=0x%08x rep=%p: version %u proc %u", 87b4a7f91cSChuck Lever __entry->r_xprt, __entry->xid, __entry->rep, 88b4a7f91cSChuck Lever __entry->version, __entry->proc 89b4a7f91cSChuck Lever ) 90b4a7f91cSChuck Lever ); 91b4a7f91cSChuck Lever 92b4a7f91cSChuck Lever #define DEFINE_REPLY_EVENT(name) \ 93b4a7f91cSChuck Lever DEFINE_EVENT(xprtrdma_reply_event, name, \ 94b4a7f91cSChuck Lever TP_PROTO( \ 95b4a7f91cSChuck Lever const struct rpcrdma_rep *rep \ 96b4a7f91cSChuck Lever ), \ 97b4a7f91cSChuck Lever TP_ARGS(rep)) 98b4a7f91cSChuck Lever 991c443effSChuck Lever DECLARE_EVENT_CLASS(xprtrdma_rxprt, 1001c443effSChuck Lever TP_PROTO( 1011c443effSChuck Lever const struct rpcrdma_xprt *r_xprt 1021c443effSChuck Lever ), 1031c443effSChuck Lever 1041c443effSChuck Lever TP_ARGS(r_xprt), 1051c443effSChuck Lever 1061c443effSChuck Lever TP_STRUCT__entry( 1071c443effSChuck Lever __field(const void *, r_xprt) 1081c443effSChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 1091c443effSChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 1101c443effSChuck Lever ), 1111c443effSChuck Lever 1121c443effSChuck Lever TP_fast_assign( 1131c443effSChuck Lever __entry->r_xprt = r_xprt; 1141c443effSChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 1151c443effSChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 1161c443effSChuck Lever ), 1171c443effSChuck Lever 1181c443effSChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p", 1191c443effSChuck Lever __get_str(addr), __get_str(port), __entry->r_xprt 1201c443effSChuck Lever ) 1211c443effSChuck Lever ); 1221c443effSChuck Lever 1231c443effSChuck Lever #define DEFINE_RXPRT_EVENT(name) \ 1241c443effSChuck Lever DEFINE_EVENT(xprtrdma_rxprt, name, \ 1251c443effSChuck Lever TP_PROTO( \ 1261c443effSChuck Lever const struct rpcrdma_xprt *r_xprt \ 1271c443effSChuck Lever ), \ 1281c443effSChuck Lever TP_ARGS(r_xprt)) 1291c443effSChuck Lever 1307b020f17SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_connect_class, 1317b020f17SChuck Lever TP_PROTO( 1327b020f17SChuck Lever const struct rpcrdma_xprt *r_xprt, 1337b020f17SChuck Lever int rc 1347b020f17SChuck Lever ), 1357b020f17SChuck Lever 1367b020f17SChuck Lever TP_ARGS(r_xprt, rc), 1377b020f17SChuck Lever 1387b020f17SChuck Lever TP_STRUCT__entry( 1397b020f17SChuck Lever __field(const void *, r_xprt) 1407b020f17SChuck Lever __field(int, rc) 1417b020f17SChuck Lever __field(int, connect_status) 1427b020f17SChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 1437b020f17SChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 1447b020f17SChuck Lever ), 1457b020f17SChuck Lever 1467b020f17SChuck Lever TP_fast_assign( 1477b020f17SChuck Lever __entry->r_xprt = r_xprt; 1487b020f17SChuck Lever __entry->rc = rc; 149e28ce900SChuck Lever __entry->connect_status = r_xprt->rx_ep->re_connect_status; 1507b020f17SChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 1517b020f17SChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 1527b020f17SChuck Lever ), 1537b020f17SChuck Lever 154d6ccebf9SChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: rc=%d connection status=%d", 1557b020f17SChuck Lever __get_str(addr), __get_str(port), __entry->r_xprt, 1567b020f17SChuck Lever __entry->rc, __entry->connect_status 1577b020f17SChuck Lever ) 1587b020f17SChuck Lever ); 1597b020f17SChuck Lever 1607b020f17SChuck Lever #define DEFINE_CONN_EVENT(name) \ 1617b020f17SChuck Lever DEFINE_EVENT(xprtrdma_connect_class, xprtrdma_##name, \ 1627b020f17SChuck Lever TP_PROTO( \ 1637b020f17SChuck Lever const struct rpcrdma_xprt *r_xprt, \ 1647b020f17SChuck Lever int rc \ 1657b020f17SChuck Lever ), \ 1667b020f17SChuck Lever TP_ARGS(r_xprt, rc)) 1677b020f17SChuck Lever 16858f10ad4SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_rdch_event, 16958f10ad4SChuck Lever TP_PROTO( 17058f10ad4SChuck Lever const struct rpc_task *task, 17158f10ad4SChuck Lever unsigned int pos, 17258f10ad4SChuck Lever struct rpcrdma_mr *mr, 17358f10ad4SChuck Lever int nsegs 17458f10ad4SChuck Lever ), 17558f10ad4SChuck Lever 17658f10ad4SChuck Lever TP_ARGS(task, pos, mr, nsegs), 17758f10ad4SChuck Lever 17858f10ad4SChuck Lever TP_STRUCT__entry( 17958f10ad4SChuck Lever __field(unsigned int, task_id) 18058f10ad4SChuck Lever __field(unsigned int, client_id) 18158f10ad4SChuck Lever __field(unsigned int, pos) 18258f10ad4SChuck Lever __field(int, nents) 18358f10ad4SChuck Lever __field(u32, handle) 18458f10ad4SChuck Lever __field(u32, length) 18558f10ad4SChuck Lever __field(u64, offset) 18658f10ad4SChuck Lever __field(int, nsegs) 18758f10ad4SChuck Lever ), 18858f10ad4SChuck Lever 18958f10ad4SChuck Lever TP_fast_assign( 19058f10ad4SChuck Lever __entry->task_id = task->tk_pid; 19158f10ad4SChuck Lever __entry->client_id = task->tk_client->cl_clid; 19258f10ad4SChuck Lever __entry->pos = pos; 19358f10ad4SChuck Lever __entry->nents = mr->mr_nents; 19458f10ad4SChuck Lever __entry->handle = mr->mr_handle; 19558f10ad4SChuck Lever __entry->length = mr->mr_length; 19658f10ad4SChuck Lever __entry->offset = mr->mr_offset; 19758f10ad4SChuck Lever __entry->nsegs = nsegs; 19858f10ad4SChuck Lever ), 19958f10ad4SChuck Lever 200aba11831SChuck Lever TP_printk("task:%u@%u pos=%u %u@0x%016llx:0x%08x (%s)", 201aba11831SChuck Lever __entry->task_id, __entry->client_id, 20258f10ad4SChuck Lever __entry->pos, __entry->length, 20358f10ad4SChuck Lever (unsigned long long)__entry->offset, __entry->handle, 20458f10ad4SChuck Lever __entry->nents < __entry->nsegs ? "more" : "last" 20558f10ad4SChuck Lever ) 20658f10ad4SChuck Lever ); 20758f10ad4SChuck Lever 20858f10ad4SChuck Lever #define DEFINE_RDCH_EVENT(name) \ 209aba11831SChuck Lever DEFINE_EVENT(xprtrdma_rdch_event, xprtrdma_chunk_##name,\ 21058f10ad4SChuck Lever TP_PROTO( \ 21158f10ad4SChuck Lever const struct rpc_task *task, \ 21258f10ad4SChuck Lever unsigned int pos, \ 21358f10ad4SChuck Lever struct rpcrdma_mr *mr, \ 21458f10ad4SChuck Lever int nsegs \ 21558f10ad4SChuck Lever ), \ 21658f10ad4SChuck Lever TP_ARGS(task, pos, mr, nsegs)) 21758f10ad4SChuck Lever 21858f10ad4SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_wrch_event, 21958f10ad4SChuck Lever TP_PROTO( 22058f10ad4SChuck Lever const struct rpc_task *task, 22158f10ad4SChuck Lever struct rpcrdma_mr *mr, 22258f10ad4SChuck Lever int nsegs 22358f10ad4SChuck Lever ), 22458f10ad4SChuck Lever 22558f10ad4SChuck Lever TP_ARGS(task, mr, nsegs), 22658f10ad4SChuck Lever 22758f10ad4SChuck Lever TP_STRUCT__entry( 22858f10ad4SChuck Lever __field(unsigned int, task_id) 22958f10ad4SChuck Lever __field(unsigned int, client_id) 23058f10ad4SChuck Lever __field(int, nents) 23158f10ad4SChuck Lever __field(u32, handle) 23258f10ad4SChuck Lever __field(u32, length) 23358f10ad4SChuck Lever __field(u64, offset) 23458f10ad4SChuck Lever __field(int, nsegs) 23558f10ad4SChuck Lever ), 23658f10ad4SChuck Lever 23758f10ad4SChuck Lever TP_fast_assign( 23858f10ad4SChuck Lever __entry->task_id = task->tk_pid; 23958f10ad4SChuck Lever __entry->client_id = task->tk_client->cl_clid; 24058f10ad4SChuck Lever __entry->nents = mr->mr_nents; 24158f10ad4SChuck Lever __entry->handle = mr->mr_handle; 24258f10ad4SChuck Lever __entry->length = mr->mr_length; 24358f10ad4SChuck Lever __entry->offset = mr->mr_offset; 24458f10ad4SChuck Lever __entry->nsegs = nsegs; 24558f10ad4SChuck Lever ), 24658f10ad4SChuck Lever 247aba11831SChuck Lever TP_printk("task:%u@%u %u@0x%016llx:0x%08x (%s)", 248aba11831SChuck Lever __entry->task_id, __entry->client_id, 24958f10ad4SChuck Lever __entry->length, (unsigned long long)__entry->offset, 25058f10ad4SChuck Lever __entry->handle, 25158f10ad4SChuck Lever __entry->nents < __entry->nsegs ? "more" : "last" 25258f10ad4SChuck Lever ) 25358f10ad4SChuck Lever ); 25458f10ad4SChuck Lever 25558f10ad4SChuck Lever #define DEFINE_WRCH_EVENT(name) \ 256aba11831SChuck Lever DEFINE_EVENT(xprtrdma_wrch_event, xprtrdma_chunk_##name,\ 25758f10ad4SChuck Lever TP_PROTO( \ 25858f10ad4SChuck Lever const struct rpc_task *task, \ 25958f10ad4SChuck Lever struct rpcrdma_mr *mr, \ 26058f10ad4SChuck Lever int nsegs \ 26158f10ad4SChuck Lever ), \ 26258f10ad4SChuck Lever TP_ARGS(task, mr, nsegs)) 26358f10ad4SChuck Lever 26458f10ad4SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_frwr_done, 26558f10ad4SChuck Lever TP_PROTO( 26658f10ad4SChuck Lever const struct ib_wc *wc, 26758f10ad4SChuck Lever const struct rpcrdma_frwr *frwr 26858f10ad4SChuck Lever ), 26958f10ad4SChuck Lever 27058f10ad4SChuck Lever TP_ARGS(wc, frwr), 27158f10ad4SChuck Lever 27258f10ad4SChuck Lever TP_STRUCT__entry( 27362a89501SChuck Lever __field(u32, mr_id) 27458f10ad4SChuck Lever __field(unsigned int, status) 27558f10ad4SChuck Lever __field(unsigned int, vendor_err) 27658f10ad4SChuck Lever ), 27758f10ad4SChuck Lever 27858f10ad4SChuck Lever TP_fast_assign( 27962a89501SChuck Lever __entry->mr_id = frwr->fr_mr->res.id; 28058f10ad4SChuck Lever __entry->status = wc->status; 28158f10ad4SChuck Lever __entry->vendor_err = __entry->status ? wc->vendor_err : 0; 28258f10ad4SChuck Lever ), 28358f10ad4SChuck Lever 28458f10ad4SChuck Lever TP_printk( 28562a89501SChuck Lever "mr.id=%u: %s (%u/0x%x)", 28662a89501SChuck Lever __entry->mr_id, rdma_show_wc_status(__entry->status), 28758f10ad4SChuck Lever __entry->status, __entry->vendor_err 28858f10ad4SChuck Lever ) 28958f10ad4SChuck Lever ); 29058f10ad4SChuck Lever 29158f10ad4SChuck Lever #define DEFINE_FRWR_DONE_EVENT(name) \ 29258f10ad4SChuck Lever DEFINE_EVENT(xprtrdma_frwr_done, name, \ 29358f10ad4SChuck Lever TP_PROTO( \ 29458f10ad4SChuck Lever const struct ib_wc *wc, \ 29558f10ad4SChuck Lever const struct rpcrdma_frwr *frwr \ 29658f10ad4SChuck Lever ), \ 29758f10ad4SChuck Lever TP_ARGS(wc, frwr)) 29858f10ad4SChuck Lever 299aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_BIDIRECTIONAL); 300aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_TO_DEVICE); 301aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_FROM_DEVICE); 302aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_NONE); 303aba11831SChuck Lever 304aba11831SChuck Lever #define xprtrdma_show_direction(x) \ 305aba11831SChuck Lever __print_symbolic(x, \ 306aba11831SChuck Lever { DMA_BIDIRECTIONAL, "BIDIR" }, \ 307aba11831SChuck Lever { DMA_TO_DEVICE, "TO_DEVICE" }, \ 308aba11831SChuck Lever { DMA_FROM_DEVICE, "FROM_DEVICE" }, \ 309aba11831SChuck Lever { DMA_NONE, "NONE" }) 310aba11831SChuck Lever 3112937fedeSChuck Lever DECLARE_EVENT_CLASS(xprtrdma_mr, 3122937fedeSChuck Lever TP_PROTO( 3132937fedeSChuck Lever const struct rpcrdma_mr *mr 3142937fedeSChuck Lever ), 3152937fedeSChuck Lever 3162937fedeSChuck Lever TP_ARGS(mr), 3172937fedeSChuck Lever 3182937fedeSChuck Lever TP_STRUCT__entry( 31962a89501SChuck Lever __field(u32, mr_id) 32062a89501SChuck Lever __field(int, nents) 3212937fedeSChuck Lever __field(u32, handle) 3222937fedeSChuck Lever __field(u32, length) 3232937fedeSChuck Lever __field(u64, offset) 324aba11831SChuck Lever __field(u32, dir) 3252937fedeSChuck Lever ), 3262937fedeSChuck Lever 3272937fedeSChuck Lever TP_fast_assign( 32862a89501SChuck Lever __entry->mr_id = mr->frwr.fr_mr->res.id; 32962a89501SChuck Lever __entry->nents = mr->mr_nents; 3302937fedeSChuck Lever __entry->handle = mr->mr_handle; 3312937fedeSChuck Lever __entry->length = mr->mr_length; 3322937fedeSChuck Lever __entry->offset = mr->mr_offset; 333aba11831SChuck Lever __entry->dir = mr->mr_dir; 3342937fedeSChuck Lever ), 3352937fedeSChuck Lever 33662a89501SChuck Lever TP_printk("mr.id=%u nents=%d %u@0x%016llx:0x%08x (%s)", 33762a89501SChuck Lever __entry->mr_id, __entry->nents, __entry->length, 338aba11831SChuck Lever (unsigned long long)__entry->offset, __entry->handle, 339aba11831SChuck Lever xprtrdma_show_direction(__entry->dir) 3402937fedeSChuck Lever ) 3412937fedeSChuck Lever ); 3422937fedeSChuck Lever 3432937fedeSChuck Lever #define DEFINE_MR_EVENT(name) \ 344d379eaa8SChuck Lever DEFINE_EVENT(xprtrdma_mr, xprtrdma_mr_##name, \ 3452937fedeSChuck Lever TP_PROTO( \ 3462937fedeSChuck Lever const struct rpcrdma_mr *mr \ 3472937fedeSChuck Lever ), \ 3482937fedeSChuck Lever TP_ARGS(mr)) 3492937fedeSChuck Lever 350fc1eb807SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_cb_event, 351fc1eb807SChuck Lever TP_PROTO( 352fc1eb807SChuck Lever const struct rpc_rqst *rqst 353fc1eb807SChuck Lever ), 354fc1eb807SChuck Lever 355fc1eb807SChuck Lever TP_ARGS(rqst), 356fc1eb807SChuck Lever 357fc1eb807SChuck Lever TP_STRUCT__entry( 358fc1eb807SChuck Lever __field(const void *, rqst) 359fc1eb807SChuck Lever __field(const void *, rep) 360fc1eb807SChuck Lever __field(const void *, req) 361fc1eb807SChuck Lever __field(u32, xid) 362fc1eb807SChuck Lever ), 363fc1eb807SChuck Lever 364fc1eb807SChuck Lever TP_fast_assign( 365fc1eb807SChuck Lever __entry->rqst = rqst; 366fc1eb807SChuck Lever __entry->req = rpcr_to_rdmar(rqst); 367fc1eb807SChuck Lever __entry->rep = rpcr_to_rdmar(rqst)->rl_reply; 368fc1eb807SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 369fc1eb807SChuck Lever ), 370fc1eb807SChuck Lever 371fc1eb807SChuck Lever TP_printk("xid=0x%08x, rqst=%p req=%p rep=%p", 372fc1eb807SChuck Lever __entry->xid, __entry->rqst, __entry->req, __entry->rep 373fc1eb807SChuck Lever ) 374fc1eb807SChuck Lever ); 375fc1eb807SChuck Lever 376fc1eb807SChuck Lever #define DEFINE_CB_EVENT(name) \ 377fc1eb807SChuck Lever DEFINE_EVENT(xprtrdma_cb_event, name, \ 378fc1eb807SChuck Lever TP_PROTO( \ 379fc1eb807SChuck Lever const struct rpc_rqst *rqst \ 380fc1eb807SChuck Lever ), \ 381fc1eb807SChuck Lever TP_ARGS(rqst)) 382fc1eb807SChuck Lever 383b4a7f91cSChuck Lever /** 384b4744e00SChuck Lever ** Connection events 385b4744e00SChuck Lever **/ 386b4744e00SChuck Lever 387f54c870dSChuck Lever TRACE_EVENT(xprtrdma_inline_thresh, 388f54c870dSChuck Lever TP_PROTO( 389745b734cSChuck Lever const struct rpcrdma_ep *ep 390f54c870dSChuck Lever ), 391f54c870dSChuck Lever 392745b734cSChuck Lever TP_ARGS(ep), 393f54c870dSChuck Lever 394f54c870dSChuck Lever TP_STRUCT__entry( 395f54c870dSChuck Lever __field(unsigned int, inline_send) 396f54c870dSChuck Lever __field(unsigned int, inline_recv) 397f54c870dSChuck Lever __field(unsigned int, max_send) 398f54c870dSChuck Lever __field(unsigned int, max_recv) 399745b734cSChuck Lever __array(unsigned char, srcaddr, sizeof(struct sockaddr_in6)) 400745b734cSChuck Lever __array(unsigned char, dstaddr, sizeof(struct sockaddr_in6)) 401f54c870dSChuck Lever ), 402f54c870dSChuck Lever 403f54c870dSChuck Lever TP_fast_assign( 404745b734cSChuck Lever const struct rdma_cm_id *id = ep->re_id; 405f54c870dSChuck Lever 40693aa8e0aSChuck Lever __entry->inline_send = ep->re_inline_send; 40793aa8e0aSChuck Lever __entry->inline_recv = ep->re_inline_recv; 40893aa8e0aSChuck Lever __entry->max_send = ep->re_max_inline_send; 40993aa8e0aSChuck Lever __entry->max_recv = ep->re_max_inline_recv; 410745b734cSChuck Lever memcpy(__entry->srcaddr, &id->route.addr.src_addr, 411745b734cSChuck Lever sizeof(struct sockaddr_in6)); 412745b734cSChuck Lever memcpy(__entry->dstaddr, &id->route.addr.dst_addr, 413745b734cSChuck Lever sizeof(struct sockaddr_in6)); 414f54c870dSChuck Lever ), 415f54c870dSChuck Lever 416745b734cSChuck Lever TP_printk("%pISpc -> %pISpc neg send/recv=%u/%u, calc send/recv=%u/%u", 417745b734cSChuck Lever __entry->srcaddr, __entry->dstaddr, 418f54c870dSChuck Lever __entry->inline_send, __entry->inline_recv, 419f54c870dSChuck Lever __entry->max_send, __entry->max_recv 420f54c870dSChuck Lever ) 421f54c870dSChuck Lever ); 422f54c870dSChuck Lever 4237b020f17SChuck Lever DEFINE_CONN_EVENT(connect); 4247b020f17SChuck Lever DEFINE_CONN_EVENT(disconnect); 4257b020f17SChuck Lever 4267b020f17SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_op_inject_dsc); 4277b020f17SChuck Lever 4287b020f17SChuck Lever TRACE_EVENT(xprtrdma_op_connect, 429b4744e00SChuck Lever TP_PROTO( 430b4744e00SChuck Lever const struct rpcrdma_xprt *r_xprt, 4317b020f17SChuck Lever unsigned long delay 432b4744e00SChuck Lever ), 433b4744e00SChuck Lever 4347b020f17SChuck Lever TP_ARGS(r_xprt, delay), 435b4744e00SChuck Lever 436b4744e00SChuck Lever TP_STRUCT__entry( 437b4744e00SChuck Lever __field(const void *, r_xprt) 4387b020f17SChuck Lever __field(unsigned long, delay) 439b4744e00SChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 440b4744e00SChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 441b4744e00SChuck Lever ), 442b4744e00SChuck Lever 443b4744e00SChuck Lever TP_fast_assign( 444b4744e00SChuck Lever __entry->r_xprt = r_xprt; 4457b020f17SChuck Lever __entry->delay = delay; 446b4744e00SChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 447b4744e00SChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 448b4744e00SChuck Lever ), 449b4744e00SChuck Lever 4507b020f17SChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p delay=%lu", 4517b020f17SChuck Lever __get_str(addr), __get_str(port), __entry->r_xprt, 4527b020f17SChuck Lever __entry->delay 453b4744e00SChuck Lever ) 454b4744e00SChuck Lever ); 455b4744e00SChuck Lever 456b4744e00SChuck Lever 457675dd90aSChuck Lever TRACE_EVENT(xprtrdma_op_set_cto, 458675dd90aSChuck Lever TP_PROTO( 459675dd90aSChuck Lever const struct rpcrdma_xprt *r_xprt, 460675dd90aSChuck Lever unsigned long connect, 461675dd90aSChuck Lever unsigned long reconnect 462675dd90aSChuck Lever ), 463675dd90aSChuck Lever 464675dd90aSChuck Lever TP_ARGS(r_xprt, connect, reconnect), 465675dd90aSChuck Lever 466675dd90aSChuck Lever TP_STRUCT__entry( 467675dd90aSChuck Lever __field(const void *, r_xprt) 468675dd90aSChuck Lever __field(unsigned long, connect) 469675dd90aSChuck Lever __field(unsigned long, reconnect) 470675dd90aSChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 471675dd90aSChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 472675dd90aSChuck Lever ), 473675dd90aSChuck Lever 474675dd90aSChuck Lever TP_fast_assign( 475675dd90aSChuck Lever __entry->r_xprt = r_xprt; 476675dd90aSChuck Lever __entry->connect = connect; 477675dd90aSChuck Lever __entry->reconnect = reconnect; 478675dd90aSChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 479675dd90aSChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 480675dd90aSChuck Lever ), 481675dd90aSChuck Lever 482675dd90aSChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: connect=%lu reconnect=%lu", 483675dd90aSChuck Lever __get_str(addr), __get_str(port), __entry->r_xprt, 484675dd90aSChuck Lever __entry->connect / HZ, __entry->reconnect / HZ 485675dd90aSChuck Lever ) 486675dd90aSChuck Lever ); 487675dd90aSChuck Lever 488f9521d53SChuck Lever TRACE_EVENT(xprtrdma_qp_event, 489643cf323SChuck Lever TP_PROTO( 490745b734cSChuck Lever const struct rpcrdma_ep *ep, 491643cf323SChuck Lever const struct ib_event *event 492643cf323SChuck Lever ), 493643cf323SChuck Lever 494745b734cSChuck Lever TP_ARGS(ep, event), 495643cf323SChuck Lever 496643cf323SChuck Lever TP_STRUCT__entry( 497745b734cSChuck Lever __field(unsigned long, event) 498643cf323SChuck Lever __string(name, event->device->name) 499745b734cSChuck Lever __array(unsigned char, srcaddr, sizeof(struct sockaddr_in6)) 500745b734cSChuck Lever __array(unsigned char, dstaddr, sizeof(struct sockaddr_in6)) 501643cf323SChuck Lever ), 502643cf323SChuck Lever 503643cf323SChuck Lever TP_fast_assign( 504745b734cSChuck Lever const struct rdma_cm_id *id = ep->re_id; 505745b734cSChuck Lever 506643cf323SChuck Lever __entry->event = event->event; 507643cf323SChuck Lever __assign_str(name, event->device->name); 508745b734cSChuck Lever memcpy(__entry->srcaddr, &id->route.addr.src_addr, 509745b734cSChuck Lever sizeof(struct sockaddr_in6)); 510745b734cSChuck Lever memcpy(__entry->dstaddr, &id->route.addr.dst_addr, 511745b734cSChuck Lever sizeof(struct sockaddr_in6)); 512643cf323SChuck Lever ), 513643cf323SChuck Lever 514745b734cSChuck Lever TP_printk("%pISpc -> %pISpc device=%s %s (%lu)", 515745b734cSChuck Lever __entry->srcaddr, __entry->dstaddr, __get_str(name), 516745b734cSChuck Lever rdma_show_ib_event(__entry->event), __entry->event 517643cf323SChuck Lever ) 518643cf323SChuck Lever ); 519643cf323SChuck Lever 520b4744e00SChuck Lever /** 521ab03eff5SChuck Lever ** Call events 522ab03eff5SChuck Lever **/ 523ab03eff5SChuck Lever 5241c443effSChuck Lever TRACE_EVENT(xprtrdma_createmrs, 5251c443effSChuck Lever TP_PROTO( 5261c443effSChuck Lever const struct rpcrdma_xprt *r_xprt, 5271c443effSChuck Lever unsigned int count 5281c443effSChuck Lever ), 5291c443effSChuck Lever 5301c443effSChuck Lever TP_ARGS(r_xprt, count), 5311c443effSChuck Lever 5321c443effSChuck Lever TP_STRUCT__entry( 5331c443effSChuck Lever __field(const void *, r_xprt) 5346dc6ec9eSChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 5356dc6ec9eSChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 5361c443effSChuck Lever __field(unsigned int, count) 5371c443effSChuck Lever ), 5381c443effSChuck Lever 5391c443effSChuck Lever TP_fast_assign( 5401c443effSChuck Lever __entry->r_xprt = r_xprt; 5411c443effSChuck Lever __entry->count = count; 5426dc6ec9eSChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 5436dc6ec9eSChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 5441c443effSChuck Lever ), 5451c443effSChuck Lever 5466dc6ec9eSChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: created %u MRs", 5476dc6ec9eSChuck Lever __get_str(addr), __get_str(port), __entry->r_xprt, 5486dc6ec9eSChuck Lever __entry->count 5496dc6ec9eSChuck Lever ) 5506dc6ec9eSChuck Lever ); 5516dc6ec9eSChuck Lever 5526dc6ec9eSChuck Lever TRACE_EVENT(xprtrdma_mr_get, 5536dc6ec9eSChuck Lever TP_PROTO( 5546dc6ec9eSChuck Lever const struct rpcrdma_req *req 5556dc6ec9eSChuck Lever ), 5566dc6ec9eSChuck Lever 5576dc6ec9eSChuck Lever TP_ARGS(req), 5586dc6ec9eSChuck Lever 5596dc6ec9eSChuck Lever TP_STRUCT__entry( 5606dc6ec9eSChuck Lever __field(const void *, req) 5616dc6ec9eSChuck Lever __field(unsigned int, task_id) 5626dc6ec9eSChuck Lever __field(unsigned int, client_id) 5636dc6ec9eSChuck Lever __field(u32, xid) 5646dc6ec9eSChuck Lever ), 5656dc6ec9eSChuck Lever 5666dc6ec9eSChuck Lever TP_fast_assign( 5676dc6ec9eSChuck Lever const struct rpc_rqst *rqst = &req->rl_slot; 5686dc6ec9eSChuck Lever 5696dc6ec9eSChuck Lever __entry->req = req; 5706dc6ec9eSChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 5716dc6ec9eSChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 5726dc6ec9eSChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 5736dc6ec9eSChuck Lever ), 5746dc6ec9eSChuck Lever 5756dc6ec9eSChuck Lever TP_printk("task:%u@%u xid=0x%08x req=%p", 5766dc6ec9eSChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 5776dc6ec9eSChuck Lever __entry->req 5781c443effSChuck Lever ) 5791c443effSChuck Lever ); 5801c443effSChuck Lever 5813b39f52aSChuck Lever TRACE_EVENT(xprtrdma_nomrs, 5823b39f52aSChuck Lever TP_PROTO( 5833b39f52aSChuck Lever const struct rpcrdma_req *req 5843b39f52aSChuck Lever ), 5853b39f52aSChuck Lever 5863b39f52aSChuck Lever TP_ARGS(req), 5873b39f52aSChuck Lever 5883b39f52aSChuck Lever TP_STRUCT__entry( 5893b39f52aSChuck Lever __field(const void *, req) 5903b39f52aSChuck Lever __field(unsigned int, task_id) 5913b39f52aSChuck Lever __field(unsigned int, client_id) 5923b39f52aSChuck Lever __field(u32, xid) 5933b39f52aSChuck Lever ), 5943b39f52aSChuck Lever 5953b39f52aSChuck Lever TP_fast_assign( 5963b39f52aSChuck Lever const struct rpc_rqst *rqst = &req->rl_slot; 5973b39f52aSChuck Lever 5983b39f52aSChuck Lever __entry->req = req; 5993b39f52aSChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 6003b39f52aSChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 6013b39f52aSChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 6023b39f52aSChuck Lever ), 6033b39f52aSChuck Lever 6043b39f52aSChuck Lever TP_printk("task:%u@%u xid=0x%08x req=%p", 6053b39f52aSChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 6063b39f52aSChuck Lever __entry->req 6073b39f52aSChuck Lever ) 6083b39f52aSChuck Lever ); 6091c443effSChuck Lever 610aba11831SChuck Lever DEFINE_RDCH_EVENT(read); 611aba11831SChuck Lever DEFINE_WRCH_EVENT(write); 612aba11831SChuck Lever DEFINE_WRCH_EVENT(reply); 61358f10ad4SChuck Lever 614ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch); 615614f3c96SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch_pullup); 616614f3c96SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch_mapped); 617ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_readch); 618ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_areadch); 619ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_writech); 620ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_replych); 621ab03eff5SChuck Lever 622ab03eff5SChuck Lever #define xprtrdma_show_chunktype(x) \ 623ab03eff5SChuck Lever __print_symbolic(x, \ 624ab03eff5SChuck Lever { rpcrdma_noch, "inline" }, \ 625614f3c96SChuck Lever { rpcrdma_noch_pullup, "pullup" }, \ 626614f3c96SChuck Lever { rpcrdma_noch_mapped, "mapped" }, \ 627ab03eff5SChuck Lever { rpcrdma_readch, "read list" }, \ 628ab03eff5SChuck Lever { rpcrdma_areadch, "*read list" }, \ 629ab03eff5SChuck Lever { rpcrdma_writech, "write list" }, \ 630ab03eff5SChuck Lever { rpcrdma_replych, "reply chunk" }) 631ab03eff5SChuck Lever 632ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_marshal, 633ab03eff5SChuck Lever TP_PROTO( 6341310051cSChuck Lever const struct rpcrdma_req *req, 635ab03eff5SChuck Lever unsigned int rtype, 636ab03eff5SChuck Lever unsigned int wtype 637ab03eff5SChuck Lever ), 638ab03eff5SChuck Lever 6391310051cSChuck Lever TP_ARGS(req, rtype, wtype), 640ab03eff5SChuck Lever 641ab03eff5SChuck Lever TP_STRUCT__entry( 642ab03eff5SChuck Lever __field(unsigned int, task_id) 643ab03eff5SChuck Lever __field(unsigned int, client_id) 644ab03eff5SChuck Lever __field(u32, xid) 645ab03eff5SChuck Lever __field(unsigned int, hdrlen) 646ab03eff5SChuck Lever __field(unsigned int, headlen) 647ab03eff5SChuck Lever __field(unsigned int, pagelen) 648ab03eff5SChuck Lever __field(unsigned int, taillen) 649ab03eff5SChuck Lever __field(unsigned int, rtype) 650ab03eff5SChuck Lever __field(unsigned int, wtype) 651ab03eff5SChuck Lever ), 652ab03eff5SChuck Lever 653ab03eff5SChuck Lever TP_fast_assign( 6541310051cSChuck Lever const struct rpc_rqst *rqst = &req->rl_slot; 6551310051cSChuck Lever 656ab03eff5SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 657ab03eff5SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 658ab03eff5SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 6591310051cSChuck Lever __entry->hdrlen = req->rl_hdrbuf.len; 660ab03eff5SChuck Lever __entry->headlen = rqst->rq_snd_buf.head[0].iov_len; 661ab03eff5SChuck Lever __entry->pagelen = rqst->rq_snd_buf.page_len; 662ab03eff5SChuck Lever __entry->taillen = rqst->rq_snd_buf.tail[0].iov_len; 663ab03eff5SChuck Lever __entry->rtype = rtype; 664ab03eff5SChuck Lever __entry->wtype = wtype; 665ab03eff5SChuck Lever ), 666ab03eff5SChuck Lever 667ab03eff5SChuck Lever TP_printk("task:%u@%u xid=0x%08x: hdr=%u xdr=%u/%u/%u %s/%s", 668ab03eff5SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 669ab03eff5SChuck Lever __entry->hdrlen, 670ab03eff5SChuck Lever __entry->headlen, __entry->pagelen, __entry->taillen, 671ab03eff5SChuck Lever xprtrdma_show_chunktype(__entry->rtype), 672ab03eff5SChuck Lever xprtrdma_show_chunktype(__entry->wtype) 673ab03eff5SChuck Lever ) 674ab03eff5SChuck Lever ); 675ab03eff5SChuck Lever 67617e4c443SChuck Lever TRACE_EVENT(xprtrdma_marshal_failed, 67717e4c443SChuck Lever TP_PROTO(const struct rpc_rqst *rqst, 67817e4c443SChuck Lever int ret 67917e4c443SChuck Lever ), 68017e4c443SChuck Lever 68117e4c443SChuck Lever TP_ARGS(rqst, ret), 68217e4c443SChuck Lever 68317e4c443SChuck Lever TP_STRUCT__entry( 68417e4c443SChuck Lever __field(unsigned int, task_id) 68517e4c443SChuck Lever __field(unsigned int, client_id) 68617e4c443SChuck Lever __field(u32, xid) 68717e4c443SChuck Lever __field(int, ret) 68817e4c443SChuck Lever ), 68917e4c443SChuck Lever 69017e4c443SChuck Lever TP_fast_assign( 69117e4c443SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 69217e4c443SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 69317e4c443SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 69417e4c443SChuck Lever __entry->ret = ret; 69517e4c443SChuck Lever ), 69617e4c443SChuck Lever 69717e4c443SChuck Lever TP_printk("task:%u@%u xid=0x%08x: ret=%d", 69817e4c443SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 69917e4c443SChuck Lever __entry->ret 70017e4c443SChuck Lever ) 70117e4c443SChuck Lever ); 70217e4c443SChuck Lever 70305eb06d8SChuck Lever TRACE_EVENT(xprtrdma_prepsend_failed, 70405eb06d8SChuck Lever TP_PROTO(const struct rpc_rqst *rqst, 70505eb06d8SChuck Lever int ret 70605eb06d8SChuck Lever ), 70705eb06d8SChuck Lever 70805eb06d8SChuck Lever TP_ARGS(rqst, ret), 70905eb06d8SChuck Lever 71005eb06d8SChuck Lever TP_STRUCT__entry( 71105eb06d8SChuck Lever __field(unsigned int, task_id) 71205eb06d8SChuck Lever __field(unsigned int, client_id) 71305eb06d8SChuck Lever __field(u32, xid) 71405eb06d8SChuck Lever __field(int, ret) 71505eb06d8SChuck Lever ), 71605eb06d8SChuck Lever 71705eb06d8SChuck Lever TP_fast_assign( 71805eb06d8SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 71905eb06d8SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 72005eb06d8SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 72105eb06d8SChuck Lever __entry->ret = ret; 72205eb06d8SChuck Lever ), 72305eb06d8SChuck Lever 72405eb06d8SChuck Lever TP_printk("task:%u@%u xid=0x%08x: ret=%d", 72505eb06d8SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 72605eb06d8SChuck Lever __entry->ret 72705eb06d8SChuck Lever ) 72805eb06d8SChuck Lever ); 72905eb06d8SChuck Lever 730ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_post_send, 731ab03eff5SChuck Lever TP_PROTO( 732bdb2ce82SChuck Lever const struct rpcrdma_req *req 733ab03eff5SChuck Lever ), 734ab03eff5SChuck Lever 735bdb2ce82SChuck Lever TP_ARGS(req), 736ab03eff5SChuck Lever 737ab03eff5SChuck Lever TP_STRUCT__entry( 738ab03eff5SChuck Lever __field(const void *, req) 739cb586decSChuck Lever __field(const void *, sc) 7400c77668dSChuck Lever __field(unsigned int, task_id) 7410c77668dSChuck Lever __field(unsigned int, client_id) 742ab03eff5SChuck Lever __field(int, num_sge) 743470443e0SChuck Lever __field(int, signaled) 744ab03eff5SChuck Lever ), 745ab03eff5SChuck Lever 746ab03eff5SChuck Lever TP_fast_assign( 7470c77668dSChuck Lever const struct rpc_rqst *rqst = &req->rl_slot; 7480c77668dSChuck Lever 7490c77668dSChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 75010694ac9SChuck Lever __entry->client_id = rqst->rq_task->tk_client ? 75110694ac9SChuck Lever rqst->rq_task->tk_client->cl_clid : -1; 752ab03eff5SChuck Lever __entry->req = req; 753cb586decSChuck Lever __entry->sc = req->rl_sendctx; 754dc15c3d5SChuck Lever __entry->num_sge = req->rl_wr.num_sge; 755dc15c3d5SChuck Lever __entry->signaled = req->rl_wr.send_flags & IB_SEND_SIGNALED; 756ab03eff5SChuck Lever ), 757ab03eff5SChuck Lever 758bdb2ce82SChuck Lever TP_printk("task:%u@%u req=%p sc=%p (%d SGE%s) %s", 7590c77668dSChuck Lever __entry->task_id, __entry->client_id, 760cb586decSChuck Lever __entry->req, __entry->sc, __entry->num_sge, 7610c77668dSChuck Lever (__entry->num_sge == 1 ? "" : "s"), 762bdb2ce82SChuck Lever (__entry->signaled ? "signaled" : "") 763ab03eff5SChuck Lever ) 764ab03eff5SChuck Lever ); 765ab03eff5SChuck Lever 766b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_post_recv, 767b4a7f91cSChuck Lever TP_PROTO( 7682dfdcd88SChuck Lever const struct rpcrdma_rep *rep 769b4a7f91cSChuck Lever ), 770b4a7f91cSChuck Lever 7712dfdcd88SChuck Lever TP_ARGS(rep), 772b4a7f91cSChuck Lever 773b4a7f91cSChuck Lever TP_STRUCT__entry( 7742dfdcd88SChuck Lever __field(const void *, rep) 775b4a7f91cSChuck Lever ), 776b4a7f91cSChuck Lever 777b4a7f91cSChuck Lever TP_fast_assign( 7782dfdcd88SChuck Lever __entry->rep = rep; 779b4a7f91cSChuck Lever ), 780b4a7f91cSChuck Lever 7812dfdcd88SChuck Lever TP_printk("rep=%p", 7822dfdcd88SChuck Lever __entry->rep 783b4a7f91cSChuck Lever ) 784b4a7f91cSChuck Lever ); 785b4a7f91cSChuck Lever 7867c8d9e7cSChuck Lever TRACE_EVENT(xprtrdma_post_recvs, 7877c8d9e7cSChuck Lever TP_PROTO( 7887c8d9e7cSChuck Lever const struct rpcrdma_xprt *r_xprt, 7897c8d9e7cSChuck Lever unsigned int count, 7907c8d9e7cSChuck Lever int status 7917c8d9e7cSChuck Lever ), 7927c8d9e7cSChuck Lever 7937c8d9e7cSChuck Lever TP_ARGS(r_xprt, count, status), 7947c8d9e7cSChuck Lever 7957c8d9e7cSChuck Lever TP_STRUCT__entry( 7967c8d9e7cSChuck Lever __field(const void *, r_xprt) 7977c8d9e7cSChuck Lever __field(unsigned int, count) 7987c8d9e7cSChuck Lever __field(int, status) 7997c8d9e7cSChuck Lever __field(int, posted) 8007c8d9e7cSChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 8017c8d9e7cSChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 8027c8d9e7cSChuck Lever ), 8037c8d9e7cSChuck Lever 8047c8d9e7cSChuck Lever TP_fast_assign( 8057c8d9e7cSChuck Lever __entry->r_xprt = r_xprt; 8067c8d9e7cSChuck Lever __entry->count = count; 8077c8d9e7cSChuck Lever __entry->status = status; 808e28ce900SChuck Lever __entry->posted = r_xprt->rx_ep->re_receive_count; 8097c8d9e7cSChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 8107c8d9e7cSChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 8117c8d9e7cSChuck Lever ), 8127c8d9e7cSChuck Lever 8137c8d9e7cSChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: %u new recvs, %d active (rc %d)", 8147c8d9e7cSChuck Lever __get_str(addr), __get_str(port), __entry->r_xprt, 8157c8d9e7cSChuck Lever __entry->count, __entry->posted, __entry->status 816ab03eff5SChuck Lever ) 817ab03eff5SChuck Lever ); 818ab03eff5SChuck Lever 8194b93dab3SChuck Lever TRACE_EVENT(xprtrdma_post_linv, 8204b93dab3SChuck Lever TP_PROTO( 8214b93dab3SChuck Lever const struct rpcrdma_req *req, 8224b93dab3SChuck Lever int status 8234b93dab3SChuck Lever ), 8244b93dab3SChuck Lever 8254b93dab3SChuck Lever TP_ARGS(req, status), 8264b93dab3SChuck Lever 8274b93dab3SChuck Lever TP_STRUCT__entry( 8284b93dab3SChuck Lever __field(const void *, req) 8294b93dab3SChuck Lever __field(int, status) 8304b93dab3SChuck Lever __field(u32, xid) 8314b93dab3SChuck Lever ), 8324b93dab3SChuck Lever 8334b93dab3SChuck Lever TP_fast_assign( 8344b93dab3SChuck Lever __entry->req = req; 8354b93dab3SChuck Lever __entry->status = status; 8364b93dab3SChuck Lever __entry->xid = be32_to_cpu(req->rl_slot.rq_xid); 8374b93dab3SChuck Lever ), 8384b93dab3SChuck Lever 8394b93dab3SChuck Lever TP_printk("req=%p xid=0x%08x status=%d", 8404b93dab3SChuck Lever __entry->req, __entry->xid, __entry->status 8414b93dab3SChuck Lever ) 8424b93dab3SChuck Lever ); 8434b93dab3SChuck Lever 844ab03eff5SChuck Lever /** 845ab03eff5SChuck Lever ** Completion events 846ab03eff5SChuck Lever **/ 847ab03eff5SChuck Lever 848ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_wc_send, 849ab03eff5SChuck Lever TP_PROTO( 850ab03eff5SChuck Lever const struct rpcrdma_sendctx *sc, 851ab03eff5SChuck Lever const struct ib_wc *wc 852ab03eff5SChuck Lever ), 853ab03eff5SChuck Lever 854ab03eff5SChuck Lever TP_ARGS(sc, wc), 855ab03eff5SChuck Lever 856ab03eff5SChuck Lever TP_STRUCT__entry( 857ab03eff5SChuck Lever __field(const void *, req) 858cb586decSChuck Lever __field(const void *, sc) 859ab03eff5SChuck Lever __field(unsigned int, unmap_count) 860ab03eff5SChuck Lever __field(unsigned int, status) 861ab03eff5SChuck Lever __field(unsigned int, vendor_err) 862ab03eff5SChuck Lever ), 863ab03eff5SChuck Lever 864ab03eff5SChuck Lever TP_fast_assign( 865ab03eff5SChuck Lever __entry->req = sc->sc_req; 866cb586decSChuck Lever __entry->sc = sc; 867ab03eff5SChuck Lever __entry->unmap_count = sc->sc_unmap_count; 868ab03eff5SChuck Lever __entry->status = wc->status; 869ab03eff5SChuck Lever __entry->vendor_err = __entry->status ? wc->vendor_err : 0; 870ab03eff5SChuck Lever ), 871ab03eff5SChuck Lever 872cb586decSChuck Lever TP_printk("req=%p sc=%p unmapped=%u: %s (%u/0x%x)", 873cb586decSChuck Lever __entry->req, __entry->sc, __entry->unmap_count, 874ab03eff5SChuck Lever rdma_show_wc_status(__entry->status), 875ab03eff5SChuck Lever __entry->status, __entry->vendor_err 876ab03eff5SChuck Lever ) 877ab03eff5SChuck Lever ); 878ab03eff5SChuck Lever 879b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_wc_receive, 880b4a7f91cSChuck Lever TP_PROTO( 881b4a7f91cSChuck Lever const struct ib_wc *wc 882b4a7f91cSChuck Lever ), 883b4a7f91cSChuck Lever 8840e0b854cSChuck Lever TP_ARGS(wc), 885b4a7f91cSChuck Lever 886b4a7f91cSChuck Lever TP_STRUCT__entry( 8872dfdcd88SChuck Lever __field(const void *, rep) 8880e0b854cSChuck Lever __field(u32, byte_len) 889b4a7f91cSChuck Lever __field(unsigned int, status) 8900e0b854cSChuck Lever __field(u32, vendor_err) 891b4a7f91cSChuck Lever ), 892b4a7f91cSChuck Lever 893b4a7f91cSChuck Lever TP_fast_assign( 8942dfdcd88SChuck Lever __entry->rep = container_of(wc->wr_cqe, struct rpcrdma_rep, 8952dfdcd88SChuck Lever rr_cqe); 896b4a7f91cSChuck Lever __entry->status = wc->status; 8970e0b854cSChuck Lever if (wc->status) { 8980e0b854cSChuck Lever __entry->byte_len = 0; 8990e0b854cSChuck Lever __entry->vendor_err = wc->vendor_err; 9000e0b854cSChuck Lever } else { 9010e0b854cSChuck Lever __entry->byte_len = wc->byte_len; 9020e0b854cSChuck Lever __entry->vendor_err = 0; 9030e0b854cSChuck Lever } 904b4a7f91cSChuck Lever ), 905b4a7f91cSChuck Lever 9062dfdcd88SChuck Lever TP_printk("rep=%p %u bytes: %s (%u/0x%x)", 9072dfdcd88SChuck Lever __entry->rep, __entry->byte_len, 908b4a7f91cSChuck Lever rdma_show_wc_status(__entry->status), 909b4a7f91cSChuck Lever __entry->status, __entry->vendor_err 910b4a7f91cSChuck Lever ) 911b4a7f91cSChuck Lever ); 912b4a7f91cSChuck Lever 91358f10ad4SChuck Lever DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_fastreg); 9142937fedeSChuck Lever DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_li); 9152937fedeSChuck Lever DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_li_wake); 916d8099fedSChuck Lever DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_li_done); 9172937fedeSChuck Lever 91853b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_alloc, 91953b2c1cbSChuck Lever TP_PROTO( 92053b2c1cbSChuck Lever const struct rpcrdma_mr *mr, 92153b2c1cbSChuck Lever int rc 92253b2c1cbSChuck Lever ), 92353b2c1cbSChuck Lever 92453b2c1cbSChuck Lever TP_ARGS(mr, rc), 92553b2c1cbSChuck Lever 92653b2c1cbSChuck Lever TP_STRUCT__entry( 92762a89501SChuck Lever __field(u32, mr_id) 92853b2c1cbSChuck Lever __field(int, rc) 92953b2c1cbSChuck Lever ), 93053b2c1cbSChuck Lever 93153b2c1cbSChuck Lever TP_fast_assign( 93262a89501SChuck Lever __entry->mr_id = mr->frwr.fr_mr->res.id; 93353b2c1cbSChuck Lever __entry->rc = rc; 93453b2c1cbSChuck Lever ), 93553b2c1cbSChuck Lever 93662a89501SChuck Lever TP_printk("mr.id=%u: rc=%d", 93762a89501SChuck Lever __entry->mr_id, __entry->rc 93853b2c1cbSChuck Lever ) 93953b2c1cbSChuck Lever ); 94053b2c1cbSChuck Lever 94153b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_dereg, 94253b2c1cbSChuck Lever TP_PROTO( 94353b2c1cbSChuck Lever const struct rpcrdma_mr *mr, 94453b2c1cbSChuck Lever int rc 94553b2c1cbSChuck Lever ), 94653b2c1cbSChuck Lever 94753b2c1cbSChuck Lever TP_ARGS(mr, rc), 94853b2c1cbSChuck Lever 94953b2c1cbSChuck Lever TP_STRUCT__entry( 95062a89501SChuck Lever __field(u32, mr_id) 95162a89501SChuck Lever __field(int, nents) 95253b2c1cbSChuck Lever __field(u32, handle) 95353b2c1cbSChuck Lever __field(u32, length) 95453b2c1cbSChuck Lever __field(u64, offset) 95553b2c1cbSChuck Lever __field(u32, dir) 95653b2c1cbSChuck Lever __field(int, rc) 95753b2c1cbSChuck Lever ), 95853b2c1cbSChuck Lever 95953b2c1cbSChuck Lever TP_fast_assign( 96062a89501SChuck Lever __entry->mr_id = mr->frwr.fr_mr->res.id; 96162a89501SChuck Lever __entry->nents = mr->mr_nents; 96253b2c1cbSChuck Lever __entry->handle = mr->mr_handle; 96353b2c1cbSChuck Lever __entry->length = mr->mr_length; 96453b2c1cbSChuck Lever __entry->offset = mr->mr_offset; 96553b2c1cbSChuck Lever __entry->dir = mr->mr_dir; 96653b2c1cbSChuck Lever __entry->rc = rc; 96753b2c1cbSChuck Lever ), 96853b2c1cbSChuck Lever 96962a89501SChuck Lever TP_printk("mr.id=%u nents=%d %u@0x%016llx:0x%08x (%s): rc=%d", 97062a89501SChuck Lever __entry->mr_id, __entry->nents, __entry->length, 97153b2c1cbSChuck Lever (unsigned long long)__entry->offset, __entry->handle, 97253b2c1cbSChuck Lever xprtrdma_show_direction(__entry->dir), 97353b2c1cbSChuck Lever __entry->rc 97453b2c1cbSChuck Lever ) 97553b2c1cbSChuck Lever ); 97653b2c1cbSChuck Lever 97753b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_sgerr, 97853b2c1cbSChuck Lever TP_PROTO( 97953b2c1cbSChuck Lever const struct rpcrdma_mr *mr, 98053b2c1cbSChuck Lever int sg_nents 98153b2c1cbSChuck Lever ), 98253b2c1cbSChuck Lever 98353b2c1cbSChuck Lever TP_ARGS(mr, sg_nents), 98453b2c1cbSChuck Lever 98553b2c1cbSChuck Lever TP_STRUCT__entry( 98662a89501SChuck Lever __field(u32, mr_id) 98753b2c1cbSChuck Lever __field(u64, addr) 98853b2c1cbSChuck Lever __field(u32, dir) 98953b2c1cbSChuck Lever __field(int, nents) 99053b2c1cbSChuck Lever ), 99153b2c1cbSChuck Lever 99253b2c1cbSChuck Lever TP_fast_assign( 99362a89501SChuck Lever __entry->mr_id = mr->frwr.fr_mr->res.id; 99453b2c1cbSChuck Lever __entry->addr = mr->mr_sg->dma_address; 99553b2c1cbSChuck Lever __entry->dir = mr->mr_dir; 99653b2c1cbSChuck Lever __entry->nents = sg_nents; 99753b2c1cbSChuck Lever ), 99853b2c1cbSChuck Lever 99962a89501SChuck Lever TP_printk("mr.id=%u DMA addr=0x%llx (%s) sg_nents=%d", 100062a89501SChuck Lever __entry->mr_id, __entry->addr, 100153b2c1cbSChuck Lever xprtrdma_show_direction(__entry->dir), 100253b2c1cbSChuck Lever __entry->nents 100353b2c1cbSChuck Lever ) 100453b2c1cbSChuck Lever ); 100553b2c1cbSChuck Lever 100653b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_maperr, 100753b2c1cbSChuck Lever TP_PROTO( 100853b2c1cbSChuck Lever const struct rpcrdma_mr *mr, 100953b2c1cbSChuck Lever int num_mapped 101053b2c1cbSChuck Lever ), 101153b2c1cbSChuck Lever 101253b2c1cbSChuck Lever TP_ARGS(mr, num_mapped), 101353b2c1cbSChuck Lever 101453b2c1cbSChuck Lever TP_STRUCT__entry( 101562a89501SChuck Lever __field(u32, mr_id) 101653b2c1cbSChuck Lever __field(u64, addr) 101753b2c1cbSChuck Lever __field(u32, dir) 101853b2c1cbSChuck Lever __field(int, num_mapped) 101953b2c1cbSChuck Lever __field(int, nents) 102053b2c1cbSChuck Lever ), 102153b2c1cbSChuck Lever 102253b2c1cbSChuck Lever TP_fast_assign( 102362a89501SChuck Lever __entry->mr_id = mr->frwr.fr_mr->res.id; 102453b2c1cbSChuck Lever __entry->addr = mr->mr_sg->dma_address; 102553b2c1cbSChuck Lever __entry->dir = mr->mr_dir; 102653b2c1cbSChuck Lever __entry->num_mapped = num_mapped; 102753b2c1cbSChuck Lever __entry->nents = mr->mr_nents; 102853b2c1cbSChuck Lever ), 102953b2c1cbSChuck Lever 103062a89501SChuck Lever TP_printk("mr.id=%u DMA addr=0x%llx (%s) nents=%d of %d", 103162a89501SChuck Lever __entry->mr_id, __entry->addr, 103253b2c1cbSChuck Lever xprtrdma_show_direction(__entry->dir), 103353b2c1cbSChuck Lever __entry->num_mapped, __entry->nents 103453b2c1cbSChuck Lever ) 103553b2c1cbSChuck Lever ); 103653b2c1cbSChuck Lever 1037d379eaa8SChuck Lever DEFINE_MR_EVENT(localinv); 1038d379eaa8SChuck Lever DEFINE_MR_EVENT(map); 1039d379eaa8SChuck Lever DEFINE_MR_EVENT(unmap); 104062a89501SChuck Lever DEFINE_MR_EVENT(reminv); 1041d379eaa8SChuck Lever DEFINE_MR_EVENT(recycle); 104258f10ad4SChuck Lever 104353b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_dma_maperr, 104453b2c1cbSChuck Lever TP_PROTO( 104553b2c1cbSChuck Lever u64 addr 104653b2c1cbSChuck Lever ), 104753b2c1cbSChuck Lever 104853b2c1cbSChuck Lever TP_ARGS(addr), 104953b2c1cbSChuck Lever 105053b2c1cbSChuck Lever TP_STRUCT__entry( 105153b2c1cbSChuck Lever __field(u64, addr) 105253b2c1cbSChuck Lever ), 105353b2c1cbSChuck Lever 105453b2c1cbSChuck Lever TP_fast_assign( 105553b2c1cbSChuck Lever __entry->addr = addr; 105653b2c1cbSChuck Lever ), 105753b2c1cbSChuck Lever 105853b2c1cbSChuck Lever TP_printk("dma addr=0x%llx\n", __entry->addr) 105953b2c1cbSChuck Lever ); 106053b2c1cbSChuck Lever 1061b4a7f91cSChuck Lever /** 1062b4a7f91cSChuck Lever ** Reply events 1063b4a7f91cSChuck Lever **/ 1064b4a7f91cSChuck Lever 1065b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_reply, 1066b4a7f91cSChuck Lever TP_PROTO( 1067b4a7f91cSChuck Lever const struct rpc_task *task, 1068b4a7f91cSChuck Lever const struct rpcrdma_rep *rep, 1069b4a7f91cSChuck Lever const struct rpcrdma_req *req, 1070b4a7f91cSChuck Lever unsigned int credits 1071b4a7f91cSChuck Lever ), 1072b4a7f91cSChuck Lever 1073b4a7f91cSChuck Lever TP_ARGS(task, rep, req, credits), 1074b4a7f91cSChuck Lever 1075b4a7f91cSChuck Lever TP_STRUCT__entry( 1076b4a7f91cSChuck Lever __field(unsigned int, task_id) 1077b4a7f91cSChuck Lever __field(unsigned int, client_id) 1078b4a7f91cSChuck Lever __field(const void *, rep) 1079b4a7f91cSChuck Lever __field(const void *, req) 1080b4a7f91cSChuck Lever __field(u32, xid) 1081b4a7f91cSChuck Lever __field(unsigned int, credits) 1082b4a7f91cSChuck Lever ), 1083b4a7f91cSChuck Lever 1084b4a7f91cSChuck Lever TP_fast_assign( 1085b4a7f91cSChuck Lever __entry->task_id = task->tk_pid; 1086b4a7f91cSChuck Lever __entry->client_id = task->tk_client->cl_clid; 1087b4a7f91cSChuck Lever __entry->rep = rep; 1088b4a7f91cSChuck Lever __entry->req = req; 1089b4a7f91cSChuck Lever __entry->xid = be32_to_cpu(rep->rr_xid); 1090b4a7f91cSChuck Lever __entry->credits = credits; 1091b4a7f91cSChuck Lever ), 1092b4a7f91cSChuck Lever 1093b4a7f91cSChuck Lever TP_printk("task:%u@%u xid=0x%08x, %u credits, rep=%p -> req=%p", 1094b4a7f91cSChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 1095b4a7f91cSChuck Lever __entry->credits, __entry->rep, __entry->req 1096b4a7f91cSChuck Lever ) 1097b4a7f91cSChuck Lever ); 1098b4a7f91cSChuck Lever 1099b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_defer_cmp, 1100b4a7f91cSChuck Lever TP_PROTO( 1101b4a7f91cSChuck Lever const struct rpcrdma_rep *rep 1102b4a7f91cSChuck Lever ), 1103b4a7f91cSChuck Lever 1104b4a7f91cSChuck Lever TP_ARGS(rep), 1105b4a7f91cSChuck Lever 1106b4a7f91cSChuck Lever TP_STRUCT__entry( 1107b4a7f91cSChuck Lever __field(unsigned int, task_id) 1108b4a7f91cSChuck Lever __field(unsigned int, client_id) 1109b4a7f91cSChuck Lever __field(const void *, rep) 1110b4a7f91cSChuck Lever __field(u32, xid) 1111b4a7f91cSChuck Lever ), 1112b4a7f91cSChuck Lever 1113b4a7f91cSChuck Lever TP_fast_assign( 1114b4a7f91cSChuck Lever __entry->task_id = rep->rr_rqst->rq_task->tk_pid; 1115b4a7f91cSChuck Lever __entry->client_id = rep->rr_rqst->rq_task->tk_client->cl_clid; 1116b4a7f91cSChuck Lever __entry->rep = rep; 1117b4a7f91cSChuck Lever __entry->xid = be32_to_cpu(rep->rr_xid); 1118b4a7f91cSChuck Lever ), 1119b4a7f91cSChuck Lever 1120b4a7f91cSChuck Lever TP_printk("task:%u@%u xid=0x%08x rep=%p", 1121b4a7f91cSChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 1122b4a7f91cSChuck Lever __entry->rep 1123b4a7f91cSChuck Lever ) 1124b4a7f91cSChuck Lever ); 1125b4a7f91cSChuck Lever 1126b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_vers); 1127b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_rqst); 1128b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_short); 1129b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_hdr); 1130b4a7f91cSChuck Lever 1131e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_fixup, 1132e11b7c96SChuck Lever TP_PROTO( 1133e11b7c96SChuck Lever const struct rpc_rqst *rqst, 1134d4957f01SChuck Lever unsigned long fixup 1135e11b7c96SChuck Lever ), 1136e11b7c96SChuck Lever 1137d4957f01SChuck Lever TP_ARGS(rqst, fixup), 1138e11b7c96SChuck Lever 1139e11b7c96SChuck Lever TP_STRUCT__entry( 1140e11b7c96SChuck Lever __field(unsigned int, task_id) 1141e11b7c96SChuck Lever __field(unsigned int, client_id) 1142d4957f01SChuck Lever __field(unsigned long, fixup) 1143d4957f01SChuck Lever __field(size_t, headlen) 1144d4957f01SChuck Lever __field(unsigned int, pagelen) 1145d4957f01SChuck Lever __field(size_t, taillen) 1146e11b7c96SChuck Lever ), 1147e11b7c96SChuck Lever 1148e11b7c96SChuck Lever TP_fast_assign( 1149e11b7c96SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 1150e11b7c96SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 1151d4957f01SChuck Lever __entry->fixup = fixup; 1152d4957f01SChuck Lever __entry->headlen = rqst->rq_rcv_buf.head[0].iov_len; 1153d4957f01SChuck Lever __entry->pagelen = rqst->rq_rcv_buf.page_len; 1154d4957f01SChuck Lever __entry->taillen = rqst->rq_rcv_buf.tail[0].iov_len; 1155e11b7c96SChuck Lever ), 1156e11b7c96SChuck Lever 1157d4957f01SChuck Lever TP_printk("task:%u@%u fixup=%lu xdr=%zu/%u/%zu", 1158d4957f01SChuck Lever __entry->task_id, __entry->client_id, __entry->fixup, 1159d4957f01SChuck Lever __entry->headlen, __entry->pagelen, __entry->taillen 1160e11b7c96SChuck Lever ) 1161e11b7c96SChuck Lever ); 1162e11b7c96SChuck Lever 1163e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_decode_seg, 1164e11b7c96SChuck Lever TP_PROTO( 1165e11b7c96SChuck Lever u32 handle, 1166e11b7c96SChuck Lever u32 length, 1167e11b7c96SChuck Lever u64 offset 1168e11b7c96SChuck Lever ), 1169e11b7c96SChuck Lever 1170e11b7c96SChuck Lever TP_ARGS(handle, length, offset), 1171e11b7c96SChuck Lever 1172e11b7c96SChuck Lever TP_STRUCT__entry( 1173e11b7c96SChuck Lever __field(u32, handle) 1174e11b7c96SChuck Lever __field(u32, length) 1175e11b7c96SChuck Lever __field(u64, offset) 1176e11b7c96SChuck Lever ), 1177e11b7c96SChuck Lever 1178e11b7c96SChuck Lever TP_fast_assign( 1179e11b7c96SChuck Lever __entry->handle = handle; 1180e11b7c96SChuck Lever __entry->length = length; 1181e11b7c96SChuck Lever __entry->offset = offset; 1182e11b7c96SChuck Lever ), 1183e11b7c96SChuck Lever 1184e11b7c96SChuck Lever TP_printk("%u@0x%016llx:0x%08x", 1185e11b7c96SChuck Lever __entry->length, (unsigned long long)__entry->offset, 1186e11b7c96SChuck Lever __entry->handle 1187e11b7c96SChuck Lever ) 1188e11b7c96SChuck Lever ); 1189e11b7c96SChuck Lever 1190fc1eb807SChuck Lever /** 1191fc1eb807SChuck Lever ** Callback events 1192fc1eb807SChuck Lever **/ 1193fc1eb807SChuck Lever 1194fc1eb807SChuck Lever TRACE_EVENT(xprtrdma_cb_setup, 1195fc1eb807SChuck Lever TP_PROTO( 1196fc1eb807SChuck Lever const struct rpcrdma_xprt *r_xprt, 1197fc1eb807SChuck Lever unsigned int reqs 1198fc1eb807SChuck Lever ), 1199fc1eb807SChuck Lever 1200fc1eb807SChuck Lever TP_ARGS(r_xprt, reqs), 1201fc1eb807SChuck Lever 1202fc1eb807SChuck Lever TP_STRUCT__entry( 1203fc1eb807SChuck Lever __field(const void *, r_xprt) 1204fc1eb807SChuck Lever __field(unsigned int, reqs) 1205fc1eb807SChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 1206fc1eb807SChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 1207fc1eb807SChuck Lever ), 1208fc1eb807SChuck Lever 1209fc1eb807SChuck Lever TP_fast_assign( 1210fc1eb807SChuck Lever __entry->r_xprt = r_xprt; 1211fc1eb807SChuck Lever __entry->reqs = reqs; 1212fc1eb807SChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 1213fc1eb807SChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 1214fc1eb807SChuck Lever ), 1215fc1eb807SChuck Lever 1216fc1eb807SChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: %u reqs", 1217fc1eb807SChuck Lever __get_str(addr), __get_str(port), 1218fc1eb807SChuck Lever __entry->r_xprt, __entry->reqs 1219fc1eb807SChuck Lever ) 1220fc1eb807SChuck Lever ); 1221fc1eb807SChuck Lever 1222fc1eb807SChuck Lever DEFINE_CB_EVENT(xprtrdma_cb_call); 1223fc1eb807SChuck Lever DEFINE_CB_EVENT(xprtrdma_cb_reply); 1224fc1eb807SChuck Lever 122507e10308SChuck Lever TRACE_EVENT(xprtrdma_leaked_rep, 122607e10308SChuck Lever TP_PROTO( 122707e10308SChuck Lever const struct rpc_rqst *rqst, 122807e10308SChuck Lever const struct rpcrdma_rep *rep 122907e10308SChuck Lever ), 123007e10308SChuck Lever 123107e10308SChuck Lever TP_ARGS(rqst, rep), 123207e10308SChuck Lever 123307e10308SChuck Lever TP_STRUCT__entry( 123407e10308SChuck Lever __field(unsigned int, task_id) 123507e10308SChuck Lever __field(unsigned int, client_id) 123607e10308SChuck Lever __field(u32, xid) 123707e10308SChuck Lever __field(const void *, rep) 123807e10308SChuck Lever ), 123907e10308SChuck Lever 124007e10308SChuck Lever TP_fast_assign( 124107e10308SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 124207e10308SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 124307e10308SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 124407e10308SChuck Lever __entry->rep = rep; 124507e10308SChuck Lever ), 124607e10308SChuck Lever 124707e10308SChuck Lever TP_printk("task:%u@%u xid=0x%08x rep=%p", 124807e10308SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 124907e10308SChuck Lever __entry->rep 125007e10308SChuck Lever ) 125107e10308SChuck Lever ); 125207e10308SChuck Lever 125398895edbSChuck Lever /** 125498895edbSChuck Lever ** Server-side RPC/RDMA events 125598895edbSChuck Lever **/ 125698895edbSChuck Lever 1257e979a173SChuck Lever DECLARE_EVENT_CLASS(svcrdma_accept_class, 1258e979a173SChuck Lever TP_PROTO( 1259e979a173SChuck Lever const struct svcxprt_rdma *rdma, 1260e979a173SChuck Lever long status 1261e979a173SChuck Lever ), 1262e979a173SChuck Lever 1263e979a173SChuck Lever TP_ARGS(rdma, status), 1264e979a173SChuck Lever 1265e979a173SChuck Lever TP_STRUCT__entry( 1266e979a173SChuck Lever __field(long, status) 1267e979a173SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1268e979a173SChuck Lever ), 1269e979a173SChuck Lever 1270e979a173SChuck Lever TP_fast_assign( 1271e979a173SChuck Lever __entry->status = status; 1272e979a173SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1273e979a173SChuck Lever ), 1274e979a173SChuck Lever 1275e979a173SChuck Lever TP_printk("addr=%s status=%ld", 1276e979a173SChuck Lever __get_str(addr), __entry->status 1277e979a173SChuck Lever ) 1278e979a173SChuck Lever ); 1279e979a173SChuck Lever 1280e979a173SChuck Lever #define DEFINE_ACCEPT_EVENT(name) \ 1281e979a173SChuck Lever DEFINE_EVENT(svcrdma_accept_class, svcrdma_##name##_err, \ 1282e979a173SChuck Lever TP_PROTO( \ 1283e979a173SChuck Lever const struct svcxprt_rdma *rdma, \ 1284e979a173SChuck Lever long status \ 1285e979a173SChuck Lever ), \ 1286e979a173SChuck Lever TP_ARGS(rdma, status)) 1287e979a173SChuck Lever 1288e979a173SChuck Lever DEFINE_ACCEPT_EVENT(pd); 1289e979a173SChuck Lever DEFINE_ACCEPT_EVENT(qp); 1290e979a173SChuck Lever DEFINE_ACCEPT_EVENT(fabric); 1291e979a173SChuck Lever DEFINE_ACCEPT_EVENT(initdepth); 1292e979a173SChuck Lever DEFINE_ACCEPT_EVENT(accept); 1293e979a173SChuck Lever 129498895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_MSG); 129598895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_NOMSG); 129698895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_MSGP); 129798895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_DONE); 129898895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_ERROR); 129998895edbSChuck Lever 130098895edbSChuck Lever #define show_rpcrdma_proc(x) \ 130198895edbSChuck Lever __print_symbolic(x, \ 130298895edbSChuck Lever { RDMA_MSG, "RDMA_MSG" }, \ 130398895edbSChuck Lever { RDMA_NOMSG, "RDMA_NOMSG" }, \ 130498895edbSChuck Lever { RDMA_MSGP, "RDMA_MSGP" }, \ 130598895edbSChuck Lever { RDMA_DONE, "RDMA_DONE" }, \ 130698895edbSChuck Lever { RDMA_ERROR, "RDMA_ERROR" }) 130798895edbSChuck Lever 130898895edbSChuck Lever TRACE_EVENT(svcrdma_decode_rqst, 130998895edbSChuck Lever TP_PROTO( 1310007140eeSChuck Lever const struct svc_rdma_recv_ctxt *ctxt, 131198895edbSChuck Lever __be32 *p, 131298895edbSChuck Lever unsigned int hdrlen 131398895edbSChuck Lever ), 131498895edbSChuck Lever 1315007140eeSChuck Lever TP_ARGS(ctxt, p, hdrlen), 131698895edbSChuck Lever 131798895edbSChuck Lever TP_STRUCT__entry( 1318007140eeSChuck Lever __field(u32, cq_id) 1319007140eeSChuck Lever __field(int, completion_id) 132098895edbSChuck Lever __field(u32, xid) 132198895edbSChuck Lever __field(u32, vers) 132298895edbSChuck Lever __field(u32, proc) 132398895edbSChuck Lever __field(u32, credits) 132498895edbSChuck Lever __field(unsigned int, hdrlen) 132598895edbSChuck Lever ), 132698895edbSChuck Lever 132798895edbSChuck Lever TP_fast_assign( 1328007140eeSChuck Lever __entry->cq_id = ctxt->rc_cid.ci_queue_id; 1329007140eeSChuck Lever __entry->completion_id = ctxt->rc_cid.ci_completion_id; 133098895edbSChuck Lever __entry->xid = be32_to_cpup(p++); 133198895edbSChuck Lever __entry->vers = be32_to_cpup(p++); 133298895edbSChuck Lever __entry->credits = be32_to_cpup(p++); 133398895edbSChuck Lever __entry->proc = be32_to_cpup(p); 133498895edbSChuck Lever __entry->hdrlen = hdrlen; 133598895edbSChuck Lever ), 133698895edbSChuck Lever 1337007140eeSChuck Lever TP_printk("cq.id=%u cid=%d xid=0x%08x vers=%u credits=%u proc=%s hdrlen=%u", 1338007140eeSChuck Lever __entry->cq_id, __entry->completion_id, 133998895edbSChuck Lever __entry->xid, __entry->vers, __entry->credits, 134098895edbSChuck Lever show_rpcrdma_proc(__entry->proc), __entry->hdrlen) 134198895edbSChuck Lever ); 134298895edbSChuck Lever 134327ce6294SChuck Lever TRACE_EVENT(svcrdma_decode_short_err, 134498895edbSChuck Lever TP_PROTO( 1345007140eeSChuck Lever const struct svc_rdma_recv_ctxt *ctxt, 134698895edbSChuck Lever unsigned int hdrlen 134798895edbSChuck Lever ), 134898895edbSChuck Lever 1349007140eeSChuck Lever TP_ARGS(ctxt, hdrlen), 135098895edbSChuck Lever 135198895edbSChuck Lever TP_STRUCT__entry( 1352007140eeSChuck Lever __field(u32, cq_id) 1353007140eeSChuck Lever __field(int, completion_id) 135498895edbSChuck Lever __field(unsigned int, hdrlen) 135598895edbSChuck Lever ), 135698895edbSChuck Lever 135798895edbSChuck Lever TP_fast_assign( 1358007140eeSChuck Lever __entry->cq_id = ctxt->rc_cid.ci_queue_id; 1359007140eeSChuck Lever __entry->completion_id = ctxt->rc_cid.ci_completion_id; 136098895edbSChuck Lever __entry->hdrlen = hdrlen; 136198895edbSChuck Lever ), 136298895edbSChuck Lever 1363007140eeSChuck Lever TP_printk("cq.id=%u cid=%d hdrlen=%u", 1364007140eeSChuck Lever __entry->cq_id, __entry->completion_id, 1365007140eeSChuck Lever __entry->hdrlen) 136698895edbSChuck Lever ); 136798895edbSChuck Lever 136898895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_badreq_event, 136998895edbSChuck Lever TP_PROTO( 1370007140eeSChuck Lever const struct svc_rdma_recv_ctxt *ctxt, 137198895edbSChuck Lever __be32 *p 137298895edbSChuck Lever ), 137398895edbSChuck Lever 1374007140eeSChuck Lever TP_ARGS(ctxt, p), 137598895edbSChuck Lever 137698895edbSChuck Lever TP_STRUCT__entry( 1377007140eeSChuck Lever __field(u32, cq_id) 1378007140eeSChuck Lever __field(int, completion_id) 137998895edbSChuck Lever __field(u32, xid) 138098895edbSChuck Lever __field(u32, vers) 138198895edbSChuck Lever __field(u32, proc) 138298895edbSChuck Lever __field(u32, credits) 138398895edbSChuck Lever ), 138498895edbSChuck Lever 138598895edbSChuck Lever TP_fast_assign( 1386007140eeSChuck Lever __entry->cq_id = ctxt->rc_cid.ci_queue_id; 1387007140eeSChuck Lever __entry->completion_id = ctxt->rc_cid.ci_completion_id; 138898895edbSChuck Lever __entry->xid = be32_to_cpup(p++); 138998895edbSChuck Lever __entry->vers = be32_to_cpup(p++); 139098895edbSChuck Lever __entry->credits = be32_to_cpup(p++); 139198895edbSChuck Lever __entry->proc = be32_to_cpup(p); 139298895edbSChuck Lever ), 139398895edbSChuck Lever 1394007140eeSChuck Lever TP_printk("cq.id=%u cid=%d xid=0x%08x vers=%u credits=%u proc=%u", 1395007140eeSChuck Lever __entry->cq_id, __entry->completion_id, 139698895edbSChuck Lever __entry->xid, __entry->vers, __entry->credits, __entry->proc) 139798895edbSChuck Lever ); 139898895edbSChuck Lever 139998895edbSChuck Lever #define DEFINE_BADREQ_EVENT(name) \ 140027ce6294SChuck Lever DEFINE_EVENT(svcrdma_badreq_event, \ 140127ce6294SChuck Lever svcrdma_decode_##name##_err, \ 140298895edbSChuck Lever TP_PROTO( \ 1403007140eeSChuck Lever const struct svc_rdma_recv_ctxt *ctxt, \ 140498895edbSChuck Lever __be32 *p \ 140598895edbSChuck Lever ), \ 1406007140eeSChuck Lever TP_ARGS(ctxt, p)) 140798895edbSChuck Lever 140898895edbSChuck Lever DEFINE_BADREQ_EVENT(badvers); 140998895edbSChuck Lever DEFINE_BADREQ_EVENT(drop); 141098895edbSChuck Lever DEFINE_BADREQ_EVENT(badproc); 141198895edbSChuck Lever DEFINE_BADREQ_EVENT(parse); 141298895edbSChuck Lever 141398895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_segment_event, 141498895edbSChuck Lever TP_PROTO( 141598895edbSChuck Lever u32 handle, 141698895edbSChuck Lever u32 length, 141798895edbSChuck Lever u64 offset 141898895edbSChuck Lever ), 141998895edbSChuck Lever 142098895edbSChuck Lever TP_ARGS(handle, length, offset), 142198895edbSChuck Lever 142298895edbSChuck Lever TP_STRUCT__entry( 142398895edbSChuck Lever __field(u32, handle) 142498895edbSChuck Lever __field(u32, length) 142598895edbSChuck Lever __field(u64, offset) 142698895edbSChuck Lever ), 142798895edbSChuck Lever 142898895edbSChuck Lever TP_fast_assign( 142998895edbSChuck Lever __entry->handle = handle; 143098895edbSChuck Lever __entry->length = length; 143198895edbSChuck Lever __entry->offset = offset; 143298895edbSChuck Lever ), 143398895edbSChuck Lever 143498895edbSChuck Lever TP_printk("%u@0x%016llx:0x%08x", 143598895edbSChuck Lever __entry->length, (unsigned long long)__entry->offset, 143698895edbSChuck Lever __entry->handle 143798895edbSChuck Lever ) 143898895edbSChuck Lever ); 143998895edbSChuck Lever 144098895edbSChuck Lever #define DEFINE_SEGMENT_EVENT(name) \ 1441e604aad2SChuck Lever DEFINE_EVENT(svcrdma_segment_event, svcrdma_##name,\ 144298895edbSChuck Lever TP_PROTO( \ 144398895edbSChuck Lever u32 handle, \ 144498895edbSChuck Lever u32 length, \ 144598895edbSChuck Lever u64 offset \ 144698895edbSChuck Lever ), \ 144798895edbSChuck Lever TP_ARGS(handle, length, offset)) 144898895edbSChuck Lever 1449a406c563SChuck Lever DEFINE_SEGMENT_EVENT(send_rseg); 1450a406c563SChuck Lever DEFINE_SEGMENT_EVENT(send_wseg); 145198895edbSChuck Lever 14526911f3e1SChuck Lever TRACE_EVENT(svcrdma_encode_wseg, 14536911f3e1SChuck Lever TP_PROTO( 14546911f3e1SChuck Lever const struct svc_rdma_send_ctxt *ctxt, 14556911f3e1SChuck Lever u32 segno, 14566911f3e1SChuck Lever u32 handle, 14576911f3e1SChuck Lever u32 length, 14586911f3e1SChuck Lever u64 offset 14596911f3e1SChuck Lever ), 14606911f3e1SChuck Lever 14616911f3e1SChuck Lever TP_ARGS(ctxt, segno, handle, length, offset), 14626911f3e1SChuck Lever 14636911f3e1SChuck Lever TP_STRUCT__entry( 14646911f3e1SChuck Lever __field(u32, cq_id) 14656911f3e1SChuck Lever __field(int, completion_id) 14666911f3e1SChuck Lever __field(u32, segno) 14676911f3e1SChuck Lever __field(u32, handle) 14686911f3e1SChuck Lever __field(u32, length) 14696911f3e1SChuck Lever __field(u64, offset) 14706911f3e1SChuck Lever ), 14716911f3e1SChuck Lever 14726911f3e1SChuck Lever TP_fast_assign( 14736911f3e1SChuck Lever __entry->cq_id = ctxt->sc_cid.ci_queue_id; 14746911f3e1SChuck Lever __entry->completion_id = ctxt->sc_cid.ci_completion_id; 14756911f3e1SChuck Lever __entry->segno = segno; 14766911f3e1SChuck Lever __entry->handle = handle; 14776911f3e1SChuck Lever __entry->length = length; 14786911f3e1SChuck Lever __entry->offset = offset; 14796911f3e1SChuck Lever ), 14806911f3e1SChuck Lever 14816911f3e1SChuck Lever TP_printk("cq_id=%u cid=%d segno=%u %u@0x%016llx:0x%08x", 14826911f3e1SChuck Lever __entry->cq_id, __entry->completion_id, 14836911f3e1SChuck Lever __entry->segno, __entry->length, 14846911f3e1SChuck Lever (unsigned long long)__entry->offset, __entry->handle 14856911f3e1SChuck Lever ) 14866911f3e1SChuck Lever ); 14876911f3e1SChuck Lever 148878147ca8SChuck Lever TRACE_EVENT(svcrdma_decode_rseg, 148978147ca8SChuck Lever TP_PROTO( 149078147ca8SChuck Lever const struct rpc_rdma_cid *cid, 149178147ca8SChuck Lever const struct svc_rdma_chunk *chunk, 149278147ca8SChuck Lever const struct svc_rdma_segment *segment 149378147ca8SChuck Lever ), 149478147ca8SChuck Lever 149578147ca8SChuck Lever TP_ARGS(cid, chunk, segment), 149678147ca8SChuck Lever 149778147ca8SChuck Lever TP_STRUCT__entry( 149878147ca8SChuck Lever __field(u32, cq_id) 149978147ca8SChuck Lever __field(int, completion_id) 150078147ca8SChuck Lever __field(u32, segno) 150178147ca8SChuck Lever __field(u32, position) 150278147ca8SChuck Lever __field(u32, handle) 150378147ca8SChuck Lever __field(u32, length) 150478147ca8SChuck Lever __field(u64, offset) 150578147ca8SChuck Lever ), 150678147ca8SChuck Lever 150778147ca8SChuck Lever TP_fast_assign( 150878147ca8SChuck Lever __entry->cq_id = cid->ci_queue_id; 150978147ca8SChuck Lever __entry->completion_id = cid->ci_completion_id; 151078147ca8SChuck Lever __entry->segno = chunk->ch_segcount; 151178147ca8SChuck Lever __entry->position = chunk->ch_position; 151278147ca8SChuck Lever __entry->handle = segment->rs_handle; 151378147ca8SChuck Lever __entry->length = segment->rs_length; 151478147ca8SChuck Lever __entry->offset = segment->rs_offset; 151578147ca8SChuck Lever ), 151678147ca8SChuck Lever 151778147ca8SChuck Lever TP_printk("cq_id=%u cid=%d segno=%u position=%u %u@0x%016llx:0x%08x", 151878147ca8SChuck Lever __entry->cq_id, __entry->completion_id, 151978147ca8SChuck Lever __entry->segno, __entry->position, __entry->length, 152078147ca8SChuck Lever (unsigned long long)__entry->offset, __entry->handle 152178147ca8SChuck Lever ) 152278147ca8SChuck Lever ); 152378147ca8SChuck Lever 152478147ca8SChuck Lever TRACE_EVENT(svcrdma_decode_wseg, 152578147ca8SChuck Lever TP_PROTO( 152678147ca8SChuck Lever const struct rpc_rdma_cid *cid, 152778147ca8SChuck Lever const struct svc_rdma_chunk *chunk, 152878147ca8SChuck Lever u32 segno 152978147ca8SChuck Lever ), 153078147ca8SChuck Lever 153178147ca8SChuck Lever TP_ARGS(cid, chunk, segno), 153278147ca8SChuck Lever 153378147ca8SChuck Lever TP_STRUCT__entry( 153478147ca8SChuck Lever __field(u32, cq_id) 153578147ca8SChuck Lever __field(int, completion_id) 153678147ca8SChuck Lever __field(u32, segno) 153778147ca8SChuck Lever __field(u32, handle) 153878147ca8SChuck Lever __field(u32, length) 153978147ca8SChuck Lever __field(u64, offset) 154078147ca8SChuck Lever ), 154178147ca8SChuck Lever 154278147ca8SChuck Lever TP_fast_assign( 154378147ca8SChuck Lever const struct svc_rdma_segment *segment = 154478147ca8SChuck Lever &chunk->ch_segments[segno]; 154578147ca8SChuck Lever 154678147ca8SChuck Lever __entry->cq_id = cid->ci_queue_id; 154778147ca8SChuck Lever __entry->completion_id = cid->ci_completion_id; 154878147ca8SChuck Lever __entry->segno = segno; 154978147ca8SChuck Lever __entry->handle = segment->rs_handle; 155078147ca8SChuck Lever __entry->length = segment->rs_length; 155178147ca8SChuck Lever __entry->offset = segment->rs_offset; 155278147ca8SChuck Lever ), 155378147ca8SChuck Lever 155478147ca8SChuck Lever TP_printk("cq_id=%u cid=%d segno=%u %u@0x%016llx:0x%08x", 155578147ca8SChuck Lever __entry->cq_id, __entry->completion_id, 155678147ca8SChuck Lever __entry->segno, __entry->length, 155778147ca8SChuck Lever (unsigned long long)__entry->offset, __entry->handle 155878147ca8SChuck Lever ) 155978147ca8SChuck Lever ); 156078147ca8SChuck Lever 156198895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_chunk_event, 156298895edbSChuck Lever TP_PROTO( 156398895edbSChuck Lever u32 length 156498895edbSChuck Lever ), 156598895edbSChuck Lever 156698895edbSChuck Lever TP_ARGS(length), 156798895edbSChuck Lever 156898895edbSChuck Lever TP_STRUCT__entry( 156998895edbSChuck Lever __field(u32, length) 157098895edbSChuck Lever ), 157198895edbSChuck Lever 157298895edbSChuck Lever TP_fast_assign( 157398895edbSChuck Lever __entry->length = length; 157498895edbSChuck Lever ), 157598895edbSChuck Lever 157698895edbSChuck Lever TP_printk("length=%u", 157798895edbSChuck Lever __entry->length 157898895edbSChuck Lever ) 157998895edbSChuck Lever ); 158098895edbSChuck Lever 158198895edbSChuck Lever #define DEFINE_CHUNK_EVENT(name) \ 1582a406c563SChuck Lever DEFINE_EVENT(svcrdma_chunk_event, svcrdma_##name, \ 158398895edbSChuck Lever TP_PROTO( \ 158498895edbSChuck Lever u32 length \ 158598895edbSChuck Lever ), \ 158698895edbSChuck Lever TP_ARGS(length)) 158798895edbSChuck Lever 1588a406c563SChuck Lever DEFINE_CHUNK_EVENT(send_pzr); 1589a406c563SChuck Lever DEFINE_CHUNK_EVENT(encode_write_chunk); 1590a406c563SChuck Lever DEFINE_CHUNK_EVENT(send_write_chunk); 1591a406c563SChuck Lever DEFINE_CHUNK_EVENT(encode_read_chunk); 1592a406c563SChuck Lever DEFINE_CHUNK_EVENT(send_reply_chunk); 159398895edbSChuck Lever 1594a406c563SChuck Lever TRACE_EVENT(svcrdma_send_read_chunk, 159598895edbSChuck Lever TP_PROTO( 159698895edbSChuck Lever u32 length, 159798895edbSChuck Lever u32 position 159898895edbSChuck Lever ), 159998895edbSChuck Lever 160098895edbSChuck Lever TP_ARGS(length, position), 160198895edbSChuck Lever 160298895edbSChuck Lever TP_STRUCT__entry( 160398895edbSChuck Lever __field(u32, length) 160498895edbSChuck Lever __field(u32, position) 160598895edbSChuck Lever ), 160698895edbSChuck Lever 160798895edbSChuck Lever TP_fast_assign( 160898895edbSChuck Lever __entry->length = length; 160998895edbSChuck Lever __entry->position = position; 161098895edbSChuck Lever ), 161198895edbSChuck Lever 161298895edbSChuck Lever TP_printk("length=%u position=%u", 161398895edbSChuck Lever __entry->length, __entry->position 161498895edbSChuck Lever ) 161598895edbSChuck Lever ); 161698895edbSChuck Lever 161798895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_error_event, 161898895edbSChuck Lever TP_PROTO( 161998895edbSChuck Lever __be32 xid 162098895edbSChuck Lever ), 162198895edbSChuck Lever 162298895edbSChuck Lever TP_ARGS(xid), 162398895edbSChuck Lever 162498895edbSChuck Lever TP_STRUCT__entry( 162598895edbSChuck Lever __field(u32, xid) 162698895edbSChuck Lever ), 162798895edbSChuck Lever 162898895edbSChuck Lever TP_fast_assign( 162998895edbSChuck Lever __entry->xid = be32_to_cpu(xid); 163098895edbSChuck Lever ), 163198895edbSChuck Lever 163298895edbSChuck Lever TP_printk("xid=0x%08x", 163398895edbSChuck Lever __entry->xid 163498895edbSChuck Lever ) 163598895edbSChuck Lever ); 163698895edbSChuck Lever 163798895edbSChuck Lever #define DEFINE_ERROR_EVENT(name) \ 163898895edbSChuck Lever DEFINE_EVENT(svcrdma_error_event, svcrdma_err_##name, \ 163998895edbSChuck Lever TP_PROTO( \ 164098895edbSChuck Lever __be32 xid \ 164198895edbSChuck Lever ), \ 164298895edbSChuck Lever TP_ARGS(xid)) 164398895edbSChuck Lever 164498895edbSChuck Lever DEFINE_ERROR_EVENT(vers); 164598895edbSChuck Lever DEFINE_ERROR_EVENT(chunk); 164698895edbSChuck Lever 1647bd2abef3SChuck Lever /** 1648bd2abef3SChuck Lever ** Server-side RDMA API events 1649bd2abef3SChuck Lever **/ 1650bd2abef3SChuck Lever 1651832b2cb9SChuck Lever DECLARE_EVENT_CLASS(svcrdma_dma_map_class, 1652bd2abef3SChuck Lever TP_PROTO( 1653bd2abef3SChuck Lever const struct svcxprt_rdma *rdma, 1654832b2cb9SChuck Lever u64 dma_addr, 1655832b2cb9SChuck Lever u32 length 1656bd2abef3SChuck Lever ), 1657bd2abef3SChuck Lever 1658832b2cb9SChuck Lever TP_ARGS(rdma, dma_addr, length), 1659bd2abef3SChuck Lever 1660bd2abef3SChuck Lever TP_STRUCT__entry( 1661832b2cb9SChuck Lever __field(u64, dma_addr) 1662832b2cb9SChuck Lever __field(u32, length) 1663bd2abef3SChuck Lever __string(device, rdma->sc_cm_id->device->name) 1664bd2abef3SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1665bd2abef3SChuck Lever ), 1666bd2abef3SChuck Lever 1667bd2abef3SChuck Lever TP_fast_assign( 1668832b2cb9SChuck Lever __entry->dma_addr = dma_addr; 1669832b2cb9SChuck Lever __entry->length = length; 1670bd2abef3SChuck Lever __assign_str(device, rdma->sc_cm_id->device->name); 1671bd2abef3SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1672bd2abef3SChuck Lever ), 1673bd2abef3SChuck Lever 1674832b2cb9SChuck Lever TP_printk("addr=%s device=%s dma_addr=%llu length=%u", 1675832b2cb9SChuck Lever __get_str(addr), __get_str(device), 1676832b2cb9SChuck Lever __entry->dma_addr, __entry->length 1677bd2abef3SChuck Lever ) 1678bd2abef3SChuck Lever ); 1679bd2abef3SChuck Lever 1680832b2cb9SChuck Lever #define DEFINE_SVC_DMA_EVENT(name) \ 1681832b2cb9SChuck Lever DEFINE_EVENT(svcrdma_dma_map_class, svcrdma_##name, \ 1682832b2cb9SChuck Lever TP_PROTO( \ 1683832b2cb9SChuck Lever const struct svcxprt_rdma *rdma,\ 1684832b2cb9SChuck Lever u64 dma_addr, \ 1685832b2cb9SChuck Lever u32 length \ 1686832b2cb9SChuck Lever ), \ 1687832b2cb9SChuck Lever TP_ARGS(rdma, dma_addr, length)) 1688832b2cb9SChuck Lever 1689832b2cb9SChuck Lever DEFINE_SVC_DMA_EVENT(dma_map_page); 1690*2371bcc0SChuck Lever DEFINE_SVC_DMA_EVENT(dma_map_err); 1691832b2cb9SChuck Lever DEFINE_SVC_DMA_EVENT(dma_unmap_page); 1692832b2cb9SChuck Lever 16932abfbe7eSChuck Lever TRACE_EVENT(svcrdma_dma_map_rw_err, 1694bd2abef3SChuck Lever TP_PROTO( 1695bd2abef3SChuck Lever const struct svcxprt_rdma *rdma, 16962abfbe7eSChuck Lever unsigned int nents, 1697bd2abef3SChuck Lever int status 1698bd2abef3SChuck Lever ), 1699bd2abef3SChuck Lever 17002abfbe7eSChuck Lever TP_ARGS(rdma, nents, status), 1701bd2abef3SChuck Lever 1702bd2abef3SChuck Lever TP_STRUCT__entry( 1703bd2abef3SChuck Lever __field(int, status) 17042abfbe7eSChuck Lever __field(unsigned int, nents) 1705bd2abef3SChuck Lever __string(device, rdma->sc_cm_id->device->name) 1706bd2abef3SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1707bd2abef3SChuck Lever ), 1708bd2abef3SChuck Lever 1709bd2abef3SChuck Lever TP_fast_assign( 1710bd2abef3SChuck Lever __entry->status = status; 17112abfbe7eSChuck Lever __entry->nents = nents; 1712bd2abef3SChuck Lever __assign_str(device, rdma->sc_cm_id->device->name); 1713bd2abef3SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1714bd2abef3SChuck Lever ), 1715bd2abef3SChuck Lever 17162abfbe7eSChuck Lever TP_printk("addr=%s device=%s nents=%u status=%d", 17172abfbe7eSChuck Lever __get_str(addr), __get_str(device), __entry->nents, 17182abfbe7eSChuck Lever __entry->status 1719bd2abef3SChuck Lever ) 1720bd2abef3SChuck Lever ); 1721bd2abef3SChuck Lever 1722f4e53e1cSChuck Lever TRACE_EVENT(svcrdma_no_rwctx_err, 1723f4e53e1cSChuck Lever TP_PROTO( 1724f4e53e1cSChuck Lever const struct svcxprt_rdma *rdma, 1725f4e53e1cSChuck Lever unsigned int num_sges 1726f4e53e1cSChuck Lever ), 1727f4e53e1cSChuck Lever 1728f4e53e1cSChuck Lever TP_ARGS(rdma, num_sges), 1729f4e53e1cSChuck Lever 1730f4e53e1cSChuck Lever TP_STRUCT__entry( 1731f4e53e1cSChuck Lever __field(unsigned int, num_sges) 1732f4e53e1cSChuck Lever __string(device, rdma->sc_cm_id->device->name) 1733f4e53e1cSChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1734f4e53e1cSChuck Lever ), 1735f4e53e1cSChuck Lever 1736f4e53e1cSChuck Lever TP_fast_assign( 1737f4e53e1cSChuck Lever __entry->num_sges = num_sges; 1738f4e53e1cSChuck Lever __assign_str(device, rdma->sc_cm_id->device->name); 1739f4e53e1cSChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1740f4e53e1cSChuck Lever ), 1741f4e53e1cSChuck Lever 1742f4e53e1cSChuck Lever TP_printk("addr=%s device=%s num_sges=%d", 1743f4e53e1cSChuck Lever __get_str(addr), __get_str(device), __entry->num_sges 1744f4e53e1cSChuck Lever ) 1745f4e53e1cSChuck Lever ); 1746f4e53e1cSChuck Lever 17479d200638SChuck Lever TRACE_EVENT(svcrdma_page_overrun_err, 17489d200638SChuck Lever TP_PROTO( 17499d200638SChuck Lever const struct svcxprt_rdma *rdma, 17509d200638SChuck Lever const struct svc_rqst *rqst, 17519d200638SChuck Lever unsigned int pageno 17529d200638SChuck Lever ), 17539d200638SChuck Lever 17549d200638SChuck Lever TP_ARGS(rdma, rqst, pageno), 17559d200638SChuck Lever 17569d200638SChuck Lever TP_STRUCT__entry( 17579d200638SChuck Lever __field(unsigned int, pageno) 17589d200638SChuck Lever __field(u32, xid) 17599d200638SChuck Lever __string(device, rdma->sc_cm_id->device->name) 17609d200638SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 17619d200638SChuck Lever ), 17629d200638SChuck Lever 17639d200638SChuck Lever TP_fast_assign( 17649d200638SChuck Lever __entry->pageno = pageno; 17659d200638SChuck Lever __entry->xid = __be32_to_cpu(rqst->rq_xid); 17669d200638SChuck Lever __assign_str(device, rdma->sc_cm_id->device->name); 17679d200638SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 17689d200638SChuck Lever ), 17699d200638SChuck Lever 17709d200638SChuck Lever TP_printk("addr=%s device=%s xid=0x%08x pageno=%u", __get_str(addr), 17719d200638SChuck Lever __get_str(device), __entry->xid, __entry->pageno 17729d200638SChuck Lever ) 17739d200638SChuck Lever ); 17749d200638SChuck Lever 1775dbc17acdSChuck Lever TRACE_EVENT(svcrdma_small_wrch_err, 1776dbc17acdSChuck Lever TP_PROTO( 1777dbc17acdSChuck Lever const struct svcxprt_rdma *rdma, 1778dbc17acdSChuck Lever unsigned int remaining, 1779dbc17acdSChuck Lever unsigned int seg_no, 1780dbc17acdSChuck Lever unsigned int num_segs 1781dbc17acdSChuck Lever ), 1782dbc17acdSChuck Lever 1783dbc17acdSChuck Lever TP_ARGS(rdma, remaining, seg_no, num_segs), 1784dbc17acdSChuck Lever 1785dbc17acdSChuck Lever TP_STRUCT__entry( 1786dbc17acdSChuck Lever __field(unsigned int, remaining) 1787dbc17acdSChuck Lever __field(unsigned int, seg_no) 1788dbc17acdSChuck Lever __field(unsigned int, num_segs) 1789dbc17acdSChuck Lever __string(device, rdma->sc_cm_id->device->name) 1790dbc17acdSChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1791dbc17acdSChuck Lever ), 1792dbc17acdSChuck Lever 1793dbc17acdSChuck Lever TP_fast_assign( 1794dbc17acdSChuck Lever __entry->remaining = remaining; 1795dbc17acdSChuck Lever __entry->seg_no = seg_no; 1796dbc17acdSChuck Lever __entry->num_segs = num_segs; 1797dbc17acdSChuck Lever __assign_str(device, rdma->sc_cm_id->device->name); 1798dbc17acdSChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1799dbc17acdSChuck Lever ), 1800dbc17acdSChuck Lever 1801dbc17acdSChuck Lever TP_printk("addr=%s device=%s remaining=%u seg_no=%u num_segs=%u", 1802dbc17acdSChuck Lever __get_str(addr), __get_str(device), __entry->remaining, 1803dbc17acdSChuck Lever __entry->seg_no, __entry->num_segs 1804dbc17acdSChuck Lever ) 1805dbc17acdSChuck Lever ); 1806dbc17acdSChuck Lever 18070dabe948SChuck Lever TRACE_EVENT(svcrdma_send_pullup, 18080dabe948SChuck Lever TP_PROTO( 18099d0b09d5SChuck Lever const struct svc_rdma_send_ctxt *ctxt, 18109d0b09d5SChuck Lever unsigned int msglen 18110dabe948SChuck Lever ), 18120dabe948SChuck Lever 18139d0b09d5SChuck Lever TP_ARGS(ctxt, msglen), 18140dabe948SChuck Lever 18150dabe948SChuck Lever TP_STRUCT__entry( 18169d0b09d5SChuck Lever __field(u32, cq_id) 18179d0b09d5SChuck Lever __field(int, completion_id) 18189d0b09d5SChuck Lever __field(unsigned int, hdrlen) 18199d0b09d5SChuck Lever __field(unsigned int, msglen) 18200dabe948SChuck Lever ), 18210dabe948SChuck Lever 18220dabe948SChuck Lever TP_fast_assign( 18239d0b09d5SChuck Lever __entry->cq_id = ctxt->sc_cid.ci_queue_id; 18249d0b09d5SChuck Lever __entry->completion_id = ctxt->sc_cid.ci_completion_id; 18259d0b09d5SChuck Lever __entry->hdrlen = ctxt->sc_hdrbuf.len, 18269d0b09d5SChuck Lever __entry->msglen = msglen; 18270dabe948SChuck Lever ), 18280dabe948SChuck Lever 18299d0b09d5SChuck Lever TP_printk("cq_id=%u cid=%d hdr=%u msg=%u (total %u)", 18309d0b09d5SChuck Lever __entry->cq_id, __entry->completion_id, 18319d0b09d5SChuck Lever __entry->hdrlen, __entry->msglen, 18329d0b09d5SChuck Lever __entry->hdrlen + __entry->msglen) 18330dabe948SChuck Lever ); 18340dabe948SChuck Lever 18353f8f25c6SChuck Lever TRACE_EVENT(svcrdma_send_err, 1836bd2abef3SChuck Lever TP_PROTO( 1837bd2abef3SChuck Lever const struct svc_rqst *rqst, 1838bd2abef3SChuck Lever int status 1839bd2abef3SChuck Lever ), 1840bd2abef3SChuck Lever 1841bd2abef3SChuck Lever TP_ARGS(rqst, status), 1842bd2abef3SChuck Lever 1843bd2abef3SChuck Lever TP_STRUCT__entry( 1844bd2abef3SChuck Lever __field(int, status) 1845bd2abef3SChuck Lever __field(u32, xid) 1846bd2abef3SChuck Lever __string(addr, rqst->rq_xprt->xpt_remotebuf) 1847bd2abef3SChuck Lever ), 1848bd2abef3SChuck Lever 1849bd2abef3SChuck Lever TP_fast_assign( 1850bd2abef3SChuck Lever __entry->status = status; 1851bd2abef3SChuck Lever __entry->xid = __be32_to_cpu(rqst->rq_xid); 1852bd2abef3SChuck Lever __assign_str(addr, rqst->rq_xprt->xpt_remotebuf); 1853bd2abef3SChuck Lever ), 1854bd2abef3SChuck Lever 18553f8f25c6SChuck Lever TP_printk("addr=%s xid=0x%08x status=%d", __get_str(addr), 1856bd2abef3SChuck Lever __entry->xid, __entry->status 1857bd2abef3SChuck Lever ) 1858bd2abef3SChuck Lever ); 1859bd2abef3SChuck Lever 1860bd2abef3SChuck Lever TRACE_EVENT(svcrdma_post_send, 1861bd2abef3SChuck Lever TP_PROTO( 186217f70f8dSChuck Lever const struct svc_rdma_send_ctxt *ctxt 1863bd2abef3SChuck Lever ), 1864bd2abef3SChuck Lever 186517f70f8dSChuck Lever TP_ARGS(ctxt), 1866bd2abef3SChuck Lever 1867bd2abef3SChuck Lever TP_STRUCT__entry( 186817f70f8dSChuck Lever __field(u32, cq_id) 186917f70f8dSChuck Lever __field(int, completion_id) 1870bd2abef3SChuck Lever __field(unsigned int, num_sge) 1871bd2abef3SChuck Lever __field(u32, inv_rkey) 1872bd2abef3SChuck Lever ), 1873bd2abef3SChuck Lever 1874bd2abef3SChuck Lever TP_fast_assign( 187517f70f8dSChuck Lever const struct ib_send_wr *wr = &ctxt->sc_send_wr; 187617f70f8dSChuck Lever 187717f70f8dSChuck Lever __entry->cq_id = ctxt->sc_cid.ci_queue_id; 187817f70f8dSChuck Lever __entry->completion_id = ctxt->sc_cid.ci_completion_id; 1879bd2abef3SChuck Lever __entry->num_sge = wr->num_sge; 1880bd2abef3SChuck Lever __entry->inv_rkey = (wr->opcode == IB_WR_SEND_WITH_INV) ? 1881bd2abef3SChuck Lever wr->ex.invalidate_rkey : 0; 1882bd2abef3SChuck Lever ), 1883bd2abef3SChuck Lever 188417f70f8dSChuck Lever TP_printk("cq_id=%u cid=%d num_sge=%u inv_rkey=0x%08x", 188517f70f8dSChuck Lever __entry->cq_id, __entry->completion_id, 188617f70f8dSChuck Lever __entry->num_sge, __entry->inv_rkey 1887bd2abef3SChuck Lever ) 1888bd2abef3SChuck Lever ); 1889bd2abef3SChuck Lever 18903ac56c2fSChuck Lever DEFINE_COMPLETION_EVENT(svcrdma_wc_send); 1891bd2abef3SChuck Lever 1892bd2abef3SChuck Lever TRACE_EVENT(svcrdma_post_recv, 1893bd2abef3SChuck Lever TP_PROTO( 18949b3bcf8cSChuck Lever const struct svc_rdma_recv_ctxt *ctxt 1895bd2abef3SChuck Lever ), 1896bd2abef3SChuck Lever 18979b3bcf8cSChuck Lever TP_ARGS(ctxt), 1898bd2abef3SChuck Lever 1899bd2abef3SChuck Lever TP_STRUCT__entry( 19009b3bcf8cSChuck Lever __field(u32, cq_id) 19019b3bcf8cSChuck Lever __field(int, completion_id) 1902bd2abef3SChuck Lever ), 1903bd2abef3SChuck Lever 1904bd2abef3SChuck Lever TP_fast_assign( 19059b3bcf8cSChuck Lever __entry->cq_id = ctxt->rc_cid.ci_queue_id; 19069b3bcf8cSChuck Lever __entry->completion_id = ctxt->rc_cid.ci_completion_id; 1907bd2abef3SChuck Lever ), 1908bd2abef3SChuck Lever 19099b3bcf8cSChuck Lever TP_printk("cq.id=%d cid=%d", 19109b3bcf8cSChuck Lever __entry->cq_id, __entry->completion_id 1911bd2abef3SChuck Lever ) 1912bd2abef3SChuck Lever ); 1913bd2abef3SChuck Lever 19149b3bcf8cSChuck Lever DEFINE_COMPLETION_EVENT(svcrdma_wc_receive); 19159b3bcf8cSChuck Lever 19169b3bcf8cSChuck Lever TRACE_EVENT(svcrdma_rq_post_err, 1917bd2abef3SChuck Lever TP_PROTO( 19189b3bcf8cSChuck Lever const struct svcxprt_rdma *rdma, 19199b3bcf8cSChuck Lever int status 1920bd2abef3SChuck Lever ), 1921bd2abef3SChuck Lever 19229b3bcf8cSChuck Lever TP_ARGS(rdma, status), 1923bd2abef3SChuck Lever 1924bd2abef3SChuck Lever TP_STRUCT__entry( 19259b3bcf8cSChuck Lever __field(int, status) 19269b3bcf8cSChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1927bd2abef3SChuck Lever ), 1928bd2abef3SChuck Lever 1929bd2abef3SChuck Lever TP_fast_assign( 19309b3bcf8cSChuck Lever __entry->status = status; 19319b3bcf8cSChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1932bd2abef3SChuck Lever ), 1933bd2abef3SChuck Lever 19349b3bcf8cSChuck Lever TP_printk("addr=%s status=%d", 19359b3bcf8cSChuck Lever __get_str(addr), __entry->status 1936bd2abef3SChuck Lever ) 1937bd2abef3SChuck Lever ); 1938bd2abef3SChuck Lever 19396787f0beSChuck Lever TRACE_EVENT(svcrdma_post_chunk, 1940bd2abef3SChuck Lever TP_PROTO( 19416787f0beSChuck Lever const struct rpc_rdma_cid *cid, 1942e28b4fc6SChuck Lever int sqecount 1943bd2abef3SChuck Lever ), 1944bd2abef3SChuck Lever 19456787f0beSChuck Lever TP_ARGS(cid, sqecount), 1946bd2abef3SChuck Lever 1947bd2abef3SChuck Lever TP_STRUCT__entry( 19486787f0beSChuck Lever __field(u32, cq_id) 19496787f0beSChuck Lever __field(int, completion_id) 1950bd2abef3SChuck Lever __field(int, sqecount) 1951bd2abef3SChuck Lever ), 1952bd2abef3SChuck Lever 1953bd2abef3SChuck Lever TP_fast_assign( 19546787f0beSChuck Lever __entry->cq_id = cid->ci_queue_id; 19556787f0beSChuck Lever __entry->completion_id = cid->ci_completion_id; 1956bd2abef3SChuck Lever __entry->sqecount = sqecount; 1957bd2abef3SChuck Lever ), 1958bd2abef3SChuck Lever 19596787f0beSChuck Lever TP_printk("cq.id=%u cid=%d sqecount=%d", 19606787f0beSChuck Lever __entry->cq_id, __entry->completion_id, 19616787f0beSChuck Lever __entry->sqecount 1962bd2abef3SChuck Lever ) 1963bd2abef3SChuck Lever ); 1964bd2abef3SChuck Lever 19656787f0beSChuck Lever DEFINE_COMPLETION_EVENT(svcrdma_wc_read); 19666787f0beSChuck Lever DEFINE_COMPLETION_EVENT(svcrdma_wc_write); 1967bd2abef3SChuck Lever 1968bd2abef3SChuck Lever TRACE_EVENT(svcrdma_qp_error, 1969bd2abef3SChuck Lever TP_PROTO( 1970bd2abef3SChuck Lever const struct ib_event *event, 1971bd2abef3SChuck Lever const struct sockaddr *sap 1972bd2abef3SChuck Lever ), 1973bd2abef3SChuck Lever 1974bd2abef3SChuck Lever TP_ARGS(event, sap), 1975bd2abef3SChuck Lever 1976bd2abef3SChuck Lever TP_STRUCT__entry( 1977bd2abef3SChuck Lever __field(unsigned int, event) 1978bd2abef3SChuck Lever __string(device, event->device->name) 1979bd2abef3SChuck Lever __array(__u8, addr, INET6_ADDRSTRLEN + 10) 1980bd2abef3SChuck Lever ), 1981bd2abef3SChuck Lever 1982bd2abef3SChuck Lever TP_fast_assign( 1983bd2abef3SChuck Lever __entry->event = event->event; 1984bd2abef3SChuck Lever __assign_str(device, event->device->name); 1985bd2abef3SChuck Lever snprintf(__entry->addr, sizeof(__entry->addr) - 1, 1986bd2abef3SChuck Lever "%pISpc", sap); 1987bd2abef3SChuck Lever ), 1988bd2abef3SChuck Lever 1989bd2abef3SChuck Lever TP_printk("addr=%s dev=%s event=%s (%u)", 1990bd2abef3SChuck Lever __entry->addr, __get_str(device), 1991bd2abef3SChuck Lever rdma_show_ib_event(__entry->event), __entry->event 1992bd2abef3SChuck Lever ) 1993bd2abef3SChuck Lever ); 1994bd2abef3SChuck Lever 1995bd2abef3SChuck Lever DECLARE_EVENT_CLASS(svcrdma_sendqueue_event, 1996bd2abef3SChuck Lever TP_PROTO( 1997bd2abef3SChuck Lever const struct svcxprt_rdma *rdma 1998bd2abef3SChuck Lever ), 1999bd2abef3SChuck Lever 2000bd2abef3SChuck Lever TP_ARGS(rdma), 2001bd2abef3SChuck Lever 2002bd2abef3SChuck Lever TP_STRUCT__entry( 2003bd2abef3SChuck Lever __field(int, avail) 2004bd2abef3SChuck Lever __field(int, depth) 2005bd2abef3SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 2006bd2abef3SChuck Lever ), 2007bd2abef3SChuck Lever 2008bd2abef3SChuck Lever TP_fast_assign( 2009bd2abef3SChuck Lever __entry->avail = atomic_read(&rdma->sc_sq_avail); 2010bd2abef3SChuck Lever __entry->depth = rdma->sc_sq_depth; 2011bd2abef3SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 2012bd2abef3SChuck Lever ), 2013bd2abef3SChuck Lever 2014bd2abef3SChuck Lever TP_printk("addr=%s sc_sq_avail=%d/%d", 2015bd2abef3SChuck Lever __get_str(addr), __entry->avail, __entry->depth 2016bd2abef3SChuck Lever ) 2017bd2abef3SChuck Lever ); 2018bd2abef3SChuck Lever 2019bd2abef3SChuck Lever #define DEFINE_SQ_EVENT(name) \ 2020bd2abef3SChuck Lever DEFINE_EVENT(svcrdma_sendqueue_event, svcrdma_sq_##name,\ 2021bd2abef3SChuck Lever TP_PROTO( \ 2022bd2abef3SChuck Lever const struct svcxprt_rdma *rdma \ 2023bd2abef3SChuck Lever ), \ 2024bd2abef3SChuck Lever TP_ARGS(rdma)) 2025bd2abef3SChuck Lever 2026bd2abef3SChuck Lever DEFINE_SQ_EVENT(full); 2027bd2abef3SChuck Lever DEFINE_SQ_EVENT(retry); 2028bd2abef3SChuck Lever 2029e28b4fc6SChuck Lever TRACE_EVENT(svcrdma_sq_post_err, 2030e28b4fc6SChuck Lever TP_PROTO( 2031e28b4fc6SChuck Lever const struct svcxprt_rdma *rdma, 2032e28b4fc6SChuck Lever int status 2033e28b4fc6SChuck Lever ), 2034e28b4fc6SChuck Lever 2035e28b4fc6SChuck Lever TP_ARGS(rdma, status), 2036e28b4fc6SChuck Lever 2037e28b4fc6SChuck Lever TP_STRUCT__entry( 2038e28b4fc6SChuck Lever __field(int, avail) 2039e28b4fc6SChuck Lever __field(int, depth) 2040e28b4fc6SChuck Lever __field(int, status) 2041e28b4fc6SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 2042e28b4fc6SChuck Lever ), 2043e28b4fc6SChuck Lever 2044e28b4fc6SChuck Lever TP_fast_assign( 2045e28b4fc6SChuck Lever __entry->avail = atomic_read(&rdma->sc_sq_avail); 2046e28b4fc6SChuck Lever __entry->depth = rdma->sc_sq_depth; 2047e28b4fc6SChuck Lever __entry->status = status; 2048e28b4fc6SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 2049e28b4fc6SChuck Lever ), 2050e28b4fc6SChuck Lever 2051e28b4fc6SChuck Lever TP_printk("addr=%s sc_sq_avail=%d/%d status=%d", 2052e28b4fc6SChuck Lever __get_str(addr), __entry->avail, __entry->depth, 2053e28b4fc6SChuck Lever __entry->status 2054e28b4fc6SChuck Lever ) 2055e28b4fc6SChuck Lever ); 2056e28b4fc6SChuck Lever 2057e48f083eSChuck Lever #endif /* _TRACE_RPCRDMA_H */ 2058e48f083eSChuck Lever 2059e48f083eSChuck Lever #include <trace/define_trace.h> 2060