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 633a9568feSChuck 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) 743a9568feSChuck Lever __string(addr, rpcrdma_addrstr(rep->rr_rxprt)) 753a9568feSChuck 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); 823a9568feSChuck Lever __assign_str(addr, rpcrdma_addrstr(rep->rr_rxprt)); 833a9568feSChuck Lever __assign_str(port, rpcrdma_portstr(rep->rr_rxprt)); 84b4a7f91cSChuck Lever ), 85b4a7f91cSChuck Lever 863a9568feSChuck Lever TP_printk("peer=[%s]:%s xid=0x%08x version=%u proc=%u", 873a9568feSChuck Lever __get_str(addr), __get_str(port), 883a9568feSChuck Lever __entry->xid, __entry->version, __entry->proc 89b4a7f91cSChuck Lever ) 90b4a7f91cSChuck Lever ); 91b4a7f91cSChuck Lever 92b4a7f91cSChuck Lever #define DEFINE_REPLY_EVENT(name) \ 933a9568feSChuck Lever DEFINE_EVENT(xprtrdma_reply_class, \ 943a9568feSChuck 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 277*7703db97SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_mr_class, 278*7703db97SChuck Lever TP_PROTO( 279*7703db97SChuck Lever const struct rpcrdma_mr *mr 280*7703db97SChuck Lever ), 281*7703db97SChuck Lever 282*7703db97SChuck Lever TP_ARGS(mr), 283*7703db97SChuck Lever 284*7703db97SChuck Lever TP_STRUCT__entry( 285*7703db97SChuck Lever __field(unsigned int, task_id) 286*7703db97SChuck Lever __field(unsigned int, client_id) 287*7703db97SChuck Lever __field(u32, mr_id) 288*7703db97SChuck Lever __field(int, nents) 289*7703db97SChuck Lever __field(u32, handle) 290*7703db97SChuck Lever __field(u32, length) 291*7703db97SChuck Lever __field(u64, offset) 292*7703db97SChuck Lever __field(u32, dir) 293*7703db97SChuck Lever ), 294*7703db97SChuck Lever 295*7703db97SChuck Lever TP_fast_assign( 296*7703db97SChuck Lever const struct rpcrdma_req *req = mr->mr_req; 297*7703db97SChuck Lever const struct rpc_task *task = req->rl_slot.rq_task; 298*7703db97SChuck Lever 299*7703db97SChuck Lever __entry->task_id = task->tk_pid; 300*7703db97SChuck Lever __entry->client_id = task->tk_client->cl_clid; 301*7703db97SChuck Lever __entry->mr_id = mr->frwr.fr_mr->res.id; 302*7703db97SChuck Lever __entry->nents = mr->mr_nents; 303*7703db97SChuck Lever __entry->handle = mr->mr_handle; 304*7703db97SChuck Lever __entry->length = mr->mr_length; 305*7703db97SChuck Lever __entry->offset = mr->mr_offset; 306*7703db97SChuck Lever __entry->dir = mr->mr_dir; 307*7703db97SChuck Lever ), 308*7703db97SChuck Lever 309*7703db97SChuck Lever TP_printk("task:%u@%u mr.id=%u nents=%d %u@0x%016llx:0x%08x (%s)", 310*7703db97SChuck Lever __entry->task_id, __entry->client_id, 311*7703db97SChuck Lever __entry->mr_id, __entry->nents, __entry->length, 312*7703db97SChuck Lever (unsigned long long)__entry->offset, __entry->handle, 313*7703db97SChuck Lever xprtrdma_show_direction(__entry->dir) 314*7703db97SChuck Lever ) 315*7703db97SChuck Lever ); 316*7703db97SChuck Lever 317*7703db97SChuck Lever #define DEFINE_MR_EVENT(name) \ 318*7703db97SChuck Lever DEFINE_EVENT(xprtrdma_mr_class, \ 319*7703db97SChuck Lever xprtrdma_mr_##name, \ 320*7703db97SChuck Lever TP_PROTO( \ 321*7703db97SChuck Lever const struct rpcrdma_mr *mr \ 322*7703db97SChuck Lever ), \ 323*7703db97SChuck Lever TP_ARGS(mr)) 324*7703db97SChuck Lever 325*7703db97SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_anonymous_mr_class, 3262937fedeSChuck Lever TP_PROTO( 3272937fedeSChuck Lever const struct rpcrdma_mr *mr 3282937fedeSChuck Lever ), 3292937fedeSChuck Lever 3302937fedeSChuck Lever TP_ARGS(mr), 3312937fedeSChuck Lever 3322937fedeSChuck Lever TP_STRUCT__entry( 33362a89501SChuck Lever __field(u32, mr_id) 33462a89501SChuck Lever __field(int, nents) 3352937fedeSChuck Lever __field(u32, handle) 3362937fedeSChuck Lever __field(u32, length) 3372937fedeSChuck Lever __field(u64, offset) 338aba11831SChuck Lever __field(u32, dir) 3392937fedeSChuck Lever ), 3402937fedeSChuck Lever 3412937fedeSChuck Lever TP_fast_assign( 34262a89501SChuck Lever __entry->mr_id = mr->frwr.fr_mr->res.id; 34362a89501SChuck Lever __entry->nents = mr->mr_nents; 3442937fedeSChuck Lever __entry->handle = mr->mr_handle; 3452937fedeSChuck Lever __entry->length = mr->mr_length; 3462937fedeSChuck Lever __entry->offset = mr->mr_offset; 347aba11831SChuck Lever __entry->dir = mr->mr_dir; 3482937fedeSChuck Lever ), 3492937fedeSChuck Lever 35062a89501SChuck Lever TP_printk("mr.id=%u nents=%d %u@0x%016llx:0x%08x (%s)", 35162a89501SChuck Lever __entry->mr_id, __entry->nents, __entry->length, 352aba11831SChuck Lever (unsigned long long)__entry->offset, __entry->handle, 353aba11831SChuck Lever xprtrdma_show_direction(__entry->dir) 3542937fedeSChuck Lever ) 3552937fedeSChuck Lever ); 3562937fedeSChuck Lever 357*7703db97SChuck Lever #define DEFINE_ANON_MR_EVENT(name) \ 358*7703db97SChuck Lever DEFINE_EVENT(xprtrdma_anonymous_mr_class, \ 359*7703db97SChuck Lever xprtrdma_mr_##name, \ 3602937fedeSChuck Lever TP_PROTO( \ 3612937fedeSChuck Lever const struct rpcrdma_mr *mr \ 3622937fedeSChuck Lever ), \ 3632937fedeSChuck Lever TP_ARGS(mr)) 3642937fedeSChuck Lever 365d11e9346SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_callback_class, 366fc1eb807SChuck Lever TP_PROTO( 367d11e9346SChuck Lever const struct rpcrdma_xprt *r_xprt, 368fc1eb807SChuck Lever const struct rpc_rqst *rqst 369fc1eb807SChuck Lever ), 370fc1eb807SChuck Lever 371d11e9346SChuck Lever TP_ARGS(r_xprt, rqst), 372fc1eb807SChuck Lever 373fc1eb807SChuck Lever TP_STRUCT__entry( 374fc1eb807SChuck Lever __field(u32, xid) 375d11e9346SChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 376d11e9346SChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 377fc1eb807SChuck Lever ), 378fc1eb807SChuck Lever 379fc1eb807SChuck Lever TP_fast_assign( 380fc1eb807SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 381d11e9346SChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 382d11e9346SChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 383fc1eb807SChuck Lever ), 384fc1eb807SChuck Lever 385d11e9346SChuck Lever TP_printk("peer=[%s]:%s xid=0x%08x", 386d11e9346SChuck Lever __get_str(addr), __get_str(port), __entry->xid 387fc1eb807SChuck Lever ) 388fc1eb807SChuck Lever ); 389fc1eb807SChuck Lever 390d11e9346SChuck Lever #define DEFINE_CALLBACK_EVENT(name) \ 391d11e9346SChuck Lever DEFINE_EVENT(xprtrdma_callback_class, \ 392d11e9346SChuck Lever xprtrdma_cb_##name, \ 393fc1eb807SChuck Lever TP_PROTO( \ 394d11e9346SChuck Lever const struct rpcrdma_xprt *r_xprt, \ 395fc1eb807SChuck Lever const struct rpc_rqst *rqst \ 396fc1eb807SChuck Lever ), \ 397d11e9346SChuck Lever TP_ARGS(r_xprt, rqst)) 398fc1eb807SChuck Lever 399b4a7f91cSChuck Lever /** 400b4744e00SChuck Lever ** Connection events 401b4744e00SChuck Lever **/ 402b4744e00SChuck Lever 403f54c870dSChuck Lever TRACE_EVENT(xprtrdma_inline_thresh, 404f54c870dSChuck Lever TP_PROTO( 405745b734cSChuck Lever const struct rpcrdma_ep *ep 406f54c870dSChuck Lever ), 407f54c870dSChuck Lever 408745b734cSChuck Lever TP_ARGS(ep), 409f54c870dSChuck Lever 410f54c870dSChuck Lever TP_STRUCT__entry( 411f54c870dSChuck Lever __field(unsigned int, inline_send) 412f54c870dSChuck Lever __field(unsigned int, inline_recv) 413f54c870dSChuck Lever __field(unsigned int, max_send) 414f54c870dSChuck Lever __field(unsigned int, max_recv) 415745b734cSChuck Lever __array(unsigned char, srcaddr, sizeof(struct sockaddr_in6)) 416745b734cSChuck Lever __array(unsigned char, dstaddr, sizeof(struct sockaddr_in6)) 417f54c870dSChuck Lever ), 418f54c870dSChuck Lever 419f54c870dSChuck Lever TP_fast_assign( 420745b734cSChuck Lever const struct rdma_cm_id *id = ep->re_id; 421f54c870dSChuck Lever 42293aa8e0aSChuck Lever __entry->inline_send = ep->re_inline_send; 42393aa8e0aSChuck Lever __entry->inline_recv = ep->re_inline_recv; 42493aa8e0aSChuck Lever __entry->max_send = ep->re_max_inline_send; 42593aa8e0aSChuck Lever __entry->max_recv = ep->re_max_inline_recv; 426745b734cSChuck Lever memcpy(__entry->srcaddr, &id->route.addr.src_addr, 427745b734cSChuck Lever sizeof(struct sockaddr_in6)); 428745b734cSChuck Lever memcpy(__entry->dstaddr, &id->route.addr.dst_addr, 429745b734cSChuck Lever sizeof(struct sockaddr_in6)); 430f54c870dSChuck Lever ), 431f54c870dSChuck Lever 432745b734cSChuck Lever TP_printk("%pISpc -> %pISpc neg send/recv=%u/%u, calc send/recv=%u/%u", 433745b734cSChuck Lever __entry->srcaddr, __entry->dstaddr, 434f54c870dSChuck Lever __entry->inline_send, __entry->inline_recv, 435f54c870dSChuck Lever __entry->max_send, __entry->max_recv 436f54c870dSChuck Lever ) 437f54c870dSChuck Lever ); 438f54c870dSChuck Lever 4397b020f17SChuck Lever DEFINE_CONN_EVENT(connect); 4407b020f17SChuck Lever DEFINE_CONN_EVENT(disconnect); 4417b020f17SChuck Lever 4427b020f17SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_op_inject_dsc); 4437b020f17SChuck Lever 4447b020f17SChuck Lever TRACE_EVENT(xprtrdma_op_connect, 445b4744e00SChuck Lever TP_PROTO( 446b4744e00SChuck Lever const struct rpcrdma_xprt *r_xprt, 4477b020f17SChuck Lever unsigned long delay 448b4744e00SChuck Lever ), 449b4744e00SChuck Lever 4507b020f17SChuck Lever TP_ARGS(r_xprt, delay), 451b4744e00SChuck Lever 452b4744e00SChuck Lever TP_STRUCT__entry( 453b4744e00SChuck Lever __field(const void *, r_xprt) 4547b020f17SChuck Lever __field(unsigned long, delay) 455b4744e00SChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 456b4744e00SChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 457b4744e00SChuck Lever ), 458b4744e00SChuck Lever 459b4744e00SChuck Lever TP_fast_assign( 460b4744e00SChuck Lever __entry->r_xprt = r_xprt; 4617b020f17SChuck Lever __entry->delay = delay; 462b4744e00SChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 463b4744e00SChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 464b4744e00SChuck Lever ), 465b4744e00SChuck Lever 4667b020f17SChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p delay=%lu", 4677b020f17SChuck Lever __get_str(addr), __get_str(port), __entry->r_xprt, 4687b020f17SChuck Lever __entry->delay 469b4744e00SChuck Lever ) 470b4744e00SChuck Lever ); 471b4744e00SChuck Lever 472b4744e00SChuck Lever 473675dd90aSChuck Lever TRACE_EVENT(xprtrdma_op_set_cto, 474675dd90aSChuck Lever TP_PROTO( 475675dd90aSChuck Lever const struct rpcrdma_xprt *r_xprt, 476675dd90aSChuck Lever unsigned long connect, 477675dd90aSChuck Lever unsigned long reconnect 478675dd90aSChuck Lever ), 479675dd90aSChuck Lever 480675dd90aSChuck Lever TP_ARGS(r_xprt, connect, reconnect), 481675dd90aSChuck Lever 482675dd90aSChuck Lever TP_STRUCT__entry( 483675dd90aSChuck Lever __field(const void *, r_xprt) 484675dd90aSChuck Lever __field(unsigned long, connect) 485675dd90aSChuck Lever __field(unsigned long, reconnect) 486675dd90aSChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 487675dd90aSChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 488675dd90aSChuck Lever ), 489675dd90aSChuck Lever 490675dd90aSChuck Lever TP_fast_assign( 491675dd90aSChuck Lever __entry->r_xprt = r_xprt; 492675dd90aSChuck Lever __entry->connect = connect; 493675dd90aSChuck Lever __entry->reconnect = reconnect; 494675dd90aSChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 495675dd90aSChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 496675dd90aSChuck Lever ), 497675dd90aSChuck Lever 498675dd90aSChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: connect=%lu reconnect=%lu", 499675dd90aSChuck Lever __get_str(addr), __get_str(port), __entry->r_xprt, 500675dd90aSChuck Lever __entry->connect / HZ, __entry->reconnect / HZ 501675dd90aSChuck Lever ) 502675dd90aSChuck Lever ); 503675dd90aSChuck Lever 504f9521d53SChuck Lever TRACE_EVENT(xprtrdma_qp_event, 505643cf323SChuck Lever TP_PROTO( 506745b734cSChuck Lever const struct rpcrdma_ep *ep, 507643cf323SChuck Lever const struct ib_event *event 508643cf323SChuck Lever ), 509643cf323SChuck Lever 510745b734cSChuck Lever TP_ARGS(ep, event), 511643cf323SChuck Lever 512643cf323SChuck Lever TP_STRUCT__entry( 513745b734cSChuck Lever __field(unsigned long, event) 514643cf323SChuck Lever __string(name, event->device->name) 515745b734cSChuck Lever __array(unsigned char, srcaddr, sizeof(struct sockaddr_in6)) 516745b734cSChuck Lever __array(unsigned char, dstaddr, sizeof(struct sockaddr_in6)) 517643cf323SChuck Lever ), 518643cf323SChuck Lever 519643cf323SChuck Lever TP_fast_assign( 520745b734cSChuck Lever const struct rdma_cm_id *id = ep->re_id; 521745b734cSChuck Lever 522643cf323SChuck Lever __entry->event = event->event; 523643cf323SChuck Lever __assign_str(name, event->device->name); 524745b734cSChuck Lever memcpy(__entry->srcaddr, &id->route.addr.src_addr, 525745b734cSChuck Lever sizeof(struct sockaddr_in6)); 526745b734cSChuck Lever memcpy(__entry->dstaddr, &id->route.addr.dst_addr, 527745b734cSChuck Lever sizeof(struct sockaddr_in6)); 528643cf323SChuck Lever ), 529643cf323SChuck Lever 530745b734cSChuck Lever TP_printk("%pISpc -> %pISpc device=%s %s (%lu)", 531745b734cSChuck Lever __entry->srcaddr, __entry->dstaddr, __get_str(name), 532745b734cSChuck Lever rdma_show_ib_event(__entry->event), __entry->event 533643cf323SChuck Lever ) 534643cf323SChuck Lever ); 535643cf323SChuck Lever 536b4744e00SChuck Lever /** 537ab03eff5SChuck Lever ** Call events 538ab03eff5SChuck Lever **/ 539ab03eff5SChuck Lever 5401c443effSChuck Lever TRACE_EVENT(xprtrdma_createmrs, 5411c443effSChuck Lever TP_PROTO( 5421c443effSChuck Lever const struct rpcrdma_xprt *r_xprt, 5431c443effSChuck Lever unsigned int count 5441c443effSChuck Lever ), 5451c443effSChuck Lever 5461c443effSChuck Lever TP_ARGS(r_xprt, count), 5471c443effSChuck Lever 5481c443effSChuck Lever TP_STRUCT__entry( 5491c443effSChuck Lever __field(const void *, r_xprt) 5506dc6ec9eSChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 5516dc6ec9eSChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 5521c443effSChuck Lever __field(unsigned int, count) 5531c443effSChuck Lever ), 5541c443effSChuck Lever 5551c443effSChuck Lever TP_fast_assign( 5561c443effSChuck Lever __entry->r_xprt = r_xprt; 5571c443effSChuck Lever __entry->count = count; 5586dc6ec9eSChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 5596dc6ec9eSChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 5601c443effSChuck Lever ), 5611c443effSChuck Lever 5626dc6ec9eSChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: created %u MRs", 5636dc6ec9eSChuck Lever __get_str(addr), __get_str(port), __entry->r_xprt, 5646dc6ec9eSChuck Lever __entry->count 5656dc6ec9eSChuck Lever ) 5666dc6ec9eSChuck Lever ); 5676dc6ec9eSChuck Lever 5680307cdecSChuck Lever TRACE_EVENT(xprtrdma_nomrs_err, 5693b39f52aSChuck Lever TP_PROTO( 5700307cdecSChuck Lever const struct rpcrdma_xprt *r_xprt, 5713b39f52aSChuck Lever const struct rpcrdma_req *req 5723b39f52aSChuck Lever ), 5733b39f52aSChuck Lever 5740307cdecSChuck Lever TP_ARGS(r_xprt, req), 5753b39f52aSChuck Lever 5763b39f52aSChuck Lever TP_STRUCT__entry( 5773b39f52aSChuck Lever __field(unsigned int, task_id) 5783b39f52aSChuck Lever __field(unsigned int, client_id) 5790307cdecSChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 5800307cdecSChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 5813b39f52aSChuck Lever ), 5823b39f52aSChuck Lever 5833b39f52aSChuck Lever TP_fast_assign( 5843b39f52aSChuck Lever const struct rpc_rqst *rqst = &req->rl_slot; 5853b39f52aSChuck Lever 5863b39f52aSChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 5873b39f52aSChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 5880307cdecSChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 5890307cdecSChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 5903b39f52aSChuck Lever ), 5913b39f52aSChuck Lever 5920307cdecSChuck Lever TP_printk("peer=[%s]:%s task:%u@%u", 5930307cdecSChuck Lever __get_str(addr), __get_str(port), 5940307cdecSChuck Lever __entry->task_id, __entry->client_id 5953b39f52aSChuck Lever ) 5963b39f52aSChuck Lever ); 5971c443effSChuck Lever 598aba11831SChuck Lever DEFINE_RDCH_EVENT(read); 599aba11831SChuck Lever DEFINE_WRCH_EVENT(write); 600aba11831SChuck Lever DEFINE_WRCH_EVENT(reply); 60158f10ad4SChuck Lever 602ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch); 603614f3c96SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch_pullup); 604614f3c96SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch_mapped); 605ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_readch); 606ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_areadch); 607ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_writech); 608ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_replych); 609ab03eff5SChuck Lever 610ab03eff5SChuck Lever #define xprtrdma_show_chunktype(x) \ 611ab03eff5SChuck Lever __print_symbolic(x, \ 612ab03eff5SChuck Lever { rpcrdma_noch, "inline" }, \ 613614f3c96SChuck Lever { rpcrdma_noch_pullup, "pullup" }, \ 614614f3c96SChuck Lever { rpcrdma_noch_mapped, "mapped" }, \ 615ab03eff5SChuck Lever { rpcrdma_readch, "read list" }, \ 616ab03eff5SChuck Lever { rpcrdma_areadch, "*read list" }, \ 617ab03eff5SChuck Lever { rpcrdma_writech, "write list" }, \ 618ab03eff5SChuck Lever { rpcrdma_replych, "reply chunk" }) 619ab03eff5SChuck Lever 620ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_marshal, 621ab03eff5SChuck Lever TP_PROTO( 6221310051cSChuck Lever const struct rpcrdma_req *req, 623ab03eff5SChuck Lever unsigned int rtype, 624ab03eff5SChuck Lever unsigned int wtype 625ab03eff5SChuck Lever ), 626ab03eff5SChuck Lever 6271310051cSChuck Lever TP_ARGS(req, rtype, wtype), 628ab03eff5SChuck Lever 629ab03eff5SChuck Lever TP_STRUCT__entry( 630ab03eff5SChuck Lever __field(unsigned int, task_id) 631ab03eff5SChuck Lever __field(unsigned int, client_id) 632ab03eff5SChuck Lever __field(u32, xid) 633ab03eff5SChuck Lever __field(unsigned int, hdrlen) 634ab03eff5SChuck Lever __field(unsigned int, headlen) 635ab03eff5SChuck Lever __field(unsigned int, pagelen) 636ab03eff5SChuck Lever __field(unsigned int, taillen) 637ab03eff5SChuck Lever __field(unsigned int, rtype) 638ab03eff5SChuck Lever __field(unsigned int, wtype) 639ab03eff5SChuck Lever ), 640ab03eff5SChuck Lever 641ab03eff5SChuck Lever TP_fast_assign( 6421310051cSChuck Lever const struct rpc_rqst *rqst = &req->rl_slot; 6431310051cSChuck Lever 644ab03eff5SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 645ab03eff5SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 646ab03eff5SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 6471310051cSChuck Lever __entry->hdrlen = req->rl_hdrbuf.len; 648ab03eff5SChuck Lever __entry->headlen = rqst->rq_snd_buf.head[0].iov_len; 649ab03eff5SChuck Lever __entry->pagelen = rqst->rq_snd_buf.page_len; 650ab03eff5SChuck Lever __entry->taillen = rqst->rq_snd_buf.tail[0].iov_len; 651ab03eff5SChuck Lever __entry->rtype = rtype; 652ab03eff5SChuck Lever __entry->wtype = wtype; 653ab03eff5SChuck Lever ), 654ab03eff5SChuck Lever 655ab03eff5SChuck Lever TP_printk("task:%u@%u xid=0x%08x: hdr=%u xdr=%u/%u/%u %s/%s", 656ab03eff5SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 657ab03eff5SChuck Lever __entry->hdrlen, 658ab03eff5SChuck Lever __entry->headlen, __entry->pagelen, __entry->taillen, 659ab03eff5SChuck Lever xprtrdma_show_chunktype(__entry->rtype), 660ab03eff5SChuck Lever xprtrdma_show_chunktype(__entry->wtype) 661ab03eff5SChuck Lever ) 662ab03eff5SChuck Lever ); 663ab03eff5SChuck Lever 66417e4c443SChuck Lever TRACE_EVENT(xprtrdma_marshal_failed, 66517e4c443SChuck Lever TP_PROTO(const struct rpc_rqst *rqst, 66617e4c443SChuck Lever int ret 66717e4c443SChuck Lever ), 66817e4c443SChuck Lever 66917e4c443SChuck Lever TP_ARGS(rqst, ret), 67017e4c443SChuck Lever 67117e4c443SChuck Lever TP_STRUCT__entry( 67217e4c443SChuck Lever __field(unsigned int, task_id) 67317e4c443SChuck Lever __field(unsigned int, client_id) 67417e4c443SChuck Lever __field(u32, xid) 67517e4c443SChuck Lever __field(int, ret) 67617e4c443SChuck Lever ), 67717e4c443SChuck Lever 67817e4c443SChuck Lever TP_fast_assign( 67917e4c443SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 68017e4c443SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 68117e4c443SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 68217e4c443SChuck Lever __entry->ret = ret; 68317e4c443SChuck Lever ), 68417e4c443SChuck Lever 68517e4c443SChuck Lever TP_printk("task:%u@%u xid=0x%08x: ret=%d", 68617e4c443SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 68717e4c443SChuck Lever __entry->ret 68817e4c443SChuck Lever ) 68917e4c443SChuck Lever ); 69017e4c443SChuck Lever 69105eb06d8SChuck Lever TRACE_EVENT(xprtrdma_prepsend_failed, 69205eb06d8SChuck Lever TP_PROTO(const struct rpc_rqst *rqst, 69305eb06d8SChuck Lever int ret 69405eb06d8SChuck Lever ), 69505eb06d8SChuck Lever 69605eb06d8SChuck Lever TP_ARGS(rqst, ret), 69705eb06d8SChuck Lever 69805eb06d8SChuck Lever TP_STRUCT__entry( 69905eb06d8SChuck Lever __field(unsigned int, task_id) 70005eb06d8SChuck Lever __field(unsigned int, client_id) 70105eb06d8SChuck Lever __field(u32, xid) 70205eb06d8SChuck Lever __field(int, ret) 70305eb06d8SChuck Lever ), 70405eb06d8SChuck Lever 70505eb06d8SChuck Lever TP_fast_assign( 70605eb06d8SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 70705eb06d8SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 70805eb06d8SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 70905eb06d8SChuck Lever __entry->ret = ret; 71005eb06d8SChuck Lever ), 71105eb06d8SChuck Lever 71205eb06d8SChuck Lever TP_printk("task:%u@%u xid=0x%08x: ret=%d", 71305eb06d8SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 71405eb06d8SChuck Lever __entry->ret 71505eb06d8SChuck Lever ) 71605eb06d8SChuck Lever ); 71705eb06d8SChuck Lever 718ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_post_send, 719ab03eff5SChuck Lever TP_PROTO( 720bdb2ce82SChuck Lever const struct rpcrdma_req *req 721ab03eff5SChuck Lever ), 722ab03eff5SChuck Lever 723bdb2ce82SChuck Lever TP_ARGS(req), 724ab03eff5SChuck Lever 725ab03eff5SChuck Lever TP_STRUCT__entry( 726b2e7467fSChuck Lever __field(u32, cq_id) 727b2e7467fSChuck Lever __field(int, completion_id) 7280c77668dSChuck Lever __field(unsigned int, task_id) 7290c77668dSChuck Lever __field(unsigned int, client_id) 730ab03eff5SChuck Lever __field(int, num_sge) 731470443e0SChuck Lever __field(int, signaled) 732ab03eff5SChuck Lever ), 733ab03eff5SChuck Lever 734ab03eff5SChuck Lever TP_fast_assign( 7350c77668dSChuck Lever const struct rpc_rqst *rqst = &req->rl_slot; 736b2e7467fSChuck Lever const struct rpcrdma_sendctx *sc = req->rl_sendctx; 7370c77668dSChuck Lever 738b2e7467fSChuck Lever __entry->cq_id = sc->sc_cid.ci_queue_id; 739b2e7467fSChuck Lever __entry->completion_id = sc->sc_cid.ci_completion_id; 7400c77668dSChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 74110694ac9SChuck Lever __entry->client_id = rqst->rq_task->tk_client ? 74210694ac9SChuck Lever rqst->rq_task->tk_client->cl_clid : -1; 743dc15c3d5SChuck Lever __entry->num_sge = req->rl_wr.num_sge; 744dc15c3d5SChuck Lever __entry->signaled = req->rl_wr.send_flags & IB_SEND_SIGNALED; 745ab03eff5SChuck Lever ), 746ab03eff5SChuck Lever 747b2e7467fSChuck Lever TP_printk("task:%u@%u cq.id=%u cid=%d (%d SGE%s) %s", 7480c77668dSChuck Lever __entry->task_id, __entry->client_id, 749b2e7467fSChuck Lever __entry->cq_id, __entry->completion_id, 750b2e7467fSChuck Lever __entry->num_sge, (__entry->num_sge == 1 ? "" : "s"), 751bdb2ce82SChuck Lever (__entry->signaled ? "signaled" : "") 752ab03eff5SChuck Lever ) 753ab03eff5SChuck Lever ); 754ab03eff5SChuck Lever 755b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_post_recv, 756b4a7f91cSChuck Lever TP_PROTO( 7572dfdcd88SChuck Lever const struct rpcrdma_rep *rep 758b4a7f91cSChuck Lever ), 759b4a7f91cSChuck Lever 7602dfdcd88SChuck Lever TP_ARGS(rep), 761b4a7f91cSChuck Lever 762b4a7f91cSChuck Lever TP_STRUCT__entry( 763af5865d2SChuck Lever __field(u32, cq_id) 764af5865d2SChuck Lever __field(int, completion_id) 765b4a7f91cSChuck Lever ), 766b4a7f91cSChuck Lever 767b4a7f91cSChuck Lever TP_fast_assign( 768af5865d2SChuck Lever __entry->cq_id = rep->rr_cid.ci_queue_id; 769af5865d2SChuck Lever __entry->completion_id = rep->rr_cid.ci_completion_id; 770b4a7f91cSChuck Lever ), 771b4a7f91cSChuck Lever 772af5865d2SChuck Lever TP_printk("cq.id=%d cid=%d", 773af5865d2SChuck Lever __entry->cq_id, __entry->completion_id 774b4a7f91cSChuck Lever ) 775b4a7f91cSChuck Lever ); 776b4a7f91cSChuck Lever 7777c8d9e7cSChuck Lever TRACE_EVENT(xprtrdma_post_recvs, 7787c8d9e7cSChuck Lever TP_PROTO( 7797c8d9e7cSChuck Lever const struct rpcrdma_xprt *r_xprt, 7807c8d9e7cSChuck Lever unsigned int count, 7817c8d9e7cSChuck Lever int status 7827c8d9e7cSChuck Lever ), 7837c8d9e7cSChuck Lever 7847c8d9e7cSChuck Lever TP_ARGS(r_xprt, count, status), 7857c8d9e7cSChuck Lever 7867c8d9e7cSChuck Lever TP_STRUCT__entry( 7877c8d9e7cSChuck Lever __field(const void *, r_xprt) 7887c8d9e7cSChuck Lever __field(unsigned int, count) 7897c8d9e7cSChuck Lever __field(int, status) 7907c8d9e7cSChuck Lever __field(int, posted) 7917c8d9e7cSChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 7927c8d9e7cSChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 7937c8d9e7cSChuck Lever ), 7947c8d9e7cSChuck Lever 7957c8d9e7cSChuck Lever TP_fast_assign( 7967c8d9e7cSChuck Lever __entry->r_xprt = r_xprt; 7977c8d9e7cSChuck Lever __entry->count = count; 7987c8d9e7cSChuck Lever __entry->status = status; 799e28ce900SChuck Lever __entry->posted = r_xprt->rx_ep->re_receive_count; 8007c8d9e7cSChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 8017c8d9e7cSChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 8027c8d9e7cSChuck Lever ), 8037c8d9e7cSChuck Lever 8047c8d9e7cSChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: %u new recvs, %d active (rc %d)", 8057c8d9e7cSChuck Lever __get_str(addr), __get_str(port), __entry->r_xprt, 8067c8d9e7cSChuck Lever __entry->count, __entry->posted, __entry->status 807ab03eff5SChuck Lever ) 808ab03eff5SChuck Lever ); 809ab03eff5SChuck Lever 81036a55edfSChuck Lever TRACE_EVENT(xprtrdma_post_linv_err, 8114b93dab3SChuck Lever TP_PROTO( 8124b93dab3SChuck Lever const struct rpcrdma_req *req, 8134b93dab3SChuck Lever int status 8144b93dab3SChuck Lever ), 8154b93dab3SChuck Lever 8164b93dab3SChuck Lever TP_ARGS(req, status), 8174b93dab3SChuck Lever 8184b93dab3SChuck Lever TP_STRUCT__entry( 81936a55edfSChuck Lever __field(unsigned int, task_id) 82036a55edfSChuck Lever __field(unsigned int, client_id) 8214b93dab3SChuck Lever __field(int, status) 8224b93dab3SChuck Lever ), 8234b93dab3SChuck Lever 8244b93dab3SChuck Lever TP_fast_assign( 82536a55edfSChuck Lever const struct rpc_task *task = req->rl_slot.rq_task; 82636a55edfSChuck Lever 82736a55edfSChuck Lever __entry->task_id = task->tk_pid; 82836a55edfSChuck Lever __entry->client_id = task->tk_client->cl_clid; 8294b93dab3SChuck Lever __entry->status = status; 8304b93dab3SChuck Lever ), 8314b93dab3SChuck Lever 83236a55edfSChuck Lever TP_printk("task:%u@%u status=%d", 83336a55edfSChuck Lever __entry->task_id, __entry->client_id, __entry->status 8344b93dab3SChuck Lever ) 8354b93dab3SChuck Lever ); 8364b93dab3SChuck Lever 837ab03eff5SChuck Lever /** 838ab03eff5SChuck Lever ** Completion events 839ab03eff5SChuck Lever **/ 840ab03eff5SChuck Lever 841af5865d2SChuck Lever DEFINE_COMPLETION_EVENT(xprtrdma_wc_receive); 842b2e7467fSChuck Lever DEFINE_COMPLETION_EVENT(xprtrdma_wc_send); 8435ecef9c8SChuck Lever DEFINE_COMPLETION_EVENT(xprtrdma_wc_fastreg); 8445ecef9c8SChuck Lever DEFINE_COMPLETION_EVENT(xprtrdma_wc_li); 8455ecef9c8SChuck Lever DEFINE_COMPLETION_EVENT(xprtrdma_wc_li_wake); 8465ecef9c8SChuck Lever DEFINE_COMPLETION_EVENT(xprtrdma_wc_li_done); 8472937fedeSChuck Lever 84853b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_alloc, 84953b2c1cbSChuck Lever TP_PROTO( 85053b2c1cbSChuck Lever const struct rpcrdma_mr *mr, 85153b2c1cbSChuck Lever int rc 85253b2c1cbSChuck Lever ), 85353b2c1cbSChuck Lever 85453b2c1cbSChuck Lever TP_ARGS(mr, rc), 85553b2c1cbSChuck Lever 85653b2c1cbSChuck Lever TP_STRUCT__entry( 85762a89501SChuck Lever __field(u32, mr_id) 85853b2c1cbSChuck Lever __field(int, rc) 85953b2c1cbSChuck Lever ), 86053b2c1cbSChuck Lever 86153b2c1cbSChuck Lever TP_fast_assign( 86262a89501SChuck Lever __entry->mr_id = mr->frwr.fr_mr->res.id; 86353b2c1cbSChuck Lever __entry->rc = rc; 86453b2c1cbSChuck Lever ), 86553b2c1cbSChuck Lever 86662a89501SChuck Lever TP_printk("mr.id=%u: rc=%d", 86762a89501SChuck Lever __entry->mr_id, __entry->rc 86853b2c1cbSChuck Lever ) 86953b2c1cbSChuck Lever ); 87053b2c1cbSChuck Lever 87153b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_dereg, 87253b2c1cbSChuck Lever TP_PROTO( 87353b2c1cbSChuck Lever const struct rpcrdma_mr *mr, 87453b2c1cbSChuck Lever int rc 87553b2c1cbSChuck Lever ), 87653b2c1cbSChuck Lever 87753b2c1cbSChuck Lever TP_ARGS(mr, rc), 87853b2c1cbSChuck Lever 87953b2c1cbSChuck Lever TP_STRUCT__entry( 88062a89501SChuck Lever __field(u32, mr_id) 88162a89501SChuck Lever __field(int, nents) 88253b2c1cbSChuck Lever __field(u32, handle) 88353b2c1cbSChuck Lever __field(u32, length) 88453b2c1cbSChuck Lever __field(u64, offset) 88553b2c1cbSChuck Lever __field(u32, dir) 88653b2c1cbSChuck Lever __field(int, rc) 88753b2c1cbSChuck Lever ), 88853b2c1cbSChuck Lever 88953b2c1cbSChuck Lever TP_fast_assign( 89062a89501SChuck Lever __entry->mr_id = mr->frwr.fr_mr->res.id; 89162a89501SChuck Lever __entry->nents = mr->mr_nents; 89253b2c1cbSChuck Lever __entry->handle = mr->mr_handle; 89353b2c1cbSChuck Lever __entry->length = mr->mr_length; 89453b2c1cbSChuck Lever __entry->offset = mr->mr_offset; 89553b2c1cbSChuck Lever __entry->dir = mr->mr_dir; 89653b2c1cbSChuck Lever __entry->rc = rc; 89753b2c1cbSChuck Lever ), 89853b2c1cbSChuck Lever 89962a89501SChuck Lever TP_printk("mr.id=%u nents=%d %u@0x%016llx:0x%08x (%s): rc=%d", 90062a89501SChuck Lever __entry->mr_id, __entry->nents, __entry->length, 90153b2c1cbSChuck Lever (unsigned long long)__entry->offset, __entry->handle, 90253b2c1cbSChuck Lever xprtrdma_show_direction(__entry->dir), 90353b2c1cbSChuck Lever __entry->rc 90453b2c1cbSChuck Lever ) 90553b2c1cbSChuck Lever ); 90653b2c1cbSChuck Lever 90753b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_sgerr, 90853b2c1cbSChuck Lever TP_PROTO( 90953b2c1cbSChuck Lever const struct rpcrdma_mr *mr, 91053b2c1cbSChuck Lever int sg_nents 91153b2c1cbSChuck Lever ), 91253b2c1cbSChuck Lever 91353b2c1cbSChuck Lever TP_ARGS(mr, sg_nents), 91453b2c1cbSChuck Lever 91553b2c1cbSChuck Lever TP_STRUCT__entry( 91662a89501SChuck Lever __field(u32, mr_id) 91753b2c1cbSChuck Lever __field(u64, addr) 91853b2c1cbSChuck Lever __field(u32, dir) 91953b2c1cbSChuck Lever __field(int, nents) 92053b2c1cbSChuck Lever ), 92153b2c1cbSChuck Lever 92253b2c1cbSChuck Lever TP_fast_assign( 92362a89501SChuck Lever __entry->mr_id = mr->frwr.fr_mr->res.id; 92453b2c1cbSChuck Lever __entry->addr = mr->mr_sg->dma_address; 92553b2c1cbSChuck Lever __entry->dir = mr->mr_dir; 92653b2c1cbSChuck Lever __entry->nents = sg_nents; 92753b2c1cbSChuck Lever ), 92853b2c1cbSChuck Lever 92962a89501SChuck Lever TP_printk("mr.id=%u DMA addr=0x%llx (%s) sg_nents=%d", 93062a89501SChuck Lever __entry->mr_id, __entry->addr, 93153b2c1cbSChuck Lever xprtrdma_show_direction(__entry->dir), 93253b2c1cbSChuck Lever __entry->nents 93353b2c1cbSChuck Lever ) 93453b2c1cbSChuck Lever ); 93553b2c1cbSChuck Lever 93653b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_maperr, 93753b2c1cbSChuck Lever TP_PROTO( 93853b2c1cbSChuck Lever const struct rpcrdma_mr *mr, 93953b2c1cbSChuck Lever int num_mapped 94053b2c1cbSChuck Lever ), 94153b2c1cbSChuck Lever 94253b2c1cbSChuck Lever TP_ARGS(mr, num_mapped), 94353b2c1cbSChuck Lever 94453b2c1cbSChuck Lever TP_STRUCT__entry( 94562a89501SChuck Lever __field(u32, mr_id) 94653b2c1cbSChuck Lever __field(u64, addr) 94753b2c1cbSChuck Lever __field(u32, dir) 94853b2c1cbSChuck Lever __field(int, num_mapped) 94953b2c1cbSChuck Lever __field(int, nents) 95053b2c1cbSChuck Lever ), 95153b2c1cbSChuck Lever 95253b2c1cbSChuck Lever TP_fast_assign( 95362a89501SChuck Lever __entry->mr_id = mr->frwr.fr_mr->res.id; 95453b2c1cbSChuck Lever __entry->addr = mr->mr_sg->dma_address; 95553b2c1cbSChuck Lever __entry->dir = mr->mr_dir; 95653b2c1cbSChuck Lever __entry->num_mapped = num_mapped; 95753b2c1cbSChuck Lever __entry->nents = mr->mr_nents; 95853b2c1cbSChuck Lever ), 95953b2c1cbSChuck Lever 96062a89501SChuck Lever TP_printk("mr.id=%u DMA addr=0x%llx (%s) nents=%d of %d", 96162a89501SChuck Lever __entry->mr_id, __entry->addr, 96253b2c1cbSChuck Lever xprtrdma_show_direction(__entry->dir), 96353b2c1cbSChuck Lever __entry->num_mapped, __entry->nents 96453b2c1cbSChuck Lever ) 96553b2c1cbSChuck Lever ); 96653b2c1cbSChuck Lever 967d379eaa8SChuck Lever DEFINE_MR_EVENT(localinv); 968d379eaa8SChuck Lever DEFINE_MR_EVENT(map); 969*7703db97SChuck Lever 970*7703db97SChuck Lever DEFINE_ANON_MR_EVENT(unmap); 971*7703db97SChuck Lever DEFINE_ANON_MR_EVENT(recycle); 97258f10ad4SChuck Lever 97353b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_dma_maperr, 97453b2c1cbSChuck Lever TP_PROTO( 97553b2c1cbSChuck Lever u64 addr 97653b2c1cbSChuck Lever ), 97753b2c1cbSChuck Lever 97853b2c1cbSChuck Lever TP_ARGS(addr), 97953b2c1cbSChuck Lever 98053b2c1cbSChuck Lever TP_STRUCT__entry( 98153b2c1cbSChuck Lever __field(u64, addr) 98253b2c1cbSChuck Lever ), 98353b2c1cbSChuck Lever 98453b2c1cbSChuck Lever TP_fast_assign( 98553b2c1cbSChuck Lever __entry->addr = addr; 98653b2c1cbSChuck Lever ), 98753b2c1cbSChuck Lever 98853b2c1cbSChuck Lever TP_printk("dma addr=0x%llx\n", __entry->addr) 98953b2c1cbSChuck Lever ); 99053b2c1cbSChuck Lever 991b4a7f91cSChuck Lever /** 992b4a7f91cSChuck Lever ** Reply events 993b4a7f91cSChuck Lever **/ 994b4a7f91cSChuck Lever 995b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_reply, 996b4a7f91cSChuck Lever TP_PROTO( 997b4a7f91cSChuck Lever const struct rpc_task *task, 998b4a7f91cSChuck Lever const struct rpcrdma_rep *rep, 999b4a7f91cSChuck Lever unsigned int credits 1000b4a7f91cSChuck Lever ), 1001b4a7f91cSChuck Lever 100203ffd924SChuck Lever TP_ARGS(task, rep, credits), 1003b4a7f91cSChuck Lever 1004b4a7f91cSChuck Lever TP_STRUCT__entry( 1005b4a7f91cSChuck Lever __field(unsigned int, task_id) 1006b4a7f91cSChuck Lever __field(unsigned int, client_id) 1007b4a7f91cSChuck Lever __field(u32, xid) 1008b4a7f91cSChuck Lever __field(unsigned int, credits) 1009b4a7f91cSChuck Lever ), 1010b4a7f91cSChuck Lever 1011b4a7f91cSChuck Lever TP_fast_assign( 1012b4a7f91cSChuck Lever __entry->task_id = task->tk_pid; 1013b4a7f91cSChuck Lever __entry->client_id = task->tk_client->cl_clid; 1014b4a7f91cSChuck Lever __entry->xid = be32_to_cpu(rep->rr_xid); 1015b4a7f91cSChuck Lever __entry->credits = credits; 1016b4a7f91cSChuck Lever ), 1017b4a7f91cSChuck Lever 101803ffd924SChuck Lever TP_printk("task:%u@%u xid=0x%08x credits=%u", 1019b4a7f91cSChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 102003ffd924SChuck Lever __entry->credits 1021b4a7f91cSChuck Lever ) 1022b4a7f91cSChuck Lever ); 1023b4a7f91cSChuck Lever 10243a9568feSChuck Lever DEFINE_REPLY_EVENT(vers); 10253a9568feSChuck Lever DEFINE_REPLY_EVENT(rqst); 10263a9568feSChuck Lever DEFINE_REPLY_EVENT(short); 10273a9568feSChuck Lever DEFINE_REPLY_EVENT(hdr); 1028b4a7f91cSChuck Lever 10293821e232SChuck Lever TRACE_EVENT(xprtrdma_err_vers, 10303821e232SChuck Lever TP_PROTO( 10313821e232SChuck Lever const struct rpc_rqst *rqst, 10323821e232SChuck Lever __be32 *min, 10333821e232SChuck Lever __be32 *max 10343821e232SChuck Lever ), 10353821e232SChuck Lever 10363821e232SChuck Lever TP_ARGS(rqst, min, max), 10373821e232SChuck Lever 10383821e232SChuck Lever TP_STRUCT__entry( 10393821e232SChuck Lever __field(unsigned int, task_id) 10403821e232SChuck Lever __field(unsigned int, client_id) 10413821e232SChuck Lever __field(u32, xid) 10423821e232SChuck Lever __field(u32, min) 10433821e232SChuck Lever __field(u32, max) 10443821e232SChuck Lever ), 10453821e232SChuck Lever 10463821e232SChuck Lever TP_fast_assign( 10473821e232SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 10483821e232SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 10493821e232SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 10503821e232SChuck Lever __entry->min = be32_to_cpup(min); 10513821e232SChuck Lever __entry->max = be32_to_cpup(max); 10523821e232SChuck Lever ), 10533821e232SChuck Lever 10543821e232SChuck Lever TP_printk("task:%u@%u xid=0x%08x versions=[%u, %u]", 10553821e232SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 10563821e232SChuck Lever __entry->min, __entry->max 10573821e232SChuck Lever ) 10583821e232SChuck Lever ); 10593821e232SChuck Lever 10603821e232SChuck Lever TRACE_EVENT(xprtrdma_err_chunk, 10613821e232SChuck Lever TP_PROTO( 10623821e232SChuck Lever const struct rpc_rqst *rqst 10633821e232SChuck Lever ), 10643821e232SChuck Lever 10653821e232SChuck Lever TP_ARGS(rqst), 10663821e232SChuck Lever 10673821e232SChuck Lever TP_STRUCT__entry( 10683821e232SChuck Lever __field(unsigned int, task_id) 10693821e232SChuck Lever __field(unsigned int, client_id) 10703821e232SChuck Lever __field(u32, xid) 10713821e232SChuck Lever ), 10723821e232SChuck Lever 10733821e232SChuck Lever TP_fast_assign( 10743821e232SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 10753821e232SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 10763821e232SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 10773821e232SChuck Lever ), 10783821e232SChuck Lever 10793821e232SChuck Lever TP_printk("task:%u@%u xid=0x%08x", 10803821e232SChuck Lever __entry->task_id, __entry->client_id, __entry->xid 10813821e232SChuck Lever ) 10823821e232SChuck Lever ); 10833821e232SChuck Lever 10843821e232SChuck Lever TRACE_EVENT(xprtrdma_err_unrecognized, 10853821e232SChuck Lever TP_PROTO( 10863821e232SChuck Lever const struct rpc_rqst *rqst, 10873821e232SChuck Lever __be32 *procedure 10883821e232SChuck Lever ), 10893821e232SChuck Lever 10903821e232SChuck Lever TP_ARGS(rqst, procedure), 10913821e232SChuck Lever 10923821e232SChuck Lever TP_STRUCT__entry( 10933821e232SChuck Lever __field(unsigned int, task_id) 10943821e232SChuck Lever __field(unsigned int, client_id) 10953821e232SChuck Lever __field(u32, xid) 10963821e232SChuck Lever __field(u32, procedure) 10973821e232SChuck Lever ), 10983821e232SChuck Lever 10993821e232SChuck Lever TP_fast_assign( 11003821e232SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 11013821e232SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 11023821e232SChuck Lever __entry->procedure = be32_to_cpup(procedure); 11033821e232SChuck Lever ), 11043821e232SChuck Lever 11053821e232SChuck Lever TP_printk("task:%u@%u xid=0x%08x procedure=%u", 11063821e232SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 11073821e232SChuck Lever __entry->procedure 11083821e232SChuck Lever ) 11093821e232SChuck Lever ); 11103821e232SChuck Lever 1111e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_fixup, 1112e11b7c96SChuck Lever TP_PROTO( 1113e11b7c96SChuck Lever const struct rpc_rqst *rqst, 1114d4957f01SChuck Lever unsigned long fixup 1115e11b7c96SChuck Lever ), 1116e11b7c96SChuck Lever 1117d4957f01SChuck Lever TP_ARGS(rqst, fixup), 1118e11b7c96SChuck Lever 1119e11b7c96SChuck Lever TP_STRUCT__entry( 1120e11b7c96SChuck Lever __field(unsigned int, task_id) 1121e11b7c96SChuck Lever __field(unsigned int, client_id) 1122d4957f01SChuck Lever __field(unsigned long, fixup) 1123d4957f01SChuck Lever __field(size_t, headlen) 1124d4957f01SChuck Lever __field(unsigned int, pagelen) 1125d4957f01SChuck Lever __field(size_t, taillen) 1126e11b7c96SChuck Lever ), 1127e11b7c96SChuck Lever 1128e11b7c96SChuck Lever TP_fast_assign( 1129e11b7c96SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 1130e11b7c96SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 1131d4957f01SChuck Lever __entry->fixup = fixup; 1132d4957f01SChuck Lever __entry->headlen = rqst->rq_rcv_buf.head[0].iov_len; 1133d4957f01SChuck Lever __entry->pagelen = rqst->rq_rcv_buf.page_len; 1134d4957f01SChuck Lever __entry->taillen = rqst->rq_rcv_buf.tail[0].iov_len; 1135e11b7c96SChuck Lever ), 1136e11b7c96SChuck Lever 1137d4957f01SChuck Lever TP_printk("task:%u@%u fixup=%lu xdr=%zu/%u/%zu", 1138d4957f01SChuck Lever __entry->task_id, __entry->client_id, __entry->fixup, 1139d4957f01SChuck Lever __entry->headlen, __entry->pagelen, __entry->taillen 1140e11b7c96SChuck Lever ) 1141e11b7c96SChuck Lever ); 1142e11b7c96SChuck Lever 1143e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_decode_seg, 1144e11b7c96SChuck Lever TP_PROTO( 1145e11b7c96SChuck Lever u32 handle, 1146e11b7c96SChuck Lever u32 length, 1147e11b7c96SChuck Lever u64 offset 1148e11b7c96SChuck Lever ), 1149e11b7c96SChuck Lever 1150e11b7c96SChuck Lever TP_ARGS(handle, length, offset), 1151e11b7c96SChuck Lever 1152e11b7c96SChuck Lever TP_STRUCT__entry( 1153e11b7c96SChuck Lever __field(u32, handle) 1154e11b7c96SChuck Lever __field(u32, length) 1155e11b7c96SChuck Lever __field(u64, offset) 1156e11b7c96SChuck Lever ), 1157e11b7c96SChuck Lever 1158e11b7c96SChuck Lever TP_fast_assign( 1159e11b7c96SChuck Lever __entry->handle = handle; 1160e11b7c96SChuck Lever __entry->length = length; 1161e11b7c96SChuck Lever __entry->offset = offset; 1162e11b7c96SChuck Lever ), 1163e11b7c96SChuck Lever 1164e11b7c96SChuck Lever TP_printk("%u@0x%016llx:0x%08x", 1165e11b7c96SChuck Lever __entry->length, (unsigned long long)__entry->offset, 1166e11b7c96SChuck Lever __entry->handle 1167e11b7c96SChuck Lever ) 1168e11b7c96SChuck Lever ); 1169e11b7c96SChuck Lever 1170fc1eb807SChuck Lever /** 1171fc1eb807SChuck Lever ** Callback events 1172fc1eb807SChuck Lever **/ 1173fc1eb807SChuck Lever 1174fc1eb807SChuck Lever TRACE_EVENT(xprtrdma_cb_setup, 1175fc1eb807SChuck Lever TP_PROTO( 1176fc1eb807SChuck Lever const struct rpcrdma_xprt *r_xprt, 1177fc1eb807SChuck Lever unsigned int reqs 1178fc1eb807SChuck Lever ), 1179fc1eb807SChuck Lever 1180fc1eb807SChuck Lever TP_ARGS(r_xprt, reqs), 1181fc1eb807SChuck Lever 1182fc1eb807SChuck Lever TP_STRUCT__entry( 1183fc1eb807SChuck Lever __field(const void *, r_xprt) 1184fc1eb807SChuck Lever __field(unsigned int, reqs) 1185fc1eb807SChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 1186fc1eb807SChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 1187fc1eb807SChuck Lever ), 1188fc1eb807SChuck Lever 1189fc1eb807SChuck Lever TP_fast_assign( 1190fc1eb807SChuck Lever __entry->r_xprt = r_xprt; 1191fc1eb807SChuck Lever __entry->reqs = reqs; 1192fc1eb807SChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 1193fc1eb807SChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 1194fc1eb807SChuck Lever ), 1195fc1eb807SChuck Lever 1196fc1eb807SChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: %u reqs", 1197fc1eb807SChuck Lever __get_str(addr), __get_str(port), 1198fc1eb807SChuck Lever __entry->r_xprt, __entry->reqs 1199fc1eb807SChuck Lever ) 1200fc1eb807SChuck Lever ); 1201fc1eb807SChuck Lever 1202d11e9346SChuck Lever DEFINE_CALLBACK_EVENT(call); 1203d11e9346SChuck Lever DEFINE_CALLBACK_EVENT(reply); 1204fc1eb807SChuck Lever 120598895edbSChuck Lever /** 120698895edbSChuck Lever ** Server-side RPC/RDMA events 120798895edbSChuck Lever **/ 120898895edbSChuck Lever 1209e979a173SChuck Lever DECLARE_EVENT_CLASS(svcrdma_accept_class, 1210e979a173SChuck Lever TP_PROTO( 1211e979a173SChuck Lever const struct svcxprt_rdma *rdma, 1212e979a173SChuck Lever long status 1213e979a173SChuck Lever ), 1214e979a173SChuck Lever 1215e979a173SChuck Lever TP_ARGS(rdma, status), 1216e979a173SChuck Lever 1217e979a173SChuck Lever TP_STRUCT__entry( 1218e979a173SChuck Lever __field(long, status) 1219e979a173SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1220e979a173SChuck Lever ), 1221e979a173SChuck Lever 1222e979a173SChuck Lever TP_fast_assign( 1223e979a173SChuck Lever __entry->status = status; 1224e979a173SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1225e979a173SChuck Lever ), 1226e979a173SChuck Lever 1227e979a173SChuck Lever TP_printk("addr=%s status=%ld", 1228e979a173SChuck Lever __get_str(addr), __entry->status 1229e979a173SChuck Lever ) 1230e979a173SChuck Lever ); 1231e979a173SChuck Lever 1232e979a173SChuck Lever #define DEFINE_ACCEPT_EVENT(name) \ 1233e979a173SChuck Lever DEFINE_EVENT(svcrdma_accept_class, svcrdma_##name##_err, \ 1234e979a173SChuck Lever TP_PROTO( \ 1235e979a173SChuck Lever const struct svcxprt_rdma *rdma, \ 1236e979a173SChuck Lever long status \ 1237e979a173SChuck Lever ), \ 1238e979a173SChuck Lever TP_ARGS(rdma, status)) 1239e979a173SChuck Lever 1240e979a173SChuck Lever DEFINE_ACCEPT_EVENT(pd); 1241e979a173SChuck Lever DEFINE_ACCEPT_EVENT(qp); 1242e979a173SChuck Lever DEFINE_ACCEPT_EVENT(fabric); 1243e979a173SChuck Lever DEFINE_ACCEPT_EVENT(initdepth); 1244e979a173SChuck Lever DEFINE_ACCEPT_EVENT(accept); 1245e979a173SChuck Lever 124698895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_MSG); 124798895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_NOMSG); 124898895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_MSGP); 124998895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_DONE); 125098895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_ERROR); 125198895edbSChuck Lever 125298895edbSChuck Lever #define show_rpcrdma_proc(x) \ 125398895edbSChuck Lever __print_symbolic(x, \ 125498895edbSChuck Lever { RDMA_MSG, "RDMA_MSG" }, \ 125598895edbSChuck Lever { RDMA_NOMSG, "RDMA_NOMSG" }, \ 125698895edbSChuck Lever { RDMA_MSGP, "RDMA_MSGP" }, \ 125798895edbSChuck Lever { RDMA_DONE, "RDMA_DONE" }, \ 125898895edbSChuck Lever { RDMA_ERROR, "RDMA_ERROR" }) 125998895edbSChuck Lever 126098895edbSChuck Lever TRACE_EVENT(svcrdma_decode_rqst, 126198895edbSChuck Lever TP_PROTO( 1262007140eeSChuck Lever const struct svc_rdma_recv_ctxt *ctxt, 126398895edbSChuck Lever __be32 *p, 126498895edbSChuck Lever unsigned int hdrlen 126598895edbSChuck Lever ), 126698895edbSChuck Lever 1267007140eeSChuck Lever TP_ARGS(ctxt, p, hdrlen), 126898895edbSChuck Lever 126998895edbSChuck Lever TP_STRUCT__entry( 1270007140eeSChuck Lever __field(u32, cq_id) 1271007140eeSChuck Lever __field(int, completion_id) 127298895edbSChuck Lever __field(u32, xid) 127398895edbSChuck Lever __field(u32, vers) 127498895edbSChuck Lever __field(u32, proc) 127598895edbSChuck Lever __field(u32, credits) 127698895edbSChuck Lever __field(unsigned int, hdrlen) 127798895edbSChuck Lever ), 127898895edbSChuck Lever 127998895edbSChuck Lever TP_fast_assign( 1280007140eeSChuck Lever __entry->cq_id = ctxt->rc_cid.ci_queue_id; 1281007140eeSChuck Lever __entry->completion_id = ctxt->rc_cid.ci_completion_id; 128298895edbSChuck Lever __entry->xid = be32_to_cpup(p++); 128398895edbSChuck Lever __entry->vers = be32_to_cpup(p++); 128498895edbSChuck Lever __entry->credits = be32_to_cpup(p++); 128598895edbSChuck Lever __entry->proc = be32_to_cpup(p); 128698895edbSChuck Lever __entry->hdrlen = hdrlen; 128798895edbSChuck Lever ), 128898895edbSChuck Lever 1289007140eeSChuck Lever TP_printk("cq.id=%u cid=%d xid=0x%08x vers=%u credits=%u proc=%s hdrlen=%u", 1290007140eeSChuck Lever __entry->cq_id, __entry->completion_id, 129198895edbSChuck Lever __entry->xid, __entry->vers, __entry->credits, 129298895edbSChuck Lever show_rpcrdma_proc(__entry->proc), __entry->hdrlen) 129398895edbSChuck Lever ); 129498895edbSChuck Lever 129527ce6294SChuck Lever TRACE_EVENT(svcrdma_decode_short_err, 129698895edbSChuck Lever TP_PROTO( 1297007140eeSChuck Lever const struct svc_rdma_recv_ctxt *ctxt, 129898895edbSChuck Lever unsigned int hdrlen 129998895edbSChuck Lever ), 130098895edbSChuck Lever 1301007140eeSChuck Lever TP_ARGS(ctxt, hdrlen), 130298895edbSChuck Lever 130398895edbSChuck Lever TP_STRUCT__entry( 1304007140eeSChuck Lever __field(u32, cq_id) 1305007140eeSChuck Lever __field(int, completion_id) 130698895edbSChuck Lever __field(unsigned int, hdrlen) 130798895edbSChuck Lever ), 130898895edbSChuck Lever 130998895edbSChuck Lever TP_fast_assign( 1310007140eeSChuck Lever __entry->cq_id = ctxt->rc_cid.ci_queue_id; 1311007140eeSChuck Lever __entry->completion_id = ctxt->rc_cid.ci_completion_id; 131298895edbSChuck Lever __entry->hdrlen = hdrlen; 131398895edbSChuck Lever ), 131498895edbSChuck Lever 1315007140eeSChuck Lever TP_printk("cq.id=%u cid=%d hdrlen=%u", 1316007140eeSChuck Lever __entry->cq_id, __entry->completion_id, 1317007140eeSChuck Lever __entry->hdrlen) 131898895edbSChuck Lever ); 131998895edbSChuck Lever 132098895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_badreq_event, 132198895edbSChuck Lever TP_PROTO( 1322007140eeSChuck Lever const struct svc_rdma_recv_ctxt *ctxt, 132398895edbSChuck Lever __be32 *p 132498895edbSChuck Lever ), 132598895edbSChuck Lever 1326007140eeSChuck Lever TP_ARGS(ctxt, p), 132798895edbSChuck Lever 132898895edbSChuck Lever TP_STRUCT__entry( 1329007140eeSChuck Lever __field(u32, cq_id) 1330007140eeSChuck Lever __field(int, completion_id) 133198895edbSChuck Lever __field(u32, xid) 133298895edbSChuck Lever __field(u32, vers) 133398895edbSChuck Lever __field(u32, proc) 133498895edbSChuck Lever __field(u32, credits) 133598895edbSChuck Lever ), 133698895edbSChuck Lever 133798895edbSChuck Lever TP_fast_assign( 1338007140eeSChuck Lever __entry->cq_id = ctxt->rc_cid.ci_queue_id; 1339007140eeSChuck Lever __entry->completion_id = ctxt->rc_cid.ci_completion_id; 134098895edbSChuck Lever __entry->xid = be32_to_cpup(p++); 134198895edbSChuck Lever __entry->vers = be32_to_cpup(p++); 134298895edbSChuck Lever __entry->credits = be32_to_cpup(p++); 134398895edbSChuck Lever __entry->proc = be32_to_cpup(p); 134498895edbSChuck Lever ), 134598895edbSChuck Lever 1346007140eeSChuck Lever TP_printk("cq.id=%u cid=%d xid=0x%08x vers=%u credits=%u proc=%u", 1347007140eeSChuck Lever __entry->cq_id, __entry->completion_id, 134898895edbSChuck Lever __entry->xid, __entry->vers, __entry->credits, __entry->proc) 134998895edbSChuck Lever ); 135098895edbSChuck Lever 135198895edbSChuck Lever #define DEFINE_BADREQ_EVENT(name) \ 135227ce6294SChuck Lever DEFINE_EVENT(svcrdma_badreq_event, \ 135327ce6294SChuck Lever svcrdma_decode_##name##_err, \ 135498895edbSChuck Lever TP_PROTO( \ 1355007140eeSChuck Lever const struct svc_rdma_recv_ctxt *ctxt, \ 135698895edbSChuck Lever __be32 *p \ 135798895edbSChuck Lever ), \ 1358007140eeSChuck Lever TP_ARGS(ctxt, p)) 135998895edbSChuck Lever 136098895edbSChuck Lever DEFINE_BADREQ_EVENT(badvers); 136198895edbSChuck Lever DEFINE_BADREQ_EVENT(drop); 136298895edbSChuck Lever DEFINE_BADREQ_EVENT(badproc); 136398895edbSChuck Lever DEFINE_BADREQ_EVENT(parse); 136498895edbSChuck Lever 136598895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_segment_event, 136698895edbSChuck Lever TP_PROTO( 136798895edbSChuck Lever u32 handle, 136898895edbSChuck Lever u32 length, 136998895edbSChuck Lever u64 offset 137098895edbSChuck Lever ), 137198895edbSChuck Lever 137298895edbSChuck Lever TP_ARGS(handle, length, offset), 137398895edbSChuck Lever 137498895edbSChuck Lever TP_STRUCT__entry( 137598895edbSChuck Lever __field(u32, handle) 137698895edbSChuck Lever __field(u32, length) 137798895edbSChuck Lever __field(u64, offset) 137898895edbSChuck Lever ), 137998895edbSChuck Lever 138098895edbSChuck Lever TP_fast_assign( 138198895edbSChuck Lever __entry->handle = handle; 138298895edbSChuck Lever __entry->length = length; 138398895edbSChuck Lever __entry->offset = offset; 138498895edbSChuck Lever ), 138598895edbSChuck Lever 138698895edbSChuck Lever TP_printk("%u@0x%016llx:0x%08x", 138798895edbSChuck Lever __entry->length, (unsigned long long)__entry->offset, 138898895edbSChuck Lever __entry->handle 138998895edbSChuck Lever ) 139098895edbSChuck Lever ); 139198895edbSChuck Lever 139298895edbSChuck Lever #define DEFINE_SEGMENT_EVENT(name) \ 1393e604aad2SChuck Lever DEFINE_EVENT(svcrdma_segment_event, svcrdma_##name,\ 139498895edbSChuck Lever TP_PROTO( \ 139598895edbSChuck Lever u32 handle, \ 139698895edbSChuck Lever u32 length, \ 139798895edbSChuck Lever u64 offset \ 139898895edbSChuck Lever ), \ 139998895edbSChuck Lever TP_ARGS(handle, length, offset)) 140098895edbSChuck Lever 1401e604aad2SChuck Lever DEFINE_SEGMENT_EVENT(decode_wseg); 1402e604aad2SChuck Lever DEFINE_SEGMENT_EVENT(encode_rseg); 1403a406c563SChuck Lever DEFINE_SEGMENT_EVENT(send_rseg); 1404e604aad2SChuck Lever DEFINE_SEGMENT_EVENT(encode_wseg); 1405a406c563SChuck Lever DEFINE_SEGMENT_EVENT(send_wseg); 140698895edbSChuck Lever 140798895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_chunk_event, 140898895edbSChuck Lever TP_PROTO( 140998895edbSChuck Lever u32 length 141098895edbSChuck Lever ), 141198895edbSChuck Lever 141298895edbSChuck Lever TP_ARGS(length), 141398895edbSChuck Lever 141498895edbSChuck Lever TP_STRUCT__entry( 141598895edbSChuck Lever __field(u32, length) 141698895edbSChuck Lever ), 141798895edbSChuck Lever 141898895edbSChuck Lever TP_fast_assign( 141998895edbSChuck Lever __entry->length = length; 142098895edbSChuck Lever ), 142198895edbSChuck Lever 142298895edbSChuck Lever TP_printk("length=%u", 142398895edbSChuck Lever __entry->length 142498895edbSChuck Lever ) 142598895edbSChuck Lever ); 142698895edbSChuck Lever 142798895edbSChuck Lever #define DEFINE_CHUNK_EVENT(name) \ 1428a406c563SChuck Lever DEFINE_EVENT(svcrdma_chunk_event, svcrdma_##name, \ 142998895edbSChuck Lever TP_PROTO( \ 143098895edbSChuck Lever u32 length \ 143198895edbSChuck Lever ), \ 143298895edbSChuck Lever TP_ARGS(length)) 143398895edbSChuck Lever 1434a406c563SChuck Lever DEFINE_CHUNK_EVENT(send_pzr); 1435a406c563SChuck Lever DEFINE_CHUNK_EVENT(encode_write_chunk); 1436a406c563SChuck Lever DEFINE_CHUNK_EVENT(send_write_chunk); 1437a406c563SChuck Lever DEFINE_CHUNK_EVENT(encode_read_chunk); 1438a406c563SChuck Lever DEFINE_CHUNK_EVENT(send_reply_chunk); 143998895edbSChuck Lever 1440a406c563SChuck Lever TRACE_EVENT(svcrdma_send_read_chunk, 144198895edbSChuck Lever TP_PROTO( 144298895edbSChuck Lever u32 length, 144398895edbSChuck Lever u32 position 144498895edbSChuck Lever ), 144598895edbSChuck Lever 144698895edbSChuck Lever TP_ARGS(length, position), 144798895edbSChuck Lever 144898895edbSChuck Lever TP_STRUCT__entry( 144998895edbSChuck Lever __field(u32, length) 145098895edbSChuck Lever __field(u32, position) 145198895edbSChuck Lever ), 145298895edbSChuck Lever 145398895edbSChuck Lever TP_fast_assign( 145498895edbSChuck Lever __entry->length = length; 145598895edbSChuck Lever __entry->position = position; 145698895edbSChuck Lever ), 145798895edbSChuck Lever 145898895edbSChuck Lever TP_printk("length=%u position=%u", 145998895edbSChuck Lever __entry->length, __entry->position 146098895edbSChuck Lever ) 146198895edbSChuck Lever ); 146298895edbSChuck Lever 146398895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_error_event, 146498895edbSChuck Lever TP_PROTO( 146598895edbSChuck Lever __be32 xid 146698895edbSChuck Lever ), 146798895edbSChuck Lever 146898895edbSChuck Lever TP_ARGS(xid), 146998895edbSChuck Lever 147098895edbSChuck Lever TP_STRUCT__entry( 147198895edbSChuck Lever __field(u32, xid) 147298895edbSChuck Lever ), 147398895edbSChuck Lever 147498895edbSChuck Lever TP_fast_assign( 147598895edbSChuck Lever __entry->xid = be32_to_cpu(xid); 147698895edbSChuck Lever ), 147798895edbSChuck Lever 147898895edbSChuck Lever TP_printk("xid=0x%08x", 147998895edbSChuck Lever __entry->xid 148098895edbSChuck Lever ) 148198895edbSChuck Lever ); 148298895edbSChuck Lever 148398895edbSChuck Lever #define DEFINE_ERROR_EVENT(name) \ 148498895edbSChuck Lever DEFINE_EVENT(svcrdma_error_event, svcrdma_err_##name, \ 148598895edbSChuck Lever TP_PROTO( \ 148698895edbSChuck Lever __be32 xid \ 148798895edbSChuck Lever ), \ 148898895edbSChuck Lever TP_ARGS(xid)) 148998895edbSChuck Lever 149098895edbSChuck Lever DEFINE_ERROR_EVENT(vers); 149198895edbSChuck Lever DEFINE_ERROR_EVENT(chunk); 149298895edbSChuck Lever 1493bd2abef3SChuck Lever /** 1494bd2abef3SChuck Lever ** Server-side RDMA API events 1495bd2abef3SChuck Lever **/ 1496bd2abef3SChuck Lever 1497832b2cb9SChuck Lever DECLARE_EVENT_CLASS(svcrdma_dma_map_class, 1498bd2abef3SChuck Lever TP_PROTO( 1499bd2abef3SChuck Lever const struct svcxprt_rdma *rdma, 1500832b2cb9SChuck Lever u64 dma_addr, 1501832b2cb9SChuck Lever u32 length 1502bd2abef3SChuck Lever ), 1503bd2abef3SChuck Lever 1504832b2cb9SChuck Lever TP_ARGS(rdma, dma_addr, length), 1505bd2abef3SChuck Lever 1506bd2abef3SChuck Lever TP_STRUCT__entry( 1507832b2cb9SChuck Lever __field(u64, dma_addr) 1508832b2cb9SChuck Lever __field(u32, length) 1509bd2abef3SChuck Lever __string(device, rdma->sc_cm_id->device->name) 1510bd2abef3SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1511bd2abef3SChuck Lever ), 1512bd2abef3SChuck Lever 1513bd2abef3SChuck Lever TP_fast_assign( 1514832b2cb9SChuck Lever __entry->dma_addr = dma_addr; 1515832b2cb9SChuck Lever __entry->length = length; 1516bd2abef3SChuck Lever __assign_str(device, rdma->sc_cm_id->device->name); 1517bd2abef3SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1518bd2abef3SChuck Lever ), 1519bd2abef3SChuck Lever 1520832b2cb9SChuck Lever TP_printk("addr=%s device=%s dma_addr=%llu length=%u", 1521832b2cb9SChuck Lever __get_str(addr), __get_str(device), 1522832b2cb9SChuck Lever __entry->dma_addr, __entry->length 1523bd2abef3SChuck Lever ) 1524bd2abef3SChuck Lever ); 1525bd2abef3SChuck Lever 1526832b2cb9SChuck Lever #define DEFINE_SVC_DMA_EVENT(name) \ 1527832b2cb9SChuck Lever DEFINE_EVENT(svcrdma_dma_map_class, svcrdma_##name, \ 1528832b2cb9SChuck Lever TP_PROTO( \ 1529832b2cb9SChuck Lever const struct svcxprt_rdma *rdma,\ 1530832b2cb9SChuck Lever u64 dma_addr, \ 1531832b2cb9SChuck Lever u32 length \ 1532832b2cb9SChuck Lever ), \ 1533832b2cb9SChuck Lever TP_ARGS(rdma, dma_addr, length)) 1534832b2cb9SChuck Lever 1535832b2cb9SChuck Lever DEFINE_SVC_DMA_EVENT(dma_map_page); 1536832b2cb9SChuck Lever DEFINE_SVC_DMA_EVENT(dma_unmap_page); 1537832b2cb9SChuck Lever 15382abfbe7eSChuck Lever TRACE_EVENT(svcrdma_dma_map_rw_err, 1539bd2abef3SChuck Lever TP_PROTO( 1540bd2abef3SChuck Lever const struct svcxprt_rdma *rdma, 15412abfbe7eSChuck Lever unsigned int nents, 1542bd2abef3SChuck Lever int status 1543bd2abef3SChuck Lever ), 1544bd2abef3SChuck Lever 15452abfbe7eSChuck Lever TP_ARGS(rdma, nents, status), 1546bd2abef3SChuck Lever 1547bd2abef3SChuck Lever TP_STRUCT__entry( 1548bd2abef3SChuck Lever __field(int, status) 15492abfbe7eSChuck Lever __field(unsigned int, nents) 1550bd2abef3SChuck Lever __string(device, rdma->sc_cm_id->device->name) 1551bd2abef3SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1552bd2abef3SChuck Lever ), 1553bd2abef3SChuck Lever 1554bd2abef3SChuck Lever TP_fast_assign( 1555bd2abef3SChuck Lever __entry->status = status; 15562abfbe7eSChuck Lever __entry->nents = nents; 1557bd2abef3SChuck Lever __assign_str(device, rdma->sc_cm_id->device->name); 1558bd2abef3SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1559bd2abef3SChuck Lever ), 1560bd2abef3SChuck Lever 15612abfbe7eSChuck Lever TP_printk("addr=%s device=%s nents=%u status=%d", 15622abfbe7eSChuck Lever __get_str(addr), __get_str(device), __entry->nents, 15632abfbe7eSChuck Lever __entry->status 1564bd2abef3SChuck Lever ) 1565bd2abef3SChuck Lever ); 1566bd2abef3SChuck Lever 1567f4e53e1cSChuck Lever TRACE_EVENT(svcrdma_no_rwctx_err, 1568f4e53e1cSChuck Lever TP_PROTO( 1569f4e53e1cSChuck Lever const struct svcxprt_rdma *rdma, 1570f4e53e1cSChuck Lever unsigned int num_sges 1571f4e53e1cSChuck Lever ), 1572f4e53e1cSChuck Lever 1573f4e53e1cSChuck Lever TP_ARGS(rdma, num_sges), 1574f4e53e1cSChuck Lever 1575f4e53e1cSChuck Lever TP_STRUCT__entry( 1576f4e53e1cSChuck Lever __field(unsigned int, num_sges) 1577f4e53e1cSChuck Lever __string(device, rdma->sc_cm_id->device->name) 1578f4e53e1cSChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1579f4e53e1cSChuck Lever ), 1580f4e53e1cSChuck Lever 1581f4e53e1cSChuck Lever TP_fast_assign( 1582f4e53e1cSChuck Lever __entry->num_sges = num_sges; 1583f4e53e1cSChuck Lever __assign_str(device, rdma->sc_cm_id->device->name); 1584f4e53e1cSChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1585f4e53e1cSChuck Lever ), 1586f4e53e1cSChuck Lever 1587f4e53e1cSChuck Lever TP_printk("addr=%s device=%s num_sges=%d", 1588f4e53e1cSChuck Lever __get_str(addr), __get_str(device), __entry->num_sges 1589f4e53e1cSChuck Lever ) 1590f4e53e1cSChuck Lever ); 1591f4e53e1cSChuck Lever 15929d200638SChuck Lever TRACE_EVENT(svcrdma_page_overrun_err, 15939d200638SChuck Lever TP_PROTO( 15949d200638SChuck Lever const struct svcxprt_rdma *rdma, 15959d200638SChuck Lever const struct svc_rqst *rqst, 15969d200638SChuck Lever unsigned int pageno 15979d200638SChuck Lever ), 15989d200638SChuck Lever 15999d200638SChuck Lever TP_ARGS(rdma, rqst, pageno), 16009d200638SChuck Lever 16019d200638SChuck Lever TP_STRUCT__entry( 16029d200638SChuck Lever __field(unsigned int, pageno) 16039d200638SChuck Lever __field(u32, xid) 16049d200638SChuck Lever __string(device, rdma->sc_cm_id->device->name) 16059d200638SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 16069d200638SChuck Lever ), 16079d200638SChuck Lever 16089d200638SChuck Lever TP_fast_assign( 16099d200638SChuck Lever __entry->pageno = pageno; 16109d200638SChuck Lever __entry->xid = __be32_to_cpu(rqst->rq_xid); 16119d200638SChuck Lever __assign_str(device, rdma->sc_cm_id->device->name); 16129d200638SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 16139d200638SChuck Lever ), 16149d200638SChuck Lever 16159d200638SChuck Lever TP_printk("addr=%s device=%s xid=0x%08x pageno=%u", __get_str(addr), 16169d200638SChuck Lever __get_str(device), __entry->xid, __entry->pageno 16179d200638SChuck Lever ) 16189d200638SChuck Lever ); 16199d200638SChuck Lever 1620dbc17acdSChuck Lever TRACE_EVENT(svcrdma_small_wrch_err, 1621dbc17acdSChuck Lever TP_PROTO( 1622dbc17acdSChuck Lever const struct svcxprt_rdma *rdma, 1623dbc17acdSChuck Lever unsigned int remaining, 1624dbc17acdSChuck Lever unsigned int seg_no, 1625dbc17acdSChuck Lever unsigned int num_segs 1626dbc17acdSChuck Lever ), 1627dbc17acdSChuck Lever 1628dbc17acdSChuck Lever TP_ARGS(rdma, remaining, seg_no, num_segs), 1629dbc17acdSChuck Lever 1630dbc17acdSChuck Lever TP_STRUCT__entry( 1631dbc17acdSChuck Lever __field(unsigned int, remaining) 1632dbc17acdSChuck Lever __field(unsigned int, seg_no) 1633dbc17acdSChuck Lever __field(unsigned int, num_segs) 1634dbc17acdSChuck Lever __string(device, rdma->sc_cm_id->device->name) 1635dbc17acdSChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1636dbc17acdSChuck Lever ), 1637dbc17acdSChuck Lever 1638dbc17acdSChuck Lever TP_fast_assign( 1639dbc17acdSChuck Lever __entry->remaining = remaining; 1640dbc17acdSChuck Lever __entry->seg_no = seg_no; 1641dbc17acdSChuck Lever __entry->num_segs = num_segs; 1642dbc17acdSChuck Lever __assign_str(device, rdma->sc_cm_id->device->name); 1643dbc17acdSChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1644dbc17acdSChuck Lever ), 1645dbc17acdSChuck Lever 1646dbc17acdSChuck Lever TP_printk("addr=%s device=%s remaining=%u seg_no=%u num_segs=%u", 1647dbc17acdSChuck Lever __get_str(addr), __get_str(device), __entry->remaining, 1648dbc17acdSChuck Lever __entry->seg_no, __entry->num_segs 1649dbc17acdSChuck Lever ) 1650dbc17acdSChuck Lever ); 1651dbc17acdSChuck Lever 16520dabe948SChuck Lever TRACE_EVENT(svcrdma_send_pullup, 16530dabe948SChuck Lever TP_PROTO( 16540dabe948SChuck Lever unsigned int len 16550dabe948SChuck Lever ), 16560dabe948SChuck Lever 16570dabe948SChuck Lever TP_ARGS(len), 16580dabe948SChuck Lever 16590dabe948SChuck Lever TP_STRUCT__entry( 16600dabe948SChuck Lever __field(unsigned int, len) 16610dabe948SChuck Lever ), 16620dabe948SChuck Lever 16630dabe948SChuck Lever TP_fast_assign( 16640dabe948SChuck Lever __entry->len = len; 16650dabe948SChuck Lever ), 16660dabe948SChuck Lever 16670dabe948SChuck Lever TP_printk("len=%u", __entry->len) 16680dabe948SChuck Lever ); 16690dabe948SChuck Lever 16703f8f25c6SChuck Lever TRACE_EVENT(svcrdma_send_err, 1671bd2abef3SChuck Lever TP_PROTO( 1672bd2abef3SChuck Lever const struct svc_rqst *rqst, 1673bd2abef3SChuck Lever int status 1674bd2abef3SChuck Lever ), 1675bd2abef3SChuck Lever 1676bd2abef3SChuck Lever TP_ARGS(rqst, status), 1677bd2abef3SChuck Lever 1678bd2abef3SChuck Lever TP_STRUCT__entry( 1679bd2abef3SChuck Lever __field(int, status) 1680bd2abef3SChuck Lever __field(u32, xid) 1681bd2abef3SChuck Lever __string(addr, rqst->rq_xprt->xpt_remotebuf) 1682bd2abef3SChuck Lever ), 1683bd2abef3SChuck Lever 1684bd2abef3SChuck Lever TP_fast_assign( 1685bd2abef3SChuck Lever __entry->status = status; 1686bd2abef3SChuck Lever __entry->xid = __be32_to_cpu(rqst->rq_xid); 1687bd2abef3SChuck Lever __assign_str(addr, rqst->rq_xprt->xpt_remotebuf); 1688bd2abef3SChuck Lever ), 1689bd2abef3SChuck Lever 16903f8f25c6SChuck Lever TP_printk("addr=%s xid=0x%08x status=%d", __get_str(addr), 1691bd2abef3SChuck Lever __entry->xid, __entry->status 1692bd2abef3SChuck Lever ) 1693bd2abef3SChuck Lever ); 1694bd2abef3SChuck Lever 1695bd2abef3SChuck Lever TRACE_EVENT(svcrdma_post_send, 1696bd2abef3SChuck Lever TP_PROTO( 169717f70f8dSChuck Lever const struct svc_rdma_send_ctxt *ctxt 1698bd2abef3SChuck Lever ), 1699bd2abef3SChuck Lever 170017f70f8dSChuck Lever TP_ARGS(ctxt), 1701bd2abef3SChuck Lever 1702bd2abef3SChuck Lever TP_STRUCT__entry( 170317f70f8dSChuck Lever __field(u32, cq_id) 170417f70f8dSChuck Lever __field(int, completion_id) 1705bd2abef3SChuck Lever __field(unsigned int, num_sge) 1706bd2abef3SChuck Lever __field(u32, inv_rkey) 1707bd2abef3SChuck Lever ), 1708bd2abef3SChuck Lever 1709bd2abef3SChuck Lever TP_fast_assign( 171017f70f8dSChuck Lever const struct ib_send_wr *wr = &ctxt->sc_send_wr; 171117f70f8dSChuck Lever 171217f70f8dSChuck Lever __entry->cq_id = ctxt->sc_cid.ci_queue_id; 171317f70f8dSChuck Lever __entry->completion_id = ctxt->sc_cid.ci_completion_id; 1714bd2abef3SChuck Lever __entry->num_sge = wr->num_sge; 1715bd2abef3SChuck Lever __entry->inv_rkey = (wr->opcode == IB_WR_SEND_WITH_INV) ? 1716bd2abef3SChuck Lever wr->ex.invalidate_rkey : 0; 1717bd2abef3SChuck Lever ), 1718bd2abef3SChuck Lever 171917f70f8dSChuck Lever TP_printk("cq_id=%u cid=%d num_sge=%u inv_rkey=0x%08x", 172017f70f8dSChuck Lever __entry->cq_id, __entry->completion_id, 172117f70f8dSChuck Lever __entry->num_sge, __entry->inv_rkey 1722bd2abef3SChuck Lever ) 1723bd2abef3SChuck Lever ); 1724bd2abef3SChuck Lever 17253ac56c2fSChuck Lever DEFINE_COMPLETION_EVENT(svcrdma_wc_send); 1726bd2abef3SChuck Lever 1727bd2abef3SChuck Lever TRACE_EVENT(svcrdma_post_recv, 1728bd2abef3SChuck Lever TP_PROTO( 17299b3bcf8cSChuck Lever const struct svc_rdma_recv_ctxt *ctxt 1730bd2abef3SChuck Lever ), 1731bd2abef3SChuck Lever 17329b3bcf8cSChuck Lever TP_ARGS(ctxt), 1733bd2abef3SChuck Lever 1734bd2abef3SChuck Lever TP_STRUCT__entry( 17359b3bcf8cSChuck Lever __field(u32, cq_id) 17369b3bcf8cSChuck Lever __field(int, completion_id) 1737bd2abef3SChuck Lever ), 1738bd2abef3SChuck Lever 1739bd2abef3SChuck Lever TP_fast_assign( 17409b3bcf8cSChuck Lever __entry->cq_id = ctxt->rc_cid.ci_queue_id; 17419b3bcf8cSChuck Lever __entry->completion_id = ctxt->rc_cid.ci_completion_id; 1742bd2abef3SChuck Lever ), 1743bd2abef3SChuck Lever 17449b3bcf8cSChuck Lever TP_printk("cq.id=%d cid=%d", 17459b3bcf8cSChuck Lever __entry->cq_id, __entry->completion_id 1746bd2abef3SChuck Lever ) 1747bd2abef3SChuck Lever ); 1748bd2abef3SChuck Lever 17499b3bcf8cSChuck Lever DEFINE_COMPLETION_EVENT(svcrdma_wc_receive); 17509b3bcf8cSChuck Lever 17519b3bcf8cSChuck Lever TRACE_EVENT(svcrdma_rq_post_err, 1752bd2abef3SChuck Lever TP_PROTO( 17539b3bcf8cSChuck Lever const struct svcxprt_rdma *rdma, 17549b3bcf8cSChuck Lever int status 1755bd2abef3SChuck Lever ), 1756bd2abef3SChuck Lever 17579b3bcf8cSChuck Lever TP_ARGS(rdma, status), 1758bd2abef3SChuck Lever 1759bd2abef3SChuck Lever TP_STRUCT__entry( 17609b3bcf8cSChuck Lever __field(int, status) 17619b3bcf8cSChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1762bd2abef3SChuck Lever ), 1763bd2abef3SChuck Lever 1764bd2abef3SChuck Lever TP_fast_assign( 17659b3bcf8cSChuck Lever __entry->status = status; 17669b3bcf8cSChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1767bd2abef3SChuck Lever ), 1768bd2abef3SChuck Lever 17699b3bcf8cSChuck Lever TP_printk("addr=%s status=%d", 17709b3bcf8cSChuck Lever __get_str(addr), __entry->status 1771bd2abef3SChuck Lever ) 1772bd2abef3SChuck Lever ); 1773bd2abef3SChuck Lever 17746787f0beSChuck Lever TRACE_EVENT(svcrdma_post_chunk, 1775bd2abef3SChuck Lever TP_PROTO( 17766787f0beSChuck Lever const struct rpc_rdma_cid *cid, 1777e28b4fc6SChuck Lever int sqecount 1778bd2abef3SChuck Lever ), 1779bd2abef3SChuck Lever 17806787f0beSChuck Lever TP_ARGS(cid, sqecount), 1781bd2abef3SChuck Lever 1782bd2abef3SChuck Lever TP_STRUCT__entry( 17836787f0beSChuck Lever __field(u32, cq_id) 17846787f0beSChuck Lever __field(int, completion_id) 1785bd2abef3SChuck Lever __field(int, sqecount) 1786bd2abef3SChuck Lever ), 1787bd2abef3SChuck Lever 1788bd2abef3SChuck Lever TP_fast_assign( 17896787f0beSChuck Lever __entry->cq_id = cid->ci_queue_id; 17906787f0beSChuck Lever __entry->completion_id = cid->ci_completion_id; 1791bd2abef3SChuck Lever __entry->sqecount = sqecount; 1792bd2abef3SChuck Lever ), 1793bd2abef3SChuck Lever 17946787f0beSChuck Lever TP_printk("cq.id=%u cid=%d sqecount=%d", 17956787f0beSChuck Lever __entry->cq_id, __entry->completion_id, 17966787f0beSChuck Lever __entry->sqecount 1797bd2abef3SChuck Lever ) 1798bd2abef3SChuck Lever ); 1799bd2abef3SChuck Lever 18006787f0beSChuck Lever DEFINE_COMPLETION_EVENT(svcrdma_wc_read); 18016787f0beSChuck Lever DEFINE_COMPLETION_EVENT(svcrdma_wc_write); 1802bd2abef3SChuck Lever 1803bd2abef3SChuck Lever TRACE_EVENT(svcrdma_qp_error, 1804bd2abef3SChuck Lever TP_PROTO( 1805bd2abef3SChuck Lever const struct ib_event *event, 1806bd2abef3SChuck Lever const struct sockaddr *sap 1807bd2abef3SChuck Lever ), 1808bd2abef3SChuck Lever 1809bd2abef3SChuck Lever TP_ARGS(event, sap), 1810bd2abef3SChuck Lever 1811bd2abef3SChuck Lever TP_STRUCT__entry( 1812bd2abef3SChuck Lever __field(unsigned int, event) 1813bd2abef3SChuck Lever __string(device, event->device->name) 1814bd2abef3SChuck Lever __array(__u8, addr, INET6_ADDRSTRLEN + 10) 1815bd2abef3SChuck Lever ), 1816bd2abef3SChuck Lever 1817bd2abef3SChuck Lever TP_fast_assign( 1818bd2abef3SChuck Lever __entry->event = event->event; 1819bd2abef3SChuck Lever __assign_str(device, event->device->name); 1820bd2abef3SChuck Lever snprintf(__entry->addr, sizeof(__entry->addr) - 1, 1821bd2abef3SChuck Lever "%pISpc", sap); 1822bd2abef3SChuck Lever ), 1823bd2abef3SChuck Lever 1824bd2abef3SChuck Lever TP_printk("addr=%s dev=%s event=%s (%u)", 1825bd2abef3SChuck Lever __entry->addr, __get_str(device), 1826bd2abef3SChuck Lever rdma_show_ib_event(__entry->event), __entry->event 1827bd2abef3SChuck Lever ) 1828bd2abef3SChuck Lever ); 1829bd2abef3SChuck Lever 1830bd2abef3SChuck Lever DECLARE_EVENT_CLASS(svcrdma_sendqueue_event, 1831bd2abef3SChuck Lever TP_PROTO( 1832bd2abef3SChuck Lever const struct svcxprt_rdma *rdma 1833bd2abef3SChuck Lever ), 1834bd2abef3SChuck Lever 1835bd2abef3SChuck Lever TP_ARGS(rdma), 1836bd2abef3SChuck Lever 1837bd2abef3SChuck Lever TP_STRUCT__entry( 1838bd2abef3SChuck Lever __field(int, avail) 1839bd2abef3SChuck Lever __field(int, depth) 1840bd2abef3SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1841bd2abef3SChuck Lever ), 1842bd2abef3SChuck Lever 1843bd2abef3SChuck Lever TP_fast_assign( 1844bd2abef3SChuck Lever __entry->avail = atomic_read(&rdma->sc_sq_avail); 1845bd2abef3SChuck Lever __entry->depth = rdma->sc_sq_depth; 1846bd2abef3SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1847bd2abef3SChuck Lever ), 1848bd2abef3SChuck Lever 1849bd2abef3SChuck Lever TP_printk("addr=%s sc_sq_avail=%d/%d", 1850bd2abef3SChuck Lever __get_str(addr), __entry->avail, __entry->depth 1851bd2abef3SChuck Lever ) 1852bd2abef3SChuck Lever ); 1853bd2abef3SChuck Lever 1854bd2abef3SChuck Lever #define DEFINE_SQ_EVENT(name) \ 1855bd2abef3SChuck Lever DEFINE_EVENT(svcrdma_sendqueue_event, svcrdma_sq_##name,\ 1856bd2abef3SChuck Lever TP_PROTO( \ 1857bd2abef3SChuck Lever const struct svcxprt_rdma *rdma \ 1858bd2abef3SChuck Lever ), \ 1859bd2abef3SChuck Lever TP_ARGS(rdma)) 1860bd2abef3SChuck Lever 1861bd2abef3SChuck Lever DEFINE_SQ_EVENT(full); 1862bd2abef3SChuck Lever DEFINE_SQ_EVENT(retry); 1863bd2abef3SChuck Lever 1864e28b4fc6SChuck Lever TRACE_EVENT(svcrdma_sq_post_err, 1865e28b4fc6SChuck Lever TP_PROTO( 1866e28b4fc6SChuck Lever const struct svcxprt_rdma *rdma, 1867e28b4fc6SChuck Lever int status 1868e28b4fc6SChuck Lever ), 1869e28b4fc6SChuck Lever 1870e28b4fc6SChuck Lever TP_ARGS(rdma, status), 1871e28b4fc6SChuck Lever 1872e28b4fc6SChuck Lever TP_STRUCT__entry( 1873e28b4fc6SChuck Lever __field(int, avail) 1874e28b4fc6SChuck Lever __field(int, depth) 1875e28b4fc6SChuck Lever __field(int, status) 1876e28b4fc6SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1877e28b4fc6SChuck Lever ), 1878e28b4fc6SChuck Lever 1879e28b4fc6SChuck Lever TP_fast_assign( 1880e28b4fc6SChuck Lever __entry->avail = atomic_read(&rdma->sc_sq_avail); 1881e28b4fc6SChuck Lever __entry->depth = rdma->sc_sq_depth; 1882e28b4fc6SChuck Lever __entry->status = status; 1883e28b4fc6SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1884e28b4fc6SChuck Lever ), 1885e28b4fc6SChuck Lever 1886e28b4fc6SChuck Lever TP_printk("addr=%s sc_sq_avail=%d/%d status=%d", 1887e28b4fc6SChuck Lever __get_str(addr), __entry->avail, __entry->depth, 1888e28b4fc6SChuck Lever __entry->status 1889e28b4fc6SChuck Lever ) 1890e28b4fc6SChuck Lever ); 1891e28b4fc6SChuck Lever 1892e48f083eSChuck Lever #endif /* _TRACE_RPCRDMA_H */ 1893e48f083eSChuck Lever 1894e48f083eSChuck Lever #include <trace/define_trace.h> 1895