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> 16e48f083eSChuck Lever #include <trace/events/rdma.h> 17e48f083eSChuck Lever 18ab03eff5SChuck Lever /** 19b4a7f91cSChuck Lever ** Event classes 20b4a7f91cSChuck Lever **/ 21b4a7f91cSChuck Lever 22f7bd657bSChuck Lever DECLARE_EVENT_CLASS(rpcrdma_completion_class, 23f7bd657bSChuck Lever TP_PROTO( 24f7bd657bSChuck Lever const struct ib_wc *wc, 25f7bd657bSChuck Lever const struct rpc_rdma_cid *cid 26f7bd657bSChuck Lever ), 27f7bd657bSChuck Lever 28f7bd657bSChuck Lever TP_ARGS(wc, cid), 29f7bd657bSChuck Lever 30f7bd657bSChuck Lever TP_STRUCT__entry( 31f7bd657bSChuck Lever __field(u32, cq_id) 32f7bd657bSChuck Lever __field(int, completion_id) 33f7bd657bSChuck Lever __field(unsigned long, status) 34f7bd657bSChuck Lever __field(unsigned int, vendor_err) 35f7bd657bSChuck Lever ), 36f7bd657bSChuck Lever 37f7bd657bSChuck Lever TP_fast_assign( 38f7bd657bSChuck Lever __entry->cq_id = cid->ci_queue_id; 39f7bd657bSChuck Lever __entry->completion_id = cid->ci_completion_id; 40f7bd657bSChuck Lever __entry->status = wc->status; 41f7bd657bSChuck Lever if (wc->status) 42f7bd657bSChuck Lever __entry->vendor_err = wc->vendor_err; 43f7bd657bSChuck Lever else 44f7bd657bSChuck Lever __entry->vendor_err = 0; 45f7bd657bSChuck Lever ), 46f7bd657bSChuck Lever 47f7bd657bSChuck Lever TP_printk("cq.id=%u cid=%d status=%s (%lu/0x%x)", 48f7bd657bSChuck Lever __entry->cq_id, __entry->completion_id, 49f7bd657bSChuck Lever rdma_show_wc_status(__entry->status), 50f7bd657bSChuck Lever __entry->status, __entry->vendor_err 51f7bd657bSChuck Lever ) 52f7bd657bSChuck Lever ); 53f7bd657bSChuck Lever 54f7bd657bSChuck Lever #define DEFINE_COMPLETION_EVENT(name) \ 55f7bd657bSChuck Lever DEFINE_EVENT(rpcrdma_completion_class, name, \ 56f7bd657bSChuck Lever TP_PROTO( \ 57f7bd657bSChuck Lever const struct ib_wc *wc, \ 58f7bd657bSChuck Lever const struct rpc_rdma_cid *cid \ 59f7bd657bSChuck Lever ), \ 60f7bd657bSChuck Lever TP_ARGS(wc, cid)) 61f7bd657bSChuck Lever 62f7bd657bSChuck Lever DEFINE_COMPLETION_EVENT(dummy); 63f7bd657bSChuck Lever 64b4a7f91cSChuck Lever DECLARE_EVENT_CLASS(xprtrdma_reply_event, 65b4a7f91cSChuck Lever TP_PROTO( 66b4a7f91cSChuck Lever const struct rpcrdma_rep *rep 67b4a7f91cSChuck Lever ), 68b4a7f91cSChuck Lever 69b4a7f91cSChuck Lever TP_ARGS(rep), 70b4a7f91cSChuck Lever 71b4a7f91cSChuck Lever TP_STRUCT__entry( 72b4a7f91cSChuck Lever __field(const void *, rep) 73b4a7f91cSChuck Lever __field(const void *, r_xprt) 74b4a7f91cSChuck Lever __field(u32, xid) 75b4a7f91cSChuck Lever __field(u32, version) 76b4a7f91cSChuck Lever __field(u32, proc) 77b4a7f91cSChuck Lever ), 78b4a7f91cSChuck Lever 79b4a7f91cSChuck Lever TP_fast_assign( 80b4a7f91cSChuck Lever __entry->rep = rep; 81b4a7f91cSChuck Lever __entry->r_xprt = rep->rr_rxprt; 82b4a7f91cSChuck Lever __entry->xid = be32_to_cpu(rep->rr_xid); 83b4a7f91cSChuck Lever __entry->version = be32_to_cpu(rep->rr_vers); 84b4a7f91cSChuck Lever __entry->proc = be32_to_cpu(rep->rr_proc); 85b4a7f91cSChuck Lever ), 86b4a7f91cSChuck Lever 87b4a7f91cSChuck Lever TP_printk("rxprt %p xid=0x%08x rep=%p: version %u proc %u", 88b4a7f91cSChuck Lever __entry->r_xprt, __entry->xid, __entry->rep, 89b4a7f91cSChuck Lever __entry->version, __entry->proc 90b4a7f91cSChuck Lever ) 91b4a7f91cSChuck Lever ); 92b4a7f91cSChuck Lever 93b4a7f91cSChuck Lever #define DEFINE_REPLY_EVENT(name) \ 94b4a7f91cSChuck Lever DEFINE_EVENT(xprtrdma_reply_event, name, \ 95b4a7f91cSChuck Lever TP_PROTO( \ 96b4a7f91cSChuck Lever const struct rpcrdma_rep *rep \ 97b4a7f91cSChuck Lever ), \ 98b4a7f91cSChuck Lever TP_ARGS(rep)) 99b4a7f91cSChuck Lever 1001c443effSChuck Lever DECLARE_EVENT_CLASS(xprtrdma_rxprt, 1011c443effSChuck Lever TP_PROTO( 1021c443effSChuck Lever const struct rpcrdma_xprt *r_xprt 1031c443effSChuck Lever ), 1041c443effSChuck Lever 1051c443effSChuck Lever TP_ARGS(r_xprt), 1061c443effSChuck Lever 1071c443effSChuck Lever TP_STRUCT__entry( 1081c443effSChuck Lever __field(const void *, r_xprt) 1091c443effSChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 1101c443effSChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 1111c443effSChuck Lever ), 1121c443effSChuck Lever 1131c443effSChuck Lever TP_fast_assign( 1141c443effSChuck Lever __entry->r_xprt = r_xprt; 1151c443effSChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 1161c443effSChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 1171c443effSChuck Lever ), 1181c443effSChuck Lever 1191c443effSChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p", 1201c443effSChuck Lever __get_str(addr), __get_str(port), __entry->r_xprt 1211c443effSChuck Lever ) 1221c443effSChuck Lever ); 1231c443effSChuck Lever 1241c443effSChuck Lever #define DEFINE_RXPRT_EVENT(name) \ 1251c443effSChuck Lever DEFINE_EVENT(xprtrdma_rxprt, name, \ 1261c443effSChuck Lever TP_PROTO( \ 1271c443effSChuck Lever const struct rpcrdma_xprt *r_xprt \ 1281c443effSChuck Lever ), \ 1291c443effSChuck Lever TP_ARGS(r_xprt)) 1301c443effSChuck Lever 1317b020f17SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_connect_class, 1327b020f17SChuck Lever TP_PROTO( 1337b020f17SChuck Lever const struct rpcrdma_xprt *r_xprt, 1347b020f17SChuck Lever int rc 1357b020f17SChuck Lever ), 1367b020f17SChuck Lever 1377b020f17SChuck Lever TP_ARGS(r_xprt, rc), 1387b020f17SChuck Lever 1397b020f17SChuck Lever TP_STRUCT__entry( 1407b020f17SChuck Lever __field(const void *, r_xprt) 1417b020f17SChuck Lever __field(int, rc) 1427b020f17SChuck Lever __field(int, connect_status) 1437b020f17SChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 1447b020f17SChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 1457b020f17SChuck Lever ), 1467b020f17SChuck Lever 1477b020f17SChuck Lever TP_fast_assign( 1487b020f17SChuck Lever __entry->r_xprt = r_xprt; 1497b020f17SChuck Lever __entry->rc = rc; 150e28ce900SChuck Lever __entry->connect_status = r_xprt->rx_ep->re_connect_status; 1517b020f17SChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 1527b020f17SChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 1537b020f17SChuck Lever ), 1547b020f17SChuck Lever 155d6ccebf9SChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: rc=%d connection status=%d", 1567b020f17SChuck Lever __get_str(addr), __get_str(port), __entry->r_xprt, 1577b020f17SChuck Lever __entry->rc, __entry->connect_status 1587b020f17SChuck Lever ) 1597b020f17SChuck Lever ); 1607b020f17SChuck Lever 1617b020f17SChuck Lever #define DEFINE_CONN_EVENT(name) \ 1627b020f17SChuck Lever DEFINE_EVENT(xprtrdma_connect_class, xprtrdma_##name, \ 1637b020f17SChuck Lever TP_PROTO( \ 1647b020f17SChuck Lever const struct rpcrdma_xprt *r_xprt, \ 1657b020f17SChuck Lever int rc \ 1667b020f17SChuck Lever ), \ 1677b020f17SChuck Lever TP_ARGS(r_xprt, rc)) 1687b020f17SChuck Lever 16958f10ad4SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_rdch_event, 17058f10ad4SChuck Lever TP_PROTO( 17158f10ad4SChuck Lever const struct rpc_task *task, 17258f10ad4SChuck Lever unsigned int pos, 17358f10ad4SChuck Lever struct rpcrdma_mr *mr, 17458f10ad4SChuck Lever int nsegs 17558f10ad4SChuck Lever ), 17658f10ad4SChuck Lever 17758f10ad4SChuck Lever TP_ARGS(task, pos, mr, nsegs), 17858f10ad4SChuck Lever 17958f10ad4SChuck Lever TP_STRUCT__entry( 18058f10ad4SChuck Lever __field(unsigned int, task_id) 18158f10ad4SChuck Lever __field(unsigned int, client_id) 18258f10ad4SChuck Lever __field(unsigned int, pos) 18358f10ad4SChuck Lever __field(int, nents) 18458f10ad4SChuck Lever __field(u32, handle) 18558f10ad4SChuck Lever __field(u32, length) 18658f10ad4SChuck Lever __field(u64, offset) 18758f10ad4SChuck Lever __field(int, nsegs) 18858f10ad4SChuck Lever ), 18958f10ad4SChuck Lever 19058f10ad4SChuck Lever TP_fast_assign( 19158f10ad4SChuck Lever __entry->task_id = task->tk_pid; 19258f10ad4SChuck Lever __entry->client_id = task->tk_client->cl_clid; 19358f10ad4SChuck Lever __entry->pos = pos; 19458f10ad4SChuck Lever __entry->nents = mr->mr_nents; 19558f10ad4SChuck Lever __entry->handle = mr->mr_handle; 19658f10ad4SChuck Lever __entry->length = mr->mr_length; 19758f10ad4SChuck Lever __entry->offset = mr->mr_offset; 19858f10ad4SChuck Lever __entry->nsegs = nsegs; 19958f10ad4SChuck Lever ), 20058f10ad4SChuck Lever 201aba11831SChuck Lever TP_printk("task:%u@%u pos=%u %u@0x%016llx:0x%08x (%s)", 202aba11831SChuck Lever __entry->task_id, __entry->client_id, 20358f10ad4SChuck Lever __entry->pos, __entry->length, 20458f10ad4SChuck Lever (unsigned long long)__entry->offset, __entry->handle, 20558f10ad4SChuck Lever __entry->nents < __entry->nsegs ? "more" : "last" 20658f10ad4SChuck Lever ) 20758f10ad4SChuck Lever ); 20858f10ad4SChuck Lever 20958f10ad4SChuck Lever #define DEFINE_RDCH_EVENT(name) \ 210aba11831SChuck Lever DEFINE_EVENT(xprtrdma_rdch_event, xprtrdma_chunk_##name,\ 21158f10ad4SChuck Lever TP_PROTO( \ 21258f10ad4SChuck Lever const struct rpc_task *task, \ 21358f10ad4SChuck Lever unsigned int pos, \ 21458f10ad4SChuck Lever struct rpcrdma_mr *mr, \ 21558f10ad4SChuck Lever int nsegs \ 21658f10ad4SChuck Lever ), \ 21758f10ad4SChuck Lever TP_ARGS(task, pos, mr, nsegs)) 21858f10ad4SChuck Lever 21958f10ad4SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_wrch_event, 22058f10ad4SChuck Lever TP_PROTO( 22158f10ad4SChuck Lever const struct rpc_task *task, 22258f10ad4SChuck Lever struct rpcrdma_mr *mr, 22358f10ad4SChuck Lever int nsegs 22458f10ad4SChuck Lever ), 22558f10ad4SChuck Lever 22658f10ad4SChuck Lever TP_ARGS(task, mr, nsegs), 22758f10ad4SChuck Lever 22858f10ad4SChuck Lever TP_STRUCT__entry( 22958f10ad4SChuck Lever __field(unsigned int, task_id) 23058f10ad4SChuck Lever __field(unsigned int, client_id) 23158f10ad4SChuck Lever __field(int, nents) 23258f10ad4SChuck Lever __field(u32, handle) 23358f10ad4SChuck Lever __field(u32, length) 23458f10ad4SChuck Lever __field(u64, offset) 23558f10ad4SChuck Lever __field(int, nsegs) 23658f10ad4SChuck Lever ), 23758f10ad4SChuck Lever 23858f10ad4SChuck Lever TP_fast_assign( 23958f10ad4SChuck Lever __entry->task_id = task->tk_pid; 24058f10ad4SChuck Lever __entry->client_id = task->tk_client->cl_clid; 24158f10ad4SChuck Lever __entry->nents = mr->mr_nents; 24258f10ad4SChuck Lever __entry->handle = mr->mr_handle; 24358f10ad4SChuck Lever __entry->length = mr->mr_length; 24458f10ad4SChuck Lever __entry->offset = mr->mr_offset; 24558f10ad4SChuck Lever __entry->nsegs = nsegs; 24658f10ad4SChuck Lever ), 24758f10ad4SChuck Lever 248aba11831SChuck Lever TP_printk("task:%u@%u %u@0x%016llx:0x%08x (%s)", 249aba11831SChuck Lever __entry->task_id, __entry->client_id, 25058f10ad4SChuck Lever __entry->length, (unsigned long long)__entry->offset, 25158f10ad4SChuck Lever __entry->handle, 25258f10ad4SChuck Lever __entry->nents < __entry->nsegs ? "more" : "last" 25358f10ad4SChuck Lever ) 25458f10ad4SChuck Lever ); 25558f10ad4SChuck Lever 25658f10ad4SChuck Lever #define DEFINE_WRCH_EVENT(name) \ 257aba11831SChuck Lever DEFINE_EVENT(xprtrdma_wrch_event, xprtrdma_chunk_##name,\ 25858f10ad4SChuck Lever TP_PROTO( \ 25958f10ad4SChuck Lever const struct rpc_task *task, \ 26058f10ad4SChuck Lever struct rpcrdma_mr *mr, \ 26158f10ad4SChuck Lever int nsegs \ 26258f10ad4SChuck Lever ), \ 26358f10ad4SChuck Lever TP_ARGS(task, mr, nsegs)) 26458f10ad4SChuck Lever 26558f10ad4SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_frwr_done, 26658f10ad4SChuck Lever TP_PROTO( 26758f10ad4SChuck Lever const struct ib_wc *wc, 26858f10ad4SChuck Lever const struct rpcrdma_frwr *frwr 26958f10ad4SChuck Lever ), 27058f10ad4SChuck Lever 27158f10ad4SChuck Lever TP_ARGS(wc, frwr), 27258f10ad4SChuck Lever 27358f10ad4SChuck Lever TP_STRUCT__entry( 27462a89501SChuck Lever __field(u32, mr_id) 27558f10ad4SChuck Lever __field(unsigned int, status) 27658f10ad4SChuck Lever __field(unsigned int, vendor_err) 27758f10ad4SChuck Lever ), 27858f10ad4SChuck Lever 27958f10ad4SChuck Lever TP_fast_assign( 28062a89501SChuck Lever __entry->mr_id = frwr->fr_mr->res.id; 28158f10ad4SChuck Lever __entry->status = wc->status; 28258f10ad4SChuck Lever __entry->vendor_err = __entry->status ? wc->vendor_err : 0; 28358f10ad4SChuck Lever ), 28458f10ad4SChuck Lever 28558f10ad4SChuck Lever TP_printk( 28662a89501SChuck Lever "mr.id=%u: %s (%u/0x%x)", 28762a89501SChuck Lever __entry->mr_id, rdma_show_wc_status(__entry->status), 28858f10ad4SChuck Lever __entry->status, __entry->vendor_err 28958f10ad4SChuck Lever ) 29058f10ad4SChuck Lever ); 29158f10ad4SChuck Lever 29258f10ad4SChuck Lever #define DEFINE_FRWR_DONE_EVENT(name) \ 29358f10ad4SChuck Lever DEFINE_EVENT(xprtrdma_frwr_done, name, \ 29458f10ad4SChuck Lever TP_PROTO( \ 29558f10ad4SChuck Lever const struct ib_wc *wc, \ 29658f10ad4SChuck Lever const struct rpcrdma_frwr *frwr \ 29758f10ad4SChuck Lever ), \ 29858f10ad4SChuck Lever TP_ARGS(wc, frwr)) 29958f10ad4SChuck Lever 300aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_BIDIRECTIONAL); 301aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_TO_DEVICE); 302aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_FROM_DEVICE); 303aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_NONE); 304aba11831SChuck Lever 305aba11831SChuck Lever #define xprtrdma_show_direction(x) \ 306aba11831SChuck Lever __print_symbolic(x, \ 307aba11831SChuck Lever { DMA_BIDIRECTIONAL, "BIDIR" }, \ 308aba11831SChuck Lever { DMA_TO_DEVICE, "TO_DEVICE" }, \ 309aba11831SChuck Lever { DMA_FROM_DEVICE, "FROM_DEVICE" }, \ 310aba11831SChuck Lever { DMA_NONE, "NONE" }) 311aba11831SChuck Lever 3122937fedeSChuck Lever DECLARE_EVENT_CLASS(xprtrdma_mr, 3132937fedeSChuck Lever TP_PROTO( 3142937fedeSChuck Lever const struct rpcrdma_mr *mr 3152937fedeSChuck Lever ), 3162937fedeSChuck Lever 3172937fedeSChuck Lever TP_ARGS(mr), 3182937fedeSChuck Lever 3192937fedeSChuck Lever TP_STRUCT__entry( 32062a89501SChuck Lever __field(u32, mr_id) 32162a89501SChuck Lever __field(int, nents) 3222937fedeSChuck Lever __field(u32, handle) 3232937fedeSChuck Lever __field(u32, length) 3242937fedeSChuck Lever __field(u64, offset) 325aba11831SChuck Lever __field(u32, dir) 3262937fedeSChuck Lever ), 3272937fedeSChuck Lever 3282937fedeSChuck Lever TP_fast_assign( 32962a89501SChuck Lever __entry->mr_id = mr->frwr.fr_mr->res.id; 33062a89501SChuck Lever __entry->nents = mr->mr_nents; 3312937fedeSChuck Lever __entry->handle = mr->mr_handle; 3322937fedeSChuck Lever __entry->length = mr->mr_length; 3332937fedeSChuck Lever __entry->offset = mr->mr_offset; 334aba11831SChuck Lever __entry->dir = mr->mr_dir; 3352937fedeSChuck Lever ), 3362937fedeSChuck Lever 33762a89501SChuck Lever TP_printk("mr.id=%u nents=%d %u@0x%016llx:0x%08x (%s)", 33862a89501SChuck Lever __entry->mr_id, __entry->nents, __entry->length, 339aba11831SChuck Lever (unsigned long long)__entry->offset, __entry->handle, 340aba11831SChuck Lever xprtrdma_show_direction(__entry->dir) 3412937fedeSChuck Lever ) 3422937fedeSChuck Lever ); 3432937fedeSChuck Lever 3442937fedeSChuck Lever #define DEFINE_MR_EVENT(name) \ 345d379eaa8SChuck Lever DEFINE_EVENT(xprtrdma_mr, xprtrdma_mr_##name, \ 3462937fedeSChuck Lever TP_PROTO( \ 3472937fedeSChuck Lever const struct rpcrdma_mr *mr \ 3482937fedeSChuck Lever ), \ 3492937fedeSChuck Lever TP_ARGS(mr)) 3502937fedeSChuck Lever 351fc1eb807SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_cb_event, 352fc1eb807SChuck Lever TP_PROTO( 353fc1eb807SChuck Lever const struct rpc_rqst *rqst 354fc1eb807SChuck Lever ), 355fc1eb807SChuck Lever 356fc1eb807SChuck Lever TP_ARGS(rqst), 357fc1eb807SChuck Lever 358fc1eb807SChuck Lever TP_STRUCT__entry( 359fc1eb807SChuck Lever __field(const void *, rqst) 360fc1eb807SChuck Lever __field(const void *, rep) 361fc1eb807SChuck Lever __field(const void *, req) 362fc1eb807SChuck Lever __field(u32, xid) 363fc1eb807SChuck Lever ), 364fc1eb807SChuck Lever 365fc1eb807SChuck Lever TP_fast_assign( 366fc1eb807SChuck Lever __entry->rqst = rqst; 367fc1eb807SChuck Lever __entry->req = rpcr_to_rdmar(rqst); 368fc1eb807SChuck Lever __entry->rep = rpcr_to_rdmar(rqst)->rl_reply; 369fc1eb807SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 370fc1eb807SChuck Lever ), 371fc1eb807SChuck Lever 372fc1eb807SChuck Lever TP_printk("xid=0x%08x, rqst=%p req=%p rep=%p", 373fc1eb807SChuck Lever __entry->xid, __entry->rqst, __entry->req, __entry->rep 374fc1eb807SChuck Lever ) 375fc1eb807SChuck Lever ); 376fc1eb807SChuck Lever 377fc1eb807SChuck Lever #define DEFINE_CB_EVENT(name) \ 378fc1eb807SChuck Lever DEFINE_EVENT(xprtrdma_cb_event, name, \ 379fc1eb807SChuck Lever TP_PROTO( \ 380fc1eb807SChuck Lever const struct rpc_rqst *rqst \ 381fc1eb807SChuck Lever ), \ 382fc1eb807SChuck Lever TP_ARGS(rqst)) 383fc1eb807SChuck Lever 384b4a7f91cSChuck Lever /** 385b4744e00SChuck Lever ** Connection events 386b4744e00SChuck Lever **/ 387b4744e00SChuck Lever 388f54c870dSChuck Lever TRACE_EVENT(xprtrdma_inline_thresh, 389f54c870dSChuck Lever TP_PROTO( 390745b734cSChuck Lever const struct rpcrdma_ep *ep 391f54c870dSChuck Lever ), 392f54c870dSChuck Lever 393745b734cSChuck Lever TP_ARGS(ep), 394f54c870dSChuck Lever 395f54c870dSChuck Lever TP_STRUCT__entry( 396f54c870dSChuck Lever __field(unsigned int, inline_send) 397f54c870dSChuck Lever __field(unsigned int, inline_recv) 398f54c870dSChuck Lever __field(unsigned int, max_send) 399f54c870dSChuck Lever __field(unsigned int, max_recv) 400745b734cSChuck Lever __array(unsigned char, srcaddr, sizeof(struct sockaddr_in6)) 401745b734cSChuck Lever __array(unsigned char, dstaddr, sizeof(struct sockaddr_in6)) 402f54c870dSChuck Lever ), 403f54c870dSChuck Lever 404f54c870dSChuck Lever TP_fast_assign( 405745b734cSChuck Lever const struct rdma_cm_id *id = ep->re_id; 406f54c870dSChuck Lever 40793aa8e0aSChuck Lever __entry->inline_send = ep->re_inline_send; 40893aa8e0aSChuck Lever __entry->inline_recv = ep->re_inline_recv; 40993aa8e0aSChuck Lever __entry->max_send = ep->re_max_inline_send; 41093aa8e0aSChuck Lever __entry->max_recv = ep->re_max_inline_recv; 411745b734cSChuck Lever memcpy(__entry->srcaddr, &id->route.addr.src_addr, 412745b734cSChuck Lever sizeof(struct sockaddr_in6)); 413745b734cSChuck Lever memcpy(__entry->dstaddr, &id->route.addr.dst_addr, 414745b734cSChuck Lever sizeof(struct sockaddr_in6)); 415f54c870dSChuck Lever ), 416f54c870dSChuck Lever 417745b734cSChuck Lever TP_printk("%pISpc -> %pISpc neg send/recv=%u/%u, calc send/recv=%u/%u", 418745b734cSChuck Lever __entry->srcaddr, __entry->dstaddr, 419f54c870dSChuck Lever __entry->inline_send, __entry->inline_recv, 420f54c870dSChuck Lever __entry->max_send, __entry->max_recv 421f54c870dSChuck Lever ) 422f54c870dSChuck Lever ); 423f54c870dSChuck Lever 4247b020f17SChuck Lever DEFINE_CONN_EVENT(connect); 4257b020f17SChuck Lever DEFINE_CONN_EVENT(disconnect); 4267b020f17SChuck Lever 4277b020f17SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_op_inject_dsc); 428a52c23b8SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_op_setport); 4297b020f17SChuck Lever 4307b020f17SChuck Lever TRACE_EVENT(xprtrdma_op_connect, 431b4744e00SChuck Lever TP_PROTO( 432b4744e00SChuck Lever const struct rpcrdma_xprt *r_xprt, 4337b020f17SChuck Lever unsigned long delay 434b4744e00SChuck Lever ), 435b4744e00SChuck Lever 4367b020f17SChuck Lever TP_ARGS(r_xprt, delay), 437b4744e00SChuck Lever 438b4744e00SChuck Lever TP_STRUCT__entry( 439b4744e00SChuck Lever __field(const void *, r_xprt) 4407b020f17SChuck Lever __field(unsigned long, delay) 441b4744e00SChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 442b4744e00SChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 443b4744e00SChuck Lever ), 444b4744e00SChuck Lever 445b4744e00SChuck Lever TP_fast_assign( 446b4744e00SChuck Lever __entry->r_xprt = r_xprt; 4477b020f17SChuck Lever __entry->delay = delay; 448b4744e00SChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 449b4744e00SChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 450b4744e00SChuck Lever ), 451b4744e00SChuck Lever 4527b020f17SChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p delay=%lu", 4537b020f17SChuck Lever __get_str(addr), __get_str(port), __entry->r_xprt, 4547b020f17SChuck Lever __entry->delay 455b4744e00SChuck Lever ) 456b4744e00SChuck Lever ); 457b4744e00SChuck Lever 458b4744e00SChuck Lever 459675dd90aSChuck Lever TRACE_EVENT(xprtrdma_op_set_cto, 460675dd90aSChuck Lever TP_PROTO( 461675dd90aSChuck Lever const struct rpcrdma_xprt *r_xprt, 462675dd90aSChuck Lever unsigned long connect, 463675dd90aSChuck Lever unsigned long reconnect 464675dd90aSChuck Lever ), 465675dd90aSChuck Lever 466675dd90aSChuck Lever TP_ARGS(r_xprt, connect, reconnect), 467675dd90aSChuck Lever 468675dd90aSChuck Lever TP_STRUCT__entry( 469675dd90aSChuck Lever __field(const void *, r_xprt) 470675dd90aSChuck Lever __field(unsigned long, connect) 471675dd90aSChuck Lever __field(unsigned long, reconnect) 472675dd90aSChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 473675dd90aSChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 474675dd90aSChuck Lever ), 475675dd90aSChuck Lever 476675dd90aSChuck Lever TP_fast_assign( 477675dd90aSChuck Lever __entry->r_xprt = r_xprt; 478675dd90aSChuck Lever __entry->connect = connect; 479675dd90aSChuck Lever __entry->reconnect = reconnect; 480675dd90aSChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 481675dd90aSChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 482675dd90aSChuck Lever ), 483675dd90aSChuck Lever 484675dd90aSChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: connect=%lu reconnect=%lu", 485675dd90aSChuck Lever __get_str(addr), __get_str(port), __entry->r_xprt, 486675dd90aSChuck Lever __entry->connect / HZ, __entry->reconnect / HZ 487675dd90aSChuck Lever ) 488675dd90aSChuck Lever ); 489675dd90aSChuck Lever 490f9521d53SChuck Lever TRACE_EVENT(xprtrdma_qp_event, 491643cf323SChuck Lever TP_PROTO( 492745b734cSChuck Lever const struct rpcrdma_ep *ep, 493643cf323SChuck Lever const struct ib_event *event 494643cf323SChuck Lever ), 495643cf323SChuck Lever 496745b734cSChuck Lever TP_ARGS(ep, event), 497643cf323SChuck Lever 498643cf323SChuck Lever TP_STRUCT__entry( 499745b734cSChuck Lever __field(unsigned long, event) 500643cf323SChuck Lever __string(name, event->device->name) 501745b734cSChuck Lever __array(unsigned char, srcaddr, sizeof(struct sockaddr_in6)) 502745b734cSChuck Lever __array(unsigned char, dstaddr, sizeof(struct sockaddr_in6)) 503643cf323SChuck Lever ), 504643cf323SChuck Lever 505643cf323SChuck Lever TP_fast_assign( 506745b734cSChuck Lever const struct rdma_cm_id *id = ep->re_id; 507745b734cSChuck Lever 508643cf323SChuck Lever __entry->event = event->event; 509643cf323SChuck Lever __assign_str(name, event->device->name); 510745b734cSChuck Lever memcpy(__entry->srcaddr, &id->route.addr.src_addr, 511745b734cSChuck Lever sizeof(struct sockaddr_in6)); 512745b734cSChuck Lever memcpy(__entry->dstaddr, &id->route.addr.dst_addr, 513745b734cSChuck Lever sizeof(struct sockaddr_in6)); 514643cf323SChuck Lever ), 515643cf323SChuck Lever 516745b734cSChuck Lever TP_printk("%pISpc -> %pISpc device=%s %s (%lu)", 517745b734cSChuck Lever __entry->srcaddr, __entry->dstaddr, __get_str(name), 518745b734cSChuck Lever rdma_show_ib_event(__entry->event), __entry->event 519643cf323SChuck Lever ) 520643cf323SChuck Lever ); 521643cf323SChuck Lever 522b4744e00SChuck Lever /** 523ab03eff5SChuck Lever ** Call events 524ab03eff5SChuck Lever **/ 525ab03eff5SChuck Lever 5261c443effSChuck Lever TRACE_EVENT(xprtrdma_createmrs, 5271c443effSChuck Lever TP_PROTO( 5281c443effSChuck Lever const struct rpcrdma_xprt *r_xprt, 5291c443effSChuck Lever unsigned int count 5301c443effSChuck Lever ), 5311c443effSChuck Lever 5321c443effSChuck Lever TP_ARGS(r_xprt, count), 5331c443effSChuck Lever 5341c443effSChuck Lever TP_STRUCT__entry( 5351c443effSChuck Lever __field(const void *, r_xprt) 5366dc6ec9eSChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 5376dc6ec9eSChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 5381c443effSChuck Lever __field(unsigned int, count) 5391c443effSChuck Lever ), 5401c443effSChuck Lever 5411c443effSChuck Lever TP_fast_assign( 5421c443effSChuck Lever __entry->r_xprt = r_xprt; 5431c443effSChuck Lever __entry->count = count; 5446dc6ec9eSChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 5456dc6ec9eSChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 5461c443effSChuck Lever ), 5471c443effSChuck Lever 5486dc6ec9eSChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: created %u MRs", 5496dc6ec9eSChuck Lever __get_str(addr), __get_str(port), __entry->r_xprt, 5506dc6ec9eSChuck Lever __entry->count 5516dc6ec9eSChuck Lever ) 5526dc6ec9eSChuck Lever ); 5536dc6ec9eSChuck Lever 5546dc6ec9eSChuck Lever TRACE_EVENT(xprtrdma_mr_get, 5556dc6ec9eSChuck Lever TP_PROTO( 5566dc6ec9eSChuck Lever const struct rpcrdma_req *req 5576dc6ec9eSChuck Lever ), 5586dc6ec9eSChuck Lever 5596dc6ec9eSChuck Lever TP_ARGS(req), 5606dc6ec9eSChuck Lever 5616dc6ec9eSChuck Lever TP_STRUCT__entry( 5626dc6ec9eSChuck Lever __field(const void *, req) 5636dc6ec9eSChuck Lever __field(unsigned int, task_id) 5646dc6ec9eSChuck Lever __field(unsigned int, client_id) 5656dc6ec9eSChuck Lever __field(u32, xid) 5666dc6ec9eSChuck Lever ), 5676dc6ec9eSChuck Lever 5686dc6ec9eSChuck Lever TP_fast_assign( 5696dc6ec9eSChuck Lever const struct rpc_rqst *rqst = &req->rl_slot; 5706dc6ec9eSChuck Lever 5716dc6ec9eSChuck Lever __entry->req = req; 5726dc6ec9eSChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 5736dc6ec9eSChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 5746dc6ec9eSChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 5756dc6ec9eSChuck Lever ), 5766dc6ec9eSChuck Lever 5776dc6ec9eSChuck Lever TP_printk("task:%u@%u xid=0x%08x req=%p", 5786dc6ec9eSChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 5796dc6ec9eSChuck Lever __entry->req 5801c443effSChuck Lever ) 5811c443effSChuck Lever ); 5821c443effSChuck Lever 5833b39f52aSChuck Lever TRACE_EVENT(xprtrdma_nomrs, 5843b39f52aSChuck Lever TP_PROTO( 5853b39f52aSChuck Lever const struct rpcrdma_req *req 5863b39f52aSChuck Lever ), 5873b39f52aSChuck Lever 5883b39f52aSChuck Lever TP_ARGS(req), 5893b39f52aSChuck Lever 5903b39f52aSChuck Lever TP_STRUCT__entry( 5913b39f52aSChuck Lever __field(const void *, req) 5923b39f52aSChuck Lever __field(unsigned int, task_id) 5933b39f52aSChuck Lever __field(unsigned int, client_id) 5943b39f52aSChuck Lever __field(u32, xid) 5953b39f52aSChuck Lever ), 5963b39f52aSChuck Lever 5973b39f52aSChuck Lever TP_fast_assign( 5983b39f52aSChuck Lever const struct rpc_rqst *rqst = &req->rl_slot; 5993b39f52aSChuck Lever 6003b39f52aSChuck Lever __entry->req = req; 6013b39f52aSChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 6023b39f52aSChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 6033b39f52aSChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 6043b39f52aSChuck Lever ), 6053b39f52aSChuck Lever 6063b39f52aSChuck Lever TP_printk("task:%u@%u xid=0x%08x req=%p", 6073b39f52aSChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 6083b39f52aSChuck Lever __entry->req 6093b39f52aSChuck Lever ) 6103b39f52aSChuck Lever ); 6111c443effSChuck Lever 612aba11831SChuck Lever DEFINE_RDCH_EVENT(read); 613aba11831SChuck Lever DEFINE_WRCH_EVENT(write); 614aba11831SChuck Lever DEFINE_WRCH_EVENT(reply); 61558f10ad4SChuck Lever 616ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch); 617614f3c96SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch_pullup); 618614f3c96SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch_mapped); 619ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_readch); 620ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_areadch); 621ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_writech); 622ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_replych); 623ab03eff5SChuck Lever 624ab03eff5SChuck Lever #define xprtrdma_show_chunktype(x) \ 625ab03eff5SChuck Lever __print_symbolic(x, \ 626ab03eff5SChuck Lever { rpcrdma_noch, "inline" }, \ 627614f3c96SChuck Lever { rpcrdma_noch_pullup, "pullup" }, \ 628614f3c96SChuck Lever { rpcrdma_noch_mapped, "mapped" }, \ 629ab03eff5SChuck Lever { rpcrdma_readch, "read list" }, \ 630ab03eff5SChuck Lever { rpcrdma_areadch, "*read list" }, \ 631ab03eff5SChuck Lever { rpcrdma_writech, "write list" }, \ 632ab03eff5SChuck Lever { rpcrdma_replych, "reply chunk" }) 633ab03eff5SChuck Lever 634ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_marshal, 635ab03eff5SChuck Lever TP_PROTO( 6361310051cSChuck Lever const struct rpcrdma_req *req, 637ab03eff5SChuck Lever unsigned int rtype, 638ab03eff5SChuck Lever unsigned int wtype 639ab03eff5SChuck Lever ), 640ab03eff5SChuck Lever 6411310051cSChuck Lever TP_ARGS(req, rtype, wtype), 642ab03eff5SChuck Lever 643ab03eff5SChuck Lever TP_STRUCT__entry( 644ab03eff5SChuck Lever __field(unsigned int, task_id) 645ab03eff5SChuck Lever __field(unsigned int, client_id) 646ab03eff5SChuck Lever __field(u32, xid) 647ab03eff5SChuck Lever __field(unsigned int, hdrlen) 648ab03eff5SChuck Lever __field(unsigned int, headlen) 649ab03eff5SChuck Lever __field(unsigned int, pagelen) 650ab03eff5SChuck Lever __field(unsigned int, taillen) 651ab03eff5SChuck Lever __field(unsigned int, rtype) 652ab03eff5SChuck Lever __field(unsigned int, wtype) 653ab03eff5SChuck Lever ), 654ab03eff5SChuck Lever 655ab03eff5SChuck Lever TP_fast_assign( 6561310051cSChuck Lever const struct rpc_rqst *rqst = &req->rl_slot; 6571310051cSChuck Lever 658ab03eff5SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 659ab03eff5SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 660ab03eff5SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 6611310051cSChuck Lever __entry->hdrlen = req->rl_hdrbuf.len; 662ab03eff5SChuck Lever __entry->headlen = rqst->rq_snd_buf.head[0].iov_len; 663ab03eff5SChuck Lever __entry->pagelen = rqst->rq_snd_buf.page_len; 664ab03eff5SChuck Lever __entry->taillen = rqst->rq_snd_buf.tail[0].iov_len; 665ab03eff5SChuck Lever __entry->rtype = rtype; 666ab03eff5SChuck Lever __entry->wtype = wtype; 667ab03eff5SChuck Lever ), 668ab03eff5SChuck Lever 669ab03eff5SChuck Lever TP_printk("task:%u@%u xid=0x%08x: hdr=%u xdr=%u/%u/%u %s/%s", 670ab03eff5SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 671ab03eff5SChuck Lever __entry->hdrlen, 672ab03eff5SChuck Lever __entry->headlen, __entry->pagelen, __entry->taillen, 673ab03eff5SChuck Lever xprtrdma_show_chunktype(__entry->rtype), 674ab03eff5SChuck Lever xprtrdma_show_chunktype(__entry->wtype) 675ab03eff5SChuck Lever ) 676ab03eff5SChuck Lever ); 677ab03eff5SChuck Lever 67817e4c443SChuck Lever TRACE_EVENT(xprtrdma_marshal_failed, 67917e4c443SChuck Lever TP_PROTO(const struct rpc_rqst *rqst, 68017e4c443SChuck Lever int ret 68117e4c443SChuck Lever ), 68217e4c443SChuck Lever 68317e4c443SChuck Lever TP_ARGS(rqst, ret), 68417e4c443SChuck Lever 68517e4c443SChuck Lever TP_STRUCT__entry( 68617e4c443SChuck Lever __field(unsigned int, task_id) 68717e4c443SChuck Lever __field(unsigned int, client_id) 68817e4c443SChuck Lever __field(u32, xid) 68917e4c443SChuck Lever __field(int, ret) 69017e4c443SChuck Lever ), 69117e4c443SChuck Lever 69217e4c443SChuck Lever TP_fast_assign( 69317e4c443SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 69417e4c443SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 69517e4c443SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 69617e4c443SChuck Lever __entry->ret = ret; 69717e4c443SChuck Lever ), 69817e4c443SChuck Lever 69917e4c443SChuck Lever TP_printk("task:%u@%u xid=0x%08x: ret=%d", 70017e4c443SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 70117e4c443SChuck Lever __entry->ret 70217e4c443SChuck Lever ) 70317e4c443SChuck Lever ); 70417e4c443SChuck Lever 70505eb06d8SChuck Lever TRACE_EVENT(xprtrdma_prepsend_failed, 70605eb06d8SChuck Lever TP_PROTO(const struct rpc_rqst *rqst, 70705eb06d8SChuck Lever int ret 70805eb06d8SChuck Lever ), 70905eb06d8SChuck Lever 71005eb06d8SChuck Lever TP_ARGS(rqst, ret), 71105eb06d8SChuck Lever 71205eb06d8SChuck Lever TP_STRUCT__entry( 71305eb06d8SChuck Lever __field(unsigned int, task_id) 71405eb06d8SChuck Lever __field(unsigned int, client_id) 71505eb06d8SChuck Lever __field(u32, xid) 71605eb06d8SChuck Lever __field(int, ret) 71705eb06d8SChuck Lever ), 71805eb06d8SChuck Lever 71905eb06d8SChuck Lever TP_fast_assign( 72005eb06d8SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 72105eb06d8SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 72205eb06d8SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 72305eb06d8SChuck Lever __entry->ret = ret; 72405eb06d8SChuck Lever ), 72505eb06d8SChuck Lever 72605eb06d8SChuck Lever TP_printk("task:%u@%u xid=0x%08x: ret=%d", 72705eb06d8SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 72805eb06d8SChuck Lever __entry->ret 72905eb06d8SChuck Lever ) 73005eb06d8SChuck Lever ); 73105eb06d8SChuck Lever 732ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_post_send, 733ab03eff5SChuck Lever TP_PROTO( 734bdb2ce82SChuck Lever const struct rpcrdma_req *req 735ab03eff5SChuck Lever ), 736ab03eff5SChuck Lever 737bdb2ce82SChuck Lever TP_ARGS(req), 738ab03eff5SChuck Lever 739ab03eff5SChuck Lever TP_STRUCT__entry( 740ab03eff5SChuck Lever __field(const void *, req) 741cb586decSChuck Lever __field(const void *, sc) 7420c77668dSChuck Lever __field(unsigned int, task_id) 7430c77668dSChuck Lever __field(unsigned int, client_id) 744ab03eff5SChuck Lever __field(int, num_sge) 745470443e0SChuck Lever __field(int, signaled) 746ab03eff5SChuck Lever ), 747ab03eff5SChuck Lever 748ab03eff5SChuck Lever TP_fast_assign( 7490c77668dSChuck Lever const struct rpc_rqst *rqst = &req->rl_slot; 7500c77668dSChuck Lever 7510c77668dSChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 75210694ac9SChuck Lever __entry->client_id = rqst->rq_task->tk_client ? 75310694ac9SChuck Lever rqst->rq_task->tk_client->cl_clid : -1; 754ab03eff5SChuck Lever __entry->req = req; 755cb586decSChuck Lever __entry->sc = req->rl_sendctx; 756dc15c3d5SChuck Lever __entry->num_sge = req->rl_wr.num_sge; 757dc15c3d5SChuck Lever __entry->signaled = req->rl_wr.send_flags & IB_SEND_SIGNALED; 758ab03eff5SChuck Lever ), 759ab03eff5SChuck Lever 760bdb2ce82SChuck Lever TP_printk("task:%u@%u req=%p sc=%p (%d SGE%s) %s", 7610c77668dSChuck Lever __entry->task_id, __entry->client_id, 762cb586decSChuck Lever __entry->req, __entry->sc, __entry->num_sge, 7630c77668dSChuck Lever (__entry->num_sge == 1 ? "" : "s"), 764bdb2ce82SChuck Lever (__entry->signaled ? "signaled" : "") 765ab03eff5SChuck Lever ) 766ab03eff5SChuck Lever ); 767ab03eff5SChuck Lever 768b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_post_recv, 769b4a7f91cSChuck Lever TP_PROTO( 7702dfdcd88SChuck Lever const struct rpcrdma_rep *rep 771b4a7f91cSChuck Lever ), 772b4a7f91cSChuck Lever 7732dfdcd88SChuck Lever TP_ARGS(rep), 774b4a7f91cSChuck Lever 775b4a7f91cSChuck Lever TP_STRUCT__entry( 7762dfdcd88SChuck Lever __field(const void *, rep) 777b4a7f91cSChuck Lever ), 778b4a7f91cSChuck Lever 779b4a7f91cSChuck Lever TP_fast_assign( 7802dfdcd88SChuck Lever __entry->rep = rep; 781b4a7f91cSChuck Lever ), 782b4a7f91cSChuck Lever 7832dfdcd88SChuck Lever TP_printk("rep=%p", 7842dfdcd88SChuck Lever __entry->rep 785b4a7f91cSChuck Lever ) 786b4a7f91cSChuck Lever ); 787b4a7f91cSChuck Lever 7887c8d9e7cSChuck Lever TRACE_EVENT(xprtrdma_post_recvs, 7897c8d9e7cSChuck Lever TP_PROTO( 7907c8d9e7cSChuck Lever const struct rpcrdma_xprt *r_xprt, 7917c8d9e7cSChuck Lever unsigned int count, 7927c8d9e7cSChuck Lever int status 7937c8d9e7cSChuck Lever ), 7947c8d9e7cSChuck Lever 7957c8d9e7cSChuck Lever TP_ARGS(r_xprt, count, status), 7967c8d9e7cSChuck Lever 7977c8d9e7cSChuck Lever TP_STRUCT__entry( 7987c8d9e7cSChuck Lever __field(const void *, r_xprt) 7997c8d9e7cSChuck Lever __field(unsigned int, count) 8007c8d9e7cSChuck Lever __field(int, status) 8017c8d9e7cSChuck Lever __field(int, posted) 8027c8d9e7cSChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 8037c8d9e7cSChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 8047c8d9e7cSChuck Lever ), 8057c8d9e7cSChuck Lever 8067c8d9e7cSChuck Lever TP_fast_assign( 8077c8d9e7cSChuck Lever __entry->r_xprt = r_xprt; 8087c8d9e7cSChuck Lever __entry->count = count; 8097c8d9e7cSChuck Lever __entry->status = status; 810e28ce900SChuck Lever __entry->posted = r_xprt->rx_ep->re_receive_count; 8117c8d9e7cSChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 8127c8d9e7cSChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 8137c8d9e7cSChuck Lever ), 8147c8d9e7cSChuck Lever 8157c8d9e7cSChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: %u new recvs, %d active (rc %d)", 8167c8d9e7cSChuck Lever __get_str(addr), __get_str(port), __entry->r_xprt, 8177c8d9e7cSChuck Lever __entry->count, __entry->posted, __entry->status 818ab03eff5SChuck Lever ) 819ab03eff5SChuck Lever ); 820ab03eff5SChuck Lever 8214b93dab3SChuck Lever TRACE_EVENT(xprtrdma_post_linv, 8224b93dab3SChuck Lever TP_PROTO( 8234b93dab3SChuck Lever const struct rpcrdma_req *req, 8244b93dab3SChuck Lever int status 8254b93dab3SChuck Lever ), 8264b93dab3SChuck Lever 8274b93dab3SChuck Lever TP_ARGS(req, status), 8284b93dab3SChuck Lever 8294b93dab3SChuck Lever TP_STRUCT__entry( 8304b93dab3SChuck Lever __field(const void *, req) 8314b93dab3SChuck Lever __field(int, status) 8324b93dab3SChuck Lever __field(u32, xid) 8334b93dab3SChuck Lever ), 8344b93dab3SChuck Lever 8354b93dab3SChuck Lever TP_fast_assign( 8364b93dab3SChuck Lever __entry->req = req; 8374b93dab3SChuck Lever __entry->status = status; 8384b93dab3SChuck Lever __entry->xid = be32_to_cpu(req->rl_slot.rq_xid); 8394b93dab3SChuck Lever ), 8404b93dab3SChuck Lever 8414b93dab3SChuck Lever TP_printk("req=%p xid=0x%08x status=%d", 8424b93dab3SChuck Lever __entry->req, __entry->xid, __entry->status 8434b93dab3SChuck Lever ) 8444b93dab3SChuck Lever ); 8454b93dab3SChuck Lever 846ab03eff5SChuck Lever /** 847ab03eff5SChuck Lever ** Completion events 848ab03eff5SChuck Lever **/ 849ab03eff5SChuck Lever 850ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_wc_send, 851ab03eff5SChuck Lever TP_PROTO( 852ab03eff5SChuck Lever const struct rpcrdma_sendctx *sc, 853ab03eff5SChuck Lever const struct ib_wc *wc 854ab03eff5SChuck Lever ), 855ab03eff5SChuck Lever 856ab03eff5SChuck Lever TP_ARGS(sc, wc), 857ab03eff5SChuck Lever 858ab03eff5SChuck Lever TP_STRUCT__entry( 859ab03eff5SChuck Lever __field(const void *, req) 860cb586decSChuck Lever __field(const void *, sc) 861ab03eff5SChuck Lever __field(unsigned int, unmap_count) 862ab03eff5SChuck Lever __field(unsigned int, status) 863ab03eff5SChuck Lever __field(unsigned int, vendor_err) 864ab03eff5SChuck Lever ), 865ab03eff5SChuck Lever 866ab03eff5SChuck Lever TP_fast_assign( 867ab03eff5SChuck Lever __entry->req = sc->sc_req; 868cb586decSChuck Lever __entry->sc = sc; 869ab03eff5SChuck Lever __entry->unmap_count = sc->sc_unmap_count; 870ab03eff5SChuck Lever __entry->status = wc->status; 871ab03eff5SChuck Lever __entry->vendor_err = __entry->status ? wc->vendor_err : 0; 872ab03eff5SChuck Lever ), 873ab03eff5SChuck Lever 874cb586decSChuck Lever TP_printk("req=%p sc=%p unmapped=%u: %s (%u/0x%x)", 875cb586decSChuck Lever __entry->req, __entry->sc, __entry->unmap_count, 876ab03eff5SChuck Lever rdma_show_wc_status(__entry->status), 877ab03eff5SChuck Lever __entry->status, __entry->vendor_err 878ab03eff5SChuck Lever ) 879ab03eff5SChuck Lever ); 880ab03eff5SChuck Lever 881b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_wc_receive, 882b4a7f91cSChuck Lever TP_PROTO( 883b4a7f91cSChuck Lever const struct ib_wc *wc 884b4a7f91cSChuck Lever ), 885b4a7f91cSChuck Lever 8860e0b854cSChuck Lever TP_ARGS(wc), 887b4a7f91cSChuck Lever 888b4a7f91cSChuck Lever TP_STRUCT__entry( 8892dfdcd88SChuck Lever __field(const void *, rep) 8900e0b854cSChuck Lever __field(u32, byte_len) 891b4a7f91cSChuck Lever __field(unsigned int, status) 8920e0b854cSChuck Lever __field(u32, vendor_err) 893b4a7f91cSChuck Lever ), 894b4a7f91cSChuck Lever 895b4a7f91cSChuck Lever TP_fast_assign( 8962dfdcd88SChuck Lever __entry->rep = container_of(wc->wr_cqe, struct rpcrdma_rep, 8972dfdcd88SChuck Lever rr_cqe); 898b4a7f91cSChuck Lever __entry->status = wc->status; 8990e0b854cSChuck Lever if (wc->status) { 9000e0b854cSChuck Lever __entry->byte_len = 0; 9010e0b854cSChuck Lever __entry->vendor_err = wc->vendor_err; 9020e0b854cSChuck Lever } else { 9030e0b854cSChuck Lever __entry->byte_len = wc->byte_len; 9040e0b854cSChuck Lever __entry->vendor_err = 0; 9050e0b854cSChuck Lever } 906b4a7f91cSChuck Lever ), 907b4a7f91cSChuck Lever 9082dfdcd88SChuck Lever TP_printk("rep=%p %u bytes: %s (%u/0x%x)", 9092dfdcd88SChuck Lever __entry->rep, __entry->byte_len, 910b4a7f91cSChuck Lever rdma_show_wc_status(__entry->status), 911b4a7f91cSChuck Lever __entry->status, __entry->vendor_err 912b4a7f91cSChuck Lever ) 913b4a7f91cSChuck Lever ); 914b4a7f91cSChuck Lever 91558f10ad4SChuck Lever DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_fastreg); 9162937fedeSChuck Lever DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_li); 9172937fedeSChuck Lever DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_li_wake); 918d8099fedSChuck Lever DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_li_done); 9192937fedeSChuck Lever 92053b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_alloc, 92153b2c1cbSChuck Lever TP_PROTO( 92253b2c1cbSChuck Lever const struct rpcrdma_mr *mr, 92353b2c1cbSChuck Lever int rc 92453b2c1cbSChuck Lever ), 92553b2c1cbSChuck Lever 92653b2c1cbSChuck Lever TP_ARGS(mr, rc), 92753b2c1cbSChuck Lever 92853b2c1cbSChuck Lever TP_STRUCT__entry( 92962a89501SChuck Lever __field(u32, mr_id) 93053b2c1cbSChuck Lever __field(int, rc) 93153b2c1cbSChuck Lever ), 93253b2c1cbSChuck Lever 93353b2c1cbSChuck Lever TP_fast_assign( 93462a89501SChuck Lever __entry->mr_id = mr->frwr.fr_mr->res.id; 93553b2c1cbSChuck Lever __entry->rc = rc; 93653b2c1cbSChuck Lever ), 93753b2c1cbSChuck Lever 93862a89501SChuck Lever TP_printk("mr.id=%u: rc=%d", 93962a89501SChuck Lever __entry->mr_id, __entry->rc 94053b2c1cbSChuck Lever ) 94153b2c1cbSChuck Lever ); 94253b2c1cbSChuck Lever 94353b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_dereg, 94453b2c1cbSChuck Lever TP_PROTO( 94553b2c1cbSChuck Lever const struct rpcrdma_mr *mr, 94653b2c1cbSChuck Lever int rc 94753b2c1cbSChuck Lever ), 94853b2c1cbSChuck Lever 94953b2c1cbSChuck Lever TP_ARGS(mr, rc), 95053b2c1cbSChuck Lever 95153b2c1cbSChuck Lever TP_STRUCT__entry( 95262a89501SChuck Lever __field(u32, mr_id) 95362a89501SChuck Lever __field(int, nents) 95453b2c1cbSChuck Lever __field(u32, handle) 95553b2c1cbSChuck Lever __field(u32, length) 95653b2c1cbSChuck Lever __field(u64, offset) 95753b2c1cbSChuck Lever __field(u32, dir) 95853b2c1cbSChuck Lever __field(int, rc) 95953b2c1cbSChuck Lever ), 96053b2c1cbSChuck Lever 96153b2c1cbSChuck Lever TP_fast_assign( 96262a89501SChuck Lever __entry->mr_id = mr->frwr.fr_mr->res.id; 96362a89501SChuck Lever __entry->nents = mr->mr_nents; 96453b2c1cbSChuck Lever __entry->handle = mr->mr_handle; 96553b2c1cbSChuck Lever __entry->length = mr->mr_length; 96653b2c1cbSChuck Lever __entry->offset = mr->mr_offset; 96753b2c1cbSChuck Lever __entry->dir = mr->mr_dir; 96853b2c1cbSChuck Lever __entry->rc = rc; 96953b2c1cbSChuck Lever ), 97053b2c1cbSChuck Lever 97162a89501SChuck Lever TP_printk("mr.id=%u nents=%d %u@0x%016llx:0x%08x (%s): rc=%d", 97262a89501SChuck Lever __entry->mr_id, __entry->nents, __entry->length, 97353b2c1cbSChuck Lever (unsigned long long)__entry->offset, __entry->handle, 97453b2c1cbSChuck Lever xprtrdma_show_direction(__entry->dir), 97553b2c1cbSChuck Lever __entry->rc 97653b2c1cbSChuck Lever ) 97753b2c1cbSChuck Lever ); 97853b2c1cbSChuck Lever 97953b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_sgerr, 98053b2c1cbSChuck Lever TP_PROTO( 98153b2c1cbSChuck Lever const struct rpcrdma_mr *mr, 98253b2c1cbSChuck Lever int sg_nents 98353b2c1cbSChuck Lever ), 98453b2c1cbSChuck Lever 98553b2c1cbSChuck Lever TP_ARGS(mr, sg_nents), 98653b2c1cbSChuck Lever 98753b2c1cbSChuck Lever TP_STRUCT__entry( 98862a89501SChuck Lever __field(u32, mr_id) 98953b2c1cbSChuck Lever __field(u64, addr) 99053b2c1cbSChuck Lever __field(u32, dir) 99153b2c1cbSChuck Lever __field(int, nents) 99253b2c1cbSChuck Lever ), 99353b2c1cbSChuck Lever 99453b2c1cbSChuck Lever TP_fast_assign( 99562a89501SChuck Lever __entry->mr_id = mr->frwr.fr_mr->res.id; 99653b2c1cbSChuck Lever __entry->addr = mr->mr_sg->dma_address; 99753b2c1cbSChuck Lever __entry->dir = mr->mr_dir; 99853b2c1cbSChuck Lever __entry->nents = sg_nents; 99953b2c1cbSChuck Lever ), 100053b2c1cbSChuck Lever 100162a89501SChuck Lever TP_printk("mr.id=%u DMA addr=0x%llx (%s) sg_nents=%d", 100262a89501SChuck Lever __entry->mr_id, __entry->addr, 100353b2c1cbSChuck Lever xprtrdma_show_direction(__entry->dir), 100453b2c1cbSChuck Lever __entry->nents 100553b2c1cbSChuck Lever ) 100653b2c1cbSChuck Lever ); 100753b2c1cbSChuck Lever 100853b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_maperr, 100953b2c1cbSChuck Lever TP_PROTO( 101053b2c1cbSChuck Lever const struct rpcrdma_mr *mr, 101153b2c1cbSChuck Lever int num_mapped 101253b2c1cbSChuck Lever ), 101353b2c1cbSChuck Lever 101453b2c1cbSChuck Lever TP_ARGS(mr, num_mapped), 101553b2c1cbSChuck Lever 101653b2c1cbSChuck Lever TP_STRUCT__entry( 101762a89501SChuck Lever __field(u32, mr_id) 101853b2c1cbSChuck Lever __field(u64, addr) 101953b2c1cbSChuck Lever __field(u32, dir) 102053b2c1cbSChuck Lever __field(int, num_mapped) 102153b2c1cbSChuck Lever __field(int, nents) 102253b2c1cbSChuck Lever ), 102353b2c1cbSChuck Lever 102453b2c1cbSChuck Lever TP_fast_assign( 102562a89501SChuck Lever __entry->mr_id = mr->frwr.fr_mr->res.id; 102653b2c1cbSChuck Lever __entry->addr = mr->mr_sg->dma_address; 102753b2c1cbSChuck Lever __entry->dir = mr->mr_dir; 102853b2c1cbSChuck Lever __entry->num_mapped = num_mapped; 102953b2c1cbSChuck Lever __entry->nents = mr->mr_nents; 103053b2c1cbSChuck Lever ), 103153b2c1cbSChuck Lever 103262a89501SChuck Lever TP_printk("mr.id=%u DMA addr=0x%llx (%s) nents=%d of %d", 103362a89501SChuck Lever __entry->mr_id, __entry->addr, 103453b2c1cbSChuck Lever xprtrdma_show_direction(__entry->dir), 103553b2c1cbSChuck Lever __entry->num_mapped, __entry->nents 103653b2c1cbSChuck Lever ) 103753b2c1cbSChuck Lever ); 103853b2c1cbSChuck Lever 1039d379eaa8SChuck Lever DEFINE_MR_EVENT(localinv); 1040d379eaa8SChuck Lever DEFINE_MR_EVENT(map); 1041d379eaa8SChuck Lever DEFINE_MR_EVENT(unmap); 104262a89501SChuck Lever DEFINE_MR_EVENT(reminv); 1043d379eaa8SChuck Lever DEFINE_MR_EVENT(recycle); 104458f10ad4SChuck Lever 104553b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_dma_maperr, 104653b2c1cbSChuck Lever TP_PROTO( 104753b2c1cbSChuck Lever u64 addr 104853b2c1cbSChuck Lever ), 104953b2c1cbSChuck Lever 105053b2c1cbSChuck Lever TP_ARGS(addr), 105153b2c1cbSChuck Lever 105253b2c1cbSChuck Lever TP_STRUCT__entry( 105353b2c1cbSChuck Lever __field(u64, addr) 105453b2c1cbSChuck Lever ), 105553b2c1cbSChuck Lever 105653b2c1cbSChuck Lever TP_fast_assign( 105753b2c1cbSChuck Lever __entry->addr = addr; 105853b2c1cbSChuck Lever ), 105953b2c1cbSChuck Lever 106053b2c1cbSChuck Lever TP_printk("dma addr=0x%llx\n", __entry->addr) 106153b2c1cbSChuck Lever ); 106253b2c1cbSChuck Lever 1063b4a7f91cSChuck Lever /** 1064b4a7f91cSChuck Lever ** Reply events 1065b4a7f91cSChuck Lever **/ 1066b4a7f91cSChuck Lever 1067b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_reply, 1068b4a7f91cSChuck Lever TP_PROTO( 1069b4a7f91cSChuck Lever const struct rpc_task *task, 1070b4a7f91cSChuck Lever const struct rpcrdma_rep *rep, 1071b4a7f91cSChuck Lever const struct rpcrdma_req *req, 1072b4a7f91cSChuck Lever unsigned int credits 1073b4a7f91cSChuck Lever ), 1074b4a7f91cSChuck Lever 1075b4a7f91cSChuck Lever TP_ARGS(task, rep, req, credits), 1076b4a7f91cSChuck Lever 1077b4a7f91cSChuck Lever TP_STRUCT__entry( 1078b4a7f91cSChuck Lever __field(unsigned int, task_id) 1079b4a7f91cSChuck Lever __field(unsigned int, client_id) 1080b4a7f91cSChuck Lever __field(const void *, rep) 1081b4a7f91cSChuck Lever __field(const void *, req) 1082b4a7f91cSChuck Lever __field(u32, xid) 1083b4a7f91cSChuck Lever __field(unsigned int, credits) 1084b4a7f91cSChuck Lever ), 1085b4a7f91cSChuck Lever 1086b4a7f91cSChuck Lever TP_fast_assign( 1087b4a7f91cSChuck Lever __entry->task_id = task->tk_pid; 1088b4a7f91cSChuck Lever __entry->client_id = task->tk_client->cl_clid; 1089b4a7f91cSChuck Lever __entry->rep = rep; 1090b4a7f91cSChuck Lever __entry->req = req; 1091b4a7f91cSChuck Lever __entry->xid = be32_to_cpu(rep->rr_xid); 1092b4a7f91cSChuck Lever __entry->credits = credits; 1093b4a7f91cSChuck Lever ), 1094b4a7f91cSChuck Lever 1095b4a7f91cSChuck Lever TP_printk("task:%u@%u xid=0x%08x, %u credits, rep=%p -> req=%p", 1096b4a7f91cSChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 1097b4a7f91cSChuck Lever __entry->credits, __entry->rep, __entry->req 1098b4a7f91cSChuck Lever ) 1099b4a7f91cSChuck Lever ); 1100b4a7f91cSChuck Lever 1101b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_defer_cmp, 1102b4a7f91cSChuck Lever TP_PROTO( 1103b4a7f91cSChuck Lever const struct rpcrdma_rep *rep 1104b4a7f91cSChuck Lever ), 1105b4a7f91cSChuck Lever 1106b4a7f91cSChuck Lever TP_ARGS(rep), 1107b4a7f91cSChuck Lever 1108b4a7f91cSChuck Lever TP_STRUCT__entry( 1109b4a7f91cSChuck Lever __field(unsigned int, task_id) 1110b4a7f91cSChuck Lever __field(unsigned int, client_id) 1111b4a7f91cSChuck Lever __field(const void *, rep) 1112b4a7f91cSChuck Lever __field(u32, xid) 1113b4a7f91cSChuck Lever ), 1114b4a7f91cSChuck Lever 1115b4a7f91cSChuck Lever TP_fast_assign( 1116b4a7f91cSChuck Lever __entry->task_id = rep->rr_rqst->rq_task->tk_pid; 1117b4a7f91cSChuck Lever __entry->client_id = rep->rr_rqst->rq_task->tk_client->cl_clid; 1118b4a7f91cSChuck Lever __entry->rep = rep; 1119b4a7f91cSChuck Lever __entry->xid = be32_to_cpu(rep->rr_xid); 1120b4a7f91cSChuck Lever ), 1121b4a7f91cSChuck Lever 1122b4a7f91cSChuck Lever TP_printk("task:%u@%u xid=0x%08x rep=%p", 1123b4a7f91cSChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 1124b4a7f91cSChuck Lever __entry->rep 1125b4a7f91cSChuck Lever ) 1126b4a7f91cSChuck Lever ); 1127b4a7f91cSChuck Lever 1128b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_vers); 1129b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_rqst); 1130b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_short); 1131b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_hdr); 1132b4a7f91cSChuck Lever 1133e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_fixup, 1134e11b7c96SChuck Lever TP_PROTO( 1135e11b7c96SChuck Lever const struct rpc_rqst *rqst, 1136d4957f01SChuck Lever unsigned long fixup 1137e11b7c96SChuck Lever ), 1138e11b7c96SChuck Lever 1139d4957f01SChuck Lever TP_ARGS(rqst, fixup), 1140e11b7c96SChuck Lever 1141e11b7c96SChuck Lever TP_STRUCT__entry( 1142e11b7c96SChuck Lever __field(unsigned int, task_id) 1143e11b7c96SChuck Lever __field(unsigned int, client_id) 1144d4957f01SChuck Lever __field(unsigned long, fixup) 1145d4957f01SChuck Lever __field(size_t, headlen) 1146d4957f01SChuck Lever __field(unsigned int, pagelen) 1147d4957f01SChuck Lever __field(size_t, taillen) 1148e11b7c96SChuck Lever ), 1149e11b7c96SChuck Lever 1150e11b7c96SChuck Lever TP_fast_assign( 1151e11b7c96SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 1152e11b7c96SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 1153d4957f01SChuck Lever __entry->fixup = fixup; 1154d4957f01SChuck Lever __entry->headlen = rqst->rq_rcv_buf.head[0].iov_len; 1155d4957f01SChuck Lever __entry->pagelen = rqst->rq_rcv_buf.page_len; 1156d4957f01SChuck Lever __entry->taillen = rqst->rq_rcv_buf.tail[0].iov_len; 1157e11b7c96SChuck Lever ), 1158e11b7c96SChuck Lever 1159d4957f01SChuck Lever TP_printk("task:%u@%u fixup=%lu xdr=%zu/%u/%zu", 1160d4957f01SChuck Lever __entry->task_id, __entry->client_id, __entry->fixup, 1161d4957f01SChuck Lever __entry->headlen, __entry->pagelen, __entry->taillen 1162e11b7c96SChuck Lever ) 1163e11b7c96SChuck Lever ); 1164e11b7c96SChuck Lever 1165e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_decode_seg, 1166e11b7c96SChuck Lever TP_PROTO( 1167e11b7c96SChuck Lever u32 handle, 1168e11b7c96SChuck Lever u32 length, 1169e11b7c96SChuck Lever u64 offset 1170e11b7c96SChuck Lever ), 1171e11b7c96SChuck Lever 1172e11b7c96SChuck Lever TP_ARGS(handle, length, offset), 1173e11b7c96SChuck Lever 1174e11b7c96SChuck Lever TP_STRUCT__entry( 1175e11b7c96SChuck Lever __field(u32, handle) 1176e11b7c96SChuck Lever __field(u32, length) 1177e11b7c96SChuck Lever __field(u64, offset) 1178e11b7c96SChuck Lever ), 1179e11b7c96SChuck Lever 1180e11b7c96SChuck Lever TP_fast_assign( 1181e11b7c96SChuck Lever __entry->handle = handle; 1182e11b7c96SChuck Lever __entry->length = length; 1183e11b7c96SChuck Lever __entry->offset = offset; 1184e11b7c96SChuck Lever ), 1185e11b7c96SChuck Lever 1186e11b7c96SChuck Lever TP_printk("%u@0x%016llx:0x%08x", 1187e11b7c96SChuck Lever __entry->length, (unsigned long long)__entry->offset, 1188e11b7c96SChuck Lever __entry->handle 1189e11b7c96SChuck Lever ) 1190e11b7c96SChuck Lever ); 1191e11b7c96SChuck Lever 1192fc1eb807SChuck Lever /** 1193ae724676SChuck Lever ** Allocation/release of rpcrdma_reqs and rpcrdma_reps 1194ae724676SChuck Lever **/ 1195ae724676SChuck Lever 1196395069fcSChuck Lever TRACE_EVENT(xprtrdma_op_allocate, 1197ae724676SChuck Lever TP_PROTO( 1198ae724676SChuck Lever const struct rpc_task *task, 1199ae724676SChuck Lever const struct rpcrdma_req *req 1200ae724676SChuck Lever ), 1201ae724676SChuck Lever 1202ae724676SChuck Lever TP_ARGS(task, req), 1203ae724676SChuck Lever 1204ae724676SChuck Lever TP_STRUCT__entry( 1205ae724676SChuck Lever __field(unsigned int, task_id) 1206ae724676SChuck Lever __field(unsigned int, client_id) 1207ae724676SChuck Lever __field(const void *, req) 1208ae724676SChuck Lever __field(size_t, callsize) 1209ae724676SChuck Lever __field(size_t, rcvsize) 1210ae724676SChuck Lever ), 1211ae724676SChuck Lever 1212ae724676SChuck Lever TP_fast_assign( 1213ae724676SChuck Lever __entry->task_id = task->tk_pid; 1214ae724676SChuck Lever __entry->client_id = task->tk_client->cl_clid; 1215ae724676SChuck Lever __entry->req = req; 1216ae724676SChuck Lever __entry->callsize = task->tk_rqstp->rq_callsize; 1217ae724676SChuck Lever __entry->rcvsize = task->tk_rqstp->rq_rcvsize; 1218ae724676SChuck Lever ), 1219ae724676SChuck Lever 12207c8d9e7cSChuck Lever TP_printk("task:%u@%u req=%p (%zu, %zu)", 1221ae724676SChuck Lever __entry->task_id, __entry->client_id, 12227c8d9e7cSChuck Lever __entry->req, __entry->callsize, __entry->rcvsize 1223ae724676SChuck Lever ) 1224ae724676SChuck Lever ); 1225ae724676SChuck Lever 1226395069fcSChuck Lever TRACE_EVENT(xprtrdma_op_free, 1227ae724676SChuck Lever TP_PROTO( 1228ae724676SChuck Lever const struct rpc_task *task, 1229ae724676SChuck Lever const struct rpcrdma_req *req 1230ae724676SChuck Lever ), 1231ae724676SChuck Lever 1232ae724676SChuck Lever TP_ARGS(task, req), 1233ae724676SChuck Lever 1234ae724676SChuck Lever TP_STRUCT__entry( 1235ae724676SChuck Lever __field(unsigned int, task_id) 1236ae724676SChuck Lever __field(unsigned int, client_id) 1237ae724676SChuck Lever __field(const void *, req) 1238ae724676SChuck Lever __field(const void *, rep) 1239ae724676SChuck Lever ), 1240ae724676SChuck Lever 1241ae724676SChuck Lever TP_fast_assign( 1242ae724676SChuck Lever __entry->task_id = task->tk_pid; 1243ae724676SChuck Lever __entry->client_id = task->tk_client->cl_clid; 1244ae724676SChuck Lever __entry->req = req; 1245ae724676SChuck Lever __entry->rep = req->rl_reply; 1246ae724676SChuck Lever ), 1247ae724676SChuck Lever 1248ae724676SChuck Lever TP_printk("task:%u@%u req=%p rep=%p", 1249ae724676SChuck Lever __entry->task_id, __entry->client_id, 1250ae724676SChuck Lever __entry->req, __entry->rep 1251ae724676SChuck Lever ) 1252ae724676SChuck Lever ); 1253ae724676SChuck Lever 1254ae724676SChuck Lever /** 1255fc1eb807SChuck Lever ** Callback events 1256fc1eb807SChuck Lever **/ 1257fc1eb807SChuck Lever 1258fc1eb807SChuck Lever TRACE_EVENT(xprtrdma_cb_setup, 1259fc1eb807SChuck Lever TP_PROTO( 1260fc1eb807SChuck Lever const struct rpcrdma_xprt *r_xprt, 1261fc1eb807SChuck Lever unsigned int reqs 1262fc1eb807SChuck Lever ), 1263fc1eb807SChuck Lever 1264fc1eb807SChuck Lever TP_ARGS(r_xprt, reqs), 1265fc1eb807SChuck Lever 1266fc1eb807SChuck Lever TP_STRUCT__entry( 1267fc1eb807SChuck Lever __field(const void *, r_xprt) 1268fc1eb807SChuck Lever __field(unsigned int, reqs) 1269fc1eb807SChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 1270fc1eb807SChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 1271fc1eb807SChuck Lever ), 1272fc1eb807SChuck Lever 1273fc1eb807SChuck Lever TP_fast_assign( 1274fc1eb807SChuck Lever __entry->r_xprt = r_xprt; 1275fc1eb807SChuck Lever __entry->reqs = reqs; 1276fc1eb807SChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 1277fc1eb807SChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 1278fc1eb807SChuck Lever ), 1279fc1eb807SChuck Lever 1280fc1eb807SChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: %u reqs", 1281fc1eb807SChuck Lever __get_str(addr), __get_str(port), 1282fc1eb807SChuck Lever __entry->r_xprt, __entry->reqs 1283fc1eb807SChuck Lever ) 1284fc1eb807SChuck Lever ); 1285fc1eb807SChuck Lever 1286fc1eb807SChuck Lever DEFINE_CB_EVENT(xprtrdma_cb_call); 1287fc1eb807SChuck Lever DEFINE_CB_EVENT(xprtrdma_cb_reply); 1288fc1eb807SChuck Lever 128907e10308SChuck Lever TRACE_EVENT(xprtrdma_leaked_rep, 129007e10308SChuck Lever TP_PROTO( 129107e10308SChuck Lever const struct rpc_rqst *rqst, 129207e10308SChuck Lever const struct rpcrdma_rep *rep 129307e10308SChuck Lever ), 129407e10308SChuck Lever 129507e10308SChuck Lever TP_ARGS(rqst, rep), 129607e10308SChuck Lever 129707e10308SChuck Lever TP_STRUCT__entry( 129807e10308SChuck Lever __field(unsigned int, task_id) 129907e10308SChuck Lever __field(unsigned int, client_id) 130007e10308SChuck Lever __field(u32, xid) 130107e10308SChuck Lever __field(const void *, rep) 130207e10308SChuck Lever ), 130307e10308SChuck Lever 130407e10308SChuck Lever TP_fast_assign( 130507e10308SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 130607e10308SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 130707e10308SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 130807e10308SChuck Lever __entry->rep = rep; 130907e10308SChuck Lever ), 131007e10308SChuck Lever 131107e10308SChuck Lever TP_printk("task:%u@%u xid=0x%08x rep=%p", 131207e10308SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 131307e10308SChuck Lever __entry->rep 131407e10308SChuck Lever ) 131507e10308SChuck Lever ); 131607e10308SChuck Lever 131798895edbSChuck Lever /** 131898895edbSChuck Lever ** Server-side RPC/RDMA events 131998895edbSChuck Lever **/ 132098895edbSChuck Lever 1321e979a173SChuck Lever DECLARE_EVENT_CLASS(svcrdma_accept_class, 1322e979a173SChuck Lever TP_PROTO( 1323e979a173SChuck Lever const struct svcxprt_rdma *rdma, 1324e979a173SChuck Lever long status 1325e979a173SChuck Lever ), 1326e979a173SChuck Lever 1327e979a173SChuck Lever TP_ARGS(rdma, status), 1328e979a173SChuck Lever 1329e979a173SChuck Lever TP_STRUCT__entry( 1330e979a173SChuck Lever __field(long, status) 1331e979a173SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1332e979a173SChuck Lever ), 1333e979a173SChuck Lever 1334e979a173SChuck Lever TP_fast_assign( 1335e979a173SChuck Lever __entry->status = status; 1336e979a173SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1337e979a173SChuck Lever ), 1338e979a173SChuck Lever 1339e979a173SChuck Lever TP_printk("addr=%s status=%ld", 1340e979a173SChuck Lever __get_str(addr), __entry->status 1341e979a173SChuck Lever ) 1342e979a173SChuck Lever ); 1343e979a173SChuck Lever 1344e979a173SChuck Lever #define DEFINE_ACCEPT_EVENT(name) \ 1345e979a173SChuck Lever DEFINE_EVENT(svcrdma_accept_class, svcrdma_##name##_err, \ 1346e979a173SChuck Lever TP_PROTO( \ 1347e979a173SChuck Lever const struct svcxprt_rdma *rdma, \ 1348e979a173SChuck Lever long status \ 1349e979a173SChuck Lever ), \ 1350e979a173SChuck Lever TP_ARGS(rdma, status)) 1351e979a173SChuck Lever 1352e979a173SChuck Lever DEFINE_ACCEPT_EVENT(pd); 1353e979a173SChuck Lever DEFINE_ACCEPT_EVENT(qp); 1354e979a173SChuck Lever DEFINE_ACCEPT_EVENT(fabric); 1355e979a173SChuck Lever DEFINE_ACCEPT_EVENT(initdepth); 1356e979a173SChuck Lever DEFINE_ACCEPT_EVENT(accept); 1357e979a173SChuck Lever 135898895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_MSG); 135998895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_NOMSG); 136098895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_MSGP); 136198895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_DONE); 136298895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_ERROR); 136398895edbSChuck Lever 136498895edbSChuck Lever #define show_rpcrdma_proc(x) \ 136598895edbSChuck Lever __print_symbolic(x, \ 136698895edbSChuck Lever { RDMA_MSG, "RDMA_MSG" }, \ 136798895edbSChuck Lever { RDMA_NOMSG, "RDMA_NOMSG" }, \ 136898895edbSChuck Lever { RDMA_MSGP, "RDMA_MSGP" }, \ 136998895edbSChuck Lever { RDMA_DONE, "RDMA_DONE" }, \ 137098895edbSChuck Lever { RDMA_ERROR, "RDMA_ERROR" }) 137198895edbSChuck Lever 137298895edbSChuck Lever TRACE_EVENT(svcrdma_decode_rqst, 137398895edbSChuck Lever TP_PROTO( 137498895edbSChuck Lever __be32 *p, 137598895edbSChuck Lever unsigned int hdrlen 137698895edbSChuck Lever ), 137798895edbSChuck Lever 137898895edbSChuck Lever TP_ARGS(p, hdrlen), 137998895edbSChuck Lever 138098895edbSChuck Lever TP_STRUCT__entry( 138198895edbSChuck Lever __field(u32, xid) 138298895edbSChuck Lever __field(u32, vers) 138398895edbSChuck Lever __field(u32, proc) 138498895edbSChuck Lever __field(u32, credits) 138598895edbSChuck Lever __field(unsigned int, hdrlen) 138698895edbSChuck Lever ), 138798895edbSChuck Lever 138898895edbSChuck Lever TP_fast_assign( 138998895edbSChuck Lever __entry->xid = be32_to_cpup(p++); 139098895edbSChuck Lever __entry->vers = be32_to_cpup(p++); 139198895edbSChuck Lever __entry->credits = be32_to_cpup(p++); 139298895edbSChuck Lever __entry->proc = be32_to_cpup(p); 139398895edbSChuck Lever __entry->hdrlen = hdrlen; 139498895edbSChuck Lever ), 139598895edbSChuck Lever 139698895edbSChuck Lever TP_printk("xid=0x%08x vers=%u credits=%u proc=%s hdrlen=%u", 139798895edbSChuck Lever __entry->xid, __entry->vers, __entry->credits, 139898895edbSChuck Lever show_rpcrdma_proc(__entry->proc), __entry->hdrlen) 139998895edbSChuck Lever ); 140098895edbSChuck Lever 140127ce6294SChuck Lever TRACE_EVENT(svcrdma_decode_short_err, 140298895edbSChuck Lever TP_PROTO( 140398895edbSChuck Lever unsigned int hdrlen 140498895edbSChuck Lever ), 140598895edbSChuck Lever 140698895edbSChuck Lever TP_ARGS(hdrlen), 140798895edbSChuck Lever 140898895edbSChuck Lever TP_STRUCT__entry( 140998895edbSChuck Lever __field(unsigned int, hdrlen) 141098895edbSChuck Lever ), 141198895edbSChuck Lever 141298895edbSChuck Lever TP_fast_assign( 141398895edbSChuck Lever __entry->hdrlen = hdrlen; 141498895edbSChuck Lever ), 141598895edbSChuck Lever 141698895edbSChuck Lever TP_printk("hdrlen=%u", __entry->hdrlen) 141798895edbSChuck Lever ); 141898895edbSChuck Lever 141998895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_badreq_event, 142098895edbSChuck Lever TP_PROTO( 142198895edbSChuck Lever __be32 *p 142298895edbSChuck Lever ), 142398895edbSChuck Lever 142498895edbSChuck Lever TP_ARGS(p), 142598895edbSChuck Lever 142698895edbSChuck Lever TP_STRUCT__entry( 142798895edbSChuck Lever __field(u32, xid) 142898895edbSChuck Lever __field(u32, vers) 142998895edbSChuck Lever __field(u32, proc) 143098895edbSChuck Lever __field(u32, credits) 143198895edbSChuck Lever ), 143298895edbSChuck Lever 143398895edbSChuck Lever TP_fast_assign( 143498895edbSChuck Lever __entry->xid = be32_to_cpup(p++); 143598895edbSChuck Lever __entry->vers = be32_to_cpup(p++); 143698895edbSChuck Lever __entry->credits = be32_to_cpup(p++); 143798895edbSChuck Lever __entry->proc = be32_to_cpup(p); 143898895edbSChuck Lever ), 143998895edbSChuck Lever 144098895edbSChuck Lever TP_printk("xid=0x%08x vers=%u credits=%u proc=%u", 144198895edbSChuck Lever __entry->xid, __entry->vers, __entry->credits, __entry->proc) 144298895edbSChuck Lever ); 144398895edbSChuck Lever 144498895edbSChuck Lever #define DEFINE_BADREQ_EVENT(name) \ 144527ce6294SChuck Lever DEFINE_EVENT(svcrdma_badreq_event, \ 144627ce6294SChuck Lever svcrdma_decode_##name##_err, \ 144798895edbSChuck Lever TP_PROTO( \ 144898895edbSChuck Lever __be32 *p \ 144998895edbSChuck Lever ), \ 145098895edbSChuck Lever TP_ARGS(p)) 145198895edbSChuck Lever 145298895edbSChuck Lever DEFINE_BADREQ_EVENT(badvers); 145398895edbSChuck Lever DEFINE_BADREQ_EVENT(drop); 145498895edbSChuck Lever DEFINE_BADREQ_EVENT(badproc); 145598895edbSChuck Lever DEFINE_BADREQ_EVENT(parse); 145698895edbSChuck Lever 145798895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_segment_event, 145898895edbSChuck Lever TP_PROTO( 145998895edbSChuck Lever u32 handle, 146098895edbSChuck Lever u32 length, 146198895edbSChuck Lever u64 offset 146298895edbSChuck Lever ), 146398895edbSChuck Lever 146498895edbSChuck Lever TP_ARGS(handle, length, offset), 146598895edbSChuck Lever 146698895edbSChuck Lever TP_STRUCT__entry( 146798895edbSChuck Lever __field(u32, handle) 146898895edbSChuck Lever __field(u32, length) 146998895edbSChuck Lever __field(u64, offset) 147098895edbSChuck Lever ), 147198895edbSChuck Lever 147298895edbSChuck Lever TP_fast_assign( 147398895edbSChuck Lever __entry->handle = handle; 147498895edbSChuck Lever __entry->length = length; 147598895edbSChuck Lever __entry->offset = offset; 147698895edbSChuck Lever ), 147798895edbSChuck Lever 147898895edbSChuck Lever TP_printk("%u@0x%016llx:0x%08x", 147998895edbSChuck Lever __entry->length, (unsigned long long)__entry->offset, 148098895edbSChuck Lever __entry->handle 148198895edbSChuck Lever ) 148298895edbSChuck Lever ); 148398895edbSChuck Lever 148498895edbSChuck Lever #define DEFINE_SEGMENT_EVENT(name) \ 1485e604aad2SChuck Lever DEFINE_EVENT(svcrdma_segment_event, svcrdma_##name,\ 148698895edbSChuck Lever TP_PROTO( \ 148798895edbSChuck Lever u32 handle, \ 148898895edbSChuck Lever u32 length, \ 148998895edbSChuck Lever u64 offset \ 149098895edbSChuck Lever ), \ 149198895edbSChuck Lever TP_ARGS(handle, length, offset)) 149298895edbSChuck Lever 1493e604aad2SChuck Lever DEFINE_SEGMENT_EVENT(decode_wseg); 1494e604aad2SChuck Lever DEFINE_SEGMENT_EVENT(encode_rseg); 1495a406c563SChuck Lever DEFINE_SEGMENT_EVENT(send_rseg); 1496e604aad2SChuck Lever DEFINE_SEGMENT_EVENT(encode_wseg); 1497a406c563SChuck Lever DEFINE_SEGMENT_EVENT(send_wseg); 149898895edbSChuck Lever 149998895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_chunk_event, 150098895edbSChuck Lever TP_PROTO( 150198895edbSChuck Lever u32 length 150298895edbSChuck Lever ), 150398895edbSChuck Lever 150498895edbSChuck Lever TP_ARGS(length), 150598895edbSChuck Lever 150698895edbSChuck Lever TP_STRUCT__entry( 150798895edbSChuck Lever __field(u32, length) 150898895edbSChuck Lever ), 150998895edbSChuck Lever 151098895edbSChuck Lever TP_fast_assign( 151198895edbSChuck Lever __entry->length = length; 151298895edbSChuck Lever ), 151398895edbSChuck Lever 151498895edbSChuck Lever TP_printk("length=%u", 151598895edbSChuck Lever __entry->length 151698895edbSChuck Lever ) 151798895edbSChuck Lever ); 151898895edbSChuck Lever 151998895edbSChuck Lever #define DEFINE_CHUNK_EVENT(name) \ 1520a406c563SChuck Lever DEFINE_EVENT(svcrdma_chunk_event, svcrdma_##name, \ 152198895edbSChuck Lever TP_PROTO( \ 152298895edbSChuck Lever u32 length \ 152398895edbSChuck Lever ), \ 152498895edbSChuck Lever TP_ARGS(length)) 152598895edbSChuck Lever 1526a406c563SChuck Lever DEFINE_CHUNK_EVENT(send_pzr); 1527a406c563SChuck Lever DEFINE_CHUNK_EVENT(encode_write_chunk); 1528a406c563SChuck Lever DEFINE_CHUNK_EVENT(send_write_chunk); 1529a406c563SChuck Lever DEFINE_CHUNK_EVENT(encode_read_chunk); 1530a406c563SChuck Lever DEFINE_CHUNK_EVENT(send_reply_chunk); 153198895edbSChuck Lever 1532a406c563SChuck Lever TRACE_EVENT(svcrdma_send_read_chunk, 153398895edbSChuck Lever TP_PROTO( 153498895edbSChuck Lever u32 length, 153598895edbSChuck Lever u32 position 153698895edbSChuck Lever ), 153798895edbSChuck Lever 153898895edbSChuck Lever TP_ARGS(length, position), 153998895edbSChuck Lever 154098895edbSChuck Lever TP_STRUCT__entry( 154198895edbSChuck Lever __field(u32, length) 154298895edbSChuck Lever __field(u32, position) 154398895edbSChuck Lever ), 154498895edbSChuck Lever 154598895edbSChuck Lever TP_fast_assign( 154698895edbSChuck Lever __entry->length = length; 154798895edbSChuck Lever __entry->position = position; 154898895edbSChuck Lever ), 154998895edbSChuck Lever 155098895edbSChuck Lever TP_printk("length=%u position=%u", 155198895edbSChuck Lever __entry->length, __entry->position 155298895edbSChuck Lever ) 155398895edbSChuck Lever ); 155498895edbSChuck Lever 155598895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_error_event, 155698895edbSChuck Lever TP_PROTO( 155798895edbSChuck Lever __be32 xid 155898895edbSChuck Lever ), 155998895edbSChuck Lever 156098895edbSChuck Lever TP_ARGS(xid), 156198895edbSChuck Lever 156298895edbSChuck Lever TP_STRUCT__entry( 156398895edbSChuck Lever __field(u32, xid) 156498895edbSChuck Lever ), 156598895edbSChuck Lever 156698895edbSChuck Lever TP_fast_assign( 156798895edbSChuck Lever __entry->xid = be32_to_cpu(xid); 156898895edbSChuck Lever ), 156998895edbSChuck Lever 157098895edbSChuck Lever TP_printk("xid=0x%08x", 157198895edbSChuck Lever __entry->xid 157298895edbSChuck Lever ) 157398895edbSChuck Lever ); 157498895edbSChuck Lever 157598895edbSChuck Lever #define DEFINE_ERROR_EVENT(name) \ 157698895edbSChuck Lever DEFINE_EVENT(svcrdma_error_event, svcrdma_err_##name, \ 157798895edbSChuck Lever TP_PROTO( \ 157898895edbSChuck Lever __be32 xid \ 157998895edbSChuck Lever ), \ 158098895edbSChuck Lever TP_ARGS(xid)) 158198895edbSChuck Lever 158298895edbSChuck Lever DEFINE_ERROR_EVENT(vers); 158398895edbSChuck Lever DEFINE_ERROR_EVENT(chunk); 158498895edbSChuck Lever 1585bd2abef3SChuck Lever /** 1586bd2abef3SChuck Lever ** Server-side RDMA API events 1587bd2abef3SChuck Lever **/ 1588bd2abef3SChuck Lever 1589832b2cb9SChuck Lever DECLARE_EVENT_CLASS(svcrdma_dma_map_class, 1590bd2abef3SChuck Lever TP_PROTO( 1591bd2abef3SChuck Lever const struct svcxprt_rdma *rdma, 1592832b2cb9SChuck Lever u64 dma_addr, 1593832b2cb9SChuck Lever u32 length 1594bd2abef3SChuck Lever ), 1595bd2abef3SChuck Lever 1596832b2cb9SChuck Lever TP_ARGS(rdma, dma_addr, length), 1597bd2abef3SChuck Lever 1598bd2abef3SChuck Lever TP_STRUCT__entry( 1599832b2cb9SChuck Lever __field(u64, dma_addr) 1600832b2cb9SChuck Lever __field(u32, length) 1601bd2abef3SChuck Lever __string(device, rdma->sc_cm_id->device->name) 1602bd2abef3SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1603bd2abef3SChuck Lever ), 1604bd2abef3SChuck Lever 1605bd2abef3SChuck Lever TP_fast_assign( 1606832b2cb9SChuck Lever __entry->dma_addr = dma_addr; 1607832b2cb9SChuck Lever __entry->length = length; 1608bd2abef3SChuck Lever __assign_str(device, rdma->sc_cm_id->device->name); 1609bd2abef3SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1610bd2abef3SChuck Lever ), 1611bd2abef3SChuck Lever 1612832b2cb9SChuck Lever TP_printk("addr=%s device=%s dma_addr=%llu length=%u", 1613832b2cb9SChuck Lever __get_str(addr), __get_str(device), 1614832b2cb9SChuck Lever __entry->dma_addr, __entry->length 1615bd2abef3SChuck Lever ) 1616bd2abef3SChuck Lever ); 1617bd2abef3SChuck Lever 1618832b2cb9SChuck Lever #define DEFINE_SVC_DMA_EVENT(name) \ 1619832b2cb9SChuck Lever DEFINE_EVENT(svcrdma_dma_map_class, svcrdma_##name, \ 1620832b2cb9SChuck Lever TP_PROTO( \ 1621832b2cb9SChuck Lever const struct svcxprt_rdma *rdma,\ 1622832b2cb9SChuck Lever u64 dma_addr, \ 1623832b2cb9SChuck Lever u32 length \ 1624832b2cb9SChuck Lever ), \ 1625832b2cb9SChuck Lever TP_ARGS(rdma, dma_addr, length)) 1626832b2cb9SChuck Lever 1627832b2cb9SChuck Lever DEFINE_SVC_DMA_EVENT(dma_map_page); 1628832b2cb9SChuck Lever DEFINE_SVC_DMA_EVENT(dma_unmap_page); 1629832b2cb9SChuck Lever 16302abfbe7eSChuck Lever TRACE_EVENT(svcrdma_dma_map_rw_err, 1631bd2abef3SChuck Lever TP_PROTO( 1632bd2abef3SChuck Lever const struct svcxprt_rdma *rdma, 16332abfbe7eSChuck Lever unsigned int nents, 1634bd2abef3SChuck Lever int status 1635bd2abef3SChuck Lever ), 1636bd2abef3SChuck Lever 16372abfbe7eSChuck Lever TP_ARGS(rdma, nents, status), 1638bd2abef3SChuck Lever 1639bd2abef3SChuck Lever TP_STRUCT__entry( 1640bd2abef3SChuck Lever __field(int, status) 16412abfbe7eSChuck Lever __field(unsigned int, nents) 1642bd2abef3SChuck Lever __string(device, rdma->sc_cm_id->device->name) 1643bd2abef3SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1644bd2abef3SChuck Lever ), 1645bd2abef3SChuck Lever 1646bd2abef3SChuck Lever TP_fast_assign( 1647bd2abef3SChuck Lever __entry->status = status; 16482abfbe7eSChuck Lever __entry->nents = nents; 1649bd2abef3SChuck Lever __assign_str(device, rdma->sc_cm_id->device->name); 1650bd2abef3SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1651bd2abef3SChuck Lever ), 1652bd2abef3SChuck Lever 16532abfbe7eSChuck Lever TP_printk("addr=%s device=%s nents=%u status=%d", 16542abfbe7eSChuck Lever __get_str(addr), __get_str(device), __entry->nents, 16552abfbe7eSChuck Lever __entry->status 1656bd2abef3SChuck Lever ) 1657bd2abef3SChuck Lever ); 1658bd2abef3SChuck Lever 1659f4e53e1cSChuck Lever TRACE_EVENT(svcrdma_no_rwctx_err, 1660f4e53e1cSChuck Lever TP_PROTO( 1661f4e53e1cSChuck Lever const struct svcxprt_rdma *rdma, 1662f4e53e1cSChuck Lever unsigned int num_sges 1663f4e53e1cSChuck Lever ), 1664f4e53e1cSChuck Lever 1665f4e53e1cSChuck Lever TP_ARGS(rdma, num_sges), 1666f4e53e1cSChuck Lever 1667f4e53e1cSChuck Lever TP_STRUCT__entry( 1668f4e53e1cSChuck Lever __field(unsigned int, num_sges) 1669f4e53e1cSChuck Lever __string(device, rdma->sc_cm_id->device->name) 1670f4e53e1cSChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1671f4e53e1cSChuck Lever ), 1672f4e53e1cSChuck Lever 1673f4e53e1cSChuck Lever TP_fast_assign( 1674f4e53e1cSChuck Lever __entry->num_sges = num_sges; 1675f4e53e1cSChuck Lever __assign_str(device, rdma->sc_cm_id->device->name); 1676f4e53e1cSChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1677f4e53e1cSChuck Lever ), 1678f4e53e1cSChuck Lever 1679f4e53e1cSChuck Lever TP_printk("addr=%s device=%s num_sges=%d", 1680f4e53e1cSChuck Lever __get_str(addr), __get_str(device), __entry->num_sges 1681f4e53e1cSChuck Lever ) 1682f4e53e1cSChuck Lever ); 1683f4e53e1cSChuck Lever 16849d200638SChuck Lever TRACE_EVENT(svcrdma_page_overrun_err, 16859d200638SChuck Lever TP_PROTO( 16869d200638SChuck Lever const struct svcxprt_rdma *rdma, 16879d200638SChuck Lever const struct svc_rqst *rqst, 16889d200638SChuck Lever unsigned int pageno 16899d200638SChuck Lever ), 16909d200638SChuck Lever 16919d200638SChuck Lever TP_ARGS(rdma, rqst, pageno), 16929d200638SChuck Lever 16939d200638SChuck Lever TP_STRUCT__entry( 16949d200638SChuck Lever __field(unsigned int, pageno) 16959d200638SChuck Lever __field(u32, xid) 16969d200638SChuck Lever __string(device, rdma->sc_cm_id->device->name) 16979d200638SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 16989d200638SChuck Lever ), 16999d200638SChuck Lever 17009d200638SChuck Lever TP_fast_assign( 17019d200638SChuck Lever __entry->pageno = pageno; 17029d200638SChuck Lever __entry->xid = __be32_to_cpu(rqst->rq_xid); 17039d200638SChuck Lever __assign_str(device, rdma->sc_cm_id->device->name); 17049d200638SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 17059d200638SChuck Lever ), 17069d200638SChuck Lever 17079d200638SChuck Lever TP_printk("addr=%s device=%s xid=0x%08x pageno=%u", __get_str(addr), 17089d200638SChuck Lever __get_str(device), __entry->xid, __entry->pageno 17099d200638SChuck Lever ) 17109d200638SChuck Lever ); 17119d200638SChuck Lever 1712dbc17acdSChuck Lever TRACE_EVENT(svcrdma_small_wrch_err, 1713dbc17acdSChuck Lever TP_PROTO( 1714dbc17acdSChuck Lever const struct svcxprt_rdma *rdma, 1715dbc17acdSChuck Lever unsigned int remaining, 1716dbc17acdSChuck Lever unsigned int seg_no, 1717dbc17acdSChuck Lever unsigned int num_segs 1718dbc17acdSChuck Lever ), 1719dbc17acdSChuck Lever 1720dbc17acdSChuck Lever TP_ARGS(rdma, remaining, seg_no, num_segs), 1721dbc17acdSChuck Lever 1722dbc17acdSChuck Lever TP_STRUCT__entry( 1723dbc17acdSChuck Lever __field(unsigned int, remaining) 1724dbc17acdSChuck Lever __field(unsigned int, seg_no) 1725dbc17acdSChuck Lever __field(unsigned int, num_segs) 1726dbc17acdSChuck Lever __string(device, rdma->sc_cm_id->device->name) 1727dbc17acdSChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1728dbc17acdSChuck Lever ), 1729dbc17acdSChuck Lever 1730dbc17acdSChuck Lever TP_fast_assign( 1731dbc17acdSChuck Lever __entry->remaining = remaining; 1732dbc17acdSChuck Lever __entry->seg_no = seg_no; 1733dbc17acdSChuck Lever __entry->num_segs = num_segs; 1734dbc17acdSChuck Lever __assign_str(device, rdma->sc_cm_id->device->name); 1735dbc17acdSChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1736dbc17acdSChuck Lever ), 1737dbc17acdSChuck Lever 1738dbc17acdSChuck Lever TP_printk("addr=%s device=%s remaining=%u seg_no=%u num_segs=%u", 1739dbc17acdSChuck Lever __get_str(addr), __get_str(device), __entry->remaining, 1740dbc17acdSChuck Lever __entry->seg_no, __entry->num_segs 1741dbc17acdSChuck Lever ) 1742dbc17acdSChuck Lever ); 1743dbc17acdSChuck Lever 17440dabe948SChuck Lever TRACE_EVENT(svcrdma_send_pullup, 17450dabe948SChuck Lever TP_PROTO( 17460dabe948SChuck Lever unsigned int len 17470dabe948SChuck Lever ), 17480dabe948SChuck Lever 17490dabe948SChuck Lever TP_ARGS(len), 17500dabe948SChuck Lever 17510dabe948SChuck Lever TP_STRUCT__entry( 17520dabe948SChuck Lever __field(unsigned int, len) 17530dabe948SChuck Lever ), 17540dabe948SChuck Lever 17550dabe948SChuck Lever TP_fast_assign( 17560dabe948SChuck Lever __entry->len = len; 17570dabe948SChuck Lever ), 17580dabe948SChuck Lever 17590dabe948SChuck Lever TP_printk("len=%u", __entry->len) 17600dabe948SChuck Lever ); 17610dabe948SChuck Lever 17623f8f25c6SChuck Lever TRACE_EVENT(svcrdma_send_err, 1763bd2abef3SChuck Lever TP_PROTO( 1764bd2abef3SChuck Lever const struct svc_rqst *rqst, 1765bd2abef3SChuck Lever int status 1766bd2abef3SChuck Lever ), 1767bd2abef3SChuck Lever 1768bd2abef3SChuck Lever TP_ARGS(rqst, status), 1769bd2abef3SChuck Lever 1770bd2abef3SChuck Lever TP_STRUCT__entry( 1771bd2abef3SChuck Lever __field(int, status) 1772bd2abef3SChuck Lever __field(u32, xid) 1773bd2abef3SChuck Lever __string(addr, rqst->rq_xprt->xpt_remotebuf) 1774bd2abef3SChuck Lever ), 1775bd2abef3SChuck Lever 1776bd2abef3SChuck Lever TP_fast_assign( 1777bd2abef3SChuck Lever __entry->status = status; 1778bd2abef3SChuck Lever __entry->xid = __be32_to_cpu(rqst->rq_xid); 1779bd2abef3SChuck Lever __assign_str(addr, rqst->rq_xprt->xpt_remotebuf); 1780bd2abef3SChuck Lever ), 1781bd2abef3SChuck Lever 17823f8f25c6SChuck Lever TP_printk("addr=%s xid=0x%08x status=%d", __get_str(addr), 1783bd2abef3SChuck Lever __entry->xid, __entry->status 1784bd2abef3SChuck Lever ) 1785bd2abef3SChuck Lever ); 1786bd2abef3SChuck Lever 1787bd2abef3SChuck Lever DECLARE_EVENT_CLASS(svcrdma_sendcomp_event, 1788bd2abef3SChuck Lever TP_PROTO( 1789bd2abef3SChuck Lever const struct ib_wc *wc 1790bd2abef3SChuck Lever ), 1791bd2abef3SChuck Lever 1792bd2abef3SChuck Lever TP_ARGS(wc), 1793bd2abef3SChuck Lever 1794bd2abef3SChuck Lever TP_STRUCT__entry( 1795bd2abef3SChuck Lever __field(const void *, cqe) 1796bd2abef3SChuck Lever __field(unsigned int, status) 1797bd2abef3SChuck Lever __field(unsigned int, vendor_err) 1798bd2abef3SChuck Lever ), 1799bd2abef3SChuck Lever 1800bd2abef3SChuck Lever TP_fast_assign( 1801bd2abef3SChuck Lever __entry->cqe = wc->wr_cqe; 1802bd2abef3SChuck Lever __entry->status = wc->status; 1803bd2abef3SChuck Lever if (wc->status) 1804bd2abef3SChuck Lever __entry->vendor_err = wc->vendor_err; 1805bd2abef3SChuck Lever else 1806bd2abef3SChuck Lever __entry->vendor_err = 0; 1807bd2abef3SChuck Lever ), 1808bd2abef3SChuck Lever 1809bd2abef3SChuck Lever TP_printk("cqe=%p status=%s (%u/0x%x)", 1810bd2abef3SChuck Lever __entry->cqe, rdma_show_wc_status(__entry->status), 1811bd2abef3SChuck Lever __entry->status, __entry->vendor_err 1812bd2abef3SChuck Lever ) 1813bd2abef3SChuck Lever ); 1814bd2abef3SChuck Lever 1815bd2abef3SChuck Lever #define DEFINE_SENDCOMP_EVENT(name) \ 1816bd2abef3SChuck Lever DEFINE_EVENT(svcrdma_sendcomp_event, svcrdma_wc_##name, \ 1817bd2abef3SChuck Lever TP_PROTO( \ 1818bd2abef3SChuck Lever const struct ib_wc *wc \ 1819bd2abef3SChuck Lever ), \ 1820bd2abef3SChuck Lever TP_ARGS(wc)) 1821bd2abef3SChuck Lever 1822bd2abef3SChuck Lever TRACE_EVENT(svcrdma_post_send, 1823bd2abef3SChuck Lever TP_PROTO( 1824e28b4fc6SChuck Lever const struct ib_send_wr *wr 1825bd2abef3SChuck Lever ), 1826bd2abef3SChuck Lever 1827e28b4fc6SChuck Lever TP_ARGS(wr), 1828bd2abef3SChuck Lever 1829bd2abef3SChuck Lever TP_STRUCT__entry( 1830bd2abef3SChuck Lever __field(const void *, cqe) 1831bd2abef3SChuck Lever __field(unsigned int, num_sge) 1832bd2abef3SChuck Lever __field(u32, inv_rkey) 1833bd2abef3SChuck Lever ), 1834bd2abef3SChuck Lever 1835bd2abef3SChuck Lever TP_fast_assign( 1836bd2abef3SChuck Lever __entry->cqe = wr->wr_cqe; 1837bd2abef3SChuck Lever __entry->num_sge = wr->num_sge; 1838bd2abef3SChuck Lever __entry->inv_rkey = (wr->opcode == IB_WR_SEND_WITH_INV) ? 1839bd2abef3SChuck Lever wr->ex.invalidate_rkey : 0; 1840bd2abef3SChuck Lever ), 1841bd2abef3SChuck Lever 1842e28b4fc6SChuck Lever TP_printk("cqe=%p num_sge=%u inv_rkey=0x%08x", 1843bd2abef3SChuck Lever __entry->cqe, __entry->num_sge, 1844e28b4fc6SChuck Lever __entry->inv_rkey 1845bd2abef3SChuck Lever ) 1846bd2abef3SChuck Lever ); 1847bd2abef3SChuck Lever 1848bd2abef3SChuck Lever DEFINE_SENDCOMP_EVENT(send); 1849bd2abef3SChuck Lever 1850bd2abef3SChuck Lever TRACE_EVENT(svcrdma_post_recv, 1851bd2abef3SChuck Lever TP_PROTO( 1852bd2abef3SChuck Lever const struct ib_recv_wr *wr, 1853bd2abef3SChuck Lever int status 1854bd2abef3SChuck Lever ), 1855bd2abef3SChuck Lever 1856bd2abef3SChuck Lever TP_ARGS(wr, status), 1857bd2abef3SChuck Lever 1858bd2abef3SChuck Lever TP_STRUCT__entry( 1859bd2abef3SChuck Lever __field(const void *, cqe) 1860bd2abef3SChuck Lever __field(int, status) 1861bd2abef3SChuck Lever ), 1862bd2abef3SChuck Lever 1863bd2abef3SChuck Lever TP_fast_assign( 1864bd2abef3SChuck Lever __entry->cqe = wr->wr_cqe; 1865bd2abef3SChuck Lever __entry->status = status; 1866bd2abef3SChuck Lever ), 1867bd2abef3SChuck Lever 1868bd2abef3SChuck Lever TP_printk("cqe=%p status=%d", 1869bd2abef3SChuck Lever __entry->cqe, __entry->status 1870bd2abef3SChuck Lever ) 1871bd2abef3SChuck Lever ); 1872bd2abef3SChuck Lever 1873bd2abef3SChuck Lever TRACE_EVENT(svcrdma_wc_receive, 1874bd2abef3SChuck Lever TP_PROTO( 1875bd2abef3SChuck Lever const struct ib_wc *wc 1876bd2abef3SChuck Lever ), 1877bd2abef3SChuck Lever 1878bd2abef3SChuck Lever TP_ARGS(wc), 1879bd2abef3SChuck Lever 1880bd2abef3SChuck Lever TP_STRUCT__entry( 1881bd2abef3SChuck Lever __field(const void *, cqe) 1882bd2abef3SChuck Lever __field(u32, byte_len) 1883bd2abef3SChuck Lever __field(unsigned int, status) 1884bd2abef3SChuck Lever __field(u32, vendor_err) 1885bd2abef3SChuck Lever ), 1886bd2abef3SChuck Lever 1887bd2abef3SChuck Lever TP_fast_assign( 1888bd2abef3SChuck Lever __entry->cqe = wc->wr_cqe; 1889bd2abef3SChuck Lever __entry->status = wc->status; 1890bd2abef3SChuck Lever if (wc->status) { 1891bd2abef3SChuck Lever __entry->byte_len = 0; 1892bd2abef3SChuck Lever __entry->vendor_err = wc->vendor_err; 1893bd2abef3SChuck Lever } else { 1894bd2abef3SChuck Lever __entry->byte_len = wc->byte_len; 1895bd2abef3SChuck Lever __entry->vendor_err = 0; 1896bd2abef3SChuck Lever } 1897bd2abef3SChuck Lever ), 1898bd2abef3SChuck Lever 1899bd2abef3SChuck Lever TP_printk("cqe=%p byte_len=%u status=%s (%u/0x%x)", 1900bd2abef3SChuck Lever __entry->cqe, __entry->byte_len, 1901bd2abef3SChuck Lever rdma_show_wc_status(__entry->status), 1902bd2abef3SChuck Lever __entry->status, __entry->vendor_err 1903bd2abef3SChuck Lever ) 1904bd2abef3SChuck Lever ); 1905bd2abef3SChuck Lever 1906bd2abef3SChuck Lever TRACE_EVENT(svcrdma_post_rw, 1907bd2abef3SChuck Lever TP_PROTO( 1908bd2abef3SChuck Lever const void *cqe, 1909e28b4fc6SChuck Lever int sqecount 1910bd2abef3SChuck Lever ), 1911bd2abef3SChuck Lever 1912e28b4fc6SChuck Lever TP_ARGS(cqe, sqecount), 1913bd2abef3SChuck Lever 1914bd2abef3SChuck Lever TP_STRUCT__entry( 1915bd2abef3SChuck Lever __field(const void *, cqe) 1916bd2abef3SChuck Lever __field(int, sqecount) 1917bd2abef3SChuck Lever ), 1918bd2abef3SChuck Lever 1919bd2abef3SChuck Lever TP_fast_assign( 1920bd2abef3SChuck Lever __entry->cqe = cqe; 1921bd2abef3SChuck Lever __entry->sqecount = sqecount; 1922bd2abef3SChuck Lever ), 1923bd2abef3SChuck Lever 1924e28b4fc6SChuck Lever TP_printk("cqe=%p sqecount=%d", 1925e28b4fc6SChuck Lever __entry->cqe, __entry->sqecount 1926bd2abef3SChuck Lever ) 1927bd2abef3SChuck Lever ); 1928bd2abef3SChuck Lever 1929bd2abef3SChuck Lever DEFINE_SENDCOMP_EVENT(read); 1930bd2abef3SChuck Lever DEFINE_SENDCOMP_EVENT(write); 1931bd2abef3SChuck Lever 1932bd2abef3SChuck Lever TRACE_EVENT(svcrdma_qp_error, 1933bd2abef3SChuck Lever TP_PROTO( 1934bd2abef3SChuck Lever const struct ib_event *event, 1935bd2abef3SChuck Lever const struct sockaddr *sap 1936bd2abef3SChuck Lever ), 1937bd2abef3SChuck Lever 1938bd2abef3SChuck Lever TP_ARGS(event, sap), 1939bd2abef3SChuck Lever 1940bd2abef3SChuck Lever TP_STRUCT__entry( 1941bd2abef3SChuck Lever __field(unsigned int, event) 1942bd2abef3SChuck Lever __string(device, event->device->name) 1943bd2abef3SChuck Lever __array(__u8, addr, INET6_ADDRSTRLEN + 10) 1944bd2abef3SChuck Lever ), 1945bd2abef3SChuck Lever 1946bd2abef3SChuck Lever TP_fast_assign( 1947bd2abef3SChuck Lever __entry->event = event->event; 1948bd2abef3SChuck Lever __assign_str(device, event->device->name); 1949bd2abef3SChuck Lever snprintf(__entry->addr, sizeof(__entry->addr) - 1, 1950bd2abef3SChuck Lever "%pISpc", sap); 1951bd2abef3SChuck Lever ), 1952bd2abef3SChuck Lever 1953bd2abef3SChuck Lever TP_printk("addr=%s dev=%s event=%s (%u)", 1954bd2abef3SChuck Lever __entry->addr, __get_str(device), 1955bd2abef3SChuck Lever rdma_show_ib_event(__entry->event), __entry->event 1956bd2abef3SChuck Lever ) 1957bd2abef3SChuck Lever ); 1958bd2abef3SChuck Lever 1959bd2abef3SChuck Lever DECLARE_EVENT_CLASS(svcrdma_sendqueue_event, 1960bd2abef3SChuck Lever TP_PROTO( 1961bd2abef3SChuck Lever const struct svcxprt_rdma *rdma 1962bd2abef3SChuck Lever ), 1963bd2abef3SChuck Lever 1964bd2abef3SChuck Lever TP_ARGS(rdma), 1965bd2abef3SChuck Lever 1966bd2abef3SChuck Lever TP_STRUCT__entry( 1967bd2abef3SChuck Lever __field(int, avail) 1968bd2abef3SChuck Lever __field(int, depth) 1969bd2abef3SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1970bd2abef3SChuck Lever ), 1971bd2abef3SChuck Lever 1972bd2abef3SChuck Lever TP_fast_assign( 1973bd2abef3SChuck Lever __entry->avail = atomic_read(&rdma->sc_sq_avail); 1974bd2abef3SChuck Lever __entry->depth = rdma->sc_sq_depth; 1975bd2abef3SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1976bd2abef3SChuck Lever ), 1977bd2abef3SChuck Lever 1978bd2abef3SChuck Lever TP_printk("addr=%s sc_sq_avail=%d/%d", 1979bd2abef3SChuck Lever __get_str(addr), __entry->avail, __entry->depth 1980bd2abef3SChuck Lever ) 1981bd2abef3SChuck Lever ); 1982bd2abef3SChuck Lever 1983bd2abef3SChuck Lever #define DEFINE_SQ_EVENT(name) \ 1984bd2abef3SChuck Lever DEFINE_EVENT(svcrdma_sendqueue_event, svcrdma_sq_##name,\ 1985bd2abef3SChuck Lever TP_PROTO( \ 1986bd2abef3SChuck Lever const struct svcxprt_rdma *rdma \ 1987bd2abef3SChuck Lever ), \ 1988bd2abef3SChuck Lever TP_ARGS(rdma)) 1989bd2abef3SChuck Lever 1990bd2abef3SChuck Lever DEFINE_SQ_EVENT(full); 1991bd2abef3SChuck Lever DEFINE_SQ_EVENT(retry); 1992bd2abef3SChuck Lever 1993e28b4fc6SChuck Lever TRACE_EVENT(svcrdma_sq_post_err, 1994e28b4fc6SChuck Lever TP_PROTO( 1995e28b4fc6SChuck Lever const struct svcxprt_rdma *rdma, 1996e28b4fc6SChuck Lever int status 1997e28b4fc6SChuck Lever ), 1998e28b4fc6SChuck Lever 1999e28b4fc6SChuck Lever TP_ARGS(rdma, status), 2000e28b4fc6SChuck Lever 2001e28b4fc6SChuck Lever TP_STRUCT__entry( 2002e28b4fc6SChuck Lever __field(int, avail) 2003e28b4fc6SChuck Lever __field(int, depth) 2004e28b4fc6SChuck Lever __field(int, status) 2005e28b4fc6SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 2006e28b4fc6SChuck Lever ), 2007e28b4fc6SChuck Lever 2008e28b4fc6SChuck Lever TP_fast_assign( 2009e28b4fc6SChuck Lever __entry->avail = atomic_read(&rdma->sc_sq_avail); 2010e28b4fc6SChuck Lever __entry->depth = rdma->sc_sq_depth; 2011e28b4fc6SChuck Lever __entry->status = status; 2012e28b4fc6SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 2013e28b4fc6SChuck Lever ), 2014e28b4fc6SChuck Lever 2015e28b4fc6SChuck Lever TP_printk("addr=%s sc_sq_avail=%d/%d status=%d", 2016e28b4fc6SChuck Lever __get_str(addr), __entry->avail, __entry->depth, 2017e28b4fc6SChuck Lever __entry->status 2018e28b4fc6SChuck Lever ) 2019e28b4fc6SChuck Lever ); 2020e28b4fc6SChuck Lever 2021e48f083eSChuck Lever #endif /* _TRACE_RPCRDMA_H */ 2022e48f083eSChuck Lever 2023e48f083eSChuck Lever #include <trace/define_trace.h> 2024