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 63*3a9568feSChuck Lever DECLARE_EVENT_CLASS(xprtrdma_reply_class, 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(u32, xid) 72b4a7f91cSChuck Lever __field(u32, version) 73b4a7f91cSChuck Lever __field(u32, proc) 74*3a9568feSChuck Lever __string(addr, rpcrdma_addrstr(rep->rr_rxprt)) 75*3a9568feSChuck Lever __string(port, rpcrdma_portstr(rep->rr_rxprt)) 76b4a7f91cSChuck Lever ), 77b4a7f91cSChuck Lever 78b4a7f91cSChuck Lever TP_fast_assign( 79b4a7f91cSChuck Lever __entry->xid = be32_to_cpu(rep->rr_xid); 80b4a7f91cSChuck Lever __entry->version = be32_to_cpu(rep->rr_vers); 81b4a7f91cSChuck Lever __entry->proc = be32_to_cpu(rep->rr_proc); 82*3a9568feSChuck Lever __assign_str(addr, rpcrdma_addrstr(rep->rr_rxprt)); 83*3a9568feSChuck Lever __assign_str(port, rpcrdma_portstr(rep->rr_rxprt)); 84b4a7f91cSChuck Lever ), 85b4a7f91cSChuck Lever 86*3a9568feSChuck Lever TP_printk("peer=[%s]:%s xid=0x%08x version=%u proc=%u", 87*3a9568feSChuck Lever __get_str(addr), __get_str(port), 88*3a9568feSChuck Lever __entry->xid, __entry->version, __entry->proc 89b4a7f91cSChuck Lever ) 90b4a7f91cSChuck Lever ); 91b4a7f91cSChuck Lever 92b4a7f91cSChuck Lever #define DEFINE_REPLY_EVENT(name) \ 93*3a9568feSChuck Lever DEFINE_EVENT(xprtrdma_reply_class, \ 94*3a9568feSChuck Lever xprtrdma_reply_##name##_err, \ 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 265aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_BIDIRECTIONAL); 266aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_TO_DEVICE); 267aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_FROM_DEVICE); 268aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_NONE); 269aba11831SChuck Lever 270aba11831SChuck Lever #define xprtrdma_show_direction(x) \ 271aba11831SChuck Lever __print_symbolic(x, \ 272aba11831SChuck Lever { DMA_BIDIRECTIONAL, "BIDIR" }, \ 273aba11831SChuck Lever { DMA_TO_DEVICE, "TO_DEVICE" }, \ 274aba11831SChuck Lever { DMA_FROM_DEVICE, "FROM_DEVICE" }, \ 275aba11831SChuck Lever { DMA_NONE, "NONE" }) 276aba11831SChuck Lever 2772937fedeSChuck Lever DECLARE_EVENT_CLASS(xprtrdma_mr, 2782937fedeSChuck Lever TP_PROTO( 2792937fedeSChuck Lever const struct rpcrdma_mr *mr 2802937fedeSChuck Lever ), 2812937fedeSChuck Lever 2822937fedeSChuck Lever TP_ARGS(mr), 2832937fedeSChuck Lever 2842937fedeSChuck Lever TP_STRUCT__entry( 28562a89501SChuck Lever __field(u32, mr_id) 28662a89501SChuck Lever __field(int, nents) 2872937fedeSChuck Lever __field(u32, handle) 2882937fedeSChuck Lever __field(u32, length) 2892937fedeSChuck Lever __field(u64, offset) 290aba11831SChuck Lever __field(u32, dir) 2912937fedeSChuck Lever ), 2922937fedeSChuck Lever 2932937fedeSChuck Lever TP_fast_assign( 29462a89501SChuck Lever __entry->mr_id = mr->frwr.fr_mr->res.id; 29562a89501SChuck Lever __entry->nents = mr->mr_nents; 2962937fedeSChuck Lever __entry->handle = mr->mr_handle; 2972937fedeSChuck Lever __entry->length = mr->mr_length; 2982937fedeSChuck Lever __entry->offset = mr->mr_offset; 299aba11831SChuck Lever __entry->dir = mr->mr_dir; 3002937fedeSChuck Lever ), 3012937fedeSChuck Lever 30262a89501SChuck Lever TP_printk("mr.id=%u nents=%d %u@0x%016llx:0x%08x (%s)", 30362a89501SChuck Lever __entry->mr_id, __entry->nents, __entry->length, 304aba11831SChuck Lever (unsigned long long)__entry->offset, __entry->handle, 305aba11831SChuck Lever xprtrdma_show_direction(__entry->dir) 3062937fedeSChuck Lever ) 3072937fedeSChuck Lever ); 3082937fedeSChuck Lever 3092937fedeSChuck Lever #define DEFINE_MR_EVENT(name) \ 310d379eaa8SChuck Lever DEFINE_EVENT(xprtrdma_mr, xprtrdma_mr_##name, \ 3112937fedeSChuck Lever TP_PROTO( \ 3122937fedeSChuck Lever const struct rpcrdma_mr *mr \ 3132937fedeSChuck Lever ), \ 3142937fedeSChuck Lever TP_ARGS(mr)) 3152937fedeSChuck Lever 316fc1eb807SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_cb_event, 317fc1eb807SChuck Lever TP_PROTO( 318fc1eb807SChuck Lever const struct rpc_rqst *rqst 319fc1eb807SChuck Lever ), 320fc1eb807SChuck Lever 321fc1eb807SChuck Lever TP_ARGS(rqst), 322fc1eb807SChuck Lever 323fc1eb807SChuck Lever TP_STRUCT__entry( 324fc1eb807SChuck Lever __field(const void *, rqst) 325fc1eb807SChuck Lever __field(const void *, rep) 326fc1eb807SChuck Lever __field(const void *, req) 327fc1eb807SChuck Lever __field(u32, xid) 328fc1eb807SChuck Lever ), 329fc1eb807SChuck Lever 330fc1eb807SChuck Lever TP_fast_assign( 331fc1eb807SChuck Lever __entry->rqst = rqst; 332fc1eb807SChuck Lever __entry->req = rpcr_to_rdmar(rqst); 333fc1eb807SChuck Lever __entry->rep = rpcr_to_rdmar(rqst)->rl_reply; 334fc1eb807SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 335fc1eb807SChuck Lever ), 336fc1eb807SChuck Lever 337fc1eb807SChuck Lever TP_printk("xid=0x%08x, rqst=%p req=%p rep=%p", 338fc1eb807SChuck Lever __entry->xid, __entry->rqst, __entry->req, __entry->rep 339fc1eb807SChuck Lever ) 340fc1eb807SChuck Lever ); 341fc1eb807SChuck Lever 342fc1eb807SChuck Lever #define DEFINE_CB_EVENT(name) \ 343fc1eb807SChuck Lever DEFINE_EVENT(xprtrdma_cb_event, name, \ 344fc1eb807SChuck Lever TP_PROTO( \ 345fc1eb807SChuck Lever const struct rpc_rqst *rqst \ 346fc1eb807SChuck Lever ), \ 347fc1eb807SChuck Lever TP_ARGS(rqst)) 348fc1eb807SChuck Lever 349b4a7f91cSChuck Lever /** 350b4744e00SChuck Lever ** Connection events 351b4744e00SChuck Lever **/ 352b4744e00SChuck Lever 353f54c870dSChuck Lever TRACE_EVENT(xprtrdma_inline_thresh, 354f54c870dSChuck Lever TP_PROTO( 355745b734cSChuck Lever const struct rpcrdma_ep *ep 356f54c870dSChuck Lever ), 357f54c870dSChuck Lever 358745b734cSChuck Lever TP_ARGS(ep), 359f54c870dSChuck Lever 360f54c870dSChuck Lever TP_STRUCT__entry( 361f54c870dSChuck Lever __field(unsigned int, inline_send) 362f54c870dSChuck Lever __field(unsigned int, inline_recv) 363f54c870dSChuck Lever __field(unsigned int, max_send) 364f54c870dSChuck Lever __field(unsigned int, max_recv) 365745b734cSChuck Lever __array(unsigned char, srcaddr, sizeof(struct sockaddr_in6)) 366745b734cSChuck Lever __array(unsigned char, dstaddr, sizeof(struct sockaddr_in6)) 367f54c870dSChuck Lever ), 368f54c870dSChuck Lever 369f54c870dSChuck Lever TP_fast_assign( 370745b734cSChuck Lever const struct rdma_cm_id *id = ep->re_id; 371f54c870dSChuck Lever 37293aa8e0aSChuck Lever __entry->inline_send = ep->re_inline_send; 37393aa8e0aSChuck Lever __entry->inline_recv = ep->re_inline_recv; 37493aa8e0aSChuck Lever __entry->max_send = ep->re_max_inline_send; 37593aa8e0aSChuck Lever __entry->max_recv = ep->re_max_inline_recv; 376745b734cSChuck Lever memcpy(__entry->srcaddr, &id->route.addr.src_addr, 377745b734cSChuck Lever sizeof(struct sockaddr_in6)); 378745b734cSChuck Lever memcpy(__entry->dstaddr, &id->route.addr.dst_addr, 379745b734cSChuck Lever sizeof(struct sockaddr_in6)); 380f54c870dSChuck Lever ), 381f54c870dSChuck Lever 382745b734cSChuck Lever TP_printk("%pISpc -> %pISpc neg send/recv=%u/%u, calc send/recv=%u/%u", 383745b734cSChuck Lever __entry->srcaddr, __entry->dstaddr, 384f54c870dSChuck Lever __entry->inline_send, __entry->inline_recv, 385f54c870dSChuck Lever __entry->max_send, __entry->max_recv 386f54c870dSChuck Lever ) 387f54c870dSChuck Lever ); 388f54c870dSChuck Lever 3897b020f17SChuck Lever DEFINE_CONN_EVENT(connect); 3907b020f17SChuck Lever DEFINE_CONN_EVENT(disconnect); 3917b020f17SChuck Lever 3927b020f17SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_op_inject_dsc); 3937b020f17SChuck Lever 3947b020f17SChuck Lever TRACE_EVENT(xprtrdma_op_connect, 395b4744e00SChuck Lever TP_PROTO( 396b4744e00SChuck Lever const struct rpcrdma_xprt *r_xprt, 3977b020f17SChuck Lever unsigned long delay 398b4744e00SChuck Lever ), 399b4744e00SChuck Lever 4007b020f17SChuck Lever TP_ARGS(r_xprt, delay), 401b4744e00SChuck Lever 402b4744e00SChuck Lever TP_STRUCT__entry( 403b4744e00SChuck Lever __field(const void *, r_xprt) 4047b020f17SChuck Lever __field(unsigned long, delay) 405b4744e00SChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 406b4744e00SChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 407b4744e00SChuck Lever ), 408b4744e00SChuck Lever 409b4744e00SChuck Lever TP_fast_assign( 410b4744e00SChuck Lever __entry->r_xprt = r_xprt; 4117b020f17SChuck Lever __entry->delay = delay; 412b4744e00SChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 413b4744e00SChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 414b4744e00SChuck Lever ), 415b4744e00SChuck Lever 4167b020f17SChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p delay=%lu", 4177b020f17SChuck Lever __get_str(addr), __get_str(port), __entry->r_xprt, 4187b020f17SChuck Lever __entry->delay 419b4744e00SChuck Lever ) 420b4744e00SChuck Lever ); 421b4744e00SChuck Lever 422b4744e00SChuck Lever 423675dd90aSChuck Lever TRACE_EVENT(xprtrdma_op_set_cto, 424675dd90aSChuck Lever TP_PROTO( 425675dd90aSChuck Lever const struct rpcrdma_xprt *r_xprt, 426675dd90aSChuck Lever unsigned long connect, 427675dd90aSChuck Lever unsigned long reconnect 428675dd90aSChuck Lever ), 429675dd90aSChuck Lever 430675dd90aSChuck Lever TP_ARGS(r_xprt, connect, reconnect), 431675dd90aSChuck Lever 432675dd90aSChuck Lever TP_STRUCT__entry( 433675dd90aSChuck Lever __field(const void *, r_xprt) 434675dd90aSChuck Lever __field(unsigned long, connect) 435675dd90aSChuck Lever __field(unsigned long, reconnect) 436675dd90aSChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 437675dd90aSChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 438675dd90aSChuck Lever ), 439675dd90aSChuck Lever 440675dd90aSChuck Lever TP_fast_assign( 441675dd90aSChuck Lever __entry->r_xprt = r_xprt; 442675dd90aSChuck Lever __entry->connect = connect; 443675dd90aSChuck Lever __entry->reconnect = reconnect; 444675dd90aSChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 445675dd90aSChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 446675dd90aSChuck Lever ), 447675dd90aSChuck Lever 448675dd90aSChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: connect=%lu reconnect=%lu", 449675dd90aSChuck Lever __get_str(addr), __get_str(port), __entry->r_xprt, 450675dd90aSChuck Lever __entry->connect / HZ, __entry->reconnect / HZ 451675dd90aSChuck Lever ) 452675dd90aSChuck Lever ); 453675dd90aSChuck Lever 454f9521d53SChuck Lever TRACE_EVENT(xprtrdma_qp_event, 455643cf323SChuck Lever TP_PROTO( 456745b734cSChuck Lever const struct rpcrdma_ep *ep, 457643cf323SChuck Lever const struct ib_event *event 458643cf323SChuck Lever ), 459643cf323SChuck Lever 460745b734cSChuck Lever TP_ARGS(ep, event), 461643cf323SChuck Lever 462643cf323SChuck Lever TP_STRUCT__entry( 463745b734cSChuck Lever __field(unsigned long, event) 464643cf323SChuck Lever __string(name, event->device->name) 465745b734cSChuck Lever __array(unsigned char, srcaddr, sizeof(struct sockaddr_in6)) 466745b734cSChuck Lever __array(unsigned char, dstaddr, sizeof(struct sockaddr_in6)) 467643cf323SChuck Lever ), 468643cf323SChuck Lever 469643cf323SChuck Lever TP_fast_assign( 470745b734cSChuck Lever const struct rdma_cm_id *id = ep->re_id; 471745b734cSChuck Lever 472643cf323SChuck Lever __entry->event = event->event; 473643cf323SChuck Lever __assign_str(name, event->device->name); 474745b734cSChuck Lever memcpy(__entry->srcaddr, &id->route.addr.src_addr, 475745b734cSChuck Lever sizeof(struct sockaddr_in6)); 476745b734cSChuck Lever memcpy(__entry->dstaddr, &id->route.addr.dst_addr, 477745b734cSChuck Lever sizeof(struct sockaddr_in6)); 478643cf323SChuck Lever ), 479643cf323SChuck Lever 480745b734cSChuck Lever TP_printk("%pISpc -> %pISpc device=%s %s (%lu)", 481745b734cSChuck Lever __entry->srcaddr, __entry->dstaddr, __get_str(name), 482745b734cSChuck Lever rdma_show_ib_event(__entry->event), __entry->event 483643cf323SChuck Lever ) 484643cf323SChuck Lever ); 485643cf323SChuck Lever 486b4744e00SChuck Lever /** 487ab03eff5SChuck Lever ** Call events 488ab03eff5SChuck Lever **/ 489ab03eff5SChuck Lever 4901c443effSChuck Lever TRACE_EVENT(xprtrdma_createmrs, 4911c443effSChuck Lever TP_PROTO( 4921c443effSChuck Lever const struct rpcrdma_xprt *r_xprt, 4931c443effSChuck Lever unsigned int count 4941c443effSChuck Lever ), 4951c443effSChuck Lever 4961c443effSChuck Lever TP_ARGS(r_xprt, count), 4971c443effSChuck Lever 4981c443effSChuck Lever TP_STRUCT__entry( 4991c443effSChuck Lever __field(const void *, r_xprt) 5006dc6ec9eSChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 5016dc6ec9eSChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 5021c443effSChuck Lever __field(unsigned int, count) 5031c443effSChuck Lever ), 5041c443effSChuck Lever 5051c443effSChuck Lever TP_fast_assign( 5061c443effSChuck Lever __entry->r_xprt = r_xprt; 5071c443effSChuck Lever __entry->count = count; 5086dc6ec9eSChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 5096dc6ec9eSChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 5101c443effSChuck Lever ), 5111c443effSChuck Lever 5126dc6ec9eSChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: created %u MRs", 5136dc6ec9eSChuck Lever __get_str(addr), __get_str(port), __entry->r_xprt, 5146dc6ec9eSChuck Lever __entry->count 5156dc6ec9eSChuck Lever ) 5166dc6ec9eSChuck Lever ); 5176dc6ec9eSChuck Lever 5186dc6ec9eSChuck Lever TRACE_EVENT(xprtrdma_mr_get, 5196dc6ec9eSChuck Lever TP_PROTO( 5206dc6ec9eSChuck Lever const struct rpcrdma_req *req 5216dc6ec9eSChuck Lever ), 5226dc6ec9eSChuck Lever 5236dc6ec9eSChuck Lever TP_ARGS(req), 5246dc6ec9eSChuck Lever 5256dc6ec9eSChuck Lever TP_STRUCT__entry( 5266dc6ec9eSChuck Lever __field(const void *, req) 5276dc6ec9eSChuck Lever __field(unsigned int, task_id) 5286dc6ec9eSChuck Lever __field(unsigned int, client_id) 5296dc6ec9eSChuck Lever __field(u32, xid) 5306dc6ec9eSChuck Lever ), 5316dc6ec9eSChuck Lever 5326dc6ec9eSChuck Lever TP_fast_assign( 5336dc6ec9eSChuck Lever const struct rpc_rqst *rqst = &req->rl_slot; 5346dc6ec9eSChuck Lever 5356dc6ec9eSChuck Lever __entry->req = req; 5366dc6ec9eSChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 5376dc6ec9eSChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 5386dc6ec9eSChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 5396dc6ec9eSChuck Lever ), 5406dc6ec9eSChuck Lever 5416dc6ec9eSChuck Lever TP_printk("task:%u@%u xid=0x%08x req=%p", 5426dc6ec9eSChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 5436dc6ec9eSChuck Lever __entry->req 5441c443effSChuck Lever ) 5451c443effSChuck Lever ); 5461c443effSChuck Lever 5473b39f52aSChuck Lever TRACE_EVENT(xprtrdma_nomrs, 5483b39f52aSChuck Lever TP_PROTO( 5493b39f52aSChuck Lever const struct rpcrdma_req *req 5503b39f52aSChuck Lever ), 5513b39f52aSChuck Lever 5523b39f52aSChuck Lever TP_ARGS(req), 5533b39f52aSChuck Lever 5543b39f52aSChuck Lever TP_STRUCT__entry( 5553b39f52aSChuck Lever __field(const void *, req) 5563b39f52aSChuck Lever __field(unsigned int, task_id) 5573b39f52aSChuck Lever __field(unsigned int, client_id) 5583b39f52aSChuck Lever __field(u32, xid) 5593b39f52aSChuck Lever ), 5603b39f52aSChuck Lever 5613b39f52aSChuck Lever TP_fast_assign( 5623b39f52aSChuck Lever const struct rpc_rqst *rqst = &req->rl_slot; 5633b39f52aSChuck Lever 5643b39f52aSChuck Lever __entry->req = req; 5653b39f52aSChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 5663b39f52aSChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 5673b39f52aSChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 5683b39f52aSChuck Lever ), 5693b39f52aSChuck Lever 5703b39f52aSChuck Lever TP_printk("task:%u@%u xid=0x%08x req=%p", 5713b39f52aSChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 5723b39f52aSChuck Lever __entry->req 5733b39f52aSChuck Lever ) 5743b39f52aSChuck Lever ); 5751c443effSChuck Lever 576aba11831SChuck Lever DEFINE_RDCH_EVENT(read); 577aba11831SChuck Lever DEFINE_WRCH_EVENT(write); 578aba11831SChuck Lever DEFINE_WRCH_EVENT(reply); 57958f10ad4SChuck Lever 580ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch); 581614f3c96SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch_pullup); 582614f3c96SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch_mapped); 583ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_readch); 584ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_areadch); 585ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_writech); 586ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_replych); 587ab03eff5SChuck Lever 588ab03eff5SChuck Lever #define xprtrdma_show_chunktype(x) \ 589ab03eff5SChuck Lever __print_symbolic(x, \ 590ab03eff5SChuck Lever { rpcrdma_noch, "inline" }, \ 591614f3c96SChuck Lever { rpcrdma_noch_pullup, "pullup" }, \ 592614f3c96SChuck Lever { rpcrdma_noch_mapped, "mapped" }, \ 593ab03eff5SChuck Lever { rpcrdma_readch, "read list" }, \ 594ab03eff5SChuck Lever { rpcrdma_areadch, "*read list" }, \ 595ab03eff5SChuck Lever { rpcrdma_writech, "write list" }, \ 596ab03eff5SChuck Lever { rpcrdma_replych, "reply chunk" }) 597ab03eff5SChuck Lever 598ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_marshal, 599ab03eff5SChuck Lever TP_PROTO( 6001310051cSChuck Lever const struct rpcrdma_req *req, 601ab03eff5SChuck Lever unsigned int rtype, 602ab03eff5SChuck Lever unsigned int wtype 603ab03eff5SChuck Lever ), 604ab03eff5SChuck Lever 6051310051cSChuck Lever TP_ARGS(req, rtype, wtype), 606ab03eff5SChuck Lever 607ab03eff5SChuck Lever TP_STRUCT__entry( 608ab03eff5SChuck Lever __field(unsigned int, task_id) 609ab03eff5SChuck Lever __field(unsigned int, client_id) 610ab03eff5SChuck Lever __field(u32, xid) 611ab03eff5SChuck Lever __field(unsigned int, hdrlen) 612ab03eff5SChuck Lever __field(unsigned int, headlen) 613ab03eff5SChuck Lever __field(unsigned int, pagelen) 614ab03eff5SChuck Lever __field(unsigned int, taillen) 615ab03eff5SChuck Lever __field(unsigned int, rtype) 616ab03eff5SChuck Lever __field(unsigned int, wtype) 617ab03eff5SChuck Lever ), 618ab03eff5SChuck Lever 619ab03eff5SChuck Lever TP_fast_assign( 6201310051cSChuck Lever const struct rpc_rqst *rqst = &req->rl_slot; 6211310051cSChuck Lever 622ab03eff5SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 623ab03eff5SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 624ab03eff5SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 6251310051cSChuck Lever __entry->hdrlen = req->rl_hdrbuf.len; 626ab03eff5SChuck Lever __entry->headlen = rqst->rq_snd_buf.head[0].iov_len; 627ab03eff5SChuck Lever __entry->pagelen = rqst->rq_snd_buf.page_len; 628ab03eff5SChuck Lever __entry->taillen = rqst->rq_snd_buf.tail[0].iov_len; 629ab03eff5SChuck Lever __entry->rtype = rtype; 630ab03eff5SChuck Lever __entry->wtype = wtype; 631ab03eff5SChuck Lever ), 632ab03eff5SChuck Lever 633ab03eff5SChuck Lever TP_printk("task:%u@%u xid=0x%08x: hdr=%u xdr=%u/%u/%u %s/%s", 634ab03eff5SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 635ab03eff5SChuck Lever __entry->hdrlen, 636ab03eff5SChuck Lever __entry->headlen, __entry->pagelen, __entry->taillen, 637ab03eff5SChuck Lever xprtrdma_show_chunktype(__entry->rtype), 638ab03eff5SChuck Lever xprtrdma_show_chunktype(__entry->wtype) 639ab03eff5SChuck Lever ) 640ab03eff5SChuck Lever ); 641ab03eff5SChuck Lever 64217e4c443SChuck Lever TRACE_EVENT(xprtrdma_marshal_failed, 64317e4c443SChuck Lever TP_PROTO(const struct rpc_rqst *rqst, 64417e4c443SChuck Lever int ret 64517e4c443SChuck Lever ), 64617e4c443SChuck Lever 64717e4c443SChuck Lever TP_ARGS(rqst, ret), 64817e4c443SChuck Lever 64917e4c443SChuck Lever TP_STRUCT__entry( 65017e4c443SChuck Lever __field(unsigned int, task_id) 65117e4c443SChuck Lever __field(unsigned int, client_id) 65217e4c443SChuck Lever __field(u32, xid) 65317e4c443SChuck Lever __field(int, ret) 65417e4c443SChuck Lever ), 65517e4c443SChuck Lever 65617e4c443SChuck Lever TP_fast_assign( 65717e4c443SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 65817e4c443SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 65917e4c443SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 66017e4c443SChuck Lever __entry->ret = ret; 66117e4c443SChuck Lever ), 66217e4c443SChuck Lever 66317e4c443SChuck Lever TP_printk("task:%u@%u xid=0x%08x: ret=%d", 66417e4c443SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 66517e4c443SChuck Lever __entry->ret 66617e4c443SChuck Lever ) 66717e4c443SChuck Lever ); 66817e4c443SChuck Lever 66905eb06d8SChuck Lever TRACE_EVENT(xprtrdma_prepsend_failed, 67005eb06d8SChuck Lever TP_PROTO(const struct rpc_rqst *rqst, 67105eb06d8SChuck Lever int ret 67205eb06d8SChuck Lever ), 67305eb06d8SChuck Lever 67405eb06d8SChuck Lever TP_ARGS(rqst, ret), 67505eb06d8SChuck Lever 67605eb06d8SChuck Lever TP_STRUCT__entry( 67705eb06d8SChuck Lever __field(unsigned int, task_id) 67805eb06d8SChuck Lever __field(unsigned int, client_id) 67905eb06d8SChuck Lever __field(u32, xid) 68005eb06d8SChuck Lever __field(int, ret) 68105eb06d8SChuck Lever ), 68205eb06d8SChuck Lever 68305eb06d8SChuck Lever TP_fast_assign( 68405eb06d8SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 68505eb06d8SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 68605eb06d8SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 68705eb06d8SChuck Lever __entry->ret = ret; 68805eb06d8SChuck Lever ), 68905eb06d8SChuck Lever 69005eb06d8SChuck Lever TP_printk("task:%u@%u xid=0x%08x: ret=%d", 69105eb06d8SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 69205eb06d8SChuck Lever __entry->ret 69305eb06d8SChuck Lever ) 69405eb06d8SChuck Lever ); 69505eb06d8SChuck Lever 696ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_post_send, 697ab03eff5SChuck Lever TP_PROTO( 698bdb2ce82SChuck Lever const struct rpcrdma_req *req 699ab03eff5SChuck Lever ), 700ab03eff5SChuck Lever 701bdb2ce82SChuck Lever TP_ARGS(req), 702ab03eff5SChuck Lever 703ab03eff5SChuck Lever TP_STRUCT__entry( 704b2e7467fSChuck Lever __field(u32, cq_id) 705b2e7467fSChuck Lever __field(int, completion_id) 7060c77668dSChuck Lever __field(unsigned int, task_id) 7070c77668dSChuck Lever __field(unsigned int, client_id) 708ab03eff5SChuck Lever __field(int, num_sge) 709470443e0SChuck Lever __field(int, signaled) 710ab03eff5SChuck Lever ), 711ab03eff5SChuck Lever 712ab03eff5SChuck Lever TP_fast_assign( 7130c77668dSChuck Lever const struct rpc_rqst *rqst = &req->rl_slot; 714b2e7467fSChuck Lever const struct rpcrdma_sendctx *sc = req->rl_sendctx; 7150c77668dSChuck Lever 716b2e7467fSChuck Lever __entry->cq_id = sc->sc_cid.ci_queue_id; 717b2e7467fSChuck Lever __entry->completion_id = sc->sc_cid.ci_completion_id; 7180c77668dSChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 71910694ac9SChuck Lever __entry->client_id = rqst->rq_task->tk_client ? 72010694ac9SChuck Lever rqst->rq_task->tk_client->cl_clid : -1; 721dc15c3d5SChuck Lever __entry->num_sge = req->rl_wr.num_sge; 722dc15c3d5SChuck Lever __entry->signaled = req->rl_wr.send_flags & IB_SEND_SIGNALED; 723ab03eff5SChuck Lever ), 724ab03eff5SChuck Lever 725b2e7467fSChuck Lever TP_printk("task:%u@%u cq.id=%u cid=%d (%d SGE%s) %s", 7260c77668dSChuck Lever __entry->task_id, __entry->client_id, 727b2e7467fSChuck Lever __entry->cq_id, __entry->completion_id, 728b2e7467fSChuck Lever __entry->num_sge, (__entry->num_sge == 1 ? "" : "s"), 729bdb2ce82SChuck Lever (__entry->signaled ? "signaled" : "") 730ab03eff5SChuck Lever ) 731ab03eff5SChuck Lever ); 732ab03eff5SChuck Lever 733b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_post_recv, 734b4a7f91cSChuck Lever TP_PROTO( 7352dfdcd88SChuck Lever const struct rpcrdma_rep *rep 736b4a7f91cSChuck Lever ), 737b4a7f91cSChuck Lever 7382dfdcd88SChuck Lever TP_ARGS(rep), 739b4a7f91cSChuck Lever 740b4a7f91cSChuck Lever TP_STRUCT__entry( 741af5865d2SChuck Lever __field(u32, cq_id) 742af5865d2SChuck Lever __field(int, completion_id) 743b4a7f91cSChuck Lever ), 744b4a7f91cSChuck Lever 745b4a7f91cSChuck Lever TP_fast_assign( 746af5865d2SChuck Lever __entry->cq_id = rep->rr_cid.ci_queue_id; 747af5865d2SChuck Lever __entry->completion_id = rep->rr_cid.ci_completion_id; 748b4a7f91cSChuck Lever ), 749b4a7f91cSChuck Lever 750af5865d2SChuck Lever TP_printk("cq.id=%d cid=%d", 751af5865d2SChuck Lever __entry->cq_id, __entry->completion_id 752b4a7f91cSChuck Lever ) 753b4a7f91cSChuck Lever ); 754b4a7f91cSChuck Lever 7557c8d9e7cSChuck Lever TRACE_EVENT(xprtrdma_post_recvs, 7567c8d9e7cSChuck Lever TP_PROTO( 7577c8d9e7cSChuck Lever const struct rpcrdma_xprt *r_xprt, 7587c8d9e7cSChuck Lever unsigned int count, 7597c8d9e7cSChuck Lever int status 7607c8d9e7cSChuck Lever ), 7617c8d9e7cSChuck Lever 7627c8d9e7cSChuck Lever TP_ARGS(r_xprt, count, status), 7637c8d9e7cSChuck Lever 7647c8d9e7cSChuck Lever TP_STRUCT__entry( 7657c8d9e7cSChuck Lever __field(const void *, r_xprt) 7667c8d9e7cSChuck Lever __field(unsigned int, count) 7677c8d9e7cSChuck Lever __field(int, status) 7687c8d9e7cSChuck Lever __field(int, posted) 7697c8d9e7cSChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 7707c8d9e7cSChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 7717c8d9e7cSChuck Lever ), 7727c8d9e7cSChuck Lever 7737c8d9e7cSChuck Lever TP_fast_assign( 7747c8d9e7cSChuck Lever __entry->r_xprt = r_xprt; 7757c8d9e7cSChuck Lever __entry->count = count; 7767c8d9e7cSChuck Lever __entry->status = status; 777e28ce900SChuck Lever __entry->posted = r_xprt->rx_ep->re_receive_count; 7787c8d9e7cSChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 7797c8d9e7cSChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 7807c8d9e7cSChuck Lever ), 7817c8d9e7cSChuck Lever 7827c8d9e7cSChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: %u new recvs, %d active (rc %d)", 7837c8d9e7cSChuck Lever __get_str(addr), __get_str(port), __entry->r_xprt, 7847c8d9e7cSChuck Lever __entry->count, __entry->posted, __entry->status 785ab03eff5SChuck Lever ) 786ab03eff5SChuck Lever ); 787ab03eff5SChuck Lever 78836a55edfSChuck Lever TRACE_EVENT(xprtrdma_post_linv_err, 7894b93dab3SChuck Lever TP_PROTO( 7904b93dab3SChuck Lever const struct rpcrdma_req *req, 7914b93dab3SChuck Lever int status 7924b93dab3SChuck Lever ), 7934b93dab3SChuck Lever 7944b93dab3SChuck Lever TP_ARGS(req, status), 7954b93dab3SChuck Lever 7964b93dab3SChuck Lever TP_STRUCT__entry( 79736a55edfSChuck Lever __field(unsigned int, task_id) 79836a55edfSChuck Lever __field(unsigned int, client_id) 7994b93dab3SChuck Lever __field(int, status) 8004b93dab3SChuck Lever ), 8014b93dab3SChuck Lever 8024b93dab3SChuck Lever TP_fast_assign( 80336a55edfSChuck Lever const struct rpc_task *task = req->rl_slot.rq_task; 80436a55edfSChuck Lever 80536a55edfSChuck Lever __entry->task_id = task->tk_pid; 80636a55edfSChuck Lever __entry->client_id = task->tk_client->cl_clid; 8074b93dab3SChuck Lever __entry->status = status; 8084b93dab3SChuck Lever ), 8094b93dab3SChuck Lever 81036a55edfSChuck Lever TP_printk("task:%u@%u status=%d", 81136a55edfSChuck Lever __entry->task_id, __entry->client_id, __entry->status 8124b93dab3SChuck Lever ) 8134b93dab3SChuck Lever ); 8144b93dab3SChuck Lever 815ab03eff5SChuck Lever /** 816ab03eff5SChuck Lever ** Completion events 817ab03eff5SChuck Lever **/ 818ab03eff5SChuck Lever 819af5865d2SChuck Lever DEFINE_COMPLETION_EVENT(xprtrdma_wc_receive); 820b2e7467fSChuck Lever DEFINE_COMPLETION_EVENT(xprtrdma_wc_send); 8215ecef9c8SChuck Lever DEFINE_COMPLETION_EVENT(xprtrdma_wc_fastreg); 8225ecef9c8SChuck Lever DEFINE_COMPLETION_EVENT(xprtrdma_wc_li); 8235ecef9c8SChuck Lever DEFINE_COMPLETION_EVENT(xprtrdma_wc_li_wake); 8245ecef9c8SChuck Lever DEFINE_COMPLETION_EVENT(xprtrdma_wc_li_done); 8252937fedeSChuck Lever 82653b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_alloc, 82753b2c1cbSChuck Lever TP_PROTO( 82853b2c1cbSChuck Lever const struct rpcrdma_mr *mr, 82953b2c1cbSChuck Lever int rc 83053b2c1cbSChuck Lever ), 83153b2c1cbSChuck Lever 83253b2c1cbSChuck Lever TP_ARGS(mr, rc), 83353b2c1cbSChuck Lever 83453b2c1cbSChuck Lever TP_STRUCT__entry( 83562a89501SChuck Lever __field(u32, mr_id) 83653b2c1cbSChuck Lever __field(int, rc) 83753b2c1cbSChuck Lever ), 83853b2c1cbSChuck Lever 83953b2c1cbSChuck Lever TP_fast_assign( 84062a89501SChuck Lever __entry->mr_id = mr->frwr.fr_mr->res.id; 84153b2c1cbSChuck Lever __entry->rc = rc; 84253b2c1cbSChuck Lever ), 84353b2c1cbSChuck Lever 84462a89501SChuck Lever TP_printk("mr.id=%u: rc=%d", 84562a89501SChuck Lever __entry->mr_id, __entry->rc 84653b2c1cbSChuck Lever ) 84753b2c1cbSChuck Lever ); 84853b2c1cbSChuck Lever 84953b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_dereg, 85053b2c1cbSChuck Lever TP_PROTO( 85153b2c1cbSChuck Lever const struct rpcrdma_mr *mr, 85253b2c1cbSChuck Lever int rc 85353b2c1cbSChuck Lever ), 85453b2c1cbSChuck Lever 85553b2c1cbSChuck Lever TP_ARGS(mr, rc), 85653b2c1cbSChuck Lever 85753b2c1cbSChuck Lever TP_STRUCT__entry( 85862a89501SChuck Lever __field(u32, mr_id) 85962a89501SChuck Lever __field(int, nents) 86053b2c1cbSChuck Lever __field(u32, handle) 86153b2c1cbSChuck Lever __field(u32, length) 86253b2c1cbSChuck Lever __field(u64, offset) 86353b2c1cbSChuck Lever __field(u32, dir) 86453b2c1cbSChuck Lever __field(int, rc) 86553b2c1cbSChuck Lever ), 86653b2c1cbSChuck Lever 86753b2c1cbSChuck Lever TP_fast_assign( 86862a89501SChuck Lever __entry->mr_id = mr->frwr.fr_mr->res.id; 86962a89501SChuck Lever __entry->nents = mr->mr_nents; 87053b2c1cbSChuck Lever __entry->handle = mr->mr_handle; 87153b2c1cbSChuck Lever __entry->length = mr->mr_length; 87253b2c1cbSChuck Lever __entry->offset = mr->mr_offset; 87353b2c1cbSChuck Lever __entry->dir = mr->mr_dir; 87453b2c1cbSChuck Lever __entry->rc = rc; 87553b2c1cbSChuck Lever ), 87653b2c1cbSChuck Lever 87762a89501SChuck Lever TP_printk("mr.id=%u nents=%d %u@0x%016llx:0x%08x (%s): rc=%d", 87862a89501SChuck Lever __entry->mr_id, __entry->nents, __entry->length, 87953b2c1cbSChuck Lever (unsigned long long)__entry->offset, __entry->handle, 88053b2c1cbSChuck Lever xprtrdma_show_direction(__entry->dir), 88153b2c1cbSChuck Lever __entry->rc 88253b2c1cbSChuck Lever ) 88353b2c1cbSChuck Lever ); 88453b2c1cbSChuck Lever 88553b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_sgerr, 88653b2c1cbSChuck Lever TP_PROTO( 88753b2c1cbSChuck Lever const struct rpcrdma_mr *mr, 88853b2c1cbSChuck Lever int sg_nents 88953b2c1cbSChuck Lever ), 89053b2c1cbSChuck Lever 89153b2c1cbSChuck Lever TP_ARGS(mr, sg_nents), 89253b2c1cbSChuck Lever 89353b2c1cbSChuck Lever TP_STRUCT__entry( 89462a89501SChuck Lever __field(u32, mr_id) 89553b2c1cbSChuck Lever __field(u64, addr) 89653b2c1cbSChuck Lever __field(u32, dir) 89753b2c1cbSChuck Lever __field(int, nents) 89853b2c1cbSChuck Lever ), 89953b2c1cbSChuck Lever 90053b2c1cbSChuck Lever TP_fast_assign( 90162a89501SChuck Lever __entry->mr_id = mr->frwr.fr_mr->res.id; 90253b2c1cbSChuck Lever __entry->addr = mr->mr_sg->dma_address; 90353b2c1cbSChuck Lever __entry->dir = mr->mr_dir; 90453b2c1cbSChuck Lever __entry->nents = sg_nents; 90553b2c1cbSChuck Lever ), 90653b2c1cbSChuck Lever 90762a89501SChuck Lever TP_printk("mr.id=%u DMA addr=0x%llx (%s) sg_nents=%d", 90862a89501SChuck Lever __entry->mr_id, __entry->addr, 90953b2c1cbSChuck Lever xprtrdma_show_direction(__entry->dir), 91053b2c1cbSChuck Lever __entry->nents 91153b2c1cbSChuck Lever ) 91253b2c1cbSChuck Lever ); 91353b2c1cbSChuck Lever 91453b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_maperr, 91553b2c1cbSChuck Lever TP_PROTO( 91653b2c1cbSChuck Lever const struct rpcrdma_mr *mr, 91753b2c1cbSChuck Lever int num_mapped 91853b2c1cbSChuck Lever ), 91953b2c1cbSChuck Lever 92053b2c1cbSChuck Lever TP_ARGS(mr, num_mapped), 92153b2c1cbSChuck Lever 92253b2c1cbSChuck Lever TP_STRUCT__entry( 92362a89501SChuck Lever __field(u32, mr_id) 92453b2c1cbSChuck Lever __field(u64, addr) 92553b2c1cbSChuck Lever __field(u32, dir) 92653b2c1cbSChuck Lever __field(int, num_mapped) 92753b2c1cbSChuck Lever __field(int, nents) 92853b2c1cbSChuck Lever ), 92953b2c1cbSChuck Lever 93053b2c1cbSChuck Lever TP_fast_assign( 93162a89501SChuck Lever __entry->mr_id = mr->frwr.fr_mr->res.id; 93253b2c1cbSChuck Lever __entry->addr = mr->mr_sg->dma_address; 93353b2c1cbSChuck Lever __entry->dir = mr->mr_dir; 93453b2c1cbSChuck Lever __entry->num_mapped = num_mapped; 93553b2c1cbSChuck Lever __entry->nents = mr->mr_nents; 93653b2c1cbSChuck Lever ), 93753b2c1cbSChuck Lever 93862a89501SChuck Lever TP_printk("mr.id=%u DMA addr=0x%llx (%s) nents=%d of %d", 93962a89501SChuck Lever __entry->mr_id, __entry->addr, 94053b2c1cbSChuck Lever xprtrdma_show_direction(__entry->dir), 94153b2c1cbSChuck Lever __entry->num_mapped, __entry->nents 94253b2c1cbSChuck Lever ) 94353b2c1cbSChuck Lever ); 94453b2c1cbSChuck Lever 945d379eaa8SChuck Lever DEFINE_MR_EVENT(localinv); 946d379eaa8SChuck Lever DEFINE_MR_EVENT(map); 947d379eaa8SChuck Lever DEFINE_MR_EVENT(unmap); 94862a89501SChuck Lever DEFINE_MR_EVENT(reminv); 949d379eaa8SChuck Lever DEFINE_MR_EVENT(recycle); 95058f10ad4SChuck Lever 95153b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_dma_maperr, 95253b2c1cbSChuck Lever TP_PROTO( 95353b2c1cbSChuck Lever u64 addr 95453b2c1cbSChuck Lever ), 95553b2c1cbSChuck Lever 95653b2c1cbSChuck Lever TP_ARGS(addr), 95753b2c1cbSChuck Lever 95853b2c1cbSChuck Lever TP_STRUCT__entry( 95953b2c1cbSChuck Lever __field(u64, addr) 96053b2c1cbSChuck Lever ), 96153b2c1cbSChuck Lever 96253b2c1cbSChuck Lever TP_fast_assign( 96353b2c1cbSChuck Lever __entry->addr = addr; 96453b2c1cbSChuck Lever ), 96553b2c1cbSChuck Lever 96653b2c1cbSChuck Lever TP_printk("dma addr=0x%llx\n", __entry->addr) 96753b2c1cbSChuck Lever ); 96853b2c1cbSChuck Lever 969b4a7f91cSChuck Lever /** 970b4a7f91cSChuck Lever ** Reply events 971b4a7f91cSChuck Lever **/ 972b4a7f91cSChuck Lever 973b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_reply, 974b4a7f91cSChuck Lever TP_PROTO( 975b4a7f91cSChuck Lever const struct rpc_task *task, 976b4a7f91cSChuck Lever const struct rpcrdma_rep *rep, 977b4a7f91cSChuck Lever const struct rpcrdma_req *req, 978b4a7f91cSChuck Lever unsigned int credits 979b4a7f91cSChuck Lever ), 980b4a7f91cSChuck Lever 981b4a7f91cSChuck Lever TP_ARGS(task, rep, req, credits), 982b4a7f91cSChuck Lever 983b4a7f91cSChuck Lever TP_STRUCT__entry( 984b4a7f91cSChuck Lever __field(unsigned int, task_id) 985b4a7f91cSChuck Lever __field(unsigned int, client_id) 986b4a7f91cSChuck Lever __field(const void *, rep) 987b4a7f91cSChuck Lever __field(const void *, req) 988b4a7f91cSChuck Lever __field(u32, xid) 989b4a7f91cSChuck Lever __field(unsigned int, credits) 990b4a7f91cSChuck Lever ), 991b4a7f91cSChuck Lever 992b4a7f91cSChuck Lever TP_fast_assign( 993b4a7f91cSChuck Lever __entry->task_id = task->tk_pid; 994b4a7f91cSChuck Lever __entry->client_id = task->tk_client->cl_clid; 995b4a7f91cSChuck Lever __entry->rep = rep; 996b4a7f91cSChuck Lever __entry->req = req; 997b4a7f91cSChuck Lever __entry->xid = be32_to_cpu(rep->rr_xid); 998b4a7f91cSChuck Lever __entry->credits = credits; 999b4a7f91cSChuck Lever ), 1000b4a7f91cSChuck Lever 1001b4a7f91cSChuck Lever TP_printk("task:%u@%u xid=0x%08x, %u credits, rep=%p -> req=%p", 1002b4a7f91cSChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 1003b4a7f91cSChuck Lever __entry->credits, __entry->rep, __entry->req 1004b4a7f91cSChuck Lever ) 1005b4a7f91cSChuck Lever ); 1006b4a7f91cSChuck Lever 1007b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_defer_cmp, 1008b4a7f91cSChuck Lever TP_PROTO( 1009b4a7f91cSChuck Lever const struct rpcrdma_rep *rep 1010b4a7f91cSChuck Lever ), 1011b4a7f91cSChuck Lever 1012b4a7f91cSChuck Lever TP_ARGS(rep), 1013b4a7f91cSChuck Lever 1014b4a7f91cSChuck Lever TP_STRUCT__entry( 1015b4a7f91cSChuck Lever __field(unsigned int, task_id) 1016b4a7f91cSChuck Lever __field(unsigned int, client_id) 1017b4a7f91cSChuck Lever __field(const void *, rep) 1018b4a7f91cSChuck Lever __field(u32, xid) 1019b4a7f91cSChuck Lever ), 1020b4a7f91cSChuck Lever 1021b4a7f91cSChuck Lever TP_fast_assign( 1022b4a7f91cSChuck Lever __entry->task_id = rep->rr_rqst->rq_task->tk_pid; 1023b4a7f91cSChuck Lever __entry->client_id = rep->rr_rqst->rq_task->tk_client->cl_clid; 1024b4a7f91cSChuck Lever __entry->rep = rep; 1025b4a7f91cSChuck Lever __entry->xid = be32_to_cpu(rep->rr_xid); 1026b4a7f91cSChuck Lever ), 1027b4a7f91cSChuck Lever 1028b4a7f91cSChuck Lever TP_printk("task:%u@%u xid=0x%08x rep=%p", 1029b4a7f91cSChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 1030b4a7f91cSChuck Lever __entry->rep 1031b4a7f91cSChuck Lever ) 1032b4a7f91cSChuck Lever ); 1033b4a7f91cSChuck Lever 1034*3a9568feSChuck Lever DEFINE_REPLY_EVENT(vers); 1035*3a9568feSChuck Lever DEFINE_REPLY_EVENT(rqst); 1036*3a9568feSChuck Lever DEFINE_REPLY_EVENT(short); 1037*3a9568feSChuck Lever DEFINE_REPLY_EVENT(hdr); 1038b4a7f91cSChuck Lever 10393821e232SChuck Lever TRACE_EVENT(xprtrdma_err_vers, 10403821e232SChuck Lever TP_PROTO( 10413821e232SChuck Lever const struct rpc_rqst *rqst, 10423821e232SChuck Lever __be32 *min, 10433821e232SChuck Lever __be32 *max 10443821e232SChuck Lever ), 10453821e232SChuck Lever 10463821e232SChuck Lever TP_ARGS(rqst, min, max), 10473821e232SChuck Lever 10483821e232SChuck Lever TP_STRUCT__entry( 10493821e232SChuck Lever __field(unsigned int, task_id) 10503821e232SChuck Lever __field(unsigned int, client_id) 10513821e232SChuck Lever __field(u32, xid) 10523821e232SChuck Lever __field(u32, min) 10533821e232SChuck Lever __field(u32, max) 10543821e232SChuck Lever ), 10553821e232SChuck Lever 10563821e232SChuck Lever TP_fast_assign( 10573821e232SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 10583821e232SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 10593821e232SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 10603821e232SChuck Lever __entry->min = be32_to_cpup(min); 10613821e232SChuck Lever __entry->max = be32_to_cpup(max); 10623821e232SChuck Lever ), 10633821e232SChuck Lever 10643821e232SChuck Lever TP_printk("task:%u@%u xid=0x%08x versions=[%u, %u]", 10653821e232SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 10663821e232SChuck Lever __entry->min, __entry->max 10673821e232SChuck Lever ) 10683821e232SChuck Lever ); 10693821e232SChuck Lever 10703821e232SChuck Lever TRACE_EVENT(xprtrdma_err_chunk, 10713821e232SChuck Lever TP_PROTO( 10723821e232SChuck Lever const struct rpc_rqst *rqst 10733821e232SChuck Lever ), 10743821e232SChuck Lever 10753821e232SChuck Lever TP_ARGS(rqst), 10763821e232SChuck Lever 10773821e232SChuck Lever TP_STRUCT__entry( 10783821e232SChuck Lever __field(unsigned int, task_id) 10793821e232SChuck Lever __field(unsigned int, client_id) 10803821e232SChuck Lever __field(u32, xid) 10813821e232SChuck Lever ), 10823821e232SChuck Lever 10833821e232SChuck Lever TP_fast_assign( 10843821e232SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 10853821e232SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 10863821e232SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 10873821e232SChuck Lever ), 10883821e232SChuck Lever 10893821e232SChuck Lever TP_printk("task:%u@%u xid=0x%08x", 10903821e232SChuck Lever __entry->task_id, __entry->client_id, __entry->xid 10913821e232SChuck Lever ) 10923821e232SChuck Lever ); 10933821e232SChuck Lever 10943821e232SChuck Lever TRACE_EVENT(xprtrdma_err_unrecognized, 10953821e232SChuck Lever TP_PROTO( 10963821e232SChuck Lever const struct rpc_rqst *rqst, 10973821e232SChuck Lever __be32 *procedure 10983821e232SChuck Lever ), 10993821e232SChuck Lever 11003821e232SChuck Lever TP_ARGS(rqst, procedure), 11013821e232SChuck Lever 11023821e232SChuck Lever TP_STRUCT__entry( 11033821e232SChuck Lever __field(unsigned int, task_id) 11043821e232SChuck Lever __field(unsigned int, client_id) 11053821e232SChuck Lever __field(u32, xid) 11063821e232SChuck Lever __field(u32, procedure) 11073821e232SChuck Lever ), 11083821e232SChuck Lever 11093821e232SChuck Lever TP_fast_assign( 11103821e232SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 11113821e232SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 11123821e232SChuck Lever __entry->procedure = be32_to_cpup(procedure); 11133821e232SChuck Lever ), 11143821e232SChuck Lever 11153821e232SChuck Lever TP_printk("task:%u@%u xid=0x%08x procedure=%u", 11163821e232SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 11173821e232SChuck Lever __entry->procedure 11183821e232SChuck Lever ) 11193821e232SChuck Lever ); 11203821e232SChuck Lever 1121e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_fixup, 1122e11b7c96SChuck Lever TP_PROTO( 1123e11b7c96SChuck Lever const struct rpc_rqst *rqst, 1124d4957f01SChuck Lever unsigned long fixup 1125e11b7c96SChuck Lever ), 1126e11b7c96SChuck Lever 1127d4957f01SChuck Lever TP_ARGS(rqst, fixup), 1128e11b7c96SChuck Lever 1129e11b7c96SChuck Lever TP_STRUCT__entry( 1130e11b7c96SChuck Lever __field(unsigned int, task_id) 1131e11b7c96SChuck Lever __field(unsigned int, client_id) 1132d4957f01SChuck Lever __field(unsigned long, fixup) 1133d4957f01SChuck Lever __field(size_t, headlen) 1134d4957f01SChuck Lever __field(unsigned int, pagelen) 1135d4957f01SChuck Lever __field(size_t, taillen) 1136e11b7c96SChuck Lever ), 1137e11b7c96SChuck Lever 1138e11b7c96SChuck Lever TP_fast_assign( 1139e11b7c96SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 1140e11b7c96SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 1141d4957f01SChuck Lever __entry->fixup = fixup; 1142d4957f01SChuck Lever __entry->headlen = rqst->rq_rcv_buf.head[0].iov_len; 1143d4957f01SChuck Lever __entry->pagelen = rqst->rq_rcv_buf.page_len; 1144d4957f01SChuck Lever __entry->taillen = rqst->rq_rcv_buf.tail[0].iov_len; 1145e11b7c96SChuck Lever ), 1146e11b7c96SChuck Lever 1147d4957f01SChuck Lever TP_printk("task:%u@%u fixup=%lu xdr=%zu/%u/%zu", 1148d4957f01SChuck Lever __entry->task_id, __entry->client_id, __entry->fixup, 1149d4957f01SChuck Lever __entry->headlen, __entry->pagelen, __entry->taillen 1150e11b7c96SChuck Lever ) 1151e11b7c96SChuck Lever ); 1152e11b7c96SChuck Lever 1153e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_decode_seg, 1154e11b7c96SChuck Lever TP_PROTO( 1155e11b7c96SChuck Lever u32 handle, 1156e11b7c96SChuck Lever u32 length, 1157e11b7c96SChuck Lever u64 offset 1158e11b7c96SChuck Lever ), 1159e11b7c96SChuck Lever 1160e11b7c96SChuck Lever TP_ARGS(handle, length, offset), 1161e11b7c96SChuck Lever 1162e11b7c96SChuck Lever TP_STRUCT__entry( 1163e11b7c96SChuck Lever __field(u32, handle) 1164e11b7c96SChuck Lever __field(u32, length) 1165e11b7c96SChuck Lever __field(u64, offset) 1166e11b7c96SChuck Lever ), 1167e11b7c96SChuck Lever 1168e11b7c96SChuck Lever TP_fast_assign( 1169e11b7c96SChuck Lever __entry->handle = handle; 1170e11b7c96SChuck Lever __entry->length = length; 1171e11b7c96SChuck Lever __entry->offset = offset; 1172e11b7c96SChuck Lever ), 1173e11b7c96SChuck Lever 1174e11b7c96SChuck Lever TP_printk("%u@0x%016llx:0x%08x", 1175e11b7c96SChuck Lever __entry->length, (unsigned long long)__entry->offset, 1176e11b7c96SChuck Lever __entry->handle 1177e11b7c96SChuck Lever ) 1178e11b7c96SChuck Lever ); 1179e11b7c96SChuck Lever 1180fc1eb807SChuck Lever /** 1181fc1eb807SChuck Lever ** Callback events 1182fc1eb807SChuck Lever **/ 1183fc1eb807SChuck Lever 1184fc1eb807SChuck Lever TRACE_EVENT(xprtrdma_cb_setup, 1185fc1eb807SChuck Lever TP_PROTO( 1186fc1eb807SChuck Lever const struct rpcrdma_xprt *r_xprt, 1187fc1eb807SChuck Lever unsigned int reqs 1188fc1eb807SChuck Lever ), 1189fc1eb807SChuck Lever 1190fc1eb807SChuck Lever TP_ARGS(r_xprt, reqs), 1191fc1eb807SChuck Lever 1192fc1eb807SChuck Lever TP_STRUCT__entry( 1193fc1eb807SChuck Lever __field(const void *, r_xprt) 1194fc1eb807SChuck Lever __field(unsigned int, reqs) 1195fc1eb807SChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 1196fc1eb807SChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 1197fc1eb807SChuck Lever ), 1198fc1eb807SChuck Lever 1199fc1eb807SChuck Lever TP_fast_assign( 1200fc1eb807SChuck Lever __entry->r_xprt = r_xprt; 1201fc1eb807SChuck Lever __entry->reqs = reqs; 1202fc1eb807SChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 1203fc1eb807SChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 1204fc1eb807SChuck Lever ), 1205fc1eb807SChuck Lever 1206fc1eb807SChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: %u reqs", 1207fc1eb807SChuck Lever __get_str(addr), __get_str(port), 1208fc1eb807SChuck Lever __entry->r_xprt, __entry->reqs 1209fc1eb807SChuck Lever ) 1210fc1eb807SChuck Lever ); 1211fc1eb807SChuck Lever 1212fc1eb807SChuck Lever DEFINE_CB_EVENT(xprtrdma_cb_call); 1213fc1eb807SChuck Lever DEFINE_CB_EVENT(xprtrdma_cb_reply); 1214fc1eb807SChuck Lever 121507e10308SChuck Lever TRACE_EVENT(xprtrdma_leaked_rep, 121607e10308SChuck Lever TP_PROTO( 121707e10308SChuck Lever const struct rpc_rqst *rqst, 121807e10308SChuck Lever const struct rpcrdma_rep *rep 121907e10308SChuck Lever ), 122007e10308SChuck Lever 122107e10308SChuck Lever TP_ARGS(rqst, rep), 122207e10308SChuck Lever 122307e10308SChuck Lever TP_STRUCT__entry( 122407e10308SChuck Lever __field(unsigned int, task_id) 122507e10308SChuck Lever __field(unsigned int, client_id) 122607e10308SChuck Lever __field(u32, xid) 122707e10308SChuck Lever __field(const void *, rep) 122807e10308SChuck Lever ), 122907e10308SChuck Lever 123007e10308SChuck Lever TP_fast_assign( 123107e10308SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 123207e10308SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 123307e10308SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 123407e10308SChuck Lever __entry->rep = rep; 123507e10308SChuck Lever ), 123607e10308SChuck Lever 123707e10308SChuck Lever TP_printk("task:%u@%u xid=0x%08x rep=%p", 123807e10308SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 123907e10308SChuck Lever __entry->rep 124007e10308SChuck Lever ) 124107e10308SChuck Lever ); 124207e10308SChuck Lever 124398895edbSChuck Lever /** 124498895edbSChuck Lever ** Server-side RPC/RDMA events 124598895edbSChuck Lever **/ 124698895edbSChuck Lever 1247e979a173SChuck Lever DECLARE_EVENT_CLASS(svcrdma_accept_class, 1248e979a173SChuck Lever TP_PROTO( 1249e979a173SChuck Lever const struct svcxprt_rdma *rdma, 1250e979a173SChuck Lever long status 1251e979a173SChuck Lever ), 1252e979a173SChuck Lever 1253e979a173SChuck Lever TP_ARGS(rdma, status), 1254e979a173SChuck Lever 1255e979a173SChuck Lever TP_STRUCT__entry( 1256e979a173SChuck Lever __field(long, status) 1257e979a173SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1258e979a173SChuck Lever ), 1259e979a173SChuck Lever 1260e979a173SChuck Lever TP_fast_assign( 1261e979a173SChuck Lever __entry->status = status; 1262e979a173SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1263e979a173SChuck Lever ), 1264e979a173SChuck Lever 1265e979a173SChuck Lever TP_printk("addr=%s status=%ld", 1266e979a173SChuck Lever __get_str(addr), __entry->status 1267e979a173SChuck Lever ) 1268e979a173SChuck Lever ); 1269e979a173SChuck Lever 1270e979a173SChuck Lever #define DEFINE_ACCEPT_EVENT(name) \ 1271e979a173SChuck Lever DEFINE_EVENT(svcrdma_accept_class, svcrdma_##name##_err, \ 1272e979a173SChuck Lever TP_PROTO( \ 1273e979a173SChuck Lever const struct svcxprt_rdma *rdma, \ 1274e979a173SChuck Lever long status \ 1275e979a173SChuck Lever ), \ 1276e979a173SChuck Lever TP_ARGS(rdma, status)) 1277e979a173SChuck Lever 1278e979a173SChuck Lever DEFINE_ACCEPT_EVENT(pd); 1279e979a173SChuck Lever DEFINE_ACCEPT_EVENT(qp); 1280e979a173SChuck Lever DEFINE_ACCEPT_EVENT(fabric); 1281e979a173SChuck Lever DEFINE_ACCEPT_EVENT(initdepth); 1282e979a173SChuck Lever DEFINE_ACCEPT_EVENT(accept); 1283e979a173SChuck Lever 128498895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_MSG); 128598895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_NOMSG); 128698895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_MSGP); 128798895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_DONE); 128898895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_ERROR); 128998895edbSChuck Lever 129098895edbSChuck Lever #define show_rpcrdma_proc(x) \ 129198895edbSChuck Lever __print_symbolic(x, \ 129298895edbSChuck Lever { RDMA_MSG, "RDMA_MSG" }, \ 129398895edbSChuck Lever { RDMA_NOMSG, "RDMA_NOMSG" }, \ 129498895edbSChuck Lever { RDMA_MSGP, "RDMA_MSGP" }, \ 129598895edbSChuck Lever { RDMA_DONE, "RDMA_DONE" }, \ 129698895edbSChuck Lever { RDMA_ERROR, "RDMA_ERROR" }) 129798895edbSChuck Lever 129898895edbSChuck Lever TRACE_EVENT(svcrdma_decode_rqst, 129998895edbSChuck Lever TP_PROTO( 1300007140eeSChuck Lever const struct svc_rdma_recv_ctxt *ctxt, 130198895edbSChuck Lever __be32 *p, 130298895edbSChuck Lever unsigned int hdrlen 130398895edbSChuck Lever ), 130498895edbSChuck Lever 1305007140eeSChuck Lever TP_ARGS(ctxt, p, hdrlen), 130698895edbSChuck Lever 130798895edbSChuck Lever TP_STRUCT__entry( 1308007140eeSChuck Lever __field(u32, cq_id) 1309007140eeSChuck Lever __field(int, completion_id) 131098895edbSChuck Lever __field(u32, xid) 131198895edbSChuck Lever __field(u32, vers) 131298895edbSChuck Lever __field(u32, proc) 131398895edbSChuck Lever __field(u32, credits) 131498895edbSChuck Lever __field(unsigned int, hdrlen) 131598895edbSChuck Lever ), 131698895edbSChuck Lever 131798895edbSChuck Lever TP_fast_assign( 1318007140eeSChuck Lever __entry->cq_id = ctxt->rc_cid.ci_queue_id; 1319007140eeSChuck Lever __entry->completion_id = ctxt->rc_cid.ci_completion_id; 132098895edbSChuck Lever __entry->xid = be32_to_cpup(p++); 132198895edbSChuck Lever __entry->vers = be32_to_cpup(p++); 132298895edbSChuck Lever __entry->credits = be32_to_cpup(p++); 132398895edbSChuck Lever __entry->proc = be32_to_cpup(p); 132498895edbSChuck Lever __entry->hdrlen = hdrlen; 132598895edbSChuck Lever ), 132698895edbSChuck Lever 1327007140eeSChuck Lever TP_printk("cq.id=%u cid=%d xid=0x%08x vers=%u credits=%u proc=%s hdrlen=%u", 1328007140eeSChuck Lever __entry->cq_id, __entry->completion_id, 132998895edbSChuck Lever __entry->xid, __entry->vers, __entry->credits, 133098895edbSChuck Lever show_rpcrdma_proc(__entry->proc), __entry->hdrlen) 133198895edbSChuck Lever ); 133298895edbSChuck Lever 133327ce6294SChuck Lever TRACE_EVENT(svcrdma_decode_short_err, 133498895edbSChuck Lever TP_PROTO( 1335007140eeSChuck Lever const struct svc_rdma_recv_ctxt *ctxt, 133698895edbSChuck Lever unsigned int hdrlen 133798895edbSChuck Lever ), 133898895edbSChuck Lever 1339007140eeSChuck Lever TP_ARGS(ctxt, hdrlen), 134098895edbSChuck Lever 134198895edbSChuck Lever TP_STRUCT__entry( 1342007140eeSChuck Lever __field(u32, cq_id) 1343007140eeSChuck Lever __field(int, completion_id) 134498895edbSChuck Lever __field(unsigned int, hdrlen) 134598895edbSChuck Lever ), 134698895edbSChuck Lever 134798895edbSChuck Lever TP_fast_assign( 1348007140eeSChuck Lever __entry->cq_id = ctxt->rc_cid.ci_queue_id; 1349007140eeSChuck Lever __entry->completion_id = ctxt->rc_cid.ci_completion_id; 135098895edbSChuck Lever __entry->hdrlen = hdrlen; 135198895edbSChuck Lever ), 135298895edbSChuck Lever 1353007140eeSChuck Lever TP_printk("cq.id=%u cid=%d hdrlen=%u", 1354007140eeSChuck Lever __entry->cq_id, __entry->completion_id, 1355007140eeSChuck Lever __entry->hdrlen) 135698895edbSChuck Lever ); 135798895edbSChuck Lever 135898895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_badreq_event, 135998895edbSChuck Lever TP_PROTO( 1360007140eeSChuck Lever const struct svc_rdma_recv_ctxt *ctxt, 136198895edbSChuck Lever __be32 *p 136298895edbSChuck Lever ), 136398895edbSChuck Lever 1364007140eeSChuck Lever TP_ARGS(ctxt, p), 136598895edbSChuck Lever 136698895edbSChuck Lever TP_STRUCT__entry( 1367007140eeSChuck Lever __field(u32, cq_id) 1368007140eeSChuck Lever __field(int, completion_id) 136998895edbSChuck Lever __field(u32, xid) 137098895edbSChuck Lever __field(u32, vers) 137198895edbSChuck Lever __field(u32, proc) 137298895edbSChuck Lever __field(u32, credits) 137398895edbSChuck Lever ), 137498895edbSChuck Lever 137598895edbSChuck Lever TP_fast_assign( 1376007140eeSChuck Lever __entry->cq_id = ctxt->rc_cid.ci_queue_id; 1377007140eeSChuck Lever __entry->completion_id = ctxt->rc_cid.ci_completion_id; 137898895edbSChuck Lever __entry->xid = be32_to_cpup(p++); 137998895edbSChuck Lever __entry->vers = be32_to_cpup(p++); 138098895edbSChuck Lever __entry->credits = be32_to_cpup(p++); 138198895edbSChuck Lever __entry->proc = be32_to_cpup(p); 138298895edbSChuck Lever ), 138398895edbSChuck Lever 1384007140eeSChuck Lever TP_printk("cq.id=%u cid=%d xid=0x%08x vers=%u credits=%u proc=%u", 1385007140eeSChuck Lever __entry->cq_id, __entry->completion_id, 138698895edbSChuck Lever __entry->xid, __entry->vers, __entry->credits, __entry->proc) 138798895edbSChuck Lever ); 138898895edbSChuck Lever 138998895edbSChuck Lever #define DEFINE_BADREQ_EVENT(name) \ 139027ce6294SChuck Lever DEFINE_EVENT(svcrdma_badreq_event, \ 139127ce6294SChuck Lever svcrdma_decode_##name##_err, \ 139298895edbSChuck Lever TP_PROTO( \ 1393007140eeSChuck Lever const struct svc_rdma_recv_ctxt *ctxt, \ 139498895edbSChuck Lever __be32 *p \ 139598895edbSChuck Lever ), \ 1396007140eeSChuck Lever TP_ARGS(ctxt, p)) 139798895edbSChuck Lever 139898895edbSChuck Lever DEFINE_BADREQ_EVENT(badvers); 139998895edbSChuck Lever DEFINE_BADREQ_EVENT(drop); 140098895edbSChuck Lever DEFINE_BADREQ_EVENT(badproc); 140198895edbSChuck Lever DEFINE_BADREQ_EVENT(parse); 140298895edbSChuck Lever 140398895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_segment_event, 140498895edbSChuck Lever TP_PROTO( 140598895edbSChuck Lever u32 handle, 140698895edbSChuck Lever u32 length, 140798895edbSChuck Lever u64 offset 140898895edbSChuck Lever ), 140998895edbSChuck Lever 141098895edbSChuck Lever TP_ARGS(handle, length, offset), 141198895edbSChuck Lever 141298895edbSChuck Lever TP_STRUCT__entry( 141398895edbSChuck Lever __field(u32, handle) 141498895edbSChuck Lever __field(u32, length) 141598895edbSChuck Lever __field(u64, offset) 141698895edbSChuck Lever ), 141798895edbSChuck Lever 141898895edbSChuck Lever TP_fast_assign( 141998895edbSChuck Lever __entry->handle = handle; 142098895edbSChuck Lever __entry->length = length; 142198895edbSChuck Lever __entry->offset = offset; 142298895edbSChuck Lever ), 142398895edbSChuck Lever 142498895edbSChuck Lever TP_printk("%u@0x%016llx:0x%08x", 142598895edbSChuck Lever __entry->length, (unsigned long long)__entry->offset, 142698895edbSChuck Lever __entry->handle 142798895edbSChuck Lever ) 142898895edbSChuck Lever ); 142998895edbSChuck Lever 143098895edbSChuck Lever #define DEFINE_SEGMENT_EVENT(name) \ 1431e604aad2SChuck Lever DEFINE_EVENT(svcrdma_segment_event, svcrdma_##name,\ 143298895edbSChuck Lever TP_PROTO( \ 143398895edbSChuck Lever u32 handle, \ 143498895edbSChuck Lever u32 length, \ 143598895edbSChuck Lever u64 offset \ 143698895edbSChuck Lever ), \ 143798895edbSChuck Lever TP_ARGS(handle, length, offset)) 143898895edbSChuck Lever 1439e604aad2SChuck Lever DEFINE_SEGMENT_EVENT(decode_wseg); 1440e604aad2SChuck Lever DEFINE_SEGMENT_EVENT(encode_rseg); 1441a406c563SChuck Lever DEFINE_SEGMENT_EVENT(send_rseg); 1442e604aad2SChuck Lever DEFINE_SEGMENT_EVENT(encode_wseg); 1443a406c563SChuck Lever DEFINE_SEGMENT_EVENT(send_wseg); 144498895edbSChuck Lever 144598895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_chunk_event, 144698895edbSChuck Lever TP_PROTO( 144798895edbSChuck Lever u32 length 144898895edbSChuck Lever ), 144998895edbSChuck Lever 145098895edbSChuck Lever TP_ARGS(length), 145198895edbSChuck Lever 145298895edbSChuck Lever TP_STRUCT__entry( 145398895edbSChuck Lever __field(u32, length) 145498895edbSChuck Lever ), 145598895edbSChuck Lever 145698895edbSChuck Lever TP_fast_assign( 145798895edbSChuck Lever __entry->length = length; 145898895edbSChuck Lever ), 145998895edbSChuck Lever 146098895edbSChuck Lever TP_printk("length=%u", 146198895edbSChuck Lever __entry->length 146298895edbSChuck Lever ) 146398895edbSChuck Lever ); 146498895edbSChuck Lever 146598895edbSChuck Lever #define DEFINE_CHUNK_EVENT(name) \ 1466a406c563SChuck Lever DEFINE_EVENT(svcrdma_chunk_event, svcrdma_##name, \ 146798895edbSChuck Lever TP_PROTO( \ 146898895edbSChuck Lever u32 length \ 146998895edbSChuck Lever ), \ 147098895edbSChuck Lever TP_ARGS(length)) 147198895edbSChuck Lever 1472a406c563SChuck Lever DEFINE_CHUNK_EVENT(send_pzr); 1473a406c563SChuck Lever DEFINE_CHUNK_EVENT(encode_write_chunk); 1474a406c563SChuck Lever DEFINE_CHUNK_EVENT(send_write_chunk); 1475a406c563SChuck Lever DEFINE_CHUNK_EVENT(encode_read_chunk); 1476a406c563SChuck Lever DEFINE_CHUNK_EVENT(send_reply_chunk); 147798895edbSChuck Lever 1478a406c563SChuck Lever TRACE_EVENT(svcrdma_send_read_chunk, 147998895edbSChuck Lever TP_PROTO( 148098895edbSChuck Lever u32 length, 148198895edbSChuck Lever u32 position 148298895edbSChuck Lever ), 148398895edbSChuck Lever 148498895edbSChuck Lever TP_ARGS(length, position), 148598895edbSChuck Lever 148698895edbSChuck Lever TP_STRUCT__entry( 148798895edbSChuck Lever __field(u32, length) 148898895edbSChuck Lever __field(u32, position) 148998895edbSChuck Lever ), 149098895edbSChuck Lever 149198895edbSChuck Lever TP_fast_assign( 149298895edbSChuck Lever __entry->length = length; 149398895edbSChuck Lever __entry->position = position; 149498895edbSChuck Lever ), 149598895edbSChuck Lever 149698895edbSChuck Lever TP_printk("length=%u position=%u", 149798895edbSChuck Lever __entry->length, __entry->position 149898895edbSChuck Lever ) 149998895edbSChuck Lever ); 150098895edbSChuck Lever 150198895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_error_event, 150298895edbSChuck Lever TP_PROTO( 150398895edbSChuck Lever __be32 xid 150498895edbSChuck Lever ), 150598895edbSChuck Lever 150698895edbSChuck Lever TP_ARGS(xid), 150798895edbSChuck Lever 150898895edbSChuck Lever TP_STRUCT__entry( 150998895edbSChuck Lever __field(u32, xid) 151098895edbSChuck Lever ), 151198895edbSChuck Lever 151298895edbSChuck Lever TP_fast_assign( 151398895edbSChuck Lever __entry->xid = be32_to_cpu(xid); 151498895edbSChuck Lever ), 151598895edbSChuck Lever 151698895edbSChuck Lever TP_printk("xid=0x%08x", 151798895edbSChuck Lever __entry->xid 151898895edbSChuck Lever ) 151998895edbSChuck Lever ); 152098895edbSChuck Lever 152198895edbSChuck Lever #define DEFINE_ERROR_EVENT(name) \ 152298895edbSChuck Lever DEFINE_EVENT(svcrdma_error_event, svcrdma_err_##name, \ 152398895edbSChuck Lever TP_PROTO( \ 152498895edbSChuck Lever __be32 xid \ 152598895edbSChuck Lever ), \ 152698895edbSChuck Lever TP_ARGS(xid)) 152798895edbSChuck Lever 152898895edbSChuck Lever DEFINE_ERROR_EVENT(vers); 152998895edbSChuck Lever DEFINE_ERROR_EVENT(chunk); 153098895edbSChuck Lever 1531bd2abef3SChuck Lever /** 1532bd2abef3SChuck Lever ** Server-side RDMA API events 1533bd2abef3SChuck Lever **/ 1534bd2abef3SChuck Lever 1535832b2cb9SChuck Lever DECLARE_EVENT_CLASS(svcrdma_dma_map_class, 1536bd2abef3SChuck Lever TP_PROTO( 1537bd2abef3SChuck Lever const struct svcxprt_rdma *rdma, 1538832b2cb9SChuck Lever u64 dma_addr, 1539832b2cb9SChuck Lever u32 length 1540bd2abef3SChuck Lever ), 1541bd2abef3SChuck Lever 1542832b2cb9SChuck Lever TP_ARGS(rdma, dma_addr, length), 1543bd2abef3SChuck Lever 1544bd2abef3SChuck Lever TP_STRUCT__entry( 1545832b2cb9SChuck Lever __field(u64, dma_addr) 1546832b2cb9SChuck Lever __field(u32, length) 1547bd2abef3SChuck Lever __string(device, rdma->sc_cm_id->device->name) 1548bd2abef3SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1549bd2abef3SChuck Lever ), 1550bd2abef3SChuck Lever 1551bd2abef3SChuck Lever TP_fast_assign( 1552832b2cb9SChuck Lever __entry->dma_addr = dma_addr; 1553832b2cb9SChuck Lever __entry->length = length; 1554bd2abef3SChuck Lever __assign_str(device, rdma->sc_cm_id->device->name); 1555bd2abef3SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1556bd2abef3SChuck Lever ), 1557bd2abef3SChuck Lever 1558832b2cb9SChuck Lever TP_printk("addr=%s device=%s dma_addr=%llu length=%u", 1559832b2cb9SChuck Lever __get_str(addr), __get_str(device), 1560832b2cb9SChuck Lever __entry->dma_addr, __entry->length 1561bd2abef3SChuck Lever ) 1562bd2abef3SChuck Lever ); 1563bd2abef3SChuck Lever 1564832b2cb9SChuck Lever #define DEFINE_SVC_DMA_EVENT(name) \ 1565832b2cb9SChuck Lever DEFINE_EVENT(svcrdma_dma_map_class, svcrdma_##name, \ 1566832b2cb9SChuck Lever TP_PROTO( \ 1567832b2cb9SChuck Lever const struct svcxprt_rdma *rdma,\ 1568832b2cb9SChuck Lever u64 dma_addr, \ 1569832b2cb9SChuck Lever u32 length \ 1570832b2cb9SChuck Lever ), \ 1571832b2cb9SChuck Lever TP_ARGS(rdma, dma_addr, length)) 1572832b2cb9SChuck Lever 1573832b2cb9SChuck Lever DEFINE_SVC_DMA_EVENT(dma_map_page); 1574832b2cb9SChuck Lever DEFINE_SVC_DMA_EVENT(dma_unmap_page); 1575832b2cb9SChuck Lever 15762abfbe7eSChuck Lever TRACE_EVENT(svcrdma_dma_map_rw_err, 1577bd2abef3SChuck Lever TP_PROTO( 1578bd2abef3SChuck Lever const struct svcxprt_rdma *rdma, 15792abfbe7eSChuck Lever unsigned int nents, 1580bd2abef3SChuck Lever int status 1581bd2abef3SChuck Lever ), 1582bd2abef3SChuck Lever 15832abfbe7eSChuck Lever TP_ARGS(rdma, nents, status), 1584bd2abef3SChuck Lever 1585bd2abef3SChuck Lever TP_STRUCT__entry( 1586bd2abef3SChuck Lever __field(int, status) 15872abfbe7eSChuck Lever __field(unsigned int, nents) 1588bd2abef3SChuck Lever __string(device, rdma->sc_cm_id->device->name) 1589bd2abef3SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1590bd2abef3SChuck Lever ), 1591bd2abef3SChuck Lever 1592bd2abef3SChuck Lever TP_fast_assign( 1593bd2abef3SChuck Lever __entry->status = status; 15942abfbe7eSChuck Lever __entry->nents = nents; 1595bd2abef3SChuck Lever __assign_str(device, rdma->sc_cm_id->device->name); 1596bd2abef3SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1597bd2abef3SChuck Lever ), 1598bd2abef3SChuck Lever 15992abfbe7eSChuck Lever TP_printk("addr=%s device=%s nents=%u status=%d", 16002abfbe7eSChuck Lever __get_str(addr), __get_str(device), __entry->nents, 16012abfbe7eSChuck Lever __entry->status 1602bd2abef3SChuck Lever ) 1603bd2abef3SChuck Lever ); 1604bd2abef3SChuck Lever 1605f4e53e1cSChuck Lever TRACE_EVENT(svcrdma_no_rwctx_err, 1606f4e53e1cSChuck Lever TP_PROTO( 1607f4e53e1cSChuck Lever const struct svcxprt_rdma *rdma, 1608f4e53e1cSChuck Lever unsigned int num_sges 1609f4e53e1cSChuck Lever ), 1610f4e53e1cSChuck Lever 1611f4e53e1cSChuck Lever TP_ARGS(rdma, num_sges), 1612f4e53e1cSChuck Lever 1613f4e53e1cSChuck Lever TP_STRUCT__entry( 1614f4e53e1cSChuck Lever __field(unsigned int, num_sges) 1615f4e53e1cSChuck Lever __string(device, rdma->sc_cm_id->device->name) 1616f4e53e1cSChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1617f4e53e1cSChuck Lever ), 1618f4e53e1cSChuck Lever 1619f4e53e1cSChuck Lever TP_fast_assign( 1620f4e53e1cSChuck Lever __entry->num_sges = num_sges; 1621f4e53e1cSChuck Lever __assign_str(device, rdma->sc_cm_id->device->name); 1622f4e53e1cSChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1623f4e53e1cSChuck Lever ), 1624f4e53e1cSChuck Lever 1625f4e53e1cSChuck Lever TP_printk("addr=%s device=%s num_sges=%d", 1626f4e53e1cSChuck Lever __get_str(addr), __get_str(device), __entry->num_sges 1627f4e53e1cSChuck Lever ) 1628f4e53e1cSChuck Lever ); 1629f4e53e1cSChuck Lever 16309d200638SChuck Lever TRACE_EVENT(svcrdma_page_overrun_err, 16319d200638SChuck Lever TP_PROTO( 16329d200638SChuck Lever const struct svcxprt_rdma *rdma, 16339d200638SChuck Lever const struct svc_rqst *rqst, 16349d200638SChuck Lever unsigned int pageno 16359d200638SChuck Lever ), 16369d200638SChuck Lever 16379d200638SChuck Lever TP_ARGS(rdma, rqst, pageno), 16389d200638SChuck Lever 16399d200638SChuck Lever TP_STRUCT__entry( 16409d200638SChuck Lever __field(unsigned int, pageno) 16419d200638SChuck Lever __field(u32, xid) 16429d200638SChuck Lever __string(device, rdma->sc_cm_id->device->name) 16439d200638SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 16449d200638SChuck Lever ), 16459d200638SChuck Lever 16469d200638SChuck Lever TP_fast_assign( 16479d200638SChuck Lever __entry->pageno = pageno; 16489d200638SChuck Lever __entry->xid = __be32_to_cpu(rqst->rq_xid); 16499d200638SChuck Lever __assign_str(device, rdma->sc_cm_id->device->name); 16509d200638SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 16519d200638SChuck Lever ), 16529d200638SChuck Lever 16539d200638SChuck Lever TP_printk("addr=%s device=%s xid=0x%08x pageno=%u", __get_str(addr), 16549d200638SChuck Lever __get_str(device), __entry->xid, __entry->pageno 16559d200638SChuck Lever ) 16569d200638SChuck Lever ); 16579d200638SChuck Lever 1658dbc17acdSChuck Lever TRACE_EVENT(svcrdma_small_wrch_err, 1659dbc17acdSChuck Lever TP_PROTO( 1660dbc17acdSChuck Lever const struct svcxprt_rdma *rdma, 1661dbc17acdSChuck Lever unsigned int remaining, 1662dbc17acdSChuck Lever unsigned int seg_no, 1663dbc17acdSChuck Lever unsigned int num_segs 1664dbc17acdSChuck Lever ), 1665dbc17acdSChuck Lever 1666dbc17acdSChuck Lever TP_ARGS(rdma, remaining, seg_no, num_segs), 1667dbc17acdSChuck Lever 1668dbc17acdSChuck Lever TP_STRUCT__entry( 1669dbc17acdSChuck Lever __field(unsigned int, remaining) 1670dbc17acdSChuck Lever __field(unsigned int, seg_no) 1671dbc17acdSChuck Lever __field(unsigned int, num_segs) 1672dbc17acdSChuck Lever __string(device, rdma->sc_cm_id->device->name) 1673dbc17acdSChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1674dbc17acdSChuck Lever ), 1675dbc17acdSChuck Lever 1676dbc17acdSChuck Lever TP_fast_assign( 1677dbc17acdSChuck Lever __entry->remaining = remaining; 1678dbc17acdSChuck Lever __entry->seg_no = seg_no; 1679dbc17acdSChuck Lever __entry->num_segs = num_segs; 1680dbc17acdSChuck Lever __assign_str(device, rdma->sc_cm_id->device->name); 1681dbc17acdSChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1682dbc17acdSChuck Lever ), 1683dbc17acdSChuck Lever 1684dbc17acdSChuck Lever TP_printk("addr=%s device=%s remaining=%u seg_no=%u num_segs=%u", 1685dbc17acdSChuck Lever __get_str(addr), __get_str(device), __entry->remaining, 1686dbc17acdSChuck Lever __entry->seg_no, __entry->num_segs 1687dbc17acdSChuck Lever ) 1688dbc17acdSChuck Lever ); 1689dbc17acdSChuck Lever 16900dabe948SChuck Lever TRACE_EVENT(svcrdma_send_pullup, 16910dabe948SChuck Lever TP_PROTO( 16920dabe948SChuck Lever unsigned int len 16930dabe948SChuck Lever ), 16940dabe948SChuck Lever 16950dabe948SChuck Lever TP_ARGS(len), 16960dabe948SChuck Lever 16970dabe948SChuck Lever TP_STRUCT__entry( 16980dabe948SChuck Lever __field(unsigned int, len) 16990dabe948SChuck Lever ), 17000dabe948SChuck Lever 17010dabe948SChuck Lever TP_fast_assign( 17020dabe948SChuck Lever __entry->len = len; 17030dabe948SChuck Lever ), 17040dabe948SChuck Lever 17050dabe948SChuck Lever TP_printk("len=%u", __entry->len) 17060dabe948SChuck Lever ); 17070dabe948SChuck Lever 17083f8f25c6SChuck Lever TRACE_EVENT(svcrdma_send_err, 1709bd2abef3SChuck Lever TP_PROTO( 1710bd2abef3SChuck Lever const struct svc_rqst *rqst, 1711bd2abef3SChuck Lever int status 1712bd2abef3SChuck Lever ), 1713bd2abef3SChuck Lever 1714bd2abef3SChuck Lever TP_ARGS(rqst, status), 1715bd2abef3SChuck Lever 1716bd2abef3SChuck Lever TP_STRUCT__entry( 1717bd2abef3SChuck Lever __field(int, status) 1718bd2abef3SChuck Lever __field(u32, xid) 1719bd2abef3SChuck Lever __string(addr, rqst->rq_xprt->xpt_remotebuf) 1720bd2abef3SChuck Lever ), 1721bd2abef3SChuck Lever 1722bd2abef3SChuck Lever TP_fast_assign( 1723bd2abef3SChuck Lever __entry->status = status; 1724bd2abef3SChuck Lever __entry->xid = __be32_to_cpu(rqst->rq_xid); 1725bd2abef3SChuck Lever __assign_str(addr, rqst->rq_xprt->xpt_remotebuf); 1726bd2abef3SChuck Lever ), 1727bd2abef3SChuck Lever 17283f8f25c6SChuck Lever TP_printk("addr=%s xid=0x%08x status=%d", __get_str(addr), 1729bd2abef3SChuck Lever __entry->xid, __entry->status 1730bd2abef3SChuck Lever ) 1731bd2abef3SChuck Lever ); 1732bd2abef3SChuck Lever 1733bd2abef3SChuck Lever TRACE_EVENT(svcrdma_post_send, 1734bd2abef3SChuck Lever TP_PROTO( 173517f70f8dSChuck Lever const struct svc_rdma_send_ctxt *ctxt 1736bd2abef3SChuck Lever ), 1737bd2abef3SChuck Lever 173817f70f8dSChuck Lever TP_ARGS(ctxt), 1739bd2abef3SChuck Lever 1740bd2abef3SChuck Lever TP_STRUCT__entry( 174117f70f8dSChuck Lever __field(u32, cq_id) 174217f70f8dSChuck Lever __field(int, completion_id) 1743bd2abef3SChuck Lever __field(unsigned int, num_sge) 1744bd2abef3SChuck Lever __field(u32, inv_rkey) 1745bd2abef3SChuck Lever ), 1746bd2abef3SChuck Lever 1747bd2abef3SChuck Lever TP_fast_assign( 174817f70f8dSChuck Lever const struct ib_send_wr *wr = &ctxt->sc_send_wr; 174917f70f8dSChuck Lever 175017f70f8dSChuck Lever __entry->cq_id = ctxt->sc_cid.ci_queue_id; 175117f70f8dSChuck Lever __entry->completion_id = ctxt->sc_cid.ci_completion_id; 1752bd2abef3SChuck Lever __entry->num_sge = wr->num_sge; 1753bd2abef3SChuck Lever __entry->inv_rkey = (wr->opcode == IB_WR_SEND_WITH_INV) ? 1754bd2abef3SChuck Lever wr->ex.invalidate_rkey : 0; 1755bd2abef3SChuck Lever ), 1756bd2abef3SChuck Lever 175717f70f8dSChuck Lever TP_printk("cq_id=%u cid=%d num_sge=%u inv_rkey=0x%08x", 175817f70f8dSChuck Lever __entry->cq_id, __entry->completion_id, 175917f70f8dSChuck Lever __entry->num_sge, __entry->inv_rkey 1760bd2abef3SChuck Lever ) 1761bd2abef3SChuck Lever ); 1762bd2abef3SChuck Lever 17633ac56c2fSChuck Lever DEFINE_COMPLETION_EVENT(svcrdma_wc_send); 1764bd2abef3SChuck Lever 1765bd2abef3SChuck Lever TRACE_EVENT(svcrdma_post_recv, 1766bd2abef3SChuck Lever TP_PROTO( 17679b3bcf8cSChuck Lever const struct svc_rdma_recv_ctxt *ctxt 1768bd2abef3SChuck Lever ), 1769bd2abef3SChuck Lever 17709b3bcf8cSChuck Lever TP_ARGS(ctxt), 1771bd2abef3SChuck Lever 1772bd2abef3SChuck Lever TP_STRUCT__entry( 17739b3bcf8cSChuck Lever __field(u32, cq_id) 17749b3bcf8cSChuck Lever __field(int, completion_id) 1775bd2abef3SChuck Lever ), 1776bd2abef3SChuck Lever 1777bd2abef3SChuck Lever TP_fast_assign( 17789b3bcf8cSChuck Lever __entry->cq_id = ctxt->rc_cid.ci_queue_id; 17799b3bcf8cSChuck Lever __entry->completion_id = ctxt->rc_cid.ci_completion_id; 1780bd2abef3SChuck Lever ), 1781bd2abef3SChuck Lever 17829b3bcf8cSChuck Lever TP_printk("cq.id=%d cid=%d", 17839b3bcf8cSChuck Lever __entry->cq_id, __entry->completion_id 1784bd2abef3SChuck Lever ) 1785bd2abef3SChuck Lever ); 1786bd2abef3SChuck Lever 17879b3bcf8cSChuck Lever DEFINE_COMPLETION_EVENT(svcrdma_wc_receive); 17889b3bcf8cSChuck Lever 17899b3bcf8cSChuck Lever TRACE_EVENT(svcrdma_rq_post_err, 1790bd2abef3SChuck Lever TP_PROTO( 17919b3bcf8cSChuck Lever const struct svcxprt_rdma *rdma, 17929b3bcf8cSChuck Lever int status 1793bd2abef3SChuck Lever ), 1794bd2abef3SChuck Lever 17959b3bcf8cSChuck Lever TP_ARGS(rdma, status), 1796bd2abef3SChuck Lever 1797bd2abef3SChuck Lever TP_STRUCT__entry( 17989b3bcf8cSChuck Lever __field(int, status) 17999b3bcf8cSChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1800bd2abef3SChuck Lever ), 1801bd2abef3SChuck Lever 1802bd2abef3SChuck Lever TP_fast_assign( 18039b3bcf8cSChuck Lever __entry->status = status; 18049b3bcf8cSChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1805bd2abef3SChuck Lever ), 1806bd2abef3SChuck Lever 18079b3bcf8cSChuck Lever TP_printk("addr=%s status=%d", 18089b3bcf8cSChuck Lever __get_str(addr), __entry->status 1809bd2abef3SChuck Lever ) 1810bd2abef3SChuck Lever ); 1811bd2abef3SChuck Lever 18126787f0beSChuck Lever TRACE_EVENT(svcrdma_post_chunk, 1813bd2abef3SChuck Lever TP_PROTO( 18146787f0beSChuck Lever const struct rpc_rdma_cid *cid, 1815e28b4fc6SChuck Lever int sqecount 1816bd2abef3SChuck Lever ), 1817bd2abef3SChuck Lever 18186787f0beSChuck Lever TP_ARGS(cid, sqecount), 1819bd2abef3SChuck Lever 1820bd2abef3SChuck Lever TP_STRUCT__entry( 18216787f0beSChuck Lever __field(u32, cq_id) 18226787f0beSChuck Lever __field(int, completion_id) 1823bd2abef3SChuck Lever __field(int, sqecount) 1824bd2abef3SChuck Lever ), 1825bd2abef3SChuck Lever 1826bd2abef3SChuck Lever TP_fast_assign( 18276787f0beSChuck Lever __entry->cq_id = cid->ci_queue_id; 18286787f0beSChuck Lever __entry->completion_id = cid->ci_completion_id; 1829bd2abef3SChuck Lever __entry->sqecount = sqecount; 1830bd2abef3SChuck Lever ), 1831bd2abef3SChuck Lever 18326787f0beSChuck Lever TP_printk("cq.id=%u cid=%d sqecount=%d", 18336787f0beSChuck Lever __entry->cq_id, __entry->completion_id, 18346787f0beSChuck Lever __entry->sqecount 1835bd2abef3SChuck Lever ) 1836bd2abef3SChuck Lever ); 1837bd2abef3SChuck Lever 18386787f0beSChuck Lever DEFINE_COMPLETION_EVENT(svcrdma_wc_read); 18396787f0beSChuck Lever DEFINE_COMPLETION_EVENT(svcrdma_wc_write); 1840bd2abef3SChuck Lever 1841bd2abef3SChuck Lever TRACE_EVENT(svcrdma_qp_error, 1842bd2abef3SChuck Lever TP_PROTO( 1843bd2abef3SChuck Lever const struct ib_event *event, 1844bd2abef3SChuck Lever const struct sockaddr *sap 1845bd2abef3SChuck Lever ), 1846bd2abef3SChuck Lever 1847bd2abef3SChuck Lever TP_ARGS(event, sap), 1848bd2abef3SChuck Lever 1849bd2abef3SChuck Lever TP_STRUCT__entry( 1850bd2abef3SChuck Lever __field(unsigned int, event) 1851bd2abef3SChuck Lever __string(device, event->device->name) 1852bd2abef3SChuck Lever __array(__u8, addr, INET6_ADDRSTRLEN + 10) 1853bd2abef3SChuck Lever ), 1854bd2abef3SChuck Lever 1855bd2abef3SChuck Lever TP_fast_assign( 1856bd2abef3SChuck Lever __entry->event = event->event; 1857bd2abef3SChuck Lever __assign_str(device, event->device->name); 1858bd2abef3SChuck Lever snprintf(__entry->addr, sizeof(__entry->addr) - 1, 1859bd2abef3SChuck Lever "%pISpc", sap); 1860bd2abef3SChuck Lever ), 1861bd2abef3SChuck Lever 1862bd2abef3SChuck Lever TP_printk("addr=%s dev=%s event=%s (%u)", 1863bd2abef3SChuck Lever __entry->addr, __get_str(device), 1864bd2abef3SChuck Lever rdma_show_ib_event(__entry->event), __entry->event 1865bd2abef3SChuck Lever ) 1866bd2abef3SChuck Lever ); 1867bd2abef3SChuck Lever 1868bd2abef3SChuck Lever DECLARE_EVENT_CLASS(svcrdma_sendqueue_event, 1869bd2abef3SChuck Lever TP_PROTO( 1870bd2abef3SChuck Lever const struct svcxprt_rdma *rdma 1871bd2abef3SChuck Lever ), 1872bd2abef3SChuck Lever 1873bd2abef3SChuck Lever TP_ARGS(rdma), 1874bd2abef3SChuck Lever 1875bd2abef3SChuck Lever TP_STRUCT__entry( 1876bd2abef3SChuck Lever __field(int, avail) 1877bd2abef3SChuck Lever __field(int, depth) 1878bd2abef3SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1879bd2abef3SChuck Lever ), 1880bd2abef3SChuck Lever 1881bd2abef3SChuck Lever TP_fast_assign( 1882bd2abef3SChuck Lever __entry->avail = atomic_read(&rdma->sc_sq_avail); 1883bd2abef3SChuck Lever __entry->depth = rdma->sc_sq_depth; 1884bd2abef3SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1885bd2abef3SChuck Lever ), 1886bd2abef3SChuck Lever 1887bd2abef3SChuck Lever TP_printk("addr=%s sc_sq_avail=%d/%d", 1888bd2abef3SChuck Lever __get_str(addr), __entry->avail, __entry->depth 1889bd2abef3SChuck Lever ) 1890bd2abef3SChuck Lever ); 1891bd2abef3SChuck Lever 1892bd2abef3SChuck Lever #define DEFINE_SQ_EVENT(name) \ 1893bd2abef3SChuck Lever DEFINE_EVENT(svcrdma_sendqueue_event, svcrdma_sq_##name,\ 1894bd2abef3SChuck Lever TP_PROTO( \ 1895bd2abef3SChuck Lever const struct svcxprt_rdma *rdma \ 1896bd2abef3SChuck Lever ), \ 1897bd2abef3SChuck Lever TP_ARGS(rdma)) 1898bd2abef3SChuck Lever 1899bd2abef3SChuck Lever DEFINE_SQ_EVENT(full); 1900bd2abef3SChuck Lever DEFINE_SQ_EVENT(retry); 1901bd2abef3SChuck Lever 1902e28b4fc6SChuck Lever TRACE_EVENT(svcrdma_sq_post_err, 1903e28b4fc6SChuck Lever TP_PROTO( 1904e28b4fc6SChuck Lever const struct svcxprt_rdma *rdma, 1905e28b4fc6SChuck Lever int status 1906e28b4fc6SChuck Lever ), 1907e28b4fc6SChuck Lever 1908e28b4fc6SChuck Lever TP_ARGS(rdma, status), 1909e28b4fc6SChuck Lever 1910e28b4fc6SChuck Lever TP_STRUCT__entry( 1911e28b4fc6SChuck Lever __field(int, avail) 1912e28b4fc6SChuck Lever __field(int, depth) 1913e28b4fc6SChuck Lever __field(int, status) 1914e28b4fc6SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1915e28b4fc6SChuck Lever ), 1916e28b4fc6SChuck Lever 1917e28b4fc6SChuck Lever TP_fast_assign( 1918e28b4fc6SChuck Lever __entry->avail = atomic_read(&rdma->sc_sq_avail); 1919e28b4fc6SChuck Lever __entry->depth = rdma->sc_sq_depth; 1920e28b4fc6SChuck Lever __entry->status = status; 1921e28b4fc6SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1922e28b4fc6SChuck Lever ), 1923e28b4fc6SChuck Lever 1924e28b4fc6SChuck Lever TP_printk("addr=%s sc_sq_avail=%d/%d status=%d", 1925e28b4fc6SChuck Lever __get_str(addr), __entry->avail, __entry->depth, 1926e28b4fc6SChuck Lever __entry->status 1927e28b4fc6SChuck Lever ) 1928e28b4fc6SChuck Lever ); 1929e28b4fc6SChuck Lever 1930e48f083eSChuck Lever #endif /* _TRACE_RPCRDMA_H */ 1931e48f083eSChuck Lever 1932e48f083eSChuck Lever #include <trace/define_trace.h> 1933