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> 17b4776a34SChuck Lever 18*247c01ffSChuck Lever #include <trace/misc/rdma.h> 19*247c01ffSChuck Lever #include <trace/misc/sunrpc.h> 20e48f083eSChuck Lever 21ab03eff5SChuck Lever /** 22b4a7f91cSChuck Lever ** Event classes 23b4a7f91cSChuck Lever **/ 24b4a7f91cSChuck Lever 25f7bd657bSChuck Lever DECLARE_EVENT_CLASS(rpcrdma_completion_class, 26f7bd657bSChuck Lever TP_PROTO( 27f7bd657bSChuck Lever const struct ib_wc *wc, 28f7bd657bSChuck Lever const struct rpc_rdma_cid *cid 29f7bd657bSChuck Lever ), 30f7bd657bSChuck Lever 31f7bd657bSChuck Lever TP_ARGS(wc, cid), 32f7bd657bSChuck Lever 33f7bd657bSChuck Lever TP_STRUCT__entry( 34f7bd657bSChuck Lever __field(u32, cq_id) 35f7bd657bSChuck Lever __field(int, completion_id) 36f7bd657bSChuck Lever __field(unsigned long, status) 37f7bd657bSChuck Lever __field(unsigned int, vendor_err) 38f7bd657bSChuck Lever ), 39f7bd657bSChuck Lever 40f7bd657bSChuck Lever TP_fast_assign( 41f7bd657bSChuck Lever __entry->cq_id = cid->ci_queue_id; 42f7bd657bSChuck Lever __entry->completion_id = cid->ci_completion_id; 43f7bd657bSChuck Lever __entry->status = wc->status; 44f7bd657bSChuck Lever if (wc->status) 45f7bd657bSChuck Lever __entry->vendor_err = wc->vendor_err; 46f7bd657bSChuck Lever else 47f7bd657bSChuck Lever __entry->vendor_err = 0; 48f7bd657bSChuck Lever ), 49f7bd657bSChuck Lever 50f7bd657bSChuck Lever TP_printk("cq.id=%u cid=%d status=%s (%lu/0x%x)", 51f7bd657bSChuck Lever __entry->cq_id, __entry->completion_id, 52f7bd657bSChuck Lever rdma_show_wc_status(__entry->status), 53f7bd657bSChuck Lever __entry->status, __entry->vendor_err 54f7bd657bSChuck Lever ) 55f7bd657bSChuck Lever ); 56f7bd657bSChuck Lever 57f7bd657bSChuck Lever #define DEFINE_COMPLETION_EVENT(name) \ 58f7bd657bSChuck Lever DEFINE_EVENT(rpcrdma_completion_class, name, \ 59f7bd657bSChuck Lever TP_PROTO( \ 60f7bd657bSChuck Lever const struct ib_wc *wc, \ 61f7bd657bSChuck Lever const struct rpc_rdma_cid *cid \ 62f7bd657bSChuck Lever ), \ 63f7bd657bSChuck Lever TP_ARGS(wc, cid)) 64f7bd657bSChuck Lever 65eef2d8d4SChuck Lever DECLARE_EVENT_CLASS(rpcrdma_send_completion_class, 66eef2d8d4SChuck Lever TP_PROTO( 67eef2d8d4SChuck Lever const struct ib_wc *wc, 68eef2d8d4SChuck Lever const struct rpc_rdma_cid *cid 69eef2d8d4SChuck Lever ), 70eef2d8d4SChuck Lever 71eef2d8d4SChuck Lever TP_ARGS(wc, cid), 72eef2d8d4SChuck Lever 73eef2d8d4SChuck Lever TP_STRUCT__entry( 74eef2d8d4SChuck Lever __field(u32, cq_id) 75eef2d8d4SChuck Lever __field(int, completion_id) 76eef2d8d4SChuck Lever ), 77eef2d8d4SChuck Lever 78eef2d8d4SChuck Lever TP_fast_assign( 79eef2d8d4SChuck Lever __entry->cq_id = cid->ci_queue_id; 80eef2d8d4SChuck Lever __entry->completion_id = cid->ci_completion_id; 81eef2d8d4SChuck Lever ), 82eef2d8d4SChuck Lever 83eef2d8d4SChuck Lever TP_printk("cq.id=%u cid=%d", 84eef2d8d4SChuck Lever __entry->cq_id, __entry->completion_id 85eef2d8d4SChuck Lever ) 86eef2d8d4SChuck Lever ); 87eef2d8d4SChuck Lever 88eef2d8d4SChuck Lever #define DEFINE_SEND_COMPLETION_EVENT(name) \ 89eef2d8d4SChuck Lever DEFINE_EVENT(rpcrdma_send_completion_class, name, \ 90eef2d8d4SChuck Lever TP_PROTO( \ 91eef2d8d4SChuck Lever const struct ib_wc *wc, \ 92eef2d8d4SChuck Lever const struct rpc_rdma_cid *cid \ 93eef2d8d4SChuck Lever ), \ 94eef2d8d4SChuck Lever TP_ARGS(wc, cid)) 95eef2d8d4SChuck Lever 96eef2d8d4SChuck Lever DECLARE_EVENT_CLASS(rpcrdma_send_flush_class, 97eef2d8d4SChuck Lever TP_PROTO( 98eef2d8d4SChuck Lever const struct ib_wc *wc, 99eef2d8d4SChuck Lever const struct rpc_rdma_cid *cid 100eef2d8d4SChuck Lever ), 101eef2d8d4SChuck Lever 102eef2d8d4SChuck Lever TP_ARGS(wc, cid), 103eef2d8d4SChuck Lever 104eef2d8d4SChuck Lever TP_STRUCT__entry( 105eef2d8d4SChuck Lever __field(u32, cq_id) 106eef2d8d4SChuck Lever __field(int, completion_id) 107eef2d8d4SChuck Lever __field(unsigned long, status) 108eef2d8d4SChuck Lever __field(unsigned int, vendor_err) 109eef2d8d4SChuck Lever ), 110eef2d8d4SChuck Lever 111eef2d8d4SChuck Lever TP_fast_assign( 112eef2d8d4SChuck Lever __entry->cq_id = cid->ci_queue_id; 113eef2d8d4SChuck Lever __entry->completion_id = cid->ci_completion_id; 114eef2d8d4SChuck Lever __entry->status = wc->status; 115eef2d8d4SChuck Lever __entry->vendor_err = wc->vendor_err; 116eef2d8d4SChuck Lever ), 117eef2d8d4SChuck Lever 118eef2d8d4SChuck Lever TP_printk("cq.id=%u cid=%d status=%s (%lu/0x%x)", 119eef2d8d4SChuck Lever __entry->cq_id, __entry->completion_id, 120eef2d8d4SChuck Lever rdma_show_wc_status(__entry->status), 121eef2d8d4SChuck Lever __entry->status, __entry->vendor_err 122eef2d8d4SChuck Lever ) 123eef2d8d4SChuck Lever ); 124eef2d8d4SChuck Lever 125eef2d8d4SChuck Lever #define DEFINE_SEND_FLUSH_EVENT(name) \ 126eef2d8d4SChuck Lever DEFINE_EVENT(rpcrdma_send_flush_class, name, \ 127eef2d8d4SChuck Lever TP_PROTO( \ 128eef2d8d4SChuck Lever const struct ib_wc *wc, \ 129eef2d8d4SChuck Lever const struct rpc_rdma_cid *cid \ 130eef2d8d4SChuck Lever ), \ 131eef2d8d4SChuck Lever TP_ARGS(wc, cid)) 132eef2d8d4SChuck Lever 1336b147ea7SChuck Lever DECLARE_EVENT_CLASS(rpcrdma_mr_completion_class, 1346b147ea7SChuck Lever TP_PROTO( 1356b147ea7SChuck Lever const struct ib_wc *wc, 1366b147ea7SChuck Lever const struct rpc_rdma_cid *cid 1376b147ea7SChuck Lever ), 1386b147ea7SChuck Lever 1396b147ea7SChuck Lever TP_ARGS(wc, cid), 1406b147ea7SChuck Lever 1416b147ea7SChuck Lever TP_STRUCT__entry( 1426b147ea7SChuck Lever __field(u32, cq_id) 1436b147ea7SChuck Lever __field(int, completion_id) 1446b147ea7SChuck Lever __field(unsigned long, status) 1456b147ea7SChuck Lever __field(unsigned int, vendor_err) 1466b147ea7SChuck Lever ), 1476b147ea7SChuck Lever 1486b147ea7SChuck Lever TP_fast_assign( 1496b147ea7SChuck Lever __entry->cq_id = cid->ci_queue_id; 1506b147ea7SChuck Lever __entry->completion_id = cid->ci_completion_id; 1516b147ea7SChuck Lever __entry->status = wc->status; 1526b147ea7SChuck Lever if (wc->status) 1536b147ea7SChuck Lever __entry->vendor_err = wc->vendor_err; 1546b147ea7SChuck Lever else 1556b147ea7SChuck Lever __entry->vendor_err = 0; 1566b147ea7SChuck Lever ), 1576b147ea7SChuck Lever 1586b147ea7SChuck Lever TP_printk("cq.id=%u mr.id=%d status=%s (%lu/0x%x)", 1596b147ea7SChuck Lever __entry->cq_id, __entry->completion_id, 1606b147ea7SChuck Lever rdma_show_wc_status(__entry->status), 1616b147ea7SChuck Lever __entry->status, __entry->vendor_err 1626b147ea7SChuck Lever ) 1636b147ea7SChuck Lever ); 1646b147ea7SChuck Lever 1656b147ea7SChuck Lever #define DEFINE_MR_COMPLETION_EVENT(name) \ 1666b147ea7SChuck Lever DEFINE_EVENT(rpcrdma_mr_completion_class, name, \ 1676b147ea7SChuck Lever TP_PROTO( \ 1686b147ea7SChuck Lever const struct ib_wc *wc, \ 1696b147ea7SChuck Lever const struct rpc_rdma_cid *cid \ 1706b147ea7SChuck Lever ), \ 1716b147ea7SChuck Lever TP_ARGS(wc, cid)) 1726b147ea7SChuck Lever 173c30f259aSChuck Lever DECLARE_EVENT_CLASS(rpcrdma_receive_completion_class, 174c30f259aSChuck Lever TP_PROTO( 175c30f259aSChuck Lever const struct ib_wc *wc, 176c30f259aSChuck Lever const struct rpc_rdma_cid *cid 177c30f259aSChuck Lever ), 178c30f259aSChuck Lever 179c30f259aSChuck Lever TP_ARGS(wc, cid), 180c30f259aSChuck Lever 181c30f259aSChuck Lever TP_STRUCT__entry( 182c30f259aSChuck Lever __field(u32, cq_id) 183c30f259aSChuck Lever __field(int, completion_id) 184c30f259aSChuck Lever __field(u32, received) 185c30f259aSChuck Lever __field(unsigned long, status) 186c30f259aSChuck Lever __field(unsigned int, vendor_err) 187c30f259aSChuck Lever ), 188c30f259aSChuck Lever 189c30f259aSChuck Lever TP_fast_assign( 190c30f259aSChuck Lever __entry->cq_id = cid->ci_queue_id; 191c30f259aSChuck Lever __entry->completion_id = cid->ci_completion_id; 192c30f259aSChuck Lever __entry->status = wc->status; 193c30f259aSChuck Lever if (wc->status) { 194c30f259aSChuck Lever __entry->received = 0; 195c30f259aSChuck Lever __entry->vendor_err = wc->vendor_err; 196c30f259aSChuck Lever } else { 197c30f259aSChuck Lever __entry->received = wc->byte_len; 198c30f259aSChuck Lever __entry->vendor_err = 0; 199c30f259aSChuck Lever } 200c30f259aSChuck Lever ), 201c30f259aSChuck Lever 202c30f259aSChuck Lever TP_printk("cq.id=%u cid=%d status=%s (%lu/0x%x) received=%u", 203c30f259aSChuck Lever __entry->cq_id, __entry->completion_id, 204c30f259aSChuck Lever rdma_show_wc_status(__entry->status), 205c30f259aSChuck Lever __entry->status, __entry->vendor_err, 206c30f259aSChuck Lever __entry->received 207c30f259aSChuck Lever ) 208c30f259aSChuck Lever ); 209c30f259aSChuck Lever 210c30f259aSChuck Lever #define DEFINE_RECEIVE_COMPLETION_EVENT(name) \ 211c30f259aSChuck Lever DEFINE_EVENT(rpcrdma_receive_completion_class, name, \ 212c30f259aSChuck Lever TP_PROTO( \ 213c30f259aSChuck Lever const struct ib_wc *wc, \ 214c30f259aSChuck Lever const struct rpc_rdma_cid *cid \ 215c30f259aSChuck Lever ), \ 216c30f259aSChuck Lever TP_ARGS(wc, cid)) 217c30f259aSChuck Lever 2188dcc5721SChuck Lever DECLARE_EVENT_CLASS(rpcrdma_receive_success_class, 2198dcc5721SChuck Lever TP_PROTO( 2208dcc5721SChuck Lever const struct ib_wc *wc, 2218dcc5721SChuck Lever const struct rpc_rdma_cid *cid 2228dcc5721SChuck Lever ), 2238dcc5721SChuck Lever 2248dcc5721SChuck Lever TP_ARGS(wc, cid), 2258dcc5721SChuck Lever 2268dcc5721SChuck Lever TP_STRUCT__entry( 2278dcc5721SChuck Lever __field(u32, cq_id) 2288dcc5721SChuck Lever __field(int, completion_id) 2298dcc5721SChuck Lever __field(u32, received) 2308dcc5721SChuck Lever ), 2318dcc5721SChuck Lever 2328dcc5721SChuck Lever TP_fast_assign( 2338dcc5721SChuck Lever __entry->cq_id = cid->ci_queue_id; 2348dcc5721SChuck Lever __entry->completion_id = cid->ci_completion_id; 2358dcc5721SChuck Lever __entry->received = wc->byte_len; 2368dcc5721SChuck Lever ), 2378dcc5721SChuck Lever 2388dcc5721SChuck Lever TP_printk("cq.id=%u cid=%d received=%u", 2398dcc5721SChuck Lever __entry->cq_id, __entry->completion_id, 2408dcc5721SChuck Lever __entry->received 2418dcc5721SChuck Lever ) 2428dcc5721SChuck Lever ); 2438dcc5721SChuck Lever 2448dcc5721SChuck Lever #define DEFINE_RECEIVE_SUCCESS_EVENT(name) \ 2458dcc5721SChuck Lever DEFINE_EVENT(rpcrdma_receive_success_class, name, \ 2468dcc5721SChuck Lever TP_PROTO( \ 2478dcc5721SChuck Lever const struct ib_wc *wc, \ 2488dcc5721SChuck Lever const struct rpc_rdma_cid *cid \ 2498dcc5721SChuck Lever ), \ 2508dcc5721SChuck Lever TP_ARGS(wc, cid)) 2518dcc5721SChuck Lever 2528dcc5721SChuck Lever DECLARE_EVENT_CLASS(rpcrdma_receive_flush_class, 2538dcc5721SChuck Lever TP_PROTO( 2548dcc5721SChuck Lever const struct ib_wc *wc, 2558dcc5721SChuck Lever const struct rpc_rdma_cid *cid 2568dcc5721SChuck Lever ), 2578dcc5721SChuck Lever 2588dcc5721SChuck Lever TP_ARGS(wc, cid), 2598dcc5721SChuck Lever 2608dcc5721SChuck Lever TP_STRUCT__entry( 2618dcc5721SChuck Lever __field(u32, cq_id) 2628dcc5721SChuck Lever __field(int, completion_id) 2638dcc5721SChuck Lever __field(unsigned long, status) 2648dcc5721SChuck Lever __field(unsigned int, vendor_err) 2658dcc5721SChuck Lever ), 2668dcc5721SChuck Lever 2678dcc5721SChuck Lever TP_fast_assign( 2688dcc5721SChuck Lever __entry->cq_id = cid->ci_queue_id; 2698dcc5721SChuck Lever __entry->completion_id = cid->ci_completion_id; 2708dcc5721SChuck Lever __entry->status = wc->status; 2718dcc5721SChuck Lever __entry->vendor_err = wc->vendor_err; 2728dcc5721SChuck Lever ), 2738dcc5721SChuck Lever 2748dcc5721SChuck Lever TP_printk("cq.id=%u cid=%d status=%s (%lu/0x%x)", 2758dcc5721SChuck Lever __entry->cq_id, __entry->completion_id, 2768dcc5721SChuck Lever rdma_show_wc_status(__entry->status), 2778dcc5721SChuck Lever __entry->status, __entry->vendor_err 2788dcc5721SChuck Lever ) 2798dcc5721SChuck Lever ); 2808dcc5721SChuck Lever 2818dcc5721SChuck Lever #define DEFINE_RECEIVE_FLUSH_EVENT(name) \ 2828dcc5721SChuck Lever DEFINE_EVENT(rpcrdma_receive_flush_class, name, \ 2838dcc5721SChuck Lever TP_PROTO( \ 2848dcc5721SChuck Lever const struct ib_wc *wc, \ 2858dcc5721SChuck Lever const struct rpc_rdma_cid *cid \ 2868dcc5721SChuck Lever ), \ 2878dcc5721SChuck Lever TP_ARGS(wc, cid)) 2888dcc5721SChuck Lever 2893a9568feSChuck Lever DECLARE_EVENT_CLASS(xprtrdma_reply_class, 290b4a7f91cSChuck Lever TP_PROTO( 291b4a7f91cSChuck Lever const struct rpcrdma_rep *rep 292b4a7f91cSChuck Lever ), 293b4a7f91cSChuck Lever 294b4a7f91cSChuck Lever TP_ARGS(rep), 295b4a7f91cSChuck Lever 296b4a7f91cSChuck Lever TP_STRUCT__entry( 297b4a7f91cSChuck Lever __field(u32, xid) 298b4a7f91cSChuck Lever __field(u32, version) 299b4a7f91cSChuck Lever __field(u32, proc) 3003a9568feSChuck Lever __string(addr, rpcrdma_addrstr(rep->rr_rxprt)) 3013a9568feSChuck Lever __string(port, rpcrdma_portstr(rep->rr_rxprt)) 302b4a7f91cSChuck Lever ), 303b4a7f91cSChuck Lever 304b4a7f91cSChuck Lever TP_fast_assign( 305b4a7f91cSChuck Lever __entry->xid = be32_to_cpu(rep->rr_xid); 306b4a7f91cSChuck Lever __entry->version = be32_to_cpu(rep->rr_vers); 307b4a7f91cSChuck Lever __entry->proc = be32_to_cpu(rep->rr_proc); 3083a9568feSChuck Lever __assign_str(addr, rpcrdma_addrstr(rep->rr_rxprt)); 3093a9568feSChuck Lever __assign_str(port, rpcrdma_portstr(rep->rr_rxprt)); 310b4a7f91cSChuck Lever ), 311b4a7f91cSChuck Lever 3123a9568feSChuck Lever TP_printk("peer=[%s]:%s xid=0x%08x version=%u proc=%u", 3133a9568feSChuck Lever __get_str(addr), __get_str(port), 3143a9568feSChuck Lever __entry->xid, __entry->version, __entry->proc 315b4a7f91cSChuck Lever ) 316b4a7f91cSChuck Lever ); 317b4a7f91cSChuck Lever 318b4a7f91cSChuck Lever #define DEFINE_REPLY_EVENT(name) \ 3193a9568feSChuck Lever DEFINE_EVENT(xprtrdma_reply_class, \ 3203a9568feSChuck Lever xprtrdma_reply_##name##_err, \ 321b4a7f91cSChuck Lever TP_PROTO( \ 322b4a7f91cSChuck Lever const struct rpcrdma_rep *rep \ 323b4a7f91cSChuck Lever ), \ 324b4a7f91cSChuck Lever TP_ARGS(rep)) 325b4a7f91cSChuck Lever 3261c443effSChuck Lever DECLARE_EVENT_CLASS(xprtrdma_rxprt, 3271c443effSChuck Lever TP_PROTO( 3281c443effSChuck Lever const struct rpcrdma_xprt *r_xprt 3291c443effSChuck Lever ), 3301c443effSChuck Lever 3311c443effSChuck Lever TP_ARGS(r_xprt), 3321c443effSChuck Lever 3331c443effSChuck Lever TP_STRUCT__entry( 3341c443effSChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 3351c443effSChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 3361c443effSChuck Lever ), 3371c443effSChuck Lever 3381c443effSChuck Lever TP_fast_assign( 3391c443effSChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 3401c443effSChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 3411c443effSChuck Lever ), 3421c443effSChuck Lever 34383189d15SChuck Lever TP_printk("peer=[%s]:%s", 34483189d15SChuck Lever __get_str(addr), __get_str(port) 3451c443effSChuck Lever ) 3461c443effSChuck Lever ); 3471c443effSChuck Lever 3481c443effSChuck Lever #define DEFINE_RXPRT_EVENT(name) \ 3491c443effSChuck Lever DEFINE_EVENT(xprtrdma_rxprt, name, \ 3501c443effSChuck Lever TP_PROTO( \ 3511c443effSChuck Lever const struct rpcrdma_xprt *r_xprt \ 3521c443effSChuck Lever ), \ 3531c443effSChuck Lever TP_ARGS(r_xprt)) 3541c443effSChuck Lever 3557b020f17SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_connect_class, 3567b020f17SChuck Lever TP_PROTO( 3577b020f17SChuck Lever const struct rpcrdma_xprt *r_xprt, 3587b020f17SChuck Lever int rc 3597b020f17SChuck Lever ), 3607b020f17SChuck Lever 3617b020f17SChuck Lever TP_ARGS(r_xprt, rc), 3627b020f17SChuck Lever 3637b020f17SChuck Lever TP_STRUCT__entry( 3647b020f17SChuck Lever __field(int, rc) 3657b020f17SChuck Lever __field(int, connect_status) 3667b020f17SChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 3677b020f17SChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 3687b020f17SChuck Lever ), 3697b020f17SChuck Lever 3707b020f17SChuck Lever TP_fast_assign( 3717b020f17SChuck Lever __entry->rc = rc; 372e28ce900SChuck Lever __entry->connect_status = r_xprt->rx_ep->re_connect_status; 3737b020f17SChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 3747b020f17SChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 3757b020f17SChuck Lever ), 3767b020f17SChuck Lever 37783189d15SChuck Lever TP_printk("peer=[%s]:%s rc=%d connection status=%d", 37883189d15SChuck Lever __get_str(addr), __get_str(port), 3797b020f17SChuck Lever __entry->rc, __entry->connect_status 3807b020f17SChuck Lever ) 3817b020f17SChuck Lever ); 3827b020f17SChuck Lever 3837b020f17SChuck Lever #define DEFINE_CONN_EVENT(name) \ 3847b020f17SChuck Lever DEFINE_EVENT(xprtrdma_connect_class, xprtrdma_##name, \ 3857b020f17SChuck Lever TP_PROTO( \ 3867b020f17SChuck Lever const struct rpcrdma_xprt *r_xprt, \ 3877b020f17SChuck Lever int rc \ 3887b020f17SChuck Lever ), \ 3897b020f17SChuck Lever TP_ARGS(r_xprt, rc)) 3907b020f17SChuck Lever 39158f10ad4SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_rdch_event, 39258f10ad4SChuck Lever TP_PROTO( 39358f10ad4SChuck Lever const struct rpc_task *task, 39458f10ad4SChuck Lever unsigned int pos, 39558f10ad4SChuck Lever struct rpcrdma_mr *mr, 39658f10ad4SChuck Lever int nsegs 39758f10ad4SChuck Lever ), 39858f10ad4SChuck Lever 39958f10ad4SChuck Lever TP_ARGS(task, pos, mr, nsegs), 40058f10ad4SChuck Lever 40158f10ad4SChuck Lever TP_STRUCT__entry( 40258f10ad4SChuck Lever __field(unsigned int, task_id) 40358f10ad4SChuck Lever __field(unsigned int, client_id) 40458f10ad4SChuck Lever __field(unsigned int, pos) 40558f10ad4SChuck Lever __field(int, nents) 40658f10ad4SChuck Lever __field(u32, handle) 40758f10ad4SChuck Lever __field(u32, length) 40858f10ad4SChuck Lever __field(u64, offset) 40958f10ad4SChuck Lever __field(int, nsegs) 41058f10ad4SChuck Lever ), 41158f10ad4SChuck Lever 41258f10ad4SChuck Lever TP_fast_assign( 41358f10ad4SChuck Lever __entry->task_id = task->tk_pid; 41458f10ad4SChuck Lever __entry->client_id = task->tk_client->cl_clid; 41558f10ad4SChuck Lever __entry->pos = pos; 41658f10ad4SChuck Lever __entry->nents = mr->mr_nents; 41758f10ad4SChuck Lever __entry->handle = mr->mr_handle; 41858f10ad4SChuck Lever __entry->length = mr->mr_length; 41958f10ad4SChuck Lever __entry->offset = mr->mr_offset; 42058f10ad4SChuck Lever __entry->nsegs = nsegs; 42158f10ad4SChuck Lever ), 42258f10ad4SChuck Lever 423b4776a34SChuck Lever TP_printk(SUNRPC_TRACE_TASK_SPECIFIER 424b4776a34SChuck Lever " pos=%u %u@0x%016llx:0x%08x (%s)", 425aba11831SChuck Lever __entry->task_id, __entry->client_id, 42658f10ad4SChuck Lever __entry->pos, __entry->length, 42758f10ad4SChuck Lever (unsigned long long)__entry->offset, __entry->handle, 42858f10ad4SChuck Lever __entry->nents < __entry->nsegs ? "more" : "last" 42958f10ad4SChuck Lever ) 43058f10ad4SChuck Lever ); 43158f10ad4SChuck Lever 43258f10ad4SChuck Lever #define DEFINE_RDCH_EVENT(name) \ 433aba11831SChuck Lever DEFINE_EVENT(xprtrdma_rdch_event, xprtrdma_chunk_##name,\ 43458f10ad4SChuck Lever TP_PROTO( \ 43558f10ad4SChuck Lever const struct rpc_task *task, \ 43658f10ad4SChuck Lever unsigned int pos, \ 43758f10ad4SChuck Lever struct rpcrdma_mr *mr, \ 43858f10ad4SChuck Lever int nsegs \ 43958f10ad4SChuck Lever ), \ 44058f10ad4SChuck Lever TP_ARGS(task, pos, mr, nsegs)) 44158f10ad4SChuck Lever 44258f10ad4SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_wrch_event, 44358f10ad4SChuck Lever TP_PROTO( 44458f10ad4SChuck Lever const struct rpc_task *task, 44558f10ad4SChuck Lever struct rpcrdma_mr *mr, 44658f10ad4SChuck Lever int nsegs 44758f10ad4SChuck Lever ), 44858f10ad4SChuck Lever 44958f10ad4SChuck Lever TP_ARGS(task, mr, nsegs), 45058f10ad4SChuck Lever 45158f10ad4SChuck Lever TP_STRUCT__entry( 45258f10ad4SChuck Lever __field(unsigned int, task_id) 45358f10ad4SChuck Lever __field(unsigned int, client_id) 45458f10ad4SChuck Lever __field(int, nents) 45558f10ad4SChuck Lever __field(u32, handle) 45658f10ad4SChuck Lever __field(u32, length) 45758f10ad4SChuck Lever __field(u64, offset) 45858f10ad4SChuck Lever __field(int, nsegs) 45958f10ad4SChuck Lever ), 46058f10ad4SChuck Lever 46158f10ad4SChuck Lever TP_fast_assign( 46258f10ad4SChuck Lever __entry->task_id = task->tk_pid; 46358f10ad4SChuck Lever __entry->client_id = task->tk_client->cl_clid; 46458f10ad4SChuck Lever __entry->nents = mr->mr_nents; 46558f10ad4SChuck Lever __entry->handle = mr->mr_handle; 46658f10ad4SChuck Lever __entry->length = mr->mr_length; 46758f10ad4SChuck Lever __entry->offset = mr->mr_offset; 46858f10ad4SChuck Lever __entry->nsegs = nsegs; 46958f10ad4SChuck Lever ), 47058f10ad4SChuck Lever 471b4776a34SChuck Lever TP_printk(SUNRPC_TRACE_TASK_SPECIFIER 472b4776a34SChuck Lever " %u@0x%016llx:0x%08x (%s)", 473aba11831SChuck Lever __entry->task_id, __entry->client_id, 47458f10ad4SChuck Lever __entry->length, (unsigned long long)__entry->offset, 47558f10ad4SChuck Lever __entry->handle, 47658f10ad4SChuck Lever __entry->nents < __entry->nsegs ? "more" : "last" 47758f10ad4SChuck Lever ) 47858f10ad4SChuck Lever ); 47958f10ad4SChuck Lever 48058f10ad4SChuck Lever #define DEFINE_WRCH_EVENT(name) \ 481aba11831SChuck Lever DEFINE_EVENT(xprtrdma_wrch_event, xprtrdma_chunk_##name,\ 48258f10ad4SChuck Lever TP_PROTO( \ 48358f10ad4SChuck Lever const struct rpc_task *task, \ 48458f10ad4SChuck Lever struct rpcrdma_mr *mr, \ 48558f10ad4SChuck Lever int nsegs \ 48658f10ad4SChuck Lever ), \ 48758f10ad4SChuck Lever TP_ARGS(task, mr, nsegs)) 48858f10ad4SChuck Lever 489aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_BIDIRECTIONAL); 490aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_TO_DEVICE); 491aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_FROM_DEVICE); 492aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_NONE); 493aba11831SChuck Lever 494aba11831SChuck Lever #define xprtrdma_show_direction(x) \ 495aba11831SChuck Lever __print_symbolic(x, \ 496aba11831SChuck Lever { DMA_BIDIRECTIONAL, "BIDIR" }, \ 497aba11831SChuck Lever { DMA_TO_DEVICE, "TO_DEVICE" }, \ 498aba11831SChuck Lever { DMA_FROM_DEVICE, "FROM_DEVICE" }, \ 499aba11831SChuck Lever { DMA_NONE, "NONE" }) 500aba11831SChuck Lever 5017703db97SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_mr_class, 5027703db97SChuck Lever TP_PROTO( 5037703db97SChuck Lever const struct rpcrdma_mr *mr 5047703db97SChuck Lever ), 5057703db97SChuck Lever 5067703db97SChuck Lever TP_ARGS(mr), 5077703db97SChuck Lever 5087703db97SChuck Lever TP_STRUCT__entry( 5097703db97SChuck Lever __field(unsigned int, task_id) 5107703db97SChuck Lever __field(unsigned int, client_id) 5117703db97SChuck Lever __field(u32, mr_id) 5127703db97SChuck Lever __field(int, nents) 5137703db97SChuck Lever __field(u32, handle) 5147703db97SChuck Lever __field(u32, length) 5157703db97SChuck Lever __field(u64, offset) 5167703db97SChuck Lever __field(u32, dir) 5177703db97SChuck Lever ), 5187703db97SChuck Lever 5197703db97SChuck Lever TP_fast_assign( 5207703db97SChuck Lever const struct rpcrdma_req *req = mr->mr_req; 52121037b8cSChuck Lever 52221037b8cSChuck Lever if (req) { 5237703db97SChuck Lever const struct rpc_task *task = req->rl_slot.rq_task; 5247703db97SChuck Lever 5257703db97SChuck Lever __entry->task_id = task->tk_pid; 5267703db97SChuck Lever __entry->client_id = task->tk_client->cl_clid; 52721037b8cSChuck Lever } else { 52821037b8cSChuck Lever __entry->task_id = 0; 52921037b8cSChuck Lever __entry->client_id = -1; 53021037b8cSChuck Lever } 53113bcf7e3SChuck Lever __entry->mr_id = mr->mr_ibmr->res.id; 5327703db97SChuck Lever __entry->nents = mr->mr_nents; 5337703db97SChuck Lever __entry->handle = mr->mr_handle; 5347703db97SChuck Lever __entry->length = mr->mr_length; 5357703db97SChuck Lever __entry->offset = mr->mr_offset; 5367703db97SChuck Lever __entry->dir = mr->mr_dir; 5377703db97SChuck Lever ), 5387703db97SChuck Lever 539b4776a34SChuck Lever TP_printk(SUNRPC_TRACE_TASK_SPECIFIER 540b4776a34SChuck Lever " mr.id=%u nents=%d %u@0x%016llx:0x%08x (%s)", 5417703db97SChuck Lever __entry->task_id, __entry->client_id, 5427703db97SChuck Lever __entry->mr_id, __entry->nents, __entry->length, 5437703db97SChuck Lever (unsigned long long)__entry->offset, __entry->handle, 5447703db97SChuck Lever xprtrdma_show_direction(__entry->dir) 5457703db97SChuck Lever ) 5467703db97SChuck Lever ); 5477703db97SChuck Lever 5487703db97SChuck Lever #define DEFINE_MR_EVENT(name) \ 5497703db97SChuck Lever DEFINE_EVENT(xprtrdma_mr_class, \ 5507703db97SChuck Lever xprtrdma_mr_##name, \ 5517703db97SChuck Lever TP_PROTO( \ 5527703db97SChuck Lever const struct rpcrdma_mr *mr \ 5537703db97SChuck Lever ), \ 5547703db97SChuck Lever TP_ARGS(mr)) 5557703db97SChuck Lever 5567703db97SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_anonymous_mr_class, 5572937fedeSChuck Lever TP_PROTO( 5582937fedeSChuck Lever const struct rpcrdma_mr *mr 5592937fedeSChuck Lever ), 5602937fedeSChuck Lever 5612937fedeSChuck Lever TP_ARGS(mr), 5622937fedeSChuck Lever 5632937fedeSChuck Lever TP_STRUCT__entry( 56462a89501SChuck Lever __field(u32, mr_id) 56562a89501SChuck Lever __field(int, nents) 5662937fedeSChuck Lever __field(u32, handle) 5672937fedeSChuck Lever __field(u32, length) 5682937fedeSChuck Lever __field(u64, offset) 569aba11831SChuck Lever __field(u32, dir) 5702937fedeSChuck Lever ), 5712937fedeSChuck Lever 5722937fedeSChuck Lever TP_fast_assign( 57313bcf7e3SChuck Lever __entry->mr_id = mr->mr_ibmr->res.id; 57462a89501SChuck Lever __entry->nents = mr->mr_nents; 5752937fedeSChuck Lever __entry->handle = mr->mr_handle; 5762937fedeSChuck Lever __entry->length = mr->mr_length; 5772937fedeSChuck Lever __entry->offset = mr->mr_offset; 578aba11831SChuck Lever __entry->dir = mr->mr_dir; 5792937fedeSChuck Lever ), 5802937fedeSChuck Lever 58162a89501SChuck Lever TP_printk("mr.id=%u nents=%d %u@0x%016llx:0x%08x (%s)", 58262a89501SChuck Lever __entry->mr_id, __entry->nents, __entry->length, 583aba11831SChuck Lever (unsigned long long)__entry->offset, __entry->handle, 584aba11831SChuck Lever xprtrdma_show_direction(__entry->dir) 5852937fedeSChuck Lever ) 5862937fedeSChuck Lever ); 5872937fedeSChuck Lever 5887703db97SChuck Lever #define DEFINE_ANON_MR_EVENT(name) \ 5897703db97SChuck Lever DEFINE_EVENT(xprtrdma_anonymous_mr_class, \ 5907703db97SChuck Lever xprtrdma_mr_##name, \ 5912937fedeSChuck Lever TP_PROTO( \ 5922937fedeSChuck Lever const struct rpcrdma_mr *mr \ 5932937fedeSChuck Lever ), \ 5942937fedeSChuck Lever TP_ARGS(mr)) 5952937fedeSChuck Lever 596d11e9346SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_callback_class, 597fc1eb807SChuck Lever TP_PROTO( 598d11e9346SChuck Lever const struct rpcrdma_xprt *r_xprt, 599fc1eb807SChuck Lever const struct rpc_rqst *rqst 600fc1eb807SChuck Lever ), 601fc1eb807SChuck Lever 602d11e9346SChuck Lever TP_ARGS(r_xprt, rqst), 603fc1eb807SChuck Lever 604fc1eb807SChuck Lever TP_STRUCT__entry( 605fc1eb807SChuck Lever __field(u32, xid) 606d11e9346SChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 607d11e9346SChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 608fc1eb807SChuck Lever ), 609fc1eb807SChuck Lever 610fc1eb807SChuck Lever TP_fast_assign( 611fc1eb807SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 612d11e9346SChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 613d11e9346SChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 614fc1eb807SChuck Lever ), 615fc1eb807SChuck Lever 616d11e9346SChuck Lever TP_printk("peer=[%s]:%s xid=0x%08x", 617d11e9346SChuck Lever __get_str(addr), __get_str(port), __entry->xid 618fc1eb807SChuck Lever ) 619fc1eb807SChuck Lever ); 620fc1eb807SChuck Lever 621d11e9346SChuck Lever #define DEFINE_CALLBACK_EVENT(name) \ 622d11e9346SChuck Lever DEFINE_EVENT(xprtrdma_callback_class, \ 623d11e9346SChuck Lever xprtrdma_cb_##name, \ 624fc1eb807SChuck Lever TP_PROTO( \ 625d11e9346SChuck Lever const struct rpcrdma_xprt *r_xprt, \ 626fc1eb807SChuck Lever const struct rpc_rqst *rqst \ 627fc1eb807SChuck Lever ), \ 628d11e9346SChuck Lever TP_ARGS(r_xprt, rqst)) 629fc1eb807SChuck Lever 630b4a7f91cSChuck Lever /** 631b4744e00SChuck Lever ** Connection events 632b4744e00SChuck Lever **/ 633b4744e00SChuck Lever 634f54c870dSChuck Lever TRACE_EVENT(xprtrdma_inline_thresh, 635f54c870dSChuck Lever TP_PROTO( 636745b734cSChuck Lever const struct rpcrdma_ep *ep 637f54c870dSChuck Lever ), 638f54c870dSChuck Lever 639745b734cSChuck Lever TP_ARGS(ep), 640f54c870dSChuck Lever 641f54c870dSChuck Lever TP_STRUCT__entry( 642f54c870dSChuck Lever __field(unsigned int, inline_send) 643f54c870dSChuck Lever __field(unsigned int, inline_recv) 644f54c870dSChuck Lever __field(unsigned int, max_send) 645f54c870dSChuck Lever __field(unsigned int, max_recv) 646745b734cSChuck Lever __array(unsigned char, srcaddr, sizeof(struct sockaddr_in6)) 647745b734cSChuck Lever __array(unsigned char, dstaddr, sizeof(struct sockaddr_in6)) 648f54c870dSChuck Lever ), 649f54c870dSChuck Lever 650f54c870dSChuck Lever TP_fast_assign( 651745b734cSChuck Lever const struct rdma_cm_id *id = ep->re_id; 652f54c870dSChuck Lever 65393aa8e0aSChuck Lever __entry->inline_send = ep->re_inline_send; 65493aa8e0aSChuck Lever __entry->inline_recv = ep->re_inline_recv; 65593aa8e0aSChuck Lever __entry->max_send = ep->re_max_inline_send; 65693aa8e0aSChuck Lever __entry->max_recv = ep->re_max_inline_recv; 657745b734cSChuck Lever memcpy(__entry->srcaddr, &id->route.addr.src_addr, 658745b734cSChuck Lever sizeof(struct sockaddr_in6)); 659745b734cSChuck Lever memcpy(__entry->dstaddr, &id->route.addr.dst_addr, 660745b734cSChuck Lever sizeof(struct sockaddr_in6)); 661f54c870dSChuck Lever ), 662f54c870dSChuck Lever 663745b734cSChuck Lever TP_printk("%pISpc -> %pISpc neg send/recv=%u/%u, calc send/recv=%u/%u", 664745b734cSChuck Lever __entry->srcaddr, __entry->dstaddr, 665f54c870dSChuck Lever __entry->inline_send, __entry->inline_recv, 666f54c870dSChuck Lever __entry->max_send, __entry->max_recv 667f54c870dSChuck Lever ) 668f54c870dSChuck Lever ); 669f54c870dSChuck Lever 6707b020f17SChuck Lever DEFINE_CONN_EVENT(connect); 6717b020f17SChuck Lever DEFINE_CONN_EVENT(disconnect); 6727b020f17SChuck Lever 6737b020f17SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_op_inject_dsc); 6747b020f17SChuck Lever 6757b020f17SChuck Lever TRACE_EVENT(xprtrdma_op_connect, 676b4744e00SChuck Lever TP_PROTO( 677b4744e00SChuck Lever const struct rpcrdma_xprt *r_xprt, 6787b020f17SChuck Lever unsigned long delay 679b4744e00SChuck Lever ), 680b4744e00SChuck Lever 6817b020f17SChuck Lever TP_ARGS(r_xprt, delay), 682b4744e00SChuck Lever 683b4744e00SChuck Lever TP_STRUCT__entry( 6847b020f17SChuck Lever __field(unsigned long, delay) 685b4744e00SChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 686b4744e00SChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 687b4744e00SChuck Lever ), 688b4744e00SChuck Lever 689b4744e00SChuck Lever TP_fast_assign( 6907b020f17SChuck Lever __entry->delay = delay; 691b4744e00SChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 692b4744e00SChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 693b4744e00SChuck Lever ), 694b4744e00SChuck Lever 69583189d15SChuck Lever TP_printk("peer=[%s]:%s delay=%lu", 69683189d15SChuck Lever __get_str(addr), __get_str(port), __entry->delay 697b4744e00SChuck Lever ) 698b4744e00SChuck Lever ); 699b4744e00SChuck Lever 700b4744e00SChuck Lever 701675dd90aSChuck Lever TRACE_EVENT(xprtrdma_op_set_cto, 702675dd90aSChuck Lever TP_PROTO( 703675dd90aSChuck Lever const struct rpcrdma_xprt *r_xprt, 704675dd90aSChuck Lever unsigned long connect, 705675dd90aSChuck Lever unsigned long reconnect 706675dd90aSChuck Lever ), 707675dd90aSChuck Lever 708675dd90aSChuck Lever TP_ARGS(r_xprt, connect, reconnect), 709675dd90aSChuck Lever 710675dd90aSChuck Lever TP_STRUCT__entry( 711675dd90aSChuck Lever __field(unsigned long, connect) 712675dd90aSChuck Lever __field(unsigned long, reconnect) 713675dd90aSChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 714675dd90aSChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 715675dd90aSChuck Lever ), 716675dd90aSChuck Lever 717675dd90aSChuck Lever TP_fast_assign( 718675dd90aSChuck Lever __entry->connect = connect; 719675dd90aSChuck Lever __entry->reconnect = reconnect; 720675dd90aSChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 721675dd90aSChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 722675dd90aSChuck Lever ), 723675dd90aSChuck Lever 72483189d15SChuck Lever TP_printk("peer=[%s]:%s connect=%lu reconnect=%lu", 72583189d15SChuck Lever __get_str(addr), __get_str(port), 726675dd90aSChuck Lever __entry->connect / HZ, __entry->reconnect / HZ 727675dd90aSChuck Lever ) 728675dd90aSChuck Lever ); 729675dd90aSChuck Lever 730b4744e00SChuck Lever /** 731ab03eff5SChuck Lever ** Call events 732ab03eff5SChuck Lever **/ 733ab03eff5SChuck Lever 7341c443effSChuck Lever TRACE_EVENT(xprtrdma_createmrs, 7351c443effSChuck Lever TP_PROTO( 7361c443effSChuck Lever const struct rpcrdma_xprt *r_xprt, 7371c443effSChuck Lever unsigned int count 7381c443effSChuck Lever ), 7391c443effSChuck Lever 7401c443effSChuck Lever TP_ARGS(r_xprt, count), 7411c443effSChuck Lever 7421c443effSChuck Lever TP_STRUCT__entry( 7436dc6ec9eSChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 7446dc6ec9eSChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 7451c443effSChuck Lever __field(unsigned int, count) 7461c443effSChuck Lever ), 7471c443effSChuck Lever 7481c443effSChuck Lever TP_fast_assign( 7491c443effSChuck Lever __entry->count = count; 7506dc6ec9eSChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 7516dc6ec9eSChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 7521c443effSChuck Lever ), 7531c443effSChuck Lever 75483189d15SChuck Lever TP_printk("peer=[%s]:%s created %u MRs", 75583189d15SChuck Lever __get_str(addr), __get_str(port), __entry->count 7566dc6ec9eSChuck Lever ) 7576dc6ec9eSChuck Lever ); 7586dc6ec9eSChuck Lever 7590307cdecSChuck Lever TRACE_EVENT(xprtrdma_nomrs_err, 7606dc6ec9eSChuck Lever TP_PROTO( 7610307cdecSChuck Lever const struct rpcrdma_xprt *r_xprt, 7626dc6ec9eSChuck Lever const struct rpcrdma_req *req 7636dc6ec9eSChuck Lever ), 7646dc6ec9eSChuck Lever 7650307cdecSChuck Lever TP_ARGS(r_xprt, req), 7666dc6ec9eSChuck Lever 7676dc6ec9eSChuck Lever TP_STRUCT__entry( 7686dc6ec9eSChuck Lever __field(unsigned int, task_id) 7696dc6ec9eSChuck Lever __field(unsigned int, client_id) 7700307cdecSChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 7710307cdecSChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 7726dc6ec9eSChuck Lever ), 7736dc6ec9eSChuck Lever 7746dc6ec9eSChuck Lever TP_fast_assign( 7756dc6ec9eSChuck Lever const struct rpc_rqst *rqst = &req->rl_slot; 7766dc6ec9eSChuck Lever 7776dc6ec9eSChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 7786dc6ec9eSChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 7790307cdecSChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 7800307cdecSChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 7816dc6ec9eSChuck Lever ), 7826dc6ec9eSChuck Lever 783b4776a34SChuck Lever TP_printk(SUNRPC_TRACE_TASK_SPECIFIER " peer=[%s]:%s", 784b4776a34SChuck Lever __entry->task_id, __entry->client_id, 785b4776a34SChuck Lever __get_str(addr), __get_str(port) 7863b39f52aSChuck Lever ) 7873b39f52aSChuck Lever ); 7881c443effSChuck Lever 789aba11831SChuck Lever DEFINE_RDCH_EVENT(read); 790aba11831SChuck Lever DEFINE_WRCH_EVENT(write); 791aba11831SChuck Lever DEFINE_WRCH_EVENT(reply); 79221037b8cSChuck Lever DEFINE_WRCH_EVENT(wp); 79358f10ad4SChuck Lever 794ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch); 795614f3c96SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch_pullup); 796614f3c96SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch_mapped); 797ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_readch); 798ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_areadch); 799ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_writech); 800ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_replych); 801ab03eff5SChuck Lever 802ab03eff5SChuck Lever #define xprtrdma_show_chunktype(x) \ 803ab03eff5SChuck Lever __print_symbolic(x, \ 804ab03eff5SChuck Lever { rpcrdma_noch, "inline" }, \ 805614f3c96SChuck Lever { rpcrdma_noch_pullup, "pullup" }, \ 806614f3c96SChuck Lever { rpcrdma_noch_mapped, "mapped" }, \ 807ab03eff5SChuck Lever { rpcrdma_readch, "read list" }, \ 808ab03eff5SChuck Lever { rpcrdma_areadch, "*read list" }, \ 809ab03eff5SChuck Lever { rpcrdma_writech, "write list" }, \ 810ab03eff5SChuck Lever { rpcrdma_replych, "reply chunk" }) 811ab03eff5SChuck Lever 812ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_marshal, 813ab03eff5SChuck Lever TP_PROTO( 8141310051cSChuck Lever const struct rpcrdma_req *req, 815ab03eff5SChuck Lever unsigned int rtype, 816ab03eff5SChuck Lever unsigned int wtype 817ab03eff5SChuck Lever ), 818ab03eff5SChuck Lever 8191310051cSChuck Lever TP_ARGS(req, rtype, wtype), 820ab03eff5SChuck Lever 821ab03eff5SChuck Lever TP_STRUCT__entry( 822ab03eff5SChuck Lever __field(unsigned int, task_id) 823ab03eff5SChuck Lever __field(unsigned int, client_id) 824ab03eff5SChuck Lever __field(u32, xid) 825ab03eff5SChuck Lever __field(unsigned int, hdrlen) 826ab03eff5SChuck Lever __field(unsigned int, headlen) 827ab03eff5SChuck Lever __field(unsigned int, pagelen) 828ab03eff5SChuck Lever __field(unsigned int, taillen) 829ab03eff5SChuck Lever __field(unsigned int, rtype) 830ab03eff5SChuck Lever __field(unsigned int, wtype) 831ab03eff5SChuck Lever ), 832ab03eff5SChuck Lever 833ab03eff5SChuck Lever TP_fast_assign( 8341310051cSChuck Lever const struct rpc_rqst *rqst = &req->rl_slot; 8351310051cSChuck Lever 836ab03eff5SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 837ab03eff5SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 838ab03eff5SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 8391310051cSChuck Lever __entry->hdrlen = req->rl_hdrbuf.len; 840ab03eff5SChuck Lever __entry->headlen = rqst->rq_snd_buf.head[0].iov_len; 841ab03eff5SChuck Lever __entry->pagelen = rqst->rq_snd_buf.page_len; 842ab03eff5SChuck Lever __entry->taillen = rqst->rq_snd_buf.tail[0].iov_len; 843ab03eff5SChuck Lever __entry->rtype = rtype; 844ab03eff5SChuck Lever __entry->wtype = wtype; 845ab03eff5SChuck Lever ), 846ab03eff5SChuck Lever 847b4776a34SChuck Lever TP_printk(SUNRPC_TRACE_TASK_SPECIFIER 848b4776a34SChuck Lever " xid=0x%08x hdr=%u xdr=%u/%u/%u %s/%s", 849ab03eff5SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 850ab03eff5SChuck Lever __entry->hdrlen, 851ab03eff5SChuck Lever __entry->headlen, __entry->pagelen, __entry->taillen, 852ab03eff5SChuck Lever xprtrdma_show_chunktype(__entry->rtype), 853ab03eff5SChuck Lever xprtrdma_show_chunktype(__entry->wtype) 854ab03eff5SChuck Lever ) 855ab03eff5SChuck Lever ); 856ab03eff5SChuck Lever 85717e4c443SChuck Lever TRACE_EVENT(xprtrdma_marshal_failed, 85817e4c443SChuck Lever TP_PROTO(const struct rpc_rqst *rqst, 85917e4c443SChuck Lever int ret 86017e4c443SChuck Lever ), 86117e4c443SChuck Lever 86217e4c443SChuck Lever TP_ARGS(rqst, ret), 86317e4c443SChuck Lever 86417e4c443SChuck Lever TP_STRUCT__entry( 86517e4c443SChuck Lever __field(unsigned int, task_id) 86617e4c443SChuck Lever __field(unsigned int, client_id) 86717e4c443SChuck Lever __field(u32, xid) 86817e4c443SChuck Lever __field(int, ret) 86917e4c443SChuck Lever ), 87017e4c443SChuck Lever 87117e4c443SChuck Lever TP_fast_assign( 87217e4c443SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 87317e4c443SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 87417e4c443SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 87517e4c443SChuck Lever __entry->ret = ret; 87617e4c443SChuck Lever ), 87717e4c443SChuck Lever 878b4776a34SChuck Lever TP_printk(SUNRPC_TRACE_TASK_SPECIFIER " xid=0x%08x ret=%d", 87917e4c443SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 88017e4c443SChuck Lever __entry->ret 88117e4c443SChuck Lever ) 88217e4c443SChuck Lever ); 88317e4c443SChuck Lever 88405eb06d8SChuck Lever TRACE_EVENT(xprtrdma_prepsend_failed, 88505eb06d8SChuck Lever TP_PROTO(const struct rpc_rqst *rqst, 88605eb06d8SChuck Lever int ret 88705eb06d8SChuck Lever ), 88805eb06d8SChuck Lever 88905eb06d8SChuck Lever TP_ARGS(rqst, ret), 89005eb06d8SChuck Lever 89105eb06d8SChuck Lever TP_STRUCT__entry( 89205eb06d8SChuck Lever __field(unsigned int, task_id) 89305eb06d8SChuck Lever __field(unsigned int, client_id) 89405eb06d8SChuck Lever __field(u32, xid) 89505eb06d8SChuck Lever __field(int, ret) 89605eb06d8SChuck Lever ), 89705eb06d8SChuck Lever 89805eb06d8SChuck Lever TP_fast_assign( 89905eb06d8SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 90005eb06d8SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 90105eb06d8SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 90205eb06d8SChuck Lever __entry->ret = ret; 90305eb06d8SChuck Lever ), 90405eb06d8SChuck Lever 905b4776a34SChuck Lever TP_printk(SUNRPC_TRACE_TASK_SPECIFIER " xid=0x%08x ret=%d", 90605eb06d8SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 90705eb06d8SChuck Lever __entry->ret 90805eb06d8SChuck Lever ) 90905eb06d8SChuck Lever ); 91005eb06d8SChuck Lever 911ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_post_send, 912ab03eff5SChuck Lever TP_PROTO( 913bdb2ce82SChuck Lever const struct rpcrdma_req *req 914ab03eff5SChuck Lever ), 915ab03eff5SChuck Lever 916bdb2ce82SChuck Lever TP_ARGS(req), 917ab03eff5SChuck Lever 918ab03eff5SChuck Lever TP_STRUCT__entry( 919b2e7467fSChuck Lever __field(u32, cq_id) 920b2e7467fSChuck Lever __field(int, completion_id) 9210c77668dSChuck Lever __field(unsigned int, task_id) 9220c77668dSChuck Lever __field(unsigned int, client_id) 923ab03eff5SChuck Lever __field(int, num_sge) 924470443e0SChuck Lever __field(int, signaled) 925ab03eff5SChuck Lever ), 926ab03eff5SChuck Lever 927ab03eff5SChuck Lever TP_fast_assign( 9280c77668dSChuck Lever const struct rpc_rqst *rqst = &req->rl_slot; 929b2e7467fSChuck Lever const struct rpcrdma_sendctx *sc = req->rl_sendctx; 9300c77668dSChuck Lever 931b2e7467fSChuck Lever __entry->cq_id = sc->sc_cid.ci_queue_id; 932b2e7467fSChuck Lever __entry->completion_id = sc->sc_cid.ci_completion_id; 9330c77668dSChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 93410694ac9SChuck Lever __entry->client_id = rqst->rq_task->tk_client ? 93510694ac9SChuck Lever rqst->rq_task->tk_client->cl_clid : -1; 936dc15c3d5SChuck Lever __entry->num_sge = req->rl_wr.num_sge; 937dc15c3d5SChuck Lever __entry->signaled = req->rl_wr.send_flags & IB_SEND_SIGNALED; 938ab03eff5SChuck Lever ), 939ab03eff5SChuck Lever 940b4776a34SChuck Lever TP_printk(SUNRPC_TRACE_TASK_SPECIFIER " cq.id=%u cid=%d (%d SGE%s) %s", 9410c77668dSChuck Lever __entry->task_id, __entry->client_id, 942b2e7467fSChuck Lever __entry->cq_id, __entry->completion_id, 943b2e7467fSChuck Lever __entry->num_sge, (__entry->num_sge == 1 ? "" : "s"), 944bdb2ce82SChuck Lever (__entry->signaled ? "signaled" : "") 945ab03eff5SChuck Lever ) 946ab03eff5SChuck Lever ); 947ab03eff5SChuck Lever 948d9ae8134SChuck Lever TRACE_EVENT(xprtrdma_post_send_err, 949d9ae8134SChuck Lever TP_PROTO( 950d9ae8134SChuck Lever const struct rpcrdma_xprt *r_xprt, 951d9ae8134SChuck Lever const struct rpcrdma_req *req, 952d9ae8134SChuck Lever int rc 953d9ae8134SChuck Lever ), 954d9ae8134SChuck Lever 955d9ae8134SChuck Lever TP_ARGS(r_xprt, req, rc), 956d9ae8134SChuck Lever 957d9ae8134SChuck Lever TP_STRUCT__entry( 958d9ae8134SChuck Lever __field(u32, cq_id) 959d9ae8134SChuck Lever __field(unsigned int, task_id) 960d9ae8134SChuck Lever __field(unsigned int, client_id) 961d9ae8134SChuck Lever __field(int, rc) 962d9ae8134SChuck Lever ), 963d9ae8134SChuck Lever 964d9ae8134SChuck Lever TP_fast_assign( 965d9ae8134SChuck Lever const struct rpc_rqst *rqst = &req->rl_slot; 966d9ae8134SChuck Lever const struct rpcrdma_ep *ep = r_xprt->rx_ep; 967d9ae8134SChuck Lever 968d9ae8134SChuck Lever __entry->cq_id = ep ? ep->re_attr.recv_cq->res.id : 0; 969d9ae8134SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 970d9ae8134SChuck Lever __entry->client_id = rqst->rq_task->tk_client ? 971d9ae8134SChuck Lever rqst->rq_task->tk_client->cl_clid : -1; 972d9ae8134SChuck Lever __entry->rc = rc; 973d9ae8134SChuck Lever ), 974d9ae8134SChuck Lever 975b4776a34SChuck Lever TP_printk(SUNRPC_TRACE_TASK_SPECIFIER " cq.id=%u rc=%d", 976d9ae8134SChuck Lever __entry->task_id, __entry->client_id, 977d9ae8134SChuck Lever __entry->cq_id, __entry->rc 978d9ae8134SChuck Lever ) 979d9ae8134SChuck Lever ); 980d9ae8134SChuck Lever 981b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_post_recv, 982b4a7f91cSChuck Lever TP_PROTO( 9832dfdcd88SChuck Lever const struct rpcrdma_rep *rep 984b4a7f91cSChuck Lever ), 985b4a7f91cSChuck Lever 9862dfdcd88SChuck Lever TP_ARGS(rep), 987b4a7f91cSChuck Lever 988b4a7f91cSChuck Lever TP_STRUCT__entry( 989af5865d2SChuck Lever __field(u32, cq_id) 990af5865d2SChuck Lever __field(int, completion_id) 991b4a7f91cSChuck Lever ), 992b4a7f91cSChuck Lever 993b4a7f91cSChuck Lever TP_fast_assign( 994af5865d2SChuck Lever __entry->cq_id = rep->rr_cid.ci_queue_id; 995af5865d2SChuck Lever __entry->completion_id = rep->rr_cid.ci_completion_id; 996b4a7f91cSChuck Lever ), 997b4a7f91cSChuck Lever 998af5865d2SChuck Lever TP_printk("cq.id=%d cid=%d", 999af5865d2SChuck Lever __entry->cq_id, __entry->completion_id 1000b4a7f91cSChuck Lever ) 1001b4a7f91cSChuck Lever ); 1002b4a7f91cSChuck Lever 10037c8d9e7cSChuck Lever TRACE_EVENT(xprtrdma_post_recvs, 10047c8d9e7cSChuck Lever TP_PROTO( 10057c8d9e7cSChuck Lever const struct rpcrdma_xprt *r_xprt, 1006683f31c3SChuck Lever unsigned int count 10077c8d9e7cSChuck Lever ), 10087c8d9e7cSChuck Lever 1009683f31c3SChuck Lever TP_ARGS(r_xprt, count), 10107c8d9e7cSChuck Lever 10117c8d9e7cSChuck Lever TP_STRUCT__entry( 101283189d15SChuck Lever __field(u32, cq_id) 10137c8d9e7cSChuck Lever __field(unsigned int, count) 10147c8d9e7cSChuck Lever __field(int, posted) 10157c8d9e7cSChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 10167c8d9e7cSChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 10177c8d9e7cSChuck Lever ), 10187c8d9e7cSChuck Lever 10197c8d9e7cSChuck Lever TP_fast_assign( 102083189d15SChuck Lever const struct rpcrdma_ep *ep = r_xprt->rx_ep; 102183189d15SChuck Lever 102283189d15SChuck Lever __entry->cq_id = ep->re_attr.recv_cq->res.id; 10237c8d9e7cSChuck Lever __entry->count = count; 102483189d15SChuck Lever __entry->posted = ep->re_receive_count; 10257c8d9e7cSChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 10267c8d9e7cSChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 10277c8d9e7cSChuck Lever ), 10287c8d9e7cSChuck Lever 1029683f31c3SChuck Lever TP_printk("peer=[%s]:%s cq.id=%d %u new recvs, %d active", 103083189d15SChuck Lever __get_str(addr), __get_str(port), __entry->cq_id, 1031683f31c3SChuck Lever __entry->count, __entry->posted 1032683f31c3SChuck Lever ) 1033683f31c3SChuck Lever ); 1034683f31c3SChuck Lever 1035683f31c3SChuck Lever TRACE_EVENT(xprtrdma_post_recvs_err, 1036683f31c3SChuck Lever TP_PROTO( 1037683f31c3SChuck Lever const struct rpcrdma_xprt *r_xprt, 1038683f31c3SChuck Lever int status 1039683f31c3SChuck Lever ), 1040683f31c3SChuck Lever 1041683f31c3SChuck Lever TP_ARGS(r_xprt, status), 1042683f31c3SChuck Lever 1043683f31c3SChuck Lever TP_STRUCT__entry( 1044683f31c3SChuck Lever __field(u32, cq_id) 1045683f31c3SChuck Lever __field(int, status) 1046683f31c3SChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 1047683f31c3SChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 1048683f31c3SChuck Lever ), 1049683f31c3SChuck Lever 1050683f31c3SChuck Lever TP_fast_assign( 1051683f31c3SChuck Lever const struct rpcrdma_ep *ep = r_xprt->rx_ep; 1052683f31c3SChuck Lever 1053683f31c3SChuck Lever __entry->cq_id = ep->re_attr.recv_cq->res.id; 1054683f31c3SChuck Lever __entry->status = status; 1055683f31c3SChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 1056683f31c3SChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 1057683f31c3SChuck Lever ), 1058683f31c3SChuck Lever 1059683f31c3SChuck Lever TP_printk("peer=[%s]:%s cq.id=%d rc=%d", 1060683f31c3SChuck Lever __get_str(addr), __get_str(port), __entry->cq_id, 1061683f31c3SChuck Lever __entry->status 1062ab03eff5SChuck Lever ) 1063ab03eff5SChuck Lever ); 1064ab03eff5SChuck Lever 106536a55edfSChuck Lever TRACE_EVENT(xprtrdma_post_linv_err, 10664b93dab3SChuck Lever TP_PROTO( 10674b93dab3SChuck Lever const struct rpcrdma_req *req, 10684b93dab3SChuck Lever int status 10694b93dab3SChuck Lever ), 10704b93dab3SChuck Lever 10714b93dab3SChuck Lever TP_ARGS(req, status), 10724b93dab3SChuck Lever 10734b93dab3SChuck Lever TP_STRUCT__entry( 107436a55edfSChuck Lever __field(unsigned int, task_id) 107536a55edfSChuck Lever __field(unsigned int, client_id) 10764b93dab3SChuck Lever __field(int, status) 10774b93dab3SChuck Lever ), 10784b93dab3SChuck Lever 10794b93dab3SChuck Lever TP_fast_assign( 108036a55edfSChuck Lever const struct rpc_task *task = req->rl_slot.rq_task; 108136a55edfSChuck Lever 108236a55edfSChuck Lever __entry->task_id = task->tk_pid; 108336a55edfSChuck Lever __entry->client_id = task->tk_client->cl_clid; 10844b93dab3SChuck Lever __entry->status = status; 10854b93dab3SChuck Lever ), 10864b93dab3SChuck Lever 1087b4776a34SChuck Lever TP_printk(SUNRPC_TRACE_TASK_SPECIFIER " status=%d", 108836a55edfSChuck Lever __entry->task_id, __entry->client_id, __entry->status 10894b93dab3SChuck Lever ) 10904b93dab3SChuck Lever ); 10914b93dab3SChuck Lever 1092ab03eff5SChuck Lever /** 1093ab03eff5SChuck Lever ** Completion events 1094ab03eff5SChuck Lever **/ 1095ab03eff5SChuck Lever 1096c30f259aSChuck Lever DEFINE_RECEIVE_COMPLETION_EVENT(xprtrdma_wc_receive); 1097c30f259aSChuck Lever 1098b2e7467fSChuck Lever DEFINE_COMPLETION_EVENT(xprtrdma_wc_send); 10996b147ea7SChuck Lever DEFINE_MR_COMPLETION_EVENT(xprtrdma_wc_fastreg); 11006b147ea7SChuck Lever DEFINE_MR_COMPLETION_EVENT(xprtrdma_wc_li); 11016b147ea7SChuck Lever DEFINE_MR_COMPLETION_EVENT(xprtrdma_wc_li_wake); 11026b147ea7SChuck Lever DEFINE_MR_COMPLETION_EVENT(xprtrdma_wc_li_done); 11032937fedeSChuck Lever 110453b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_alloc, 110553b2c1cbSChuck Lever TP_PROTO( 110653b2c1cbSChuck Lever const struct rpcrdma_mr *mr, 110753b2c1cbSChuck Lever int rc 110853b2c1cbSChuck Lever ), 110953b2c1cbSChuck Lever 111053b2c1cbSChuck Lever TP_ARGS(mr, rc), 111153b2c1cbSChuck Lever 111253b2c1cbSChuck Lever TP_STRUCT__entry( 111362a89501SChuck Lever __field(u32, mr_id) 111453b2c1cbSChuck Lever __field(int, rc) 111553b2c1cbSChuck Lever ), 111653b2c1cbSChuck Lever 111753b2c1cbSChuck Lever TP_fast_assign( 111813bcf7e3SChuck Lever __entry->mr_id = mr->mr_ibmr->res.id; 111953b2c1cbSChuck Lever __entry->rc = rc; 112053b2c1cbSChuck Lever ), 112153b2c1cbSChuck Lever 112262a89501SChuck Lever TP_printk("mr.id=%u: rc=%d", 112362a89501SChuck Lever __entry->mr_id, __entry->rc 112453b2c1cbSChuck Lever ) 112553b2c1cbSChuck Lever ); 112653b2c1cbSChuck Lever 112753b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_dereg, 112853b2c1cbSChuck Lever TP_PROTO( 112953b2c1cbSChuck Lever const struct rpcrdma_mr *mr, 113053b2c1cbSChuck Lever int rc 113153b2c1cbSChuck Lever ), 113253b2c1cbSChuck Lever 113353b2c1cbSChuck Lever TP_ARGS(mr, rc), 113453b2c1cbSChuck Lever 113553b2c1cbSChuck Lever TP_STRUCT__entry( 113662a89501SChuck Lever __field(u32, mr_id) 113762a89501SChuck Lever __field(int, nents) 113853b2c1cbSChuck Lever __field(u32, handle) 113953b2c1cbSChuck Lever __field(u32, length) 114053b2c1cbSChuck Lever __field(u64, offset) 114153b2c1cbSChuck Lever __field(u32, dir) 114253b2c1cbSChuck Lever __field(int, rc) 114353b2c1cbSChuck Lever ), 114453b2c1cbSChuck Lever 114553b2c1cbSChuck Lever TP_fast_assign( 114613bcf7e3SChuck Lever __entry->mr_id = mr->mr_ibmr->res.id; 114762a89501SChuck Lever __entry->nents = mr->mr_nents; 114853b2c1cbSChuck Lever __entry->handle = mr->mr_handle; 114953b2c1cbSChuck Lever __entry->length = mr->mr_length; 115053b2c1cbSChuck Lever __entry->offset = mr->mr_offset; 115153b2c1cbSChuck Lever __entry->dir = mr->mr_dir; 115253b2c1cbSChuck Lever __entry->rc = rc; 115353b2c1cbSChuck Lever ), 115453b2c1cbSChuck Lever 115562a89501SChuck Lever TP_printk("mr.id=%u nents=%d %u@0x%016llx:0x%08x (%s): rc=%d", 115662a89501SChuck Lever __entry->mr_id, __entry->nents, __entry->length, 115753b2c1cbSChuck Lever (unsigned long long)__entry->offset, __entry->handle, 115853b2c1cbSChuck Lever xprtrdma_show_direction(__entry->dir), 115953b2c1cbSChuck Lever __entry->rc 116053b2c1cbSChuck Lever ) 116153b2c1cbSChuck Lever ); 116253b2c1cbSChuck Lever 116353b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_sgerr, 116453b2c1cbSChuck Lever TP_PROTO( 116553b2c1cbSChuck Lever const struct rpcrdma_mr *mr, 116653b2c1cbSChuck Lever int sg_nents 116753b2c1cbSChuck Lever ), 116853b2c1cbSChuck Lever 116953b2c1cbSChuck Lever TP_ARGS(mr, sg_nents), 117053b2c1cbSChuck Lever 117153b2c1cbSChuck Lever TP_STRUCT__entry( 117262a89501SChuck Lever __field(u32, mr_id) 117353b2c1cbSChuck Lever __field(u64, addr) 117453b2c1cbSChuck Lever __field(u32, dir) 117553b2c1cbSChuck Lever __field(int, nents) 117653b2c1cbSChuck Lever ), 117753b2c1cbSChuck Lever 117853b2c1cbSChuck Lever TP_fast_assign( 117913bcf7e3SChuck Lever __entry->mr_id = mr->mr_ibmr->res.id; 118053b2c1cbSChuck Lever __entry->addr = mr->mr_sg->dma_address; 118153b2c1cbSChuck Lever __entry->dir = mr->mr_dir; 118253b2c1cbSChuck Lever __entry->nents = sg_nents; 118353b2c1cbSChuck Lever ), 118453b2c1cbSChuck Lever 118562a89501SChuck Lever TP_printk("mr.id=%u DMA addr=0x%llx (%s) sg_nents=%d", 118662a89501SChuck Lever __entry->mr_id, __entry->addr, 118753b2c1cbSChuck Lever xprtrdma_show_direction(__entry->dir), 118853b2c1cbSChuck Lever __entry->nents 118953b2c1cbSChuck Lever ) 119053b2c1cbSChuck Lever ); 119153b2c1cbSChuck Lever 119253b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_maperr, 119353b2c1cbSChuck Lever TP_PROTO( 119453b2c1cbSChuck Lever const struct rpcrdma_mr *mr, 119553b2c1cbSChuck Lever int num_mapped 119653b2c1cbSChuck Lever ), 119753b2c1cbSChuck Lever 119853b2c1cbSChuck Lever TP_ARGS(mr, num_mapped), 119953b2c1cbSChuck Lever 120053b2c1cbSChuck Lever TP_STRUCT__entry( 120162a89501SChuck Lever __field(u32, mr_id) 120253b2c1cbSChuck Lever __field(u64, addr) 120353b2c1cbSChuck Lever __field(u32, dir) 120453b2c1cbSChuck Lever __field(int, num_mapped) 120553b2c1cbSChuck Lever __field(int, nents) 120653b2c1cbSChuck Lever ), 120753b2c1cbSChuck Lever 120853b2c1cbSChuck Lever TP_fast_assign( 120913bcf7e3SChuck Lever __entry->mr_id = mr->mr_ibmr->res.id; 121053b2c1cbSChuck Lever __entry->addr = mr->mr_sg->dma_address; 121153b2c1cbSChuck Lever __entry->dir = mr->mr_dir; 121253b2c1cbSChuck Lever __entry->num_mapped = num_mapped; 121353b2c1cbSChuck Lever __entry->nents = mr->mr_nents; 121453b2c1cbSChuck Lever ), 121553b2c1cbSChuck Lever 121662a89501SChuck Lever TP_printk("mr.id=%u DMA addr=0x%llx (%s) nents=%d of %d", 121762a89501SChuck Lever __entry->mr_id, __entry->addr, 121853b2c1cbSChuck Lever xprtrdma_show_direction(__entry->dir), 121953b2c1cbSChuck Lever __entry->num_mapped, __entry->nents 122053b2c1cbSChuck Lever ) 122153b2c1cbSChuck Lever ); 122253b2c1cbSChuck Lever 12234ddd0fc3SChuck Lever DEFINE_MR_EVENT(fastreg); 1224d379eaa8SChuck Lever DEFINE_MR_EVENT(localinv); 12254ddd0fc3SChuck Lever DEFINE_MR_EVENT(reminv); 1226d379eaa8SChuck Lever DEFINE_MR_EVENT(map); 12277703db97SChuck Lever 12287703db97SChuck Lever DEFINE_ANON_MR_EVENT(unmap); 122958f10ad4SChuck Lever 123053b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_dma_maperr, 123153b2c1cbSChuck Lever TP_PROTO( 123253b2c1cbSChuck Lever u64 addr 123353b2c1cbSChuck Lever ), 123453b2c1cbSChuck Lever 123553b2c1cbSChuck Lever TP_ARGS(addr), 123653b2c1cbSChuck Lever 123753b2c1cbSChuck Lever TP_STRUCT__entry( 123853b2c1cbSChuck Lever __field(u64, addr) 123953b2c1cbSChuck Lever ), 124053b2c1cbSChuck Lever 124153b2c1cbSChuck Lever TP_fast_assign( 124253b2c1cbSChuck Lever __entry->addr = addr; 124353b2c1cbSChuck Lever ), 124453b2c1cbSChuck Lever 124553b2c1cbSChuck Lever TP_printk("dma addr=0x%llx\n", __entry->addr) 124653b2c1cbSChuck Lever ); 124753b2c1cbSChuck Lever 1248b4a7f91cSChuck Lever /** 1249b4a7f91cSChuck Lever ** Reply events 1250b4a7f91cSChuck Lever **/ 1251b4a7f91cSChuck Lever 1252b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_reply, 1253b4a7f91cSChuck Lever TP_PROTO( 1254b4a7f91cSChuck Lever const struct rpc_task *task, 1255b4a7f91cSChuck Lever const struct rpcrdma_rep *rep, 1256b4a7f91cSChuck Lever unsigned int credits 1257b4a7f91cSChuck Lever ), 1258b4a7f91cSChuck Lever 125903ffd924SChuck Lever TP_ARGS(task, rep, credits), 1260b4a7f91cSChuck Lever 1261b4a7f91cSChuck Lever TP_STRUCT__entry( 1262b4a7f91cSChuck Lever __field(unsigned int, task_id) 1263b4a7f91cSChuck Lever __field(unsigned int, client_id) 1264b4a7f91cSChuck Lever __field(u32, xid) 1265b4a7f91cSChuck Lever __field(unsigned int, credits) 1266b4a7f91cSChuck Lever ), 1267b4a7f91cSChuck Lever 1268b4a7f91cSChuck Lever TP_fast_assign( 1269b4a7f91cSChuck Lever __entry->task_id = task->tk_pid; 1270b4a7f91cSChuck Lever __entry->client_id = task->tk_client->cl_clid; 1271b4a7f91cSChuck Lever __entry->xid = be32_to_cpu(rep->rr_xid); 1272b4a7f91cSChuck Lever __entry->credits = credits; 1273b4a7f91cSChuck Lever ), 1274b4a7f91cSChuck Lever 1275b4776a34SChuck Lever TP_printk(SUNRPC_TRACE_TASK_SPECIFIER " xid=0x%08x credits=%u", 1276b4a7f91cSChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 127703ffd924SChuck Lever __entry->credits 1278b4a7f91cSChuck Lever ) 1279b4a7f91cSChuck Lever ); 1280b4a7f91cSChuck Lever 12813a9568feSChuck Lever DEFINE_REPLY_EVENT(vers); 12823a9568feSChuck Lever DEFINE_REPLY_EVENT(rqst); 12833a9568feSChuck Lever DEFINE_REPLY_EVENT(short); 12843a9568feSChuck Lever DEFINE_REPLY_EVENT(hdr); 1285b4a7f91cSChuck Lever 12863821e232SChuck Lever TRACE_EVENT(xprtrdma_err_vers, 1287e48f083eSChuck Lever TP_PROTO( 12883821e232SChuck Lever const struct rpc_rqst *rqst, 12893821e232SChuck Lever __be32 *min, 12903821e232SChuck Lever __be32 *max 1291e48f083eSChuck Lever ), 1292e48f083eSChuck Lever 12933821e232SChuck Lever TP_ARGS(rqst, min, max), 1294e48f083eSChuck Lever 1295e48f083eSChuck Lever TP_STRUCT__entry( 1296e48f083eSChuck Lever __field(unsigned int, task_id) 1297e48f083eSChuck Lever __field(unsigned int, client_id) 12983821e232SChuck Lever __field(u32, xid) 12993821e232SChuck Lever __field(u32, min) 13003821e232SChuck Lever __field(u32, max) 13013821e232SChuck Lever ), 13023821e232SChuck Lever 13033821e232SChuck Lever TP_fast_assign( 13043821e232SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 13053821e232SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 13063821e232SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 13073821e232SChuck Lever __entry->min = be32_to_cpup(min); 13083821e232SChuck Lever __entry->max = be32_to_cpup(max); 13093821e232SChuck Lever ), 13103821e232SChuck Lever 1311b4776a34SChuck Lever TP_printk(SUNRPC_TRACE_TASK_SPECIFIER " xid=0x%08x versions=[%u, %u]", 13123821e232SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 13133821e232SChuck Lever __entry->min, __entry->max 13143821e232SChuck Lever ) 13153821e232SChuck Lever ); 13163821e232SChuck Lever 13173821e232SChuck Lever TRACE_EVENT(xprtrdma_err_chunk, 13183821e232SChuck Lever TP_PROTO( 13193821e232SChuck Lever const struct rpc_rqst *rqst 13203821e232SChuck Lever ), 13213821e232SChuck Lever 13223821e232SChuck Lever TP_ARGS(rqst), 13233821e232SChuck Lever 13243821e232SChuck Lever TP_STRUCT__entry( 13253821e232SChuck Lever __field(unsigned int, task_id) 13263821e232SChuck Lever __field(unsigned int, client_id) 1327e48f083eSChuck Lever __field(u32, xid) 1328e48f083eSChuck Lever ), 1329e48f083eSChuck Lever 1330e48f083eSChuck Lever TP_fast_assign( 13313821e232SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 13323821e232SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 13333821e232SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 1334e48f083eSChuck Lever ), 1335e48f083eSChuck Lever 1336b4776a34SChuck Lever TP_printk(SUNRPC_TRACE_TASK_SPECIFIER " xid=0x%08x", 13373821e232SChuck Lever __entry->task_id, __entry->client_id, __entry->xid 1338e48f083eSChuck Lever ) 1339e48f083eSChuck Lever ); 1340e48f083eSChuck Lever 13413821e232SChuck Lever TRACE_EVENT(xprtrdma_err_unrecognized, 13423821e232SChuck Lever TP_PROTO( 13433821e232SChuck Lever const struct rpc_rqst *rqst, 13443821e232SChuck Lever __be32 *procedure 13453821e232SChuck Lever ), 13463821e232SChuck Lever 13473821e232SChuck Lever TP_ARGS(rqst, procedure), 13483821e232SChuck Lever 13493821e232SChuck Lever TP_STRUCT__entry( 13503821e232SChuck Lever __field(unsigned int, task_id) 13513821e232SChuck Lever __field(unsigned int, client_id) 13523821e232SChuck Lever __field(u32, xid) 13533821e232SChuck Lever __field(u32, procedure) 13543821e232SChuck Lever ), 13553821e232SChuck Lever 13563821e232SChuck Lever TP_fast_assign( 13573821e232SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 13583821e232SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 13593821e232SChuck Lever __entry->procedure = be32_to_cpup(procedure); 13603821e232SChuck Lever ), 13613821e232SChuck Lever 1362b4776a34SChuck Lever TP_printk(SUNRPC_TRACE_TASK_SPECIFIER " xid=0x%08x procedure=%u", 13633821e232SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 13643821e232SChuck Lever __entry->procedure 13653821e232SChuck Lever ) 13663821e232SChuck Lever ); 1367e48f083eSChuck Lever 1368e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_fixup, 1369e11b7c96SChuck Lever TP_PROTO( 1370e11b7c96SChuck Lever const struct rpc_rqst *rqst, 1371d4957f01SChuck Lever unsigned long fixup 1372e11b7c96SChuck Lever ), 1373e11b7c96SChuck Lever 1374d4957f01SChuck Lever TP_ARGS(rqst, fixup), 1375e11b7c96SChuck Lever 1376e11b7c96SChuck Lever TP_STRUCT__entry( 1377e11b7c96SChuck Lever __field(unsigned int, task_id) 1378e11b7c96SChuck Lever __field(unsigned int, client_id) 1379d4957f01SChuck Lever __field(unsigned long, fixup) 1380d4957f01SChuck Lever __field(size_t, headlen) 1381d4957f01SChuck Lever __field(unsigned int, pagelen) 1382d4957f01SChuck Lever __field(size_t, taillen) 1383e11b7c96SChuck Lever ), 1384e11b7c96SChuck Lever 1385e11b7c96SChuck Lever TP_fast_assign( 1386e11b7c96SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 1387e11b7c96SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 1388d4957f01SChuck Lever __entry->fixup = fixup; 1389d4957f01SChuck Lever __entry->headlen = rqst->rq_rcv_buf.head[0].iov_len; 1390d4957f01SChuck Lever __entry->pagelen = rqst->rq_rcv_buf.page_len; 1391d4957f01SChuck Lever __entry->taillen = rqst->rq_rcv_buf.tail[0].iov_len; 1392e11b7c96SChuck Lever ), 1393e11b7c96SChuck Lever 1394b4776a34SChuck Lever TP_printk(SUNRPC_TRACE_TASK_SPECIFIER " fixup=%lu xdr=%zu/%u/%zu", 1395d4957f01SChuck Lever __entry->task_id, __entry->client_id, __entry->fixup, 1396d4957f01SChuck Lever __entry->headlen, __entry->pagelen, __entry->taillen 1397e11b7c96SChuck Lever ) 1398e11b7c96SChuck Lever ); 1399e11b7c96SChuck Lever 1400e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_decode_seg, 1401e11b7c96SChuck Lever TP_PROTO( 1402e11b7c96SChuck Lever u32 handle, 1403e11b7c96SChuck Lever u32 length, 1404e11b7c96SChuck Lever u64 offset 1405e11b7c96SChuck Lever ), 1406e11b7c96SChuck Lever 1407e11b7c96SChuck Lever TP_ARGS(handle, length, offset), 1408e11b7c96SChuck Lever 1409e11b7c96SChuck Lever TP_STRUCT__entry( 1410e11b7c96SChuck Lever __field(u32, handle) 1411e11b7c96SChuck Lever __field(u32, length) 1412e11b7c96SChuck Lever __field(u64, offset) 1413e11b7c96SChuck Lever ), 1414e11b7c96SChuck Lever 1415e11b7c96SChuck Lever TP_fast_assign( 1416e11b7c96SChuck Lever __entry->handle = handle; 1417e11b7c96SChuck Lever __entry->length = length; 1418e11b7c96SChuck Lever __entry->offset = offset; 1419e11b7c96SChuck Lever ), 1420e11b7c96SChuck Lever 1421e11b7c96SChuck Lever TP_printk("%u@0x%016llx:0x%08x", 1422e11b7c96SChuck Lever __entry->length, (unsigned long long)__entry->offset, 1423e11b7c96SChuck Lever __entry->handle 1424e11b7c96SChuck Lever ) 1425e11b7c96SChuck Lever ); 1426e11b7c96SChuck Lever 14278e24e191SChuck Lever TRACE_EVENT(xprtrdma_mrs_zap, 14288e24e191SChuck Lever TP_PROTO( 14298e24e191SChuck Lever const struct rpc_task *task 14308e24e191SChuck Lever ), 14318e24e191SChuck Lever 14328e24e191SChuck Lever TP_ARGS(task), 14338e24e191SChuck Lever 14348e24e191SChuck Lever TP_STRUCT__entry( 14358e24e191SChuck Lever __field(unsigned int, task_id) 14368e24e191SChuck Lever __field(unsigned int, client_id) 14378e24e191SChuck Lever ), 14388e24e191SChuck Lever 14398e24e191SChuck Lever TP_fast_assign( 14408e24e191SChuck Lever __entry->task_id = task->tk_pid; 14418e24e191SChuck Lever __entry->client_id = task->tk_client->cl_clid; 14428e24e191SChuck Lever ), 14438e24e191SChuck Lever 1444b4776a34SChuck Lever TP_printk(SUNRPC_TRACE_TASK_SPECIFIER, 14458e24e191SChuck Lever __entry->task_id, __entry->client_id 14468e24e191SChuck Lever ) 14478e24e191SChuck Lever ); 14488e24e191SChuck Lever 1449fc1eb807SChuck Lever /** 1450fc1eb807SChuck Lever ** Callback events 1451fc1eb807SChuck Lever **/ 1452fc1eb807SChuck Lever 1453fc1eb807SChuck Lever TRACE_EVENT(xprtrdma_cb_setup, 1454fc1eb807SChuck Lever TP_PROTO( 1455fc1eb807SChuck Lever const struct rpcrdma_xprt *r_xprt, 1456fc1eb807SChuck Lever unsigned int reqs 1457fc1eb807SChuck Lever ), 1458fc1eb807SChuck Lever 1459fc1eb807SChuck Lever TP_ARGS(r_xprt, reqs), 1460fc1eb807SChuck Lever 1461fc1eb807SChuck Lever TP_STRUCT__entry( 1462fc1eb807SChuck Lever __field(unsigned int, reqs) 1463fc1eb807SChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 1464fc1eb807SChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 1465fc1eb807SChuck Lever ), 1466fc1eb807SChuck Lever 1467fc1eb807SChuck Lever TP_fast_assign( 1468fc1eb807SChuck Lever __entry->reqs = reqs; 1469fc1eb807SChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 1470fc1eb807SChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 1471fc1eb807SChuck Lever ), 1472fc1eb807SChuck Lever 147383189d15SChuck Lever TP_printk("peer=[%s]:%s %u reqs", 147483189d15SChuck Lever __get_str(addr), __get_str(port), __entry->reqs 1475fc1eb807SChuck Lever ) 1476fc1eb807SChuck Lever ); 1477fc1eb807SChuck Lever 1478d11e9346SChuck Lever DEFINE_CALLBACK_EVENT(call); 1479d11e9346SChuck Lever DEFINE_CALLBACK_EVENT(reply); 148007e10308SChuck Lever 148198895edbSChuck Lever /** 148298895edbSChuck Lever ** Server-side RPC/RDMA events 148398895edbSChuck Lever **/ 148498895edbSChuck Lever 1485e979a173SChuck Lever DECLARE_EVENT_CLASS(svcrdma_accept_class, 1486e979a173SChuck Lever TP_PROTO( 1487e979a173SChuck Lever const struct svcxprt_rdma *rdma, 1488e979a173SChuck Lever long status 1489e979a173SChuck Lever ), 1490e979a173SChuck Lever 1491e979a173SChuck Lever TP_ARGS(rdma, status), 1492e979a173SChuck Lever 1493e979a173SChuck Lever TP_STRUCT__entry( 1494e979a173SChuck Lever __field(long, status) 1495e979a173SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1496e979a173SChuck Lever ), 1497e979a173SChuck Lever 1498e979a173SChuck Lever TP_fast_assign( 1499e979a173SChuck Lever __entry->status = status; 1500e979a173SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1501e979a173SChuck Lever ), 1502e979a173SChuck Lever 1503e979a173SChuck Lever TP_printk("addr=%s status=%ld", 1504e979a173SChuck Lever __get_str(addr), __entry->status 1505e979a173SChuck Lever ) 1506e979a173SChuck Lever ); 1507e979a173SChuck Lever 1508e979a173SChuck Lever #define DEFINE_ACCEPT_EVENT(name) \ 1509e979a173SChuck Lever DEFINE_EVENT(svcrdma_accept_class, svcrdma_##name##_err, \ 1510e979a173SChuck Lever TP_PROTO( \ 1511e979a173SChuck Lever const struct svcxprt_rdma *rdma, \ 1512e979a173SChuck Lever long status \ 1513e979a173SChuck Lever ), \ 1514e979a173SChuck Lever TP_ARGS(rdma, status)) 1515e979a173SChuck Lever 1516e979a173SChuck Lever DEFINE_ACCEPT_EVENT(pd); 1517e979a173SChuck Lever DEFINE_ACCEPT_EVENT(qp); 1518e979a173SChuck Lever DEFINE_ACCEPT_EVENT(fabric); 1519e979a173SChuck Lever DEFINE_ACCEPT_EVENT(initdepth); 1520e979a173SChuck Lever DEFINE_ACCEPT_EVENT(accept); 1521e979a173SChuck Lever 152298895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_MSG); 152398895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_NOMSG); 152498895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_MSGP); 152598895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_DONE); 152698895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_ERROR); 152798895edbSChuck Lever 152898895edbSChuck Lever #define show_rpcrdma_proc(x) \ 152998895edbSChuck Lever __print_symbolic(x, \ 153098895edbSChuck Lever { RDMA_MSG, "RDMA_MSG" }, \ 153198895edbSChuck Lever { RDMA_NOMSG, "RDMA_NOMSG" }, \ 153298895edbSChuck Lever { RDMA_MSGP, "RDMA_MSGP" }, \ 153398895edbSChuck Lever { RDMA_DONE, "RDMA_DONE" }, \ 153498895edbSChuck Lever { RDMA_ERROR, "RDMA_ERROR" }) 153598895edbSChuck Lever 153698895edbSChuck Lever TRACE_EVENT(svcrdma_decode_rqst, 153798895edbSChuck Lever TP_PROTO( 1538007140eeSChuck Lever const struct svc_rdma_recv_ctxt *ctxt, 153998895edbSChuck Lever __be32 *p, 154098895edbSChuck Lever unsigned int hdrlen 154198895edbSChuck Lever ), 154298895edbSChuck Lever 1543007140eeSChuck Lever TP_ARGS(ctxt, p, hdrlen), 154498895edbSChuck Lever 154598895edbSChuck Lever TP_STRUCT__entry( 1546007140eeSChuck Lever __field(u32, cq_id) 1547007140eeSChuck Lever __field(int, completion_id) 154898895edbSChuck Lever __field(u32, xid) 154998895edbSChuck Lever __field(u32, vers) 155098895edbSChuck Lever __field(u32, proc) 155198895edbSChuck Lever __field(u32, credits) 155298895edbSChuck Lever __field(unsigned int, hdrlen) 155398895edbSChuck Lever ), 155498895edbSChuck Lever 155598895edbSChuck Lever TP_fast_assign( 1556007140eeSChuck Lever __entry->cq_id = ctxt->rc_cid.ci_queue_id; 1557007140eeSChuck Lever __entry->completion_id = ctxt->rc_cid.ci_completion_id; 155898895edbSChuck Lever __entry->xid = be32_to_cpup(p++); 155998895edbSChuck Lever __entry->vers = be32_to_cpup(p++); 156098895edbSChuck Lever __entry->credits = be32_to_cpup(p++); 156198895edbSChuck Lever __entry->proc = be32_to_cpup(p); 156298895edbSChuck Lever __entry->hdrlen = hdrlen; 156398895edbSChuck Lever ), 156498895edbSChuck Lever 1565007140eeSChuck Lever TP_printk("cq.id=%u cid=%d xid=0x%08x vers=%u credits=%u proc=%s hdrlen=%u", 1566007140eeSChuck Lever __entry->cq_id, __entry->completion_id, 156798895edbSChuck Lever __entry->xid, __entry->vers, __entry->credits, 156898895edbSChuck Lever show_rpcrdma_proc(__entry->proc), __entry->hdrlen) 156998895edbSChuck Lever ); 157098895edbSChuck Lever 157127ce6294SChuck Lever TRACE_EVENT(svcrdma_decode_short_err, 157298895edbSChuck Lever TP_PROTO( 1573007140eeSChuck Lever const struct svc_rdma_recv_ctxt *ctxt, 157498895edbSChuck Lever unsigned int hdrlen 157598895edbSChuck Lever ), 157698895edbSChuck Lever 1577007140eeSChuck Lever TP_ARGS(ctxt, hdrlen), 157898895edbSChuck Lever 157998895edbSChuck Lever TP_STRUCT__entry( 1580007140eeSChuck Lever __field(u32, cq_id) 1581007140eeSChuck Lever __field(int, completion_id) 158298895edbSChuck Lever __field(unsigned int, hdrlen) 158398895edbSChuck Lever ), 158498895edbSChuck Lever 158598895edbSChuck Lever TP_fast_assign( 1586007140eeSChuck Lever __entry->cq_id = ctxt->rc_cid.ci_queue_id; 1587007140eeSChuck Lever __entry->completion_id = ctxt->rc_cid.ci_completion_id; 158898895edbSChuck Lever __entry->hdrlen = hdrlen; 158998895edbSChuck Lever ), 159098895edbSChuck Lever 1591007140eeSChuck Lever TP_printk("cq.id=%u cid=%d hdrlen=%u", 1592007140eeSChuck Lever __entry->cq_id, __entry->completion_id, 1593007140eeSChuck Lever __entry->hdrlen) 159498895edbSChuck Lever ); 159598895edbSChuck Lever 159698895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_badreq_event, 159798895edbSChuck Lever TP_PROTO( 1598007140eeSChuck Lever const struct svc_rdma_recv_ctxt *ctxt, 159998895edbSChuck Lever __be32 *p 160098895edbSChuck Lever ), 160198895edbSChuck Lever 1602007140eeSChuck Lever TP_ARGS(ctxt, p), 160398895edbSChuck Lever 160498895edbSChuck Lever TP_STRUCT__entry( 1605007140eeSChuck Lever __field(u32, cq_id) 1606007140eeSChuck Lever __field(int, completion_id) 160798895edbSChuck Lever __field(u32, xid) 160898895edbSChuck Lever __field(u32, vers) 160998895edbSChuck Lever __field(u32, proc) 161098895edbSChuck Lever __field(u32, credits) 161198895edbSChuck Lever ), 161298895edbSChuck Lever 161398895edbSChuck Lever TP_fast_assign( 1614007140eeSChuck Lever __entry->cq_id = ctxt->rc_cid.ci_queue_id; 1615007140eeSChuck Lever __entry->completion_id = ctxt->rc_cid.ci_completion_id; 161698895edbSChuck Lever __entry->xid = be32_to_cpup(p++); 161798895edbSChuck Lever __entry->vers = be32_to_cpup(p++); 161898895edbSChuck Lever __entry->credits = be32_to_cpup(p++); 161998895edbSChuck Lever __entry->proc = be32_to_cpup(p); 162098895edbSChuck Lever ), 162198895edbSChuck Lever 1622007140eeSChuck Lever TP_printk("cq.id=%u cid=%d xid=0x%08x vers=%u credits=%u proc=%u", 1623007140eeSChuck Lever __entry->cq_id, __entry->completion_id, 162498895edbSChuck Lever __entry->xid, __entry->vers, __entry->credits, __entry->proc) 162598895edbSChuck Lever ); 162698895edbSChuck Lever 162798895edbSChuck Lever #define DEFINE_BADREQ_EVENT(name) \ 162827ce6294SChuck Lever DEFINE_EVENT(svcrdma_badreq_event, \ 162927ce6294SChuck Lever svcrdma_decode_##name##_err, \ 163098895edbSChuck Lever TP_PROTO( \ 1631007140eeSChuck Lever const struct svc_rdma_recv_ctxt *ctxt, \ 163298895edbSChuck Lever __be32 *p \ 163398895edbSChuck Lever ), \ 1634007140eeSChuck Lever TP_ARGS(ctxt, p)) 163598895edbSChuck Lever 163698895edbSChuck Lever DEFINE_BADREQ_EVENT(badvers); 163798895edbSChuck Lever DEFINE_BADREQ_EVENT(drop); 163898895edbSChuck Lever DEFINE_BADREQ_EVENT(badproc); 163998895edbSChuck Lever DEFINE_BADREQ_EVENT(parse); 164098895edbSChuck Lever 16416911f3e1SChuck Lever TRACE_EVENT(svcrdma_encode_wseg, 16426911f3e1SChuck Lever TP_PROTO( 16436911f3e1SChuck Lever const struct svc_rdma_send_ctxt *ctxt, 16446911f3e1SChuck Lever u32 segno, 16456911f3e1SChuck Lever u32 handle, 16466911f3e1SChuck Lever u32 length, 16476911f3e1SChuck Lever u64 offset 16486911f3e1SChuck Lever ), 16496911f3e1SChuck Lever 16506911f3e1SChuck Lever TP_ARGS(ctxt, segno, handle, length, offset), 16516911f3e1SChuck Lever 16526911f3e1SChuck Lever TP_STRUCT__entry( 16536911f3e1SChuck Lever __field(u32, cq_id) 16546911f3e1SChuck Lever __field(int, completion_id) 16556911f3e1SChuck Lever __field(u32, segno) 16566911f3e1SChuck Lever __field(u32, handle) 16576911f3e1SChuck Lever __field(u32, length) 16586911f3e1SChuck Lever __field(u64, offset) 16596911f3e1SChuck Lever ), 16606911f3e1SChuck Lever 16616911f3e1SChuck Lever TP_fast_assign( 16626911f3e1SChuck Lever __entry->cq_id = ctxt->sc_cid.ci_queue_id; 16636911f3e1SChuck Lever __entry->completion_id = ctxt->sc_cid.ci_completion_id; 16646911f3e1SChuck Lever __entry->segno = segno; 16656911f3e1SChuck Lever __entry->handle = handle; 16666911f3e1SChuck Lever __entry->length = length; 16676911f3e1SChuck Lever __entry->offset = offset; 16686911f3e1SChuck Lever ), 16696911f3e1SChuck Lever 16706911f3e1SChuck Lever TP_printk("cq_id=%u cid=%d segno=%u %u@0x%016llx:0x%08x", 16716911f3e1SChuck Lever __entry->cq_id, __entry->completion_id, 16726911f3e1SChuck Lever __entry->segno, __entry->length, 16736911f3e1SChuck Lever (unsigned long long)__entry->offset, __entry->handle 16746911f3e1SChuck Lever ) 16756911f3e1SChuck Lever ); 16766911f3e1SChuck Lever 167778147ca8SChuck Lever TRACE_EVENT(svcrdma_decode_rseg, 167878147ca8SChuck Lever TP_PROTO( 167978147ca8SChuck Lever const struct rpc_rdma_cid *cid, 168078147ca8SChuck Lever const struct svc_rdma_chunk *chunk, 168178147ca8SChuck Lever const struct svc_rdma_segment *segment 168278147ca8SChuck Lever ), 168378147ca8SChuck Lever 168478147ca8SChuck Lever TP_ARGS(cid, chunk, segment), 168578147ca8SChuck Lever 168678147ca8SChuck Lever TP_STRUCT__entry( 168778147ca8SChuck Lever __field(u32, cq_id) 168878147ca8SChuck Lever __field(int, completion_id) 168978147ca8SChuck Lever __field(u32, segno) 169078147ca8SChuck Lever __field(u32, position) 169178147ca8SChuck Lever __field(u32, handle) 169278147ca8SChuck Lever __field(u32, length) 169378147ca8SChuck Lever __field(u64, offset) 169478147ca8SChuck Lever ), 169578147ca8SChuck Lever 169678147ca8SChuck Lever TP_fast_assign( 169778147ca8SChuck Lever __entry->cq_id = cid->ci_queue_id; 169878147ca8SChuck Lever __entry->completion_id = cid->ci_completion_id; 169978147ca8SChuck Lever __entry->segno = chunk->ch_segcount; 170078147ca8SChuck Lever __entry->position = chunk->ch_position; 170178147ca8SChuck Lever __entry->handle = segment->rs_handle; 170278147ca8SChuck Lever __entry->length = segment->rs_length; 170378147ca8SChuck Lever __entry->offset = segment->rs_offset; 170478147ca8SChuck Lever ), 170578147ca8SChuck Lever 170678147ca8SChuck Lever TP_printk("cq_id=%u cid=%d segno=%u position=%u %u@0x%016llx:0x%08x", 170778147ca8SChuck Lever __entry->cq_id, __entry->completion_id, 170878147ca8SChuck Lever __entry->segno, __entry->position, __entry->length, 170978147ca8SChuck Lever (unsigned long long)__entry->offset, __entry->handle 171078147ca8SChuck Lever ) 171178147ca8SChuck Lever ); 171278147ca8SChuck Lever 171378147ca8SChuck Lever TRACE_EVENT(svcrdma_decode_wseg, 171478147ca8SChuck Lever TP_PROTO( 171578147ca8SChuck Lever const struct rpc_rdma_cid *cid, 171678147ca8SChuck Lever const struct svc_rdma_chunk *chunk, 171778147ca8SChuck Lever u32 segno 171878147ca8SChuck Lever ), 171978147ca8SChuck Lever 172078147ca8SChuck Lever TP_ARGS(cid, chunk, segno), 172178147ca8SChuck Lever 172278147ca8SChuck Lever TP_STRUCT__entry( 172378147ca8SChuck Lever __field(u32, cq_id) 172478147ca8SChuck Lever __field(int, completion_id) 172578147ca8SChuck Lever __field(u32, segno) 172678147ca8SChuck Lever __field(u32, handle) 172778147ca8SChuck Lever __field(u32, length) 172878147ca8SChuck Lever __field(u64, offset) 172978147ca8SChuck Lever ), 173078147ca8SChuck Lever 173178147ca8SChuck Lever TP_fast_assign( 173278147ca8SChuck Lever const struct svc_rdma_segment *segment = 173378147ca8SChuck Lever &chunk->ch_segments[segno]; 173478147ca8SChuck Lever 173578147ca8SChuck Lever __entry->cq_id = cid->ci_queue_id; 173678147ca8SChuck Lever __entry->completion_id = cid->ci_completion_id; 173778147ca8SChuck Lever __entry->segno = segno; 173878147ca8SChuck Lever __entry->handle = segment->rs_handle; 173978147ca8SChuck Lever __entry->length = segment->rs_length; 174078147ca8SChuck Lever __entry->offset = segment->rs_offset; 174178147ca8SChuck Lever ), 174278147ca8SChuck Lever 174378147ca8SChuck Lever TP_printk("cq_id=%u cid=%d segno=%u %u@0x%016llx:0x%08x", 174478147ca8SChuck Lever __entry->cq_id, __entry->completion_id, 174578147ca8SChuck Lever __entry->segno, __entry->length, 174678147ca8SChuck Lever (unsigned long long)__entry->offset, __entry->handle 174778147ca8SChuck Lever ) 174878147ca8SChuck Lever ); 174978147ca8SChuck Lever 175098895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_error_event, 175198895edbSChuck Lever TP_PROTO( 175298895edbSChuck Lever __be32 xid 175398895edbSChuck Lever ), 175498895edbSChuck Lever 175598895edbSChuck Lever TP_ARGS(xid), 175698895edbSChuck Lever 175798895edbSChuck Lever TP_STRUCT__entry( 175898895edbSChuck Lever __field(u32, xid) 175998895edbSChuck Lever ), 176098895edbSChuck Lever 176198895edbSChuck Lever TP_fast_assign( 176298895edbSChuck Lever __entry->xid = be32_to_cpu(xid); 176398895edbSChuck Lever ), 176498895edbSChuck Lever 176598895edbSChuck Lever TP_printk("xid=0x%08x", 176698895edbSChuck Lever __entry->xid 176798895edbSChuck Lever ) 176898895edbSChuck Lever ); 176998895edbSChuck Lever 177098895edbSChuck Lever #define DEFINE_ERROR_EVENT(name) \ 177198895edbSChuck Lever DEFINE_EVENT(svcrdma_error_event, svcrdma_err_##name, \ 177298895edbSChuck Lever TP_PROTO( \ 177398895edbSChuck Lever __be32 xid \ 177498895edbSChuck Lever ), \ 177598895edbSChuck Lever TP_ARGS(xid)) 177698895edbSChuck Lever 177798895edbSChuck Lever DEFINE_ERROR_EVENT(vers); 177898895edbSChuck Lever DEFINE_ERROR_EVENT(chunk); 177998895edbSChuck Lever 1780bd2abef3SChuck Lever /** 1781bd2abef3SChuck Lever ** Server-side RDMA API events 1782bd2abef3SChuck Lever **/ 1783bd2abef3SChuck Lever 1784832b2cb9SChuck Lever DECLARE_EVENT_CLASS(svcrdma_dma_map_class, 1785bd2abef3SChuck Lever TP_PROTO( 1786bd2abef3SChuck Lever const struct svcxprt_rdma *rdma, 1787832b2cb9SChuck Lever u64 dma_addr, 1788832b2cb9SChuck Lever u32 length 1789bd2abef3SChuck Lever ), 1790bd2abef3SChuck Lever 1791832b2cb9SChuck Lever TP_ARGS(rdma, dma_addr, length), 1792bd2abef3SChuck Lever 1793bd2abef3SChuck Lever TP_STRUCT__entry( 1794832b2cb9SChuck Lever __field(u64, dma_addr) 1795832b2cb9SChuck Lever __field(u32, length) 1796bd2abef3SChuck Lever __string(device, rdma->sc_cm_id->device->name) 1797bd2abef3SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1798bd2abef3SChuck Lever ), 1799bd2abef3SChuck Lever 1800bd2abef3SChuck Lever TP_fast_assign( 1801832b2cb9SChuck Lever __entry->dma_addr = dma_addr; 1802832b2cb9SChuck Lever __entry->length = length; 1803bd2abef3SChuck Lever __assign_str(device, rdma->sc_cm_id->device->name); 1804bd2abef3SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1805bd2abef3SChuck Lever ), 1806bd2abef3SChuck Lever 1807832b2cb9SChuck Lever TP_printk("addr=%s device=%s dma_addr=%llu length=%u", 1808832b2cb9SChuck Lever __get_str(addr), __get_str(device), 1809832b2cb9SChuck Lever __entry->dma_addr, __entry->length 1810bd2abef3SChuck Lever ) 1811bd2abef3SChuck Lever ); 1812bd2abef3SChuck Lever 1813832b2cb9SChuck Lever #define DEFINE_SVC_DMA_EVENT(name) \ 1814832b2cb9SChuck Lever DEFINE_EVENT(svcrdma_dma_map_class, svcrdma_##name, \ 1815832b2cb9SChuck Lever TP_PROTO( \ 1816832b2cb9SChuck Lever const struct svcxprt_rdma *rdma,\ 1817832b2cb9SChuck Lever u64 dma_addr, \ 1818832b2cb9SChuck Lever u32 length \ 1819832b2cb9SChuck Lever ), \ 1820832b2cb9SChuck Lever TP_ARGS(rdma, dma_addr, length)) 1821832b2cb9SChuck Lever 1822832b2cb9SChuck Lever DEFINE_SVC_DMA_EVENT(dma_map_page); 18232371bcc0SChuck Lever DEFINE_SVC_DMA_EVENT(dma_map_err); 1824832b2cb9SChuck Lever DEFINE_SVC_DMA_EVENT(dma_unmap_page); 1825832b2cb9SChuck Lever 18262abfbe7eSChuck Lever TRACE_EVENT(svcrdma_dma_map_rw_err, 1827bd2abef3SChuck Lever TP_PROTO( 1828bd2abef3SChuck Lever const struct svcxprt_rdma *rdma, 18292abfbe7eSChuck Lever unsigned int nents, 1830bd2abef3SChuck Lever int status 1831bd2abef3SChuck Lever ), 1832bd2abef3SChuck Lever 18332abfbe7eSChuck Lever TP_ARGS(rdma, nents, status), 1834bd2abef3SChuck Lever 1835bd2abef3SChuck Lever TP_STRUCT__entry( 1836bd2abef3SChuck Lever __field(int, status) 18372abfbe7eSChuck Lever __field(unsigned int, nents) 1838bd2abef3SChuck Lever __string(device, rdma->sc_cm_id->device->name) 1839bd2abef3SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1840bd2abef3SChuck Lever ), 1841bd2abef3SChuck Lever 1842bd2abef3SChuck Lever TP_fast_assign( 1843bd2abef3SChuck Lever __entry->status = status; 18442abfbe7eSChuck Lever __entry->nents = nents; 1845bd2abef3SChuck Lever __assign_str(device, rdma->sc_cm_id->device->name); 1846bd2abef3SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1847bd2abef3SChuck Lever ), 1848bd2abef3SChuck Lever 18492abfbe7eSChuck Lever TP_printk("addr=%s device=%s nents=%u status=%d", 18502abfbe7eSChuck Lever __get_str(addr), __get_str(device), __entry->nents, 18512abfbe7eSChuck Lever __entry->status 1852bd2abef3SChuck Lever ) 1853bd2abef3SChuck Lever ); 1854bd2abef3SChuck Lever 1855f4e53e1cSChuck Lever TRACE_EVENT(svcrdma_no_rwctx_err, 1856f4e53e1cSChuck Lever TP_PROTO( 1857f4e53e1cSChuck Lever const struct svcxprt_rdma *rdma, 1858f4e53e1cSChuck Lever unsigned int num_sges 1859f4e53e1cSChuck Lever ), 1860f4e53e1cSChuck Lever 1861f4e53e1cSChuck Lever TP_ARGS(rdma, num_sges), 1862f4e53e1cSChuck Lever 1863f4e53e1cSChuck Lever TP_STRUCT__entry( 1864f4e53e1cSChuck Lever __field(unsigned int, num_sges) 1865f4e53e1cSChuck Lever __string(device, rdma->sc_cm_id->device->name) 1866f4e53e1cSChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1867f4e53e1cSChuck Lever ), 1868f4e53e1cSChuck Lever 1869f4e53e1cSChuck Lever TP_fast_assign( 1870f4e53e1cSChuck Lever __entry->num_sges = num_sges; 1871f4e53e1cSChuck Lever __assign_str(device, rdma->sc_cm_id->device->name); 1872f4e53e1cSChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1873f4e53e1cSChuck Lever ), 1874f4e53e1cSChuck Lever 1875f4e53e1cSChuck Lever TP_printk("addr=%s device=%s num_sges=%d", 1876f4e53e1cSChuck Lever __get_str(addr), __get_str(device), __entry->num_sges 1877f4e53e1cSChuck Lever ) 1878f4e53e1cSChuck Lever ); 1879f4e53e1cSChuck Lever 18809d200638SChuck Lever TRACE_EVENT(svcrdma_page_overrun_err, 18819d200638SChuck Lever TP_PROTO( 18829d200638SChuck Lever const struct svcxprt_rdma *rdma, 18839d200638SChuck Lever const struct svc_rqst *rqst, 18849d200638SChuck Lever unsigned int pageno 18859d200638SChuck Lever ), 18869d200638SChuck Lever 18879d200638SChuck Lever TP_ARGS(rdma, rqst, pageno), 18889d200638SChuck Lever 18899d200638SChuck Lever TP_STRUCT__entry( 18909d200638SChuck Lever __field(unsigned int, pageno) 18919d200638SChuck Lever __field(u32, xid) 18929d200638SChuck Lever __string(device, rdma->sc_cm_id->device->name) 18939d200638SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 18949d200638SChuck Lever ), 18959d200638SChuck Lever 18969d200638SChuck Lever TP_fast_assign( 18979d200638SChuck Lever __entry->pageno = pageno; 18989d200638SChuck Lever __entry->xid = __be32_to_cpu(rqst->rq_xid); 18999d200638SChuck Lever __assign_str(device, rdma->sc_cm_id->device->name); 19009d200638SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 19019d200638SChuck Lever ), 19029d200638SChuck Lever 19039d200638SChuck Lever TP_printk("addr=%s device=%s xid=0x%08x pageno=%u", __get_str(addr), 19049d200638SChuck Lever __get_str(device), __entry->xid, __entry->pageno 19059d200638SChuck Lever ) 19069d200638SChuck Lever ); 19079d200638SChuck Lever 1908dbc17acdSChuck Lever TRACE_EVENT(svcrdma_small_wrch_err, 1909dbc17acdSChuck Lever TP_PROTO( 1910dbc17acdSChuck Lever const struct svcxprt_rdma *rdma, 1911dbc17acdSChuck Lever unsigned int remaining, 1912dbc17acdSChuck Lever unsigned int seg_no, 1913dbc17acdSChuck Lever unsigned int num_segs 1914dbc17acdSChuck Lever ), 1915dbc17acdSChuck Lever 1916dbc17acdSChuck Lever TP_ARGS(rdma, remaining, seg_no, num_segs), 1917dbc17acdSChuck Lever 1918dbc17acdSChuck Lever TP_STRUCT__entry( 1919dbc17acdSChuck Lever __field(unsigned int, remaining) 1920dbc17acdSChuck Lever __field(unsigned int, seg_no) 1921dbc17acdSChuck Lever __field(unsigned int, num_segs) 1922dbc17acdSChuck Lever __string(device, rdma->sc_cm_id->device->name) 1923dbc17acdSChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1924dbc17acdSChuck Lever ), 1925dbc17acdSChuck Lever 1926dbc17acdSChuck Lever TP_fast_assign( 1927dbc17acdSChuck Lever __entry->remaining = remaining; 1928dbc17acdSChuck Lever __entry->seg_no = seg_no; 1929dbc17acdSChuck Lever __entry->num_segs = num_segs; 1930dbc17acdSChuck Lever __assign_str(device, rdma->sc_cm_id->device->name); 1931dbc17acdSChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1932dbc17acdSChuck Lever ), 1933dbc17acdSChuck Lever 1934dbc17acdSChuck Lever TP_printk("addr=%s device=%s remaining=%u seg_no=%u num_segs=%u", 1935dbc17acdSChuck Lever __get_str(addr), __get_str(device), __entry->remaining, 1936dbc17acdSChuck Lever __entry->seg_no, __entry->num_segs 1937dbc17acdSChuck Lever ) 1938dbc17acdSChuck Lever ); 1939dbc17acdSChuck Lever 19400dabe948SChuck Lever TRACE_EVENT(svcrdma_send_pullup, 19410dabe948SChuck Lever TP_PROTO( 19429d0b09d5SChuck Lever const struct svc_rdma_send_ctxt *ctxt, 19439d0b09d5SChuck Lever unsigned int msglen 19440dabe948SChuck Lever ), 19450dabe948SChuck Lever 19469d0b09d5SChuck Lever TP_ARGS(ctxt, msglen), 19470dabe948SChuck Lever 19480dabe948SChuck Lever TP_STRUCT__entry( 19499d0b09d5SChuck Lever __field(u32, cq_id) 19509d0b09d5SChuck Lever __field(int, completion_id) 19519d0b09d5SChuck Lever __field(unsigned int, hdrlen) 19529d0b09d5SChuck Lever __field(unsigned int, msglen) 19530dabe948SChuck Lever ), 19540dabe948SChuck Lever 19550dabe948SChuck Lever TP_fast_assign( 19569d0b09d5SChuck Lever __entry->cq_id = ctxt->sc_cid.ci_queue_id; 19579d0b09d5SChuck Lever __entry->completion_id = ctxt->sc_cid.ci_completion_id; 19589d0b09d5SChuck Lever __entry->hdrlen = ctxt->sc_hdrbuf.len, 19599d0b09d5SChuck Lever __entry->msglen = msglen; 19600dabe948SChuck Lever ), 19610dabe948SChuck Lever 19629d0b09d5SChuck Lever TP_printk("cq_id=%u cid=%d hdr=%u msg=%u (total %u)", 19639d0b09d5SChuck Lever __entry->cq_id, __entry->completion_id, 19649d0b09d5SChuck Lever __entry->hdrlen, __entry->msglen, 19659d0b09d5SChuck Lever __entry->hdrlen + __entry->msglen) 19660dabe948SChuck Lever ); 19670dabe948SChuck Lever 19683f8f25c6SChuck Lever TRACE_EVENT(svcrdma_send_err, 1969bd2abef3SChuck Lever TP_PROTO( 1970bd2abef3SChuck Lever const struct svc_rqst *rqst, 1971bd2abef3SChuck Lever int status 1972bd2abef3SChuck Lever ), 1973bd2abef3SChuck Lever 1974bd2abef3SChuck Lever TP_ARGS(rqst, status), 1975bd2abef3SChuck Lever 1976bd2abef3SChuck Lever TP_STRUCT__entry( 1977bd2abef3SChuck Lever __field(int, status) 1978bd2abef3SChuck Lever __field(u32, xid) 1979bd2abef3SChuck Lever __string(addr, rqst->rq_xprt->xpt_remotebuf) 1980bd2abef3SChuck Lever ), 1981bd2abef3SChuck Lever 1982bd2abef3SChuck Lever TP_fast_assign( 1983bd2abef3SChuck Lever __entry->status = status; 1984bd2abef3SChuck Lever __entry->xid = __be32_to_cpu(rqst->rq_xid); 1985bd2abef3SChuck Lever __assign_str(addr, rqst->rq_xprt->xpt_remotebuf); 1986bd2abef3SChuck Lever ), 1987bd2abef3SChuck Lever 19883f8f25c6SChuck Lever TP_printk("addr=%s xid=0x%08x status=%d", __get_str(addr), 1989bd2abef3SChuck Lever __entry->xid, __entry->status 1990bd2abef3SChuck Lever ) 1991bd2abef3SChuck Lever ); 1992bd2abef3SChuck Lever 1993bd2abef3SChuck Lever TRACE_EVENT(svcrdma_post_send, 1994bd2abef3SChuck Lever TP_PROTO( 199517f70f8dSChuck Lever const struct svc_rdma_send_ctxt *ctxt 1996bd2abef3SChuck Lever ), 1997bd2abef3SChuck Lever 199817f70f8dSChuck Lever TP_ARGS(ctxt), 1999bd2abef3SChuck Lever 2000bd2abef3SChuck Lever TP_STRUCT__entry( 200117f70f8dSChuck Lever __field(u32, cq_id) 200217f70f8dSChuck Lever __field(int, completion_id) 2003bd2abef3SChuck Lever __field(unsigned int, num_sge) 2004bd2abef3SChuck Lever __field(u32, inv_rkey) 2005bd2abef3SChuck Lever ), 2006bd2abef3SChuck Lever 2007bd2abef3SChuck Lever TP_fast_assign( 200817f70f8dSChuck Lever const struct ib_send_wr *wr = &ctxt->sc_send_wr; 200917f70f8dSChuck Lever 201017f70f8dSChuck Lever __entry->cq_id = ctxt->sc_cid.ci_queue_id; 201117f70f8dSChuck Lever __entry->completion_id = ctxt->sc_cid.ci_completion_id; 2012bd2abef3SChuck Lever __entry->num_sge = wr->num_sge; 2013bd2abef3SChuck Lever __entry->inv_rkey = (wr->opcode == IB_WR_SEND_WITH_INV) ? 2014bd2abef3SChuck Lever wr->ex.invalidate_rkey : 0; 2015bd2abef3SChuck Lever ), 2016bd2abef3SChuck Lever 201717f70f8dSChuck Lever TP_printk("cq_id=%u cid=%d num_sge=%u inv_rkey=0x%08x", 201817f70f8dSChuck Lever __entry->cq_id, __entry->completion_id, 201917f70f8dSChuck Lever __entry->num_sge, __entry->inv_rkey 2020bd2abef3SChuck Lever ) 2021bd2abef3SChuck Lever ); 2022bd2abef3SChuck Lever 2023eef2d8d4SChuck Lever DEFINE_SEND_COMPLETION_EVENT(svcrdma_wc_send); 2024eef2d8d4SChuck Lever DEFINE_SEND_FLUSH_EVENT(svcrdma_wc_send_flush); 2025eef2d8d4SChuck Lever DEFINE_SEND_FLUSH_EVENT(svcrdma_wc_send_err); 2026bd2abef3SChuck Lever 2027bd2abef3SChuck Lever TRACE_EVENT(svcrdma_post_recv, 2028bd2abef3SChuck Lever TP_PROTO( 20299b3bcf8cSChuck Lever const struct svc_rdma_recv_ctxt *ctxt 2030bd2abef3SChuck Lever ), 2031bd2abef3SChuck Lever 20329b3bcf8cSChuck Lever TP_ARGS(ctxt), 2033bd2abef3SChuck Lever 2034bd2abef3SChuck Lever TP_STRUCT__entry( 20359b3bcf8cSChuck Lever __field(u32, cq_id) 20369b3bcf8cSChuck Lever __field(int, completion_id) 2037bd2abef3SChuck Lever ), 2038bd2abef3SChuck Lever 2039bd2abef3SChuck Lever TP_fast_assign( 20409b3bcf8cSChuck Lever __entry->cq_id = ctxt->rc_cid.ci_queue_id; 20419b3bcf8cSChuck Lever __entry->completion_id = ctxt->rc_cid.ci_completion_id; 2042bd2abef3SChuck Lever ), 2043bd2abef3SChuck Lever 20449b3bcf8cSChuck Lever TP_printk("cq.id=%d cid=%d", 20459b3bcf8cSChuck Lever __entry->cq_id, __entry->completion_id 2046bd2abef3SChuck Lever ) 2047bd2abef3SChuck Lever ); 2048bd2abef3SChuck Lever 20498dcc5721SChuck Lever DEFINE_RECEIVE_SUCCESS_EVENT(svcrdma_wc_recv); 20508dcc5721SChuck Lever DEFINE_RECEIVE_FLUSH_EVENT(svcrdma_wc_recv_flush); 20518dcc5721SChuck Lever DEFINE_RECEIVE_FLUSH_EVENT(svcrdma_wc_recv_err); 20529b3bcf8cSChuck Lever 20539b3bcf8cSChuck Lever TRACE_EVENT(svcrdma_rq_post_err, 2054bd2abef3SChuck Lever TP_PROTO( 20559b3bcf8cSChuck Lever const struct svcxprt_rdma *rdma, 20569b3bcf8cSChuck Lever int status 2057bd2abef3SChuck Lever ), 2058bd2abef3SChuck Lever 20599b3bcf8cSChuck Lever TP_ARGS(rdma, status), 2060bd2abef3SChuck Lever 2061bd2abef3SChuck Lever TP_STRUCT__entry( 20629b3bcf8cSChuck Lever __field(int, status) 20639b3bcf8cSChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 2064bd2abef3SChuck Lever ), 2065bd2abef3SChuck Lever 2066bd2abef3SChuck Lever TP_fast_assign( 20679b3bcf8cSChuck Lever __entry->status = status; 20689b3bcf8cSChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 2069bd2abef3SChuck Lever ), 2070bd2abef3SChuck Lever 20719b3bcf8cSChuck Lever TP_printk("addr=%s status=%d", 20729b3bcf8cSChuck Lever __get_str(addr), __entry->status 2073bd2abef3SChuck Lever ) 2074bd2abef3SChuck Lever ); 2075bd2abef3SChuck Lever 2076b704be09SChuck Lever DECLARE_EVENT_CLASS(svcrdma_post_chunk_class, 2077bd2abef3SChuck Lever TP_PROTO( 20786787f0beSChuck Lever const struct rpc_rdma_cid *cid, 2079e28b4fc6SChuck Lever int sqecount 2080bd2abef3SChuck Lever ), 2081bd2abef3SChuck Lever 20826787f0beSChuck Lever TP_ARGS(cid, sqecount), 2083bd2abef3SChuck Lever 2084bd2abef3SChuck Lever TP_STRUCT__entry( 20856787f0beSChuck Lever __field(u32, cq_id) 20866787f0beSChuck Lever __field(int, completion_id) 2087bd2abef3SChuck Lever __field(int, sqecount) 2088bd2abef3SChuck Lever ), 2089bd2abef3SChuck Lever 2090bd2abef3SChuck Lever TP_fast_assign( 20916787f0beSChuck Lever __entry->cq_id = cid->ci_queue_id; 20926787f0beSChuck Lever __entry->completion_id = cid->ci_completion_id; 2093bd2abef3SChuck Lever __entry->sqecount = sqecount; 2094bd2abef3SChuck Lever ), 2095bd2abef3SChuck Lever 20966787f0beSChuck Lever TP_printk("cq.id=%u cid=%d sqecount=%d", 20976787f0beSChuck Lever __entry->cq_id, __entry->completion_id, 20986787f0beSChuck Lever __entry->sqecount 2099bd2abef3SChuck Lever ) 2100bd2abef3SChuck Lever ); 2101bd2abef3SChuck Lever 2102b704be09SChuck Lever #define DEFINE_POST_CHUNK_EVENT(name) \ 2103b704be09SChuck Lever DEFINE_EVENT(svcrdma_post_chunk_class, \ 2104b704be09SChuck Lever svcrdma_post_##name##_chunk, \ 2105b704be09SChuck Lever TP_PROTO( \ 2106b704be09SChuck Lever const struct rpc_rdma_cid *cid, \ 2107b704be09SChuck Lever int sqecount \ 2108b704be09SChuck Lever ), \ 2109b704be09SChuck Lever TP_ARGS(cid, sqecount)) 2110b704be09SChuck Lever 2111b704be09SChuck Lever DEFINE_POST_CHUNK_EVENT(read); 2112b704be09SChuck Lever DEFINE_POST_CHUNK_EVENT(write); 2113b704be09SChuck Lever DEFINE_POST_CHUNK_EVENT(reply); 2114b704be09SChuck Lever 211545f13584SChuck Lever TRACE_EVENT(svcrdma_wc_read, 211645f13584SChuck Lever TP_PROTO( 211745f13584SChuck Lever const struct ib_wc *wc, 211845f13584SChuck Lever const struct rpc_rdma_cid *cid, 211945f13584SChuck Lever unsigned int totalbytes, 212045f13584SChuck Lever const ktime_t posttime 212145f13584SChuck Lever ), 212245f13584SChuck Lever 212345f13584SChuck Lever TP_ARGS(wc, cid, totalbytes, posttime), 212445f13584SChuck Lever 212545f13584SChuck Lever TP_STRUCT__entry( 212645f13584SChuck Lever __field(u32, cq_id) 212745f13584SChuck Lever __field(int, completion_id) 212845f13584SChuck Lever __field(s64, read_latency) 212945f13584SChuck Lever __field(unsigned int, totalbytes) 213045f13584SChuck Lever ), 213145f13584SChuck Lever 213245f13584SChuck Lever TP_fast_assign( 213345f13584SChuck Lever __entry->cq_id = cid->ci_queue_id; 213445f13584SChuck Lever __entry->completion_id = cid->ci_completion_id; 213545f13584SChuck Lever __entry->totalbytes = totalbytes; 213645f13584SChuck Lever __entry->read_latency = ktime_us_delta(ktime_get(), posttime); 213745f13584SChuck Lever ), 213845f13584SChuck Lever 213945f13584SChuck Lever TP_printk("cq.id=%u cid=%d totalbytes=%u latency-us=%lld", 214045f13584SChuck Lever __entry->cq_id, __entry->completion_id, 214145f13584SChuck Lever __entry->totalbytes, __entry->read_latency 214245f13584SChuck Lever ) 214345f13584SChuck Lever ); 214445f13584SChuck Lever 214545f13584SChuck Lever DEFINE_SEND_FLUSH_EVENT(svcrdma_wc_read_flush); 214645f13584SChuck Lever DEFINE_SEND_FLUSH_EVENT(svcrdma_wc_read_err); 214745f13584SChuck Lever 214845f13584SChuck Lever DEFINE_SEND_COMPLETION_EVENT(svcrdma_wc_write); 214945f13584SChuck Lever DEFINE_SEND_FLUSH_EVENT(svcrdma_wc_write_flush); 215045f13584SChuck Lever DEFINE_SEND_FLUSH_EVENT(svcrdma_wc_write_err); 2151bd2abef3SChuck Lever 2152bd2abef3SChuck Lever TRACE_EVENT(svcrdma_qp_error, 2153bd2abef3SChuck Lever TP_PROTO( 2154bd2abef3SChuck Lever const struct ib_event *event, 2155bd2abef3SChuck Lever const struct sockaddr *sap 2156bd2abef3SChuck Lever ), 2157bd2abef3SChuck Lever 2158bd2abef3SChuck Lever TP_ARGS(event, sap), 2159bd2abef3SChuck Lever 2160bd2abef3SChuck Lever TP_STRUCT__entry( 2161bd2abef3SChuck Lever __field(unsigned int, event) 2162bd2abef3SChuck Lever __string(device, event->device->name) 2163bd2abef3SChuck Lever __array(__u8, addr, INET6_ADDRSTRLEN + 10) 2164bd2abef3SChuck Lever ), 2165bd2abef3SChuck Lever 2166bd2abef3SChuck Lever TP_fast_assign( 2167bd2abef3SChuck Lever __entry->event = event->event; 2168bd2abef3SChuck Lever __assign_str(device, event->device->name); 2169bd2abef3SChuck Lever snprintf(__entry->addr, sizeof(__entry->addr) - 1, 2170bd2abef3SChuck Lever "%pISpc", sap); 2171bd2abef3SChuck Lever ), 2172bd2abef3SChuck Lever 2173bd2abef3SChuck Lever TP_printk("addr=%s dev=%s event=%s (%u)", 2174bd2abef3SChuck Lever __entry->addr, __get_str(device), 2175bd2abef3SChuck Lever rdma_show_ib_event(__entry->event), __entry->event 2176bd2abef3SChuck Lever ) 2177bd2abef3SChuck Lever ); 2178bd2abef3SChuck Lever 2179bd2abef3SChuck Lever DECLARE_EVENT_CLASS(svcrdma_sendqueue_event, 2180bd2abef3SChuck Lever TP_PROTO( 2181bd2abef3SChuck Lever const struct svcxprt_rdma *rdma 2182bd2abef3SChuck Lever ), 2183bd2abef3SChuck Lever 2184bd2abef3SChuck Lever TP_ARGS(rdma), 2185bd2abef3SChuck Lever 2186bd2abef3SChuck Lever TP_STRUCT__entry( 2187bd2abef3SChuck Lever __field(int, avail) 2188bd2abef3SChuck Lever __field(int, depth) 2189bd2abef3SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 2190bd2abef3SChuck Lever ), 2191bd2abef3SChuck Lever 2192bd2abef3SChuck Lever TP_fast_assign( 2193bd2abef3SChuck Lever __entry->avail = atomic_read(&rdma->sc_sq_avail); 2194bd2abef3SChuck Lever __entry->depth = rdma->sc_sq_depth; 2195bd2abef3SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 2196bd2abef3SChuck Lever ), 2197bd2abef3SChuck Lever 2198bd2abef3SChuck Lever TP_printk("addr=%s sc_sq_avail=%d/%d", 2199bd2abef3SChuck Lever __get_str(addr), __entry->avail, __entry->depth 2200bd2abef3SChuck Lever ) 2201bd2abef3SChuck Lever ); 2202bd2abef3SChuck Lever 2203bd2abef3SChuck Lever #define DEFINE_SQ_EVENT(name) \ 2204bd2abef3SChuck Lever DEFINE_EVENT(svcrdma_sendqueue_event, svcrdma_sq_##name,\ 2205bd2abef3SChuck Lever TP_PROTO( \ 2206bd2abef3SChuck Lever const struct svcxprt_rdma *rdma \ 2207bd2abef3SChuck Lever ), \ 2208bd2abef3SChuck Lever TP_ARGS(rdma)) 2209bd2abef3SChuck Lever 2210bd2abef3SChuck Lever DEFINE_SQ_EVENT(full); 2211bd2abef3SChuck Lever DEFINE_SQ_EVENT(retry); 2212bd2abef3SChuck Lever 2213e28b4fc6SChuck Lever TRACE_EVENT(svcrdma_sq_post_err, 2214e28b4fc6SChuck Lever TP_PROTO( 2215e28b4fc6SChuck Lever const struct svcxprt_rdma *rdma, 2216e28b4fc6SChuck Lever int status 2217e28b4fc6SChuck Lever ), 2218e28b4fc6SChuck Lever 2219e28b4fc6SChuck Lever TP_ARGS(rdma, status), 2220e28b4fc6SChuck Lever 2221e28b4fc6SChuck Lever TP_STRUCT__entry( 2222e28b4fc6SChuck Lever __field(int, avail) 2223e28b4fc6SChuck Lever __field(int, depth) 2224e28b4fc6SChuck Lever __field(int, status) 2225e28b4fc6SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 2226e28b4fc6SChuck Lever ), 2227e28b4fc6SChuck Lever 2228e28b4fc6SChuck Lever TP_fast_assign( 2229e28b4fc6SChuck Lever __entry->avail = atomic_read(&rdma->sc_sq_avail); 2230e28b4fc6SChuck Lever __entry->depth = rdma->sc_sq_depth; 2231e28b4fc6SChuck Lever __entry->status = status; 2232e28b4fc6SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 2233e28b4fc6SChuck Lever ), 2234e28b4fc6SChuck Lever 2235e28b4fc6SChuck Lever TP_printk("addr=%s sc_sq_avail=%d/%d status=%d", 2236e28b4fc6SChuck Lever __get_str(addr), __entry->avail, __entry->depth, 2237e28b4fc6SChuck Lever __entry->status 2238e28b4fc6SChuck Lever ) 2239e28b4fc6SChuck Lever ); 2240e28b4fc6SChuck Lever 2241e48f083eSChuck Lever #endif /* _TRACE_RPCRDMA_H */ 2242e48f083eSChuck Lever 2243e48f083eSChuck Lever #include <trace/define_trace.h> 2244