1e48f083eSChuck Lever /* SPDX-License-Identifier: GPL-2.0 */ 2e48f083eSChuck Lever /* 398895edbSChuck Lever * Copyright (c) 2017, 2018 Oracle. All rights reserved. 498895edbSChuck Lever * 598895edbSChuck Lever * Trace point definitions for the "rpcrdma" subsystem. 6e48f083eSChuck Lever */ 7e48f083eSChuck Lever #undef TRACE_SYSTEM 8e48f083eSChuck Lever #define TRACE_SYSTEM rpcrdma 9e48f083eSChuck Lever 10e48f083eSChuck Lever #if !defined(_TRACE_RPCRDMA_H) || defined(TRACE_HEADER_MULTI_READ) 11e48f083eSChuck Lever #define _TRACE_RPCRDMA_H 12e48f083eSChuck Lever 1353b2c1cbSChuck Lever #include <linux/scatterlist.h> 14f7bd657bSChuck Lever #include <linux/sunrpc/rpc_rdma_cid.h> 15e48f083eSChuck Lever #include <linux/tracepoint.h> 16b3d03daaSChuck Lever #include <rdma/ib_cm.h> 17e48f083eSChuck Lever #include <trace/events/rdma.h> 18e48f083eSChuck Lever 19ab03eff5SChuck Lever /** 20b4a7f91cSChuck Lever ** Event classes 21b4a7f91cSChuck Lever **/ 22b4a7f91cSChuck Lever 23f7bd657bSChuck Lever DECLARE_EVENT_CLASS(rpcrdma_completion_class, 24f7bd657bSChuck Lever TP_PROTO( 25f7bd657bSChuck Lever const struct ib_wc *wc, 26f7bd657bSChuck Lever const struct rpc_rdma_cid *cid 27f7bd657bSChuck Lever ), 28f7bd657bSChuck Lever 29f7bd657bSChuck Lever TP_ARGS(wc, cid), 30f7bd657bSChuck Lever 31f7bd657bSChuck Lever TP_STRUCT__entry( 32f7bd657bSChuck Lever __field(u32, cq_id) 33f7bd657bSChuck Lever __field(int, completion_id) 34f7bd657bSChuck Lever __field(unsigned long, status) 35f7bd657bSChuck Lever __field(unsigned int, vendor_err) 36f7bd657bSChuck Lever ), 37f7bd657bSChuck Lever 38f7bd657bSChuck Lever TP_fast_assign( 39f7bd657bSChuck Lever __entry->cq_id = cid->ci_queue_id; 40f7bd657bSChuck Lever __entry->completion_id = cid->ci_completion_id; 41f7bd657bSChuck Lever __entry->status = wc->status; 42f7bd657bSChuck Lever if (wc->status) 43f7bd657bSChuck Lever __entry->vendor_err = wc->vendor_err; 44f7bd657bSChuck Lever else 45f7bd657bSChuck Lever __entry->vendor_err = 0; 46f7bd657bSChuck Lever ), 47f7bd657bSChuck Lever 48f7bd657bSChuck Lever TP_printk("cq.id=%u cid=%d status=%s (%lu/0x%x)", 49f7bd657bSChuck Lever __entry->cq_id, __entry->completion_id, 50f7bd657bSChuck Lever rdma_show_wc_status(__entry->status), 51f7bd657bSChuck Lever __entry->status, __entry->vendor_err 52f7bd657bSChuck Lever ) 53f7bd657bSChuck Lever ); 54f7bd657bSChuck Lever 55f7bd657bSChuck Lever #define DEFINE_COMPLETION_EVENT(name) \ 56f7bd657bSChuck Lever DEFINE_EVENT(rpcrdma_completion_class, name, \ 57f7bd657bSChuck Lever TP_PROTO( \ 58f7bd657bSChuck Lever const struct ib_wc *wc, \ 59f7bd657bSChuck Lever const struct rpc_rdma_cid *cid \ 60f7bd657bSChuck Lever ), \ 61f7bd657bSChuck Lever TP_ARGS(wc, cid)) 62f7bd657bSChuck Lever 63*6b147ea7SChuck Lever DECLARE_EVENT_CLASS(rpcrdma_mr_completion_class, 64*6b147ea7SChuck Lever TP_PROTO( 65*6b147ea7SChuck Lever const struct ib_wc *wc, 66*6b147ea7SChuck Lever const struct rpc_rdma_cid *cid 67*6b147ea7SChuck Lever ), 68*6b147ea7SChuck Lever 69*6b147ea7SChuck Lever TP_ARGS(wc, cid), 70*6b147ea7SChuck Lever 71*6b147ea7SChuck Lever TP_STRUCT__entry( 72*6b147ea7SChuck Lever __field(u32, cq_id) 73*6b147ea7SChuck Lever __field(int, completion_id) 74*6b147ea7SChuck Lever __field(unsigned long, status) 75*6b147ea7SChuck Lever __field(unsigned int, vendor_err) 76*6b147ea7SChuck Lever ), 77*6b147ea7SChuck Lever 78*6b147ea7SChuck Lever TP_fast_assign( 79*6b147ea7SChuck Lever __entry->cq_id = cid->ci_queue_id; 80*6b147ea7SChuck Lever __entry->completion_id = cid->ci_completion_id; 81*6b147ea7SChuck Lever __entry->status = wc->status; 82*6b147ea7SChuck Lever if (wc->status) 83*6b147ea7SChuck Lever __entry->vendor_err = wc->vendor_err; 84*6b147ea7SChuck Lever else 85*6b147ea7SChuck Lever __entry->vendor_err = 0; 86*6b147ea7SChuck Lever ), 87*6b147ea7SChuck Lever 88*6b147ea7SChuck Lever TP_printk("cq.id=%u mr.id=%d status=%s (%lu/0x%x)", 89*6b147ea7SChuck Lever __entry->cq_id, __entry->completion_id, 90*6b147ea7SChuck Lever rdma_show_wc_status(__entry->status), 91*6b147ea7SChuck Lever __entry->status, __entry->vendor_err 92*6b147ea7SChuck Lever ) 93*6b147ea7SChuck Lever ); 94*6b147ea7SChuck Lever 95*6b147ea7SChuck Lever #define DEFINE_MR_COMPLETION_EVENT(name) \ 96*6b147ea7SChuck Lever DEFINE_EVENT(rpcrdma_mr_completion_class, name, \ 97*6b147ea7SChuck Lever TP_PROTO( \ 98*6b147ea7SChuck Lever const struct ib_wc *wc, \ 99*6b147ea7SChuck Lever const struct rpc_rdma_cid *cid \ 100*6b147ea7SChuck Lever ), \ 101*6b147ea7SChuck Lever TP_ARGS(wc, cid)) 102*6b147ea7SChuck 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 __field(const void *, r_xprt) 1941c443effSChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 1951c443effSChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 1961c443effSChuck Lever ), 1971c443effSChuck Lever 1981c443effSChuck Lever TP_fast_assign( 1991c443effSChuck Lever __entry->r_xprt = r_xprt; 2001c443effSChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 2011c443effSChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 2021c443effSChuck Lever ), 2031c443effSChuck Lever 2041c443effSChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p", 2051c443effSChuck Lever __get_str(addr), __get_str(port), __entry->r_xprt 2061c443effSChuck Lever ) 2071c443effSChuck Lever ); 2081c443effSChuck Lever 2091c443effSChuck Lever #define DEFINE_RXPRT_EVENT(name) \ 2101c443effSChuck Lever DEFINE_EVENT(xprtrdma_rxprt, name, \ 2111c443effSChuck Lever TP_PROTO( \ 2121c443effSChuck Lever const struct rpcrdma_xprt *r_xprt \ 2131c443effSChuck Lever ), \ 2141c443effSChuck Lever TP_ARGS(r_xprt)) 2151c443effSChuck Lever 2167b020f17SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_connect_class, 2177b020f17SChuck Lever TP_PROTO( 2187b020f17SChuck Lever const struct rpcrdma_xprt *r_xprt, 2197b020f17SChuck Lever int rc 2207b020f17SChuck Lever ), 2217b020f17SChuck Lever 2227b020f17SChuck Lever TP_ARGS(r_xprt, rc), 2237b020f17SChuck Lever 2247b020f17SChuck Lever TP_STRUCT__entry( 2257b020f17SChuck Lever __field(const void *, r_xprt) 2267b020f17SChuck Lever __field(int, rc) 2277b020f17SChuck Lever __field(int, connect_status) 2287b020f17SChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 2297b020f17SChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 2307b020f17SChuck Lever ), 2317b020f17SChuck Lever 2327b020f17SChuck Lever TP_fast_assign( 2337b020f17SChuck Lever __entry->r_xprt = r_xprt; 2347b020f17SChuck Lever __entry->rc = rc; 235e28ce900SChuck Lever __entry->connect_status = r_xprt->rx_ep->re_connect_status; 2367b020f17SChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 2377b020f17SChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 2387b020f17SChuck Lever ), 2397b020f17SChuck Lever 240d6ccebf9SChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: rc=%d connection status=%d", 2417b020f17SChuck Lever __get_str(addr), __get_str(port), __entry->r_xprt, 2427b020f17SChuck Lever __entry->rc, __entry->connect_status 2437b020f17SChuck Lever ) 2447b020f17SChuck Lever ); 2457b020f17SChuck Lever 2467b020f17SChuck Lever #define DEFINE_CONN_EVENT(name) \ 2477b020f17SChuck Lever DEFINE_EVENT(xprtrdma_connect_class, xprtrdma_##name, \ 2487b020f17SChuck Lever TP_PROTO( \ 2497b020f17SChuck Lever const struct rpcrdma_xprt *r_xprt, \ 2507b020f17SChuck Lever int rc \ 2517b020f17SChuck Lever ), \ 2527b020f17SChuck Lever TP_ARGS(r_xprt, rc)) 2537b020f17SChuck Lever 25458f10ad4SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_rdch_event, 25558f10ad4SChuck Lever TP_PROTO( 25658f10ad4SChuck Lever const struct rpc_task *task, 25758f10ad4SChuck Lever unsigned int pos, 25858f10ad4SChuck Lever struct rpcrdma_mr *mr, 25958f10ad4SChuck Lever int nsegs 26058f10ad4SChuck Lever ), 26158f10ad4SChuck Lever 26258f10ad4SChuck Lever TP_ARGS(task, pos, mr, nsegs), 26358f10ad4SChuck Lever 26458f10ad4SChuck Lever TP_STRUCT__entry( 26558f10ad4SChuck Lever __field(unsigned int, task_id) 26658f10ad4SChuck Lever __field(unsigned int, client_id) 26758f10ad4SChuck Lever __field(unsigned int, pos) 26858f10ad4SChuck Lever __field(int, nents) 26958f10ad4SChuck Lever __field(u32, handle) 27058f10ad4SChuck Lever __field(u32, length) 27158f10ad4SChuck Lever __field(u64, offset) 27258f10ad4SChuck Lever __field(int, nsegs) 27358f10ad4SChuck Lever ), 27458f10ad4SChuck Lever 27558f10ad4SChuck Lever TP_fast_assign( 27658f10ad4SChuck Lever __entry->task_id = task->tk_pid; 27758f10ad4SChuck Lever __entry->client_id = task->tk_client->cl_clid; 27858f10ad4SChuck Lever __entry->pos = pos; 27958f10ad4SChuck Lever __entry->nents = mr->mr_nents; 28058f10ad4SChuck Lever __entry->handle = mr->mr_handle; 28158f10ad4SChuck Lever __entry->length = mr->mr_length; 28258f10ad4SChuck Lever __entry->offset = mr->mr_offset; 28358f10ad4SChuck Lever __entry->nsegs = nsegs; 28458f10ad4SChuck Lever ), 28558f10ad4SChuck Lever 286aba11831SChuck Lever TP_printk("task:%u@%u pos=%u %u@0x%016llx:0x%08x (%s)", 287aba11831SChuck Lever __entry->task_id, __entry->client_id, 28858f10ad4SChuck Lever __entry->pos, __entry->length, 28958f10ad4SChuck Lever (unsigned long long)__entry->offset, __entry->handle, 29058f10ad4SChuck Lever __entry->nents < __entry->nsegs ? "more" : "last" 29158f10ad4SChuck Lever ) 29258f10ad4SChuck Lever ); 29358f10ad4SChuck Lever 29458f10ad4SChuck Lever #define DEFINE_RDCH_EVENT(name) \ 295aba11831SChuck Lever DEFINE_EVENT(xprtrdma_rdch_event, xprtrdma_chunk_##name,\ 29658f10ad4SChuck Lever TP_PROTO( \ 29758f10ad4SChuck Lever const struct rpc_task *task, \ 29858f10ad4SChuck Lever unsigned int pos, \ 29958f10ad4SChuck Lever struct rpcrdma_mr *mr, \ 30058f10ad4SChuck Lever int nsegs \ 30158f10ad4SChuck Lever ), \ 30258f10ad4SChuck Lever TP_ARGS(task, pos, mr, nsegs)) 30358f10ad4SChuck Lever 30458f10ad4SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_wrch_event, 30558f10ad4SChuck Lever TP_PROTO( 30658f10ad4SChuck Lever const struct rpc_task *task, 30758f10ad4SChuck Lever struct rpcrdma_mr *mr, 30858f10ad4SChuck Lever int nsegs 30958f10ad4SChuck Lever ), 31058f10ad4SChuck Lever 31158f10ad4SChuck Lever TP_ARGS(task, mr, nsegs), 31258f10ad4SChuck Lever 31358f10ad4SChuck Lever TP_STRUCT__entry( 31458f10ad4SChuck Lever __field(unsigned int, task_id) 31558f10ad4SChuck Lever __field(unsigned int, client_id) 31658f10ad4SChuck Lever __field(int, nents) 31758f10ad4SChuck Lever __field(u32, handle) 31858f10ad4SChuck Lever __field(u32, length) 31958f10ad4SChuck Lever __field(u64, offset) 32058f10ad4SChuck Lever __field(int, nsegs) 32158f10ad4SChuck Lever ), 32258f10ad4SChuck Lever 32358f10ad4SChuck Lever TP_fast_assign( 32458f10ad4SChuck Lever __entry->task_id = task->tk_pid; 32558f10ad4SChuck Lever __entry->client_id = task->tk_client->cl_clid; 32658f10ad4SChuck Lever __entry->nents = mr->mr_nents; 32758f10ad4SChuck Lever __entry->handle = mr->mr_handle; 32858f10ad4SChuck Lever __entry->length = mr->mr_length; 32958f10ad4SChuck Lever __entry->offset = mr->mr_offset; 33058f10ad4SChuck Lever __entry->nsegs = nsegs; 33158f10ad4SChuck Lever ), 33258f10ad4SChuck Lever 333aba11831SChuck Lever TP_printk("task:%u@%u %u@0x%016llx:0x%08x (%s)", 334aba11831SChuck Lever __entry->task_id, __entry->client_id, 33558f10ad4SChuck Lever __entry->length, (unsigned long long)__entry->offset, 33658f10ad4SChuck Lever __entry->handle, 33758f10ad4SChuck Lever __entry->nents < __entry->nsegs ? "more" : "last" 33858f10ad4SChuck Lever ) 33958f10ad4SChuck Lever ); 34058f10ad4SChuck Lever 34158f10ad4SChuck Lever #define DEFINE_WRCH_EVENT(name) \ 342aba11831SChuck Lever DEFINE_EVENT(xprtrdma_wrch_event, xprtrdma_chunk_##name,\ 34358f10ad4SChuck Lever TP_PROTO( \ 34458f10ad4SChuck Lever const struct rpc_task *task, \ 34558f10ad4SChuck Lever struct rpcrdma_mr *mr, \ 34658f10ad4SChuck Lever int nsegs \ 34758f10ad4SChuck Lever ), \ 34858f10ad4SChuck Lever TP_ARGS(task, mr, nsegs)) 34958f10ad4SChuck Lever 350aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_BIDIRECTIONAL); 351aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_TO_DEVICE); 352aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_FROM_DEVICE); 353aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_NONE); 354aba11831SChuck Lever 355aba11831SChuck Lever #define xprtrdma_show_direction(x) \ 356aba11831SChuck Lever __print_symbolic(x, \ 357aba11831SChuck Lever { DMA_BIDIRECTIONAL, "BIDIR" }, \ 358aba11831SChuck Lever { DMA_TO_DEVICE, "TO_DEVICE" }, \ 359aba11831SChuck Lever { DMA_FROM_DEVICE, "FROM_DEVICE" }, \ 360aba11831SChuck Lever { DMA_NONE, "NONE" }) 361aba11831SChuck Lever 3627703db97SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_mr_class, 3637703db97SChuck Lever TP_PROTO( 3647703db97SChuck Lever const struct rpcrdma_mr *mr 3657703db97SChuck Lever ), 3667703db97SChuck Lever 3677703db97SChuck Lever TP_ARGS(mr), 3687703db97SChuck Lever 3697703db97SChuck Lever TP_STRUCT__entry( 3707703db97SChuck Lever __field(unsigned int, task_id) 3717703db97SChuck Lever __field(unsigned int, client_id) 3727703db97SChuck Lever __field(u32, mr_id) 3737703db97SChuck Lever __field(int, nents) 3747703db97SChuck Lever __field(u32, handle) 3757703db97SChuck Lever __field(u32, length) 3767703db97SChuck Lever __field(u64, offset) 3777703db97SChuck Lever __field(u32, dir) 3787703db97SChuck Lever ), 3797703db97SChuck Lever 3807703db97SChuck Lever TP_fast_assign( 3817703db97SChuck Lever const struct rpcrdma_req *req = mr->mr_req; 3827703db97SChuck Lever const struct rpc_task *task = req->rl_slot.rq_task; 3837703db97SChuck Lever 3847703db97SChuck Lever __entry->task_id = task->tk_pid; 3857703db97SChuck Lever __entry->client_id = task->tk_client->cl_clid; 3867703db97SChuck Lever __entry->mr_id = mr->frwr.fr_mr->res.id; 3877703db97SChuck Lever __entry->nents = mr->mr_nents; 3887703db97SChuck Lever __entry->handle = mr->mr_handle; 3897703db97SChuck Lever __entry->length = mr->mr_length; 3907703db97SChuck Lever __entry->offset = mr->mr_offset; 3917703db97SChuck Lever __entry->dir = mr->mr_dir; 3927703db97SChuck Lever ), 3937703db97SChuck Lever 3947703db97SChuck Lever TP_printk("task:%u@%u mr.id=%u nents=%d %u@0x%016llx:0x%08x (%s)", 3957703db97SChuck Lever __entry->task_id, __entry->client_id, 3967703db97SChuck Lever __entry->mr_id, __entry->nents, __entry->length, 3977703db97SChuck Lever (unsigned long long)__entry->offset, __entry->handle, 3987703db97SChuck Lever xprtrdma_show_direction(__entry->dir) 3997703db97SChuck Lever ) 4007703db97SChuck Lever ); 4017703db97SChuck Lever 4027703db97SChuck Lever #define DEFINE_MR_EVENT(name) \ 4037703db97SChuck Lever DEFINE_EVENT(xprtrdma_mr_class, \ 4047703db97SChuck Lever xprtrdma_mr_##name, \ 4057703db97SChuck Lever TP_PROTO( \ 4067703db97SChuck Lever const struct rpcrdma_mr *mr \ 4077703db97SChuck Lever ), \ 4087703db97SChuck Lever TP_ARGS(mr)) 4097703db97SChuck Lever 4107703db97SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_anonymous_mr_class, 4112937fedeSChuck Lever TP_PROTO( 4122937fedeSChuck Lever const struct rpcrdma_mr *mr 4132937fedeSChuck Lever ), 4142937fedeSChuck Lever 4152937fedeSChuck Lever TP_ARGS(mr), 4162937fedeSChuck Lever 4172937fedeSChuck Lever TP_STRUCT__entry( 41862a89501SChuck Lever __field(u32, mr_id) 41962a89501SChuck Lever __field(int, nents) 4202937fedeSChuck Lever __field(u32, handle) 4212937fedeSChuck Lever __field(u32, length) 4222937fedeSChuck Lever __field(u64, offset) 423aba11831SChuck Lever __field(u32, dir) 4242937fedeSChuck Lever ), 4252937fedeSChuck Lever 4262937fedeSChuck Lever TP_fast_assign( 42762a89501SChuck Lever __entry->mr_id = mr->frwr.fr_mr->res.id; 42862a89501SChuck Lever __entry->nents = mr->mr_nents; 4292937fedeSChuck Lever __entry->handle = mr->mr_handle; 4302937fedeSChuck Lever __entry->length = mr->mr_length; 4312937fedeSChuck Lever __entry->offset = mr->mr_offset; 432aba11831SChuck Lever __entry->dir = mr->mr_dir; 4332937fedeSChuck Lever ), 4342937fedeSChuck Lever 43562a89501SChuck Lever TP_printk("mr.id=%u nents=%d %u@0x%016llx:0x%08x (%s)", 43662a89501SChuck Lever __entry->mr_id, __entry->nents, __entry->length, 437aba11831SChuck Lever (unsigned long long)__entry->offset, __entry->handle, 438aba11831SChuck Lever xprtrdma_show_direction(__entry->dir) 4392937fedeSChuck Lever ) 4402937fedeSChuck Lever ); 4412937fedeSChuck Lever 4427703db97SChuck Lever #define DEFINE_ANON_MR_EVENT(name) \ 4437703db97SChuck Lever DEFINE_EVENT(xprtrdma_anonymous_mr_class, \ 4447703db97SChuck Lever xprtrdma_mr_##name, \ 4452937fedeSChuck Lever TP_PROTO( \ 4462937fedeSChuck Lever const struct rpcrdma_mr *mr \ 4472937fedeSChuck Lever ), \ 4482937fedeSChuck Lever TP_ARGS(mr)) 4492937fedeSChuck Lever 450d11e9346SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_callback_class, 451fc1eb807SChuck Lever TP_PROTO( 452d11e9346SChuck Lever const struct rpcrdma_xprt *r_xprt, 453fc1eb807SChuck Lever const struct rpc_rqst *rqst 454fc1eb807SChuck Lever ), 455fc1eb807SChuck Lever 456d11e9346SChuck Lever TP_ARGS(r_xprt, rqst), 457fc1eb807SChuck Lever 458fc1eb807SChuck Lever TP_STRUCT__entry( 459fc1eb807SChuck Lever __field(u32, xid) 460d11e9346SChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 461d11e9346SChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 462fc1eb807SChuck Lever ), 463fc1eb807SChuck Lever 464fc1eb807SChuck Lever TP_fast_assign( 465fc1eb807SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 466d11e9346SChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 467d11e9346SChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 468fc1eb807SChuck Lever ), 469fc1eb807SChuck Lever 470d11e9346SChuck Lever TP_printk("peer=[%s]:%s xid=0x%08x", 471d11e9346SChuck Lever __get_str(addr), __get_str(port), __entry->xid 472fc1eb807SChuck Lever ) 473fc1eb807SChuck Lever ); 474fc1eb807SChuck Lever 475d11e9346SChuck Lever #define DEFINE_CALLBACK_EVENT(name) \ 476d11e9346SChuck Lever DEFINE_EVENT(xprtrdma_callback_class, \ 477d11e9346SChuck Lever xprtrdma_cb_##name, \ 478fc1eb807SChuck Lever TP_PROTO( \ 479d11e9346SChuck Lever const struct rpcrdma_xprt *r_xprt, \ 480fc1eb807SChuck Lever const struct rpc_rqst *rqst \ 481fc1eb807SChuck Lever ), \ 482d11e9346SChuck Lever TP_ARGS(r_xprt, rqst)) 483fc1eb807SChuck Lever 484b4a7f91cSChuck Lever /** 485b4744e00SChuck Lever ** Connection events 486b4744e00SChuck Lever **/ 487b4744e00SChuck Lever 488f54c870dSChuck Lever TRACE_EVENT(xprtrdma_inline_thresh, 489f54c870dSChuck Lever TP_PROTO( 490745b734cSChuck Lever const struct rpcrdma_ep *ep 491f54c870dSChuck Lever ), 492f54c870dSChuck Lever 493745b734cSChuck Lever TP_ARGS(ep), 494f54c870dSChuck Lever 495f54c870dSChuck Lever TP_STRUCT__entry( 496f54c870dSChuck Lever __field(unsigned int, inline_send) 497f54c870dSChuck Lever __field(unsigned int, inline_recv) 498f54c870dSChuck Lever __field(unsigned int, max_send) 499f54c870dSChuck Lever __field(unsigned int, max_recv) 500745b734cSChuck Lever __array(unsigned char, srcaddr, sizeof(struct sockaddr_in6)) 501745b734cSChuck Lever __array(unsigned char, dstaddr, sizeof(struct sockaddr_in6)) 502f54c870dSChuck Lever ), 503f54c870dSChuck Lever 504f54c870dSChuck Lever TP_fast_assign( 505745b734cSChuck Lever const struct rdma_cm_id *id = ep->re_id; 506f54c870dSChuck Lever 50793aa8e0aSChuck Lever __entry->inline_send = ep->re_inline_send; 50893aa8e0aSChuck Lever __entry->inline_recv = ep->re_inline_recv; 50993aa8e0aSChuck Lever __entry->max_send = ep->re_max_inline_send; 51093aa8e0aSChuck Lever __entry->max_recv = ep->re_max_inline_recv; 511745b734cSChuck Lever memcpy(__entry->srcaddr, &id->route.addr.src_addr, 512745b734cSChuck Lever sizeof(struct sockaddr_in6)); 513745b734cSChuck Lever memcpy(__entry->dstaddr, &id->route.addr.dst_addr, 514745b734cSChuck Lever sizeof(struct sockaddr_in6)); 515f54c870dSChuck Lever ), 516f54c870dSChuck Lever 517745b734cSChuck Lever TP_printk("%pISpc -> %pISpc neg send/recv=%u/%u, calc send/recv=%u/%u", 518745b734cSChuck Lever __entry->srcaddr, __entry->dstaddr, 519f54c870dSChuck Lever __entry->inline_send, __entry->inline_recv, 520f54c870dSChuck Lever __entry->max_send, __entry->max_recv 521f54c870dSChuck Lever ) 522f54c870dSChuck Lever ); 523f54c870dSChuck Lever 5247b020f17SChuck Lever DEFINE_CONN_EVENT(connect); 5257b020f17SChuck Lever DEFINE_CONN_EVENT(disconnect); 5267b020f17SChuck Lever 5277b020f17SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_op_inject_dsc); 5287b020f17SChuck Lever 5297b020f17SChuck Lever TRACE_EVENT(xprtrdma_op_connect, 530b4744e00SChuck Lever TP_PROTO( 531b4744e00SChuck Lever const struct rpcrdma_xprt *r_xprt, 5327b020f17SChuck Lever unsigned long delay 533b4744e00SChuck Lever ), 534b4744e00SChuck Lever 5357b020f17SChuck Lever TP_ARGS(r_xprt, delay), 536b4744e00SChuck Lever 537b4744e00SChuck Lever TP_STRUCT__entry( 538b4744e00SChuck Lever __field(const void *, r_xprt) 5397b020f17SChuck Lever __field(unsigned long, delay) 540b4744e00SChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 541b4744e00SChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 542b4744e00SChuck Lever ), 543b4744e00SChuck Lever 544b4744e00SChuck Lever TP_fast_assign( 545b4744e00SChuck Lever __entry->r_xprt = r_xprt; 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 5517b020f17SChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p delay=%lu", 5527b020f17SChuck Lever __get_str(addr), __get_str(port), __entry->r_xprt, 5537b020f17SChuck Lever __entry->delay 554b4744e00SChuck Lever ) 555b4744e00SChuck Lever ); 556b4744e00SChuck Lever 557b4744e00SChuck Lever 558675dd90aSChuck Lever TRACE_EVENT(xprtrdma_op_set_cto, 559675dd90aSChuck Lever TP_PROTO( 560675dd90aSChuck Lever const struct rpcrdma_xprt *r_xprt, 561675dd90aSChuck Lever unsigned long connect, 562675dd90aSChuck Lever unsigned long reconnect 563675dd90aSChuck Lever ), 564675dd90aSChuck Lever 565675dd90aSChuck Lever TP_ARGS(r_xprt, connect, reconnect), 566675dd90aSChuck Lever 567675dd90aSChuck Lever TP_STRUCT__entry( 568675dd90aSChuck Lever __field(const void *, r_xprt) 569675dd90aSChuck Lever __field(unsigned long, connect) 570675dd90aSChuck Lever __field(unsigned long, reconnect) 571675dd90aSChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 572675dd90aSChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 573675dd90aSChuck Lever ), 574675dd90aSChuck Lever 575675dd90aSChuck Lever TP_fast_assign( 576675dd90aSChuck Lever __entry->r_xprt = r_xprt; 577675dd90aSChuck Lever __entry->connect = connect; 578675dd90aSChuck Lever __entry->reconnect = reconnect; 579675dd90aSChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 580675dd90aSChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 581675dd90aSChuck Lever ), 582675dd90aSChuck Lever 583675dd90aSChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: connect=%lu reconnect=%lu", 584675dd90aSChuck Lever __get_str(addr), __get_str(port), __entry->r_xprt, 585675dd90aSChuck Lever __entry->connect / HZ, __entry->reconnect / HZ 586675dd90aSChuck Lever ) 587675dd90aSChuck Lever ); 588675dd90aSChuck Lever 589f9521d53SChuck Lever TRACE_EVENT(xprtrdma_qp_event, 590643cf323SChuck Lever TP_PROTO( 591745b734cSChuck Lever const struct rpcrdma_ep *ep, 592643cf323SChuck Lever const struct ib_event *event 593643cf323SChuck Lever ), 594643cf323SChuck Lever 595745b734cSChuck Lever TP_ARGS(ep, event), 596643cf323SChuck Lever 597643cf323SChuck Lever TP_STRUCT__entry( 598745b734cSChuck Lever __field(unsigned long, event) 599643cf323SChuck Lever __string(name, event->device->name) 600745b734cSChuck Lever __array(unsigned char, srcaddr, sizeof(struct sockaddr_in6)) 601745b734cSChuck Lever __array(unsigned char, dstaddr, sizeof(struct sockaddr_in6)) 602643cf323SChuck Lever ), 603643cf323SChuck Lever 604643cf323SChuck Lever TP_fast_assign( 605745b734cSChuck Lever const struct rdma_cm_id *id = ep->re_id; 606745b734cSChuck Lever 607643cf323SChuck Lever __entry->event = event->event; 608643cf323SChuck Lever __assign_str(name, event->device->name); 609745b734cSChuck Lever memcpy(__entry->srcaddr, &id->route.addr.src_addr, 610745b734cSChuck Lever sizeof(struct sockaddr_in6)); 611745b734cSChuck Lever memcpy(__entry->dstaddr, &id->route.addr.dst_addr, 612745b734cSChuck Lever sizeof(struct sockaddr_in6)); 613643cf323SChuck Lever ), 614643cf323SChuck Lever 615745b734cSChuck Lever TP_printk("%pISpc -> %pISpc device=%s %s (%lu)", 616745b734cSChuck Lever __entry->srcaddr, __entry->dstaddr, __get_str(name), 617745b734cSChuck Lever rdma_show_ib_event(__entry->event), __entry->event 618643cf323SChuck Lever ) 619643cf323SChuck Lever ); 620643cf323SChuck Lever 621b4744e00SChuck Lever /** 622ab03eff5SChuck Lever ** Call events 623ab03eff5SChuck Lever **/ 624ab03eff5SChuck Lever 6251c443effSChuck Lever TRACE_EVENT(xprtrdma_createmrs, 6261c443effSChuck Lever TP_PROTO( 6271c443effSChuck Lever const struct rpcrdma_xprt *r_xprt, 6281c443effSChuck Lever unsigned int count 6291c443effSChuck Lever ), 6301c443effSChuck Lever 6311c443effSChuck Lever TP_ARGS(r_xprt, count), 6321c443effSChuck Lever 6331c443effSChuck Lever TP_STRUCT__entry( 6341c443effSChuck Lever __field(const void *, r_xprt) 6356dc6ec9eSChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 6366dc6ec9eSChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 6371c443effSChuck Lever __field(unsigned int, count) 6381c443effSChuck Lever ), 6391c443effSChuck Lever 6401c443effSChuck Lever TP_fast_assign( 6411c443effSChuck Lever __entry->r_xprt = r_xprt; 6421c443effSChuck Lever __entry->count = count; 6436dc6ec9eSChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 6446dc6ec9eSChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 6451c443effSChuck Lever ), 6461c443effSChuck Lever 6476dc6ec9eSChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: created %u MRs", 6486dc6ec9eSChuck Lever __get_str(addr), __get_str(port), __entry->r_xprt, 6496dc6ec9eSChuck Lever __entry->count 6506dc6ec9eSChuck Lever ) 6516dc6ec9eSChuck Lever ); 6526dc6ec9eSChuck Lever 6530307cdecSChuck Lever TRACE_EVENT(xprtrdma_nomrs_err, 6546dc6ec9eSChuck Lever TP_PROTO( 6550307cdecSChuck Lever const struct rpcrdma_xprt *r_xprt, 6566dc6ec9eSChuck Lever const struct rpcrdma_req *req 6576dc6ec9eSChuck Lever ), 6586dc6ec9eSChuck Lever 6590307cdecSChuck Lever TP_ARGS(r_xprt, req), 6606dc6ec9eSChuck Lever 6616dc6ec9eSChuck Lever TP_STRUCT__entry( 6626dc6ec9eSChuck Lever __field(unsigned int, task_id) 6636dc6ec9eSChuck Lever __field(unsigned int, client_id) 6640307cdecSChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 6650307cdecSChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 6666dc6ec9eSChuck Lever ), 6676dc6ec9eSChuck Lever 6686dc6ec9eSChuck Lever TP_fast_assign( 6696dc6ec9eSChuck Lever const struct rpc_rqst *rqst = &req->rl_slot; 6706dc6ec9eSChuck Lever 6716dc6ec9eSChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 6726dc6ec9eSChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 6730307cdecSChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 6740307cdecSChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 6756dc6ec9eSChuck Lever ), 6766dc6ec9eSChuck Lever 6770307cdecSChuck Lever TP_printk("peer=[%s]:%s task:%u@%u", 6780307cdecSChuck Lever __get_str(addr), __get_str(port), 6790307cdecSChuck Lever __entry->task_id, __entry->client_id 6803b39f52aSChuck Lever ) 6813b39f52aSChuck Lever ); 6821c443effSChuck Lever 683aba11831SChuck Lever DEFINE_RDCH_EVENT(read); 684aba11831SChuck Lever DEFINE_WRCH_EVENT(write); 685aba11831SChuck Lever DEFINE_WRCH_EVENT(reply); 68658f10ad4SChuck Lever 687ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch); 688614f3c96SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch_pullup); 689614f3c96SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch_mapped); 690ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_readch); 691ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_areadch); 692ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_writech); 693ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_replych); 694ab03eff5SChuck Lever 695ab03eff5SChuck Lever #define xprtrdma_show_chunktype(x) \ 696ab03eff5SChuck Lever __print_symbolic(x, \ 697ab03eff5SChuck Lever { rpcrdma_noch, "inline" }, \ 698614f3c96SChuck Lever { rpcrdma_noch_pullup, "pullup" }, \ 699614f3c96SChuck Lever { rpcrdma_noch_mapped, "mapped" }, \ 700ab03eff5SChuck Lever { rpcrdma_readch, "read list" }, \ 701ab03eff5SChuck Lever { rpcrdma_areadch, "*read list" }, \ 702ab03eff5SChuck Lever { rpcrdma_writech, "write list" }, \ 703ab03eff5SChuck Lever { rpcrdma_replych, "reply chunk" }) 704ab03eff5SChuck Lever 705ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_marshal, 706ab03eff5SChuck Lever TP_PROTO( 7071310051cSChuck Lever const struct rpcrdma_req *req, 708ab03eff5SChuck Lever unsigned int rtype, 709ab03eff5SChuck Lever unsigned int wtype 710ab03eff5SChuck Lever ), 711ab03eff5SChuck Lever 7121310051cSChuck Lever TP_ARGS(req, rtype, wtype), 713ab03eff5SChuck Lever 714ab03eff5SChuck Lever TP_STRUCT__entry( 715ab03eff5SChuck Lever __field(unsigned int, task_id) 716ab03eff5SChuck Lever __field(unsigned int, client_id) 717ab03eff5SChuck Lever __field(u32, xid) 718ab03eff5SChuck Lever __field(unsigned int, hdrlen) 719ab03eff5SChuck Lever __field(unsigned int, headlen) 720ab03eff5SChuck Lever __field(unsigned int, pagelen) 721ab03eff5SChuck Lever __field(unsigned int, taillen) 722ab03eff5SChuck Lever __field(unsigned int, rtype) 723ab03eff5SChuck Lever __field(unsigned int, wtype) 724ab03eff5SChuck Lever ), 725ab03eff5SChuck Lever 726ab03eff5SChuck Lever TP_fast_assign( 7271310051cSChuck Lever const struct rpc_rqst *rqst = &req->rl_slot; 7281310051cSChuck Lever 729ab03eff5SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 730ab03eff5SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 731ab03eff5SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 7321310051cSChuck Lever __entry->hdrlen = req->rl_hdrbuf.len; 733ab03eff5SChuck Lever __entry->headlen = rqst->rq_snd_buf.head[0].iov_len; 734ab03eff5SChuck Lever __entry->pagelen = rqst->rq_snd_buf.page_len; 735ab03eff5SChuck Lever __entry->taillen = rqst->rq_snd_buf.tail[0].iov_len; 736ab03eff5SChuck Lever __entry->rtype = rtype; 737ab03eff5SChuck Lever __entry->wtype = wtype; 738ab03eff5SChuck Lever ), 739ab03eff5SChuck Lever 740ab03eff5SChuck Lever TP_printk("task:%u@%u xid=0x%08x: hdr=%u xdr=%u/%u/%u %s/%s", 741ab03eff5SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 742ab03eff5SChuck Lever __entry->hdrlen, 743ab03eff5SChuck Lever __entry->headlen, __entry->pagelen, __entry->taillen, 744ab03eff5SChuck Lever xprtrdma_show_chunktype(__entry->rtype), 745ab03eff5SChuck Lever xprtrdma_show_chunktype(__entry->wtype) 746ab03eff5SChuck Lever ) 747ab03eff5SChuck Lever ); 748ab03eff5SChuck Lever 74917e4c443SChuck Lever TRACE_EVENT(xprtrdma_marshal_failed, 75017e4c443SChuck Lever TP_PROTO(const struct rpc_rqst *rqst, 75117e4c443SChuck Lever int ret 75217e4c443SChuck Lever ), 75317e4c443SChuck Lever 75417e4c443SChuck Lever TP_ARGS(rqst, ret), 75517e4c443SChuck Lever 75617e4c443SChuck Lever TP_STRUCT__entry( 75717e4c443SChuck Lever __field(unsigned int, task_id) 75817e4c443SChuck Lever __field(unsigned int, client_id) 75917e4c443SChuck Lever __field(u32, xid) 76017e4c443SChuck Lever __field(int, ret) 76117e4c443SChuck Lever ), 76217e4c443SChuck Lever 76317e4c443SChuck Lever TP_fast_assign( 76417e4c443SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 76517e4c443SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 76617e4c443SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 76717e4c443SChuck Lever __entry->ret = ret; 76817e4c443SChuck Lever ), 76917e4c443SChuck Lever 77017e4c443SChuck Lever TP_printk("task:%u@%u xid=0x%08x: ret=%d", 77117e4c443SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 77217e4c443SChuck Lever __entry->ret 77317e4c443SChuck Lever ) 77417e4c443SChuck Lever ); 77517e4c443SChuck Lever 77605eb06d8SChuck Lever TRACE_EVENT(xprtrdma_prepsend_failed, 77705eb06d8SChuck Lever TP_PROTO(const struct rpc_rqst *rqst, 77805eb06d8SChuck Lever int ret 77905eb06d8SChuck Lever ), 78005eb06d8SChuck Lever 78105eb06d8SChuck Lever TP_ARGS(rqst, ret), 78205eb06d8SChuck Lever 78305eb06d8SChuck Lever TP_STRUCT__entry( 78405eb06d8SChuck Lever __field(unsigned int, task_id) 78505eb06d8SChuck Lever __field(unsigned int, client_id) 78605eb06d8SChuck Lever __field(u32, xid) 78705eb06d8SChuck Lever __field(int, ret) 78805eb06d8SChuck Lever ), 78905eb06d8SChuck Lever 79005eb06d8SChuck Lever TP_fast_assign( 79105eb06d8SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 79205eb06d8SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 79305eb06d8SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 79405eb06d8SChuck Lever __entry->ret = ret; 79505eb06d8SChuck Lever ), 79605eb06d8SChuck Lever 79705eb06d8SChuck Lever TP_printk("task:%u@%u xid=0x%08x: ret=%d", 79805eb06d8SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 79905eb06d8SChuck Lever __entry->ret 80005eb06d8SChuck Lever ) 80105eb06d8SChuck Lever ); 80205eb06d8SChuck Lever 803ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_post_send, 804ab03eff5SChuck Lever TP_PROTO( 805bdb2ce82SChuck Lever const struct rpcrdma_req *req 806ab03eff5SChuck Lever ), 807ab03eff5SChuck Lever 808bdb2ce82SChuck Lever TP_ARGS(req), 809ab03eff5SChuck Lever 810ab03eff5SChuck Lever TP_STRUCT__entry( 811b2e7467fSChuck Lever __field(u32, cq_id) 812b2e7467fSChuck Lever __field(int, completion_id) 8130c77668dSChuck Lever __field(unsigned int, task_id) 8140c77668dSChuck Lever __field(unsigned int, client_id) 815ab03eff5SChuck Lever __field(int, num_sge) 816470443e0SChuck Lever __field(int, signaled) 817ab03eff5SChuck Lever ), 818ab03eff5SChuck Lever 819ab03eff5SChuck Lever TP_fast_assign( 8200c77668dSChuck Lever const struct rpc_rqst *rqst = &req->rl_slot; 821b2e7467fSChuck Lever const struct rpcrdma_sendctx *sc = req->rl_sendctx; 8220c77668dSChuck Lever 823b2e7467fSChuck Lever __entry->cq_id = sc->sc_cid.ci_queue_id; 824b2e7467fSChuck Lever __entry->completion_id = sc->sc_cid.ci_completion_id; 8250c77668dSChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 82610694ac9SChuck Lever __entry->client_id = rqst->rq_task->tk_client ? 82710694ac9SChuck Lever rqst->rq_task->tk_client->cl_clid : -1; 828dc15c3d5SChuck Lever __entry->num_sge = req->rl_wr.num_sge; 829dc15c3d5SChuck Lever __entry->signaled = req->rl_wr.send_flags & IB_SEND_SIGNALED; 830ab03eff5SChuck Lever ), 831ab03eff5SChuck Lever 832b2e7467fSChuck Lever TP_printk("task:%u@%u cq.id=%u cid=%d (%d SGE%s) %s", 8330c77668dSChuck Lever __entry->task_id, __entry->client_id, 834b2e7467fSChuck Lever __entry->cq_id, __entry->completion_id, 835b2e7467fSChuck Lever __entry->num_sge, (__entry->num_sge == 1 ? "" : "s"), 836bdb2ce82SChuck Lever (__entry->signaled ? "signaled" : "") 837ab03eff5SChuck Lever ) 838ab03eff5SChuck Lever ); 839ab03eff5SChuck Lever 840b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_post_recv, 841b4a7f91cSChuck Lever TP_PROTO( 8422dfdcd88SChuck Lever const struct rpcrdma_rep *rep 843b4a7f91cSChuck Lever ), 844b4a7f91cSChuck Lever 8452dfdcd88SChuck Lever TP_ARGS(rep), 846b4a7f91cSChuck Lever 847b4a7f91cSChuck Lever TP_STRUCT__entry( 848af5865d2SChuck Lever __field(u32, cq_id) 849af5865d2SChuck Lever __field(int, completion_id) 850b4a7f91cSChuck Lever ), 851b4a7f91cSChuck Lever 852b4a7f91cSChuck Lever TP_fast_assign( 853af5865d2SChuck Lever __entry->cq_id = rep->rr_cid.ci_queue_id; 854af5865d2SChuck Lever __entry->completion_id = rep->rr_cid.ci_completion_id; 855b4a7f91cSChuck Lever ), 856b4a7f91cSChuck Lever 857af5865d2SChuck Lever TP_printk("cq.id=%d cid=%d", 858af5865d2SChuck Lever __entry->cq_id, __entry->completion_id 859b4a7f91cSChuck Lever ) 860b4a7f91cSChuck Lever ); 861b4a7f91cSChuck Lever 8627c8d9e7cSChuck Lever TRACE_EVENT(xprtrdma_post_recvs, 8637c8d9e7cSChuck Lever TP_PROTO( 8647c8d9e7cSChuck Lever const struct rpcrdma_xprt *r_xprt, 8657c8d9e7cSChuck Lever unsigned int count, 8667c8d9e7cSChuck Lever int status 8677c8d9e7cSChuck Lever ), 8687c8d9e7cSChuck Lever 8697c8d9e7cSChuck Lever TP_ARGS(r_xprt, count, status), 8707c8d9e7cSChuck Lever 8717c8d9e7cSChuck Lever TP_STRUCT__entry( 8727c8d9e7cSChuck Lever __field(const void *, r_xprt) 8737c8d9e7cSChuck Lever __field(unsigned int, count) 8747c8d9e7cSChuck Lever __field(int, status) 8757c8d9e7cSChuck Lever __field(int, posted) 8767c8d9e7cSChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 8777c8d9e7cSChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 8787c8d9e7cSChuck Lever ), 8797c8d9e7cSChuck Lever 8807c8d9e7cSChuck Lever TP_fast_assign( 8817c8d9e7cSChuck Lever __entry->r_xprt = r_xprt; 8827c8d9e7cSChuck Lever __entry->count = count; 8837c8d9e7cSChuck Lever __entry->status = status; 884e28ce900SChuck Lever __entry->posted = r_xprt->rx_ep->re_receive_count; 8857c8d9e7cSChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 8867c8d9e7cSChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 8877c8d9e7cSChuck Lever ), 8887c8d9e7cSChuck Lever 8897c8d9e7cSChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: %u new recvs, %d active (rc %d)", 8907c8d9e7cSChuck Lever __get_str(addr), __get_str(port), __entry->r_xprt, 8917c8d9e7cSChuck Lever __entry->count, __entry->posted, __entry->status 892ab03eff5SChuck Lever ) 893ab03eff5SChuck Lever ); 894ab03eff5SChuck Lever 89536a55edfSChuck Lever TRACE_EVENT(xprtrdma_post_linv_err, 8964b93dab3SChuck Lever TP_PROTO( 8974b93dab3SChuck Lever const struct rpcrdma_req *req, 8984b93dab3SChuck Lever int status 8994b93dab3SChuck Lever ), 9004b93dab3SChuck Lever 9014b93dab3SChuck Lever TP_ARGS(req, status), 9024b93dab3SChuck Lever 9034b93dab3SChuck Lever TP_STRUCT__entry( 90436a55edfSChuck Lever __field(unsigned int, task_id) 90536a55edfSChuck Lever __field(unsigned int, client_id) 9064b93dab3SChuck Lever __field(int, status) 9074b93dab3SChuck Lever ), 9084b93dab3SChuck Lever 9094b93dab3SChuck Lever TP_fast_assign( 91036a55edfSChuck Lever const struct rpc_task *task = req->rl_slot.rq_task; 91136a55edfSChuck Lever 91236a55edfSChuck Lever __entry->task_id = task->tk_pid; 91336a55edfSChuck Lever __entry->client_id = task->tk_client->cl_clid; 9144b93dab3SChuck Lever __entry->status = status; 9154b93dab3SChuck Lever ), 9164b93dab3SChuck Lever 91736a55edfSChuck Lever TP_printk("task:%u@%u status=%d", 91836a55edfSChuck Lever __entry->task_id, __entry->client_id, __entry->status 9194b93dab3SChuck Lever ) 9204b93dab3SChuck Lever ); 9214b93dab3SChuck Lever 922ab03eff5SChuck Lever /** 923ab03eff5SChuck Lever ** Completion events 924ab03eff5SChuck Lever **/ 925ab03eff5SChuck Lever 926c30f259aSChuck Lever DEFINE_RECEIVE_COMPLETION_EVENT(xprtrdma_wc_receive); 927c30f259aSChuck Lever 928b2e7467fSChuck Lever DEFINE_COMPLETION_EVENT(xprtrdma_wc_send); 929*6b147ea7SChuck Lever DEFINE_MR_COMPLETION_EVENT(xprtrdma_wc_fastreg); 930*6b147ea7SChuck Lever DEFINE_MR_COMPLETION_EVENT(xprtrdma_wc_li); 931*6b147ea7SChuck Lever DEFINE_MR_COMPLETION_EVENT(xprtrdma_wc_li_wake); 932*6b147ea7SChuck Lever DEFINE_MR_COMPLETION_EVENT(xprtrdma_wc_li_done); 9332937fedeSChuck Lever 93453b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_alloc, 93553b2c1cbSChuck Lever TP_PROTO( 93653b2c1cbSChuck Lever const struct rpcrdma_mr *mr, 93753b2c1cbSChuck Lever int rc 93853b2c1cbSChuck Lever ), 93953b2c1cbSChuck Lever 94053b2c1cbSChuck Lever TP_ARGS(mr, rc), 94153b2c1cbSChuck Lever 94253b2c1cbSChuck Lever TP_STRUCT__entry( 94362a89501SChuck Lever __field(u32, mr_id) 94453b2c1cbSChuck Lever __field(int, rc) 94553b2c1cbSChuck Lever ), 94653b2c1cbSChuck Lever 94753b2c1cbSChuck Lever TP_fast_assign( 94862a89501SChuck Lever __entry->mr_id = mr->frwr.fr_mr->res.id; 94953b2c1cbSChuck Lever __entry->rc = rc; 95053b2c1cbSChuck Lever ), 95153b2c1cbSChuck Lever 95262a89501SChuck Lever TP_printk("mr.id=%u: rc=%d", 95362a89501SChuck Lever __entry->mr_id, __entry->rc 95453b2c1cbSChuck Lever ) 95553b2c1cbSChuck Lever ); 95653b2c1cbSChuck Lever 95753b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_dereg, 95853b2c1cbSChuck Lever TP_PROTO( 95953b2c1cbSChuck Lever const struct rpcrdma_mr *mr, 96053b2c1cbSChuck Lever int rc 96153b2c1cbSChuck Lever ), 96253b2c1cbSChuck Lever 96353b2c1cbSChuck Lever TP_ARGS(mr, rc), 96453b2c1cbSChuck Lever 96553b2c1cbSChuck Lever TP_STRUCT__entry( 96662a89501SChuck Lever __field(u32, mr_id) 96762a89501SChuck Lever __field(int, nents) 96853b2c1cbSChuck Lever __field(u32, handle) 96953b2c1cbSChuck Lever __field(u32, length) 97053b2c1cbSChuck Lever __field(u64, offset) 97153b2c1cbSChuck Lever __field(u32, dir) 97253b2c1cbSChuck Lever __field(int, rc) 97353b2c1cbSChuck Lever ), 97453b2c1cbSChuck Lever 97553b2c1cbSChuck Lever TP_fast_assign( 97662a89501SChuck Lever __entry->mr_id = mr->frwr.fr_mr->res.id; 97762a89501SChuck Lever __entry->nents = mr->mr_nents; 97853b2c1cbSChuck Lever __entry->handle = mr->mr_handle; 97953b2c1cbSChuck Lever __entry->length = mr->mr_length; 98053b2c1cbSChuck Lever __entry->offset = mr->mr_offset; 98153b2c1cbSChuck Lever __entry->dir = mr->mr_dir; 98253b2c1cbSChuck Lever __entry->rc = rc; 98353b2c1cbSChuck Lever ), 98453b2c1cbSChuck Lever 98562a89501SChuck Lever TP_printk("mr.id=%u nents=%d %u@0x%016llx:0x%08x (%s): rc=%d", 98662a89501SChuck Lever __entry->mr_id, __entry->nents, __entry->length, 98753b2c1cbSChuck Lever (unsigned long long)__entry->offset, __entry->handle, 98853b2c1cbSChuck Lever xprtrdma_show_direction(__entry->dir), 98953b2c1cbSChuck Lever __entry->rc 99053b2c1cbSChuck Lever ) 99153b2c1cbSChuck Lever ); 99253b2c1cbSChuck Lever 99353b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_sgerr, 99453b2c1cbSChuck Lever TP_PROTO( 99553b2c1cbSChuck Lever const struct rpcrdma_mr *mr, 99653b2c1cbSChuck Lever int sg_nents 99753b2c1cbSChuck Lever ), 99853b2c1cbSChuck Lever 99953b2c1cbSChuck Lever TP_ARGS(mr, sg_nents), 100053b2c1cbSChuck Lever 100153b2c1cbSChuck Lever TP_STRUCT__entry( 100262a89501SChuck Lever __field(u32, mr_id) 100353b2c1cbSChuck Lever __field(u64, addr) 100453b2c1cbSChuck Lever __field(u32, dir) 100553b2c1cbSChuck Lever __field(int, nents) 100653b2c1cbSChuck Lever ), 100753b2c1cbSChuck Lever 100853b2c1cbSChuck Lever TP_fast_assign( 100962a89501SChuck Lever __entry->mr_id = mr->frwr.fr_mr->res.id; 101053b2c1cbSChuck Lever __entry->addr = mr->mr_sg->dma_address; 101153b2c1cbSChuck Lever __entry->dir = mr->mr_dir; 101253b2c1cbSChuck Lever __entry->nents = sg_nents; 101353b2c1cbSChuck Lever ), 101453b2c1cbSChuck Lever 101562a89501SChuck Lever TP_printk("mr.id=%u DMA addr=0x%llx (%s) sg_nents=%d", 101662a89501SChuck Lever __entry->mr_id, __entry->addr, 101753b2c1cbSChuck Lever xprtrdma_show_direction(__entry->dir), 101853b2c1cbSChuck Lever __entry->nents 101953b2c1cbSChuck Lever ) 102053b2c1cbSChuck Lever ); 102153b2c1cbSChuck Lever 102253b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_maperr, 102353b2c1cbSChuck Lever TP_PROTO( 102453b2c1cbSChuck Lever const struct rpcrdma_mr *mr, 102553b2c1cbSChuck Lever int num_mapped 102653b2c1cbSChuck Lever ), 102753b2c1cbSChuck Lever 102853b2c1cbSChuck Lever TP_ARGS(mr, num_mapped), 102953b2c1cbSChuck Lever 103053b2c1cbSChuck Lever TP_STRUCT__entry( 103162a89501SChuck Lever __field(u32, mr_id) 103253b2c1cbSChuck Lever __field(u64, addr) 103353b2c1cbSChuck Lever __field(u32, dir) 103453b2c1cbSChuck Lever __field(int, num_mapped) 103553b2c1cbSChuck Lever __field(int, nents) 103653b2c1cbSChuck Lever ), 103753b2c1cbSChuck Lever 103853b2c1cbSChuck Lever TP_fast_assign( 103962a89501SChuck Lever __entry->mr_id = mr->frwr.fr_mr->res.id; 104053b2c1cbSChuck Lever __entry->addr = mr->mr_sg->dma_address; 104153b2c1cbSChuck Lever __entry->dir = mr->mr_dir; 104253b2c1cbSChuck Lever __entry->num_mapped = num_mapped; 104353b2c1cbSChuck Lever __entry->nents = mr->mr_nents; 104453b2c1cbSChuck Lever ), 104553b2c1cbSChuck Lever 104662a89501SChuck Lever TP_printk("mr.id=%u DMA addr=0x%llx (%s) nents=%d of %d", 104762a89501SChuck Lever __entry->mr_id, __entry->addr, 104853b2c1cbSChuck Lever xprtrdma_show_direction(__entry->dir), 104953b2c1cbSChuck Lever __entry->num_mapped, __entry->nents 105053b2c1cbSChuck Lever ) 105153b2c1cbSChuck Lever ); 105253b2c1cbSChuck Lever 10534ddd0fc3SChuck Lever DEFINE_MR_EVENT(fastreg); 1054d379eaa8SChuck Lever DEFINE_MR_EVENT(localinv); 10554ddd0fc3SChuck Lever DEFINE_MR_EVENT(reminv); 1056d379eaa8SChuck Lever DEFINE_MR_EVENT(map); 10577703db97SChuck Lever 10587703db97SChuck Lever DEFINE_ANON_MR_EVENT(unmap); 105958f10ad4SChuck Lever 106053b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_dma_maperr, 106153b2c1cbSChuck Lever TP_PROTO( 106253b2c1cbSChuck Lever u64 addr 106353b2c1cbSChuck Lever ), 106453b2c1cbSChuck Lever 106553b2c1cbSChuck Lever TP_ARGS(addr), 106653b2c1cbSChuck Lever 106753b2c1cbSChuck Lever TP_STRUCT__entry( 106853b2c1cbSChuck Lever __field(u64, addr) 106953b2c1cbSChuck Lever ), 107053b2c1cbSChuck Lever 107153b2c1cbSChuck Lever TP_fast_assign( 107253b2c1cbSChuck Lever __entry->addr = addr; 107353b2c1cbSChuck Lever ), 107453b2c1cbSChuck Lever 107553b2c1cbSChuck Lever TP_printk("dma addr=0x%llx\n", __entry->addr) 107653b2c1cbSChuck Lever ); 107753b2c1cbSChuck Lever 1078b4a7f91cSChuck Lever /** 1079b4a7f91cSChuck Lever ** Reply events 1080b4a7f91cSChuck Lever **/ 1081b4a7f91cSChuck Lever 1082b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_reply, 1083b4a7f91cSChuck Lever TP_PROTO( 1084b4a7f91cSChuck Lever const struct rpc_task *task, 1085b4a7f91cSChuck Lever const struct rpcrdma_rep *rep, 1086b4a7f91cSChuck Lever unsigned int credits 1087b4a7f91cSChuck Lever ), 1088b4a7f91cSChuck Lever 108903ffd924SChuck Lever TP_ARGS(task, rep, credits), 1090b4a7f91cSChuck Lever 1091b4a7f91cSChuck Lever TP_STRUCT__entry( 1092b4a7f91cSChuck Lever __field(unsigned int, task_id) 1093b4a7f91cSChuck Lever __field(unsigned int, client_id) 1094b4a7f91cSChuck Lever __field(u32, xid) 1095b4a7f91cSChuck Lever __field(unsigned int, credits) 1096b4a7f91cSChuck Lever ), 1097b4a7f91cSChuck Lever 1098b4a7f91cSChuck Lever TP_fast_assign( 1099b4a7f91cSChuck Lever __entry->task_id = task->tk_pid; 1100b4a7f91cSChuck Lever __entry->client_id = task->tk_client->cl_clid; 1101b4a7f91cSChuck Lever __entry->xid = be32_to_cpu(rep->rr_xid); 1102b4a7f91cSChuck Lever __entry->credits = credits; 1103b4a7f91cSChuck Lever ), 1104b4a7f91cSChuck Lever 110503ffd924SChuck Lever TP_printk("task:%u@%u xid=0x%08x credits=%u", 1106b4a7f91cSChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 110703ffd924SChuck Lever __entry->credits 1108b4a7f91cSChuck Lever ) 1109b4a7f91cSChuck Lever ); 1110b4a7f91cSChuck Lever 11113a9568feSChuck Lever DEFINE_REPLY_EVENT(vers); 11123a9568feSChuck Lever DEFINE_REPLY_EVENT(rqst); 11133a9568feSChuck Lever DEFINE_REPLY_EVENT(short); 11143a9568feSChuck Lever DEFINE_REPLY_EVENT(hdr); 1115b4a7f91cSChuck Lever 11163821e232SChuck Lever TRACE_EVENT(xprtrdma_err_vers, 1117e48f083eSChuck Lever TP_PROTO( 11183821e232SChuck Lever const struct rpc_rqst *rqst, 11193821e232SChuck Lever __be32 *min, 11203821e232SChuck Lever __be32 *max 1121e48f083eSChuck Lever ), 1122e48f083eSChuck Lever 11233821e232SChuck Lever TP_ARGS(rqst, min, max), 1124e48f083eSChuck Lever 1125e48f083eSChuck Lever TP_STRUCT__entry( 1126e48f083eSChuck Lever __field(unsigned int, task_id) 1127e48f083eSChuck Lever __field(unsigned int, client_id) 11283821e232SChuck Lever __field(u32, xid) 11293821e232SChuck Lever __field(u32, min) 11303821e232SChuck Lever __field(u32, max) 11313821e232SChuck Lever ), 11323821e232SChuck Lever 11333821e232SChuck Lever TP_fast_assign( 11343821e232SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 11353821e232SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 11363821e232SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 11373821e232SChuck Lever __entry->min = be32_to_cpup(min); 11383821e232SChuck Lever __entry->max = be32_to_cpup(max); 11393821e232SChuck Lever ), 11403821e232SChuck Lever 11413821e232SChuck Lever TP_printk("task:%u@%u xid=0x%08x versions=[%u, %u]", 11423821e232SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 11433821e232SChuck Lever __entry->min, __entry->max 11443821e232SChuck Lever ) 11453821e232SChuck Lever ); 11463821e232SChuck Lever 11473821e232SChuck Lever TRACE_EVENT(xprtrdma_err_chunk, 11483821e232SChuck Lever TP_PROTO( 11493821e232SChuck Lever const struct rpc_rqst *rqst 11503821e232SChuck Lever ), 11513821e232SChuck Lever 11523821e232SChuck Lever TP_ARGS(rqst), 11533821e232SChuck Lever 11543821e232SChuck Lever TP_STRUCT__entry( 11553821e232SChuck Lever __field(unsigned int, task_id) 11563821e232SChuck Lever __field(unsigned int, client_id) 1157e48f083eSChuck Lever __field(u32, xid) 1158e48f083eSChuck Lever ), 1159e48f083eSChuck Lever 1160e48f083eSChuck Lever TP_fast_assign( 11613821e232SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 11623821e232SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 11633821e232SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 1164e48f083eSChuck Lever ), 1165e48f083eSChuck Lever 11663821e232SChuck Lever TP_printk("task:%u@%u xid=0x%08x", 11673821e232SChuck Lever __entry->task_id, __entry->client_id, __entry->xid 1168e48f083eSChuck Lever ) 1169e48f083eSChuck Lever ); 1170e48f083eSChuck Lever 11713821e232SChuck Lever TRACE_EVENT(xprtrdma_err_unrecognized, 11723821e232SChuck Lever TP_PROTO( 11733821e232SChuck Lever const struct rpc_rqst *rqst, 11743821e232SChuck Lever __be32 *procedure 11753821e232SChuck Lever ), 11763821e232SChuck Lever 11773821e232SChuck Lever TP_ARGS(rqst, procedure), 11783821e232SChuck Lever 11793821e232SChuck Lever TP_STRUCT__entry( 11803821e232SChuck Lever __field(unsigned int, task_id) 11813821e232SChuck Lever __field(unsigned int, client_id) 11823821e232SChuck Lever __field(u32, xid) 11833821e232SChuck Lever __field(u32, procedure) 11843821e232SChuck Lever ), 11853821e232SChuck Lever 11863821e232SChuck Lever TP_fast_assign( 11873821e232SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 11883821e232SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 11893821e232SChuck Lever __entry->procedure = be32_to_cpup(procedure); 11903821e232SChuck Lever ), 11913821e232SChuck Lever 11923821e232SChuck Lever TP_printk("task:%u@%u xid=0x%08x procedure=%u", 11933821e232SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 11943821e232SChuck Lever __entry->procedure 11953821e232SChuck Lever ) 11963821e232SChuck Lever ); 1197e48f083eSChuck Lever 1198e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_fixup, 1199e11b7c96SChuck Lever TP_PROTO( 1200e11b7c96SChuck Lever const struct rpc_rqst *rqst, 1201d4957f01SChuck Lever unsigned long fixup 1202e11b7c96SChuck Lever ), 1203e11b7c96SChuck Lever 1204d4957f01SChuck Lever TP_ARGS(rqst, fixup), 1205e11b7c96SChuck Lever 1206e11b7c96SChuck Lever TP_STRUCT__entry( 1207e11b7c96SChuck Lever __field(unsigned int, task_id) 1208e11b7c96SChuck Lever __field(unsigned int, client_id) 1209d4957f01SChuck Lever __field(unsigned long, fixup) 1210d4957f01SChuck Lever __field(size_t, headlen) 1211d4957f01SChuck Lever __field(unsigned int, pagelen) 1212d4957f01SChuck Lever __field(size_t, taillen) 1213e11b7c96SChuck Lever ), 1214e11b7c96SChuck Lever 1215e11b7c96SChuck Lever TP_fast_assign( 1216e11b7c96SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 1217e11b7c96SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 1218d4957f01SChuck Lever __entry->fixup = fixup; 1219d4957f01SChuck Lever __entry->headlen = rqst->rq_rcv_buf.head[0].iov_len; 1220d4957f01SChuck Lever __entry->pagelen = rqst->rq_rcv_buf.page_len; 1221d4957f01SChuck Lever __entry->taillen = rqst->rq_rcv_buf.tail[0].iov_len; 1222e11b7c96SChuck Lever ), 1223e11b7c96SChuck Lever 1224d4957f01SChuck Lever TP_printk("task:%u@%u fixup=%lu xdr=%zu/%u/%zu", 1225d4957f01SChuck Lever __entry->task_id, __entry->client_id, __entry->fixup, 1226d4957f01SChuck Lever __entry->headlen, __entry->pagelen, __entry->taillen 1227e11b7c96SChuck Lever ) 1228e11b7c96SChuck Lever ); 1229e11b7c96SChuck Lever 1230e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_decode_seg, 1231e11b7c96SChuck Lever TP_PROTO( 1232e11b7c96SChuck Lever u32 handle, 1233e11b7c96SChuck Lever u32 length, 1234e11b7c96SChuck Lever u64 offset 1235e11b7c96SChuck Lever ), 1236e11b7c96SChuck Lever 1237e11b7c96SChuck Lever TP_ARGS(handle, length, offset), 1238e11b7c96SChuck Lever 1239e11b7c96SChuck Lever TP_STRUCT__entry( 1240e11b7c96SChuck Lever __field(u32, handle) 1241e11b7c96SChuck Lever __field(u32, length) 1242e11b7c96SChuck Lever __field(u64, offset) 1243e11b7c96SChuck Lever ), 1244e11b7c96SChuck Lever 1245e11b7c96SChuck Lever TP_fast_assign( 1246e11b7c96SChuck Lever __entry->handle = handle; 1247e11b7c96SChuck Lever __entry->length = length; 1248e11b7c96SChuck Lever __entry->offset = offset; 1249e11b7c96SChuck Lever ), 1250e11b7c96SChuck Lever 1251e11b7c96SChuck Lever TP_printk("%u@0x%016llx:0x%08x", 1252e11b7c96SChuck Lever __entry->length, (unsigned long long)__entry->offset, 1253e11b7c96SChuck Lever __entry->handle 1254e11b7c96SChuck Lever ) 1255e11b7c96SChuck Lever ); 1256e11b7c96SChuck Lever 12578e24e191SChuck Lever TRACE_EVENT(xprtrdma_mrs_zap, 12588e24e191SChuck Lever TP_PROTO( 12598e24e191SChuck Lever const struct rpc_task *task 12608e24e191SChuck Lever ), 12618e24e191SChuck Lever 12628e24e191SChuck Lever TP_ARGS(task), 12638e24e191SChuck Lever 12648e24e191SChuck Lever TP_STRUCT__entry( 12658e24e191SChuck Lever __field(unsigned int, task_id) 12668e24e191SChuck Lever __field(unsigned int, client_id) 12678e24e191SChuck Lever ), 12688e24e191SChuck Lever 12698e24e191SChuck Lever TP_fast_assign( 12708e24e191SChuck Lever __entry->task_id = task->tk_pid; 12718e24e191SChuck Lever __entry->client_id = task->tk_client->cl_clid; 12728e24e191SChuck Lever ), 12738e24e191SChuck Lever 12748e24e191SChuck Lever TP_printk("task:%u@%u", 12758e24e191SChuck Lever __entry->task_id, __entry->client_id 12768e24e191SChuck Lever ) 12778e24e191SChuck Lever ); 12788e24e191SChuck Lever 1279fc1eb807SChuck Lever /** 1280fc1eb807SChuck Lever ** Callback events 1281fc1eb807SChuck Lever **/ 1282fc1eb807SChuck Lever 1283fc1eb807SChuck Lever TRACE_EVENT(xprtrdma_cb_setup, 1284fc1eb807SChuck Lever TP_PROTO( 1285fc1eb807SChuck Lever const struct rpcrdma_xprt *r_xprt, 1286fc1eb807SChuck Lever unsigned int reqs 1287fc1eb807SChuck Lever ), 1288fc1eb807SChuck Lever 1289fc1eb807SChuck Lever TP_ARGS(r_xprt, reqs), 1290fc1eb807SChuck Lever 1291fc1eb807SChuck Lever TP_STRUCT__entry( 1292fc1eb807SChuck Lever __field(const void *, r_xprt) 1293fc1eb807SChuck Lever __field(unsigned int, reqs) 1294fc1eb807SChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 1295fc1eb807SChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 1296fc1eb807SChuck Lever ), 1297fc1eb807SChuck Lever 1298fc1eb807SChuck Lever TP_fast_assign( 1299fc1eb807SChuck Lever __entry->r_xprt = r_xprt; 1300fc1eb807SChuck Lever __entry->reqs = reqs; 1301fc1eb807SChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 1302fc1eb807SChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 1303fc1eb807SChuck Lever ), 1304fc1eb807SChuck Lever 1305fc1eb807SChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: %u reqs", 1306fc1eb807SChuck Lever __get_str(addr), __get_str(port), 1307fc1eb807SChuck Lever __entry->r_xprt, __entry->reqs 1308fc1eb807SChuck Lever ) 1309fc1eb807SChuck Lever ); 1310fc1eb807SChuck Lever 1311d11e9346SChuck Lever DEFINE_CALLBACK_EVENT(call); 1312d11e9346SChuck Lever DEFINE_CALLBACK_EVENT(reply); 131307e10308SChuck Lever 131498895edbSChuck Lever /** 131598895edbSChuck Lever ** Server-side RPC/RDMA events 131698895edbSChuck Lever **/ 131798895edbSChuck Lever 1318e979a173SChuck Lever DECLARE_EVENT_CLASS(svcrdma_accept_class, 1319e979a173SChuck Lever TP_PROTO( 1320e979a173SChuck Lever const struct svcxprt_rdma *rdma, 1321e979a173SChuck Lever long status 1322e979a173SChuck Lever ), 1323e979a173SChuck Lever 1324e979a173SChuck Lever TP_ARGS(rdma, status), 1325e979a173SChuck Lever 1326e979a173SChuck Lever TP_STRUCT__entry( 1327e979a173SChuck Lever __field(long, status) 1328e979a173SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1329e979a173SChuck Lever ), 1330e979a173SChuck Lever 1331e979a173SChuck Lever TP_fast_assign( 1332e979a173SChuck Lever __entry->status = status; 1333e979a173SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1334e979a173SChuck Lever ), 1335e979a173SChuck Lever 1336e979a173SChuck Lever TP_printk("addr=%s status=%ld", 1337e979a173SChuck Lever __get_str(addr), __entry->status 1338e979a173SChuck Lever ) 1339e979a173SChuck Lever ); 1340e979a173SChuck Lever 1341e979a173SChuck Lever #define DEFINE_ACCEPT_EVENT(name) \ 1342e979a173SChuck Lever DEFINE_EVENT(svcrdma_accept_class, svcrdma_##name##_err, \ 1343e979a173SChuck Lever TP_PROTO( \ 1344e979a173SChuck Lever const struct svcxprt_rdma *rdma, \ 1345e979a173SChuck Lever long status \ 1346e979a173SChuck Lever ), \ 1347e979a173SChuck Lever TP_ARGS(rdma, status)) 1348e979a173SChuck Lever 1349e979a173SChuck Lever DEFINE_ACCEPT_EVENT(pd); 1350e979a173SChuck Lever DEFINE_ACCEPT_EVENT(qp); 1351e979a173SChuck Lever DEFINE_ACCEPT_EVENT(fabric); 1352e979a173SChuck Lever DEFINE_ACCEPT_EVENT(initdepth); 1353e979a173SChuck Lever DEFINE_ACCEPT_EVENT(accept); 1354e979a173SChuck Lever 135598895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_MSG); 135698895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_NOMSG); 135798895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_MSGP); 135898895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_DONE); 135998895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_ERROR); 136098895edbSChuck Lever 136198895edbSChuck Lever #define show_rpcrdma_proc(x) \ 136298895edbSChuck Lever __print_symbolic(x, \ 136398895edbSChuck Lever { RDMA_MSG, "RDMA_MSG" }, \ 136498895edbSChuck Lever { RDMA_NOMSG, "RDMA_NOMSG" }, \ 136598895edbSChuck Lever { RDMA_MSGP, "RDMA_MSGP" }, \ 136698895edbSChuck Lever { RDMA_DONE, "RDMA_DONE" }, \ 136798895edbSChuck Lever { RDMA_ERROR, "RDMA_ERROR" }) 136898895edbSChuck Lever 136998895edbSChuck Lever TRACE_EVENT(svcrdma_decode_rqst, 137098895edbSChuck Lever TP_PROTO( 1371007140eeSChuck Lever const struct svc_rdma_recv_ctxt *ctxt, 137298895edbSChuck Lever __be32 *p, 137398895edbSChuck Lever unsigned int hdrlen 137498895edbSChuck Lever ), 137598895edbSChuck Lever 1376007140eeSChuck Lever TP_ARGS(ctxt, p, hdrlen), 137798895edbSChuck Lever 137898895edbSChuck Lever TP_STRUCT__entry( 1379007140eeSChuck Lever __field(u32, cq_id) 1380007140eeSChuck Lever __field(int, completion_id) 138198895edbSChuck Lever __field(u32, xid) 138298895edbSChuck Lever __field(u32, vers) 138398895edbSChuck Lever __field(u32, proc) 138498895edbSChuck Lever __field(u32, credits) 138598895edbSChuck Lever __field(unsigned int, hdrlen) 138698895edbSChuck Lever ), 138798895edbSChuck Lever 138898895edbSChuck Lever TP_fast_assign( 1389007140eeSChuck Lever __entry->cq_id = ctxt->rc_cid.ci_queue_id; 1390007140eeSChuck Lever __entry->completion_id = ctxt->rc_cid.ci_completion_id; 139198895edbSChuck Lever __entry->xid = be32_to_cpup(p++); 139298895edbSChuck Lever __entry->vers = be32_to_cpup(p++); 139398895edbSChuck Lever __entry->credits = be32_to_cpup(p++); 139498895edbSChuck Lever __entry->proc = be32_to_cpup(p); 139598895edbSChuck Lever __entry->hdrlen = hdrlen; 139698895edbSChuck Lever ), 139798895edbSChuck Lever 1398007140eeSChuck Lever TP_printk("cq.id=%u cid=%d xid=0x%08x vers=%u credits=%u proc=%s hdrlen=%u", 1399007140eeSChuck Lever __entry->cq_id, __entry->completion_id, 140098895edbSChuck Lever __entry->xid, __entry->vers, __entry->credits, 140198895edbSChuck Lever show_rpcrdma_proc(__entry->proc), __entry->hdrlen) 140298895edbSChuck Lever ); 140398895edbSChuck Lever 140427ce6294SChuck Lever TRACE_EVENT(svcrdma_decode_short_err, 140598895edbSChuck Lever TP_PROTO( 1406007140eeSChuck Lever const struct svc_rdma_recv_ctxt *ctxt, 140798895edbSChuck Lever unsigned int hdrlen 140898895edbSChuck Lever ), 140998895edbSChuck Lever 1410007140eeSChuck Lever TP_ARGS(ctxt, hdrlen), 141198895edbSChuck Lever 141298895edbSChuck Lever TP_STRUCT__entry( 1413007140eeSChuck Lever __field(u32, cq_id) 1414007140eeSChuck Lever __field(int, completion_id) 141598895edbSChuck Lever __field(unsigned int, hdrlen) 141698895edbSChuck Lever ), 141798895edbSChuck Lever 141898895edbSChuck Lever TP_fast_assign( 1419007140eeSChuck Lever __entry->cq_id = ctxt->rc_cid.ci_queue_id; 1420007140eeSChuck Lever __entry->completion_id = ctxt->rc_cid.ci_completion_id; 142198895edbSChuck Lever __entry->hdrlen = hdrlen; 142298895edbSChuck Lever ), 142398895edbSChuck Lever 1424007140eeSChuck Lever TP_printk("cq.id=%u cid=%d hdrlen=%u", 1425007140eeSChuck Lever __entry->cq_id, __entry->completion_id, 1426007140eeSChuck Lever __entry->hdrlen) 142798895edbSChuck Lever ); 142898895edbSChuck Lever 142998895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_badreq_event, 143098895edbSChuck Lever TP_PROTO( 1431007140eeSChuck Lever const struct svc_rdma_recv_ctxt *ctxt, 143298895edbSChuck Lever __be32 *p 143398895edbSChuck Lever ), 143498895edbSChuck Lever 1435007140eeSChuck Lever TP_ARGS(ctxt, p), 143698895edbSChuck Lever 143798895edbSChuck Lever TP_STRUCT__entry( 1438007140eeSChuck Lever __field(u32, cq_id) 1439007140eeSChuck Lever __field(int, completion_id) 144098895edbSChuck Lever __field(u32, xid) 144198895edbSChuck Lever __field(u32, vers) 144298895edbSChuck Lever __field(u32, proc) 144398895edbSChuck Lever __field(u32, credits) 144498895edbSChuck Lever ), 144598895edbSChuck Lever 144698895edbSChuck Lever TP_fast_assign( 1447007140eeSChuck Lever __entry->cq_id = ctxt->rc_cid.ci_queue_id; 1448007140eeSChuck Lever __entry->completion_id = ctxt->rc_cid.ci_completion_id; 144998895edbSChuck Lever __entry->xid = be32_to_cpup(p++); 145098895edbSChuck Lever __entry->vers = be32_to_cpup(p++); 145198895edbSChuck Lever __entry->credits = be32_to_cpup(p++); 145298895edbSChuck Lever __entry->proc = be32_to_cpup(p); 145398895edbSChuck Lever ), 145498895edbSChuck Lever 1455007140eeSChuck Lever TP_printk("cq.id=%u cid=%d xid=0x%08x vers=%u credits=%u proc=%u", 1456007140eeSChuck Lever __entry->cq_id, __entry->completion_id, 145798895edbSChuck Lever __entry->xid, __entry->vers, __entry->credits, __entry->proc) 145898895edbSChuck Lever ); 145998895edbSChuck Lever 146098895edbSChuck Lever #define DEFINE_BADREQ_EVENT(name) \ 146127ce6294SChuck Lever DEFINE_EVENT(svcrdma_badreq_event, \ 146227ce6294SChuck Lever svcrdma_decode_##name##_err, \ 146398895edbSChuck Lever TP_PROTO( \ 1464007140eeSChuck Lever const struct svc_rdma_recv_ctxt *ctxt, \ 146598895edbSChuck Lever __be32 *p \ 146698895edbSChuck Lever ), \ 1467007140eeSChuck Lever TP_ARGS(ctxt, p)) 146898895edbSChuck Lever 146998895edbSChuck Lever DEFINE_BADREQ_EVENT(badvers); 147098895edbSChuck Lever DEFINE_BADREQ_EVENT(drop); 147198895edbSChuck Lever DEFINE_BADREQ_EVENT(badproc); 147298895edbSChuck Lever DEFINE_BADREQ_EVENT(parse); 147398895edbSChuck Lever 14746911f3e1SChuck Lever TRACE_EVENT(svcrdma_encode_wseg, 14756911f3e1SChuck Lever TP_PROTO( 14766911f3e1SChuck Lever const struct svc_rdma_send_ctxt *ctxt, 14776911f3e1SChuck Lever u32 segno, 14786911f3e1SChuck Lever u32 handle, 14796911f3e1SChuck Lever u32 length, 14806911f3e1SChuck Lever u64 offset 14816911f3e1SChuck Lever ), 14826911f3e1SChuck Lever 14836911f3e1SChuck Lever TP_ARGS(ctxt, segno, handle, length, offset), 14846911f3e1SChuck Lever 14856911f3e1SChuck Lever TP_STRUCT__entry( 14866911f3e1SChuck Lever __field(u32, cq_id) 14876911f3e1SChuck Lever __field(int, completion_id) 14886911f3e1SChuck Lever __field(u32, segno) 14896911f3e1SChuck Lever __field(u32, handle) 14906911f3e1SChuck Lever __field(u32, length) 14916911f3e1SChuck Lever __field(u64, offset) 14926911f3e1SChuck Lever ), 14936911f3e1SChuck Lever 14946911f3e1SChuck Lever TP_fast_assign( 14956911f3e1SChuck Lever __entry->cq_id = ctxt->sc_cid.ci_queue_id; 14966911f3e1SChuck Lever __entry->completion_id = ctxt->sc_cid.ci_completion_id; 14976911f3e1SChuck Lever __entry->segno = segno; 14986911f3e1SChuck Lever __entry->handle = handle; 14996911f3e1SChuck Lever __entry->length = length; 15006911f3e1SChuck Lever __entry->offset = offset; 15016911f3e1SChuck Lever ), 15026911f3e1SChuck Lever 15036911f3e1SChuck Lever TP_printk("cq_id=%u cid=%d segno=%u %u@0x%016llx:0x%08x", 15046911f3e1SChuck Lever __entry->cq_id, __entry->completion_id, 15056911f3e1SChuck Lever __entry->segno, __entry->length, 15066911f3e1SChuck Lever (unsigned long long)__entry->offset, __entry->handle 15076911f3e1SChuck Lever ) 15086911f3e1SChuck Lever ); 15096911f3e1SChuck Lever 151078147ca8SChuck Lever TRACE_EVENT(svcrdma_decode_rseg, 151178147ca8SChuck Lever TP_PROTO( 151278147ca8SChuck Lever const struct rpc_rdma_cid *cid, 151378147ca8SChuck Lever const struct svc_rdma_chunk *chunk, 151478147ca8SChuck Lever const struct svc_rdma_segment *segment 151578147ca8SChuck Lever ), 151678147ca8SChuck Lever 151778147ca8SChuck Lever TP_ARGS(cid, chunk, segment), 151878147ca8SChuck Lever 151978147ca8SChuck Lever TP_STRUCT__entry( 152078147ca8SChuck Lever __field(u32, cq_id) 152178147ca8SChuck Lever __field(int, completion_id) 152278147ca8SChuck Lever __field(u32, segno) 152378147ca8SChuck Lever __field(u32, position) 152478147ca8SChuck Lever __field(u32, handle) 152578147ca8SChuck Lever __field(u32, length) 152678147ca8SChuck Lever __field(u64, offset) 152778147ca8SChuck Lever ), 152878147ca8SChuck Lever 152978147ca8SChuck Lever TP_fast_assign( 153078147ca8SChuck Lever __entry->cq_id = cid->ci_queue_id; 153178147ca8SChuck Lever __entry->completion_id = cid->ci_completion_id; 153278147ca8SChuck Lever __entry->segno = chunk->ch_segcount; 153378147ca8SChuck Lever __entry->position = chunk->ch_position; 153478147ca8SChuck Lever __entry->handle = segment->rs_handle; 153578147ca8SChuck Lever __entry->length = segment->rs_length; 153678147ca8SChuck Lever __entry->offset = segment->rs_offset; 153778147ca8SChuck Lever ), 153878147ca8SChuck Lever 153978147ca8SChuck Lever TP_printk("cq_id=%u cid=%d segno=%u position=%u %u@0x%016llx:0x%08x", 154078147ca8SChuck Lever __entry->cq_id, __entry->completion_id, 154178147ca8SChuck Lever __entry->segno, __entry->position, __entry->length, 154278147ca8SChuck Lever (unsigned long long)__entry->offset, __entry->handle 154378147ca8SChuck Lever ) 154478147ca8SChuck Lever ); 154578147ca8SChuck Lever 154678147ca8SChuck Lever TRACE_EVENT(svcrdma_decode_wseg, 154778147ca8SChuck Lever TP_PROTO( 154878147ca8SChuck Lever const struct rpc_rdma_cid *cid, 154978147ca8SChuck Lever const struct svc_rdma_chunk *chunk, 155078147ca8SChuck Lever u32 segno 155178147ca8SChuck Lever ), 155278147ca8SChuck Lever 155378147ca8SChuck Lever TP_ARGS(cid, chunk, segno), 155478147ca8SChuck Lever 155578147ca8SChuck Lever TP_STRUCT__entry( 155678147ca8SChuck Lever __field(u32, cq_id) 155778147ca8SChuck Lever __field(int, completion_id) 155878147ca8SChuck Lever __field(u32, segno) 155978147ca8SChuck Lever __field(u32, handle) 156078147ca8SChuck Lever __field(u32, length) 156178147ca8SChuck Lever __field(u64, offset) 156278147ca8SChuck Lever ), 156378147ca8SChuck Lever 156478147ca8SChuck Lever TP_fast_assign( 156578147ca8SChuck Lever const struct svc_rdma_segment *segment = 156678147ca8SChuck Lever &chunk->ch_segments[segno]; 156778147ca8SChuck Lever 156878147ca8SChuck Lever __entry->cq_id = cid->ci_queue_id; 156978147ca8SChuck Lever __entry->completion_id = cid->ci_completion_id; 157078147ca8SChuck Lever __entry->segno = segno; 157178147ca8SChuck Lever __entry->handle = segment->rs_handle; 157278147ca8SChuck Lever __entry->length = segment->rs_length; 157378147ca8SChuck Lever __entry->offset = segment->rs_offset; 157478147ca8SChuck Lever ), 157578147ca8SChuck Lever 157678147ca8SChuck Lever TP_printk("cq_id=%u cid=%d segno=%u %u@0x%016llx:0x%08x", 157778147ca8SChuck Lever __entry->cq_id, __entry->completion_id, 157878147ca8SChuck Lever __entry->segno, __entry->length, 157978147ca8SChuck Lever (unsigned long long)__entry->offset, __entry->handle 158078147ca8SChuck Lever ) 158178147ca8SChuck Lever ); 158278147ca8SChuck Lever 158398895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_error_event, 158498895edbSChuck Lever TP_PROTO( 158598895edbSChuck Lever __be32 xid 158698895edbSChuck Lever ), 158798895edbSChuck Lever 158898895edbSChuck Lever TP_ARGS(xid), 158998895edbSChuck Lever 159098895edbSChuck Lever TP_STRUCT__entry( 159198895edbSChuck Lever __field(u32, xid) 159298895edbSChuck Lever ), 159398895edbSChuck Lever 159498895edbSChuck Lever TP_fast_assign( 159598895edbSChuck Lever __entry->xid = be32_to_cpu(xid); 159698895edbSChuck Lever ), 159798895edbSChuck Lever 159898895edbSChuck Lever TP_printk("xid=0x%08x", 159998895edbSChuck Lever __entry->xid 160098895edbSChuck Lever ) 160198895edbSChuck Lever ); 160298895edbSChuck Lever 160398895edbSChuck Lever #define DEFINE_ERROR_EVENT(name) \ 160498895edbSChuck Lever DEFINE_EVENT(svcrdma_error_event, svcrdma_err_##name, \ 160598895edbSChuck Lever TP_PROTO( \ 160698895edbSChuck Lever __be32 xid \ 160798895edbSChuck Lever ), \ 160898895edbSChuck Lever TP_ARGS(xid)) 160998895edbSChuck Lever 161098895edbSChuck Lever DEFINE_ERROR_EVENT(vers); 161198895edbSChuck Lever DEFINE_ERROR_EVENT(chunk); 161298895edbSChuck Lever 1613bd2abef3SChuck Lever /** 1614bd2abef3SChuck Lever ** Server-side RDMA API events 1615bd2abef3SChuck Lever **/ 1616bd2abef3SChuck Lever 1617832b2cb9SChuck Lever DECLARE_EVENT_CLASS(svcrdma_dma_map_class, 1618bd2abef3SChuck Lever TP_PROTO( 1619bd2abef3SChuck Lever const struct svcxprt_rdma *rdma, 1620832b2cb9SChuck Lever u64 dma_addr, 1621832b2cb9SChuck Lever u32 length 1622bd2abef3SChuck Lever ), 1623bd2abef3SChuck Lever 1624832b2cb9SChuck Lever TP_ARGS(rdma, dma_addr, length), 1625bd2abef3SChuck Lever 1626bd2abef3SChuck Lever TP_STRUCT__entry( 1627832b2cb9SChuck Lever __field(u64, dma_addr) 1628832b2cb9SChuck Lever __field(u32, length) 1629bd2abef3SChuck Lever __string(device, rdma->sc_cm_id->device->name) 1630bd2abef3SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1631bd2abef3SChuck Lever ), 1632bd2abef3SChuck Lever 1633bd2abef3SChuck Lever TP_fast_assign( 1634832b2cb9SChuck Lever __entry->dma_addr = dma_addr; 1635832b2cb9SChuck Lever __entry->length = length; 1636bd2abef3SChuck Lever __assign_str(device, rdma->sc_cm_id->device->name); 1637bd2abef3SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1638bd2abef3SChuck Lever ), 1639bd2abef3SChuck Lever 1640832b2cb9SChuck Lever TP_printk("addr=%s device=%s dma_addr=%llu length=%u", 1641832b2cb9SChuck Lever __get_str(addr), __get_str(device), 1642832b2cb9SChuck Lever __entry->dma_addr, __entry->length 1643bd2abef3SChuck Lever ) 1644bd2abef3SChuck Lever ); 1645bd2abef3SChuck Lever 1646832b2cb9SChuck Lever #define DEFINE_SVC_DMA_EVENT(name) \ 1647832b2cb9SChuck Lever DEFINE_EVENT(svcrdma_dma_map_class, svcrdma_##name, \ 1648832b2cb9SChuck Lever TP_PROTO( \ 1649832b2cb9SChuck Lever const struct svcxprt_rdma *rdma,\ 1650832b2cb9SChuck Lever u64 dma_addr, \ 1651832b2cb9SChuck Lever u32 length \ 1652832b2cb9SChuck Lever ), \ 1653832b2cb9SChuck Lever TP_ARGS(rdma, dma_addr, length)) 1654832b2cb9SChuck Lever 1655832b2cb9SChuck Lever DEFINE_SVC_DMA_EVENT(dma_map_page); 16562371bcc0SChuck Lever DEFINE_SVC_DMA_EVENT(dma_map_err); 1657832b2cb9SChuck Lever DEFINE_SVC_DMA_EVENT(dma_unmap_page); 1658832b2cb9SChuck Lever 16592abfbe7eSChuck Lever TRACE_EVENT(svcrdma_dma_map_rw_err, 1660bd2abef3SChuck Lever TP_PROTO( 1661bd2abef3SChuck Lever const struct svcxprt_rdma *rdma, 16622abfbe7eSChuck Lever unsigned int nents, 1663bd2abef3SChuck Lever int status 1664bd2abef3SChuck Lever ), 1665bd2abef3SChuck Lever 16662abfbe7eSChuck Lever TP_ARGS(rdma, nents, status), 1667bd2abef3SChuck Lever 1668bd2abef3SChuck Lever TP_STRUCT__entry( 1669bd2abef3SChuck Lever __field(int, status) 16702abfbe7eSChuck Lever __field(unsigned int, nents) 1671bd2abef3SChuck Lever __string(device, rdma->sc_cm_id->device->name) 1672bd2abef3SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1673bd2abef3SChuck Lever ), 1674bd2abef3SChuck Lever 1675bd2abef3SChuck Lever TP_fast_assign( 1676bd2abef3SChuck Lever __entry->status = status; 16772abfbe7eSChuck Lever __entry->nents = nents; 1678bd2abef3SChuck Lever __assign_str(device, rdma->sc_cm_id->device->name); 1679bd2abef3SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1680bd2abef3SChuck Lever ), 1681bd2abef3SChuck Lever 16822abfbe7eSChuck Lever TP_printk("addr=%s device=%s nents=%u status=%d", 16832abfbe7eSChuck Lever __get_str(addr), __get_str(device), __entry->nents, 16842abfbe7eSChuck Lever __entry->status 1685bd2abef3SChuck Lever ) 1686bd2abef3SChuck Lever ); 1687bd2abef3SChuck Lever 1688f4e53e1cSChuck Lever TRACE_EVENT(svcrdma_no_rwctx_err, 1689f4e53e1cSChuck Lever TP_PROTO( 1690f4e53e1cSChuck Lever const struct svcxprt_rdma *rdma, 1691f4e53e1cSChuck Lever unsigned int num_sges 1692f4e53e1cSChuck Lever ), 1693f4e53e1cSChuck Lever 1694f4e53e1cSChuck Lever TP_ARGS(rdma, num_sges), 1695f4e53e1cSChuck Lever 1696f4e53e1cSChuck Lever TP_STRUCT__entry( 1697f4e53e1cSChuck Lever __field(unsigned int, num_sges) 1698f4e53e1cSChuck Lever __string(device, rdma->sc_cm_id->device->name) 1699f4e53e1cSChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1700f4e53e1cSChuck Lever ), 1701f4e53e1cSChuck Lever 1702f4e53e1cSChuck Lever TP_fast_assign( 1703f4e53e1cSChuck Lever __entry->num_sges = num_sges; 1704f4e53e1cSChuck Lever __assign_str(device, rdma->sc_cm_id->device->name); 1705f4e53e1cSChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1706f4e53e1cSChuck Lever ), 1707f4e53e1cSChuck Lever 1708f4e53e1cSChuck Lever TP_printk("addr=%s device=%s num_sges=%d", 1709f4e53e1cSChuck Lever __get_str(addr), __get_str(device), __entry->num_sges 1710f4e53e1cSChuck Lever ) 1711f4e53e1cSChuck Lever ); 1712f4e53e1cSChuck Lever 17139d200638SChuck Lever TRACE_EVENT(svcrdma_page_overrun_err, 17149d200638SChuck Lever TP_PROTO( 17159d200638SChuck Lever const struct svcxprt_rdma *rdma, 17169d200638SChuck Lever const struct svc_rqst *rqst, 17179d200638SChuck Lever unsigned int pageno 17189d200638SChuck Lever ), 17199d200638SChuck Lever 17209d200638SChuck Lever TP_ARGS(rdma, rqst, pageno), 17219d200638SChuck Lever 17229d200638SChuck Lever TP_STRUCT__entry( 17239d200638SChuck Lever __field(unsigned int, pageno) 17249d200638SChuck Lever __field(u32, xid) 17259d200638SChuck Lever __string(device, rdma->sc_cm_id->device->name) 17269d200638SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 17279d200638SChuck Lever ), 17289d200638SChuck Lever 17299d200638SChuck Lever TP_fast_assign( 17309d200638SChuck Lever __entry->pageno = pageno; 17319d200638SChuck Lever __entry->xid = __be32_to_cpu(rqst->rq_xid); 17329d200638SChuck Lever __assign_str(device, rdma->sc_cm_id->device->name); 17339d200638SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 17349d200638SChuck Lever ), 17359d200638SChuck Lever 17369d200638SChuck Lever TP_printk("addr=%s device=%s xid=0x%08x pageno=%u", __get_str(addr), 17379d200638SChuck Lever __get_str(device), __entry->xid, __entry->pageno 17389d200638SChuck Lever ) 17399d200638SChuck Lever ); 17409d200638SChuck Lever 1741dbc17acdSChuck Lever TRACE_EVENT(svcrdma_small_wrch_err, 1742dbc17acdSChuck Lever TP_PROTO( 1743dbc17acdSChuck Lever const struct svcxprt_rdma *rdma, 1744dbc17acdSChuck Lever unsigned int remaining, 1745dbc17acdSChuck Lever unsigned int seg_no, 1746dbc17acdSChuck Lever unsigned int num_segs 1747dbc17acdSChuck Lever ), 1748dbc17acdSChuck Lever 1749dbc17acdSChuck Lever TP_ARGS(rdma, remaining, seg_no, num_segs), 1750dbc17acdSChuck Lever 1751dbc17acdSChuck Lever TP_STRUCT__entry( 1752dbc17acdSChuck Lever __field(unsigned int, remaining) 1753dbc17acdSChuck Lever __field(unsigned int, seg_no) 1754dbc17acdSChuck Lever __field(unsigned int, num_segs) 1755dbc17acdSChuck Lever __string(device, rdma->sc_cm_id->device->name) 1756dbc17acdSChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1757dbc17acdSChuck Lever ), 1758dbc17acdSChuck Lever 1759dbc17acdSChuck Lever TP_fast_assign( 1760dbc17acdSChuck Lever __entry->remaining = remaining; 1761dbc17acdSChuck Lever __entry->seg_no = seg_no; 1762dbc17acdSChuck Lever __entry->num_segs = num_segs; 1763dbc17acdSChuck Lever __assign_str(device, rdma->sc_cm_id->device->name); 1764dbc17acdSChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1765dbc17acdSChuck Lever ), 1766dbc17acdSChuck Lever 1767dbc17acdSChuck Lever TP_printk("addr=%s device=%s remaining=%u seg_no=%u num_segs=%u", 1768dbc17acdSChuck Lever __get_str(addr), __get_str(device), __entry->remaining, 1769dbc17acdSChuck Lever __entry->seg_no, __entry->num_segs 1770dbc17acdSChuck Lever ) 1771dbc17acdSChuck Lever ); 1772dbc17acdSChuck Lever 17730dabe948SChuck Lever TRACE_EVENT(svcrdma_send_pullup, 17740dabe948SChuck Lever TP_PROTO( 17759d0b09d5SChuck Lever const struct svc_rdma_send_ctxt *ctxt, 17769d0b09d5SChuck Lever unsigned int msglen 17770dabe948SChuck Lever ), 17780dabe948SChuck Lever 17799d0b09d5SChuck Lever TP_ARGS(ctxt, msglen), 17800dabe948SChuck Lever 17810dabe948SChuck Lever TP_STRUCT__entry( 17829d0b09d5SChuck Lever __field(u32, cq_id) 17839d0b09d5SChuck Lever __field(int, completion_id) 17849d0b09d5SChuck Lever __field(unsigned int, hdrlen) 17859d0b09d5SChuck Lever __field(unsigned int, msglen) 17860dabe948SChuck Lever ), 17870dabe948SChuck Lever 17880dabe948SChuck Lever TP_fast_assign( 17899d0b09d5SChuck Lever __entry->cq_id = ctxt->sc_cid.ci_queue_id; 17909d0b09d5SChuck Lever __entry->completion_id = ctxt->sc_cid.ci_completion_id; 17919d0b09d5SChuck Lever __entry->hdrlen = ctxt->sc_hdrbuf.len, 17929d0b09d5SChuck Lever __entry->msglen = msglen; 17930dabe948SChuck Lever ), 17940dabe948SChuck Lever 17959d0b09d5SChuck Lever TP_printk("cq_id=%u cid=%d hdr=%u msg=%u (total %u)", 17969d0b09d5SChuck Lever __entry->cq_id, __entry->completion_id, 17979d0b09d5SChuck Lever __entry->hdrlen, __entry->msglen, 17989d0b09d5SChuck Lever __entry->hdrlen + __entry->msglen) 17990dabe948SChuck Lever ); 18000dabe948SChuck Lever 18013f8f25c6SChuck Lever TRACE_EVENT(svcrdma_send_err, 1802bd2abef3SChuck Lever TP_PROTO( 1803bd2abef3SChuck Lever const struct svc_rqst *rqst, 1804bd2abef3SChuck Lever int status 1805bd2abef3SChuck Lever ), 1806bd2abef3SChuck Lever 1807bd2abef3SChuck Lever TP_ARGS(rqst, status), 1808bd2abef3SChuck Lever 1809bd2abef3SChuck Lever TP_STRUCT__entry( 1810bd2abef3SChuck Lever __field(int, status) 1811bd2abef3SChuck Lever __field(u32, xid) 1812bd2abef3SChuck Lever __string(addr, rqst->rq_xprt->xpt_remotebuf) 1813bd2abef3SChuck Lever ), 1814bd2abef3SChuck Lever 1815bd2abef3SChuck Lever TP_fast_assign( 1816bd2abef3SChuck Lever __entry->status = status; 1817bd2abef3SChuck Lever __entry->xid = __be32_to_cpu(rqst->rq_xid); 1818bd2abef3SChuck Lever __assign_str(addr, rqst->rq_xprt->xpt_remotebuf); 1819bd2abef3SChuck Lever ), 1820bd2abef3SChuck Lever 18213f8f25c6SChuck Lever TP_printk("addr=%s xid=0x%08x status=%d", __get_str(addr), 1822bd2abef3SChuck Lever __entry->xid, __entry->status 1823bd2abef3SChuck Lever ) 1824bd2abef3SChuck Lever ); 1825bd2abef3SChuck Lever 1826bd2abef3SChuck Lever TRACE_EVENT(svcrdma_post_send, 1827bd2abef3SChuck Lever TP_PROTO( 182817f70f8dSChuck Lever const struct svc_rdma_send_ctxt *ctxt 1829bd2abef3SChuck Lever ), 1830bd2abef3SChuck Lever 183117f70f8dSChuck Lever TP_ARGS(ctxt), 1832bd2abef3SChuck Lever 1833bd2abef3SChuck Lever TP_STRUCT__entry( 183417f70f8dSChuck Lever __field(u32, cq_id) 183517f70f8dSChuck Lever __field(int, completion_id) 1836bd2abef3SChuck Lever __field(unsigned int, num_sge) 1837bd2abef3SChuck Lever __field(u32, inv_rkey) 1838bd2abef3SChuck Lever ), 1839bd2abef3SChuck Lever 1840bd2abef3SChuck Lever TP_fast_assign( 184117f70f8dSChuck Lever const struct ib_send_wr *wr = &ctxt->sc_send_wr; 184217f70f8dSChuck Lever 184317f70f8dSChuck Lever __entry->cq_id = ctxt->sc_cid.ci_queue_id; 184417f70f8dSChuck Lever __entry->completion_id = ctxt->sc_cid.ci_completion_id; 1845bd2abef3SChuck Lever __entry->num_sge = wr->num_sge; 1846bd2abef3SChuck Lever __entry->inv_rkey = (wr->opcode == IB_WR_SEND_WITH_INV) ? 1847bd2abef3SChuck Lever wr->ex.invalidate_rkey : 0; 1848bd2abef3SChuck Lever ), 1849bd2abef3SChuck Lever 185017f70f8dSChuck Lever TP_printk("cq_id=%u cid=%d num_sge=%u inv_rkey=0x%08x", 185117f70f8dSChuck Lever __entry->cq_id, __entry->completion_id, 185217f70f8dSChuck Lever __entry->num_sge, __entry->inv_rkey 1853bd2abef3SChuck Lever ) 1854bd2abef3SChuck Lever ); 1855bd2abef3SChuck Lever 18563ac56c2fSChuck Lever DEFINE_COMPLETION_EVENT(svcrdma_wc_send); 1857bd2abef3SChuck Lever 1858bd2abef3SChuck Lever TRACE_EVENT(svcrdma_post_recv, 1859bd2abef3SChuck Lever TP_PROTO( 18609b3bcf8cSChuck Lever const struct svc_rdma_recv_ctxt *ctxt 1861bd2abef3SChuck Lever ), 1862bd2abef3SChuck Lever 18639b3bcf8cSChuck Lever TP_ARGS(ctxt), 1864bd2abef3SChuck Lever 1865bd2abef3SChuck Lever TP_STRUCT__entry( 18669b3bcf8cSChuck Lever __field(u32, cq_id) 18679b3bcf8cSChuck Lever __field(int, completion_id) 1868bd2abef3SChuck Lever ), 1869bd2abef3SChuck Lever 1870bd2abef3SChuck Lever TP_fast_assign( 18719b3bcf8cSChuck Lever __entry->cq_id = ctxt->rc_cid.ci_queue_id; 18729b3bcf8cSChuck Lever __entry->completion_id = ctxt->rc_cid.ci_completion_id; 1873bd2abef3SChuck Lever ), 1874bd2abef3SChuck Lever 18759b3bcf8cSChuck Lever TP_printk("cq.id=%d cid=%d", 18769b3bcf8cSChuck Lever __entry->cq_id, __entry->completion_id 1877bd2abef3SChuck Lever ) 1878bd2abef3SChuck Lever ); 1879bd2abef3SChuck Lever 1880c30f259aSChuck Lever DEFINE_RECEIVE_COMPLETION_EVENT(svcrdma_wc_receive); 18819b3bcf8cSChuck Lever 18829b3bcf8cSChuck Lever TRACE_EVENT(svcrdma_rq_post_err, 1883bd2abef3SChuck Lever TP_PROTO( 18849b3bcf8cSChuck Lever const struct svcxprt_rdma *rdma, 18859b3bcf8cSChuck Lever int status 1886bd2abef3SChuck Lever ), 1887bd2abef3SChuck Lever 18889b3bcf8cSChuck Lever TP_ARGS(rdma, status), 1889bd2abef3SChuck Lever 1890bd2abef3SChuck Lever TP_STRUCT__entry( 18919b3bcf8cSChuck Lever __field(int, status) 18929b3bcf8cSChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1893bd2abef3SChuck Lever ), 1894bd2abef3SChuck Lever 1895bd2abef3SChuck Lever TP_fast_assign( 18969b3bcf8cSChuck Lever __entry->status = status; 18979b3bcf8cSChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1898bd2abef3SChuck Lever ), 1899bd2abef3SChuck Lever 19009b3bcf8cSChuck Lever TP_printk("addr=%s status=%d", 19019b3bcf8cSChuck Lever __get_str(addr), __entry->status 1902bd2abef3SChuck Lever ) 1903bd2abef3SChuck Lever ); 1904bd2abef3SChuck Lever 1905b704be09SChuck Lever DECLARE_EVENT_CLASS(svcrdma_post_chunk_class, 1906bd2abef3SChuck Lever TP_PROTO( 19076787f0beSChuck Lever const struct rpc_rdma_cid *cid, 1908e28b4fc6SChuck Lever int sqecount 1909bd2abef3SChuck Lever ), 1910bd2abef3SChuck Lever 19116787f0beSChuck Lever TP_ARGS(cid, sqecount), 1912bd2abef3SChuck Lever 1913bd2abef3SChuck Lever TP_STRUCT__entry( 19146787f0beSChuck Lever __field(u32, cq_id) 19156787f0beSChuck Lever __field(int, completion_id) 1916bd2abef3SChuck Lever __field(int, sqecount) 1917bd2abef3SChuck Lever ), 1918bd2abef3SChuck Lever 1919bd2abef3SChuck Lever TP_fast_assign( 19206787f0beSChuck Lever __entry->cq_id = cid->ci_queue_id; 19216787f0beSChuck Lever __entry->completion_id = cid->ci_completion_id; 1922bd2abef3SChuck Lever __entry->sqecount = sqecount; 1923bd2abef3SChuck Lever ), 1924bd2abef3SChuck Lever 19256787f0beSChuck Lever TP_printk("cq.id=%u cid=%d sqecount=%d", 19266787f0beSChuck Lever __entry->cq_id, __entry->completion_id, 19276787f0beSChuck Lever __entry->sqecount 1928bd2abef3SChuck Lever ) 1929bd2abef3SChuck Lever ); 1930bd2abef3SChuck Lever 1931b704be09SChuck Lever #define DEFINE_POST_CHUNK_EVENT(name) \ 1932b704be09SChuck Lever DEFINE_EVENT(svcrdma_post_chunk_class, \ 1933b704be09SChuck Lever svcrdma_post_##name##_chunk, \ 1934b704be09SChuck Lever TP_PROTO( \ 1935b704be09SChuck Lever const struct rpc_rdma_cid *cid, \ 1936b704be09SChuck Lever int sqecount \ 1937b704be09SChuck Lever ), \ 1938b704be09SChuck Lever TP_ARGS(cid, sqecount)) 1939b704be09SChuck Lever 1940b704be09SChuck Lever DEFINE_POST_CHUNK_EVENT(read); 1941b704be09SChuck Lever DEFINE_POST_CHUNK_EVENT(write); 1942b704be09SChuck Lever DEFINE_POST_CHUNK_EVENT(reply); 1943b704be09SChuck Lever 19446787f0beSChuck Lever DEFINE_COMPLETION_EVENT(svcrdma_wc_read); 19456787f0beSChuck Lever DEFINE_COMPLETION_EVENT(svcrdma_wc_write); 1946bd2abef3SChuck Lever 1947bd2abef3SChuck Lever TRACE_EVENT(svcrdma_qp_error, 1948bd2abef3SChuck Lever TP_PROTO( 1949bd2abef3SChuck Lever const struct ib_event *event, 1950bd2abef3SChuck Lever const struct sockaddr *sap 1951bd2abef3SChuck Lever ), 1952bd2abef3SChuck Lever 1953bd2abef3SChuck Lever TP_ARGS(event, sap), 1954bd2abef3SChuck Lever 1955bd2abef3SChuck Lever TP_STRUCT__entry( 1956bd2abef3SChuck Lever __field(unsigned int, event) 1957bd2abef3SChuck Lever __string(device, event->device->name) 1958bd2abef3SChuck Lever __array(__u8, addr, INET6_ADDRSTRLEN + 10) 1959bd2abef3SChuck Lever ), 1960bd2abef3SChuck Lever 1961bd2abef3SChuck Lever TP_fast_assign( 1962bd2abef3SChuck Lever __entry->event = event->event; 1963bd2abef3SChuck Lever __assign_str(device, event->device->name); 1964bd2abef3SChuck Lever snprintf(__entry->addr, sizeof(__entry->addr) - 1, 1965bd2abef3SChuck Lever "%pISpc", sap); 1966bd2abef3SChuck Lever ), 1967bd2abef3SChuck Lever 1968bd2abef3SChuck Lever TP_printk("addr=%s dev=%s event=%s (%u)", 1969bd2abef3SChuck Lever __entry->addr, __get_str(device), 1970bd2abef3SChuck Lever rdma_show_ib_event(__entry->event), __entry->event 1971bd2abef3SChuck Lever ) 1972bd2abef3SChuck Lever ); 1973bd2abef3SChuck Lever 1974bd2abef3SChuck Lever DECLARE_EVENT_CLASS(svcrdma_sendqueue_event, 1975bd2abef3SChuck Lever TP_PROTO( 1976bd2abef3SChuck Lever const struct svcxprt_rdma *rdma 1977bd2abef3SChuck Lever ), 1978bd2abef3SChuck Lever 1979bd2abef3SChuck Lever TP_ARGS(rdma), 1980bd2abef3SChuck Lever 1981bd2abef3SChuck Lever TP_STRUCT__entry( 1982bd2abef3SChuck Lever __field(int, avail) 1983bd2abef3SChuck Lever __field(int, depth) 1984bd2abef3SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1985bd2abef3SChuck Lever ), 1986bd2abef3SChuck Lever 1987bd2abef3SChuck Lever TP_fast_assign( 1988bd2abef3SChuck Lever __entry->avail = atomic_read(&rdma->sc_sq_avail); 1989bd2abef3SChuck Lever __entry->depth = rdma->sc_sq_depth; 1990bd2abef3SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1991bd2abef3SChuck Lever ), 1992bd2abef3SChuck Lever 1993bd2abef3SChuck Lever TP_printk("addr=%s sc_sq_avail=%d/%d", 1994bd2abef3SChuck Lever __get_str(addr), __entry->avail, __entry->depth 1995bd2abef3SChuck Lever ) 1996bd2abef3SChuck Lever ); 1997bd2abef3SChuck Lever 1998bd2abef3SChuck Lever #define DEFINE_SQ_EVENT(name) \ 1999bd2abef3SChuck Lever DEFINE_EVENT(svcrdma_sendqueue_event, svcrdma_sq_##name,\ 2000bd2abef3SChuck Lever TP_PROTO( \ 2001bd2abef3SChuck Lever const struct svcxprt_rdma *rdma \ 2002bd2abef3SChuck Lever ), \ 2003bd2abef3SChuck Lever TP_ARGS(rdma)) 2004bd2abef3SChuck Lever 2005bd2abef3SChuck Lever DEFINE_SQ_EVENT(full); 2006bd2abef3SChuck Lever DEFINE_SQ_EVENT(retry); 2007bd2abef3SChuck Lever 2008e28b4fc6SChuck Lever TRACE_EVENT(svcrdma_sq_post_err, 2009e28b4fc6SChuck Lever TP_PROTO( 2010e28b4fc6SChuck Lever const struct svcxprt_rdma *rdma, 2011e28b4fc6SChuck Lever int status 2012e28b4fc6SChuck Lever ), 2013e28b4fc6SChuck Lever 2014e28b4fc6SChuck Lever TP_ARGS(rdma, status), 2015e28b4fc6SChuck Lever 2016e28b4fc6SChuck Lever TP_STRUCT__entry( 2017e28b4fc6SChuck Lever __field(int, avail) 2018e28b4fc6SChuck Lever __field(int, depth) 2019e28b4fc6SChuck Lever __field(int, status) 2020e28b4fc6SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 2021e28b4fc6SChuck Lever ), 2022e28b4fc6SChuck Lever 2023e28b4fc6SChuck Lever TP_fast_assign( 2024e28b4fc6SChuck Lever __entry->avail = atomic_read(&rdma->sc_sq_avail); 2025e28b4fc6SChuck Lever __entry->depth = rdma->sc_sq_depth; 2026e28b4fc6SChuck Lever __entry->status = status; 2027e28b4fc6SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 2028e28b4fc6SChuck Lever ), 2029e28b4fc6SChuck Lever 2030e28b4fc6SChuck Lever TP_printk("addr=%s sc_sq_avail=%d/%d status=%d", 2031e28b4fc6SChuck Lever __get_str(addr), __entry->avail, __entry->depth, 2032e28b4fc6SChuck Lever __entry->status 2033e28b4fc6SChuck Lever ) 2034e28b4fc6SChuck Lever ); 2035e28b4fc6SChuck Lever 2036e48f083eSChuck Lever #endif /* _TRACE_RPCRDMA_H */ 2037e48f083eSChuck Lever 2038e48f083eSChuck Lever #include <trace/define_trace.h> 2039