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 636b147ea7SChuck Lever DECLARE_EVENT_CLASS(rpcrdma_mr_completion_class, 646b147ea7SChuck Lever TP_PROTO( 656b147ea7SChuck Lever const struct ib_wc *wc, 666b147ea7SChuck Lever const struct rpc_rdma_cid *cid 676b147ea7SChuck Lever ), 686b147ea7SChuck Lever 696b147ea7SChuck Lever TP_ARGS(wc, cid), 706b147ea7SChuck Lever 716b147ea7SChuck Lever TP_STRUCT__entry( 726b147ea7SChuck Lever __field(u32, cq_id) 736b147ea7SChuck Lever __field(int, completion_id) 746b147ea7SChuck Lever __field(unsigned long, status) 756b147ea7SChuck Lever __field(unsigned int, vendor_err) 766b147ea7SChuck Lever ), 776b147ea7SChuck Lever 786b147ea7SChuck Lever TP_fast_assign( 796b147ea7SChuck Lever __entry->cq_id = cid->ci_queue_id; 806b147ea7SChuck Lever __entry->completion_id = cid->ci_completion_id; 816b147ea7SChuck Lever __entry->status = wc->status; 826b147ea7SChuck Lever if (wc->status) 836b147ea7SChuck Lever __entry->vendor_err = wc->vendor_err; 846b147ea7SChuck Lever else 856b147ea7SChuck Lever __entry->vendor_err = 0; 866b147ea7SChuck Lever ), 876b147ea7SChuck Lever 886b147ea7SChuck Lever TP_printk("cq.id=%u mr.id=%d status=%s (%lu/0x%x)", 896b147ea7SChuck Lever __entry->cq_id, __entry->completion_id, 906b147ea7SChuck Lever rdma_show_wc_status(__entry->status), 916b147ea7SChuck Lever __entry->status, __entry->vendor_err 926b147ea7SChuck Lever ) 936b147ea7SChuck Lever ); 946b147ea7SChuck Lever 956b147ea7SChuck Lever #define DEFINE_MR_COMPLETION_EVENT(name) \ 966b147ea7SChuck Lever DEFINE_EVENT(rpcrdma_mr_completion_class, name, \ 976b147ea7SChuck Lever TP_PROTO( \ 986b147ea7SChuck Lever const struct ib_wc *wc, \ 996b147ea7SChuck Lever const struct rpc_rdma_cid *cid \ 1006b147ea7SChuck Lever ), \ 1016b147ea7SChuck Lever TP_ARGS(wc, cid)) 1026b147ea7SChuck Lever 103c30f259aSChuck Lever DECLARE_EVENT_CLASS(rpcrdma_receive_completion_class, 104c30f259aSChuck Lever TP_PROTO( 105c30f259aSChuck Lever const struct ib_wc *wc, 106c30f259aSChuck Lever const struct rpc_rdma_cid *cid 107c30f259aSChuck Lever ), 108c30f259aSChuck Lever 109c30f259aSChuck Lever TP_ARGS(wc, cid), 110c30f259aSChuck Lever 111c30f259aSChuck Lever TP_STRUCT__entry( 112c30f259aSChuck Lever __field(u32, cq_id) 113c30f259aSChuck Lever __field(int, completion_id) 114c30f259aSChuck Lever __field(u32, received) 115c30f259aSChuck Lever __field(unsigned long, status) 116c30f259aSChuck Lever __field(unsigned int, vendor_err) 117c30f259aSChuck Lever ), 118c30f259aSChuck Lever 119c30f259aSChuck Lever TP_fast_assign( 120c30f259aSChuck Lever __entry->cq_id = cid->ci_queue_id; 121c30f259aSChuck Lever __entry->completion_id = cid->ci_completion_id; 122c30f259aSChuck Lever __entry->status = wc->status; 123c30f259aSChuck Lever if (wc->status) { 124c30f259aSChuck Lever __entry->received = 0; 125c30f259aSChuck Lever __entry->vendor_err = wc->vendor_err; 126c30f259aSChuck Lever } else { 127c30f259aSChuck Lever __entry->received = wc->byte_len; 128c30f259aSChuck Lever __entry->vendor_err = 0; 129c30f259aSChuck Lever } 130c30f259aSChuck Lever ), 131c30f259aSChuck Lever 132c30f259aSChuck Lever TP_printk("cq.id=%u cid=%d status=%s (%lu/0x%x) received=%u", 133c30f259aSChuck Lever __entry->cq_id, __entry->completion_id, 134c30f259aSChuck Lever rdma_show_wc_status(__entry->status), 135c30f259aSChuck Lever __entry->status, __entry->vendor_err, 136c30f259aSChuck Lever __entry->received 137c30f259aSChuck Lever ) 138c30f259aSChuck Lever ); 139c30f259aSChuck Lever 140c30f259aSChuck Lever #define DEFINE_RECEIVE_COMPLETION_EVENT(name) \ 141c30f259aSChuck Lever DEFINE_EVENT(rpcrdma_receive_completion_class, name, \ 142c30f259aSChuck Lever TP_PROTO( \ 143c30f259aSChuck Lever const struct ib_wc *wc, \ 144c30f259aSChuck Lever const struct rpc_rdma_cid *cid \ 145c30f259aSChuck Lever ), \ 146c30f259aSChuck Lever TP_ARGS(wc, cid)) 147c30f259aSChuck Lever 1483a9568feSChuck Lever DECLARE_EVENT_CLASS(xprtrdma_reply_class, 149b4a7f91cSChuck Lever TP_PROTO( 150b4a7f91cSChuck Lever const struct rpcrdma_rep *rep 151b4a7f91cSChuck Lever ), 152b4a7f91cSChuck Lever 153b4a7f91cSChuck Lever TP_ARGS(rep), 154b4a7f91cSChuck Lever 155b4a7f91cSChuck Lever TP_STRUCT__entry( 156b4a7f91cSChuck Lever __field(u32, xid) 157b4a7f91cSChuck Lever __field(u32, version) 158b4a7f91cSChuck Lever __field(u32, proc) 1593a9568feSChuck Lever __string(addr, rpcrdma_addrstr(rep->rr_rxprt)) 1603a9568feSChuck Lever __string(port, rpcrdma_portstr(rep->rr_rxprt)) 161b4a7f91cSChuck Lever ), 162b4a7f91cSChuck Lever 163b4a7f91cSChuck Lever TP_fast_assign( 164b4a7f91cSChuck Lever __entry->xid = be32_to_cpu(rep->rr_xid); 165b4a7f91cSChuck Lever __entry->version = be32_to_cpu(rep->rr_vers); 166b4a7f91cSChuck Lever __entry->proc = be32_to_cpu(rep->rr_proc); 1673a9568feSChuck Lever __assign_str(addr, rpcrdma_addrstr(rep->rr_rxprt)); 1683a9568feSChuck Lever __assign_str(port, rpcrdma_portstr(rep->rr_rxprt)); 169b4a7f91cSChuck Lever ), 170b4a7f91cSChuck Lever 1713a9568feSChuck Lever TP_printk("peer=[%s]:%s xid=0x%08x version=%u proc=%u", 1723a9568feSChuck Lever __get_str(addr), __get_str(port), 1733a9568feSChuck Lever __entry->xid, __entry->version, __entry->proc 174b4a7f91cSChuck Lever ) 175b4a7f91cSChuck Lever ); 176b4a7f91cSChuck Lever 177b4a7f91cSChuck Lever #define DEFINE_REPLY_EVENT(name) \ 1783a9568feSChuck Lever DEFINE_EVENT(xprtrdma_reply_class, \ 1793a9568feSChuck Lever xprtrdma_reply_##name##_err, \ 180b4a7f91cSChuck Lever TP_PROTO( \ 181b4a7f91cSChuck Lever const struct rpcrdma_rep *rep \ 182b4a7f91cSChuck Lever ), \ 183b4a7f91cSChuck Lever TP_ARGS(rep)) 184b4a7f91cSChuck Lever 1851c443effSChuck Lever DECLARE_EVENT_CLASS(xprtrdma_rxprt, 1861c443effSChuck Lever TP_PROTO( 1871c443effSChuck Lever const struct rpcrdma_xprt *r_xprt 1881c443effSChuck Lever ), 1891c443effSChuck Lever 1901c443effSChuck Lever TP_ARGS(r_xprt), 1911c443effSChuck Lever 1921c443effSChuck Lever TP_STRUCT__entry( 1931c443effSChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 1941c443effSChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 1951c443effSChuck Lever ), 1961c443effSChuck Lever 1971c443effSChuck Lever TP_fast_assign( 1981c443effSChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 1991c443effSChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 2001c443effSChuck Lever ), 2011c443effSChuck Lever 20283189d15SChuck Lever TP_printk("peer=[%s]:%s", 20383189d15SChuck Lever __get_str(addr), __get_str(port) 2041c443effSChuck Lever ) 2051c443effSChuck Lever ); 2061c443effSChuck Lever 2071c443effSChuck Lever #define DEFINE_RXPRT_EVENT(name) \ 2081c443effSChuck Lever DEFINE_EVENT(xprtrdma_rxprt, name, \ 2091c443effSChuck Lever TP_PROTO( \ 2101c443effSChuck Lever const struct rpcrdma_xprt *r_xprt \ 2111c443effSChuck Lever ), \ 2121c443effSChuck Lever TP_ARGS(r_xprt)) 2131c443effSChuck Lever 2147b020f17SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_connect_class, 2157b020f17SChuck Lever TP_PROTO( 2167b020f17SChuck Lever const struct rpcrdma_xprt *r_xprt, 2177b020f17SChuck Lever int rc 2187b020f17SChuck Lever ), 2197b020f17SChuck Lever 2207b020f17SChuck Lever TP_ARGS(r_xprt, rc), 2217b020f17SChuck Lever 2227b020f17SChuck Lever TP_STRUCT__entry( 2237b020f17SChuck Lever __field(int, rc) 2247b020f17SChuck Lever __field(int, connect_status) 2257b020f17SChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 2267b020f17SChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 2277b020f17SChuck Lever ), 2287b020f17SChuck Lever 2297b020f17SChuck Lever TP_fast_assign( 2307b020f17SChuck Lever __entry->rc = rc; 231e28ce900SChuck Lever __entry->connect_status = r_xprt->rx_ep->re_connect_status; 2327b020f17SChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 2337b020f17SChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 2347b020f17SChuck Lever ), 2357b020f17SChuck Lever 23683189d15SChuck Lever TP_printk("peer=[%s]:%s rc=%d connection status=%d", 23783189d15SChuck Lever __get_str(addr), __get_str(port), 2387b020f17SChuck Lever __entry->rc, __entry->connect_status 2397b020f17SChuck Lever ) 2407b020f17SChuck Lever ); 2417b020f17SChuck Lever 2427b020f17SChuck Lever #define DEFINE_CONN_EVENT(name) \ 2437b020f17SChuck Lever DEFINE_EVENT(xprtrdma_connect_class, xprtrdma_##name, \ 2447b020f17SChuck Lever TP_PROTO( \ 2457b020f17SChuck Lever const struct rpcrdma_xprt *r_xprt, \ 2467b020f17SChuck Lever int rc \ 2477b020f17SChuck Lever ), \ 2487b020f17SChuck Lever TP_ARGS(r_xprt, rc)) 2497b020f17SChuck Lever 25058f10ad4SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_rdch_event, 25158f10ad4SChuck Lever TP_PROTO( 25258f10ad4SChuck Lever const struct rpc_task *task, 25358f10ad4SChuck Lever unsigned int pos, 25458f10ad4SChuck Lever struct rpcrdma_mr *mr, 25558f10ad4SChuck Lever int nsegs 25658f10ad4SChuck Lever ), 25758f10ad4SChuck Lever 25858f10ad4SChuck Lever TP_ARGS(task, pos, mr, nsegs), 25958f10ad4SChuck Lever 26058f10ad4SChuck Lever TP_STRUCT__entry( 26158f10ad4SChuck Lever __field(unsigned int, task_id) 26258f10ad4SChuck Lever __field(unsigned int, client_id) 26358f10ad4SChuck Lever __field(unsigned int, pos) 26458f10ad4SChuck Lever __field(int, nents) 26558f10ad4SChuck Lever __field(u32, handle) 26658f10ad4SChuck Lever __field(u32, length) 26758f10ad4SChuck Lever __field(u64, offset) 26858f10ad4SChuck Lever __field(int, nsegs) 26958f10ad4SChuck Lever ), 27058f10ad4SChuck Lever 27158f10ad4SChuck Lever TP_fast_assign( 27258f10ad4SChuck Lever __entry->task_id = task->tk_pid; 27358f10ad4SChuck Lever __entry->client_id = task->tk_client->cl_clid; 27458f10ad4SChuck Lever __entry->pos = pos; 27558f10ad4SChuck Lever __entry->nents = mr->mr_nents; 27658f10ad4SChuck Lever __entry->handle = mr->mr_handle; 27758f10ad4SChuck Lever __entry->length = mr->mr_length; 27858f10ad4SChuck Lever __entry->offset = mr->mr_offset; 27958f10ad4SChuck Lever __entry->nsegs = nsegs; 28058f10ad4SChuck Lever ), 28158f10ad4SChuck Lever 282aba11831SChuck Lever TP_printk("task:%u@%u pos=%u %u@0x%016llx:0x%08x (%s)", 283aba11831SChuck Lever __entry->task_id, __entry->client_id, 28458f10ad4SChuck Lever __entry->pos, __entry->length, 28558f10ad4SChuck Lever (unsigned long long)__entry->offset, __entry->handle, 28658f10ad4SChuck Lever __entry->nents < __entry->nsegs ? "more" : "last" 28758f10ad4SChuck Lever ) 28858f10ad4SChuck Lever ); 28958f10ad4SChuck Lever 29058f10ad4SChuck Lever #define DEFINE_RDCH_EVENT(name) \ 291aba11831SChuck Lever DEFINE_EVENT(xprtrdma_rdch_event, xprtrdma_chunk_##name,\ 29258f10ad4SChuck Lever TP_PROTO( \ 29358f10ad4SChuck Lever const struct rpc_task *task, \ 29458f10ad4SChuck Lever unsigned int pos, \ 29558f10ad4SChuck Lever struct rpcrdma_mr *mr, \ 29658f10ad4SChuck Lever int nsegs \ 29758f10ad4SChuck Lever ), \ 29858f10ad4SChuck Lever TP_ARGS(task, pos, mr, nsegs)) 29958f10ad4SChuck Lever 30058f10ad4SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_wrch_event, 30158f10ad4SChuck Lever TP_PROTO( 30258f10ad4SChuck Lever const struct rpc_task *task, 30358f10ad4SChuck Lever struct rpcrdma_mr *mr, 30458f10ad4SChuck Lever int nsegs 30558f10ad4SChuck Lever ), 30658f10ad4SChuck Lever 30758f10ad4SChuck Lever TP_ARGS(task, mr, nsegs), 30858f10ad4SChuck Lever 30958f10ad4SChuck Lever TP_STRUCT__entry( 31058f10ad4SChuck Lever __field(unsigned int, task_id) 31158f10ad4SChuck Lever __field(unsigned int, client_id) 31258f10ad4SChuck Lever __field(int, nents) 31358f10ad4SChuck Lever __field(u32, handle) 31458f10ad4SChuck Lever __field(u32, length) 31558f10ad4SChuck Lever __field(u64, offset) 31658f10ad4SChuck Lever __field(int, nsegs) 31758f10ad4SChuck Lever ), 31858f10ad4SChuck Lever 31958f10ad4SChuck Lever TP_fast_assign( 32058f10ad4SChuck Lever __entry->task_id = task->tk_pid; 32158f10ad4SChuck Lever __entry->client_id = task->tk_client->cl_clid; 32258f10ad4SChuck Lever __entry->nents = mr->mr_nents; 32358f10ad4SChuck Lever __entry->handle = mr->mr_handle; 32458f10ad4SChuck Lever __entry->length = mr->mr_length; 32558f10ad4SChuck Lever __entry->offset = mr->mr_offset; 32658f10ad4SChuck Lever __entry->nsegs = nsegs; 32758f10ad4SChuck Lever ), 32858f10ad4SChuck Lever 329aba11831SChuck Lever TP_printk("task:%u@%u %u@0x%016llx:0x%08x (%s)", 330aba11831SChuck Lever __entry->task_id, __entry->client_id, 33158f10ad4SChuck Lever __entry->length, (unsigned long long)__entry->offset, 33258f10ad4SChuck Lever __entry->handle, 33358f10ad4SChuck Lever __entry->nents < __entry->nsegs ? "more" : "last" 33458f10ad4SChuck Lever ) 33558f10ad4SChuck Lever ); 33658f10ad4SChuck Lever 33758f10ad4SChuck Lever #define DEFINE_WRCH_EVENT(name) \ 338aba11831SChuck Lever DEFINE_EVENT(xprtrdma_wrch_event, xprtrdma_chunk_##name,\ 33958f10ad4SChuck Lever TP_PROTO( \ 34058f10ad4SChuck Lever const struct rpc_task *task, \ 34158f10ad4SChuck Lever struct rpcrdma_mr *mr, \ 34258f10ad4SChuck Lever int nsegs \ 34358f10ad4SChuck Lever ), \ 34458f10ad4SChuck Lever TP_ARGS(task, mr, nsegs)) 34558f10ad4SChuck Lever 346aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_BIDIRECTIONAL); 347aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_TO_DEVICE); 348aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_FROM_DEVICE); 349aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_NONE); 350aba11831SChuck Lever 351aba11831SChuck Lever #define xprtrdma_show_direction(x) \ 352aba11831SChuck Lever __print_symbolic(x, \ 353aba11831SChuck Lever { DMA_BIDIRECTIONAL, "BIDIR" }, \ 354aba11831SChuck Lever { DMA_TO_DEVICE, "TO_DEVICE" }, \ 355aba11831SChuck Lever { DMA_FROM_DEVICE, "FROM_DEVICE" }, \ 356aba11831SChuck Lever { DMA_NONE, "NONE" }) 357aba11831SChuck Lever 3587703db97SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_mr_class, 3597703db97SChuck Lever TP_PROTO( 3607703db97SChuck Lever const struct rpcrdma_mr *mr 3617703db97SChuck Lever ), 3627703db97SChuck Lever 3637703db97SChuck Lever TP_ARGS(mr), 3647703db97SChuck Lever 3657703db97SChuck Lever TP_STRUCT__entry( 3667703db97SChuck Lever __field(unsigned int, task_id) 3677703db97SChuck Lever __field(unsigned int, client_id) 3687703db97SChuck Lever __field(u32, mr_id) 3697703db97SChuck Lever __field(int, nents) 3707703db97SChuck Lever __field(u32, handle) 3717703db97SChuck Lever __field(u32, length) 3727703db97SChuck Lever __field(u64, offset) 3737703db97SChuck Lever __field(u32, dir) 3747703db97SChuck Lever ), 3757703db97SChuck Lever 3767703db97SChuck Lever TP_fast_assign( 3777703db97SChuck Lever const struct rpcrdma_req *req = mr->mr_req; 378*21037b8cSChuck Lever 379*21037b8cSChuck Lever if (req) { 3807703db97SChuck Lever const struct rpc_task *task = req->rl_slot.rq_task; 3817703db97SChuck Lever 3827703db97SChuck Lever __entry->task_id = task->tk_pid; 3837703db97SChuck Lever __entry->client_id = task->tk_client->cl_clid; 384*21037b8cSChuck Lever } else { 385*21037b8cSChuck Lever __entry->task_id = 0; 386*21037b8cSChuck Lever __entry->client_id = -1; 387*21037b8cSChuck Lever } 38813bcf7e3SChuck Lever __entry->mr_id = mr->mr_ibmr->res.id; 3897703db97SChuck Lever __entry->nents = mr->mr_nents; 3907703db97SChuck Lever __entry->handle = mr->mr_handle; 3917703db97SChuck Lever __entry->length = mr->mr_length; 3927703db97SChuck Lever __entry->offset = mr->mr_offset; 3937703db97SChuck Lever __entry->dir = mr->mr_dir; 3947703db97SChuck Lever ), 3957703db97SChuck Lever 3967703db97SChuck Lever TP_printk("task:%u@%u mr.id=%u nents=%d %u@0x%016llx:0x%08x (%s)", 3977703db97SChuck Lever __entry->task_id, __entry->client_id, 3987703db97SChuck Lever __entry->mr_id, __entry->nents, __entry->length, 3997703db97SChuck Lever (unsigned long long)__entry->offset, __entry->handle, 4007703db97SChuck Lever xprtrdma_show_direction(__entry->dir) 4017703db97SChuck Lever ) 4027703db97SChuck Lever ); 4037703db97SChuck Lever 4047703db97SChuck Lever #define DEFINE_MR_EVENT(name) \ 4057703db97SChuck Lever DEFINE_EVENT(xprtrdma_mr_class, \ 4067703db97SChuck Lever xprtrdma_mr_##name, \ 4077703db97SChuck Lever TP_PROTO( \ 4087703db97SChuck Lever const struct rpcrdma_mr *mr \ 4097703db97SChuck Lever ), \ 4107703db97SChuck Lever TP_ARGS(mr)) 4117703db97SChuck Lever 4127703db97SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_anonymous_mr_class, 4132937fedeSChuck Lever TP_PROTO( 4142937fedeSChuck Lever const struct rpcrdma_mr *mr 4152937fedeSChuck Lever ), 4162937fedeSChuck Lever 4172937fedeSChuck Lever TP_ARGS(mr), 4182937fedeSChuck Lever 4192937fedeSChuck Lever TP_STRUCT__entry( 42062a89501SChuck Lever __field(u32, mr_id) 42162a89501SChuck Lever __field(int, nents) 4222937fedeSChuck Lever __field(u32, handle) 4232937fedeSChuck Lever __field(u32, length) 4242937fedeSChuck Lever __field(u64, offset) 425aba11831SChuck Lever __field(u32, dir) 4262937fedeSChuck Lever ), 4272937fedeSChuck Lever 4282937fedeSChuck Lever TP_fast_assign( 42913bcf7e3SChuck Lever __entry->mr_id = mr->mr_ibmr->res.id; 43062a89501SChuck Lever __entry->nents = mr->mr_nents; 4312937fedeSChuck Lever __entry->handle = mr->mr_handle; 4322937fedeSChuck Lever __entry->length = mr->mr_length; 4332937fedeSChuck Lever __entry->offset = mr->mr_offset; 434aba11831SChuck Lever __entry->dir = mr->mr_dir; 4352937fedeSChuck Lever ), 4362937fedeSChuck Lever 43762a89501SChuck Lever TP_printk("mr.id=%u nents=%d %u@0x%016llx:0x%08x (%s)", 43862a89501SChuck Lever __entry->mr_id, __entry->nents, __entry->length, 439aba11831SChuck Lever (unsigned long long)__entry->offset, __entry->handle, 440aba11831SChuck Lever xprtrdma_show_direction(__entry->dir) 4412937fedeSChuck Lever ) 4422937fedeSChuck Lever ); 4432937fedeSChuck Lever 4447703db97SChuck Lever #define DEFINE_ANON_MR_EVENT(name) \ 4457703db97SChuck Lever DEFINE_EVENT(xprtrdma_anonymous_mr_class, \ 4467703db97SChuck Lever xprtrdma_mr_##name, \ 4472937fedeSChuck Lever TP_PROTO( \ 4482937fedeSChuck Lever const struct rpcrdma_mr *mr \ 4492937fedeSChuck Lever ), \ 4502937fedeSChuck Lever TP_ARGS(mr)) 4512937fedeSChuck Lever 452d11e9346SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_callback_class, 453fc1eb807SChuck Lever TP_PROTO( 454d11e9346SChuck Lever const struct rpcrdma_xprt *r_xprt, 455fc1eb807SChuck Lever const struct rpc_rqst *rqst 456fc1eb807SChuck Lever ), 457fc1eb807SChuck Lever 458d11e9346SChuck Lever TP_ARGS(r_xprt, rqst), 459fc1eb807SChuck Lever 460fc1eb807SChuck Lever TP_STRUCT__entry( 461fc1eb807SChuck Lever __field(u32, xid) 462d11e9346SChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 463d11e9346SChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 464fc1eb807SChuck Lever ), 465fc1eb807SChuck Lever 466fc1eb807SChuck Lever TP_fast_assign( 467fc1eb807SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 468d11e9346SChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 469d11e9346SChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 470fc1eb807SChuck Lever ), 471fc1eb807SChuck Lever 472d11e9346SChuck Lever TP_printk("peer=[%s]:%s xid=0x%08x", 473d11e9346SChuck Lever __get_str(addr), __get_str(port), __entry->xid 474fc1eb807SChuck Lever ) 475fc1eb807SChuck Lever ); 476fc1eb807SChuck Lever 477d11e9346SChuck Lever #define DEFINE_CALLBACK_EVENT(name) \ 478d11e9346SChuck Lever DEFINE_EVENT(xprtrdma_callback_class, \ 479d11e9346SChuck Lever xprtrdma_cb_##name, \ 480fc1eb807SChuck Lever TP_PROTO( \ 481d11e9346SChuck Lever const struct rpcrdma_xprt *r_xprt, \ 482fc1eb807SChuck Lever const struct rpc_rqst *rqst \ 483fc1eb807SChuck Lever ), \ 484d11e9346SChuck Lever TP_ARGS(r_xprt, rqst)) 485fc1eb807SChuck Lever 486b4a7f91cSChuck Lever /** 487b4744e00SChuck Lever ** Connection events 488b4744e00SChuck Lever **/ 489b4744e00SChuck Lever 490f54c870dSChuck Lever TRACE_EVENT(xprtrdma_inline_thresh, 491f54c870dSChuck Lever TP_PROTO( 492745b734cSChuck Lever const struct rpcrdma_ep *ep 493f54c870dSChuck Lever ), 494f54c870dSChuck Lever 495745b734cSChuck Lever TP_ARGS(ep), 496f54c870dSChuck Lever 497f54c870dSChuck Lever TP_STRUCT__entry( 498f54c870dSChuck Lever __field(unsigned int, inline_send) 499f54c870dSChuck Lever __field(unsigned int, inline_recv) 500f54c870dSChuck Lever __field(unsigned int, max_send) 501f54c870dSChuck Lever __field(unsigned int, max_recv) 502745b734cSChuck Lever __array(unsigned char, srcaddr, sizeof(struct sockaddr_in6)) 503745b734cSChuck Lever __array(unsigned char, dstaddr, sizeof(struct sockaddr_in6)) 504f54c870dSChuck Lever ), 505f54c870dSChuck Lever 506f54c870dSChuck Lever TP_fast_assign( 507745b734cSChuck Lever const struct rdma_cm_id *id = ep->re_id; 508f54c870dSChuck Lever 50993aa8e0aSChuck Lever __entry->inline_send = ep->re_inline_send; 51093aa8e0aSChuck Lever __entry->inline_recv = ep->re_inline_recv; 51193aa8e0aSChuck Lever __entry->max_send = ep->re_max_inline_send; 51293aa8e0aSChuck Lever __entry->max_recv = ep->re_max_inline_recv; 513745b734cSChuck Lever memcpy(__entry->srcaddr, &id->route.addr.src_addr, 514745b734cSChuck Lever sizeof(struct sockaddr_in6)); 515745b734cSChuck Lever memcpy(__entry->dstaddr, &id->route.addr.dst_addr, 516745b734cSChuck Lever sizeof(struct sockaddr_in6)); 517f54c870dSChuck Lever ), 518f54c870dSChuck Lever 519745b734cSChuck Lever TP_printk("%pISpc -> %pISpc neg send/recv=%u/%u, calc send/recv=%u/%u", 520745b734cSChuck Lever __entry->srcaddr, __entry->dstaddr, 521f54c870dSChuck Lever __entry->inline_send, __entry->inline_recv, 522f54c870dSChuck Lever __entry->max_send, __entry->max_recv 523f54c870dSChuck Lever ) 524f54c870dSChuck Lever ); 525f54c870dSChuck Lever 5267b020f17SChuck Lever DEFINE_CONN_EVENT(connect); 5277b020f17SChuck Lever DEFINE_CONN_EVENT(disconnect); 5287b020f17SChuck Lever 5297b020f17SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_op_inject_dsc); 5307b020f17SChuck Lever 5317b020f17SChuck Lever TRACE_EVENT(xprtrdma_op_connect, 532b4744e00SChuck Lever TP_PROTO( 533b4744e00SChuck Lever const struct rpcrdma_xprt *r_xprt, 5347b020f17SChuck Lever unsigned long delay 535b4744e00SChuck Lever ), 536b4744e00SChuck Lever 5377b020f17SChuck Lever TP_ARGS(r_xprt, delay), 538b4744e00SChuck Lever 539b4744e00SChuck Lever TP_STRUCT__entry( 5407b020f17SChuck Lever __field(unsigned long, delay) 541b4744e00SChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 542b4744e00SChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 543b4744e00SChuck Lever ), 544b4744e00SChuck Lever 545b4744e00SChuck Lever TP_fast_assign( 5467b020f17SChuck Lever __entry->delay = delay; 547b4744e00SChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 548b4744e00SChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 549b4744e00SChuck Lever ), 550b4744e00SChuck Lever 55183189d15SChuck Lever TP_printk("peer=[%s]:%s delay=%lu", 55283189d15SChuck Lever __get_str(addr), __get_str(port), __entry->delay 553b4744e00SChuck Lever ) 554b4744e00SChuck Lever ); 555b4744e00SChuck Lever 556b4744e00SChuck Lever 557675dd90aSChuck Lever TRACE_EVENT(xprtrdma_op_set_cto, 558675dd90aSChuck Lever TP_PROTO( 559675dd90aSChuck Lever const struct rpcrdma_xprt *r_xprt, 560675dd90aSChuck Lever unsigned long connect, 561675dd90aSChuck Lever unsigned long reconnect 562675dd90aSChuck Lever ), 563675dd90aSChuck Lever 564675dd90aSChuck Lever TP_ARGS(r_xprt, connect, reconnect), 565675dd90aSChuck Lever 566675dd90aSChuck Lever TP_STRUCT__entry( 567675dd90aSChuck Lever __field(unsigned long, connect) 568675dd90aSChuck Lever __field(unsigned long, reconnect) 569675dd90aSChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 570675dd90aSChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 571675dd90aSChuck Lever ), 572675dd90aSChuck Lever 573675dd90aSChuck Lever TP_fast_assign( 574675dd90aSChuck Lever __entry->connect = connect; 575675dd90aSChuck Lever __entry->reconnect = reconnect; 576675dd90aSChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 577675dd90aSChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 578675dd90aSChuck Lever ), 579675dd90aSChuck Lever 58083189d15SChuck Lever TP_printk("peer=[%s]:%s connect=%lu reconnect=%lu", 58183189d15SChuck Lever __get_str(addr), __get_str(port), 582675dd90aSChuck Lever __entry->connect / HZ, __entry->reconnect / HZ 583675dd90aSChuck Lever ) 584675dd90aSChuck Lever ); 585675dd90aSChuck Lever 586b4744e00SChuck Lever /** 587ab03eff5SChuck Lever ** Call events 588ab03eff5SChuck Lever **/ 589ab03eff5SChuck Lever 5901c443effSChuck Lever TRACE_EVENT(xprtrdma_createmrs, 5911c443effSChuck Lever TP_PROTO( 5921c443effSChuck Lever const struct rpcrdma_xprt *r_xprt, 5931c443effSChuck Lever unsigned int count 5941c443effSChuck Lever ), 5951c443effSChuck Lever 5961c443effSChuck Lever TP_ARGS(r_xprt, count), 5971c443effSChuck Lever 5981c443effSChuck Lever TP_STRUCT__entry( 5996dc6ec9eSChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 6006dc6ec9eSChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 6011c443effSChuck Lever __field(unsigned int, count) 6021c443effSChuck Lever ), 6031c443effSChuck Lever 6041c443effSChuck Lever TP_fast_assign( 6051c443effSChuck Lever __entry->count = count; 6066dc6ec9eSChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 6076dc6ec9eSChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 6081c443effSChuck Lever ), 6091c443effSChuck Lever 61083189d15SChuck Lever TP_printk("peer=[%s]:%s created %u MRs", 61183189d15SChuck Lever __get_str(addr), __get_str(port), __entry->count 6126dc6ec9eSChuck Lever ) 6136dc6ec9eSChuck Lever ); 6146dc6ec9eSChuck Lever 6150307cdecSChuck Lever TRACE_EVENT(xprtrdma_nomrs_err, 6166dc6ec9eSChuck Lever TP_PROTO( 6170307cdecSChuck Lever const struct rpcrdma_xprt *r_xprt, 6186dc6ec9eSChuck Lever const struct rpcrdma_req *req 6196dc6ec9eSChuck Lever ), 6206dc6ec9eSChuck Lever 6210307cdecSChuck Lever TP_ARGS(r_xprt, req), 6226dc6ec9eSChuck Lever 6236dc6ec9eSChuck Lever TP_STRUCT__entry( 6246dc6ec9eSChuck Lever __field(unsigned int, task_id) 6256dc6ec9eSChuck Lever __field(unsigned int, client_id) 6260307cdecSChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 6270307cdecSChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 6286dc6ec9eSChuck Lever ), 6296dc6ec9eSChuck Lever 6306dc6ec9eSChuck Lever TP_fast_assign( 6316dc6ec9eSChuck Lever const struct rpc_rqst *rqst = &req->rl_slot; 6326dc6ec9eSChuck Lever 6336dc6ec9eSChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 6346dc6ec9eSChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 6350307cdecSChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 6360307cdecSChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 6376dc6ec9eSChuck Lever ), 6386dc6ec9eSChuck Lever 6390307cdecSChuck Lever TP_printk("peer=[%s]:%s task:%u@%u", 6400307cdecSChuck Lever __get_str(addr), __get_str(port), 6410307cdecSChuck Lever __entry->task_id, __entry->client_id 6423b39f52aSChuck Lever ) 6433b39f52aSChuck Lever ); 6441c443effSChuck Lever 645aba11831SChuck Lever DEFINE_RDCH_EVENT(read); 646aba11831SChuck Lever DEFINE_WRCH_EVENT(write); 647aba11831SChuck Lever DEFINE_WRCH_EVENT(reply); 648*21037b8cSChuck Lever DEFINE_WRCH_EVENT(wp); 64958f10ad4SChuck Lever 650ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch); 651614f3c96SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch_pullup); 652614f3c96SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch_mapped); 653ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_readch); 654ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_areadch); 655ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_writech); 656ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_replych); 657ab03eff5SChuck Lever 658ab03eff5SChuck Lever #define xprtrdma_show_chunktype(x) \ 659ab03eff5SChuck Lever __print_symbolic(x, \ 660ab03eff5SChuck Lever { rpcrdma_noch, "inline" }, \ 661614f3c96SChuck Lever { rpcrdma_noch_pullup, "pullup" }, \ 662614f3c96SChuck Lever { rpcrdma_noch_mapped, "mapped" }, \ 663ab03eff5SChuck Lever { rpcrdma_readch, "read list" }, \ 664ab03eff5SChuck Lever { rpcrdma_areadch, "*read list" }, \ 665ab03eff5SChuck Lever { rpcrdma_writech, "write list" }, \ 666ab03eff5SChuck Lever { rpcrdma_replych, "reply chunk" }) 667ab03eff5SChuck Lever 668ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_marshal, 669ab03eff5SChuck Lever TP_PROTO( 6701310051cSChuck Lever const struct rpcrdma_req *req, 671ab03eff5SChuck Lever unsigned int rtype, 672ab03eff5SChuck Lever unsigned int wtype 673ab03eff5SChuck Lever ), 674ab03eff5SChuck Lever 6751310051cSChuck Lever TP_ARGS(req, rtype, wtype), 676ab03eff5SChuck Lever 677ab03eff5SChuck Lever TP_STRUCT__entry( 678ab03eff5SChuck Lever __field(unsigned int, task_id) 679ab03eff5SChuck Lever __field(unsigned int, client_id) 680ab03eff5SChuck Lever __field(u32, xid) 681ab03eff5SChuck Lever __field(unsigned int, hdrlen) 682ab03eff5SChuck Lever __field(unsigned int, headlen) 683ab03eff5SChuck Lever __field(unsigned int, pagelen) 684ab03eff5SChuck Lever __field(unsigned int, taillen) 685ab03eff5SChuck Lever __field(unsigned int, rtype) 686ab03eff5SChuck Lever __field(unsigned int, wtype) 687ab03eff5SChuck Lever ), 688ab03eff5SChuck Lever 689ab03eff5SChuck Lever TP_fast_assign( 6901310051cSChuck Lever const struct rpc_rqst *rqst = &req->rl_slot; 6911310051cSChuck Lever 692ab03eff5SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 693ab03eff5SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 694ab03eff5SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 6951310051cSChuck Lever __entry->hdrlen = req->rl_hdrbuf.len; 696ab03eff5SChuck Lever __entry->headlen = rqst->rq_snd_buf.head[0].iov_len; 697ab03eff5SChuck Lever __entry->pagelen = rqst->rq_snd_buf.page_len; 698ab03eff5SChuck Lever __entry->taillen = rqst->rq_snd_buf.tail[0].iov_len; 699ab03eff5SChuck Lever __entry->rtype = rtype; 700ab03eff5SChuck Lever __entry->wtype = wtype; 701ab03eff5SChuck Lever ), 702ab03eff5SChuck Lever 703ab03eff5SChuck Lever TP_printk("task:%u@%u xid=0x%08x: hdr=%u xdr=%u/%u/%u %s/%s", 704ab03eff5SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 705ab03eff5SChuck Lever __entry->hdrlen, 706ab03eff5SChuck Lever __entry->headlen, __entry->pagelen, __entry->taillen, 707ab03eff5SChuck Lever xprtrdma_show_chunktype(__entry->rtype), 708ab03eff5SChuck Lever xprtrdma_show_chunktype(__entry->wtype) 709ab03eff5SChuck Lever ) 710ab03eff5SChuck Lever ); 711ab03eff5SChuck Lever 71217e4c443SChuck Lever TRACE_EVENT(xprtrdma_marshal_failed, 71317e4c443SChuck Lever TP_PROTO(const struct rpc_rqst *rqst, 71417e4c443SChuck Lever int ret 71517e4c443SChuck Lever ), 71617e4c443SChuck Lever 71717e4c443SChuck Lever TP_ARGS(rqst, ret), 71817e4c443SChuck Lever 71917e4c443SChuck Lever TP_STRUCT__entry( 72017e4c443SChuck Lever __field(unsigned int, task_id) 72117e4c443SChuck Lever __field(unsigned int, client_id) 72217e4c443SChuck Lever __field(u32, xid) 72317e4c443SChuck Lever __field(int, ret) 72417e4c443SChuck Lever ), 72517e4c443SChuck Lever 72617e4c443SChuck Lever TP_fast_assign( 72717e4c443SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 72817e4c443SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 72917e4c443SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 73017e4c443SChuck Lever __entry->ret = ret; 73117e4c443SChuck Lever ), 73217e4c443SChuck Lever 73317e4c443SChuck Lever TP_printk("task:%u@%u xid=0x%08x: ret=%d", 73417e4c443SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 73517e4c443SChuck Lever __entry->ret 73617e4c443SChuck Lever ) 73717e4c443SChuck Lever ); 73817e4c443SChuck Lever 73905eb06d8SChuck Lever TRACE_EVENT(xprtrdma_prepsend_failed, 74005eb06d8SChuck Lever TP_PROTO(const struct rpc_rqst *rqst, 74105eb06d8SChuck Lever int ret 74205eb06d8SChuck Lever ), 74305eb06d8SChuck Lever 74405eb06d8SChuck Lever TP_ARGS(rqst, ret), 74505eb06d8SChuck Lever 74605eb06d8SChuck Lever TP_STRUCT__entry( 74705eb06d8SChuck Lever __field(unsigned int, task_id) 74805eb06d8SChuck Lever __field(unsigned int, client_id) 74905eb06d8SChuck Lever __field(u32, xid) 75005eb06d8SChuck Lever __field(int, ret) 75105eb06d8SChuck Lever ), 75205eb06d8SChuck Lever 75305eb06d8SChuck Lever TP_fast_assign( 75405eb06d8SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 75505eb06d8SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 75605eb06d8SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 75705eb06d8SChuck Lever __entry->ret = ret; 75805eb06d8SChuck Lever ), 75905eb06d8SChuck Lever 76005eb06d8SChuck Lever TP_printk("task:%u@%u xid=0x%08x: ret=%d", 76105eb06d8SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 76205eb06d8SChuck Lever __entry->ret 76305eb06d8SChuck Lever ) 76405eb06d8SChuck Lever ); 76505eb06d8SChuck Lever 766ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_post_send, 767ab03eff5SChuck Lever TP_PROTO( 768bdb2ce82SChuck Lever const struct rpcrdma_req *req 769ab03eff5SChuck Lever ), 770ab03eff5SChuck Lever 771bdb2ce82SChuck Lever TP_ARGS(req), 772ab03eff5SChuck Lever 773ab03eff5SChuck Lever TP_STRUCT__entry( 774b2e7467fSChuck Lever __field(u32, cq_id) 775b2e7467fSChuck Lever __field(int, completion_id) 7760c77668dSChuck Lever __field(unsigned int, task_id) 7770c77668dSChuck Lever __field(unsigned int, client_id) 778ab03eff5SChuck Lever __field(int, num_sge) 779470443e0SChuck Lever __field(int, signaled) 780ab03eff5SChuck Lever ), 781ab03eff5SChuck Lever 782ab03eff5SChuck Lever TP_fast_assign( 7830c77668dSChuck Lever const struct rpc_rqst *rqst = &req->rl_slot; 784b2e7467fSChuck Lever const struct rpcrdma_sendctx *sc = req->rl_sendctx; 7850c77668dSChuck Lever 786b2e7467fSChuck Lever __entry->cq_id = sc->sc_cid.ci_queue_id; 787b2e7467fSChuck Lever __entry->completion_id = sc->sc_cid.ci_completion_id; 7880c77668dSChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 78910694ac9SChuck Lever __entry->client_id = rqst->rq_task->tk_client ? 79010694ac9SChuck Lever rqst->rq_task->tk_client->cl_clid : -1; 791dc15c3d5SChuck Lever __entry->num_sge = req->rl_wr.num_sge; 792dc15c3d5SChuck Lever __entry->signaled = req->rl_wr.send_flags & IB_SEND_SIGNALED; 793ab03eff5SChuck Lever ), 794ab03eff5SChuck Lever 795b2e7467fSChuck Lever TP_printk("task:%u@%u cq.id=%u cid=%d (%d SGE%s) %s", 7960c77668dSChuck Lever __entry->task_id, __entry->client_id, 797b2e7467fSChuck Lever __entry->cq_id, __entry->completion_id, 798b2e7467fSChuck Lever __entry->num_sge, (__entry->num_sge == 1 ? "" : "s"), 799bdb2ce82SChuck Lever (__entry->signaled ? "signaled" : "") 800ab03eff5SChuck Lever ) 801ab03eff5SChuck Lever ); 802ab03eff5SChuck Lever 803d9ae8134SChuck Lever TRACE_EVENT(xprtrdma_post_send_err, 804d9ae8134SChuck Lever TP_PROTO( 805d9ae8134SChuck Lever const struct rpcrdma_xprt *r_xprt, 806d9ae8134SChuck Lever const struct rpcrdma_req *req, 807d9ae8134SChuck Lever int rc 808d9ae8134SChuck Lever ), 809d9ae8134SChuck Lever 810d9ae8134SChuck Lever TP_ARGS(r_xprt, req, rc), 811d9ae8134SChuck Lever 812d9ae8134SChuck Lever TP_STRUCT__entry( 813d9ae8134SChuck Lever __field(u32, cq_id) 814d9ae8134SChuck Lever __field(unsigned int, task_id) 815d9ae8134SChuck Lever __field(unsigned int, client_id) 816d9ae8134SChuck Lever __field(int, rc) 817d9ae8134SChuck Lever ), 818d9ae8134SChuck Lever 819d9ae8134SChuck Lever TP_fast_assign( 820d9ae8134SChuck Lever const struct rpc_rqst *rqst = &req->rl_slot; 821d9ae8134SChuck Lever const struct rpcrdma_ep *ep = r_xprt->rx_ep; 822d9ae8134SChuck Lever 823d9ae8134SChuck Lever __entry->cq_id = ep ? ep->re_attr.recv_cq->res.id : 0; 824d9ae8134SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 825d9ae8134SChuck Lever __entry->client_id = rqst->rq_task->tk_client ? 826d9ae8134SChuck Lever rqst->rq_task->tk_client->cl_clid : -1; 827d9ae8134SChuck Lever __entry->rc = rc; 828d9ae8134SChuck Lever ), 829d9ae8134SChuck Lever 830d9ae8134SChuck Lever TP_printk("task:%u@%u cq.id=%u rc=%d", 831d9ae8134SChuck Lever __entry->task_id, __entry->client_id, 832d9ae8134SChuck Lever __entry->cq_id, __entry->rc 833d9ae8134SChuck Lever ) 834d9ae8134SChuck Lever ); 835d9ae8134SChuck Lever 836b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_post_recv, 837b4a7f91cSChuck Lever TP_PROTO( 8382dfdcd88SChuck Lever const struct rpcrdma_rep *rep 839b4a7f91cSChuck Lever ), 840b4a7f91cSChuck Lever 8412dfdcd88SChuck Lever TP_ARGS(rep), 842b4a7f91cSChuck Lever 843b4a7f91cSChuck Lever TP_STRUCT__entry( 844af5865d2SChuck Lever __field(u32, cq_id) 845af5865d2SChuck Lever __field(int, completion_id) 846b4a7f91cSChuck Lever ), 847b4a7f91cSChuck Lever 848b4a7f91cSChuck Lever TP_fast_assign( 849af5865d2SChuck Lever __entry->cq_id = rep->rr_cid.ci_queue_id; 850af5865d2SChuck Lever __entry->completion_id = rep->rr_cid.ci_completion_id; 851b4a7f91cSChuck Lever ), 852b4a7f91cSChuck Lever 853af5865d2SChuck Lever TP_printk("cq.id=%d cid=%d", 854af5865d2SChuck Lever __entry->cq_id, __entry->completion_id 855b4a7f91cSChuck Lever ) 856b4a7f91cSChuck Lever ); 857b4a7f91cSChuck Lever 8587c8d9e7cSChuck Lever TRACE_EVENT(xprtrdma_post_recvs, 8597c8d9e7cSChuck Lever TP_PROTO( 8607c8d9e7cSChuck Lever const struct rpcrdma_xprt *r_xprt, 861683f31c3SChuck Lever unsigned int count 8627c8d9e7cSChuck Lever ), 8637c8d9e7cSChuck Lever 864683f31c3SChuck Lever TP_ARGS(r_xprt, count), 8657c8d9e7cSChuck Lever 8667c8d9e7cSChuck Lever TP_STRUCT__entry( 86783189d15SChuck Lever __field(u32, cq_id) 8687c8d9e7cSChuck Lever __field(unsigned int, count) 8697c8d9e7cSChuck Lever __field(int, posted) 8707c8d9e7cSChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 8717c8d9e7cSChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 8727c8d9e7cSChuck Lever ), 8737c8d9e7cSChuck Lever 8747c8d9e7cSChuck Lever TP_fast_assign( 87583189d15SChuck Lever const struct rpcrdma_ep *ep = r_xprt->rx_ep; 87683189d15SChuck Lever 87783189d15SChuck Lever __entry->cq_id = ep->re_attr.recv_cq->res.id; 8787c8d9e7cSChuck Lever __entry->count = count; 87983189d15SChuck Lever __entry->posted = ep->re_receive_count; 8807c8d9e7cSChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 8817c8d9e7cSChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 8827c8d9e7cSChuck Lever ), 8837c8d9e7cSChuck Lever 884683f31c3SChuck Lever TP_printk("peer=[%s]:%s cq.id=%d %u new recvs, %d active", 88583189d15SChuck Lever __get_str(addr), __get_str(port), __entry->cq_id, 886683f31c3SChuck Lever __entry->count, __entry->posted 887683f31c3SChuck Lever ) 888683f31c3SChuck Lever ); 889683f31c3SChuck Lever 890683f31c3SChuck Lever TRACE_EVENT(xprtrdma_post_recvs_err, 891683f31c3SChuck Lever TP_PROTO( 892683f31c3SChuck Lever const struct rpcrdma_xprt *r_xprt, 893683f31c3SChuck Lever int status 894683f31c3SChuck Lever ), 895683f31c3SChuck Lever 896683f31c3SChuck Lever TP_ARGS(r_xprt, status), 897683f31c3SChuck Lever 898683f31c3SChuck Lever TP_STRUCT__entry( 899683f31c3SChuck Lever __field(u32, cq_id) 900683f31c3SChuck Lever __field(int, status) 901683f31c3SChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 902683f31c3SChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 903683f31c3SChuck Lever ), 904683f31c3SChuck Lever 905683f31c3SChuck Lever TP_fast_assign( 906683f31c3SChuck Lever const struct rpcrdma_ep *ep = r_xprt->rx_ep; 907683f31c3SChuck Lever 908683f31c3SChuck Lever __entry->cq_id = ep->re_attr.recv_cq->res.id; 909683f31c3SChuck Lever __entry->status = status; 910683f31c3SChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 911683f31c3SChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 912683f31c3SChuck Lever ), 913683f31c3SChuck Lever 914683f31c3SChuck Lever TP_printk("peer=[%s]:%s cq.id=%d rc=%d", 915683f31c3SChuck Lever __get_str(addr), __get_str(port), __entry->cq_id, 916683f31c3SChuck Lever __entry->status 917ab03eff5SChuck Lever ) 918ab03eff5SChuck Lever ); 919ab03eff5SChuck Lever 92036a55edfSChuck Lever TRACE_EVENT(xprtrdma_post_linv_err, 9214b93dab3SChuck Lever TP_PROTO( 9224b93dab3SChuck Lever const struct rpcrdma_req *req, 9234b93dab3SChuck Lever int status 9244b93dab3SChuck Lever ), 9254b93dab3SChuck Lever 9264b93dab3SChuck Lever TP_ARGS(req, status), 9274b93dab3SChuck Lever 9284b93dab3SChuck Lever TP_STRUCT__entry( 92936a55edfSChuck Lever __field(unsigned int, task_id) 93036a55edfSChuck Lever __field(unsigned int, client_id) 9314b93dab3SChuck Lever __field(int, status) 9324b93dab3SChuck Lever ), 9334b93dab3SChuck Lever 9344b93dab3SChuck Lever TP_fast_assign( 93536a55edfSChuck Lever const struct rpc_task *task = req->rl_slot.rq_task; 93636a55edfSChuck Lever 93736a55edfSChuck Lever __entry->task_id = task->tk_pid; 93836a55edfSChuck Lever __entry->client_id = task->tk_client->cl_clid; 9394b93dab3SChuck Lever __entry->status = status; 9404b93dab3SChuck Lever ), 9414b93dab3SChuck Lever 94236a55edfSChuck Lever TP_printk("task:%u@%u status=%d", 94336a55edfSChuck Lever __entry->task_id, __entry->client_id, __entry->status 9444b93dab3SChuck Lever ) 9454b93dab3SChuck Lever ); 9464b93dab3SChuck Lever 947ab03eff5SChuck Lever /** 948ab03eff5SChuck Lever ** Completion events 949ab03eff5SChuck Lever **/ 950ab03eff5SChuck Lever 951c30f259aSChuck Lever DEFINE_RECEIVE_COMPLETION_EVENT(xprtrdma_wc_receive); 952c30f259aSChuck Lever 953b2e7467fSChuck Lever DEFINE_COMPLETION_EVENT(xprtrdma_wc_send); 9546b147ea7SChuck Lever DEFINE_MR_COMPLETION_EVENT(xprtrdma_wc_fastreg); 9556b147ea7SChuck Lever DEFINE_MR_COMPLETION_EVENT(xprtrdma_wc_li); 9566b147ea7SChuck Lever DEFINE_MR_COMPLETION_EVENT(xprtrdma_wc_li_wake); 9576b147ea7SChuck Lever DEFINE_MR_COMPLETION_EVENT(xprtrdma_wc_li_done); 9582937fedeSChuck Lever 95953b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_alloc, 96053b2c1cbSChuck Lever TP_PROTO( 96153b2c1cbSChuck Lever const struct rpcrdma_mr *mr, 96253b2c1cbSChuck Lever int rc 96353b2c1cbSChuck Lever ), 96453b2c1cbSChuck Lever 96553b2c1cbSChuck Lever TP_ARGS(mr, rc), 96653b2c1cbSChuck Lever 96753b2c1cbSChuck Lever TP_STRUCT__entry( 96862a89501SChuck Lever __field(u32, mr_id) 96953b2c1cbSChuck Lever __field(int, rc) 97053b2c1cbSChuck Lever ), 97153b2c1cbSChuck Lever 97253b2c1cbSChuck Lever TP_fast_assign( 97313bcf7e3SChuck Lever __entry->mr_id = mr->mr_ibmr->res.id; 97453b2c1cbSChuck Lever __entry->rc = rc; 97553b2c1cbSChuck Lever ), 97653b2c1cbSChuck Lever 97762a89501SChuck Lever TP_printk("mr.id=%u: rc=%d", 97862a89501SChuck Lever __entry->mr_id, __entry->rc 97953b2c1cbSChuck Lever ) 98053b2c1cbSChuck Lever ); 98153b2c1cbSChuck Lever 98253b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_dereg, 98353b2c1cbSChuck Lever TP_PROTO( 98453b2c1cbSChuck Lever const struct rpcrdma_mr *mr, 98553b2c1cbSChuck Lever int rc 98653b2c1cbSChuck Lever ), 98753b2c1cbSChuck Lever 98853b2c1cbSChuck Lever TP_ARGS(mr, rc), 98953b2c1cbSChuck Lever 99053b2c1cbSChuck Lever TP_STRUCT__entry( 99162a89501SChuck Lever __field(u32, mr_id) 99262a89501SChuck Lever __field(int, nents) 99353b2c1cbSChuck Lever __field(u32, handle) 99453b2c1cbSChuck Lever __field(u32, length) 99553b2c1cbSChuck Lever __field(u64, offset) 99653b2c1cbSChuck Lever __field(u32, dir) 99753b2c1cbSChuck Lever __field(int, rc) 99853b2c1cbSChuck Lever ), 99953b2c1cbSChuck Lever 100053b2c1cbSChuck Lever TP_fast_assign( 100113bcf7e3SChuck Lever __entry->mr_id = mr->mr_ibmr->res.id; 100262a89501SChuck Lever __entry->nents = mr->mr_nents; 100353b2c1cbSChuck Lever __entry->handle = mr->mr_handle; 100453b2c1cbSChuck Lever __entry->length = mr->mr_length; 100553b2c1cbSChuck Lever __entry->offset = mr->mr_offset; 100653b2c1cbSChuck Lever __entry->dir = mr->mr_dir; 100753b2c1cbSChuck Lever __entry->rc = rc; 100853b2c1cbSChuck Lever ), 100953b2c1cbSChuck Lever 101062a89501SChuck Lever TP_printk("mr.id=%u nents=%d %u@0x%016llx:0x%08x (%s): rc=%d", 101162a89501SChuck Lever __entry->mr_id, __entry->nents, __entry->length, 101253b2c1cbSChuck Lever (unsigned long long)__entry->offset, __entry->handle, 101353b2c1cbSChuck Lever xprtrdma_show_direction(__entry->dir), 101453b2c1cbSChuck Lever __entry->rc 101553b2c1cbSChuck Lever ) 101653b2c1cbSChuck Lever ); 101753b2c1cbSChuck Lever 101853b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_sgerr, 101953b2c1cbSChuck Lever TP_PROTO( 102053b2c1cbSChuck Lever const struct rpcrdma_mr *mr, 102153b2c1cbSChuck Lever int sg_nents 102253b2c1cbSChuck Lever ), 102353b2c1cbSChuck Lever 102453b2c1cbSChuck Lever TP_ARGS(mr, sg_nents), 102553b2c1cbSChuck Lever 102653b2c1cbSChuck Lever TP_STRUCT__entry( 102762a89501SChuck Lever __field(u32, mr_id) 102853b2c1cbSChuck Lever __field(u64, addr) 102953b2c1cbSChuck Lever __field(u32, dir) 103053b2c1cbSChuck Lever __field(int, nents) 103153b2c1cbSChuck Lever ), 103253b2c1cbSChuck Lever 103353b2c1cbSChuck Lever TP_fast_assign( 103413bcf7e3SChuck Lever __entry->mr_id = mr->mr_ibmr->res.id; 103553b2c1cbSChuck Lever __entry->addr = mr->mr_sg->dma_address; 103653b2c1cbSChuck Lever __entry->dir = mr->mr_dir; 103753b2c1cbSChuck Lever __entry->nents = sg_nents; 103853b2c1cbSChuck Lever ), 103953b2c1cbSChuck Lever 104062a89501SChuck Lever TP_printk("mr.id=%u DMA addr=0x%llx (%s) sg_nents=%d", 104162a89501SChuck Lever __entry->mr_id, __entry->addr, 104253b2c1cbSChuck Lever xprtrdma_show_direction(__entry->dir), 104353b2c1cbSChuck Lever __entry->nents 104453b2c1cbSChuck Lever ) 104553b2c1cbSChuck Lever ); 104653b2c1cbSChuck Lever 104753b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_maperr, 104853b2c1cbSChuck Lever TP_PROTO( 104953b2c1cbSChuck Lever const struct rpcrdma_mr *mr, 105053b2c1cbSChuck Lever int num_mapped 105153b2c1cbSChuck Lever ), 105253b2c1cbSChuck Lever 105353b2c1cbSChuck Lever TP_ARGS(mr, num_mapped), 105453b2c1cbSChuck Lever 105553b2c1cbSChuck Lever TP_STRUCT__entry( 105662a89501SChuck Lever __field(u32, mr_id) 105753b2c1cbSChuck Lever __field(u64, addr) 105853b2c1cbSChuck Lever __field(u32, dir) 105953b2c1cbSChuck Lever __field(int, num_mapped) 106053b2c1cbSChuck Lever __field(int, nents) 106153b2c1cbSChuck Lever ), 106253b2c1cbSChuck Lever 106353b2c1cbSChuck Lever TP_fast_assign( 106413bcf7e3SChuck Lever __entry->mr_id = mr->mr_ibmr->res.id; 106553b2c1cbSChuck Lever __entry->addr = mr->mr_sg->dma_address; 106653b2c1cbSChuck Lever __entry->dir = mr->mr_dir; 106753b2c1cbSChuck Lever __entry->num_mapped = num_mapped; 106853b2c1cbSChuck Lever __entry->nents = mr->mr_nents; 106953b2c1cbSChuck Lever ), 107053b2c1cbSChuck Lever 107162a89501SChuck Lever TP_printk("mr.id=%u DMA addr=0x%llx (%s) nents=%d of %d", 107262a89501SChuck Lever __entry->mr_id, __entry->addr, 107353b2c1cbSChuck Lever xprtrdma_show_direction(__entry->dir), 107453b2c1cbSChuck Lever __entry->num_mapped, __entry->nents 107553b2c1cbSChuck Lever ) 107653b2c1cbSChuck Lever ); 107753b2c1cbSChuck Lever 10784ddd0fc3SChuck Lever DEFINE_MR_EVENT(fastreg); 1079d379eaa8SChuck Lever DEFINE_MR_EVENT(localinv); 10804ddd0fc3SChuck Lever DEFINE_MR_EVENT(reminv); 1081d379eaa8SChuck Lever DEFINE_MR_EVENT(map); 10827703db97SChuck Lever 10837703db97SChuck Lever DEFINE_ANON_MR_EVENT(unmap); 108458f10ad4SChuck Lever 108553b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_dma_maperr, 108653b2c1cbSChuck Lever TP_PROTO( 108753b2c1cbSChuck Lever u64 addr 108853b2c1cbSChuck Lever ), 108953b2c1cbSChuck Lever 109053b2c1cbSChuck Lever TP_ARGS(addr), 109153b2c1cbSChuck Lever 109253b2c1cbSChuck Lever TP_STRUCT__entry( 109353b2c1cbSChuck Lever __field(u64, addr) 109453b2c1cbSChuck Lever ), 109553b2c1cbSChuck Lever 109653b2c1cbSChuck Lever TP_fast_assign( 109753b2c1cbSChuck Lever __entry->addr = addr; 109853b2c1cbSChuck Lever ), 109953b2c1cbSChuck Lever 110053b2c1cbSChuck Lever TP_printk("dma addr=0x%llx\n", __entry->addr) 110153b2c1cbSChuck Lever ); 110253b2c1cbSChuck Lever 1103b4a7f91cSChuck Lever /** 1104b4a7f91cSChuck Lever ** Reply events 1105b4a7f91cSChuck Lever **/ 1106b4a7f91cSChuck Lever 1107b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_reply, 1108b4a7f91cSChuck Lever TP_PROTO( 1109b4a7f91cSChuck Lever const struct rpc_task *task, 1110b4a7f91cSChuck Lever const struct rpcrdma_rep *rep, 1111b4a7f91cSChuck Lever unsigned int credits 1112b4a7f91cSChuck Lever ), 1113b4a7f91cSChuck Lever 111403ffd924SChuck Lever TP_ARGS(task, rep, credits), 1115b4a7f91cSChuck Lever 1116b4a7f91cSChuck Lever TP_STRUCT__entry( 1117b4a7f91cSChuck Lever __field(unsigned int, task_id) 1118b4a7f91cSChuck Lever __field(unsigned int, client_id) 1119b4a7f91cSChuck Lever __field(u32, xid) 1120b4a7f91cSChuck Lever __field(unsigned int, credits) 1121b4a7f91cSChuck Lever ), 1122b4a7f91cSChuck Lever 1123b4a7f91cSChuck Lever TP_fast_assign( 1124b4a7f91cSChuck Lever __entry->task_id = task->tk_pid; 1125b4a7f91cSChuck Lever __entry->client_id = task->tk_client->cl_clid; 1126b4a7f91cSChuck Lever __entry->xid = be32_to_cpu(rep->rr_xid); 1127b4a7f91cSChuck Lever __entry->credits = credits; 1128b4a7f91cSChuck Lever ), 1129b4a7f91cSChuck Lever 113003ffd924SChuck Lever TP_printk("task:%u@%u xid=0x%08x credits=%u", 1131b4a7f91cSChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 113203ffd924SChuck Lever __entry->credits 1133b4a7f91cSChuck Lever ) 1134b4a7f91cSChuck Lever ); 1135b4a7f91cSChuck Lever 11363a9568feSChuck Lever DEFINE_REPLY_EVENT(vers); 11373a9568feSChuck Lever DEFINE_REPLY_EVENT(rqst); 11383a9568feSChuck Lever DEFINE_REPLY_EVENT(short); 11393a9568feSChuck Lever DEFINE_REPLY_EVENT(hdr); 1140b4a7f91cSChuck Lever 11413821e232SChuck Lever TRACE_EVENT(xprtrdma_err_vers, 1142e48f083eSChuck Lever TP_PROTO( 11433821e232SChuck Lever const struct rpc_rqst *rqst, 11443821e232SChuck Lever __be32 *min, 11453821e232SChuck Lever __be32 *max 1146e48f083eSChuck Lever ), 1147e48f083eSChuck Lever 11483821e232SChuck Lever TP_ARGS(rqst, min, max), 1149e48f083eSChuck Lever 1150e48f083eSChuck Lever TP_STRUCT__entry( 1151e48f083eSChuck Lever __field(unsigned int, task_id) 1152e48f083eSChuck Lever __field(unsigned int, client_id) 11533821e232SChuck Lever __field(u32, xid) 11543821e232SChuck Lever __field(u32, min) 11553821e232SChuck Lever __field(u32, max) 11563821e232SChuck Lever ), 11573821e232SChuck Lever 11583821e232SChuck Lever TP_fast_assign( 11593821e232SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 11603821e232SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 11613821e232SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 11623821e232SChuck Lever __entry->min = be32_to_cpup(min); 11633821e232SChuck Lever __entry->max = be32_to_cpup(max); 11643821e232SChuck Lever ), 11653821e232SChuck Lever 11663821e232SChuck Lever TP_printk("task:%u@%u xid=0x%08x versions=[%u, %u]", 11673821e232SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 11683821e232SChuck Lever __entry->min, __entry->max 11693821e232SChuck Lever ) 11703821e232SChuck Lever ); 11713821e232SChuck Lever 11723821e232SChuck Lever TRACE_EVENT(xprtrdma_err_chunk, 11733821e232SChuck Lever TP_PROTO( 11743821e232SChuck Lever const struct rpc_rqst *rqst 11753821e232SChuck Lever ), 11763821e232SChuck Lever 11773821e232SChuck Lever TP_ARGS(rqst), 11783821e232SChuck Lever 11793821e232SChuck Lever TP_STRUCT__entry( 11803821e232SChuck Lever __field(unsigned int, task_id) 11813821e232SChuck Lever __field(unsigned int, client_id) 1182e48f083eSChuck Lever __field(u32, xid) 1183e48f083eSChuck Lever ), 1184e48f083eSChuck Lever 1185e48f083eSChuck Lever TP_fast_assign( 11863821e232SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 11873821e232SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 11883821e232SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 1189e48f083eSChuck Lever ), 1190e48f083eSChuck Lever 11913821e232SChuck Lever TP_printk("task:%u@%u xid=0x%08x", 11923821e232SChuck Lever __entry->task_id, __entry->client_id, __entry->xid 1193e48f083eSChuck Lever ) 1194e48f083eSChuck Lever ); 1195e48f083eSChuck Lever 11963821e232SChuck Lever TRACE_EVENT(xprtrdma_err_unrecognized, 11973821e232SChuck Lever TP_PROTO( 11983821e232SChuck Lever const struct rpc_rqst *rqst, 11993821e232SChuck Lever __be32 *procedure 12003821e232SChuck Lever ), 12013821e232SChuck Lever 12023821e232SChuck Lever TP_ARGS(rqst, procedure), 12033821e232SChuck Lever 12043821e232SChuck Lever TP_STRUCT__entry( 12053821e232SChuck Lever __field(unsigned int, task_id) 12063821e232SChuck Lever __field(unsigned int, client_id) 12073821e232SChuck Lever __field(u32, xid) 12083821e232SChuck Lever __field(u32, procedure) 12093821e232SChuck Lever ), 12103821e232SChuck Lever 12113821e232SChuck Lever TP_fast_assign( 12123821e232SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 12133821e232SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 12143821e232SChuck Lever __entry->procedure = be32_to_cpup(procedure); 12153821e232SChuck Lever ), 12163821e232SChuck Lever 12173821e232SChuck Lever TP_printk("task:%u@%u xid=0x%08x procedure=%u", 12183821e232SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 12193821e232SChuck Lever __entry->procedure 12203821e232SChuck Lever ) 12213821e232SChuck Lever ); 1222e48f083eSChuck Lever 1223e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_fixup, 1224e11b7c96SChuck Lever TP_PROTO( 1225e11b7c96SChuck Lever const struct rpc_rqst *rqst, 1226d4957f01SChuck Lever unsigned long fixup 1227e11b7c96SChuck Lever ), 1228e11b7c96SChuck Lever 1229d4957f01SChuck Lever TP_ARGS(rqst, fixup), 1230e11b7c96SChuck Lever 1231e11b7c96SChuck Lever TP_STRUCT__entry( 1232e11b7c96SChuck Lever __field(unsigned int, task_id) 1233e11b7c96SChuck Lever __field(unsigned int, client_id) 1234d4957f01SChuck Lever __field(unsigned long, fixup) 1235d4957f01SChuck Lever __field(size_t, headlen) 1236d4957f01SChuck Lever __field(unsigned int, pagelen) 1237d4957f01SChuck Lever __field(size_t, taillen) 1238e11b7c96SChuck Lever ), 1239e11b7c96SChuck Lever 1240e11b7c96SChuck Lever TP_fast_assign( 1241e11b7c96SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 1242e11b7c96SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 1243d4957f01SChuck Lever __entry->fixup = fixup; 1244d4957f01SChuck Lever __entry->headlen = rqst->rq_rcv_buf.head[0].iov_len; 1245d4957f01SChuck Lever __entry->pagelen = rqst->rq_rcv_buf.page_len; 1246d4957f01SChuck Lever __entry->taillen = rqst->rq_rcv_buf.tail[0].iov_len; 1247e11b7c96SChuck Lever ), 1248e11b7c96SChuck Lever 1249d4957f01SChuck Lever TP_printk("task:%u@%u fixup=%lu xdr=%zu/%u/%zu", 1250d4957f01SChuck Lever __entry->task_id, __entry->client_id, __entry->fixup, 1251d4957f01SChuck Lever __entry->headlen, __entry->pagelen, __entry->taillen 1252e11b7c96SChuck Lever ) 1253e11b7c96SChuck Lever ); 1254e11b7c96SChuck Lever 1255e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_decode_seg, 1256e11b7c96SChuck Lever TP_PROTO( 1257e11b7c96SChuck Lever u32 handle, 1258e11b7c96SChuck Lever u32 length, 1259e11b7c96SChuck Lever u64 offset 1260e11b7c96SChuck Lever ), 1261e11b7c96SChuck Lever 1262e11b7c96SChuck Lever TP_ARGS(handle, length, offset), 1263e11b7c96SChuck Lever 1264e11b7c96SChuck Lever TP_STRUCT__entry( 1265e11b7c96SChuck Lever __field(u32, handle) 1266e11b7c96SChuck Lever __field(u32, length) 1267e11b7c96SChuck Lever __field(u64, offset) 1268e11b7c96SChuck Lever ), 1269e11b7c96SChuck Lever 1270e11b7c96SChuck Lever TP_fast_assign( 1271e11b7c96SChuck Lever __entry->handle = handle; 1272e11b7c96SChuck Lever __entry->length = length; 1273e11b7c96SChuck Lever __entry->offset = offset; 1274e11b7c96SChuck Lever ), 1275e11b7c96SChuck Lever 1276e11b7c96SChuck Lever TP_printk("%u@0x%016llx:0x%08x", 1277e11b7c96SChuck Lever __entry->length, (unsigned long long)__entry->offset, 1278e11b7c96SChuck Lever __entry->handle 1279e11b7c96SChuck Lever ) 1280e11b7c96SChuck Lever ); 1281e11b7c96SChuck Lever 12828e24e191SChuck Lever TRACE_EVENT(xprtrdma_mrs_zap, 12838e24e191SChuck Lever TP_PROTO( 12848e24e191SChuck Lever const struct rpc_task *task 12858e24e191SChuck Lever ), 12868e24e191SChuck Lever 12878e24e191SChuck Lever TP_ARGS(task), 12888e24e191SChuck Lever 12898e24e191SChuck Lever TP_STRUCT__entry( 12908e24e191SChuck Lever __field(unsigned int, task_id) 12918e24e191SChuck Lever __field(unsigned int, client_id) 12928e24e191SChuck Lever ), 12938e24e191SChuck Lever 12948e24e191SChuck Lever TP_fast_assign( 12958e24e191SChuck Lever __entry->task_id = task->tk_pid; 12968e24e191SChuck Lever __entry->client_id = task->tk_client->cl_clid; 12978e24e191SChuck Lever ), 12988e24e191SChuck Lever 12998e24e191SChuck Lever TP_printk("task:%u@%u", 13008e24e191SChuck Lever __entry->task_id, __entry->client_id 13018e24e191SChuck Lever ) 13028e24e191SChuck Lever ); 13038e24e191SChuck Lever 1304fc1eb807SChuck Lever /** 1305fc1eb807SChuck Lever ** Callback events 1306fc1eb807SChuck Lever **/ 1307fc1eb807SChuck Lever 1308fc1eb807SChuck Lever TRACE_EVENT(xprtrdma_cb_setup, 1309fc1eb807SChuck Lever TP_PROTO( 1310fc1eb807SChuck Lever const struct rpcrdma_xprt *r_xprt, 1311fc1eb807SChuck Lever unsigned int reqs 1312fc1eb807SChuck Lever ), 1313fc1eb807SChuck Lever 1314fc1eb807SChuck Lever TP_ARGS(r_xprt, reqs), 1315fc1eb807SChuck Lever 1316fc1eb807SChuck Lever TP_STRUCT__entry( 1317fc1eb807SChuck Lever __field(unsigned int, reqs) 1318fc1eb807SChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 1319fc1eb807SChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 1320fc1eb807SChuck Lever ), 1321fc1eb807SChuck Lever 1322fc1eb807SChuck Lever TP_fast_assign( 1323fc1eb807SChuck Lever __entry->reqs = reqs; 1324fc1eb807SChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 1325fc1eb807SChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 1326fc1eb807SChuck Lever ), 1327fc1eb807SChuck Lever 132883189d15SChuck Lever TP_printk("peer=[%s]:%s %u reqs", 132983189d15SChuck Lever __get_str(addr), __get_str(port), __entry->reqs 1330fc1eb807SChuck Lever ) 1331fc1eb807SChuck Lever ); 1332fc1eb807SChuck Lever 1333d11e9346SChuck Lever DEFINE_CALLBACK_EVENT(call); 1334d11e9346SChuck Lever DEFINE_CALLBACK_EVENT(reply); 133507e10308SChuck Lever 133698895edbSChuck Lever /** 133798895edbSChuck Lever ** Server-side RPC/RDMA events 133898895edbSChuck Lever **/ 133998895edbSChuck Lever 1340e979a173SChuck Lever DECLARE_EVENT_CLASS(svcrdma_accept_class, 1341e979a173SChuck Lever TP_PROTO( 1342e979a173SChuck Lever const struct svcxprt_rdma *rdma, 1343e979a173SChuck Lever long status 1344e979a173SChuck Lever ), 1345e979a173SChuck Lever 1346e979a173SChuck Lever TP_ARGS(rdma, status), 1347e979a173SChuck Lever 1348e979a173SChuck Lever TP_STRUCT__entry( 1349e979a173SChuck Lever __field(long, status) 1350e979a173SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1351e979a173SChuck Lever ), 1352e979a173SChuck Lever 1353e979a173SChuck Lever TP_fast_assign( 1354e979a173SChuck Lever __entry->status = status; 1355e979a173SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1356e979a173SChuck Lever ), 1357e979a173SChuck Lever 1358e979a173SChuck Lever TP_printk("addr=%s status=%ld", 1359e979a173SChuck Lever __get_str(addr), __entry->status 1360e979a173SChuck Lever ) 1361e979a173SChuck Lever ); 1362e979a173SChuck Lever 1363e979a173SChuck Lever #define DEFINE_ACCEPT_EVENT(name) \ 1364e979a173SChuck Lever DEFINE_EVENT(svcrdma_accept_class, svcrdma_##name##_err, \ 1365e979a173SChuck Lever TP_PROTO( \ 1366e979a173SChuck Lever const struct svcxprt_rdma *rdma, \ 1367e979a173SChuck Lever long status \ 1368e979a173SChuck Lever ), \ 1369e979a173SChuck Lever TP_ARGS(rdma, status)) 1370e979a173SChuck Lever 1371e979a173SChuck Lever DEFINE_ACCEPT_EVENT(pd); 1372e979a173SChuck Lever DEFINE_ACCEPT_EVENT(qp); 1373e979a173SChuck Lever DEFINE_ACCEPT_EVENT(fabric); 1374e979a173SChuck Lever DEFINE_ACCEPT_EVENT(initdepth); 1375e979a173SChuck Lever DEFINE_ACCEPT_EVENT(accept); 1376e979a173SChuck Lever 137798895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_MSG); 137898895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_NOMSG); 137998895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_MSGP); 138098895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_DONE); 138198895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_ERROR); 138298895edbSChuck Lever 138398895edbSChuck Lever #define show_rpcrdma_proc(x) \ 138498895edbSChuck Lever __print_symbolic(x, \ 138598895edbSChuck Lever { RDMA_MSG, "RDMA_MSG" }, \ 138698895edbSChuck Lever { RDMA_NOMSG, "RDMA_NOMSG" }, \ 138798895edbSChuck Lever { RDMA_MSGP, "RDMA_MSGP" }, \ 138898895edbSChuck Lever { RDMA_DONE, "RDMA_DONE" }, \ 138998895edbSChuck Lever { RDMA_ERROR, "RDMA_ERROR" }) 139098895edbSChuck Lever 139198895edbSChuck Lever TRACE_EVENT(svcrdma_decode_rqst, 139298895edbSChuck Lever TP_PROTO( 1393007140eeSChuck Lever const struct svc_rdma_recv_ctxt *ctxt, 139498895edbSChuck Lever __be32 *p, 139598895edbSChuck Lever unsigned int hdrlen 139698895edbSChuck Lever ), 139798895edbSChuck Lever 1398007140eeSChuck Lever TP_ARGS(ctxt, p, hdrlen), 139998895edbSChuck Lever 140098895edbSChuck Lever TP_STRUCT__entry( 1401007140eeSChuck Lever __field(u32, cq_id) 1402007140eeSChuck Lever __field(int, completion_id) 140398895edbSChuck Lever __field(u32, xid) 140498895edbSChuck Lever __field(u32, vers) 140598895edbSChuck Lever __field(u32, proc) 140698895edbSChuck Lever __field(u32, credits) 140798895edbSChuck Lever __field(unsigned int, hdrlen) 140898895edbSChuck Lever ), 140998895edbSChuck Lever 141098895edbSChuck Lever TP_fast_assign( 1411007140eeSChuck Lever __entry->cq_id = ctxt->rc_cid.ci_queue_id; 1412007140eeSChuck Lever __entry->completion_id = ctxt->rc_cid.ci_completion_id; 141398895edbSChuck Lever __entry->xid = be32_to_cpup(p++); 141498895edbSChuck Lever __entry->vers = be32_to_cpup(p++); 141598895edbSChuck Lever __entry->credits = be32_to_cpup(p++); 141698895edbSChuck Lever __entry->proc = be32_to_cpup(p); 141798895edbSChuck Lever __entry->hdrlen = hdrlen; 141898895edbSChuck Lever ), 141998895edbSChuck Lever 1420007140eeSChuck Lever TP_printk("cq.id=%u cid=%d xid=0x%08x vers=%u credits=%u proc=%s hdrlen=%u", 1421007140eeSChuck Lever __entry->cq_id, __entry->completion_id, 142298895edbSChuck Lever __entry->xid, __entry->vers, __entry->credits, 142398895edbSChuck Lever show_rpcrdma_proc(__entry->proc), __entry->hdrlen) 142498895edbSChuck Lever ); 142598895edbSChuck Lever 142627ce6294SChuck Lever TRACE_EVENT(svcrdma_decode_short_err, 142798895edbSChuck Lever TP_PROTO( 1428007140eeSChuck Lever const struct svc_rdma_recv_ctxt *ctxt, 142998895edbSChuck Lever unsigned int hdrlen 143098895edbSChuck Lever ), 143198895edbSChuck Lever 1432007140eeSChuck Lever TP_ARGS(ctxt, hdrlen), 143398895edbSChuck Lever 143498895edbSChuck Lever TP_STRUCT__entry( 1435007140eeSChuck Lever __field(u32, cq_id) 1436007140eeSChuck Lever __field(int, completion_id) 143798895edbSChuck Lever __field(unsigned int, hdrlen) 143898895edbSChuck Lever ), 143998895edbSChuck Lever 144098895edbSChuck Lever TP_fast_assign( 1441007140eeSChuck Lever __entry->cq_id = ctxt->rc_cid.ci_queue_id; 1442007140eeSChuck Lever __entry->completion_id = ctxt->rc_cid.ci_completion_id; 144398895edbSChuck Lever __entry->hdrlen = hdrlen; 144498895edbSChuck Lever ), 144598895edbSChuck Lever 1446007140eeSChuck Lever TP_printk("cq.id=%u cid=%d hdrlen=%u", 1447007140eeSChuck Lever __entry->cq_id, __entry->completion_id, 1448007140eeSChuck Lever __entry->hdrlen) 144998895edbSChuck Lever ); 145098895edbSChuck Lever 145198895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_badreq_event, 145298895edbSChuck Lever TP_PROTO( 1453007140eeSChuck Lever const struct svc_rdma_recv_ctxt *ctxt, 145498895edbSChuck Lever __be32 *p 145598895edbSChuck Lever ), 145698895edbSChuck Lever 1457007140eeSChuck Lever TP_ARGS(ctxt, p), 145898895edbSChuck Lever 145998895edbSChuck Lever TP_STRUCT__entry( 1460007140eeSChuck Lever __field(u32, cq_id) 1461007140eeSChuck Lever __field(int, completion_id) 146298895edbSChuck Lever __field(u32, xid) 146398895edbSChuck Lever __field(u32, vers) 146498895edbSChuck Lever __field(u32, proc) 146598895edbSChuck Lever __field(u32, credits) 146698895edbSChuck Lever ), 146798895edbSChuck Lever 146898895edbSChuck Lever TP_fast_assign( 1469007140eeSChuck Lever __entry->cq_id = ctxt->rc_cid.ci_queue_id; 1470007140eeSChuck Lever __entry->completion_id = ctxt->rc_cid.ci_completion_id; 147198895edbSChuck Lever __entry->xid = be32_to_cpup(p++); 147298895edbSChuck Lever __entry->vers = be32_to_cpup(p++); 147398895edbSChuck Lever __entry->credits = be32_to_cpup(p++); 147498895edbSChuck Lever __entry->proc = be32_to_cpup(p); 147598895edbSChuck Lever ), 147698895edbSChuck Lever 1477007140eeSChuck Lever TP_printk("cq.id=%u cid=%d xid=0x%08x vers=%u credits=%u proc=%u", 1478007140eeSChuck Lever __entry->cq_id, __entry->completion_id, 147998895edbSChuck Lever __entry->xid, __entry->vers, __entry->credits, __entry->proc) 148098895edbSChuck Lever ); 148198895edbSChuck Lever 148298895edbSChuck Lever #define DEFINE_BADREQ_EVENT(name) \ 148327ce6294SChuck Lever DEFINE_EVENT(svcrdma_badreq_event, \ 148427ce6294SChuck Lever svcrdma_decode_##name##_err, \ 148598895edbSChuck Lever TP_PROTO( \ 1486007140eeSChuck Lever const struct svc_rdma_recv_ctxt *ctxt, \ 148798895edbSChuck Lever __be32 *p \ 148898895edbSChuck Lever ), \ 1489007140eeSChuck Lever TP_ARGS(ctxt, p)) 149098895edbSChuck Lever 149198895edbSChuck Lever DEFINE_BADREQ_EVENT(badvers); 149298895edbSChuck Lever DEFINE_BADREQ_EVENT(drop); 149398895edbSChuck Lever DEFINE_BADREQ_EVENT(badproc); 149498895edbSChuck Lever DEFINE_BADREQ_EVENT(parse); 149598895edbSChuck Lever 14966911f3e1SChuck Lever TRACE_EVENT(svcrdma_encode_wseg, 14976911f3e1SChuck Lever TP_PROTO( 14986911f3e1SChuck Lever const struct svc_rdma_send_ctxt *ctxt, 14996911f3e1SChuck Lever u32 segno, 15006911f3e1SChuck Lever u32 handle, 15016911f3e1SChuck Lever u32 length, 15026911f3e1SChuck Lever u64 offset 15036911f3e1SChuck Lever ), 15046911f3e1SChuck Lever 15056911f3e1SChuck Lever TP_ARGS(ctxt, segno, handle, length, offset), 15066911f3e1SChuck Lever 15076911f3e1SChuck Lever TP_STRUCT__entry( 15086911f3e1SChuck Lever __field(u32, cq_id) 15096911f3e1SChuck Lever __field(int, completion_id) 15106911f3e1SChuck Lever __field(u32, segno) 15116911f3e1SChuck Lever __field(u32, handle) 15126911f3e1SChuck Lever __field(u32, length) 15136911f3e1SChuck Lever __field(u64, offset) 15146911f3e1SChuck Lever ), 15156911f3e1SChuck Lever 15166911f3e1SChuck Lever TP_fast_assign( 15176911f3e1SChuck Lever __entry->cq_id = ctxt->sc_cid.ci_queue_id; 15186911f3e1SChuck Lever __entry->completion_id = ctxt->sc_cid.ci_completion_id; 15196911f3e1SChuck Lever __entry->segno = segno; 15206911f3e1SChuck Lever __entry->handle = handle; 15216911f3e1SChuck Lever __entry->length = length; 15226911f3e1SChuck Lever __entry->offset = offset; 15236911f3e1SChuck Lever ), 15246911f3e1SChuck Lever 15256911f3e1SChuck Lever TP_printk("cq_id=%u cid=%d segno=%u %u@0x%016llx:0x%08x", 15266911f3e1SChuck Lever __entry->cq_id, __entry->completion_id, 15276911f3e1SChuck Lever __entry->segno, __entry->length, 15286911f3e1SChuck Lever (unsigned long long)__entry->offset, __entry->handle 15296911f3e1SChuck Lever ) 15306911f3e1SChuck Lever ); 15316911f3e1SChuck Lever 153278147ca8SChuck Lever TRACE_EVENT(svcrdma_decode_rseg, 153378147ca8SChuck Lever TP_PROTO( 153478147ca8SChuck Lever const struct rpc_rdma_cid *cid, 153578147ca8SChuck Lever const struct svc_rdma_chunk *chunk, 153678147ca8SChuck Lever const struct svc_rdma_segment *segment 153778147ca8SChuck Lever ), 153878147ca8SChuck Lever 153978147ca8SChuck Lever TP_ARGS(cid, chunk, segment), 154078147ca8SChuck Lever 154178147ca8SChuck Lever TP_STRUCT__entry( 154278147ca8SChuck Lever __field(u32, cq_id) 154378147ca8SChuck Lever __field(int, completion_id) 154478147ca8SChuck Lever __field(u32, segno) 154578147ca8SChuck Lever __field(u32, position) 154678147ca8SChuck Lever __field(u32, handle) 154778147ca8SChuck Lever __field(u32, length) 154878147ca8SChuck Lever __field(u64, offset) 154978147ca8SChuck Lever ), 155078147ca8SChuck Lever 155178147ca8SChuck Lever TP_fast_assign( 155278147ca8SChuck Lever __entry->cq_id = cid->ci_queue_id; 155378147ca8SChuck Lever __entry->completion_id = cid->ci_completion_id; 155478147ca8SChuck Lever __entry->segno = chunk->ch_segcount; 155578147ca8SChuck Lever __entry->position = chunk->ch_position; 155678147ca8SChuck Lever __entry->handle = segment->rs_handle; 155778147ca8SChuck Lever __entry->length = segment->rs_length; 155878147ca8SChuck Lever __entry->offset = segment->rs_offset; 155978147ca8SChuck Lever ), 156078147ca8SChuck Lever 156178147ca8SChuck Lever TP_printk("cq_id=%u cid=%d segno=%u position=%u %u@0x%016llx:0x%08x", 156278147ca8SChuck Lever __entry->cq_id, __entry->completion_id, 156378147ca8SChuck Lever __entry->segno, __entry->position, __entry->length, 156478147ca8SChuck Lever (unsigned long long)__entry->offset, __entry->handle 156578147ca8SChuck Lever ) 156678147ca8SChuck Lever ); 156778147ca8SChuck Lever 156878147ca8SChuck Lever TRACE_EVENT(svcrdma_decode_wseg, 156978147ca8SChuck Lever TP_PROTO( 157078147ca8SChuck Lever const struct rpc_rdma_cid *cid, 157178147ca8SChuck Lever const struct svc_rdma_chunk *chunk, 157278147ca8SChuck Lever u32 segno 157378147ca8SChuck Lever ), 157478147ca8SChuck Lever 157578147ca8SChuck Lever TP_ARGS(cid, chunk, segno), 157678147ca8SChuck Lever 157778147ca8SChuck Lever TP_STRUCT__entry( 157878147ca8SChuck Lever __field(u32, cq_id) 157978147ca8SChuck Lever __field(int, completion_id) 158078147ca8SChuck Lever __field(u32, segno) 158178147ca8SChuck Lever __field(u32, handle) 158278147ca8SChuck Lever __field(u32, length) 158378147ca8SChuck Lever __field(u64, offset) 158478147ca8SChuck Lever ), 158578147ca8SChuck Lever 158678147ca8SChuck Lever TP_fast_assign( 158778147ca8SChuck Lever const struct svc_rdma_segment *segment = 158878147ca8SChuck Lever &chunk->ch_segments[segno]; 158978147ca8SChuck Lever 159078147ca8SChuck Lever __entry->cq_id = cid->ci_queue_id; 159178147ca8SChuck Lever __entry->completion_id = cid->ci_completion_id; 159278147ca8SChuck Lever __entry->segno = segno; 159378147ca8SChuck Lever __entry->handle = segment->rs_handle; 159478147ca8SChuck Lever __entry->length = segment->rs_length; 159578147ca8SChuck Lever __entry->offset = segment->rs_offset; 159678147ca8SChuck Lever ), 159778147ca8SChuck Lever 159878147ca8SChuck Lever TP_printk("cq_id=%u cid=%d segno=%u %u@0x%016llx:0x%08x", 159978147ca8SChuck Lever __entry->cq_id, __entry->completion_id, 160078147ca8SChuck Lever __entry->segno, __entry->length, 160178147ca8SChuck Lever (unsigned long long)__entry->offset, __entry->handle 160278147ca8SChuck Lever ) 160378147ca8SChuck Lever ); 160478147ca8SChuck Lever 160598895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_error_event, 160698895edbSChuck Lever TP_PROTO( 160798895edbSChuck Lever __be32 xid 160898895edbSChuck Lever ), 160998895edbSChuck Lever 161098895edbSChuck Lever TP_ARGS(xid), 161198895edbSChuck Lever 161298895edbSChuck Lever TP_STRUCT__entry( 161398895edbSChuck Lever __field(u32, xid) 161498895edbSChuck Lever ), 161598895edbSChuck Lever 161698895edbSChuck Lever TP_fast_assign( 161798895edbSChuck Lever __entry->xid = be32_to_cpu(xid); 161898895edbSChuck Lever ), 161998895edbSChuck Lever 162098895edbSChuck Lever TP_printk("xid=0x%08x", 162198895edbSChuck Lever __entry->xid 162298895edbSChuck Lever ) 162398895edbSChuck Lever ); 162498895edbSChuck Lever 162598895edbSChuck Lever #define DEFINE_ERROR_EVENT(name) \ 162698895edbSChuck Lever DEFINE_EVENT(svcrdma_error_event, svcrdma_err_##name, \ 162798895edbSChuck Lever TP_PROTO( \ 162898895edbSChuck Lever __be32 xid \ 162998895edbSChuck Lever ), \ 163098895edbSChuck Lever TP_ARGS(xid)) 163198895edbSChuck Lever 163298895edbSChuck Lever DEFINE_ERROR_EVENT(vers); 163398895edbSChuck Lever DEFINE_ERROR_EVENT(chunk); 163498895edbSChuck Lever 1635bd2abef3SChuck Lever /** 1636bd2abef3SChuck Lever ** Server-side RDMA API events 1637bd2abef3SChuck Lever **/ 1638bd2abef3SChuck Lever 1639832b2cb9SChuck Lever DECLARE_EVENT_CLASS(svcrdma_dma_map_class, 1640bd2abef3SChuck Lever TP_PROTO( 1641bd2abef3SChuck Lever const struct svcxprt_rdma *rdma, 1642832b2cb9SChuck Lever u64 dma_addr, 1643832b2cb9SChuck Lever u32 length 1644bd2abef3SChuck Lever ), 1645bd2abef3SChuck Lever 1646832b2cb9SChuck Lever TP_ARGS(rdma, dma_addr, length), 1647bd2abef3SChuck Lever 1648bd2abef3SChuck Lever TP_STRUCT__entry( 1649832b2cb9SChuck Lever __field(u64, dma_addr) 1650832b2cb9SChuck Lever __field(u32, length) 1651bd2abef3SChuck Lever __string(device, rdma->sc_cm_id->device->name) 1652bd2abef3SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1653bd2abef3SChuck Lever ), 1654bd2abef3SChuck Lever 1655bd2abef3SChuck Lever TP_fast_assign( 1656832b2cb9SChuck Lever __entry->dma_addr = dma_addr; 1657832b2cb9SChuck Lever __entry->length = length; 1658bd2abef3SChuck Lever __assign_str(device, rdma->sc_cm_id->device->name); 1659bd2abef3SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1660bd2abef3SChuck Lever ), 1661bd2abef3SChuck Lever 1662832b2cb9SChuck Lever TP_printk("addr=%s device=%s dma_addr=%llu length=%u", 1663832b2cb9SChuck Lever __get_str(addr), __get_str(device), 1664832b2cb9SChuck Lever __entry->dma_addr, __entry->length 1665bd2abef3SChuck Lever ) 1666bd2abef3SChuck Lever ); 1667bd2abef3SChuck Lever 1668832b2cb9SChuck Lever #define DEFINE_SVC_DMA_EVENT(name) \ 1669832b2cb9SChuck Lever DEFINE_EVENT(svcrdma_dma_map_class, svcrdma_##name, \ 1670832b2cb9SChuck Lever TP_PROTO( \ 1671832b2cb9SChuck Lever const struct svcxprt_rdma *rdma,\ 1672832b2cb9SChuck Lever u64 dma_addr, \ 1673832b2cb9SChuck Lever u32 length \ 1674832b2cb9SChuck Lever ), \ 1675832b2cb9SChuck Lever TP_ARGS(rdma, dma_addr, length)) 1676832b2cb9SChuck Lever 1677832b2cb9SChuck Lever DEFINE_SVC_DMA_EVENT(dma_map_page); 16782371bcc0SChuck Lever DEFINE_SVC_DMA_EVENT(dma_map_err); 1679832b2cb9SChuck Lever DEFINE_SVC_DMA_EVENT(dma_unmap_page); 1680832b2cb9SChuck Lever 16812abfbe7eSChuck Lever TRACE_EVENT(svcrdma_dma_map_rw_err, 1682bd2abef3SChuck Lever TP_PROTO( 1683bd2abef3SChuck Lever const struct svcxprt_rdma *rdma, 16842abfbe7eSChuck Lever unsigned int nents, 1685bd2abef3SChuck Lever int status 1686bd2abef3SChuck Lever ), 1687bd2abef3SChuck Lever 16882abfbe7eSChuck Lever TP_ARGS(rdma, nents, status), 1689bd2abef3SChuck Lever 1690bd2abef3SChuck Lever TP_STRUCT__entry( 1691bd2abef3SChuck Lever __field(int, status) 16922abfbe7eSChuck Lever __field(unsigned int, nents) 1693bd2abef3SChuck Lever __string(device, rdma->sc_cm_id->device->name) 1694bd2abef3SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1695bd2abef3SChuck Lever ), 1696bd2abef3SChuck Lever 1697bd2abef3SChuck Lever TP_fast_assign( 1698bd2abef3SChuck Lever __entry->status = status; 16992abfbe7eSChuck Lever __entry->nents = nents; 1700bd2abef3SChuck Lever __assign_str(device, rdma->sc_cm_id->device->name); 1701bd2abef3SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1702bd2abef3SChuck Lever ), 1703bd2abef3SChuck Lever 17042abfbe7eSChuck Lever TP_printk("addr=%s device=%s nents=%u status=%d", 17052abfbe7eSChuck Lever __get_str(addr), __get_str(device), __entry->nents, 17062abfbe7eSChuck Lever __entry->status 1707bd2abef3SChuck Lever ) 1708bd2abef3SChuck Lever ); 1709bd2abef3SChuck Lever 1710f4e53e1cSChuck Lever TRACE_EVENT(svcrdma_no_rwctx_err, 1711f4e53e1cSChuck Lever TP_PROTO( 1712f4e53e1cSChuck Lever const struct svcxprt_rdma *rdma, 1713f4e53e1cSChuck Lever unsigned int num_sges 1714f4e53e1cSChuck Lever ), 1715f4e53e1cSChuck Lever 1716f4e53e1cSChuck Lever TP_ARGS(rdma, num_sges), 1717f4e53e1cSChuck Lever 1718f4e53e1cSChuck Lever TP_STRUCT__entry( 1719f4e53e1cSChuck Lever __field(unsigned int, num_sges) 1720f4e53e1cSChuck Lever __string(device, rdma->sc_cm_id->device->name) 1721f4e53e1cSChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1722f4e53e1cSChuck Lever ), 1723f4e53e1cSChuck Lever 1724f4e53e1cSChuck Lever TP_fast_assign( 1725f4e53e1cSChuck Lever __entry->num_sges = num_sges; 1726f4e53e1cSChuck Lever __assign_str(device, rdma->sc_cm_id->device->name); 1727f4e53e1cSChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1728f4e53e1cSChuck Lever ), 1729f4e53e1cSChuck Lever 1730f4e53e1cSChuck Lever TP_printk("addr=%s device=%s num_sges=%d", 1731f4e53e1cSChuck Lever __get_str(addr), __get_str(device), __entry->num_sges 1732f4e53e1cSChuck Lever ) 1733f4e53e1cSChuck Lever ); 1734f4e53e1cSChuck Lever 17359d200638SChuck Lever TRACE_EVENT(svcrdma_page_overrun_err, 17369d200638SChuck Lever TP_PROTO( 17379d200638SChuck Lever const struct svcxprt_rdma *rdma, 17389d200638SChuck Lever const struct svc_rqst *rqst, 17399d200638SChuck Lever unsigned int pageno 17409d200638SChuck Lever ), 17419d200638SChuck Lever 17429d200638SChuck Lever TP_ARGS(rdma, rqst, pageno), 17439d200638SChuck Lever 17449d200638SChuck Lever TP_STRUCT__entry( 17459d200638SChuck Lever __field(unsigned int, pageno) 17469d200638SChuck Lever __field(u32, xid) 17479d200638SChuck Lever __string(device, rdma->sc_cm_id->device->name) 17489d200638SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 17499d200638SChuck Lever ), 17509d200638SChuck Lever 17519d200638SChuck Lever TP_fast_assign( 17529d200638SChuck Lever __entry->pageno = pageno; 17539d200638SChuck Lever __entry->xid = __be32_to_cpu(rqst->rq_xid); 17549d200638SChuck Lever __assign_str(device, rdma->sc_cm_id->device->name); 17559d200638SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 17569d200638SChuck Lever ), 17579d200638SChuck Lever 17589d200638SChuck Lever TP_printk("addr=%s device=%s xid=0x%08x pageno=%u", __get_str(addr), 17599d200638SChuck Lever __get_str(device), __entry->xid, __entry->pageno 17609d200638SChuck Lever ) 17619d200638SChuck Lever ); 17629d200638SChuck Lever 1763dbc17acdSChuck Lever TRACE_EVENT(svcrdma_small_wrch_err, 1764dbc17acdSChuck Lever TP_PROTO( 1765dbc17acdSChuck Lever const struct svcxprt_rdma *rdma, 1766dbc17acdSChuck Lever unsigned int remaining, 1767dbc17acdSChuck Lever unsigned int seg_no, 1768dbc17acdSChuck Lever unsigned int num_segs 1769dbc17acdSChuck Lever ), 1770dbc17acdSChuck Lever 1771dbc17acdSChuck Lever TP_ARGS(rdma, remaining, seg_no, num_segs), 1772dbc17acdSChuck Lever 1773dbc17acdSChuck Lever TP_STRUCT__entry( 1774dbc17acdSChuck Lever __field(unsigned int, remaining) 1775dbc17acdSChuck Lever __field(unsigned int, seg_no) 1776dbc17acdSChuck Lever __field(unsigned int, num_segs) 1777dbc17acdSChuck Lever __string(device, rdma->sc_cm_id->device->name) 1778dbc17acdSChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1779dbc17acdSChuck Lever ), 1780dbc17acdSChuck Lever 1781dbc17acdSChuck Lever TP_fast_assign( 1782dbc17acdSChuck Lever __entry->remaining = remaining; 1783dbc17acdSChuck Lever __entry->seg_no = seg_no; 1784dbc17acdSChuck Lever __entry->num_segs = num_segs; 1785dbc17acdSChuck Lever __assign_str(device, rdma->sc_cm_id->device->name); 1786dbc17acdSChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1787dbc17acdSChuck Lever ), 1788dbc17acdSChuck Lever 1789dbc17acdSChuck Lever TP_printk("addr=%s device=%s remaining=%u seg_no=%u num_segs=%u", 1790dbc17acdSChuck Lever __get_str(addr), __get_str(device), __entry->remaining, 1791dbc17acdSChuck Lever __entry->seg_no, __entry->num_segs 1792dbc17acdSChuck Lever ) 1793dbc17acdSChuck Lever ); 1794dbc17acdSChuck Lever 17950dabe948SChuck Lever TRACE_EVENT(svcrdma_send_pullup, 17960dabe948SChuck Lever TP_PROTO( 17979d0b09d5SChuck Lever const struct svc_rdma_send_ctxt *ctxt, 17989d0b09d5SChuck Lever unsigned int msglen 17990dabe948SChuck Lever ), 18000dabe948SChuck Lever 18019d0b09d5SChuck Lever TP_ARGS(ctxt, msglen), 18020dabe948SChuck Lever 18030dabe948SChuck Lever TP_STRUCT__entry( 18049d0b09d5SChuck Lever __field(u32, cq_id) 18059d0b09d5SChuck Lever __field(int, completion_id) 18069d0b09d5SChuck Lever __field(unsigned int, hdrlen) 18079d0b09d5SChuck Lever __field(unsigned int, msglen) 18080dabe948SChuck Lever ), 18090dabe948SChuck Lever 18100dabe948SChuck Lever TP_fast_assign( 18119d0b09d5SChuck Lever __entry->cq_id = ctxt->sc_cid.ci_queue_id; 18129d0b09d5SChuck Lever __entry->completion_id = ctxt->sc_cid.ci_completion_id; 18139d0b09d5SChuck Lever __entry->hdrlen = ctxt->sc_hdrbuf.len, 18149d0b09d5SChuck Lever __entry->msglen = msglen; 18150dabe948SChuck Lever ), 18160dabe948SChuck Lever 18179d0b09d5SChuck Lever TP_printk("cq_id=%u cid=%d hdr=%u msg=%u (total %u)", 18189d0b09d5SChuck Lever __entry->cq_id, __entry->completion_id, 18199d0b09d5SChuck Lever __entry->hdrlen, __entry->msglen, 18209d0b09d5SChuck Lever __entry->hdrlen + __entry->msglen) 18210dabe948SChuck Lever ); 18220dabe948SChuck Lever 18233f8f25c6SChuck Lever TRACE_EVENT(svcrdma_send_err, 1824bd2abef3SChuck Lever TP_PROTO( 1825bd2abef3SChuck Lever const struct svc_rqst *rqst, 1826bd2abef3SChuck Lever int status 1827bd2abef3SChuck Lever ), 1828bd2abef3SChuck Lever 1829bd2abef3SChuck Lever TP_ARGS(rqst, status), 1830bd2abef3SChuck Lever 1831bd2abef3SChuck Lever TP_STRUCT__entry( 1832bd2abef3SChuck Lever __field(int, status) 1833bd2abef3SChuck Lever __field(u32, xid) 1834bd2abef3SChuck Lever __string(addr, rqst->rq_xprt->xpt_remotebuf) 1835bd2abef3SChuck Lever ), 1836bd2abef3SChuck Lever 1837bd2abef3SChuck Lever TP_fast_assign( 1838bd2abef3SChuck Lever __entry->status = status; 1839bd2abef3SChuck Lever __entry->xid = __be32_to_cpu(rqst->rq_xid); 1840bd2abef3SChuck Lever __assign_str(addr, rqst->rq_xprt->xpt_remotebuf); 1841bd2abef3SChuck Lever ), 1842bd2abef3SChuck Lever 18433f8f25c6SChuck Lever TP_printk("addr=%s xid=0x%08x status=%d", __get_str(addr), 1844bd2abef3SChuck Lever __entry->xid, __entry->status 1845bd2abef3SChuck Lever ) 1846bd2abef3SChuck Lever ); 1847bd2abef3SChuck Lever 1848bd2abef3SChuck Lever TRACE_EVENT(svcrdma_post_send, 1849bd2abef3SChuck Lever TP_PROTO( 185017f70f8dSChuck Lever const struct svc_rdma_send_ctxt *ctxt 1851bd2abef3SChuck Lever ), 1852bd2abef3SChuck Lever 185317f70f8dSChuck Lever TP_ARGS(ctxt), 1854bd2abef3SChuck Lever 1855bd2abef3SChuck Lever TP_STRUCT__entry( 185617f70f8dSChuck Lever __field(u32, cq_id) 185717f70f8dSChuck Lever __field(int, completion_id) 1858bd2abef3SChuck Lever __field(unsigned int, num_sge) 1859bd2abef3SChuck Lever __field(u32, inv_rkey) 1860bd2abef3SChuck Lever ), 1861bd2abef3SChuck Lever 1862bd2abef3SChuck Lever TP_fast_assign( 186317f70f8dSChuck Lever const struct ib_send_wr *wr = &ctxt->sc_send_wr; 186417f70f8dSChuck Lever 186517f70f8dSChuck Lever __entry->cq_id = ctxt->sc_cid.ci_queue_id; 186617f70f8dSChuck Lever __entry->completion_id = ctxt->sc_cid.ci_completion_id; 1867bd2abef3SChuck Lever __entry->num_sge = wr->num_sge; 1868bd2abef3SChuck Lever __entry->inv_rkey = (wr->opcode == IB_WR_SEND_WITH_INV) ? 1869bd2abef3SChuck Lever wr->ex.invalidate_rkey : 0; 1870bd2abef3SChuck Lever ), 1871bd2abef3SChuck Lever 187217f70f8dSChuck Lever TP_printk("cq_id=%u cid=%d num_sge=%u inv_rkey=0x%08x", 187317f70f8dSChuck Lever __entry->cq_id, __entry->completion_id, 187417f70f8dSChuck Lever __entry->num_sge, __entry->inv_rkey 1875bd2abef3SChuck Lever ) 1876bd2abef3SChuck Lever ); 1877bd2abef3SChuck Lever 18783ac56c2fSChuck Lever DEFINE_COMPLETION_EVENT(svcrdma_wc_send); 1879bd2abef3SChuck Lever 1880bd2abef3SChuck Lever TRACE_EVENT(svcrdma_post_recv, 1881bd2abef3SChuck Lever TP_PROTO( 18829b3bcf8cSChuck Lever const struct svc_rdma_recv_ctxt *ctxt 1883bd2abef3SChuck Lever ), 1884bd2abef3SChuck Lever 18859b3bcf8cSChuck Lever TP_ARGS(ctxt), 1886bd2abef3SChuck Lever 1887bd2abef3SChuck Lever TP_STRUCT__entry( 18889b3bcf8cSChuck Lever __field(u32, cq_id) 18899b3bcf8cSChuck Lever __field(int, completion_id) 1890bd2abef3SChuck Lever ), 1891bd2abef3SChuck Lever 1892bd2abef3SChuck Lever TP_fast_assign( 18939b3bcf8cSChuck Lever __entry->cq_id = ctxt->rc_cid.ci_queue_id; 18949b3bcf8cSChuck Lever __entry->completion_id = ctxt->rc_cid.ci_completion_id; 1895bd2abef3SChuck Lever ), 1896bd2abef3SChuck Lever 18979b3bcf8cSChuck Lever TP_printk("cq.id=%d cid=%d", 18989b3bcf8cSChuck Lever __entry->cq_id, __entry->completion_id 1899bd2abef3SChuck Lever ) 1900bd2abef3SChuck Lever ); 1901bd2abef3SChuck Lever 1902c30f259aSChuck Lever DEFINE_RECEIVE_COMPLETION_EVENT(svcrdma_wc_receive); 19039b3bcf8cSChuck Lever 19049b3bcf8cSChuck Lever TRACE_EVENT(svcrdma_rq_post_err, 1905bd2abef3SChuck Lever TP_PROTO( 19069b3bcf8cSChuck Lever const struct svcxprt_rdma *rdma, 19079b3bcf8cSChuck Lever int status 1908bd2abef3SChuck Lever ), 1909bd2abef3SChuck Lever 19109b3bcf8cSChuck Lever TP_ARGS(rdma, status), 1911bd2abef3SChuck Lever 1912bd2abef3SChuck Lever TP_STRUCT__entry( 19139b3bcf8cSChuck Lever __field(int, status) 19149b3bcf8cSChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1915bd2abef3SChuck Lever ), 1916bd2abef3SChuck Lever 1917bd2abef3SChuck Lever TP_fast_assign( 19189b3bcf8cSChuck Lever __entry->status = status; 19199b3bcf8cSChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1920bd2abef3SChuck Lever ), 1921bd2abef3SChuck Lever 19229b3bcf8cSChuck Lever TP_printk("addr=%s status=%d", 19239b3bcf8cSChuck Lever __get_str(addr), __entry->status 1924bd2abef3SChuck Lever ) 1925bd2abef3SChuck Lever ); 1926bd2abef3SChuck Lever 1927b704be09SChuck Lever DECLARE_EVENT_CLASS(svcrdma_post_chunk_class, 1928bd2abef3SChuck Lever TP_PROTO( 19296787f0beSChuck Lever const struct rpc_rdma_cid *cid, 1930e28b4fc6SChuck Lever int sqecount 1931bd2abef3SChuck Lever ), 1932bd2abef3SChuck Lever 19336787f0beSChuck Lever TP_ARGS(cid, sqecount), 1934bd2abef3SChuck Lever 1935bd2abef3SChuck Lever TP_STRUCT__entry( 19366787f0beSChuck Lever __field(u32, cq_id) 19376787f0beSChuck Lever __field(int, completion_id) 1938bd2abef3SChuck Lever __field(int, sqecount) 1939bd2abef3SChuck Lever ), 1940bd2abef3SChuck Lever 1941bd2abef3SChuck Lever TP_fast_assign( 19426787f0beSChuck Lever __entry->cq_id = cid->ci_queue_id; 19436787f0beSChuck Lever __entry->completion_id = cid->ci_completion_id; 1944bd2abef3SChuck Lever __entry->sqecount = sqecount; 1945bd2abef3SChuck Lever ), 1946bd2abef3SChuck Lever 19476787f0beSChuck Lever TP_printk("cq.id=%u cid=%d sqecount=%d", 19486787f0beSChuck Lever __entry->cq_id, __entry->completion_id, 19496787f0beSChuck Lever __entry->sqecount 1950bd2abef3SChuck Lever ) 1951bd2abef3SChuck Lever ); 1952bd2abef3SChuck Lever 1953b704be09SChuck Lever #define DEFINE_POST_CHUNK_EVENT(name) \ 1954b704be09SChuck Lever DEFINE_EVENT(svcrdma_post_chunk_class, \ 1955b704be09SChuck Lever svcrdma_post_##name##_chunk, \ 1956b704be09SChuck Lever TP_PROTO( \ 1957b704be09SChuck Lever const struct rpc_rdma_cid *cid, \ 1958b704be09SChuck Lever int sqecount \ 1959b704be09SChuck Lever ), \ 1960b704be09SChuck Lever TP_ARGS(cid, sqecount)) 1961b704be09SChuck Lever 1962b704be09SChuck Lever DEFINE_POST_CHUNK_EVENT(read); 1963b704be09SChuck Lever DEFINE_POST_CHUNK_EVENT(write); 1964b704be09SChuck Lever DEFINE_POST_CHUNK_EVENT(reply); 1965b704be09SChuck Lever 19666787f0beSChuck Lever DEFINE_COMPLETION_EVENT(svcrdma_wc_read); 19676787f0beSChuck Lever DEFINE_COMPLETION_EVENT(svcrdma_wc_write); 1968bd2abef3SChuck Lever 1969bd2abef3SChuck Lever TRACE_EVENT(svcrdma_qp_error, 1970bd2abef3SChuck Lever TP_PROTO( 1971bd2abef3SChuck Lever const struct ib_event *event, 1972bd2abef3SChuck Lever const struct sockaddr *sap 1973bd2abef3SChuck Lever ), 1974bd2abef3SChuck Lever 1975bd2abef3SChuck Lever TP_ARGS(event, sap), 1976bd2abef3SChuck Lever 1977bd2abef3SChuck Lever TP_STRUCT__entry( 1978bd2abef3SChuck Lever __field(unsigned int, event) 1979bd2abef3SChuck Lever __string(device, event->device->name) 1980bd2abef3SChuck Lever __array(__u8, addr, INET6_ADDRSTRLEN + 10) 1981bd2abef3SChuck Lever ), 1982bd2abef3SChuck Lever 1983bd2abef3SChuck Lever TP_fast_assign( 1984bd2abef3SChuck Lever __entry->event = event->event; 1985bd2abef3SChuck Lever __assign_str(device, event->device->name); 1986bd2abef3SChuck Lever snprintf(__entry->addr, sizeof(__entry->addr) - 1, 1987bd2abef3SChuck Lever "%pISpc", sap); 1988bd2abef3SChuck Lever ), 1989bd2abef3SChuck Lever 1990bd2abef3SChuck Lever TP_printk("addr=%s dev=%s event=%s (%u)", 1991bd2abef3SChuck Lever __entry->addr, __get_str(device), 1992bd2abef3SChuck Lever rdma_show_ib_event(__entry->event), __entry->event 1993bd2abef3SChuck Lever ) 1994bd2abef3SChuck Lever ); 1995bd2abef3SChuck Lever 1996bd2abef3SChuck Lever DECLARE_EVENT_CLASS(svcrdma_sendqueue_event, 1997bd2abef3SChuck Lever TP_PROTO( 1998bd2abef3SChuck Lever const struct svcxprt_rdma *rdma 1999bd2abef3SChuck Lever ), 2000bd2abef3SChuck Lever 2001bd2abef3SChuck Lever TP_ARGS(rdma), 2002bd2abef3SChuck Lever 2003bd2abef3SChuck Lever TP_STRUCT__entry( 2004bd2abef3SChuck Lever __field(int, avail) 2005bd2abef3SChuck Lever __field(int, depth) 2006bd2abef3SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 2007bd2abef3SChuck Lever ), 2008bd2abef3SChuck Lever 2009bd2abef3SChuck Lever TP_fast_assign( 2010bd2abef3SChuck Lever __entry->avail = atomic_read(&rdma->sc_sq_avail); 2011bd2abef3SChuck Lever __entry->depth = rdma->sc_sq_depth; 2012bd2abef3SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 2013bd2abef3SChuck Lever ), 2014bd2abef3SChuck Lever 2015bd2abef3SChuck Lever TP_printk("addr=%s sc_sq_avail=%d/%d", 2016bd2abef3SChuck Lever __get_str(addr), __entry->avail, __entry->depth 2017bd2abef3SChuck Lever ) 2018bd2abef3SChuck Lever ); 2019bd2abef3SChuck Lever 2020bd2abef3SChuck Lever #define DEFINE_SQ_EVENT(name) \ 2021bd2abef3SChuck Lever DEFINE_EVENT(svcrdma_sendqueue_event, svcrdma_sq_##name,\ 2022bd2abef3SChuck Lever TP_PROTO( \ 2023bd2abef3SChuck Lever const struct svcxprt_rdma *rdma \ 2024bd2abef3SChuck Lever ), \ 2025bd2abef3SChuck Lever TP_ARGS(rdma)) 2026bd2abef3SChuck Lever 2027bd2abef3SChuck Lever DEFINE_SQ_EVENT(full); 2028bd2abef3SChuck Lever DEFINE_SQ_EVENT(retry); 2029bd2abef3SChuck Lever 2030e28b4fc6SChuck Lever TRACE_EVENT(svcrdma_sq_post_err, 2031e28b4fc6SChuck Lever TP_PROTO( 2032e28b4fc6SChuck Lever const struct svcxprt_rdma *rdma, 2033e28b4fc6SChuck Lever int status 2034e28b4fc6SChuck Lever ), 2035e28b4fc6SChuck Lever 2036e28b4fc6SChuck Lever TP_ARGS(rdma, status), 2037e28b4fc6SChuck Lever 2038e28b4fc6SChuck Lever TP_STRUCT__entry( 2039e28b4fc6SChuck Lever __field(int, avail) 2040e28b4fc6SChuck Lever __field(int, depth) 2041e28b4fc6SChuck Lever __field(int, status) 2042e28b4fc6SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 2043e28b4fc6SChuck Lever ), 2044e28b4fc6SChuck Lever 2045e28b4fc6SChuck Lever TP_fast_assign( 2046e28b4fc6SChuck Lever __entry->avail = atomic_read(&rdma->sc_sq_avail); 2047e28b4fc6SChuck Lever __entry->depth = rdma->sc_sq_depth; 2048e28b4fc6SChuck Lever __entry->status = status; 2049e28b4fc6SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 2050e28b4fc6SChuck Lever ), 2051e28b4fc6SChuck Lever 2052e28b4fc6SChuck Lever TP_printk("addr=%s sc_sq_avail=%d/%d status=%d", 2053e28b4fc6SChuck Lever __get_str(addr), __entry->avail, __entry->depth, 2054e28b4fc6SChuck Lever __entry->status 2055e28b4fc6SChuck Lever ) 2056e28b4fc6SChuck Lever ); 2057e28b4fc6SChuck Lever 2058e48f083eSChuck Lever #endif /* _TRACE_RPCRDMA_H */ 2059e48f083eSChuck Lever 2060e48f083eSChuck Lever #include <trace/define_trace.h> 2061