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 63c30f259aSChuck Lever DECLARE_EVENT_CLASS(rpcrdma_receive_completion_class, 64c30f259aSChuck Lever TP_PROTO( 65c30f259aSChuck Lever const struct ib_wc *wc, 66c30f259aSChuck Lever const struct rpc_rdma_cid *cid 67c30f259aSChuck Lever ), 68c30f259aSChuck Lever 69c30f259aSChuck Lever TP_ARGS(wc, cid), 70c30f259aSChuck Lever 71c30f259aSChuck Lever TP_STRUCT__entry( 72c30f259aSChuck Lever __field(u32, cq_id) 73c30f259aSChuck Lever __field(int, completion_id) 74c30f259aSChuck Lever __field(u32, received) 75c30f259aSChuck Lever __field(unsigned long, status) 76c30f259aSChuck Lever __field(unsigned int, vendor_err) 77c30f259aSChuck Lever ), 78c30f259aSChuck Lever 79c30f259aSChuck Lever TP_fast_assign( 80c30f259aSChuck Lever __entry->cq_id = cid->ci_queue_id; 81c30f259aSChuck Lever __entry->completion_id = cid->ci_completion_id; 82c30f259aSChuck Lever __entry->status = wc->status; 83c30f259aSChuck Lever if (wc->status) { 84c30f259aSChuck Lever __entry->received = 0; 85c30f259aSChuck Lever __entry->vendor_err = wc->vendor_err; 86c30f259aSChuck Lever } else { 87c30f259aSChuck Lever __entry->received = wc->byte_len; 88c30f259aSChuck Lever __entry->vendor_err = 0; 89c30f259aSChuck Lever } 90c30f259aSChuck Lever ), 91c30f259aSChuck Lever 92c30f259aSChuck Lever TP_printk("cq.id=%u cid=%d status=%s (%lu/0x%x) received=%u", 93c30f259aSChuck Lever __entry->cq_id, __entry->completion_id, 94c30f259aSChuck Lever rdma_show_wc_status(__entry->status), 95c30f259aSChuck Lever __entry->status, __entry->vendor_err, 96c30f259aSChuck Lever __entry->received 97c30f259aSChuck Lever ) 98c30f259aSChuck Lever ); 99c30f259aSChuck Lever 100c30f259aSChuck Lever #define DEFINE_RECEIVE_COMPLETION_EVENT(name) \ 101c30f259aSChuck Lever DEFINE_EVENT(rpcrdma_receive_completion_class, name, \ 102c30f259aSChuck Lever TP_PROTO( \ 103c30f259aSChuck Lever const struct ib_wc *wc, \ 104c30f259aSChuck Lever const struct rpc_rdma_cid *cid \ 105c30f259aSChuck Lever ), \ 106c30f259aSChuck Lever TP_ARGS(wc, cid)) 107c30f259aSChuck Lever 1083a9568feSChuck Lever DECLARE_EVENT_CLASS(xprtrdma_reply_class, 109b4a7f91cSChuck Lever TP_PROTO( 110b4a7f91cSChuck Lever const struct rpcrdma_rep *rep 111b4a7f91cSChuck Lever ), 112b4a7f91cSChuck Lever 113b4a7f91cSChuck Lever TP_ARGS(rep), 114b4a7f91cSChuck Lever 115b4a7f91cSChuck Lever TP_STRUCT__entry( 116b4a7f91cSChuck Lever __field(u32, xid) 117b4a7f91cSChuck Lever __field(u32, version) 118b4a7f91cSChuck Lever __field(u32, proc) 1193a9568feSChuck Lever __string(addr, rpcrdma_addrstr(rep->rr_rxprt)) 1203a9568feSChuck Lever __string(port, rpcrdma_portstr(rep->rr_rxprt)) 121b4a7f91cSChuck Lever ), 122b4a7f91cSChuck Lever 123b4a7f91cSChuck Lever TP_fast_assign( 124b4a7f91cSChuck Lever __entry->xid = be32_to_cpu(rep->rr_xid); 125b4a7f91cSChuck Lever __entry->version = be32_to_cpu(rep->rr_vers); 126b4a7f91cSChuck Lever __entry->proc = be32_to_cpu(rep->rr_proc); 1273a9568feSChuck Lever __assign_str(addr, rpcrdma_addrstr(rep->rr_rxprt)); 1283a9568feSChuck Lever __assign_str(port, rpcrdma_portstr(rep->rr_rxprt)); 129b4a7f91cSChuck Lever ), 130b4a7f91cSChuck Lever 1313a9568feSChuck Lever TP_printk("peer=[%s]:%s xid=0x%08x version=%u proc=%u", 1323a9568feSChuck Lever __get_str(addr), __get_str(port), 1333a9568feSChuck Lever __entry->xid, __entry->version, __entry->proc 134b4a7f91cSChuck Lever ) 135b4a7f91cSChuck Lever ); 136b4a7f91cSChuck Lever 137b4a7f91cSChuck Lever #define DEFINE_REPLY_EVENT(name) \ 1383a9568feSChuck Lever DEFINE_EVENT(xprtrdma_reply_class, \ 1393a9568feSChuck Lever xprtrdma_reply_##name##_err, \ 140b4a7f91cSChuck Lever TP_PROTO( \ 141b4a7f91cSChuck Lever const struct rpcrdma_rep *rep \ 142b4a7f91cSChuck Lever ), \ 143b4a7f91cSChuck Lever TP_ARGS(rep)) 144b4a7f91cSChuck Lever 1451c443effSChuck Lever DECLARE_EVENT_CLASS(xprtrdma_rxprt, 1461c443effSChuck Lever TP_PROTO( 1471c443effSChuck Lever const struct rpcrdma_xprt *r_xprt 1481c443effSChuck Lever ), 1491c443effSChuck Lever 1501c443effSChuck Lever TP_ARGS(r_xprt), 1511c443effSChuck Lever 1521c443effSChuck Lever TP_STRUCT__entry( 1531c443effSChuck Lever __field(const void *, r_xprt) 1541c443effSChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 1551c443effSChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 1561c443effSChuck Lever ), 1571c443effSChuck Lever 1581c443effSChuck Lever TP_fast_assign( 1591c443effSChuck Lever __entry->r_xprt = r_xprt; 1601c443effSChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 1611c443effSChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 1621c443effSChuck Lever ), 1631c443effSChuck Lever 1641c443effSChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p", 1651c443effSChuck Lever __get_str(addr), __get_str(port), __entry->r_xprt 1661c443effSChuck Lever ) 1671c443effSChuck Lever ); 1681c443effSChuck Lever 1691c443effSChuck Lever #define DEFINE_RXPRT_EVENT(name) \ 1701c443effSChuck Lever DEFINE_EVENT(xprtrdma_rxprt, name, \ 1711c443effSChuck Lever TP_PROTO( \ 1721c443effSChuck Lever const struct rpcrdma_xprt *r_xprt \ 1731c443effSChuck Lever ), \ 1741c443effSChuck Lever TP_ARGS(r_xprt)) 1751c443effSChuck Lever 1767b020f17SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_connect_class, 1777b020f17SChuck Lever TP_PROTO( 1787b020f17SChuck Lever const struct rpcrdma_xprt *r_xprt, 1797b020f17SChuck Lever int rc 1807b020f17SChuck Lever ), 1817b020f17SChuck Lever 1827b020f17SChuck Lever TP_ARGS(r_xprt, rc), 1837b020f17SChuck Lever 1847b020f17SChuck Lever TP_STRUCT__entry( 1857b020f17SChuck Lever __field(const void *, r_xprt) 1867b020f17SChuck Lever __field(int, rc) 1877b020f17SChuck Lever __field(int, connect_status) 1887b020f17SChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 1897b020f17SChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 1907b020f17SChuck Lever ), 1917b020f17SChuck Lever 1927b020f17SChuck Lever TP_fast_assign( 1937b020f17SChuck Lever __entry->r_xprt = r_xprt; 1947b020f17SChuck Lever __entry->rc = rc; 195e28ce900SChuck Lever __entry->connect_status = r_xprt->rx_ep->re_connect_status; 1967b020f17SChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 1977b020f17SChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 1987b020f17SChuck Lever ), 1997b020f17SChuck Lever 200d6ccebf9SChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: rc=%d connection status=%d", 2017b020f17SChuck Lever __get_str(addr), __get_str(port), __entry->r_xprt, 2027b020f17SChuck Lever __entry->rc, __entry->connect_status 2037b020f17SChuck Lever ) 2047b020f17SChuck Lever ); 2057b020f17SChuck Lever 2067b020f17SChuck Lever #define DEFINE_CONN_EVENT(name) \ 2077b020f17SChuck Lever DEFINE_EVENT(xprtrdma_connect_class, xprtrdma_##name, \ 2087b020f17SChuck Lever TP_PROTO( \ 2097b020f17SChuck Lever const struct rpcrdma_xprt *r_xprt, \ 2107b020f17SChuck Lever int rc \ 2117b020f17SChuck Lever ), \ 2127b020f17SChuck Lever TP_ARGS(r_xprt, rc)) 2137b020f17SChuck Lever 21458f10ad4SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_rdch_event, 21558f10ad4SChuck Lever TP_PROTO( 21658f10ad4SChuck Lever const struct rpc_task *task, 21758f10ad4SChuck Lever unsigned int pos, 21858f10ad4SChuck Lever struct rpcrdma_mr *mr, 21958f10ad4SChuck Lever int nsegs 22058f10ad4SChuck Lever ), 22158f10ad4SChuck Lever 22258f10ad4SChuck Lever TP_ARGS(task, pos, mr, nsegs), 22358f10ad4SChuck Lever 22458f10ad4SChuck Lever TP_STRUCT__entry( 22558f10ad4SChuck Lever __field(unsigned int, task_id) 22658f10ad4SChuck Lever __field(unsigned int, client_id) 22758f10ad4SChuck Lever __field(unsigned int, pos) 22858f10ad4SChuck Lever __field(int, nents) 22958f10ad4SChuck Lever __field(u32, handle) 23058f10ad4SChuck Lever __field(u32, length) 23158f10ad4SChuck Lever __field(u64, offset) 23258f10ad4SChuck Lever __field(int, nsegs) 23358f10ad4SChuck Lever ), 23458f10ad4SChuck Lever 23558f10ad4SChuck Lever TP_fast_assign( 23658f10ad4SChuck Lever __entry->task_id = task->tk_pid; 23758f10ad4SChuck Lever __entry->client_id = task->tk_client->cl_clid; 23858f10ad4SChuck Lever __entry->pos = pos; 23958f10ad4SChuck Lever __entry->nents = mr->mr_nents; 24058f10ad4SChuck Lever __entry->handle = mr->mr_handle; 24158f10ad4SChuck Lever __entry->length = mr->mr_length; 24258f10ad4SChuck Lever __entry->offset = mr->mr_offset; 24358f10ad4SChuck Lever __entry->nsegs = nsegs; 24458f10ad4SChuck Lever ), 24558f10ad4SChuck Lever 246aba11831SChuck Lever TP_printk("task:%u@%u pos=%u %u@0x%016llx:0x%08x (%s)", 247aba11831SChuck Lever __entry->task_id, __entry->client_id, 24858f10ad4SChuck Lever __entry->pos, __entry->length, 24958f10ad4SChuck Lever (unsigned long long)__entry->offset, __entry->handle, 25058f10ad4SChuck Lever __entry->nents < __entry->nsegs ? "more" : "last" 25158f10ad4SChuck Lever ) 25258f10ad4SChuck Lever ); 25358f10ad4SChuck Lever 25458f10ad4SChuck Lever #define DEFINE_RDCH_EVENT(name) \ 255aba11831SChuck Lever DEFINE_EVENT(xprtrdma_rdch_event, xprtrdma_chunk_##name,\ 25658f10ad4SChuck Lever TP_PROTO( \ 25758f10ad4SChuck Lever const struct rpc_task *task, \ 25858f10ad4SChuck Lever unsigned int pos, \ 25958f10ad4SChuck Lever struct rpcrdma_mr *mr, \ 26058f10ad4SChuck Lever int nsegs \ 26158f10ad4SChuck Lever ), \ 26258f10ad4SChuck Lever TP_ARGS(task, pos, mr, nsegs)) 26358f10ad4SChuck Lever 26458f10ad4SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_wrch_event, 26558f10ad4SChuck Lever TP_PROTO( 26658f10ad4SChuck Lever const struct rpc_task *task, 26758f10ad4SChuck Lever struct rpcrdma_mr *mr, 26858f10ad4SChuck Lever int nsegs 26958f10ad4SChuck Lever ), 27058f10ad4SChuck Lever 27158f10ad4SChuck Lever TP_ARGS(task, mr, nsegs), 27258f10ad4SChuck Lever 27358f10ad4SChuck Lever TP_STRUCT__entry( 27458f10ad4SChuck Lever __field(unsigned int, task_id) 27558f10ad4SChuck Lever __field(unsigned int, client_id) 27658f10ad4SChuck Lever __field(int, nents) 27758f10ad4SChuck Lever __field(u32, handle) 27858f10ad4SChuck Lever __field(u32, length) 27958f10ad4SChuck Lever __field(u64, offset) 28058f10ad4SChuck Lever __field(int, nsegs) 28158f10ad4SChuck Lever ), 28258f10ad4SChuck Lever 28358f10ad4SChuck Lever TP_fast_assign( 28458f10ad4SChuck Lever __entry->task_id = task->tk_pid; 28558f10ad4SChuck Lever __entry->client_id = task->tk_client->cl_clid; 28658f10ad4SChuck Lever __entry->nents = mr->mr_nents; 28758f10ad4SChuck Lever __entry->handle = mr->mr_handle; 28858f10ad4SChuck Lever __entry->length = mr->mr_length; 28958f10ad4SChuck Lever __entry->offset = mr->mr_offset; 29058f10ad4SChuck Lever __entry->nsegs = nsegs; 29158f10ad4SChuck Lever ), 29258f10ad4SChuck Lever 293aba11831SChuck Lever TP_printk("task:%u@%u %u@0x%016llx:0x%08x (%s)", 294aba11831SChuck Lever __entry->task_id, __entry->client_id, 29558f10ad4SChuck Lever __entry->length, (unsigned long long)__entry->offset, 29658f10ad4SChuck Lever __entry->handle, 29758f10ad4SChuck Lever __entry->nents < __entry->nsegs ? "more" : "last" 29858f10ad4SChuck Lever ) 29958f10ad4SChuck Lever ); 30058f10ad4SChuck Lever 30158f10ad4SChuck Lever #define DEFINE_WRCH_EVENT(name) \ 302aba11831SChuck Lever DEFINE_EVENT(xprtrdma_wrch_event, xprtrdma_chunk_##name,\ 30358f10ad4SChuck Lever TP_PROTO( \ 30458f10ad4SChuck Lever const struct rpc_task *task, \ 30558f10ad4SChuck Lever struct rpcrdma_mr *mr, \ 30658f10ad4SChuck Lever int nsegs \ 30758f10ad4SChuck Lever ), \ 30858f10ad4SChuck Lever TP_ARGS(task, mr, nsegs)) 30958f10ad4SChuck Lever 310aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_BIDIRECTIONAL); 311aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_TO_DEVICE); 312aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_FROM_DEVICE); 313aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_NONE); 314aba11831SChuck Lever 315aba11831SChuck Lever #define xprtrdma_show_direction(x) \ 316aba11831SChuck Lever __print_symbolic(x, \ 317aba11831SChuck Lever { DMA_BIDIRECTIONAL, "BIDIR" }, \ 318aba11831SChuck Lever { DMA_TO_DEVICE, "TO_DEVICE" }, \ 319aba11831SChuck Lever { DMA_FROM_DEVICE, "FROM_DEVICE" }, \ 320aba11831SChuck Lever { DMA_NONE, "NONE" }) 321aba11831SChuck Lever 3227703db97SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_mr_class, 3237703db97SChuck Lever TP_PROTO( 3247703db97SChuck Lever const struct rpcrdma_mr *mr 3257703db97SChuck Lever ), 3267703db97SChuck Lever 3277703db97SChuck Lever TP_ARGS(mr), 3287703db97SChuck Lever 3297703db97SChuck Lever TP_STRUCT__entry( 3307703db97SChuck Lever __field(unsigned int, task_id) 3317703db97SChuck Lever __field(unsigned int, client_id) 3327703db97SChuck Lever __field(u32, mr_id) 3337703db97SChuck Lever __field(int, nents) 3347703db97SChuck Lever __field(u32, handle) 3357703db97SChuck Lever __field(u32, length) 3367703db97SChuck Lever __field(u64, offset) 3377703db97SChuck Lever __field(u32, dir) 3387703db97SChuck Lever ), 3397703db97SChuck Lever 3407703db97SChuck Lever TP_fast_assign( 3417703db97SChuck Lever const struct rpcrdma_req *req = mr->mr_req; 3427703db97SChuck Lever const struct rpc_task *task = req->rl_slot.rq_task; 3437703db97SChuck Lever 3447703db97SChuck Lever __entry->task_id = task->tk_pid; 3457703db97SChuck Lever __entry->client_id = task->tk_client->cl_clid; 3467703db97SChuck Lever __entry->mr_id = mr->frwr.fr_mr->res.id; 3477703db97SChuck Lever __entry->nents = mr->mr_nents; 3487703db97SChuck Lever __entry->handle = mr->mr_handle; 3497703db97SChuck Lever __entry->length = mr->mr_length; 3507703db97SChuck Lever __entry->offset = mr->mr_offset; 3517703db97SChuck Lever __entry->dir = mr->mr_dir; 3527703db97SChuck Lever ), 3537703db97SChuck Lever 3547703db97SChuck Lever TP_printk("task:%u@%u mr.id=%u nents=%d %u@0x%016llx:0x%08x (%s)", 3557703db97SChuck Lever __entry->task_id, __entry->client_id, 3567703db97SChuck Lever __entry->mr_id, __entry->nents, __entry->length, 3577703db97SChuck Lever (unsigned long long)__entry->offset, __entry->handle, 3587703db97SChuck Lever xprtrdma_show_direction(__entry->dir) 3597703db97SChuck Lever ) 3607703db97SChuck Lever ); 3617703db97SChuck Lever 3627703db97SChuck Lever #define DEFINE_MR_EVENT(name) \ 3637703db97SChuck Lever DEFINE_EVENT(xprtrdma_mr_class, \ 3647703db97SChuck Lever xprtrdma_mr_##name, \ 3657703db97SChuck Lever TP_PROTO( \ 3667703db97SChuck Lever const struct rpcrdma_mr *mr \ 3677703db97SChuck Lever ), \ 3687703db97SChuck Lever TP_ARGS(mr)) 3697703db97SChuck Lever 3707703db97SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_anonymous_mr_class, 3712937fedeSChuck Lever TP_PROTO( 3722937fedeSChuck Lever const struct rpcrdma_mr *mr 3732937fedeSChuck Lever ), 3742937fedeSChuck Lever 3752937fedeSChuck Lever TP_ARGS(mr), 3762937fedeSChuck Lever 3772937fedeSChuck Lever TP_STRUCT__entry( 37862a89501SChuck Lever __field(u32, mr_id) 37962a89501SChuck Lever __field(int, nents) 3802937fedeSChuck Lever __field(u32, handle) 3812937fedeSChuck Lever __field(u32, length) 3822937fedeSChuck Lever __field(u64, offset) 383aba11831SChuck Lever __field(u32, dir) 3842937fedeSChuck Lever ), 3852937fedeSChuck Lever 3862937fedeSChuck Lever TP_fast_assign( 38762a89501SChuck Lever __entry->mr_id = mr->frwr.fr_mr->res.id; 38862a89501SChuck Lever __entry->nents = mr->mr_nents; 3892937fedeSChuck Lever __entry->handle = mr->mr_handle; 3902937fedeSChuck Lever __entry->length = mr->mr_length; 3912937fedeSChuck Lever __entry->offset = mr->mr_offset; 392aba11831SChuck Lever __entry->dir = mr->mr_dir; 3932937fedeSChuck Lever ), 3942937fedeSChuck Lever 39562a89501SChuck Lever TP_printk("mr.id=%u nents=%d %u@0x%016llx:0x%08x (%s)", 39662a89501SChuck Lever __entry->mr_id, __entry->nents, __entry->length, 397aba11831SChuck Lever (unsigned long long)__entry->offset, __entry->handle, 398aba11831SChuck Lever xprtrdma_show_direction(__entry->dir) 3992937fedeSChuck Lever ) 4002937fedeSChuck Lever ); 4012937fedeSChuck Lever 4027703db97SChuck Lever #define DEFINE_ANON_MR_EVENT(name) \ 4037703db97SChuck Lever DEFINE_EVENT(xprtrdma_anonymous_mr_class, \ 4047703db97SChuck Lever xprtrdma_mr_##name, \ 4052937fedeSChuck Lever TP_PROTO( \ 4062937fedeSChuck Lever const struct rpcrdma_mr *mr \ 4072937fedeSChuck Lever ), \ 4082937fedeSChuck Lever TP_ARGS(mr)) 4092937fedeSChuck Lever 410d11e9346SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_callback_class, 411fc1eb807SChuck Lever TP_PROTO( 412d11e9346SChuck Lever const struct rpcrdma_xprt *r_xprt, 413fc1eb807SChuck Lever const struct rpc_rqst *rqst 414fc1eb807SChuck Lever ), 415fc1eb807SChuck Lever 416d11e9346SChuck Lever TP_ARGS(r_xprt, rqst), 417fc1eb807SChuck Lever 418fc1eb807SChuck Lever TP_STRUCT__entry( 419fc1eb807SChuck Lever __field(u32, xid) 420d11e9346SChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 421d11e9346SChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 422fc1eb807SChuck Lever ), 423fc1eb807SChuck Lever 424fc1eb807SChuck Lever TP_fast_assign( 425fc1eb807SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 426d11e9346SChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 427d11e9346SChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 428fc1eb807SChuck Lever ), 429fc1eb807SChuck Lever 430d11e9346SChuck Lever TP_printk("peer=[%s]:%s xid=0x%08x", 431d11e9346SChuck Lever __get_str(addr), __get_str(port), __entry->xid 432fc1eb807SChuck Lever ) 433fc1eb807SChuck Lever ); 434fc1eb807SChuck Lever 435d11e9346SChuck Lever #define DEFINE_CALLBACK_EVENT(name) \ 436d11e9346SChuck Lever DEFINE_EVENT(xprtrdma_callback_class, \ 437d11e9346SChuck Lever xprtrdma_cb_##name, \ 438fc1eb807SChuck Lever TP_PROTO( \ 439d11e9346SChuck Lever const struct rpcrdma_xprt *r_xprt, \ 440fc1eb807SChuck Lever const struct rpc_rqst *rqst \ 441fc1eb807SChuck Lever ), \ 442d11e9346SChuck Lever TP_ARGS(r_xprt, rqst)) 443fc1eb807SChuck Lever 444b4a7f91cSChuck Lever /** 445b4744e00SChuck Lever ** Connection events 446b4744e00SChuck Lever **/ 447b4744e00SChuck Lever 448f54c870dSChuck Lever TRACE_EVENT(xprtrdma_inline_thresh, 449f54c870dSChuck Lever TP_PROTO( 450745b734cSChuck Lever const struct rpcrdma_ep *ep 451f54c870dSChuck Lever ), 452f54c870dSChuck Lever 453745b734cSChuck Lever TP_ARGS(ep), 454f54c870dSChuck Lever 455f54c870dSChuck Lever TP_STRUCT__entry( 456f54c870dSChuck Lever __field(unsigned int, inline_send) 457f54c870dSChuck Lever __field(unsigned int, inline_recv) 458f54c870dSChuck Lever __field(unsigned int, max_send) 459f54c870dSChuck Lever __field(unsigned int, max_recv) 460745b734cSChuck Lever __array(unsigned char, srcaddr, sizeof(struct sockaddr_in6)) 461745b734cSChuck Lever __array(unsigned char, dstaddr, sizeof(struct sockaddr_in6)) 462f54c870dSChuck Lever ), 463f54c870dSChuck Lever 464f54c870dSChuck Lever TP_fast_assign( 465745b734cSChuck Lever const struct rdma_cm_id *id = ep->re_id; 466f54c870dSChuck Lever 46793aa8e0aSChuck Lever __entry->inline_send = ep->re_inline_send; 46893aa8e0aSChuck Lever __entry->inline_recv = ep->re_inline_recv; 46993aa8e0aSChuck Lever __entry->max_send = ep->re_max_inline_send; 47093aa8e0aSChuck Lever __entry->max_recv = ep->re_max_inline_recv; 471745b734cSChuck Lever memcpy(__entry->srcaddr, &id->route.addr.src_addr, 472745b734cSChuck Lever sizeof(struct sockaddr_in6)); 473745b734cSChuck Lever memcpy(__entry->dstaddr, &id->route.addr.dst_addr, 474745b734cSChuck Lever sizeof(struct sockaddr_in6)); 475f54c870dSChuck Lever ), 476f54c870dSChuck Lever 477745b734cSChuck Lever TP_printk("%pISpc -> %pISpc neg send/recv=%u/%u, calc send/recv=%u/%u", 478745b734cSChuck Lever __entry->srcaddr, __entry->dstaddr, 479f54c870dSChuck Lever __entry->inline_send, __entry->inline_recv, 480f54c870dSChuck Lever __entry->max_send, __entry->max_recv 481f54c870dSChuck Lever ) 482f54c870dSChuck Lever ); 483f54c870dSChuck Lever 4847b020f17SChuck Lever DEFINE_CONN_EVENT(connect); 4857b020f17SChuck Lever DEFINE_CONN_EVENT(disconnect); 4867b020f17SChuck Lever 4877b020f17SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_op_inject_dsc); 4887b020f17SChuck Lever 4897b020f17SChuck Lever TRACE_EVENT(xprtrdma_op_connect, 490b4744e00SChuck Lever TP_PROTO( 491b4744e00SChuck Lever const struct rpcrdma_xprt *r_xprt, 4927b020f17SChuck Lever unsigned long delay 493b4744e00SChuck Lever ), 494b4744e00SChuck Lever 4957b020f17SChuck Lever TP_ARGS(r_xprt, delay), 496b4744e00SChuck Lever 497b4744e00SChuck Lever TP_STRUCT__entry( 498b4744e00SChuck Lever __field(const void *, r_xprt) 4997b020f17SChuck Lever __field(unsigned long, delay) 500b4744e00SChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 501b4744e00SChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 502b4744e00SChuck Lever ), 503b4744e00SChuck Lever 504b4744e00SChuck Lever TP_fast_assign( 505b4744e00SChuck Lever __entry->r_xprt = r_xprt; 5067b020f17SChuck Lever __entry->delay = delay; 507b4744e00SChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 508b4744e00SChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 509b4744e00SChuck Lever ), 510b4744e00SChuck Lever 5117b020f17SChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p delay=%lu", 5127b020f17SChuck Lever __get_str(addr), __get_str(port), __entry->r_xprt, 5137b020f17SChuck Lever __entry->delay 514b4744e00SChuck Lever ) 515b4744e00SChuck Lever ); 516b4744e00SChuck Lever 517b4744e00SChuck Lever 518675dd90aSChuck Lever TRACE_EVENT(xprtrdma_op_set_cto, 519675dd90aSChuck Lever TP_PROTO( 520675dd90aSChuck Lever const struct rpcrdma_xprt *r_xprt, 521675dd90aSChuck Lever unsigned long connect, 522675dd90aSChuck Lever unsigned long reconnect 523675dd90aSChuck Lever ), 524675dd90aSChuck Lever 525675dd90aSChuck Lever TP_ARGS(r_xprt, connect, reconnect), 526675dd90aSChuck Lever 527675dd90aSChuck Lever TP_STRUCT__entry( 528675dd90aSChuck Lever __field(const void *, r_xprt) 529675dd90aSChuck Lever __field(unsigned long, connect) 530675dd90aSChuck Lever __field(unsigned long, reconnect) 531675dd90aSChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 532675dd90aSChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 533675dd90aSChuck Lever ), 534675dd90aSChuck Lever 535675dd90aSChuck Lever TP_fast_assign( 536675dd90aSChuck Lever __entry->r_xprt = r_xprt; 537675dd90aSChuck Lever __entry->connect = connect; 538675dd90aSChuck Lever __entry->reconnect = reconnect; 539675dd90aSChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 540675dd90aSChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 541675dd90aSChuck Lever ), 542675dd90aSChuck Lever 543675dd90aSChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: connect=%lu reconnect=%lu", 544675dd90aSChuck Lever __get_str(addr), __get_str(port), __entry->r_xprt, 545675dd90aSChuck Lever __entry->connect / HZ, __entry->reconnect / HZ 546675dd90aSChuck Lever ) 547675dd90aSChuck Lever ); 548675dd90aSChuck Lever 549f9521d53SChuck Lever TRACE_EVENT(xprtrdma_qp_event, 550643cf323SChuck Lever TP_PROTO( 551745b734cSChuck Lever const struct rpcrdma_ep *ep, 552643cf323SChuck Lever const struct ib_event *event 553643cf323SChuck Lever ), 554643cf323SChuck Lever 555745b734cSChuck Lever TP_ARGS(ep, event), 556643cf323SChuck Lever 557643cf323SChuck Lever TP_STRUCT__entry( 558745b734cSChuck Lever __field(unsigned long, event) 559643cf323SChuck Lever __string(name, event->device->name) 560745b734cSChuck Lever __array(unsigned char, srcaddr, sizeof(struct sockaddr_in6)) 561745b734cSChuck Lever __array(unsigned char, dstaddr, sizeof(struct sockaddr_in6)) 562643cf323SChuck Lever ), 563643cf323SChuck Lever 564643cf323SChuck Lever TP_fast_assign( 565745b734cSChuck Lever const struct rdma_cm_id *id = ep->re_id; 566745b734cSChuck Lever 567643cf323SChuck Lever __entry->event = event->event; 568643cf323SChuck Lever __assign_str(name, event->device->name); 569745b734cSChuck Lever memcpy(__entry->srcaddr, &id->route.addr.src_addr, 570745b734cSChuck Lever sizeof(struct sockaddr_in6)); 571745b734cSChuck Lever memcpy(__entry->dstaddr, &id->route.addr.dst_addr, 572745b734cSChuck Lever sizeof(struct sockaddr_in6)); 573643cf323SChuck Lever ), 574643cf323SChuck Lever 575745b734cSChuck Lever TP_printk("%pISpc -> %pISpc device=%s %s (%lu)", 576745b734cSChuck Lever __entry->srcaddr, __entry->dstaddr, __get_str(name), 577745b734cSChuck Lever rdma_show_ib_event(__entry->event), __entry->event 578643cf323SChuck Lever ) 579643cf323SChuck Lever ); 580643cf323SChuck Lever 581b4744e00SChuck Lever /** 582ab03eff5SChuck Lever ** Call events 583ab03eff5SChuck Lever **/ 584ab03eff5SChuck Lever 5851c443effSChuck Lever TRACE_EVENT(xprtrdma_createmrs, 5861c443effSChuck Lever TP_PROTO( 5871c443effSChuck Lever const struct rpcrdma_xprt *r_xprt, 5881c443effSChuck Lever unsigned int count 5891c443effSChuck Lever ), 5901c443effSChuck Lever 5911c443effSChuck Lever TP_ARGS(r_xprt, count), 5921c443effSChuck Lever 5931c443effSChuck Lever TP_STRUCT__entry( 5941c443effSChuck Lever __field(const void *, r_xprt) 5956dc6ec9eSChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 5966dc6ec9eSChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 5971c443effSChuck Lever __field(unsigned int, count) 5981c443effSChuck Lever ), 5991c443effSChuck Lever 6001c443effSChuck Lever TP_fast_assign( 6011c443effSChuck Lever __entry->r_xprt = r_xprt; 6021c443effSChuck Lever __entry->count = count; 6036dc6ec9eSChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 6046dc6ec9eSChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 6051c443effSChuck Lever ), 6061c443effSChuck Lever 6076dc6ec9eSChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: created %u MRs", 6086dc6ec9eSChuck Lever __get_str(addr), __get_str(port), __entry->r_xprt, 6096dc6ec9eSChuck Lever __entry->count 6106dc6ec9eSChuck Lever ) 6116dc6ec9eSChuck Lever ); 6126dc6ec9eSChuck Lever 6130307cdecSChuck Lever TRACE_EVENT(xprtrdma_nomrs_err, 6146dc6ec9eSChuck Lever TP_PROTO( 6150307cdecSChuck Lever const struct rpcrdma_xprt *r_xprt, 6166dc6ec9eSChuck Lever const struct rpcrdma_req *req 6176dc6ec9eSChuck Lever ), 6186dc6ec9eSChuck Lever 6190307cdecSChuck Lever TP_ARGS(r_xprt, req), 6206dc6ec9eSChuck Lever 6216dc6ec9eSChuck Lever TP_STRUCT__entry( 6226dc6ec9eSChuck Lever __field(unsigned int, task_id) 6236dc6ec9eSChuck Lever __field(unsigned int, client_id) 6240307cdecSChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 6250307cdecSChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 6266dc6ec9eSChuck Lever ), 6276dc6ec9eSChuck Lever 6286dc6ec9eSChuck Lever TP_fast_assign( 6296dc6ec9eSChuck Lever const struct rpc_rqst *rqst = &req->rl_slot; 6306dc6ec9eSChuck Lever 6316dc6ec9eSChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 6326dc6ec9eSChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 6330307cdecSChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 6340307cdecSChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 6356dc6ec9eSChuck Lever ), 6366dc6ec9eSChuck Lever 6370307cdecSChuck Lever TP_printk("peer=[%s]:%s task:%u@%u", 6380307cdecSChuck Lever __get_str(addr), __get_str(port), 6390307cdecSChuck Lever __entry->task_id, __entry->client_id 6403b39f52aSChuck Lever ) 6413b39f52aSChuck Lever ); 6421c443effSChuck Lever 643aba11831SChuck Lever DEFINE_RDCH_EVENT(read); 644aba11831SChuck Lever DEFINE_WRCH_EVENT(write); 645aba11831SChuck Lever DEFINE_WRCH_EVENT(reply); 64658f10ad4SChuck Lever 647ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch); 648614f3c96SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch_pullup); 649614f3c96SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch_mapped); 650ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_readch); 651ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_areadch); 652ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_writech); 653ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_replych); 654ab03eff5SChuck Lever 655ab03eff5SChuck Lever #define xprtrdma_show_chunktype(x) \ 656ab03eff5SChuck Lever __print_symbolic(x, \ 657ab03eff5SChuck Lever { rpcrdma_noch, "inline" }, \ 658614f3c96SChuck Lever { rpcrdma_noch_pullup, "pullup" }, \ 659614f3c96SChuck Lever { rpcrdma_noch_mapped, "mapped" }, \ 660ab03eff5SChuck Lever { rpcrdma_readch, "read list" }, \ 661ab03eff5SChuck Lever { rpcrdma_areadch, "*read list" }, \ 662ab03eff5SChuck Lever { rpcrdma_writech, "write list" }, \ 663ab03eff5SChuck Lever { rpcrdma_replych, "reply chunk" }) 664ab03eff5SChuck Lever 665ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_marshal, 666ab03eff5SChuck Lever TP_PROTO( 6671310051cSChuck Lever const struct rpcrdma_req *req, 668ab03eff5SChuck Lever unsigned int rtype, 669ab03eff5SChuck Lever unsigned int wtype 670ab03eff5SChuck Lever ), 671ab03eff5SChuck Lever 6721310051cSChuck Lever TP_ARGS(req, rtype, wtype), 673ab03eff5SChuck Lever 674ab03eff5SChuck Lever TP_STRUCT__entry( 675ab03eff5SChuck Lever __field(unsigned int, task_id) 676ab03eff5SChuck Lever __field(unsigned int, client_id) 677ab03eff5SChuck Lever __field(u32, xid) 678ab03eff5SChuck Lever __field(unsigned int, hdrlen) 679ab03eff5SChuck Lever __field(unsigned int, headlen) 680ab03eff5SChuck Lever __field(unsigned int, pagelen) 681ab03eff5SChuck Lever __field(unsigned int, taillen) 682ab03eff5SChuck Lever __field(unsigned int, rtype) 683ab03eff5SChuck Lever __field(unsigned int, wtype) 684ab03eff5SChuck Lever ), 685ab03eff5SChuck Lever 686ab03eff5SChuck Lever TP_fast_assign( 6871310051cSChuck Lever const struct rpc_rqst *rqst = &req->rl_slot; 6881310051cSChuck Lever 689ab03eff5SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 690ab03eff5SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 691ab03eff5SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 6921310051cSChuck Lever __entry->hdrlen = req->rl_hdrbuf.len; 693ab03eff5SChuck Lever __entry->headlen = rqst->rq_snd_buf.head[0].iov_len; 694ab03eff5SChuck Lever __entry->pagelen = rqst->rq_snd_buf.page_len; 695ab03eff5SChuck Lever __entry->taillen = rqst->rq_snd_buf.tail[0].iov_len; 696ab03eff5SChuck Lever __entry->rtype = rtype; 697ab03eff5SChuck Lever __entry->wtype = wtype; 698ab03eff5SChuck Lever ), 699ab03eff5SChuck Lever 700ab03eff5SChuck Lever TP_printk("task:%u@%u xid=0x%08x: hdr=%u xdr=%u/%u/%u %s/%s", 701ab03eff5SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 702ab03eff5SChuck Lever __entry->hdrlen, 703ab03eff5SChuck Lever __entry->headlen, __entry->pagelen, __entry->taillen, 704ab03eff5SChuck Lever xprtrdma_show_chunktype(__entry->rtype), 705ab03eff5SChuck Lever xprtrdma_show_chunktype(__entry->wtype) 706ab03eff5SChuck Lever ) 707ab03eff5SChuck Lever ); 708ab03eff5SChuck Lever 70917e4c443SChuck Lever TRACE_EVENT(xprtrdma_marshal_failed, 71017e4c443SChuck Lever TP_PROTO(const struct rpc_rqst *rqst, 71117e4c443SChuck Lever int ret 71217e4c443SChuck Lever ), 71317e4c443SChuck Lever 71417e4c443SChuck Lever TP_ARGS(rqst, ret), 71517e4c443SChuck Lever 71617e4c443SChuck Lever TP_STRUCT__entry( 71717e4c443SChuck Lever __field(unsigned int, task_id) 71817e4c443SChuck Lever __field(unsigned int, client_id) 71917e4c443SChuck Lever __field(u32, xid) 72017e4c443SChuck Lever __field(int, ret) 72117e4c443SChuck Lever ), 72217e4c443SChuck Lever 72317e4c443SChuck Lever TP_fast_assign( 72417e4c443SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 72517e4c443SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 72617e4c443SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 72717e4c443SChuck Lever __entry->ret = ret; 72817e4c443SChuck Lever ), 72917e4c443SChuck Lever 73017e4c443SChuck Lever TP_printk("task:%u@%u xid=0x%08x: ret=%d", 73117e4c443SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 73217e4c443SChuck Lever __entry->ret 73317e4c443SChuck Lever ) 73417e4c443SChuck Lever ); 73517e4c443SChuck Lever 73605eb06d8SChuck Lever TRACE_EVENT(xprtrdma_prepsend_failed, 73705eb06d8SChuck Lever TP_PROTO(const struct rpc_rqst *rqst, 73805eb06d8SChuck Lever int ret 73905eb06d8SChuck Lever ), 74005eb06d8SChuck Lever 74105eb06d8SChuck Lever TP_ARGS(rqst, ret), 74205eb06d8SChuck Lever 74305eb06d8SChuck Lever TP_STRUCT__entry( 74405eb06d8SChuck Lever __field(unsigned int, task_id) 74505eb06d8SChuck Lever __field(unsigned int, client_id) 74605eb06d8SChuck Lever __field(u32, xid) 74705eb06d8SChuck Lever __field(int, ret) 74805eb06d8SChuck Lever ), 74905eb06d8SChuck Lever 75005eb06d8SChuck Lever TP_fast_assign( 75105eb06d8SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 75205eb06d8SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 75305eb06d8SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 75405eb06d8SChuck Lever __entry->ret = ret; 75505eb06d8SChuck Lever ), 75605eb06d8SChuck Lever 75705eb06d8SChuck Lever TP_printk("task:%u@%u xid=0x%08x: ret=%d", 75805eb06d8SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 75905eb06d8SChuck Lever __entry->ret 76005eb06d8SChuck Lever ) 76105eb06d8SChuck Lever ); 76205eb06d8SChuck Lever 763ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_post_send, 764ab03eff5SChuck Lever TP_PROTO( 765bdb2ce82SChuck Lever const struct rpcrdma_req *req 766ab03eff5SChuck Lever ), 767ab03eff5SChuck Lever 768bdb2ce82SChuck Lever TP_ARGS(req), 769ab03eff5SChuck Lever 770ab03eff5SChuck Lever TP_STRUCT__entry( 771b2e7467fSChuck Lever __field(u32, cq_id) 772b2e7467fSChuck Lever __field(int, completion_id) 7730c77668dSChuck Lever __field(unsigned int, task_id) 7740c77668dSChuck Lever __field(unsigned int, client_id) 775ab03eff5SChuck Lever __field(int, num_sge) 776470443e0SChuck Lever __field(int, signaled) 777ab03eff5SChuck Lever ), 778ab03eff5SChuck Lever 779ab03eff5SChuck Lever TP_fast_assign( 7800c77668dSChuck Lever const struct rpc_rqst *rqst = &req->rl_slot; 781b2e7467fSChuck Lever const struct rpcrdma_sendctx *sc = req->rl_sendctx; 7820c77668dSChuck Lever 783b2e7467fSChuck Lever __entry->cq_id = sc->sc_cid.ci_queue_id; 784b2e7467fSChuck Lever __entry->completion_id = sc->sc_cid.ci_completion_id; 7850c77668dSChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 78610694ac9SChuck Lever __entry->client_id = rqst->rq_task->tk_client ? 78710694ac9SChuck Lever rqst->rq_task->tk_client->cl_clid : -1; 788dc15c3d5SChuck Lever __entry->num_sge = req->rl_wr.num_sge; 789dc15c3d5SChuck Lever __entry->signaled = req->rl_wr.send_flags & IB_SEND_SIGNALED; 790ab03eff5SChuck Lever ), 791ab03eff5SChuck Lever 792b2e7467fSChuck Lever TP_printk("task:%u@%u cq.id=%u cid=%d (%d SGE%s) %s", 7930c77668dSChuck Lever __entry->task_id, __entry->client_id, 794b2e7467fSChuck Lever __entry->cq_id, __entry->completion_id, 795b2e7467fSChuck Lever __entry->num_sge, (__entry->num_sge == 1 ? "" : "s"), 796bdb2ce82SChuck Lever (__entry->signaled ? "signaled" : "") 797ab03eff5SChuck Lever ) 798ab03eff5SChuck Lever ); 799ab03eff5SChuck Lever 800b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_post_recv, 801b4a7f91cSChuck Lever TP_PROTO( 8022dfdcd88SChuck Lever const struct rpcrdma_rep *rep 803b4a7f91cSChuck Lever ), 804b4a7f91cSChuck Lever 8052dfdcd88SChuck Lever TP_ARGS(rep), 806b4a7f91cSChuck Lever 807b4a7f91cSChuck Lever TP_STRUCT__entry( 808af5865d2SChuck Lever __field(u32, cq_id) 809af5865d2SChuck Lever __field(int, completion_id) 810b4a7f91cSChuck Lever ), 811b4a7f91cSChuck Lever 812b4a7f91cSChuck Lever TP_fast_assign( 813af5865d2SChuck Lever __entry->cq_id = rep->rr_cid.ci_queue_id; 814af5865d2SChuck Lever __entry->completion_id = rep->rr_cid.ci_completion_id; 815b4a7f91cSChuck Lever ), 816b4a7f91cSChuck Lever 817af5865d2SChuck Lever TP_printk("cq.id=%d cid=%d", 818af5865d2SChuck Lever __entry->cq_id, __entry->completion_id 819b4a7f91cSChuck Lever ) 820b4a7f91cSChuck Lever ); 821b4a7f91cSChuck Lever 8227c8d9e7cSChuck Lever TRACE_EVENT(xprtrdma_post_recvs, 8237c8d9e7cSChuck Lever TP_PROTO( 8247c8d9e7cSChuck Lever const struct rpcrdma_xprt *r_xprt, 8257c8d9e7cSChuck Lever unsigned int count, 8267c8d9e7cSChuck Lever int status 8277c8d9e7cSChuck Lever ), 8287c8d9e7cSChuck Lever 8297c8d9e7cSChuck Lever TP_ARGS(r_xprt, count, status), 8307c8d9e7cSChuck Lever 8317c8d9e7cSChuck Lever TP_STRUCT__entry( 8327c8d9e7cSChuck Lever __field(const void *, r_xprt) 8337c8d9e7cSChuck Lever __field(unsigned int, count) 8347c8d9e7cSChuck Lever __field(int, status) 8357c8d9e7cSChuck Lever __field(int, posted) 8367c8d9e7cSChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 8377c8d9e7cSChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 8387c8d9e7cSChuck Lever ), 8397c8d9e7cSChuck Lever 8407c8d9e7cSChuck Lever TP_fast_assign( 8417c8d9e7cSChuck Lever __entry->r_xprt = r_xprt; 8427c8d9e7cSChuck Lever __entry->count = count; 8437c8d9e7cSChuck Lever __entry->status = status; 844e28ce900SChuck Lever __entry->posted = r_xprt->rx_ep->re_receive_count; 8457c8d9e7cSChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 8467c8d9e7cSChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 8477c8d9e7cSChuck Lever ), 8487c8d9e7cSChuck Lever 8497c8d9e7cSChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: %u new recvs, %d active (rc %d)", 8507c8d9e7cSChuck Lever __get_str(addr), __get_str(port), __entry->r_xprt, 8517c8d9e7cSChuck Lever __entry->count, __entry->posted, __entry->status 852ab03eff5SChuck Lever ) 853ab03eff5SChuck Lever ); 854ab03eff5SChuck Lever 85536a55edfSChuck Lever TRACE_EVENT(xprtrdma_post_linv_err, 8564b93dab3SChuck Lever TP_PROTO( 8574b93dab3SChuck Lever const struct rpcrdma_req *req, 8584b93dab3SChuck Lever int status 8594b93dab3SChuck Lever ), 8604b93dab3SChuck Lever 8614b93dab3SChuck Lever TP_ARGS(req, status), 8624b93dab3SChuck Lever 8634b93dab3SChuck Lever TP_STRUCT__entry( 86436a55edfSChuck Lever __field(unsigned int, task_id) 86536a55edfSChuck Lever __field(unsigned int, client_id) 8664b93dab3SChuck Lever __field(int, status) 8674b93dab3SChuck Lever ), 8684b93dab3SChuck Lever 8694b93dab3SChuck Lever TP_fast_assign( 87036a55edfSChuck Lever const struct rpc_task *task = req->rl_slot.rq_task; 87136a55edfSChuck Lever 87236a55edfSChuck Lever __entry->task_id = task->tk_pid; 87336a55edfSChuck Lever __entry->client_id = task->tk_client->cl_clid; 8744b93dab3SChuck Lever __entry->status = status; 8754b93dab3SChuck Lever ), 8764b93dab3SChuck Lever 87736a55edfSChuck Lever TP_printk("task:%u@%u status=%d", 87836a55edfSChuck Lever __entry->task_id, __entry->client_id, __entry->status 8794b93dab3SChuck Lever ) 8804b93dab3SChuck Lever ); 8814b93dab3SChuck Lever 882ab03eff5SChuck Lever /** 883ab03eff5SChuck Lever ** Completion events 884ab03eff5SChuck Lever **/ 885ab03eff5SChuck Lever 886c30f259aSChuck Lever DEFINE_RECEIVE_COMPLETION_EVENT(xprtrdma_wc_receive); 887c30f259aSChuck Lever 888b2e7467fSChuck Lever DEFINE_COMPLETION_EVENT(xprtrdma_wc_send); 8895ecef9c8SChuck Lever DEFINE_COMPLETION_EVENT(xprtrdma_wc_fastreg); 8905ecef9c8SChuck Lever DEFINE_COMPLETION_EVENT(xprtrdma_wc_li); 8915ecef9c8SChuck Lever DEFINE_COMPLETION_EVENT(xprtrdma_wc_li_wake); 8925ecef9c8SChuck Lever DEFINE_COMPLETION_EVENT(xprtrdma_wc_li_done); 8932937fedeSChuck Lever 89453b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_alloc, 89553b2c1cbSChuck Lever TP_PROTO( 89653b2c1cbSChuck Lever const struct rpcrdma_mr *mr, 89753b2c1cbSChuck Lever int rc 89853b2c1cbSChuck Lever ), 89953b2c1cbSChuck Lever 90053b2c1cbSChuck Lever TP_ARGS(mr, rc), 90153b2c1cbSChuck Lever 90253b2c1cbSChuck Lever TP_STRUCT__entry( 90362a89501SChuck Lever __field(u32, mr_id) 90453b2c1cbSChuck Lever __field(int, rc) 90553b2c1cbSChuck Lever ), 90653b2c1cbSChuck Lever 90753b2c1cbSChuck Lever TP_fast_assign( 90862a89501SChuck Lever __entry->mr_id = mr->frwr.fr_mr->res.id; 90953b2c1cbSChuck Lever __entry->rc = rc; 91053b2c1cbSChuck Lever ), 91153b2c1cbSChuck Lever 91262a89501SChuck Lever TP_printk("mr.id=%u: rc=%d", 91362a89501SChuck Lever __entry->mr_id, __entry->rc 91453b2c1cbSChuck Lever ) 91553b2c1cbSChuck Lever ); 91653b2c1cbSChuck Lever 91753b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_dereg, 91853b2c1cbSChuck Lever TP_PROTO( 91953b2c1cbSChuck Lever const struct rpcrdma_mr *mr, 92053b2c1cbSChuck Lever int rc 92153b2c1cbSChuck Lever ), 92253b2c1cbSChuck Lever 92353b2c1cbSChuck Lever TP_ARGS(mr, rc), 92453b2c1cbSChuck Lever 92553b2c1cbSChuck Lever TP_STRUCT__entry( 92662a89501SChuck Lever __field(u32, mr_id) 92762a89501SChuck Lever __field(int, nents) 92853b2c1cbSChuck Lever __field(u32, handle) 92953b2c1cbSChuck Lever __field(u32, length) 93053b2c1cbSChuck Lever __field(u64, offset) 93153b2c1cbSChuck Lever __field(u32, dir) 93253b2c1cbSChuck Lever __field(int, rc) 93353b2c1cbSChuck Lever ), 93453b2c1cbSChuck Lever 93553b2c1cbSChuck Lever TP_fast_assign( 93662a89501SChuck Lever __entry->mr_id = mr->frwr.fr_mr->res.id; 93762a89501SChuck Lever __entry->nents = mr->mr_nents; 93853b2c1cbSChuck Lever __entry->handle = mr->mr_handle; 93953b2c1cbSChuck Lever __entry->length = mr->mr_length; 94053b2c1cbSChuck Lever __entry->offset = mr->mr_offset; 94153b2c1cbSChuck Lever __entry->dir = mr->mr_dir; 94253b2c1cbSChuck Lever __entry->rc = rc; 94353b2c1cbSChuck Lever ), 94453b2c1cbSChuck Lever 94562a89501SChuck Lever TP_printk("mr.id=%u nents=%d %u@0x%016llx:0x%08x (%s): rc=%d", 94662a89501SChuck Lever __entry->mr_id, __entry->nents, __entry->length, 94753b2c1cbSChuck Lever (unsigned long long)__entry->offset, __entry->handle, 94853b2c1cbSChuck Lever xprtrdma_show_direction(__entry->dir), 94953b2c1cbSChuck Lever __entry->rc 95053b2c1cbSChuck Lever ) 95153b2c1cbSChuck Lever ); 95253b2c1cbSChuck Lever 95353b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_sgerr, 95453b2c1cbSChuck Lever TP_PROTO( 95553b2c1cbSChuck Lever const struct rpcrdma_mr *mr, 95653b2c1cbSChuck Lever int sg_nents 95753b2c1cbSChuck Lever ), 95853b2c1cbSChuck Lever 95953b2c1cbSChuck Lever TP_ARGS(mr, sg_nents), 96053b2c1cbSChuck Lever 96153b2c1cbSChuck Lever TP_STRUCT__entry( 96262a89501SChuck Lever __field(u32, mr_id) 96353b2c1cbSChuck Lever __field(u64, addr) 96453b2c1cbSChuck Lever __field(u32, dir) 96553b2c1cbSChuck Lever __field(int, nents) 96653b2c1cbSChuck Lever ), 96753b2c1cbSChuck Lever 96853b2c1cbSChuck Lever TP_fast_assign( 96962a89501SChuck Lever __entry->mr_id = mr->frwr.fr_mr->res.id; 97053b2c1cbSChuck Lever __entry->addr = mr->mr_sg->dma_address; 97153b2c1cbSChuck Lever __entry->dir = mr->mr_dir; 97253b2c1cbSChuck Lever __entry->nents = sg_nents; 97353b2c1cbSChuck Lever ), 97453b2c1cbSChuck Lever 97562a89501SChuck Lever TP_printk("mr.id=%u DMA addr=0x%llx (%s) sg_nents=%d", 97662a89501SChuck Lever __entry->mr_id, __entry->addr, 97753b2c1cbSChuck Lever xprtrdma_show_direction(__entry->dir), 97853b2c1cbSChuck Lever __entry->nents 97953b2c1cbSChuck Lever ) 98053b2c1cbSChuck Lever ); 98153b2c1cbSChuck Lever 98253b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_maperr, 98353b2c1cbSChuck Lever TP_PROTO( 98453b2c1cbSChuck Lever const struct rpcrdma_mr *mr, 98553b2c1cbSChuck Lever int num_mapped 98653b2c1cbSChuck Lever ), 98753b2c1cbSChuck Lever 98853b2c1cbSChuck Lever TP_ARGS(mr, num_mapped), 98953b2c1cbSChuck Lever 99053b2c1cbSChuck Lever TP_STRUCT__entry( 99162a89501SChuck Lever __field(u32, mr_id) 99253b2c1cbSChuck Lever __field(u64, addr) 99353b2c1cbSChuck Lever __field(u32, dir) 99453b2c1cbSChuck Lever __field(int, num_mapped) 99553b2c1cbSChuck Lever __field(int, nents) 99653b2c1cbSChuck Lever ), 99753b2c1cbSChuck Lever 99853b2c1cbSChuck Lever TP_fast_assign( 99962a89501SChuck Lever __entry->mr_id = mr->frwr.fr_mr->res.id; 100053b2c1cbSChuck Lever __entry->addr = mr->mr_sg->dma_address; 100153b2c1cbSChuck Lever __entry->dir = mr->mr_dir; 100253b2c1cbSChuck Lever __entry->num_mapped = num_mapped; 100353b2c1cbSChuck Lever __entry->nents = mr->mr_nents; 100453b2c1cbSChuck Lever ), 100553b2c1cbSChuck Lever 100662a89501SChuck Lever TP_printk("mr.id=%u DMA addr=0x%llx (%s) nents=%d of %d", 100762a89501SChuck Lever __entry->mr_id, __entry->addr, 100853b2c1cbSChuck Lever xprtrdma_show_direction(__entry->dir), 100953b2c1cbSChuck Lever __entry->num_mapped, __entry->nents 101053b2c1cbSChuck Lever ) 101153b2c1cbSChuck Lever ); 101253b2c1cbSChuck Lever 1013*4ddd0fc3SChuck Lever DEFINE_MR_EVENT(fastreg); 1014d379eaa8SChuck Lever DEFINE_MR_EVENT(localinv); 1015*4ddd0fc3SChuck Lever DEFINE_MR_EVENT(reminv); 1016d379eaa8SChuck Lever DEFINE_MR_EVENT(map); 10177703db97SChuck Lever 10187703db97SChuck Lever DEFINE_ANON_MR_EVENT(unmap); 101958f10ad4SChuck Lever 102053b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_dma_maperr, 102153b2c1cbSChuck Lever TP_PROTO( 102253b2c1cbSChuck Lever u64 addr 102353b2c1cbSChuck Lever ), 102453b2c1cbSChuck Lever 102553b2c1cbSChuck Lever TP_ARGS(addr), 102653b2c1cbSChuck Lever 102753b2c1cbSChuck Lever TP_STRUCT__entry( 102853b2c1cbSChuck Lever __field(u64, addr) 102953b2c1cbSChuck Lever ), 103053b2c1cbSChuck Lever 103153b2c1cbSChuck Lever TP_fast_assign( 103253b2c1cbSChuck Lever __entry->addr = addr; 103353b2c1cbSChuck Lever ), 103453b2c1cbSChuck Lever 103553b2c1cbSChuck Lever TP_printk("dma addr=0x%llx\n", __entry->addr) 103653b2c1cbSChuck Lever ); 103753b2c1cbSChuck Lever 1038b4a7f91cSChuck Lever /** 1039b4a7f91cSChuck Lever ** Reply events 1040b4a7f91cSChuck Lever **/ 1041b4a7f91cSChuck Lever 1042b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_reply, 1043b4a7f91cSChuck Lever TP_PROTO( 1044b4a7f91cSChuck Lever const struct rpc_task *task, 1045b4a7f91cSChuck Lever const struct rpcrdma_rep *rep, 1046b4a7f91cSChuck Lever unsigned int credits 1047b4a7f91cSChuck Lever ), 1048b4a7f91cSChuck Lever 104903ffd924SChuck Lever TP_ARGS(task, rep, credits), 1050b4a7f91cSChuck Lever 1051b4a7f91cSChuck Lever TP_STRUCT__entry( 1052b4a7f91cSChuck Lever __field(unsigned int, task_id) 1053b4a7f91cSChuck Lever __field(unsigned int, client_id) 1054b4a7f91cSChuck Lever __field(u32, xid) 1055b4a7f91cSChuck Lever __field(unsigned int, credits) 1056b4a7f91cSChuck Lever ), 1057b4a7f91cSChuck Lever 1058b4a7f91cSChuck Lever TP_fast_assign( 1059b4a7f91cSChuck Lever __entry->task_id = task->tk_pid; 1060b4a7f91cSChuck Lever __entry->client_id = task->tk_client->cl_clid; 1061b4a7f91cSChuck Lever __entry->xid = be32_to_cpu(rep->rr_xid); 1062b4a7f91cSChuck Lever __entry->credits = credits; 1063b4a7f91cSChuck Lever ), 1064b4a7f91cSChuck Lever 106503ffd924SChuck Lever TP_printk("task:%u@%u xid=0x%08x credits=%u", 1066b4a7f91cSChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 106703ffd924SChuck Lever __entry->credits 1068b4a7f91cSChuck Lever ) 1069b4a7f91cSChuck Lever ); 1070b4a7f91cSChuck Lever 10713a9568feSChuck Lever DEFINE_REPLY_EVENT(vers); 10723a9568feSChuck Lever DEFINE_REPLY_EVENT(rqst); 10733a9568feSChuck Lever DEFINE_REPLY_EVENT(short); 10743a9568feSChuck Lever DEFINE_REPLY_EVENT(hdr); 1075b4a7f91cSChuck Lever 10763821e232SChuck Lever TRACE_EVENT(xprtrdma_err_vers, 1077e48f083eSChuck Lever TP_PROTO( 10783821e232SChuck Lever const struct rpc_rqst *rqst, 10793821e232SChuck Lever __be32 *min, 10803821e232SChuck Lever __be32 *max 1081e48f083eSChuck Lever ), 1082e48f083eSChuck Lever 10833821e232SChuck Lever TP_ARGS(rqst, min, max), 1084e48f083eSChuck Lever 1085e48f083eSChuck Lever TP_STRUCT__entry( 1086e48f083eSChuck Lever __field(unsigned int, task_id) 1087e48f083eSChuck Lever __field(unsigned int, client_id) 10883821e232SChuck Lever __field(u32, xid) 10893821e232SChuck Lever __field(u32, min) 10903821e232SChuck Lever __field(u32, max) 10913821e232SChuck Lever ), 10923821e232SChuck Lever 10933821e232SChuck Lever TP_fast_assign( 10943821e232SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 10953821e232SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 10963821e232SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 10973821e232SChuck Lever __entry->min = be32_to_cpup(min); 10983821e232SChuck Lever __entry->max = be32_to_cpup(max); 10993821e232SChuck Lever ), 11003821e232SChuck Lever 11013821e232SChuck Lever TP_printk("task:%u@%u xid=0x%08x versions=[%u, %u]", 11023821e232SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 11033821e232SChuck Lever __entry->min, __entry->max 11043821e232SChuck Lever ) 11053821e232SChuck Lever ); 11063821e232SChuck Lever 11073821e232SChuck Lever TRACE_EVENT(xprtrdma_err_chunk, 11083821e232SChuck Lever TP_PROTO( 11093821e232SChuck Lever const struct rpc_rqst *rqst 11103821e232SChuck Lever ), 11113821e232SChuck Lever 11123821e232SChuck Lever TP_ARGS(rqst), 11133821e232SChuck Lever 11143821e232SChuck Lever TP_STRUCT__entry( 11153821e232SChuck Lever __field(unsigned int, task_id) 11163821e232SChuck Lever __field(unsigned int, client_id) 1117e48f083eSChuck Lever __field(u32, xid) 1118e48f083eSChuck Lever ), 1119e48f083eSChuck Lever 1120e48f083eSChuck Lever TP_fast_assign( 11213821e232SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 11223821e232SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 11233821e232SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 1124e48f083eSChuck Lever ), 1125e48f083eSChuck Lever 11263821e232SChuck Lever TP_printk("task:%u@%u xid=0x%08x", 11273821e232SChuck Lever __entry->task_id, __entry->client_id, __entry->xid 1128e48f083eSChuck Lever ) 1129e48f083eSChuck Lever ); 1130e48f083eSChuck Lever 11313821e232SChuck Lever TRACE_EVENT(xprtrdma_err_unrecognized, 11323821e232SChuck Lever TP_PROTO( 11333821e232SChuck Lever const struct rpc_rqst *rqst, 11343821e232SChuck Lever __be32 *procedure 11353821e232SChuck Lever ), 11363821e232SChuck Lever 11373821e232SChuck Lever TP_ARGS(rqst, procedure), 11383821e232SChuck Lever 11393821e232SChuck Lever TP_STRUCT__entry( 11403821e232SChuck Lever __field(unsigned int, task_id) 11413821e232SChuck Lever __field(unsigned int, client_id) 11423821e232SChuck Lever __field(u32, xid) 11433821e232SChuck Lever __field(u32, procedure) 11443821e232SChuck Lever ), 11453821e232SChuck Lever 11463821e232SChuck Lever TP_fast_assign( 11473821e232SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 11483821e232SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 11493821e232SChuck Lever __entry->procedure = be32_to_cpup(procedure); 11503821e232SChuck Lever ), 11513821e232SChuck Lever 11523821e232SChuck Lever TP_printk("task:%u@%u xid=0x%08x procedure=%u", 11533821e232SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 11543821e232SChuck Lever __entry->procedure 11553821e232SChuck Lever ) 11563821e232SChuck Lever ); 1157e48f083eSChuck Lever 1158e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_fixup, 1159e11b7c96SChuck Lever TP_PROTO( 1160e11b7c96SChuck Lever const struct rpc_rqst *rqst, 1161d4957f01SChuck Lever unsigned long fixup 1162e11b7c96SChuck Lever ), 1163e11b7c96SChuck Lever 1164d4957f01SChuck Lever TP_ARGS(rqst, fixup), 1165e11b7c96SChuck Lever 1166e11b7c96SChuck Lever TP_STRUCT__entry( 1167e11b7c96SChuck Lever __field(unsigned int, task_id) 1168e11b7c96SChuck Lever __field(unsigned int, client_id) 1169d4957f01SChuck Lever __field(unsigned long, fixup) 1170d4957f01SChuck Lever __field(size_t, headlen) 1171d4957f01SChuck Lever __field(unsigned int, pagelen) 1172d4957f01SChuck Lever __field(size_t, taillen) 1173e11b7c96SChuck Lever ), 1174e11b7c96SChuck Lever 1175e11b7c96SChuck Lever TP_fast_assign( 1176e11b7c96SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 1177e11b7c96SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 1178d4957f01SChuck Lever __entry->fixup = fixup; 1179d4957f01SChuck Lever __entry->headlen = rqst->rq_rcv_buf.head[0].iov_len; 1180d4957f01SChuck Lever __entry->pagelen = rqst->rq_rcv_buf.page_len; 1181d4957f01SChuck Lever __entry->taillen = rqst->rq_rcv_buf.tail[0].iov_len; 1182e11b7c96SChuck Lever ), 1183e11b7c96SChuck Lever 1184d4957f01SChuck Lever TP_printk("task:%u@%u fixup=%lu xdr=%zu/%u/%zu", 1185d4957f01SChuck Lever __entry->task_id, __entry->client_id, __entry->fixup, 1186d4957f01SChuck Lever __entry->headlen, __entry->pagelen, __entry->taillen 1187e11b7c96SChuck Lever ) 1188e11b7c96SChuck Lever ); 1189e11b7c96SChuck Lever 1190e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_decode_seg, 1191e11b7c96SChuck Lever TP_PROTO( 1192e11b7c96SChuck Lever u32 handle, 1193e11b7c96SChuck Lever u32 length, 1194e11b7c96SChuck Lever u64 offset 1195e11b7c96SChuck Lever ), 1196e11b7c96SChuck Lever 1197e11b7c96SChuck Lever TP_ARGS(handle, length, offset), 1198e11b7c96SChuck Lever 1199e11b7c96SChuck Lever TP_STRUCT__entry( 1200e11b7c96SChuck Lever __field(u32, handle) 1201e11b7c96SChuck Lever __field(u32, length) 1202e11b7c96SChuck Lever __field(u64, offset) 1203e11b7c96SChuck Lever ), 1204e11b7c96SChuck Lever 1205e11b7c96SChuck Lever TP_fast_assign( 1206e11b7c96SChuck Lever __entry->handle = handle; 1207e11b7c96SChuck Lever __entry->length = length; 1208e11b7c96SChuck Lever __entry->offset = offset; 1209e11b7c96SChuck Lever ), 1210e11b7c96SChuck Lever 1211e11b7c96SChuck Lever TP_printk("%u@0x%016llx:0x%08x", 1212e11b7c96SChuck Lever __entry->length, (unsigned long long)__entry->offset, 1213e11b7c96SChuck Lever __entry->handle 1214e11b7c96SChuck Lever ) 1215e11b7c96SChuck Lever ); 1216e11b7c96SChuck Lever 12178e24e191SChuck Lever TRACE_EVENT(xprtrdma_mrs_zap, 12188e24e191SChuck Lever TP_PROTO( 12198e24e191SChuck Lever const struct rpc_task *task 12208e24e191SChuck Lever ), 12218e24e191SChuck Lever 12228e24e191SChuck Lever TP_ARGS(task), 12238e24e191SChuck Lever 12248e24e191SChuck Lever TP_STRUCT__entry( 12258e24e191SChuck Lever __field(unsigned int, task_id) 12268e24e191SChuck Lever __field(unsigned int, client_id) 12278e24e191SChuck Lever ), 12288e24e191SChuck Lever 12298e24e191SChuck Lever TP_fast_assign( 12308e24e191SChuck Lever __entry->task_id = task->tk_pid; 12318e24e191SChuck Lever __entry->client_id = task->tk_client->cl_clid; 12328e24e191SChuck Lever ), 12338e24e191SChuck Lever 12348e24e191SChuck Lever TP_printk("task:%u@%u", 12358e24e191SChuck Lever __entry->task_id, __entry->client_id 12368e24e191SChuck Lever ) 12378e24e191SChuck Lever ); 12388e24e191SChuck Lever 1239fc1eb807SChuck Lever /** 1240fc1eb807SChuck Lever ** Callback events 1241fc1eb807SChuck Lever **/ 1242fc1eb807SChuck Lever 1243fc1eb807SChuck Lever TRACE_EVENT(xprtrdma_cb_setup, 1244fc1eb807SChuck Lever TP_PROTO( 1245fc1eb807SChuck Lever const struct rpcrdma_xprt *r_xprt, 1246fc1eb807SChuck Lever unsigned int reqs 1247fc1eb807SChuck Lever ), 1248fc1eb807SChuck Lever 1249fc1eb807SChuck Lever TP_ARGS(r_xprt, reqs), 1250fc1eb807SChuck Lever 1251fc1eb807SChuck Lever TP_STRUCT__entry( 1252fc1eb807SChuck Lever __field(const void *, r_xprt) 1253fc1eb807SChuck Lever __field(unsigned int, reqs) 1254fc1eb807SChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 1255fc1eb807SChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 1256fc1eb807SChuck Lever ), 1257fc1eb807SChuck Lever 1258fc1eb807SChuck Lever TP_fast_assign( 1259fc1eb807SChuck Lever __entry->r_xprt = r_xprt; 1260fc1eb807SChuck Lever __entry->reqs = reqs; 1261fc1eb807SChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 1262fc1eb807SChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 1263fc1eb807SChuck Lever ), 1264fc1eb807SChuck Lever 1265fc1eb807SChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: %u reqs", 1266fc1eb807SChuck Lever __get_str(addr), __get_str(port), 1267fc1eb807SChuck Lever __entry->r_xprt, __entry->reqs 1268fc1eb807SChuck Lever ) 1269fc1eb807SChuck Lever ); 1270fc1eb807SChuck Lever 1271d11e9346SChuck Lever DEFINE_CALLBACK_EVENT(call); 1272d11e9346SChuck Lever DEFINE_CALLBACK_EVENT(reply); 127307e10308SChuck Lever 127498895edbSChuck Lever /** 127598895edbSChuck Lever ** Server-side RPC/RDMA events 127698895edbSChuck Lever **/ 127798895edbSChuck Lever 1278e979a173SChuck Lever DECLARE_EVENT_CLASS(svcrdma_accept_class, 1279e979a173SChuck Lever TP_PROTO( 1280e979a173SChuck Lever const struct svcxprt_rdma *rdma, 1281e979a173SChuck Lever long status 1282e979a173SChuck Lever ), 1283e979a173SChuck Lever 1284e979a173SChuck Lever TP_ARGS(rdma, status), 1285e979a173SChuck Lever 1286e979a173SChuck Lever TP_STRUCT__entry( 1287e979a173SChuck Lever __field(long, status) 1288e979a173SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1289e979a173SChuck Lever ), 1290e979a173SChuck Lever 1291e979a173SChuck Lever TP_fast_assign( 1292e979a173SChuck Lever __entry->status = status; 1293e979a173SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1294e979a173SChuck Lever ), 1295e979a173SChuck Lever 1296e979a173SChuck Lever TP_printk("addr=%s status=%ld", 1297e979a173SChuck Lever __get_str(addr), __entry->status 1298e979a173SChuck Lever ) 1299e979a173SChuck Lever ); 1300e979a173SChuck Lever 1301e979a173SChuck Lever #define DEFINE_ACCEPT_EVENT(name) \ 1302e979a173SChuck Lever DEFINE_EVENT(svcrdma_accept_class, svcrdma_##name##_err, \ 1303e979a173SChuck Lever TP_PROTO( \ 1304e979a173SChuck Lever const struct svcxprt_rdma *rdma, \ 1305e979a173SChuck Lever long status \ 1306e979a173SChuck Lever ), \ 1307e979a173SChuck Lever TP_ARGS(rdma, status)) 1308e979a173SChuck Lever 1309e979a173SChuck Lever DEFINE_ACCEPT_EVENT(pd); 1310e979a173SChuck Lever DEFINE_ACCEPT_EVENT(qp); 1311e979a173SChuck Lever DEFINE_ACCEPT_EVENT(fabric); 1312e979a173SChuck Lever DEFINE_ACCEPT_EVENT(initdepth); 1313e979a173SChuck Lever DEFINE_ACCEPT_EVENT(accept); 1314e979a173SChuck Lever 131598895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_MSG); 131698895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_NOMSG); 131798895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_MSGP); 131898895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_DONE); 131998895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_ERROR); 132098895edbSChuck Lever 132198895edbSChuck Lever #define show_rpcrdma_proc(x) \ 132298895edbSChuck Lever __print_symbolic(x, \ 132398895edbSChuck Lever { RDMA_MSG, "RDMA_MSG" }, \ 132498895edbSChuck Lever { RDMA_NOMSG, "RDMA_NOMSG" }, \ 132598895edbSChuck Lever { RDMA_MSGP, "RDMA_MSGP" }, \ 132698895edbSChuck Lever { RDMA_DONE, "RDMA_DONE" }, \ 132798895edbSChuck Lever { RDMA_ERROR, "RDMA_ERROR" }) 132898895edbSChuck Lever 132998895edbSChuck Lever TRACE_EVENT(svcrdma_decode_rqst, 133098895edbSChuck Lever TP_PROTO( 1331007140eeSChuck Lever const struct svc_rdma_recv_ctxt *ctxt, 133298895edbSChuck Lever __be32 *p, 133398895edbSChuck Lever unsigned int hdrlen 133498895edbSChuck Lever ), 133598895edbSChuck Lever 1336007140eeSChuck Lever TP_ARGS(ctxt, p, hdrlen), 133798895edbSChuck Lever 133898895edbSChuck Lever TP_STRUCT__entry( 1339007140eeSChuck Lever __field(u32, cq_id) 1340007140eeSChuck Lever __field(int, completion_id) 134198895edbSChuck Lever __field(u32, xid) 134298895edbSChuck Lever __field(u32, vers) 134398895edbSChuck Lever __field(u32, proc) 134498895edbSChuck Lever __field(u32, credits) 134598895edbSChuck Lever __field(unsigned int, hdrlen) 134698895edbSChuck Lever ), 134798895edbSChuck Lever 134898895edbSChuck Lever TP_fast_assign( 1349007140eeSChuck Lever __entry->cq_id = ctxt->rc_cid.ci_queue_id; 1350007140eeSChuck Lever __entry->completion_id = ctxt->rc_cid.ci_completion_id; 135198895edbSChuck Lever __entry->xid = be32_to_cpup(p++); 135298895edbSChuck Lever __entry->vers = be32_to_cpup(p++); 135398895edbSChuck Lever __entry->credits = be32_to_cpup(p++); 135498895edbSChuck Lever __entry->proc = be32_to_cpup(p); 135598895edbSChuck Lever __entry->hdrlen = hdrlen; 135698895edbSChuck Lever ), 135798895edbSChuck Lever 1358007140eeSChuck Lever TP_printk("cq.id=%u cid=%d xid=0x%08x vers=%u credits=%u proc=%s hdrlen=%u", 1359007140eeSChuck Lever __entry->cq_id, __entry->completion_id, 136098895edbSChuck Lever __entry->xid, __entry->vers, __entry->credits, 136198895edbSChuck Lever show_rpcrdma_proc(__entry->proc), __entry->hdrlen) 136298895edbSChuck Lever ); 136398895edbSChuck Lever 136427ce6294SChuck Lever TRACE_EVENT(svcrdma_decode_short_err, 136598895edbSChuck Lever TP_PROTO( 1366007140eeSChuck Lever const struct svc_rdma_recv_ctxt *ctxt, 136798895edbSChuck Lever unsigned int hdrlen 136898895edbSChuck Lever ), 136998895edbSChuck Lever 1370007140eeSChuck Lever TP_ARGS(ctxt, hdrlen), 137198895edbSChuck Lever 137298895edbSChuck Lever TP_STRUCT__entry( 1373007140eeSChuck Lever __field(u32, cq_id) 1374007140eeSChuck Lever __field(int, completion_id) 137598895edbSChuck Lever __field(unsigned int, hdrlen) 137698895edbSChuck Lever ), 137798895edbSChuck Lever 137898895edbSChuck Lever TP_fast_assign( 1379007140eeSChuck Lever __entry->cq_id = ctxt->rc_cid.ci_queue_id; 1380007140eeSChuck Lever __entry->completion_id = ctxt->rc_cid.ci_completion_id; 138198895edbSChuck Lever __entry->hdrlen = hdrlen; 138298895edbSChuck Lever ), 138398895edbSChuck Lever 1384007140eeSChuck Lever TP_printk("cq.id=%u cid=%d hdrlen=%u", 1385007140eeSChuck Lever __entry->cq_id, __entry->completion_id, 1386007140eeSChuck Lever __entry->hdrlen) 138798895edbSChuck Lever ); 138898895edbSChuck Lever 138998895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_badreq_event, 139098895edbSChuck Lever TP_PROTO( 1391007140eeSChuck Lever const struct svc_rdma_recv_ctxt *ctxt, 139298895edbSChuck Lever __be32 *p 139398895edbSChuck Lever ), 139498895edbSChuck Lever 1395007140eeSChuck Lever TP_ARGS(ctxt, p), 139698895edbSChuck Lever 139798895edbSChuck Lever TP_STRUCT__entry( 1398007140eeSChuck Lever __field(u32, cq_id) 1399007140eeSChuck Lever __field(int, completion_id) 140098895edbSChuck Lever __field(u32, xid) 140198895edbSChuck Lever __field(u32, vers) 140298895edbSChuck Lever __field(u32, proc) 140398895edbSChuck Lever __field(u32, credits) 140498895edbSChuck Lever ), 140598895edbSChuck Lever 140698895edbSChuck Lever TP_fast_assign( 1407007140eeSChuck Lever __entry->cq_id = ctxt->rc_cid.ci_queue_id; 1408007140eeSChuck Lever __entry->completion_id = ctxt->rc_cid.ci_completion_id; 140998895edbSChuck Lever __entry->xid = be32_to_cpup(p++); 141098895edbSChuck Lever __entry->vers = be32_to_cpup(p++); 141198895edbSChuck Lever __entry->credits = be32_to_cpup(p++); 141298895edbSChuck Lever __entry->proc = be32_to_cpup(p); 141398895edbSChuck Lever ), 141498895edbSChuck Lever 1415007140eeSChuck Lever TP_printk("cq.id=%u cid=%d xid=0x%08x vers=%u credits=%u proc=%u", 1416007140eeSChuck Lever __entry->cq_id, __entry->completion_id, 141798895edbSChuck Lever __entry->xid, __entry->vers, __entry->credits, __entry->proc) 141898895edbSChuck Lever ); 141998895edbSChuck Lever 142098895edbSChuck Lever #define DEFINE_BADREQ_EVENT(name) \ 142127ce6294SChuck Lever DEFINE_EVENT(svcrdma_badreq_event, \ 142227ce6294SChuck Lever svcrdma_decode_##name##_err, \ 142398895edbSChuck Lever TP_PROTO( \ 1424007140eeSChuck Lever const struct svc_rdma_recv_ctxt *ctxt, \ 142598895edbSChuck Lever __be32 *p \ 142698895edbSChuck Lever ), \ 1427007140eeSChuck Lever TP_ARGS(ctxt, p)) 142898895edbSChuck Lever 142998895edbSChuck Lever DEFINE_BADREQ_EVENT(badvers); 143098895edbSChuck Lever DEFINE_BADREQ_EVENT(drop); 143198895edbSChuck Lever DEFINE_BADREQ_EVENT(badproc); 143298895edbSChuck Lever DEFINE_BADREQ_EVENT(parse); 143398895edbSChuck Lever 14346911f3e1SChuck Lever TRACE_EVENT(svcrdma_encode_wseg, 14356911f3e1SChuck Lever TP_PROTO( 14366911f3e1SChuck Lever const struct svc_rdma_send_ctxt *ctxt, 14376911f3e1SChuck Lever u32 segno, 14386911f3e1SChuck Lever u32 handle, 14396911f3e1SChuck Lever u32 length, 14406911f3e1SChuck Lever u64 offset 14416911f3e1SChuck Lever ), 14426911f3e1SChuck Lever 14436911f3e1SChuck Lever TP_ARGS(ctxt, segno, handle, length, offset), 14446911f3e1SChuck Lever 14456911f3e1SChuck Lever TP_STRUCT__entry( 14466911f3e1SChuck Lever __field(u32, cq_id) 14476911f3e1SChuck Lever __field(int, completion_id) 14486911f3e1SChuck Lever __field(u32, segno) 14496911f3e1SChuck Lever __field(u32, handle) 14506911f3e1SChuck Lever __field(u32, length) 14516911f3e1SChuck Lever __field(u64, offset) 14526911f3e1SChuck Lever ), 14536911f3e1SChuck Lever 14546911f3e1SChuck Lever TP_fast_assign( 14556911f3e1SChuck Lever __entry->cq_id = ctxt->sc_cid.ci_queue_id; 14566911f3e1SChuck Lever __entry->completion_id = ctxt->sc_cid.ci_completion_id; 14576911f3e1SChuck Lever __entry->segno = segno; 14586911f3e1SChuck Lever __entry->handle = handle; 14596911f3e1SChuck Lever __entry->length = length; 14606911f3e1SChuck Lever __entry->offset = offset; 14616911f3e1SChuck Lever ), 14626911f3e1SChuck Lever 14636911f3e1SChuck Lever TP_printk("cq_id=%u cid=%d segno=%u %u@0x%016llx:0x%08x", 14646911f3e1SChuck Lever __entry->cq_id, __entry->completion_id, 14656911f3e1SChuck Lever __entry->segno, __entry->length, 14666911f3e1SChuck Lever (unsigned long long)__entry->offset, __entry->handle 14676911f3e1SChuck Lever ) 14686911f3e1SChuck Lever ); 14696911f3e1SChuck Lever 147078147ca8SChuck Lever TRACE_EVENT(svcrdma_decode_rseg, 147178147ca8SChuck Lever TP_PROTO( 147278147ca8SChuck Lever const struct rpc_rdma_cid *cid, 147378147ca8SChuck Lever const struct svc_rdma_chunk *chunk, 147478147ca8SChuck Lever const struct svc_rdma_segment *segment 147578147ca8SChuck Lever ), 147678147ca8SChuck Lever 147778147ca8SChuck Lever TP_ARGS(cid, chunk, segment), 147878147ca8SChuck Lever 147978147ca8SChuck Lever TP_STRUCT__entry( 148078147ca8SChuck Lever __field(u32, cq_id) 148178147ca8SChuck Lever __field(int, completion_id) 148278147ca8SChuck Lever __field(u32, segno) 148378147ca8SChuck Lever __field(u32, position) 148478147ca8SChuck Lever __field(u32, handle) 148578147ca8SChuck Lever __field(u32, length) 148678147ca8SChuck Lever __field(u64, offset) 148778147ca8SChuck Lever ), 148878147ca8SChuck Lever 148978147ca8SChuck Lever TP_fast_assign( 149078147ca8SChuck Lever __entry->cq_id = cid->ci_queue_id; 149178147ca8SChuck Lever __entry->completion_id = cid->ci_completion_id; 149278147ca8SChuck Lever __entry->segno = chunk->ch_segcount; 149378147ca8SChuck Lever __entry->position = chunk->ch_position; 149478147ca8SChuck Lever __entry->handle = segment->rs_handle; 149578147ca8SChuck Lever __entry->length = segment->rs_length; 149678147ca8SChuck Lever __entry->offset = segment->rs_offset; 149778147ca8SChuck Lever ), 149878147ca8SChuck Lever 149978147ca8SChuck Lever TP_printk("cq_id=%u cid=%d segno=%u position=%u %u@0x%016llx:0x%08x", 150078147ca8SChuck Lever __entry->cq_id, __entry->completion_id, 150178147ca8SChuck Lever __entry->segno, __entry->position, __entry->length, 150278147ca8SChuck Lever (unsigned long long)__entry->offset, __entry->handle 150378147ca8SChuck Lever ) 150478147ca8SChuck Lever ); 150578147ca8SChuck Lever 150678147ca8SChuck Lever TRACE_EVENT(svcrdma_decode_wseg, 150778147ca8SChuck Lever TP_PROTO( 150878147ca8SChuck Lever const struct rpc_rdma_cid *cid, 150978147ca8SChuck Lever const struct svc_rdma_chunk *chunk, 151078147ca8SChuck Lever u32 segno 151178147ca8SChuck Lever ), 151278147ca8SChuck Lever 151378147ca8SChuck Lever TP_ARGS(cid, chunk, segno), 151478147ca8SChuck Lever 151578147ca8SChuck Lever TP_STRUCT__entry( 151678147ca8SChuck Lever __field(u32, cq_id) 151778147ca8SChuck Lever __field(int, completion_id) 151878147ca8SChuck Lever __field(u32, segno) 151978147ca8SChuck Lever __field(u32, handle) 152078147ca8SChuck Lever __field(u32, length) 152178147ca8SChuck Lever __field(u64, offset) 152278147ca8SChuck Lever ), 152378147ca8SChuck Lever 152478147ca8SChuck Lever TP_fast_assign( 152578147ca8SChuck Lever const struct svc_rdma_segment *segment = 152678147ca8SChuck Lever &chunk->ch_segments[segno]; 152778147ca8SChuck Lever 152878147ca8SChuck Lever __entry->cq_id = cid->ci_queue_id; 152978147ca8SChuck Lever __entry->completion_id = cid->ci_completion_id; 153078147ca8SChuck Lever __entry->segno = segno; 153178147ca8SChuck Lever __entry->handle = segment->rs_handle; 153278147ca8SChuck Lever __entry->length = segment->rs_length; 153378147ca8SChuck Lever __entry->offset = segment->rs_offset; 153478147ca8SChuck Lever ), 153578147ca8SChuck Lever 153678147ca8SChuck Lever TP_printk("cq_id=%u cid=%d segno=%u %u@0x%016llx:0x%08x", 153778147ca8SChuck Lever __entry->cq_id, __entry->completion_id, 153878147ca8SChuck Lever __entry->segno, __entry->length, 153978147ca8SChuck Lever (unsigned long long)__entry->offset, __entry->handle 154078147ca8SChuck Lever ) 154178147ca8SChuck Lever ); 154278147ca8SChuck Lever 154398895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_error_event, 154498895edbSChuck Lever TP_PROTO( 154598895edbSChuck Lever __be32 xid 154698895edbSChuck Lever ), 154798895edbSChuck Lever 154898895edbSChuck Lever TP_ARGS(xid), 154998895edbSChuck Lever 155098895edbSChuck Lever TP_STRUCT__entry( 155198895edbSChuck Lever __field(u32, xid) 155298895edbSChuck Lever ), 155398895edbSChuck Lever 155498895edbSChuck Lever TP_fast_assign( 155598895edbSChuck Lever __entry->xid = be32_to_cpu(xid); 155698895edbSChuck Lever ), 155798895edbSChuck Lever 155898895edbSChuck Lever TP_printk("xid=0x%08x", 155998895edbSChuck Lever __entry->xid 156098895edbSChuck Lever ) 156198895edbSChuck Lever ); 156298895edbSChuck Lever 156398895edbSChuck Lever #define DEFINE_ERROR_EVENT(name) \ 156498895edbSChuck Lever DEFINE_EVENT(svcrdma_error_event, svcrdma_err_##name, \ 156598895edbSChuck Lever TP_PROTO( \ 156698895edbSChuck Lever __be32 xid \ 156798895edbSChuck Lever ), \ 156898895edbSChuck Lever TP_ARGS(xid)) 156998895edbSChuck Lever 157098895edbSChuck Lever DEFINE_ERROR_EVENT(vers); 157198895edbSChuck Lever DEFINE_ERROR_EVENT(chunk); 157298895edbSChuck Lever 1573bd2abef3SChuck Lever /** 1574bd2abef3SChuck Lever ** Server-side RDMA API events 1575bd2abef3SChuck Lever **/ 1576bd2abef3SChuck Lever 1577832b2cb9SChuck Lever DECLARE_EVENT_CLASS(svcrdma_dma_map_class, 1578bd2abef3SChuck Lever TP_PROTO( 1579bd2abef3SChuck Lever const struct svcxprt_rdma *rdma, 1580832b2cb9SChuck Lever u64 dma_addr, 1581832b2cb9SChuck Lever u32 length 1582bd2abef3SChuck Lever ), 1583bd2abef3SChuck Lever 1584832b2cb9SChuck Lever TP_ARGS(rdma, dma_addr, length), 1585bd2abef3SChuck Lever 1586bd2abef3SChuck Lever TP_STRUCT__entry( 1587832b2cb9SChuck Lever __field(u64, dma_addr) 1588832b2cb9SChuck Lever __field(u32, length) 1589bd2abef3SChuck Lever __string(device, rdma->sc_cm_id->device->name) 1590bd2abef3SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1591bd2abef3SChuck Lever ), 1592bd2abef3SChuck Lever 1593bd2abef3SChuck Lever TP_fast_assign( 1594832b2cb9SChuck Lever __entry->dma_addr = dma_addr; 1595832b2cb9SChuck Lever __entry->length = length; 1596bd2abef3SChuck Lever __assign_str(device, rdma->sc_cm_id->device->name); 1597bd2abef3SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1598bd2abef3SChuck Lever ), 1599bd2abef3SChuck Lever 1600832b2cb9SChuck Lever TP_printk("addr=%s device=%s dma_addr=%llu length=%u", 1601832b2cb9SChuck Lever __get_str(addr), __get_str(device), 1602832b2cb9SChuck Lever __entry->dma_addr, __entry->length 1603bd2abef3SChuck Lever ) 1604bd2abef3SChuck Lever ); 1605bd2abef3SChuck Lever 1606832b2cb9SChuck Lever #define DEFINE_SVC_DMA_EVENT(name) \ 1607832b2cb9SChuck Lever DEFINE_EVENT(svcrdma_dma_map_class, svcrdma_##name, \ 1608832b2cb9SChuck Lever TP_PROTO( \ 1609832b2cb9SChuck Lever const struct svcxprt_rdma *rdma,\ 1610832b2cb9SChuck Lever u64 dma_addr, \ 1611832b2cb9SChuck Lever u32 length \ 1612832b2cb9SChuck Lever ), \ 1613832b2cb9SChuck Lever TP_ARGS(rdma, dma_addr, length)) 1614832b2cb9SChuck Lever 1615832b2cb9SChuck Lever DEFINE_SVC_DMA_EVENT(dma_map_page); 16162371bcc0SChuck Lever DEFINE_SVC_DMA_EVENT(dma_map_err); 1617832b2cb9SChuck Lever DEFINE_SVC_DMA_EVENT(dma_unmap_page); 1618832b2cb9SChuck Lever 16192abfbe7eSChuck Lever TRACE_EVENT(svcrdma_dma_map_rw_err, 1620bd2abef3SChuck Lever TP_PROTO( 1621bd2abef3SChuck Lever const struct svcxprt_rdma *rdma, 16222abfbe7eSChuck Lever unsigned int nents, 1623bd2abef3SChuck Lever int status 1624bd2abef3SChuck Lever ), 1625bd2abef3SChuck Lever 16262abfbe7eSChuck Lever TP_ARGS(rdma, nents, status), 1627bd2abef3SChuck Lever 1628bd2abef3SChuck Lever TP_STRUCT__entry( 1629bd2abef3SChuck Lever __field(int, status) 16302abfbe7eSChuck Lever __field(unsigned int, nents) 1631bd2abef3SChuck Lever __string(device, rdma->sc_cm_id->device->name) 1632bd2abef3SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1633bd2abef3SChuck Lever ), 1634bd2abef3SChuck Lever 1635bd2abef3SChuck Lever TP_fast_assign( 1636bd2abef3SChuck Lever __entry->status = status; 16372abfbe7eSChuck Lever __entry->nents = nents; 1638bd2abef3SChuck Lever __assign_str(device, rdma->sc_cm_id->device->name); 1639bd2abef3SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1640bd2abef3SChuck Lever ), 1641bd2abef3SChuck Lever 16422abfbe7eSChuck Lever TP_printk("addr=%s device=%s nents=%u status=%d", 16432abfbe7eSChuck Lever __get_str(addr), __get_str(device), __entry->nents, 16442abfbe7eSChuck Lever __entry->status 1645bd2abef3SChuck Lever ) 1646bd2abef3SChuck Lever ); 1647bd2abef3SChuck Lever 1648f4e53e1cSChuck Lever TRACE_EVENT(svcrdma_no_rwctx_err, 1649f4e53e1cSChuck Lever TP_PROTO( 1650f4e53e1cSChuck Lever const struct svcxprt_rdma *rdma, 1651f4e53e1cSChuck Lever unsigned int num_sges 1652f4e53e1cSChuck Lever ), 1653f4e53e1cSChuck Lever 1654f4e53e1cSChuck Lever TP_ARGS(rdma, num_sges), 1655f4e53e1cSChuck Lever 1656f4e53e1cSChuck Lever TP_STRUCT__entry( 1657f4e53e1cSChuck Lever __field(unsigned int, num_sges) 1658f4e53e1cSChuck Lever __string(device, rdma->sc_cm_id->device->name) 1659f4e53e1cSChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1660f4e53e1cSChuck Lever ), 1661f4e53e1cSChuck Lever 1662f4e53e1cSChuck Lever TP_fast_assign( 1663f4e53e1cSChuck Lever __entry->num_sges = num_sges; 1664f4e53e1cSChuck Lever __assign_str(device, rdma->sc_cm_id->device->name); 1665f4e53e1cSChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1666f4e53e1cSChuck Lever ), 1667f4e53e1cSChuck Lever 1668f4e53e1cSChuck Lever TP_printk("addr=%s device=%s num_sges=%d", 1669f4e53e1cSChuck Lever __get_str(addr), __get_str(device), __entry->num_sges 1670f4e53e1cSChuck Lever ) 1671f4e53e1cSChuck Lever ); 1672f4e53e1cSChuck Lever 16739d200638SChuck Lever TRACE_EVENT(svcrdma_page_overrun_err, 16749d200638SChuck Lever TP_PROTO( 16759d200638SChuck Lever const struct svcxprt_rdma *rdma, 16769d200638SChuck Lever const struct svc_rqst *rqst, 16779d200638SChuck Lever unsigned int pageno 16789d200638SChuck Lever ), 16799d200638SChuck Lever 16809d200638SChuck Lever TP_ARGS(rdma, rqst, pageno), 16819d200638SChuck Lever 16829d200638SChuck Lever TP_STRUCT__entry( 16839d200638SChuck Lever __field(unsigned int, pageno) 16849d200638SChuck Lever __field(u32, xid) 16859d200638SChuck Lever __string(device, rdma->sc_cm_id->device->name) 16869d200638SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 16879d200638SChuck Lever ), 16889d200638SChuck Lever 16899d200638SChuck Lever TP_fast_assign( 16909d200638SChuck Lever __entry->pageno = pageno; 16919d200638SChuck Lever __entry->xid = __be32_to_cpu(rqst->rq_xid); 16929d200638SChuck Lever __assign_str(device, rdma->sc_cm_id->device->name); 16939d200638SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 16949d200638SChuck Lever ), 16959d200638SChuck Lever 16969d200638SChuck Lever TP_printk("addr=%s device=%s xid=0x%08x pageno=%u", __get_str(addr), 16979d200638SChuck Lever __get_str(device), __entry->xid, __entry->pageno 16989d200638SChuck Lever ) 16999d200638SChuck Lever ); 17009d200638SChuck Lever 1701dbc17acdSChuck Lever TRACE_EVENT(svcrdma_small_wrch_err, 1702dbc17acdSChuck Lever TP_PROTO( 1703dbc17acdSChuck Lever const struct svcxprt_rdma *rdma, 1704dbc17acdSChuck Lever unsigned int remaining, 1705dbc17acdSChuck Lever unsigned int seg_no, 1706dbc17acdSChuck Lever unsigned int num_segs 1707dbc17acdSChuck Lever ), 1708dbc17acdSChuck Lever 1709dbc17acdSChuck Lever TP_ARGS(rdma, remaining, seg_no, num_segs), 1710dbc17acdSChuck Lever 1711dbc17acdSChuck Lever TP_STRUCT__entry( 1712dbc17acdSChuck Lever __field(unsigned int, remaining) 1713dbc17acdSChuck Lever __field(unsigned int, seg_no) 1714dbc17acdSChuck Lever __field(unsigned int, num_segs) 1715dbc17acdSChuck Lever __string(device, rdma->sc_cm_id->device->name) 1716dbc17acdSChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1717dbc17acdSChuck Lever ), 1718dbc17acdSChuck Lever 1719dbc17acdSChuck Lever TP_fast_assign( 1720dbc17acdSChuck Lever __entry->remaining = remaining; 1721dbc17acdSChuck Lever __entry->seg_no = seg_no; 1722dbc17acdSChuck Lever __entry->num_segs = num_segs; 1723dbc17acdSChuck Lever __assign_str(device, rdma->sc_cm_id->device->name); 1724dbc17acdSChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1725dbc17acdSChuck Lever ), 1726dbc17acdSChuck Lever 1727dbc17acdSChuck Lever TP_printk("addr=%s device=%s remaining=%u seg_no=%u num_segs=%u", 1728dbc17acdSChuck Lever __get_str(addr), __get_str(device), __entry->remaining, 1729dbc17acdSChuck Lever __entry->seg_no, __entry->num_segs 1730dbc17acdSChuck Lever ) 1731dbc17acdSChuck Lever ); 1732dbc17acdSChuck Lever 17330dabe948SChuck Lever TRACE_EVENT(svcrdma_send_pullup, 17340dabe948SChuck Lever TP_PROTO( 17359d0b09d5SChuck Lever const struct svc_rdma_send_ctxt *ctxt, 17369d0b09d5SChuck Lever unsigned int msglen 17370dabe948SChuck Lever ), 17380dabe948SChuck Lever 17399d0b09d5SChuck Lever TP_ARGS(ctxt, msglen), 17400dabe948SChuck Lever 17410dabe948SChuck Lever TP_STRUCT__entry( 17429d0b09d5SChuck Lever __field(u32, cq_id) 17439d0b09d5SChuck Lever __field(int, completion_id) 17449d0b09d5SChuck Lever __field(unsigned int, hdrlen) 17459d0b09d5SChuck Lever __field(unsigned int, msglen) 17460dabe948SChuck Lever ), 17470dabe948SChuck Lever 17480dabe948SChuck Lever TP_fast_assign( 17499d0b09d5SChuck Lever __entry->cq_id = ctxt->sc_cid.ci_queue_id; 17509d0b09d5SChuck Lever __entry->completion_id = ctxt->sc_cid.ci_completion_id; 17519d0b09d5SChuck Lever __entry->hdrlen = ctxt->sc_hdrbuf.len, 17529d0b09d5SChuck Lever __entry->msglen = msglen; 17530dabe948SChuck Lever ), 17540dabe948SChuck Lever 17559d0b09d5SChuck Lever TP_printk("cq_id=%u cid=%d hdr=%u msg=%u (total %u)", 17569d0b09d5SChuck Lever __entry->cq_id, __entry->completion_id, 17579d0b09d5SChuck Lever __entry->hdrlen, __entry->msglen, 17589d0b09d5SChuck Lever __entry->hdrlen + __entry->msglen) 17590dabe948SChuck Lever ); 17600dabe948SChuck Lever 17613f8f25c6SChuck Lever TRACE_EVENT(svcrdma_send_err, 1762bd2abef3SChuck Lever TP_PROTO( 1763bd2abef3SChuck Lever const struct svc_rqst *rqst, 1764bd2abef3SChuck Lever int status 1765bd2abef3SChuck Lever ), 1766bd2abef3SChuck Lever 1767bd2abef3SChuck Lever TP_ARGS(rqst, status), 1768bd2abef3SChuck Lever 1769bd2abef3SChuck Lever TP_STRUCT__entry( 1770bd2abef3SChuck Lever __field(int, status) 1771bd2abef3SChuck Lever __field(u32, xid) 1772bd2abef3SChuck Lever __string(addr, rqst->rq_xprt->xpt_remotebuf) 1773bd2abef3SChuck Lever ), 1774bd2abef3SChuck Lever 1775bd2abef3SChuck Lever TP_fast_assign( 1776bd2abef3SChuck Lever __entry->status = status; 1777bd2abef3SChuck Lever __entry->xid = __be32_to_cpu(rqst->rq_xid); 1778bd2abef3SChuck Lever __assign_str(addr, rqst->rq_xprt->xpt_remotebuf); 1779bd2abef3SChuck Lever ), 1780bd2abef3SChuck Lever 17813f8f25c6SChuck Lever TP_printk("addr=%s xid=0x%08x status=%d", __get_str(addr), 1782bd2abef3SChuck Lever __entry->xid, __entry->status 1783bd2abef3SChuck Lever ) 1784bd2abef3SChuck Lever ); 1785bd2abef3SChuck Lever 1786bd2abef3SChuck Lever TRACE_EVENT(svcrdma_post_send, 1787bd2abef3SChuck Lever TP_PROTO( 178817f70f8dSChuck Lever const struct svc_rdma_send_ctxt *ctxt 1789bd2abef3SChuck Lever ), 1790bd2abef3SChuck Lever 179117f70f8dSChuck Lever TP_ARGS(ctxt), 1792bd2abef3SChuck Lever 1793bd2abef3SChuck Lever TP_STRUCT__entry( 179417f70f8dSChuck Lever __field(u32, cq_id) 179517f70f8dSChuck Lever __field(int, completion_id) 1796bd2abef3SChuck Lever __field(unsigned int, num_sge) 1797bd2abef3SChuck Lever __field(u32, inv_rkey) 1798bd2abef3SChuck Lever ), 1799bd2abef3SChuck Lever 1800bd2abef3SChuck Lever TP_fast_assign( 180117f70f8dSChuck Lever const struct ib_send_wr *wr = &ctxt->sc_send_wr; 180217f70f8dSChuck Lever 180317f70f8dSChuck Lever __entry->cq_id = ctxt->sc_cid.ci_queue_id; 180417f70f8dSChuck Lever __entry->completion_id = ctxt->sc_cid.ci_completion_id; 1805bd2abef3SChuck Lever __entry->num_sge = wr->num_sge; 1806bd2abef3SChuck Lever __entry->inv_rkey = (wr->opcode == IB_WR_SEND_WITH_INV) ? 1807bd2abef3SChuck Lever wr->ex.invalidate_rkey : 0; 1808bd2abef3SChuck Lever ), 1809bd2abef3SChuck Lever 181017f70f8dSChuck Lever TP_printk("cq_id=%u cid=%d num_sge=%u inv_rkey=0x%08x", 181117f70f8dSChuck Lever __entry->cq_id, __entry->completion_id, 181217f70f8dSChuck Lever __entry->num_sge, __entry->inv_rkey 1813bd2abef3SChuck Lever ) 1814bd2abef3SChuck Lever ); 1815bd2abef3SChuck Lever 18163ac56c2fSChuck Lever DEFINE_COMPLETION_EVENT(svcrdma_wc_send); 1817bd2abef3SChuck Lever 1818bd2abef3SChuck Lever TRACE_EVENT(svcrdma_post_recv, 1819bd2abef3SChuck Lever TP_PROTO( 18209b3bcf8cSChuck Lever const struct svc_rdma_recv_ctxt *ctxt 1821bd2abef3SChuck Lever ), 1822bd2abef3SChuck Lever 18239b3bcf8cSChuck Lever TP_ARGS(ctxt), 1824bd2abef3SChuck Lever 1825bd2abef3SChuck Lever TP_STRUCT__entry( 18269b3bcf8cSChuck Lever __field(u32, cq_id) 18279b3bcf8cSChuck Lever __field(int, completion_id) 1828bd2abef3SChuck Lever ), 1829bd2abef3SChuck Lever 1830bd2abef3SChuck Lever TP_fast_assign( 18319b3bcf8cSChuck Lever __entry->cq_id = ctxt->rc_cid.ci_queue_id; 18329b3bcf8cSChuck Lever __entry->completion_id = ctxt->rc_cid.ci_completion_id; 1833bd2abef3SChuck Lever ), 1834bd2abef3SChuck Lever 18359b3bcf8cSChuck Lever TP_printk("cq.id=%d cid=%d", 18369b3bcf8cSChuck Lever __entry->cq_id, __entry->completion_id 1837bd2abef3SChuck Lever ) 1838bd2abef3SChuck Lever ); 1839bd2abef3SChuck Lever 1840c30f259aSChuck Lever DEFINE_RECEIVE_COMPLETION_EVENT(svcrdma_wc_receive); 18419b3bcf8cSChuck Lever 18429b3bcf8cSChuck Lever TRACE_EVENT(svcrdma_rq_post_err, 1843bd2abef3SChuck Lever TP_PROTO( 18449b3bcf8cSChuck Lever const struct svcxprt_rdma *rdma, 18459b3bcf8cSChuck Lever int status 1846bd2abef3SChuck Lever ), 1847bd2abef3SChuck Lever 18489b3bcf8cSChuck Lever TP_ARGS(rdma, status), 1849bd2abef3SChuck Lever 1850bd2abef3SChuck Lever TP_STRUCT__entry( 18519b3bcf8cSChuck Lever __field(int, status) 18529b3bcf8cSChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1853bd2abef3SChuck Lever ), 1854bd2abef3SChuck Lever 1855bd2abef3SChuck Lever TP_fast_assign( 18569b3bcf8cSChuck Lever __entry->status = status; 18579b3bcf8cSChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1858bd2abef3SChuck Lever ), 1859bd2abef3SChuck Lever 18609b3bcf8cSChuck Lever TP_printk("addr=%s status=%d", 18619b3bcf8cSChuck Lever __get_str(addr), __entry->status 1862bd2abef3SChuck Lever ) 1863bd2abef3SChuck Lever ); 1864bd2abef3SChuck Lever 1865b704be09SChuck Lever DECLARE_EVENT_CLASS(svcrdma_post_chunk_class, 1866bd2abef3SChuck Lever TP_PROTO( 18676787f0beSChuck Lever const struct rpc_rdma_cid *cid, 1868e28b4fc6SChuck Lever int sqecount 1869bd2abef3SChuck Lever ), 1870bd2abef3SChuck Lever 18716787f0beSChuck Lever TP_ARGS(cid, sqecount), 1872bd2abef3SChuck Lever 1873bd2abef3SChuck Lever TP_STRUCT__entry( 18746787f0beSChuck Lever __field(u32, cq_id) 18756787f0beSChuck Lever __field(int, completion_id) 1876bd2abef3SChuck Lever __field(int, sqecount) 1877bd2abef3SChuck Lever ), 1878bd2abef3SChuck Lever 1879bd2abef3SChuck Lever TP_fast_assign( 18806787f0beSChuck Lever __entry->cq_id = cid->ci_queue_id; 18816787f0beSChuck Lever __entry->completion_id = cid->ci_completion_id; 1882bd2abef3SChuck Lever __entry->sqecount = sqecount; 1883bd2abef3SChuck Lever ), 1884bd2abef3SChuck Lever 18856787f0beSChuck Lever TP_printk("cq.id=%u cid=%d sqecount=%d", 18866787f0beSChuck Lever __entry->cq_id, __entry->completion_id, 18876787f0beSChuck Lever __entry->sqecount 1888bd2abef3SChuck Lever ) 1889bd2abef3SChuck Lever ); 1890bd2abef3SChuck Lever 1891b704be09SChuck Lever #define DEFINE_POST_CHUNK_EVENT(name) \ 1892b704be09SChuck Lever DEFINE_EVENT(svcrdma_post_chunk_class, \ 1893b704be09SChuck Lever svcrdma_post_##name##_chunk, \ 1894b704be09SChuck Lever TP_PROTO( \ 1895b704be09SChuck Lever const struct rpc_rdma_cid *cid, \ 1896b704be09SChuck Lever int sqecount \ 1897b704be09SChuck Lever ), \ 1898b704be09SChuck Lever TP_ARGS(cid, sqecount)) 1899b704be09SChuck Lever 1900b704be09SChuck Lever DEFINE_POST_CHUNK_EVENT(read); 1901b704be09SChuck Lever DEFINE_POST_CHUNK_EVENT(write); 1902b704be09SChuck Lever DEFINE_POST_CHUNK_EVENT(reply); 1903b704be09SChuck Lever 19046787f0beSChuck Lever DEFINE_COMPLETION_EVENT(svcrdma_wc_read); 19056787f0beSChuck Lever DEFINE_COMPLETION_EVENT(svcrdma_wc_write); 1906bd2abef3SChuck Lever 1907bd2abef3SChuck Lever TRACE_EVENT(svcrdma_qp_error, 1908bd2abef3SChuck Lever TP_PROTO( 1909bd2abef3SChuck Lever const struct ib_event *event, 1910bd2abef3SChuck Lever const struct sockaddr *sap 1911bd2abef3SChuck Lever ), 1912bd2abef3SChuck Lever 1913bd2abef3SChuck Lever TP_ARGS(event, sap), 1914bd2abef3SChuck Lever 1915bd2abef3SChuck Lever TP_STRUCT__entry( 1916bd2abef3SChuck Lever __field(unsigned int, event) 1917bd2abef3SChuck Lever __string(device, event->device->name) 1918bd2abef3SChuck Lever __array(__u8, addr, INET6_ADDRSTRLEN + 10) 1919bd2abef3SChuck Lever ), 1920bd2abef3SChuck Lever 1921bd2abef3SChuck Lever TP_fast_assign( 1922bd2abef3SChuck Lever __entry->event = event->event; 1923bd2abef3SChuck Lever __assign_str(device, event->device->name); 1924bd2abef3SChuck Lever snprintf(__entry->addr, sizeof(__entry->addr) - 1, 1925bd2abef3SChuck Lever "%pISpc", sap); 1926bd2abef3SChuck Lever ), 1927bd2abef3SChuck Lever 1928bd2abef3SChuck Lever TP_printk("addr=%s dev=%s event=%s (%u)", 1929bd2abef3SChuck Lever __entry->addr, __get_str(device), 1930bd2abef3SChuck Lever rdma_show_ib_event(__entry->event), __entry->event 1931bd2abef3SChuck Lever ) 1932bd2abef3SChuck Lever ); 1933bd2abef3SChuck Lever 1934bd2abef3SChuck Lever DECLARE_EVENT_CLASS(svcrdma_sendqueue_event, 1935bd2abef3SChuck Lever TP_PROTO( 1936bd2abef3SChuck Lever const struct svcxprt_rdma *rdma 1937bd2abef3SChuck Lever ), 1938bd2abef3SChuck Lever 1939bd2abef3SChuck Lever TP_ARGS(rdma), 1940bd2abef3SChuck Lever 1941bd2abef3SChuck Lever TP_STRUCT__entry( 1942bd2abef3SChuck Lever __field(int, avail) 1943bd2abef3SChuck Lever __field(int, depth) 1944bd2abef3SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1945bd2abef3SChuck Lever ), 1946bd2abef3SChuck Lever 1947bd2abef3SChuck Lever TP_fast_assign( 1948bd2abef3SChuck Lever __entry->avail = atomic_read(&rdma->sc_sq_avail); 1949bd2abef3SChuck Lever __entry->depth = rdma->sc_sq_depth; 1950bd2abef3SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1951bd2abef3SChuck Lever ), 1952bd2abef3SChuck Lever 1953bd2abef3SChuck Lever TP_printk("addr=%s sc_sq_avail=%d/%d", 1954bd2abef3SChuck Lever __get_str(addr), __entry->avail, __entry->depth 1955bd2abef3SChuck Lever ) 1956bd2abef3SChuck Lever ); 1957bd2abef3SChuck Lever 1958bd2abef3SChuck Lever #define DEFINE_SQ_EVENT(name) \ 1959bd2abef3SChuck Lever DEFINE_EVENT(svcrdma_sendqueue_event, svcrdma_sq_##name,\ 1960bd2abef3SChuck Lever TP_PROTO( \ 1961bd2abef3SChuck Lever const struct svcxprt_rdma *rdma \ 1962bd2abef3SChuck Lever ), \ 1963bd2abef3SChuck Lever TP_ARGS(rdma)) 1964bd2abef3SChuck Lever 1965bd2abef3SChuck Lever DEFINE_SQ_EVENT(full); 1966bd2abef3SChuck Lever DEFINE_SQ_EVENT(retry); 1967bd2abef3SChuck Lever 1968e28b4fc6SChuck Lever TRACE_EVENT(svcrdma_sq_post_err, 1969e28b4fc6SChuck Lever TP_PROTO( 1970e28b4fc6SChuck Lever const struct svcxprt_rdma *rdma, 1971e28b4fc6SChuck Lever int status 1972e28b4fc6SChuck Lever ), 1973e28b4fc6SChuck Lever 1974e28b4fc6SChuck Lever TP_ARGS(rdma, status), 1975e28b4fc6SChuck Lever 1976e28b4fc6SChuck Lever TP_STRUCT__entry( 1977e28b4fc6SChuck Lever __field(int, avail) 1978e28b4fc6SChuck Lever __field(int, depth) 1979e28b4fc6SChuck Lever __field(int, status) 1980e28b4fc6SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1981e28b4fc6SChuck Lever ), 1982e28b4fc6SChuck Lever 1983e28b4fc6SChuck Lever TP_fast_assign( 1984e28b4fc6SChuck Lever __entry->avail = atomic_read(&rdma->sc_sq_avail); 1985e28b4fc6SChuck Lever __entry->depth = rdma->sc_sq_depth; 1986e28b4fc6SChuck Lever __entry->status = status; 1987e28b4fc6SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1988e28b4fc6SChuck Lever ), 1989e28b4fc6SChuck Lever 1990e28b4fc6SChuck Lever TP_printk("addr=%s sc_sq_avail=%d/%d status=%d", 1991e28b4fc6SChuck Lever __get_str(addr), __entry->avail, __entry->depth, 1992e28b4fc6SChuck Lever __entry->status 1993e28b4fc6SChuck Lever ) 1994e28b4fc6SChuck Lever ); 1995e28b4fc6SChuck Lever 1996e48f083eSChuck Lever #endif /* _TRACE_RPCRDMA_H */ 1997e48f083eSChuck Lever 1998e48f083eSChuck Lever #include <trace/define_trace.h> 1999