1e48f083eSChuck Lever /* SPDX-License-Identifier: GPL-2.0 */ 2e48f083eSChuck Lever /* 398895edbSChuck Lever * Copyright (c) 2017, 2018 Oracle. All rights reserved. 498895edbSChuck Lever * 598895edbSChuck Lever * Trace point definitions for the "rpcrdma" subsystem. 6e48f083eSChuck Lever */ 7e48f083eSChuck Lever #undef TRACE_SYSTEM 8e48f083eSChuck Lever #define TRACE_SYSTEM rpcrdma 9e48f083eSChuck Lever 10e48f083eSChuck Lever #if !defined(_TRACE_RPCRDMA_H) || defined(TRACE_HEADER_MULTI_READ) 11e48f083eSChuck Lever #define _TRACE_RPCRDMA_H 12e48f083eSChuck Lever 1353b2c1cbSChuck Lever #include <linux/scatterlist.h> 14f7bd657bSChuck Lever #include <linux/sunrpc/rpc_rdma_cid.h> 15e48f083eSChuck Lever #include <linux/tracepoint.h> 16b3d03daaSChuck Lever #include <rdma/ib_cm.h> 17e48f083eSChuck Lever #include <trace/events/rdma.h> 18e48f083eSChuck Lever 19ab03eff5SChuck Lever /** 20b4a7f91cSChuck Lever ** Event classes 21b4a7f91cSChuck Lever **/ 22b4a7f91cSChuck Lever 23f7bd657bSChuck Lever DECLARE_EVENT_CLASS(rpcrdma_completion_class, 24f7bd657bSChuck Lever TP_PROTO( 25f7bd657bSChuck Lever const struct ib_wc *wc, 26f7bd657bSChuck Lever const struct rpc_rdma_cid *cid 27f7bd657bSChuck Lever ), 28f7bd657bSChuck Lever 29f7bd657bSChuck Lever TP_ARGS(wc, cid), 30f7bd657bSChuck Lever 31f7bd657bSChuck Lever TP_STRUCT__entry( 32f7bd657bSChuck Lever __field(u32, cq_id) 33f7bd657bSChuck Lever __field(int, completion_id) 34f7bd657bSChuck Lever __field(unsigned long, status) 35f7bd657bSChuck Lever __field(unsigned int, vendor_err) 36f7bd657bSChuck Lever ), 37f7bd657bSChuck Lever 38f7bd657bSChuck Lever TP_fast_assign( 39f7bd657bSChuck Lever __entry->cq_id = cid->ci_queue_id; 40f7bd657bSChuck Lever __entry->completion_id = cid->ci_completion_id; 41f7bd657bSChuck Lever __entry->status = wc->status; 42f7bd657bSChuck Lever if (wc->status) 43f7bd657bSChuck Lever __entry->vendor_err = wc->vendor_err; 44f7bd657bSChuck Lever else 45f7bd657bSChuck Lever __entry->vendor_err = 0; 46f7bd657bSChuck Lever ), 47f7bd657bSChuck Lever 48f7bd657bSChuck Lever TP_printk("cq.id=%u cid=%d status=%s (%lu/0x%x)", 49f7bd657bSChuck Lever __entry->cq_id, __entry->completion_id, 50f7bd657bSChuck Lever rdma_show_wc_status(__entry->status), 51f7bd657bSChuck Lever __entry->status, __entry->vendor_err 52f7bd657bSChuck Lever ) 53f7bd657bSChuck Lever ); 54f7bd657bSChuck Lever 55f7bd657bSChuck Lever #define DEFINE_COMPLETION_EVENT(name) \ 56f7bd657bSChuck Lever DEFINE_EVENT(rpcrdma_completion_class, name, \ 57f7bd657bSChuck Lever TP_PROTO( \ 58f7bd657bSChuck Lever const struct ib_wc *wc, \ 59f7bd657bSChuck Lever const struct rpc_rdma_cid *cid \ 60f7bd657bSChuck Lever ), \ 61f7bd657bSChuck Lever TP_ARGS(wc, cid)) 62f7bd657bSChuck Lever 63eef2d8d4SChuck Lever DECLARE_EVENT_CLASS(rpcrdma_send_completion_class, 64eef2d8d4SChuck Lever TP_PROTO( 65eef2d8d4SChuck Lever const struct ib_wc *wc, 66eef2d8d4SChuck Lever const struct rpc_rdma_cid *cid 67eef2d8d4SChuck Lever ), 68eef2d8d4SChuck Lever 69eef2d8d4SChuck Lever TP_ARGS(wc, cid), 70eef2d8d4SChuck Lever 71eef2d8d4SChuck Lever TP_STRUCT__entry( 72eef2d8d4SChuck Lever __field(u32, cq_id) 73eef2d8d4SChuck Lever __field(int, completion_id) 74eef2d8d4SChuck Lever ), 75eef2d8d4SChuck Lever 76eef2d8d4SChuck Lever TP_fast_assign( 77eef2d8d4SChuck Lever __entry->cq_id = cid->ci_queue_id; 78eef2d8d4SChuck Lever __entry->completion_id = cid->ci_completion_id; 79eef2d8d4SChuck Lever ), 80eef2d8d4SChuck Lever 81eef2d8d4SChuck Lever TP_printk("cq.id=%u cid=%d", 82eef2d8d4SChuck Lever __entry->cq_id, __entry->completion_id 83eef2d8d4SChuck Lever ) 84eef2d8d4SChuck Lever ); 85eef2d8d4SChuck Lever 86eef2d8d4SChuck Lever #define DEFINE_SEND_COMPLETION_EVENT(name) \ 87eef2d8d4SChuck Lever DEFINE_EVENT(rpcrdma_send_completion_class, name, \ 88eef2d8d4SChuck Lever TP_PROTO( \ 89eef2d8d4SChuck Lever const struct ib_wc *wc, \ 90eef2d8d4SChuck Lever const struct rpc_rdma_cid *cid \ 91eef2d8d4SChuck Lever ), \ 92eef2d8d4SChuck Lever TP_ARGS(wc, cid)) 93eef2d8d4SChuck Lever 94eef2d8d4SChuck Lever DECLARE_EVENT_CLASS(rpcrdma_send_flush_class, 95eef2d8d4SChuck Lever TP_PROTO( 96eef2d8d4SChuck Lever const struct ib_wc *wc, 97eef2d8d4SChuck Lever const struct rpc_rdma_cid *cid 98eef2d8d4SChuck Lever ), 99eef2d8d4SChuck Lever 100eef2d8d4SChuck Lever TP_ARGS(wc, cid), 101eef2d8d4SChuck Lever 102eef2d8d4SChuck Lever TP_STRUCT__entry( 103eef2d8d4SChuck Lever __field(u32, cq_id) 104eef2d8d4SChuck Lever __field(int, completion_id) 105eef2d8d4SChuck Lever __field(unsigned long, status) 106eef2d8d4SChuck Lever __field(unsigned int, vendor_err) 107eef2d8d4SChuck Lever ), 108eef2d8d4SChuck Lever 109eef2d8d4SChuck Lever TP_fast_assign( 110eef2d8d4SChuck Lever __entry->cq_id = cid->ci_queue_id; 111eef2d8d4SChuck Lever __entry->completion_id = cid->ci_completion_id; 112eef2d8d4SChuck Lever __entry->status = wc->status; 113eef2d8d4SChuck Lever __entry->vendor_err = wc->vendor_err; 114eef2d8d4SChuck Lever ), 115eef2d8d4SChuck Lever 116eef2d8d4SChuck Lever TP_printk("cq.id=%u cid=%d status=%s (%lu/0x%x)", 117eef2d8d4SChuck Lever __entry->cq_id, __entry->completion_id, 118eef2d8d4SChuck Lever rdma_show_wc_status(__entry->status), 119eef2d8d4SChuck Lever __entry->status, __entry->vendor_err 120eef2d8d4SChuck Lever ) 121eef2d8d4SChuck Lever ); 122eef2d8d4SChuck Lever 123eef2d8d4SChuck Lever #define DEFINE_SEND_FLUSH_EVENT(name) \ 124eef2d8d4SChuck Lever DEFINE_EVENT(rpcrdma_send_flush_class, name, \ 125eef2d8d4SChuck Lever TP_PROTO( \ 126eef2d8d4SChuck Lever const struct ib_wc *wc, \ 127eef2d8d4SChuck Lever const struct rpc_rdma_cid *cid \ 128eef2d8d4SChuck Lever ), \ 129eef2d8d4SChuck Lever TP_ARGS(wc, cid)) 130eef2d8d4SChuck Lever 1316b147ea7SChuck Lever DECLARE_EVENT_CLASS(rpcrdma_mr_completion_class, 1326b147ea7SChuck Lever TP_PROTO( 1336b147ea7SChuck Lever const struct ib_wc *wc, 1346b147ea7SChuck Lever const struct rpc_rdma_cid *cid 1356b147ea7SChuck Lever ), 1366b147ea7SChuck Lever 1376b147ea7SChuck Lever TP_ARGS(wc, cid), 1386b147ea7SChuck Lever 1396b147ea7SChuck Lever TP_STRUCT__entry( 1406b147ea7SChuck Lever __field(u32, cq_id) 1416b147ea7SChuck Lever __field(int, completion_id) 1426b147ea7SChuck Lever __field(unsigned long, status) 1436b147ea7SChuck Lever __field(unsigned int, vendor_err) 1446b147ea7SChuck Lever ), 1456b147ea7SChuck Lever 1466b147ea7SChuck Lever TP_fast_assign( 1476b147ea7SChuck Lever __entry->cq_id = cid->ci_queue_id; 1486b147ea7SChuck Lever __entry->completion_id = cid->ci_completion_id; 1496b147ea7SChuck Lever __entry->status = wc->status; 1506b147ea7SChuck Lever if (wc->status) 1516b147ea7SChuck Lever __entry->vendor_err = wc->vendor_err; 1526b147ea7SChuck Lever else 1536b147ea7SChuck Lever __entry->vendor_err = 0; 1546b147ea7SChuck Lever ), 1556b147ea7SChuck Lever 1566b147ea7SChuck Lever TP_printk("cq.id=%u mr.id=%d status=%s (%lu/0x%x)", 1576b147ea7SChuck Lever __entry->cq_id, __entry->completion_id, 1586b147ea7SChuck Lever rdma_show_wc_status(__entry->status), 1596b147ea7SChuck Lever __entry->status, __entry->vendor_err 1606b147ea7SChuck Lever ) 1616b147ea7SChuck Lever ); 1626b147ea7SChuck Lever 1636b147ea7SChuck Lever #define DEFINE_MR_COMPLETION_EVENT(name) \ 1646b147ea7SChuck Lever DEFINE_EVENT(rpcrdma_mr_completion_class, name, \ 1656b147ea7SChuck Lever TP_PROTO( \ 1666b147ea7SChuck Lever const struct ib_wc *wc, \ 1676b147ea7SChuck Lever const struct rpc_rdma_cid *cid \ 1686b147ea7SChuck Lever ), \ 1696b147ea7SChuck Lever TP_ARGS(wc, cid)) 1706b147ea7SChuck Lever 171c30f259aSChuck Lever DECLARE_EVENT_CLASS(rpcrdma_receive_completion_class, 172c30f259aSChuck Lever TP_PROTO( 173c30f259aSChuck Lever const struct ib_wc *wc, 174c30f259aSChuck Lever const struct rpc_rdma_cid *cid 175c30f259aSChuck Lever ), 176c30f259aSChuck Lever 177c30f259aSChuck Lever TP_ARGS(wc, cid), 178c30f259aSChuck Lever 179c30f259aSChuck Lever TP_STRUCT__entry( 180c30f259aSChuck Lever __field(u32, cq_id) 181c30f259aSChuck Lever __field(int, completion_id) 182c30f259aSChuck Lever __field(u32, received) 183c30f259aSChuck Lever __field(unsigned long, status) 184c30f259aSChuck Lever __field(unsigned int, vendor_err) 185c30f259aSChuck Lever ), 186c30f259aSChuck Lever 187c30f259aSChuck Lever TP_fast_assign( 188c30f259aSChuck Lever __entry->cq_id = cid->ci_queue_id; 189c30f259aSChuck Lever __entry->completion_id = cid->ci_completion_id; 190c30f259aSChuck Lever __entry->status = wc->status; 191c30f259aSChuck Lever if (wc->status) { 192c30f259aSChuck Lever __entry->received = 0; 193c30f259aSChuck Lever __entry->vendor_err = wc->vendor_err; 194c30f259aSChuck Lever } else { 195c30f259aSChuck Lever __entry->received = wc->byte_len; 196c30f259aSChuck Lever __entry->vendor_err = 0; 197c30f259aSChuck Lever } 198c30f259aSChuck Lever ), 199c30f259aSChuck Lever 200c30f259aSChuck Lever TP_printk("cq.id=%u cid=%d status=%s (%lu/0x%x) received=%u", 201c30f259aSChuck Lever __entry->cq_id, __entry->completion_id, 202c30f259aSChuck Lever rdma_show_wc_status(__entry->status), 203c30f259aSChuck Lever __entry->status, __entry->vendor_err, 204c30f259aSChuck Lever __entry->received 205c30f259aSChuck Lever ) 206c30f259aSChuck Lever ); 207c30f259aSChuck Lever 208c30f259aSChuck Lever #define DEFINE_RECEIVE_COMPLETION_EVENT(name) \ 209c30f259aSChuck Lever DEFINE_EVENT(rpcrdma_receive_completion_class, name, \ 210c30f259aSChuck Lever TP_PROTO( \ 211c30f259aSChuck Lever const struct ib_wc *wc, \ 212c30f259aSChuck Lever const struct rpc_rdma_cid *cid \ 213c30f259aSChuck Lever ), \ 214c30f259aSChuck Lever TP_ARGS(wc, cid)) 215c30f259aSChuck Lever 2168dcc5721SChuck Lever DECLARE_EVENT_CLASS(rpcrdma_receive_success_class, 2178dcc5721SChuck Lever TP_PROTO( 2188dcc5721SChuck Lever const struct ib_wc *wc, 2198dcc5721SChuck Lever const struct rpc_rdma_cid *cid 2208dcc5721SChuck Lever ), 2218dcc5721SChuck Lever 2228dcc5721SChuck Lever TP_ARGS(wc, cid), 2238dcc5721SChuck Lever 2248dcc5721SChuck Lever TP_STRUCT__entry( 2258dcc5721SChuck Lever __field(u32, cq_id) 2268dcc5721SChuck Lever __field(int, completion_id) 2278dcc5721SChuck Lever __field(u32, received) 2288dcc5721SChuck Lever ), 2298dcc5721SChuck Lever 2308dcc5721SChuck Lever TP_fast_assign( 2318dcc5721SChuck Lever __entry->cq_id = cid->ci_queue_id; 2328dcc5721SChuck Lever __entry->completion_id = cid->ci_completion_id; 2338dcc5721SChuck Lever __entry->received = wc->byte_len; 2348dcc5721SChuck Lever ), 2358dcc5721SChuck Lever 2368dcc5721SChuck Lever TP_printk("cq.id=%u cid=%d received=%u", 2378dcc5721SChuck Lever __entry->cq_id, __entry->completion_id, 2388dcc5721SChuck Lever __entry->received 2398dcc5721SChuck Lever ) 2408dcc5721SChuck Lever ); 2418dcc5721SChuck Lever 2428dcc5721SChuck Lever #define DEFINE_RECEIVE_SUCCESS_EVENT(name) \ 2438dcc5721SChuck Lever DEFINE_EVENT(rpcrdma_receive_success_class, name, \ 2448dcc5721SChuck Lever TP_PROTO( \ 2458dcc5721SChuck Lever const struct ib_wc *wc, \ 2468dcc5721SChuck Lever const struct rpc_rdma_cid *cid \ 2478dcc5721SChuck Lever ), \ 2488dcc5721SChuck Lever TP_ARGS(wc, cid)) 2498dcc5721SChuck Lever 2508dcc5721SChuck Lever DECLARE_EVENT_CLASS(rpcrdma_receive_flush_class, 2518dcc5721SChuck Lever TP_PROTO( 2528dcc5721SChuck Lever const struct ib_wc *wc, 2538dcc5721SChuck Lever const struct rpc_rdma_cid *cid 2548dcc5721SChuck Lever ), 2558dcc5721SChuck Lever 2568dcc5721SChuck Lever TP_ARGS(wc, cid), 2578dcc5721SChuck Lever 2588dcc5721SChuck Lever TP_STRUCT__entry( 2598dcc5721SChuck Lever __field(u32, cq_id) 2608dcc5721SChuck Lever __field(int, completion_id) 2618dcc5721SChuck Lever __field(unsigned long, status) 2628dcc5721SChuck Lever __field(unsigned int, vendor_err) 2638dcc5721SChuck Lever ), 2648dcc5721SChuck Lever 2658dcc5721SChuck Lever TP_fast_assign( 2668dcc5721SChuck Lever __entry->cq_id = cid->ci_queue_id; 2678dcc5721SChuck Lever __entry->completion_id = cid->ci_completion_id; 2688dcc5721SChuck Lever __entry->status = wc->status; 2698dcc5721SChuck Lever __entry->vendor_err = wc->vendor_err; 2708dcc5721SChuck Lever ), 2718dcc5721SChuck Lever 2728dcc5721SChuck Lever TP_printk("cq.id=%u cid=%d status=%s (%lu/0x%x)", 2738dcc5721SChuck Lever __entry->cq_id, __entry->completion_id, 2748dcc5721SChuck Lever rdma_show_wc_status(__entry->status), 2758dcc5721SChuck Lever __entry->status, __entry->vendor_err 2768dcc5721SChuck Lever ) 2778dcc5721SChuck Lever ); 2788dcc5721SChuck Lever 2798dcc5721SChuck Lever #define DEFINE_RECEIVE_FLUSH_EVENT(name) \ 2808dcc5721SChuck Lever DEFINE_EVENT(rpcrdma_receive_flush_class, name, \ 2818dcc5721SChuck Lever TP_PROTO( \ 2828dcc5721SChuck Lever const struct ib_wc *wc, \ 2838dcc5721SChuck Lever const struct rpc_rdma_cid *cid \ 2848dcc5721SChuck Lever ), \ 2858dcc5721SChuck Lever TP_ARGS(wc, cid)) 2868dcc5721SChuck Lever 2873a9568feSChuck Lever DECLARE_EVENT_CLASS(xprtrdma_reply_class, 288b4a7f91cSChuck Lever TP_PROTO( 289b4a7f91cSChuck Lever const struct rpcrdma_rep *rep 290b4a7f91cSChuck Lever ), 291b4a7f91cSChuck Lever 292b4a7f91cSChuck Lever TP_ARGS(rep), 293b4a7f91cSChuck Lever 294b4a7f91cSChuck Lever TP_STRUCT__entry( 295b4a7f91cSChuck Lever __field(u32, xid) 296b4a7f91cSChuck Lever __field(u32, version) 297b4a7f91cSChuck Lever __field(u32, proc) 2983a9568feSChuck Lever __string(addr, rpcrdma_addrstr(rep->rr_rxprt)) 2993a9568feSChuck Lever __string(port, rpcrdma_portstr(rep->rr_rxprt)) 300b4a7f91cSChuck Lever ), 301b4a7f91cSChuck Lever 302b4a7f91cSChuck Lever TP_fast_assign( 303b4a7f91cSChuck Lever __entry->xid = be32_to_cpu(rep->rr_xid); 304b4a7f91cSChuck Lever __entry->version = be32_to_cpu(rep->rr_vers); 305b4a7f91cSChuck Lever __entry->proc = be32_to_cpu(rep->rr_proc); 3063a9568feSChuck Lever __assign_str(addr, rpcrdma_addrstr(rep->rr_rxprt)); 3073a9568feSChuck Lever __assign_str(port, rpcrdma_portstr(rep->rr_rxprt)); 308b4a7f91cSChuck Lever ), 309b4a7f91cSChuck Lever 3103a9568feSChuck Lever TP_printk("peer=[%s]:%s xid=0x%08x version=%u proc=%u", 3113a9568feSChuck Lever __get_str(addr), __get_str(port), 3123a9568feSChuck Lever __entry->xid, __entry->version, __entry->proc 313b4a7f91cSChuck Lever ) 314b4a7f91cSChuck Lever ); 315b4a7f91cSChuck Lever 316b4a7f91cSChuck Lever #define DEFINE_REPLY_EVENT(name) \ 3173a9568feSChuck Lever DEFINE_EVENT(xprtrdma_reply_class, \ 3183a9568feSChuck Lever xprtrdma_reply_##name##_err, \ 319b4a7f91cSChuck Lever TP_PROTO( \ 320b4a7f91cSChuck Lever const struct rpcrdma_rep *rep \ 321b4a7f91cSChuck Lever ), \ 322b4a7f91cSChuck Lever TP_ARGS(rep)) 323b4a7f91cSChuck Lever 3241c443effSChuck Lever DECLARE_EVENT_CLASS(xprtrdma_rxprt, 3251c443effSChuck Lever TP_PROTO( 3261c443effSChuck Lever const struct rpcrdma_xprt *r_xprt 3271c443effSChuck Lever ), 3281c443effSChuck Lever 3291c443effSChuck Lever TP_ARGS(r_xprt), 3301c443effSChuck Lever 3311c443effSChuck Lever TP_STRUCT__entry( 3321c443effSChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 3331c443effSChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 3341c443effSChuck Lever ), 3351c443effSChuck Lever 3361c443effSChuck Lever TP_fast_assign( 3371c443effSChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 3381c443effSChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 3391c443effSChuck Lever ), 3401c443effSChuck Lever 34183189d15SChuck Lever TP_printk("peer=[%s]:%s", 34283189d15SChuck Lever __get_str(addr), __get_str(port) 3431c443effSChuck Lever ) 3441c443effSChuck Lever ); 3451c443effSChuck Lever 3461c443effSChuck Lever #define DEFINE_RXPRT_EVENT(name) \ 3471c443effSChuck Lever DEFINE_EVENT(xprtrdma_rxprt, name, \ 3481c443effSChuck Lever TP_PROTO( \ 3491c443effSChuck Lever const struct rpcrdma_xprt *r_xprt \ 3501c443effSChuck Lever ), \ 3511c443effSChuck Lever TP_ARGS(r_xprt)) 3521c443effSChuck Lever 3537b020f17SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_connect_class, 3547b020f17SChuck Lever TP_PROTO( 3557b020f17SChuck Lever const struct rpcrdma_xprt *r_xprt, 3567b020f17SChuck Lever int rc 3577b020f17SChuck Lever ), 3587b020f17SChuck Lever 3597b020f17SChuck Lever TP_ARGS(r_xprt, rc), 3607b020f17SChuck Lever 3617b020f17SChuck Lever TP_STRUCT__entry( 3627b020f17SChuck Lever __field(int, rc) 3637b020f17SChuck Lever __field(int, connect_status) 3647b020f17SChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 3657b020f17SChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 3667b020f17SChuck Lever ), 3677b020f17SChuck Lever 3687b020f17SChuck Lever TP_fast_assign( 3697b020f17SChuck Lever __entry->rc = rc; 370e28ce900SChuck Lever __entry->connect_status = r_xprt->rx_ep->re_connect_status; 3717b020f17SChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 3727b020f17SChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 3737b020f17SChuck Lever ), 3747b020f17SChuck Lever 37583189d15SChuck Lever TP_printk("peer=[%s]:%s rc=%d connection status=%d", 37683189d15SChuck Lever __get_str(addr), __get_str(port), 3777b020f17SChuck Lever __entry->rc, __entry->connect_status 3787b020f17SChuck Lever ) 3797b020f17SChuck Lever ); 3807b020f17SChuck Lever 3817b020f17SChuck Lever #define DEFINE_CONN_EVENT(name) \ 3827b020f17SChuck Lever DEFINE_EVENT(xprtrdma_connect_class, xprtrdma_##name, \ 3837b020f17SChuck Lever TP_PROTO( \ 3847b020f17SChuck Lever const struct rpcrdma_xprt *r_xprt, \ 3857b020f17SChuck Lever int rc \ 3867b020f17SChuck Lever ), \ 3877b020f17SChuck Lever TP_ARGS(r_xprt, rc)) 3887b020f17SChuck Lever 38958f10ad4SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_rdch_event, 39058f10ad4SChuck Lever TP_PROTO( 39158f10ad4SChuck Lever const struct rpc_task *task, 39258f10ad4SChuck Lever unsigned int pos, 39358f10ad4SChuck Lever struct rpcrdma_mr *mr, 39458f10ad4SChuck Lever int nsegs 39558f10ad4SChuck Lever ), 39658f10ad4SChuck Lever 39758f10ad4SChuck Lever TP_ARGS(task, pos, mr, nsegs), 39858f10ad4SChuck Lever 39958f10ad4SChuck Lever TP_STRUCT__entry( 40058f10ad4SChuck Lever __field(unsigned int, task_id) 40158f10ad4SChuck Lever __field(unsigned int, client_id) 40258f10ad4SChuck Lever __field(unsigned int, pos) 40358f10ad4SChuck Lever __field(int, nents) 40458f10ad4SChuck Lever __field(u32, handle) 40558f10ad4SChuck Lever __field(u32, length) 40658f10ad4SChuck Lever __field(u64, offset) 40758f10ad4SChuck Lever __field(int, nsegs) 40858f10ad4SChuck Lever ), 40958f10ad4SChuck Lever 41058f10ad4SChuck Lever TP_fast_assign( 41158f10ad4SChuck Lever __entry->task_id = task->tk_pid; 41258f10ad4SChuck Lever __entry->client_id = task->tk_client->cl_clid; 41358f10ad4SChuck Lever __entry->pos = pos; 41458f10ad4SChuck Lever __entry->nents = mr->mr_nents; 41558f10ad4SChuck Lever __entry->handle = mr->mr_handle; 41658f10ad4SChuck Lever __entry->length = mr->mr_length; 41758f10ad4SChuck Lever __entry->offset = mr->mr_offset; 41858f10ad4SChuck Lever __entry->nsegs = nsegs; 41958f10ad4SChuck Lever ), 42058f10ad4SChuck Lever 421aba11831SChuck Lever TP_printk("task:%u@%u pos=%u %u@0x%016llx:0x%08x (%s)", 422aba11831SChuck Lever __entry->task_id, __entry->client_id, 42358f10ad4SChuck Lever __entry->pos, __entry->length, 42458f10ad4SChuck Lever (unsigned long long)__entry->offset, __entry->handle, 42558f10ad4SChuck Lever __entry->nents < __entry->nsegs ? "more" : "last" 42658f10ad4SChuck Lever ) 42758f10ad4SChuck Lever ); 42858f10ad4SChuck Lever 42958f10ad4SChuck Lever #define DEFINE_RDCH_EVENT(name) \ 430aba11831SChuck Lever DEFINE_EVENT(xprtrdma_rdch_event, xprtrdma_chunk_##name,\ 43158f10ad4SChuck Lever TP_PROTO( \ 43258f10ad4SChuck Lever const struct rpc_task *task, \ 43358f10ad4SChuck Lever unsigned int pos, \ 43458f10ad4SChuck Lever struct rpcrdma_mr *mr, \ 43558f10ad4SChuck Lever int nsegs \ 43658f10ad4SChuck Lever ), \ 43758f10ad4SChuck Lever TP_ARGS(task, pos, mr, nsegs)) 43858f10ad4SChuck Lever 43958f10ad4SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_wrch_event, 44058f10ad4SChuck Lever TP_PROTO( 44158f10ad4SChuck Lever const struct rpc_task *task, 44258f10ad4SChuck Lever struct rpcrdma_mr *mr, 44358f10ad4SChuck Lever int nsegs 44458f10ad4SChuck Lever ), 44558f10ad4SChuck Lever 44658f10ad4SChuck Lever TP_ARGS(task, mr, nsegs), 44758f10ad4SChuck Lever 44858f10ad4SChuck Lever TP_STRUCT__entry( 44958f10ad4SChuck Lever __field(unsigned int, task_id) 45058f10ad4SChuck Lever __field(unsigned int, client_id) 45158f10ad4SChuck Lever __field(int, nents) 45258f10ad4SChuck Lever __field(u32, handle) 45358f10ad4SChuck Lever __field(u32, length) 45458f10ad4SChuck Lever __field(u64, offset) 45558f10ad4SChuck Lever __field(int, nsegs) 45658f10ad4SChuck Lever ), 45758f10ad4SChuck Lever 45858f10ad4SChuck Lever TP_fast_assign( 45958f10ad4SChuck Lever __entry->task_id = task->tk_pid; 46058f10ad4SChuck Lever __entry->client_id = task->tk_client->cl_clid; 46158f10ad4SChuck Lever __entry->nents = mr->mr_nents; 46258f10ad4SChuck Lever __entry->handle = mr->mr_handle; 46358f10ad4SChuck Lever __entry->length = mr->mr_length; 46458f10ad4SChuck Lever __entry->offset = mr->mr_offset; 46558f10ad4SChuck Lever __entry->nsegs = nsegs; 46658f10ad4SChuck Lever ), 46758f10ad4SChuck Lever 468aba11831SChuck Lever TP_printk("task:%u@%u %u@0x%016llx:0x%08x (%s)", 469aba11831SChuck Lever __entry->task_id, __entry->client_id, 47058f10ad4SChuck Lever __entry->length, (unsigned long long)__entry->offset, 47158f10ad4SChuck Lever __entry->handle, 47258f10ad4SChuck Lever __entry->nents < __entry->nsegs ? "more" : "last" 47358f10ad4SChuck Lever ) 47458f10ad4SChuck Lever ); 47558f10ad4SChuck Lever 47658f10ad4SChuck Lever #define DEFINE_WRCH_EVENT(name) \ 477aba11831SChuck Lever DEFINE_EVENT(xprtrdma_wrch_event, xprtrdma_chunk_##name,\ 47858f10ad4SChuck Lever TP_PROTO( \ 47958f10ad4SChuck Lever const struct rpc_task *task, \ 48058f10ad4SChuck Lever struct rpcrdma_mr *mr, \ 48158f10ad4SChuck Lever int nsegs \ 48258f10ad4SChuck Lever ), \ 48358f10ad4SChuck Lever TP_ARGS(task, mr, nsegs)) 48458f10ad4SChuck Lever 485aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_BIDIRECTIONAL); 486aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_TO_DEVICE); 487aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_FROM_DEVICE); 488aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_NONE); 489aba11831SChuck Lever 490aba11831SChuck Lever #define xprtrdma_show_direction(x) \ 491aba11831SChuck Lever __print_symbolic(x, \ 492aba11831SChuck Lever { DMA_BIDIRECTIONAL, "BIDIR" }, \ 493aba11831SChuck Lever { DMA_TO_DEVICE, "TO_DEVICE" }, \ 494aba11831SChuck Lever { DMA_FROM_DEVICE, "FROM_DEVICE" }, \ 495aba11831SChuck Lever { DMA_NONE, "NONE" }) 496aba11831SChuck Lever 4977703db97SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_mr_class, 4987703db97SChuck Lever TP_PROTO( 4997703db97SChuck Lever const struct rpcrdma_mr *mr 5007703db97SChuck Lever ), 5017703db97SChuck Lever 5027703db97SChuck Lever TP_ARGS(mr), 5037703db97SChuck Lever 5047703db97SChuck Lever TP_STRUCT__entry( 5057703db97SChuck Lever __field(unsigned int, task_id) 5067703db97SChuck Lever __field(unsigned int, client_id) 5077703db97SChuck Lever __field(u32, mr_id) 5087703db97SChuck Lever __field(int, nents) 5097703db97SChuck Lever __field(u32, handle) 5107703db97SChuck Lever __field(u32, length) 5117703db97SChuck Lever __field(u64, offset) 5127703db97SChuck Lever __field(u32, dir) 5137703db97SChuck Lever ), 5147703db97SChuck Lever 5157703db97SChuck Lever TP_fast_assign( 5167703db97SChuck Lever const struct rpcrdma_req *req = mr->mr_req; 5177703db97SChuck Lever const struct rpc_task *task = req->rl_slot.rq_task; 5187703db97SChuck Lever 5197703db97SChuck Lever __entry->task_id = task->tk_pid; 5207703db97SChuck Lever __entry->client_id = task->tk_client->cl_clid; 52113bcf7e3SChuck Lever __entry->mr_id = mr->mr_ibmr->res.id; 5227703db97SChuck Lever __entry->nents = mr->mr_nents; 5237703db97SChuck Lever __entry->handle = mr->mr_handle; 5247703db97SChuck Lever __entry->length = mr->mr_length; 5257703db97SChuck Lever __entry->offset = mr->mr_offset; 5267703db97SChuck Lever __entry->dir = mr->mr_dir; 5277703db97SChuck Lever ), 5287703db97SChuck Lever 5297703db97SChuck Lever TP_printk("task:%u@%u mr.id=%u nents=%d %u@0x%016llx:0x%08x (%s)", 5307703db97SChuck Lever __entry->task_id, __entry->client_id, 5317703db97SChuck Lever __entry->mr_id, __entry->nents, __entry->length, 5327703db97SChuck Lever (unsigned long long)__entry->offset, __entry->handle, 5337703db97SChuck Lever xprtrdma_show_direction(__entry->dir) 5347703db97SChuck Lever ) 5357703db97SChuck Lever ); 5367703db97SChuck Lever 5377703db97SChuck Lever #define DEFINE_MR_EVENT(name) \ 5387703db97SChuck Lever DEFINE_EVENT(xprtrdma_mr_class, \ 5397703db97SChuck Lever xprtrdma_mr_##name, \ 5407703db97SChuck Lever TP_PROTO( \ 5417703db97SChuck Lever const struct rpcrdma_mr *mr \ 5427703db97SChuck Lever ), \ 5437703db97SChuck Lever TP_ARGS(mr)) 5447703db97SChuck Lever 5457703db97SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_anonymous_mr_class, 5462937fedeSChuck Lever TP_PROTO( 5472937fedeSChuck Lever const struct rpcrdma_mr *mr 5482937fedeSChuck Lever ), 5492937fedeSChuck Lever 5502937fedeSChuck Lever TP_ARGS(mr), 5512937fedeSChuck Lever 5522937fedeSChuck Lever TP_STRUCT__entry( 55362a89501SChuck Lever __field(u32, mr_id) 55462a89501SChuck Lever __field(int, nents) 5552937fedeSChuck Lever __field(u32, handle) 5562937fedeSChuck Lever __field(u32, length) 5572937fedeSChuck Lever __field(u64, offset) 558aba11831SChuck Lever __field(u32, dir) 5592937fedeSChuck Lever ), 5602937fedeSChuck Lever 5612937fedeSChuck Lever TP_fast_assign( 56213bcf7e3SChuck Lever __entry->mr_id = mr->mr_ibmr->res.id; 56362a89501SChuck Lever __entry->nents = mr->mr_nents; 5642937fedeSChuck Lever __entry->handle = mr->mr_handle; 5652937fedeSChuck Lever __entry->length = mr->mr_length; 5662937fedeSChuck Lever __entry->offset = mr->mr_offset; 567aba11831SChuck Lever __entry->dir = mr->mr_dir; 5682937fedeSChuck Lever ), 5692937fedeSChuck Lever 57062a89501SChuck Lever TP_printk("mr.id=%u nents=%d %u@0x%016llx:0x%08x (%s)", 57162a89501SChuck Lever __entry->mr_id, __entry->nents, __entry->length, 572aba11831SChuck Lever (unsigned long long)__entry->offset, __entry->handle, 573aba11831SChuck Lever xprtrdma_show_direction(__entry->dir) 5742937fedeSChuck Lever ) 5752937fedeSChuck Lever ); 5762937fedeSChuck Lever 5777703db97SChuck Lever #define DEFINE_ANON_MR_EVENT(name) \ 5787703db97SChuck Lever DEFINE_EVENT(xprtrdma_anonymous_mr_class, \ 5797703db97SChuck Lever xprtrdma_mr_##name, \ 5802937fedeSChuck Lever TP_PROTO( \ 5812937fedeSChuck Lever const struct rpcrdma_mr *mr \ 5822937fedeSChuck Lever ), \ 5832937fedeSChuck Lever TP_ARGS(mr)) 5842937fedeSChuck Lever 585d11e9346SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_callback_class, 586fc1eb807SChuck Lever TP_PROTO( 587d11e9346SChuck Lever const struct rpcrdma_xprt *r_xprt, 588fc1eb807SChuck Lever const struct rpc_rqst *rqst 589fc1eb807SChuck Lever ), 590fc1eb807SChuck Lever 591d11e9346SChuck Lever TP_ARGS(r_xprt, rqst), 592fc1eb807SChuck Lever 593fc1eb807SChuck Lever TP_STRUCT__entry( 594fc1eb807SChuck Lever __field(u32, xid) 595d11e9346SChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 596d11e9346SChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 597fc1eb807SChuck Lever ), 598fc1eb807SChuck Lever 599fc1eb807SChuck Lever TP_fast_assign( 600fc1eb807SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 601d11e9346SChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 602d11e9346SChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 603fc1eb807SChuck Lever ), 604fc1eb807SChuck Lever 605d11e9346SChuck Lever TP_printk("peer=[%s]:%s xid=0x%08x", 606d11e9346SChuck Lever __get_str(addr), __get_str(port), __entry->xid 607fc1eb807SChuck Lever ) 608fc1eb807SChuck Lever ); 609fc1eb807SChuck Lever 610d11e9346SChuck Lever #define DEFINE_CALLBACK_EVENT(name) \ 611d11e9346SChuck Lever DEFINE_EVENT(xprtrdma_callback_class, \ 612d11e9346SChuck Lever xprtrdma_cb_##name, \ 613fc1eb807SChuck Lever TP_PROTO( \ 614d11e9346SChuck Lever const struct rpcrdma_xprt *r_xprt, \ 615fc1eb807SChuck Lever const struct rpc_rqst *rqst \ 616fc1eb807SChuck Lever ), \ 617d11e9346SChuck Lever TP_ARGS(r_xprt, rqst)) 618fc1eb807SChuck Lever 619b4a7f91cSChuck Lever /** 620b4744e00SChuck Lever ** Connection events 621b4744e00SChuck Lever **/ 622b4744e00SChuck Lever 623f54c870dSChuck Lever TRACE_EVENT(xprtrdma_inline_thresh, 624f54c870dSChuck Lever TP_PROTO( 625745b734cSChuck Lever const struct rpcrdma_ep *ep 626f54c870dSChuck Lever ), 627f54c870dSChuck Lever 628745b734cSChuck Lever TP_ARGS(ep), 629f54c870dSChuck Lever 630f54c870dSChuck Lever TP_STRUCT__entry( 631f54c870dSChuck Lever __field(unsigned int, inline_send) 632f54c870dSChuck Lever __field(unsigned int, inline_recv) 633f54c870dSChuck Lever __field(unsigned int, max_send) 634f54c870dSChuck Lever __field(unsigned int, max_recv) 635745b734cSChuck Lever __array(unsigned char, srcaddr, sizeof(struct sockaddr_in6)) 636745b734cSChuck Lever __array(unsigned char, dstaddr, sizeof(struct sockaddr_in6)) 637f54c870dSChuck Lever ), 638f54c870dSChuck Lever 639f54c870dSChuck Lever TP_fast_assign( 640745b734cSChuck Lever const struct rdma_cm_id *id = ep->re_id; 641f54c870dSChuck Lever 64293aa8e0aSChuck Lever __entry->inline_send = ep->re_inline_send; 64393aa8e0aSChuck Lever __entry->inline_recv = ep->re_inline_recv; 64493aa8e0aSChuck Lever __entry->max_send = ep->re_max_inline_send; 64593aa8e0aSChuck Lever __entry->max_recv = ep->re_max_inline_recv; 646745b734cSChuck Lever memcpy(__entry->srcaddr, &id->route.addr.src_addr, 647745b734cSChuck Lever sizeof(struct sockaddr_in6)); 648745b734cSChuck Lever memcpy(__entry->dstaddr, &id->route.addr.dst_addr, 649745b734cSChuck Lever sizeof(struct sockaddr_in6)); 650f54c870dSChuck Lever ), 651f54c870dSChuck Lever 652745b734cSChuck Lever TP_printk("%pISpc -> %pISpc neg send/recv=%u/%u, calc send/recv=%u/%u", 653745b734cSChuck Lever __entry->srcaddr, __entry->dstaddr, 654f54c870dSChuck Lever __entry->inline_send, __entry->inline_recv, 655f54c870dSChuck Lever __entry->max_send, __entry->max_recv 656f54c870dSChuck Lever ) 657f54c870dSChuck Lever ); 658f54c870dSChuck Lever 6597b020f17SChuck Lever DEFINE_CONN_EVENT(connect); 6607b020f17SChuck Lever DEFINE_CONN_EVENT(disconnect); 6617b020f17SChuck Lever 6627b020f17SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_op_inject_dsc); 6637b020f17SChuck Lever 6647b020f17SChuck Lever TRACE_EVENT(xprtrdma_op_connect, 665b4744e00SChuck Lever TP_PROTO( 666b4744e00SChuck Lever const struct rpcrdma_xprt *r_xprt, 6677b020f17SChuck Lever unsigned long delay 668b4744e00SChuck Lever ), 669b4744e00SChuck Lever 6707b020f17SChuck Lever TP_ARGS(r_xprt, delay), 671b4744e00SChuck Lever 672b4744e00SChuck Lever TP_STRUCT__entry( 6737b020f17SChuck Lever __field(unsigned long, delay) 674b4744e00SChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 675b4744e00SChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 676b4744e00SChuck Lever ), 677b4744e00SChuck Lever 678b4744e00SChuck Lever TP_fast_assign( 6797b020f17SChuck Lever __entry->delay = delay; 680b4744e00SChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 681b4744e00SChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 682b4744e00SChuck Lever ), 683b4744e00SChuck Lever 68483189d15SChuck Lever TP_printk("peer=[%s]:%s delay=%lu", 68583189d15SChuck Lever __get_str(addr), __get_str(port), __entry->delay 686b4744e00SChuck Lever ) 687b4744e00SChuck Lever ); 688b4744e00SChuck Lever 689b4744e00SChuck Lever 690675dd90aSChuck Lever TRACE_EVENT(xprtrdma_op_set_cto, 691675dd90aSChuck Lever TP_PROTO( 692675dd90aSChuck Lever const struct rpcrdma_xprt *r_xprt, 693675dd90aSChuck Lever unsigned long connect, 694675dd90aSChuck Lever unsigned long reconnect 695675dd90aSChuck Lever ), 696675dd90aSChuck Lever 697675dd90aSChuck Lever TP_ARGS(r_xprt, connect, reconnect), 698675dd90aSChuck Lever 699675dd90aSChuck Lever TP_STRUCT__entry( 700675dd90aSChuck Lever __field(unsigned long, connect) 701675dd90aSChuck Lever __field(unsigned long, reconnect) 702675dd90aSChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 703675dd90aSChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 704675dd90aSChuck Lever ), 705675dd90aSChuck Lever 706675dd90aSChuck Lever TP_fast_assign( 707675dd90aSChuck Lever __entry->connect = connect; 708675dd90aSChuck Lever __entry->reconnect = reconnect; 709675dd90aSChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 710675dd90aSChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 711675dd90aSChuck Lever ), 712675dd90aSChuck Lever 71383189d15SChuck Lever TP_printk("peer=[%s]:%s connect=%lu reconnect=%lu", 71483189d15SChuck Lever __get_str(addr), __get_str(port), 715675dd90aSChuck Lever __entry->connect / HZ, __entry->reconnect / HZ 716675dd90aSChuck Lever ) 717675dd90aSChuck Lever ); 718675dd90aSChuck Lever 719b4744e00SChuck Lever /** 720ab03eff5SChuck Lever ** Call events 721ab03eff5SChuck Lever **/ 722ab03eff5SChuck Lever 7231c443effSChuck Lever TRACE_EVENT(xprtrdma_createmrs, 7241c443effSChuck Lever TP_PROTO( 7251c443effSChuck Lever const struct rpcrdma_xprt *r_xprt, 7261c443effSChuck Lever unsigned int count 7271c443effSChuck Lever ), 7281c443effSChuck Lever 7291c443effSChuck Lever TP_ARGS(r_xprt, count), 7301c443effSChuck Lever 7311c443effSChuck Lever TP_STRUCT__entry( 7326dc6ec9eSChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 7336dc6ec9eSChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 7341c443effSChuck Lever __field(unsigned int, count) 7351c443effSChuck Lever ), 7361c443effSChuck Lever 7371c443effSChuck Lever TP_fast_assign( 7381c443effSChuck Lever __entry->count = count; 7396dc6ec9eSChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 7406dc6ec9eSChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 7411c443effSChuck Lever ), 7421c443effSChuck Lever 74383189d15SChuck Lever TP_printk("peer=[%s]:%s created %u MRs", 74483189d15SChuck Lever __get_str(addr), __get_str(port), __entry->count 7456dc6ec9eSChuck Lever ) 7466dc6ec9eSChuck Lever ); 7476dc6ec9eSChuck Lever 7480307cdecSChuck Lever TRACE_EVENT(xprtrdma_nomrs_err, 7496dc6ec9eSChuck Lever TP_PROTO( 7500307cdecSChuck Lever const struct rpcrdma_xprt *r_xprt, 7516dc6ec9eSChuck Lever const struct rpcrdma_req *req 7526dc6ec9eSChuck Lever ), 7536dc6ec9eSChuck Lever 7540307cdecSChuck Lever TP_ARGS(r_xprt, req), 7556dc6ec9eSChuck Lever 7566dc6ec9eSChuck Lever TP_STRUCT__entry( 7576dc6ec9eSChuck Lever __field(unsigned int, task_id) 7586dc6ec9eSChuck Lever __field(unsigned int, client_id) 7590307cdecSChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 7600307cdecSChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 7616dc6ec9eSChuck Lever ), 7626dc6ec9eSChuck Lever 7636dc6ec9eSChuck Lever TP_fast_assign( 7646dc6ec9eSChuck Lever const struct rpc_rqst *rqst = &req->rl_slot; 7656dc6ec9eSChuck Lever 7666dc6ec9eSChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 7676dc6ec9eSChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 7680307cdecSChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 7690307cdecSChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 7706dc6ec9eSChuck Lever ), 7716dc6ec9eSChuck Lever 7720307cdecSChuck Lever TP_printk("peer=[%s]:%s task:%u@%u", 7730307cdecSChuck Lever __get_str(addr), __get_str(port), 7740307cdecSChuck Lever __entry->task_id, __entry->client_id 7753b39f52aSChuck Lever ) 7763b39f52aSChuck Lever ); 7771c443effSChuck Lever 778aba11831SChuck Lever DEFINE_RDCH_EVENT(read); 779aba11831SChuck Lever DEFINE_WRCH_EVENT(write); 780aba11831SChuck Lever DEFINE_WRCH_EVENT(reply); 78158f10ad4SChuck Lever 782ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch); 783614f3c96SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch_pullup); 784614f3c96SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch_mapped); 785ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_readch); 786ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_areadch); 787ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_writech); 788ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_replych); 789ab03eff5SChuck Lever 790ab03eff5SChuck Lever #define xprtrdma_show_chunktype(x) \ 791ab03eff5SChuck Lever __print_symbolic(x, \ 792ab03eff5SChuck Lever { rpcrdma_noch, "inline" }, \ 793614f3c96SChuck Lever { rpcrdma_noch_pullup, "pullup" }, \ 794614f3c96SChuck Lever { rpcrdma_noch_mapped, "mapped" }, \ 795ab03eff5SChuck Lever { rpcrdma_readch, "read list" }, \ 796ab03eff5SChuck Lever { rpcrdma_areadch, "*read list" }, \ 797ab03eff5SChuck Lever { rpcrdma_writech, "write list" }, \ 798ab03eff5SChuck Lever { rpcrdma_replych, "reply chunk" }) 799ab03eff5SChuck Lever 800ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_marshal, 801ab03eff5SChuck Lever TP_PROTO( 8021310051cSChuck Lever const struct rpcrdma_req *req, 803ab03eff5SChuck Lever unsigned int rtype, 804ab03eff5SChuck Lever unsigned int wtype 805ab03eff5SChuck Lever ), 806ab03eff5SChuck Lever 8071310051cSChuck Lever TP_ARGS(req, rtype, wtype), 808ab03eff5SChuck Lever 809ab03eff5SChuck Lever TP_STRUCT__entry( 810ab03eff5SChuck Lever __field(unsigned int, task_id) 811ab03eff5SChuck Lever __field(unsigned int, client_id) 812ab03eff5SChuck Lever __field(u32, xid) 813ab03eff5SChuck Lever __field(unsigned int, hdrlen) 814ab03eff5SChuck Lever __field(unsigned int, headlen) 815ab03eff5SChuck Lever __field(unsigned int, pagelen) 816ab03eff5SChuck Lever __field(unsigned int, taillen) 817ab03eff5SChuck Lever __field(unsigned int, rtype) 818ab03eff5SChuck Lever __field(unsigned int, wtype) 819ab03eff5SChuck Lever ), 820ab03eff5SChuck Lever 821ab03eff5SChuck Lever TP_fast_assign( 8221310051cSChuck Lever const struct rpc_rqst *rqst = &req->rl_slot; 8231310051cSChuck Lever 824ab03eff5SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 825ab03eff5SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 826ab03eff5SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 8271310051cSChuck Lever __entry->hdrlen = req->rl_hdrbuf.len; 828ab03eff5SChuck Lever __entry->headlen = rqst->rq_snd_buf.head[0].iov_len; 829ab03eff5SChuck Lever __entry->pagelen = rqst->rq_snd_buf.page_len; 830ab03eff5SChuck Lever __entry->taillen = rqst->rq_snd_buf.tail[0].iov_len; 831ab03eff5SChuck Lever __entry->rtype = rtype; 832ab03eff5SChuck Lever __entry->wtype = wtype; 833ab03eff5SChuck Lever ), 834ab03eff5SChuck Lever 835ab03eff5SChuck Lever TP_printk("task:%u@%u xid=0x%08x: hdr=%u xdr=%u/%u/%u %s/%s", 836ab03eff5SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 837ab03eff5SChuck Lever __entry->hdrlen, 838ab03eff5SChuck Lever __entry->headlen, __entry->pagelen, __entry->taillen, 839ab03eff5SChuck Lever xprtrdma_show_chunktype(__entry->rtype), 840ab03eff5SChuck Lever xprtrdma_show_chunktype(__entry->wtype) 841ab03eff5SChuck Lever ) 842ab03eff5SChuck Lever ); 843ab03eff5SChuck Lever 84417e4c443SChuck Lever TRACE_EVENT(xprtrdma_marshal_failed, 84517e4c443SChuck Lever TP_PROTO(const struct rpc_rqst *rqst, 84617e4c443SChuck Lever int ret 84717e4c443SChuck Lever ), 84817e4c443SChuck Lever 84917e4c443SChuck Lever TP_ARGS(rqst, ret), 85017e4c443SChuck Lever 85117e4c443SChuck Lever TP_STRUCT__entry( 85217e4c443SChuck Lever __field(unsigned int, task_id) 85317e4c443SChuck Lever __field(unsigned int, client_id) 85417e4c443SChuck Lever __field(u32, xid) 85517e4c443SChuck Lever __field(int, ret) 85617e4c443SChuck Lever ), 85717e4c443SChuck Lever 85817e4c443SChuck Lever TP_fast_assign( 85917e4c443SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 86017e4c443SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 86117e4c443SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 86217e4c443SChuck Lever __entry->ret = ret; 86317e4c443SChuck Lever ), 86417e4c443SChuck Lever 86517e4c443SChuck Lever TP_printk("task:%u@%u xid=0x%08x: ret=%d", 86617e4c443SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 86717e4c443SChuck Lever __entry->ret 86817e4c443SChuck Lever ) 86917e4c443SChuck Lever ); 87017e4c443SChuck Lever 87105eb06d8SChuck Lever TRACE_EVENT(xprtrdma_prepsend_failed, 87205eb06d8SChuck Lever TP_PROTO(const struct rpc_rqst *rqst, 87305eb06d8SChuck Lever int ret 87405eb06d8SChuck Lever ), 87505eb06d8SChuck Lever 87605eb06d8SChuck Lever TP_ARGS(rqst, ret), 87705eb06d8SChuck Lever 87805eb06d8SChuck Lever TP_STRUCT__entry( 87905eb06d8SChuck Lever __field(unsigned int, task_id) 88005eb06d8SChuck Lever __field(unsigned int, client_id) 88105eb06d8SChuck Lever __field(u32, xid) 88205eb06d8SChuck Lever __field(int, ret) 88305eb06d8SChuck Lever ), 88405eb06d8SChuck Lever 88505eb06d8SChuck Lever TP_fast_assign( 88605eb06d8SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 88705eb06d8SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 88805eb06d8SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 88905eb06d8SChuck Lever __entry->ret = ret; 89005eb06d8SChuck Lever ), 89105eb06d8SChuck Lever 89205eb06d8SChuck Lever TP_printk("task:%u@%u xid=0x%08x: ret=%d", 89305eb06d8SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 89405eb06d8SChuck Lever __entry->ret 89505eb06d8SChuck Lever ) 89605eb06d8SChuck Lever ); 89705eb06d8SChuck Lever 898ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_post_send, 899ab03eff5SChuck Lever TP_PROTO( 900bdb2ce82SChuck Lever const struct rpcrdma_req *req 901ab03eff5SChuck Lever ), 902ab03eff5SChuck Lever 903bdb2ce82SChuck Lever TP_ARGS(req), 904ab03eff5SChuck Lever 905ab03eff5SChuck Lever TP_STRUCT__entry( 906b2e7467fSChuck Lever __field(u32, cq_id) 907b2e7467fSChuck Lever __field(int, completion_id) 9080c77668dSChuck Lever __field(unsigned int, task_id) 9090c77668dSChuck Lever __field(unsigned int, client_id) 910ab03eff5SChuck Lever __field(int, num_sge) 911470443e0SChuck Lever __field(int, signaled) 912ab03eff5SChuck Lever ), 913ab03eff5SChuck Lever 914ab03eff5SChuck Lever TP_fast_assign( 9150c77668dSChuck Lever const struct rpc_rqst *rqst = &req->rl_slot; 916b2e7467fSChuck Lever const struct rpcrdma_sendctx *sc = req->rl_sendctx; 9170c77668dSChuck Lever 918b2e7467fSChuck Lever __entry->cq_id = sc->sc_cid.ci_queue_id; 919b2e7467fSChuck Lever __entry->completion_id = sc->sc_cid.ci_completion_id; 9200c77668dSChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 92110694ac9SChuck Lever __entry->client_id = rqst->rq_task->tk_client ? 92210694ac9SChuck Lever rqst->rq_task->tk_client->cl_clid : -1; 923dc15c3d5SChuck Lever __entry->num_sge = req->rl_wr.num_sge; 924dc15c3d5SChuck Lever __entry->signaled = req->rl_wr.send_flags & IB_SEND_SIGNALED; 925ab03eff5SChuck Lever ), 926ab03eff5SChuck Lever 927b2e7467fSChuck Lever TP_printk("task:%u@%u cq.id=%u cid=%d (%d SGE%s) %s", 9280c77668dSChuck Lever __entry->task_id, __entry->client_id, 929b2e7467fSChuck Lever __entry->cq_id, __entry->completion_id, 930b2e7467fSChuck Lever __entry->num_sge, (__entry->num_sge == 1 ? "" : "s"), 931bdb2ce82SChuck Lever (__entry->signaled ? "signaled" : "") 932ab03eff5SChuck Lever ) 933ab03eff5SChuck Lever ); 934ab03eff5SChuck Lever 935d9ae8134SChuck Lever TRACE_EVENT(xprtrdma_post_send_err, 936d9ae8134SChuck Lever TP_PROTO( 937d9ae8134SChuck Lever const struct rpcrdma_xprt *r_xprt, 938d9ae8134SChuck Lever const struct rpcrdma_req *req, 939d9ae8134SChuck Lever int rc 940d9ae8134SChuck Lever ), 941d9ae8134SChuck Lever 942d9ae8134SChuck Lever TP_ARGS(r_xprt, req, rc), 943d9ae8134SChuck Lever 944d9ae8134SChuck Lever TP_STRUCT__entry( 945d9ae8134SChuck Lever __field(u32, cq_id) 946d9ae8134SChuck Lever __field(unsigned int, task_id) 947d9ae8134SChuck Lever __field(unsigned int, client_id) 948d9ae8134SChuck Lever __field(int, rc) 949d9ae8134SChuck Lever ), 950d9ae8134SChuck Lever 951d9ae8134SChuck Lever TP_fast_assign( 952d9ae8134SChuck Lever const struct rpc_rqst *rqst = &req->rl_slot; 953d9ae8134SChuck Lever const struct rpcrdma_ep *ep = r_xprt->rx_ep; 954d9ae8134SChuck Lever 955d9ae8134SChuck Lever __entry->cq_id = ep ? ep->re_attr.recv_cq->res.id : 0; 956d9ae8134SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 957d9ae8134SChuck Lever __entry->client_id = rqst->rq_task->tk_client ? 958d9ae8134SChuck Lever rqst->rq_task->tk_client->cl_clid : -1; 959d9ae8134SChuck Lever __entry->rc = rc; 960d9ae8134SChuck Lever ), 961d9ae8134SChuck Lever 962d9ae8134SChuck Lever TP_printk("task:%u@%u cq.id=%u rc=%d", 963d9ae8134SChuck Lever __entry->task_id, __entry->client_id, 964d9ae8134SChuck Lever __entry->cq_id, __entry->rc 965d9ae8134SChuck Lever ) 966d9ae8134SChuck Lever ); 967d9ae8134SChuck Lever 968b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_post_recv, 969b4a7f91cSChuck Lever TP_PROTO( 9702dfdcd88SChuck Lever const struct rpcrdma_rep *rep 971b4a7f91cSChuck Lever ), 972b4a7f91cSChuck Lever 9732dfdcd88SChuck Lever TP_ARGS(rep), 974b4a7f91cSChuck Lever 975b4a7f91cSChuck Lever TP_STRUCT__entry( 976af5865d2SChuck Lever __field(u32, cq_id) 977af5865d2SChuck Lever __field(int, completion_id) 978b4a7f91cSChuck Lever ), 979b4a7f91cSChuck Lever 980b4a7f91cSChuck Lever TP_fast_assign( 981af5865d2SChuck Lever __entry->cq_id = rep->rr_cid.ci_queue_id; 982af5865d2SChuck Lever __entry->completion_id = rep->rr_cid.ci_completion_id; 983b4a7f91cSChuck Lever ), 984b4a7f91cSChuck Lever 985af5865d2SChuck Lever TP_printk("cq.id=%d cid=%d", 986af5865d2SChuck Lever __entry->cq_id, __entry->completion_id 987b4a7f91cSChuck Lever ) 988b4a7f91cSChuck Lever ); 989b4a7f91cSChuck Lever 9907c8d9e7cSChuck Lever TRACE_EVENT(xprtrdma_post_recvs, 9917c8d9e7cSChuck Lever TP_PROTO( 9927c8d9e7cSChuck Lever const struct rpcrdma_xprt *r_xprt, 993683f31c3SChuck Lever unsigned int count 9947c8d9e7cSChuck Lever ), 9957c8d9e7cSChuck Lever 996683f31c3SChuck Lever TP_ARGS(r_xprt, count), 9977c8d9e7cSChuck Lever 9987c8d9e7cSChuck Lever TP_STRUCT__entry( 99983189d15SChuck Lever __field(u32, cq_id) 10007c8d9e7cSChuck Lever __field(unsigned int, count) 10017c8d9e7cSChuck Lever __field(int, posted) 10027c8d9e7cSChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 10037c8d9e7cSChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 10047c8d9e7cSChuck Lever ), 10057c8d9e7cSChuck Lever 10067c8d9e7cSChuck Lever TP_fast_assign( 100783189d15SChuck Lever const struct rpcrdma_ep *ep = r_xprt->rx_ep; 100883189d15SChuck Lever 100983189d15SChuck Lever __entry->cq_id = ep->re_attr.recv_cq->res.id; 10107c8d9e7cSChuck Lever __entry->count = count; 101183189d15SChuck Lever __entry->posted = ep->re_receive_count; 10127c8d9e7cSChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 10137c8d9e7cSChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 10147c8d9e7cSChuck Lever ), 10157c8d9e7cSChuck Lever 1016683f31c3SChuck Lever TP_printk("peer=[%s]:%s cq.id=%d %u new recvs, %d active", 101783189d15SChuck Lever __get_str(addr), __get_str(port), __entry->cq_id, 1018683f31c3SChuck Lever __entry->count, __entry->posted 1019683f31c3SChuck Lever ) 1020683f31c3SChuck Lever ); 1021683f31c3SChuck Lever 1022683f31c3SChuck Lever TRACE_EVENT(xprtrdma_post_recvs_err, 1023683f31c3SChuck Lever TP_PROTO( 1024683f31c3SChuck Lever const struct rpcrdma_xprt *r_xprt, 1025683f31c3SChuck Lever int status 1026683f31c3SChuck Lever ), 1027683f31c3SChuck Lever 1028683f31c3SChuck Lever TP_ARGS(r_xprt, status), 1029683f31c3SChuck Lever 1030683f31c3SChuck Lever TP_STRUCT__entry( 1031683f31c3SChuck Lever __field(u32, cq_id) 1032683f31c3SChuck Lever __field(int, status) 1033683f31c3SChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 1034683f31c3SChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 1035683f31c3SChuck Lever ), 1036683f31c3SChuck Lever 1037683f31c3SChuck Lever TP_fast_assign( 1038683f31c3SChuck Lever const struct rpcrdma_ep *ep = r_xprt->rx_ep; 1039683f31c3SChuck Lever 1040683f31c3SChuck Lever __entry->cq_id = ep->re_attr.recv_cq->res.id; 1041683f31c3SChuck Lever __entry->status = status; 1042683f31c3SChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 1043683f31c3SChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 1044683f31c3SChuck Lever ), 1045683f31c3SChuck Lever 1046683f31c3SChuck Lever TP_printk("peer=[%s]:%s cq.id=%d rc=%d", 1047683f31c3SChuck Lever __get_str(addr), __get_str(port), __entry->cq_id, 1048683f31c3SChuck Lever __entry->status 1049ab03eff5SChuck Lever ) 1050ab03eff5SChuck Lever ); 1051ab03eff5SChuck Lever 105236a55edfSChuck Lever TRACE_EVENT(xprtrdma_post_linv_err, 10534b93dab3SChuck Lever TP_PROTO( 10544b93dab3SChuck Lever const struct rpcrdma_req *req, 10554b93dab3SChuck Lever int status 10564b93dab3SChuck Lever ), 10574b93dab3SChuck Lever 10584b93dab3SChuck Lever TP_ARGS(req, status), 10594b93dab3SChuck Lever 10604b93dab3SChuck Lever TP_STRUCT__entry( 106136a55edfSChuck Lever __field(unsigned int, task_id) 106236a55edfSChuck Lever __field(unsigned int, client_id) 10634b93dab3SChuck Lever __field(int, status) 10644b93dab3SChuck Lever ), 10654b93dab3SChuck Lever 10664b93dab3SChuck Lever TP_fast_assign( 106736a55edfSChuck Lever const struct rpc_task *task = req->rl_slot.rq_task; 106836a55edfSChuck Lever 106936a55edfSChuck Lever __entry->task_id = task->tk_pid; 107036a55edfSChuck Lever __entry->client_id = task->tk_client->cl_clid; 10714b93dab3SChuck Lever __entry->status = status; 10724b93dab3SChuck Lever ), 10734b93dab3SChuck Lever 107436a55edfSChuck Lever TP_printk("task:%u@%u status=%d", 107536a55edfSChuck Lever __entry->task_id, __entry->client_id, __entry->status 10764b93dab3SChuck Lever ) 10774b93dab3SChuck Lever ); 10784b93dab3SChuck Lever 1079ab03eff5SChuck Lever /** 1080ab03eff5SChuck Lever ** Completion events 1081ab03eff5SChuck Lever **/ 1082ab03eff5SChuck Lever 1083c30f259aSChuck Lever DEFINE_RECEIVE_COMPLETION_EVENT(xprtrdma_wc_receive); 1084c30f259aSChuck Lever 1085b2e7467fSChuck Lever DEFINE_COMPLETION_EVENT(xprtrdma_wc_send); 10866b147ea7SChuck Lever DEFINE_MR_COMPLETION_EVENT(xprtrdma_wc_fastreg); 10876b147ea7SChuck Lever DEFINE_MR_COMPLETION_EVENT(xprtrdma_wc_li); 10886b147ea7SChuck Lever DEFINE_MR_COMPLETION_EVENT(xprtrdma_wc_li_wake); 10896b147ea7SChuck Lever DEFINE_MR_COMPLETION_EVENT(xprtrdma_wc_li_done); 10902937fedeSChuck Lever 109153b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_alloc, 109253b2c1cbSChuck Lever TP_PROTO( 109353b2c1cbSChuck Lever const struct rpcrdma_mr *mr, 109453b2c1cbSChuck Lever int rc 109553b2c1cbSChuck Lever ), 109653b2c1cbSChuck Lever 109753b2c1cbSChuck Lever TP_ARGS(mr, rc), 109853b2c1cbSChuck Lever 109953b2c1cbSChuck Lever TP_STRUCT__entry( 110062a89501SChuck Lever __field(u32, mr_id) 110153b2c1cbSChuck Lever __field(int, rc) 110253b2c1cbSChuck Lever ), 110353b2c1cbSChuck Lever 110453b2c1cbSChuck Lever TP_fast_assign( 110513bcf7e3SChuck Lever __entry->mr_id = mr->mr_ibmr->res.id; 110653b2c1cbSChuck Lever __entry->rc = rc; 110753b2c1cbSChuck Lever ), 110853b2c1cbSChuck Lever 110962a89501SChuck Lever TP_printk("mr.id=%u: rc=%d", 111062a89501SChuck Lever __entry->mr_id, __entry->rc 111153b2c1cbSChuck Lever ) 111253b2c1cbSChuck Lever ); 111353b2c1cbSChuck Lever 111453b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_dereg, 111553b2c1cbSChuck Lever TP_PROTO( 111653b2c1cbSChuck Lever const struct rpcrdma_mr *mr, 111753b2c1cbSChuck Lever int rc 111853b2c1cbSChuck Lever ), 111953b2c1cbSChuck Lever 112053b2c1cbSChuck Lever TP_ARGS(mr, rc), 112153b2c1cbSChuck Lever 112253b2c1cbSChuck Lever TP_STRUCT__entry( 112362a89501SChuck Lever __field(u32, mr_id) 112462a89501SChuck Lever __field(int, nents) 112553b2c1cbSChuck Lever __field(u32, handle) 112653b2c1cbSChuck Lever __field(u32, length) 112753b2c1cbSChuck Lever __field(u64, offset) 112853b2c1cbSChuck Lever __field(u32, dir) 112953b2c1cbSChuck Lever __field(int, rc) 113053b2c1cbSChuck Lever ), 113153b2c1cbSChuck Lever 113253b2c1cbSChuck Lever TP_fast_assign( 113313bcf7e3SChuck Lever __entry->mr_id = mr->mr_ibmr->res.id; 113462a89501SChuck Lever __entry->nents = mr->mr_nents; 113553b2c1cbSChuck Lever __entry->handle = mr->mr_handle; 113653b2c1cbSChuck Lever __entry->length = mr->mr_length; 113753b2c1cbSChuck Lever __entry->offset = mr->mr_offset; 113853b2c1cbSChuck Lever __entry->dir = mr->mr_dir; 113953b2c1cbSChuck Lever __entry->rc = rc; 114053b2c1cbSChuck Lever ), 114153b2c1cbSChuck Lever 114262a89501SChuck Lever TP_printk("mr.id=%u nents=%d %u@0x%016llx:0x%08x (%s): rc=%d", 114362a89501SChuck Lever __entry->mr_id, __entry->nents, __entry->length, 114453b2c1cbSChuck Lever (unsigned long long)__entry->offset, __entry->handle, 114553b2c1cbSChuck Lever xprtrdma_show_direction(__entry->dir), 114653b2c1cbSChuck Lever __entry->rc 114753b2c1cbSChuck Lever ) 114853b2c1cbSChuck Lever ); 114953b2c1cbSChuck Lever 115053b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_sgerr, 115153b2c1cbSChuck Lever TP_PROTO( 115253b2c1cbSChuck Lever const struct rpcrdma_mr *mr, 115353b2c1cbSChuck Lever int sg_nents 115453b2c1cbSChuck Lever ), 115553b2c1cbSChuck Lever 115653b2c1cbSChuck Lever TP_ARGS(mr, sg_nents), 115753b2c1cbSChuck Lever 115853b2c1cbSChuck Lever TP_STRUCT__entry( 115962a89501SChuck Lever __field(u32, mr_id) 116053b2c1cbSChuck Lever __field(u64, addr) 116153b2c1cbSChuck Lever __field(u32, dir) 116253b2c1cbSChuck Lever __field(int, nents) 116353b2c1cbSChuck Lever ), 116453b2c1cbSChuck Lever 116553b2c1cbSChuck Lever TP_fast_assign( 116613bcf7e3SChuck Lever __entry->mr_id = mr->mr_ibmr->res.id; 116753b2c1cbSChuck Lever __entry->addr = mr->mr_sg->dma_address; 116853b2c1cbSChuck Lever __entry->dir = mr->mr_dir; 116953b2c1cbSChuck Lever __entry->nents = sg_nents; 117053b2c1cbSChuck Lever ), 117153b2c1cbSChuck Lever 117262a89501SChuck Lever TP_printk("mr.id=%u DMA addr=0x%llx (%s) sg_nents=%d", 117362a89501SChuck Lever __entry->mr_id, __entry->addr, 117453b2c1cbSChuck Lever xprtrdma_show_direction(__entry->dir), 117553b2c1cbSChuck Lever __entry->nents 117653b2c1cbSChuck Lever ) 117753b2c1cbSChuck Lever ); 117853b2c1cbSChuck Lever 117953b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_maperr, 118053b2c1cbSChuck Lever TP_PROTO( 118153b2c1cbSChuck Lever const struct rpcrdma_mr *mr, 118253b2c1cbSChuck Lever int num_mapped 118353b2c1cbSChuck Lever ), 118453b2c1cbSChuck Lever 118553b2c1cbSChuck Lever TP_ARGS(mr, num_mapped), 118653b2c1cbSChuck Lever 118753b2c1cbSChuck Lever TP_STRUCT__entry( 118862a89501SChuck Lever __field(u32, mr_id) 118953b2c1cbSChuck Lever __field(u64, addr) 119053b2c1cbSChuck Lever __field(u32, dir) 119153b2c1cbSChuck Lever __field(int, num_mapped) 119253b2c1cbSChuck Lever __field(int, nents) 119353b2c1cbSChuck Lever ), 119453b2c1cbSChuck Lever 119553b2c1cbSChuck Lever TP_fast_assign( 119613bcf7e3SChuck Lever __entry->mr_id = mr->mr_ibmr->res.id; 119753b2c1cbSChuck Lever __entry->addr = mr->mr_sg->dma_address; 119853b2c1cbSChuck Lever __entry->dir = mr->mr_dir; 119953b2c1cbSChuck Lever __entry->num_mapped = num_mapped; 120053b2c1cbSChuck Lever __entry->nents = mr->mr_nents; 120153b2c1cbSChuck Lever ), 120253b2c1cbSChuck Lever 120362a89501SChuck Lever TP_printk("mr.id=%u DMA addr=0x%llx (%s) nents=%d of %d", 120462a89501SChuck Lever __entry->mr_id, __entry->addr, 120553b2c1cbSChuck Lever xprtrdma_show_direction(__entry->dir), 120653b2c1cbSChuck Lever __entry->num_mapped, __entry->nents 120753b2c1cbSChuck Lever ) 120853b2c1cbSChuck Lever ); 120953b2c1cbSChuck Lever 12104ddd0fc3SChuck Lever DEFINE_MR_EVENT(fastreg); 1211d379eaa8SChuck Lever DEFINE_MR_EVENT(localinv); 12124ddd0fc3SChuck Lever DEFINE_MR_EVENT(reminv); 1213d379eaa8SChuck Lever DEFINE_MR_EVENT(map); 12147703db97SChuck Lever 12157703db97SChuck Lever DEFINE_ANON_MR_EVENT(unmap); 121658f10ad4SChuck Lever 121753b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_dma_maperr, 121853b2c1cbSChuck Lever TP_PROTO( 121953b2c1cbSChuck Lever u64 addr 122053b2c1cbSChuck Lever ), 122153b2c1cbSChuck Lever 122253b2c1cbSChuck Lever TP_ARGS(addr), 122353b2c1cbSChuck Lever 122453b2c1cbSChuck Lever TP_STRUCT__entry( 122553b2c1cbSChuck Lever __field(u64, addr) 122653b2c1cbSChuck Lever ), 122753b2c1cbSChuck Lever 122853b2c1cbSChuck Lever TP_fast_assign( 122953b2c1cbSChuck Lever __entry->addr = addr; 123053b2c1cbSChuck Lever ), 123153b2c1cbSChuck Lever 123253b2c1cbSChuck Lever TP_printk("dma addr=0x%llx\n", __entry->addr) 123353b2c1cbSChuck Lever ); 123453b2c1cbSChuck Lever 1235b4a7f91cSChuck Lever /** 1236b4a7f91cSChuck Lever ** Reply events 1237b4a7f91cSChuck Lever **/ 1238b4a7f91cSChuck Lever 1239b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_reply, 1240b4a7f91cSChuck Lever TP_PROTO( 1241b4a7f91cSChuck Lever const struct rpc_task *task, 1242b4a7f91cSChuck Lever const struct rpcrdma_rep *rep, 1243b4a7f91cSChuck Lever unsigned int credits 1244b4a7f91cSChuck Lever ), 1245b4a7f91cSChuck Lever 124603ffd924SChuck Lever TP_ARGS(task, rep, credits), 1247b4a7f91cSChuck Lever 1248b4a7f91cSChuck Lever TP_STRUCT__entry( 1249b4a7f91cSChuck Lever __field(unsigned int, task_id) 1250b4a7f91cSChuck Lever __field(unsigned int, client_id) 1251b4a7f91cSChuck Lever __field(u32, xid) 1252b4a7f91cSChuck Lever __field(unsigned int, credits) 1253b4a7f91cSChuck Lever ), 1254b4a7f91cSChuck Lever 1255b4a7f91cSChuck Lever TP_fast_assign( 1256b4a7f91cSChuck Lever __entry->task_id = task->tk_pid; 1257b4a7f91cSChuck Lever __entry->client_id = task->tk_client->cl_clid; 1258b4a7f91cSChuck Lever __entry->xid = be32_to_cpu(rep->rr_xid); 1259b4a7f91cSChuck Lever __entry->credits = credits; 1260b4a7f91cSChuck Lever ), 1261b4a7f91cSChuck Lever 126203ffd924SChuck Lever TP_printk("task:%u@%u xid=0x%08x credits=%u", 1263b4a7f91cSChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 126403ffd924SChuck Lever __entry->credits 1265b4a7f91cSChuck Lever ) 1266b4a7f91cSChuck Lever ); 1267b4a7f91cSChuck Lever 12683a9568feSChuck Lever DEFINE_REPLY_EVENT(vers); 12693a9568feSChuck Lever DEFINE_REPLY_EVENT(rqst); 12703a9568feSChuck Lever DEFINE_REPLY_EVENT(short); 12713a9568feSChuck Lever DEFINE_REPLY_EVENT(hdr); 1272b4a7f91cSChuck Lever 12733821e232SChuck Lever TRACE_EVENT(xprtrdma_err_vers, 1274e48f083eSChuck Lever TP_PROTO( 12753821e232SChuck Lever const struct rpc_rqst *rqst, 12763821e232SChuck Lever __be32 *min, 12773821e232SChuck Lever __be32 *max 1278e48f083eSChuck Lever ), 1279e48f083eSChuck Lever 12803821e232SChuck Lever TP_ARGS(rqst, min, max), 1281e48f083eSChuck Lever 1282e48f083eSChuck Lever TP_STRUCT__entry( 1283e48f083eSChuck Lever __field(unsigned int, task_id) 1284e48f083eSChuck Lever __field(unsigned int, client_id) 12853821e232SChuck Lever __field(u32, xid) 12863821e232SChuck Lever __field(u32, min) 12873821e232SChuck Lever __field(u32, max) 12883821e232SChuck Lever ), 12893821e232SChuck Lever 12903821e232SChuck Lever TP_fast_assign( 12913821e232SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 12923821e232SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 12933821e232SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 12943821e232SChuck Lever __entry->min = be32_to_cpup(min); 12953821e232SChuck Lever __entry->max = be32_to_cpup(max); 12963821e232SChuck Lever ), 12973821e232SChuck Lever 12983821e232SChuck Lever TP_printk("task:%u@%u xid=0x%08x versions=[%u, %u]", 12993821e232SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 13003821e232SChuck Lever __entry->min, __entry->max 13013821e232SChuck Lever ) 13023821e232SChuck Lever ); 13033821e232SChuck Lever 13043821e232SChuck Lever TRACE_EVENT(xprtrdma_err_chunk, 13053821e232SChuck Lever TP_PROTO( 13063821e232SChuck Lever const struct rpc_rqst *rqst 13073821e232SChuck Lever ), 13083821e232SChuck Lever 13093821e232SChuck Lever TP_ARGS(rqst), 13103821e232SChuck Lever 13113821e232SChuck Lever TP_STRUCT__entry( 13123821e232SChuck Lever __field(unsigned int, task_id) 13133821e232SChuck Lever __field(unsigned int, client_id) 1314e48f083eSChuck Lever __field(u32, xid) 1315e48f083eSChuck Lever ), 1316e48f083eSChuck Lever 1317e48f083eSChuck Lever TP_fast_assign( 13183821e232SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 13193821e232SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 13203821e232SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 1321e48f083eSChuck Lever ), 1322e48f083eSChuck Lever 13233821e232SChuck Lever TP_printk("task:%u@%u xid=0x%08x", 13243821e232SChuck Lever __entry->task_id, __entry->client_id, __entry->xid 1325e48f083eSChuck Lever ) 1326e48f083eSChuck Lever ); 1327e48f083eSChuck Lever 13283821e232SChuck Lever TRACE_EVENT(xprtrdma_err_unrecognized, 13293821e232SChuck Lever TP_PROTO( 13303821e232SChuck Lever const struct rpc_rqst *rqst, 13313821e232SChuck Lever __be32 *procedure 13323821e232SChuck Lever ), 13333821e232SChuck Lever 13343821e232SChuck Lever TP_ARGS(rqst, procedure), 13353821e232SChuck Lever 13363821e232SChuck Lever TP_STRUCT__entry( 13373821e232SChuck Lever __field(unsigned int, task_id) 13383821e232SChuck Lever __field(unsigned int, client_id) 13393821e232SChuck Lever __field(u32, xid) 13403821e232SChuck Lever __field(u32, procedure) 13413821e232SChuck Lever ), 13423821e232SChuck Lever 13433821e232SChuck Lever TP_fast_assign( 13443821e232SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 13453821e232SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 13463821e232SChuck Lever __entry->procedure = be32_to_cpup(procedure); 13473821e232SChuck Lever ), 13483821e232SChuck Lever 13493821e232SChuck Lever TP_printk("task:%u@%u xid=0x%08x procedure=%u", 13503821e232SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 13513821e232SChuck Lever __entry->procedure 13523821e232SChuck Lever ) 13533821e232SChuck Lever ); 1354e48f083eSChuck Lever 1355e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_fixup, 1356e11b7c96SChuck Lever TP_PROTO( 1357e11b7c96SChuck Lever const struct rpc_rqst *rqst, 1358d4957f01SChuck Lever unsigned long fixup 1359e11b7c96SChuck Lever ), 1360e11b7c96SChuck Lever 1361d4957f01SChuck Lever TP_ARGS(rqst, fixup), 1362e11b7c96SChuck Lever 1363e11b7c96SChuck Lever TP_STRUCT__entry( 1364e11b7c96SChuck Lever __field(unsigned int, task_id) 1365e11b7c96SChuck Lever __field(unsigned int, client_id) 1366d4957f01SChuck Lever __field(unsigned long, fixup) 1367d4957f01SChuck Lever __field(size_t, headlen) 1368d4957f01SChuck Lever __field(unsigned int, pagelen) 1369d4957f01SChuck Lever __field(size_t, taillen) 1370e11b7c96SChuck Lever ), 1371e11b7c96SChuck Lever 1372e11b7c96SChuck Lever TP_fast_assign( 1373e11b7c96SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 1374e11b7c96SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 1375d4957f01SChuck Lever __entry->fixup = fixup; 1376d4957f01SChuck Lever __entry->headlen = rqst->rq_rcv_buf.head[0].iov_len; 1377d4957f01SChuck Lever __entry->pagelen = rqst->rq_rcv_buf.page_len; 1378d4957f01SChuck Lever __entry->taillen = rqst->rq_rcv_buf.tail[0].iov_len; 1379e11b7c96SChuck Lever ), 1380e11b7c96SChuck Lever 1381d4957f01SChuck Lever TP_printk("task:%u@%u fixup=%lu xdr=%zu/%u/%zu", 1382d4957f01SChuck Lever __entry->task_id, __entry->client_id, __entry->fixup, 1383d4957f01SChuck Lever __entry->headlen, __entry->pagelen, __entry->taillen 1384e11b7c96SChuck Lever ) 1385e11b7c96SChuck Lever ); 1386e11b7c96SChuck Lever 1387e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_decode_seg, 1388e11b7c96SChuck Lever TP_PROTO( 1389e11b7c96SChuck Lever u32 handle, 1390e11b7c96SChuck Lever u32 length, 1391e11b7c96SChuck Lever u64 offset 1392e11b7c96SChuck Lever ), 1393e11b7c96SChuck Lever 1394e11b7c96SChuck Lever TP_ARGS(handle, length, offset), 1395e11b7c96SChuck Lever 1396e11b7c96SChuck Lever TP_STRUCT__entry( 1397e11b7c96SChuck Lever __field(u32, handle) 1398e11b7c96SChuck Lever __field(u32, length) 1399e11b7c96SChuck Lever __field(u64, offset) 1400e11b7c96SChuck Lever ), 1401e11b7c96SChuck Lever 1402e11b7c96SChuck Lever TP_fast_assign( 1403e11b7c96SChuck Lever __entry->handle = handle; 1404e11b7c96SChuck Lever __entry->length = length; 1405e11b7c96SChuck Lever __entry->offset = offset; 1406e11b7c96SChuck Lever ), 1407e11b7c96SChuck Lever 1408e11b7c96SChuck Lever TP_printk("%u@0x%016llx:0x%08x", 1409e11b7c96SChuck Lever __entry->length, (unsigned long long)__entry->offset, 1410e11b7c96SChuck Lever __entry->handle 1411e11b7c96SChuck Lever ) 1412e11b7c96SChuck Lever ); 1413e11b7c96SChuck Lever 14148e24e191SChuck Lever TRACE_EVENT(xprtrdma_mrs_zap, 14158e24e191SChuck Lever TP_PROTO( 14168e24e191SChuck Lever const struct rpc_task *task 14178e24e191SChuck Lever ), 14188e24e191SChuck Lever 14198e24e191SChuck Lever TP_ARGS(task), 14208e24e191SChuck Lever 14218e24e191SChuck Lever TP_STRUCT__entry( 14228e24e191SChuck Lever __field(unsigned int, task_id) 14238e24e191SChuck Lever __field(unsigned int, client_id) 14248e24e191SChuck Lever ), 14258e24e191SChuck Lever 14268e24e191SChuck Lever TP_fast_assign( 14278e24e191SChuck Lever __entry->task_id = task->tk_pid; 14288e24e191SChuck Lever __entry->client_id = task->tk_client->cl_clid; 14298e24e191SChuck Lever ), 14308e24e191SChuck Lever 14318e24e191SChuck Lever TP_printk("task:%u@%u", 14328e24e191SChuck Lever __entry->task_id, __entry->client_id 14338e24e191SChuck Lever ) 14348e24e191SChuck Lever ); 14358e24e191SChuck Lever 1436fc1eb807SChuck Lever /** 1437fc1eb807SChuck Lever ** Callback events 1438fc1eb807SChuck Lever **/ 1439fc1eb807SChuck Lever 1440fc1eb807SChuck Lever TRACE_EVENT(xprtrdma_cb_setup, 1441fc1eb807SChuck Lever TP_PROTO( 1442fc1eb807SChuck Lever const struct rpcrdma_xprt *r_xprt, 1443fc1eb807SChuck Lever unsigned int reqs 1444fc1eb807SChuck Lever ), 1445fc1eb807SChuck Lever 1446fc1eb807SChuck Lever TP_ARGS(r_xprt, reqs), 1447fc1eb807SChuck Lever 1448fc1eb807SChuck Lever TP_STRUCT__entry( 1449fc1eb807SChuck Lever __field(unsigned int, reqs) 1450fc1eb807SChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 1451fc1eb807SChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 1452fc1eb807SChuck Lever ), 1453fc1eb807SChuck Lever 1454fc1eb807SChuck Lever TP_fast_assign( 1455fc1eb807SChuck Lever __entry->reqs = reqs; 1456fc1eb807SChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 1457fc1eb807SChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 1458fc1eb807SChuck Lever ), 1459fc1eb807SChuck Lever 146083189d15SChuck Lever TP_printk("peer=[%s]:%s %u reqs", 146183189d15SChuck Lever __get_str(addr), __get_str(port), __entry->reqs 1462fc1eb807SChuck Lever ) 1463fc1eb807SChuck Lever ); 1464fc1eb807SChuck Lever 1465d11e9346SChuck Lever DEFINE_CALLBACK_EVENT(call); 1466d11e9346SChuck Lever DEFINE_CALLBACK_EVENT(reply); 146707e10308SChuck Lever 146898895edbSChuck Lever /** 146998895edbSChuck Lever ** Server-side RPC/RDMA events 147098895edbSChuck Lever **/ 147198895edbSChuck Lever 1472e979a173SChuck Lever DECLARE_EVENT_CLASS(svcrdma_accept_class, 1473e979a173SChuck Lever TP_PROTO( 1474e979a173SChuck Lever const struct svcxprt_rdma *rdma, 1475e979a173SChuck Lever long status 1476e979a173SChuck Lever ), 1477e979a173SChuck Lever 1478e979a173SChuck Lever TP_ARGS(rdma, status), 1479e979a173SChuck Lever 1480e979a173SChuck Lever TP_STRUCT__entry( 1481e979a173SChuck Lever __field(long, status) 1482e979a173SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1483e979a173SChuck Lever ), 1484e979a173SChuck Lever 1485e979a173SChuck Lever TP_fast_assign( 1486e979a173SChuck Lever __entry->status = status; 1487e979a173SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1488e979a173SChuck Lever ), 1489e979a173SChuck Lever 1490e979a173SChuck Lever TP_printk("addr=%s status=%ld", 1491e979a173SChuck Lever __get_str(addr), __entry->status 1492e979a173SChuck Lever ) 1493e979a173SChuck Lever ); 1494e979a173SChuck Lever 1495e979a173SChuck Lever #define DEFINE_ACCEPT_EVENT(name) \ 1496e979a173SChuck Lever DEFINE_EVENT(svcrdma_accept_class, svcrdma_##name##_err, \ 1497e979a173SChuck Lever TP_PROTO( \ 1498e979a173SChuck Lever const struct svcxprt_rdma *rdma, \ 1499e979a173SChuck Lever long status \ 1500e979a173SChuck Lever ), \ 1501e979a173SChuck Lever TP_ARGS(rdma, status)) 1502e979a173SChuck Lever 1503e979a173SChuck Lever DEFINE_ACCEPT_EVENT(pd); 1504e979a173SChuck Lever DEFINE_ACCEPT_EVENT(qp); 1505e979a173SChuck Lever DEFINE_ACCEPT_EVENT(fabric); 1506e979a173SChuck Lever DEFINE_ACCEPT_EVENT(initdepth); 1507e979a173SChuck Lever DEFINE_ACCEPT_EVENT(accept); 1508e979a173SChuck Lever 150998895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_MSG); 151098895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_NOMSG); 151198895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_MSGP); 151298895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_DONE); 151398895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_ERROR); 151498895edbSChuck Lever 151598895edbSChuck Lever #define show_rpcrdma_proc(x) \ 151698895edbSChuck Lever __print_symbolic(x, \ 151798895edbSChuck Lever { RDMA_MSG, "RDMA_MSG" }, \ 151898895edbSChuck Lever { RDMA_NOMSG, "RDMA_NOMSG" }, \ 151998895edbSChuck Lever { RDMA_MSGP, "RDMA_MSGP" }, \ 152098895edbSChuck Lever { RDMA_DONE, "RDMA_DONE" }, \ 152198895edbSChuck Lever { RDMA_ERROR, "RDMA_ERROR" }) 152298895edbSChuck Lever 152398895edbSChuck Lever TRACE_EVENT(svcrdma_decode_rqst, 152498895edbSChuck Lever TP_PROTO( 1525007140eeSChuck Lever const struct svc_rdma_recv_ctxt *ctxt, 152698895edbSChuck Lever __be32 *p, 152798895edbSChuck Lever unsigned int hdrlen 152898895edbSChuck Lever ), 152998895edbSChuck Lever 1530007140eeSChuck Lever TP_ARGS(ctxt, p, hdrlen), 153198895edbSChuck Lever 153298895edbSChuck Lever TP_STRUCT__entry( 1533007140eeSChuck Lever __field(u32, cq_id) 1534007140eeSChuck Lever __field(int, completion_id) 153598895edbSChuck Lever __field(u32, xid) 153698895edbSChuck Lever __field(u32, vers) 153798895edbSChuck Lever __field(u32, proc) 153898895edbSChuck Lever __field(u32, credits) 153998895edbSChuck Lever __field(unsigned int, hdrlen) 154098895edbSChuck Lever ), 154198895edbSChuck Lever 154298895edbSChuck Lever TP_fast_assign( 1543007140eeSChuck Lever __entry->cq_id = ctxt->rc_cid.ci_queue_id; 1544007140eeSChuck Lever __entry->completion_id = ctxt->rc_cid.ci_completion_id; 154598895edbSChuck Lever __entry->xid = be32_to_cpup(p++); 154698895edbSChuck Lever __entry->vers = be32_to_cpup(p++); 154798895edbSChuck Lever __entry->credits = be32_to_cpup(p++); 154898895edbSChuck Lever __entry->proc = be32_to_cpup(p); 154998895edbSChuck Lever __entry->hdrlen = hdrlen; 155098895edbSChuck Lever ), 155198895edbSChuck Lever 1552007140eeSChuck Lever TP_printk("cq.id=%u cid=%d xid=0x%08x vers=%u credits=%u proc=%s hdrlen=%u", 1553007140eeSChuck Lever __entry->cq_id, __entry->completion_id, 155498895edbSChuck Lever __entry->xid, __entry->vers, __entry->credits, 155598895edbSChuck Lever show_rpcrdma_proc(__entry->proc), __entry->hdrlen) 155698895edbSChuck Lever ); 155798895edbSChuck Lever 155827ce6294SChuck Lever TRACE_EVENT(svcrdma_decode_short_err, 155998895edbSChuck Lever TP_PROTO( 1560007140eeSChuck Lever const struct svc_rdma_recv_ctxt *ctxt, 156198895edbSChuck Lever unsigned int hdrlen 156298895edbSChuck Lever ), 156398895edbSChuck Lever 1564007140eeSChuck Lever TP_ARGS(ctxt, hdrlen), 156598895edbSChuck Lever 156698895edbSChuck Lever TP_STRUCT__entry( 1567007140eeSChuck Lever __field(u32, cq_id) 1568007140eeSChuck Lever __field(int, completion_id) 156998895edbSChuck Lever __field(unsigned int, hdrlen) 157098895edbSChuck Lever ), 157198895edbSChuck Lever 157298895edbSChuck Lever TP_fast_assign( 1573007140eeSChuck Lever __entry->cq_id = ctxt->rc_cid.ci_queue_id; 1574007140eeSChuck Lever __entry->completion_id = ctxt->rc_cid.ci_completion_id; 157598895edbSChuck Lever __entry->hdrlen = hdrlen; 157698895edbSChuck Lever ), 157798895edbSChuck Lever 1578007140eeSChuck Lever TP_printk("cq.id=%u cid=%d hdrlen=%u", 1579007140eeSChuck Lever __entry->cq_id, __entry->completion_id, 1580007140eeSChuck Lever __entry->hdrlen) 158198895edbSChuck Lever ); 158298895edbSChuck Lever 158398895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_badreq_event, 158498895edbSChuck Lever TP_PROTO( 1585007140eeSChuck Lever const struct svc_rdma_recv_ctxt *ctxt, 158698895edbSChuck Lever __be32 *p 158798895edbSChuck Lever ), 158898895edbSChuck Lever 1589007140eeSChuck Lever TP_ARGS(ctxt, p), 159098895edbSChuck Lever 159198895edbSChuck Lever TP_STRUCT__entry( 1592007140eeSChuck Lever __field(u32, cq_id) 1593007140eeSChuck Lever __field(int, completion_id) 159498895edbSChuck Lever __field(u32, xid) 159598895edbSChuck Lever __field(u32, vers) 159698895edbSChuck Lever __field(u32, proc) 159798895edbSChuck Lever __field(u32, credits) 159898895edbSChuck Lever ), 159998895edbSChuck Lever 160098895edbSChuck Lever TP_fast_assign( 1601007140eeSChuck Lever __entry->cq_id = ctxt->rc_cid.ci_queue_id; 1602007140eeSChuck Lever __entry->completion_id = ctxt->rc_cid.ci_completion_id; 160398895edbSChuck Lever __entry->xid = be32_to_cpup(p++); 160498895edbSChuck Lever __entry->vers = be32_to_cpup(p++); 160598895edbSChuck Lever __entry->credits = be32_to_cpup(p++); 160698895edbSChuck Lever __entry->proc = be32_to_cpup(p); 160798895edbSChuck Lever ), 160898895edbSChuck Lever 1609007140eeSChuck Lever TP_printk("cq.id=%u cid=%d xid=0x%08x vers=%u credits=%u proc=%u", 1610007140eeSChuck Lever __entry->cq_id, __entry->completion_id, 161198895edbSChuck Lever __entry->xid, __entry->vers, __entry->credits, __entry->proc) 161298895edbSChuck Lever ); 161398895edbSChuck Lever 161498895edbSChuck Lever #define DEFINE_BADREQ_EVENT(name) \ 161527ce6294SChuck Lever DEFINE_EVENT(svcrdma_badreq_event, \ 161627ce6294SChuck Lever svcrdma_decode_##name##_err, \ 161798895edbSChuck Lever TP_PROTO( \ 1618007140eeSChuck Lever const struct svc_rdma_recv_ctxt *ctxt, \ 161998895edbSChuck Lever __be32 *p \ 162098895edbSChuck Lever ), \ 1621007140eeSChuck Lever TP_ARGS(ctxt, p)) 162298895edbSChuck Lever 162398895edbSChuck Lever DEFINE_BADREQ_EVENT(badvers); 162498895edbSChuck Lever DEFINE_BADREQ_EVENT(drop); 162598895edbSChuck Lever DEFINE_BADREQ_EVENT(badproc); 162698895edbSChuck Lever DEFINE_BADREQ_EVENT(parse); 162798895edbSChuck Lever 16286911f3e1SChuck Lever TRACE_EVENT(svcrdma_encode_wseg, 16296911f3e1SChuck Lever TP_PROTO( 16306911f3e1SChuck Lever const struct svc_rdma_send_ctxt *ctxt, 16316911f3e1SChuck Lever u32 segno, 16326911f3e1SChuck Lever u32 handle, 16336911f3e1SChuck Lever u32 length, 16346911f3e1SChuck Lever u64 offset 16356911f3e1SChuck Lever ), 16366911f3e1SChuck Lever 16376911f3e1SChuck Lever TP_ARGS(ctxt, segno, handle, length, offset), 16386911f3e1SChuck Lever 16396911f3e1SChuck Lever TP_STRUCT__entry( 16406911f3e1SChuck Lever __field(u32, cq_id) 16416911f3e1SChuck Lever __field(int, completion_id) 16426911f3e1SChuck Lever __field(u32, segno) 16436911f3e1SChuck Lever __field(u32, handle) 16446911f3e1SChuck Lever __field(u32, length) 16456911f3e1SChuck Lever __field(u64, offset) 16466911f3e1SChuck Lever ), 16476911f3e1SChuck Lever 16486911f3e1SChuck Lever TP_fast_assign( 16496911f3e1SChuck Lever __entry->cq_id = ctxt->sc_cid.ci_queue_id; 16506911f3e1SChuck Lever __entry->completion_id = ctxt->sc_cid.ci_completion_id; 16516911f3e1SChuck Lever __entry->segno = segno; 16526911f3e1SChuck Lever __entry->handle = handle; 16536911f3e1SChuck Lever __entry->length = length; 16546911f3e1SChuck Lever __entry->offset = offset; 16556911f3e1SChuck Lever ), 16566911f3e1SChuck Lever 16576911f3e1SChuck Lever TP_printk("cq_id=%u cid=%d segno=%u %u@0x%016llx:0x%08x", 16586911f3e1SChuck Lever __entry->cq_id, __entry->completion_id, 16596911f3e1SChuck Lever __entry->segno, __entry->length, 16606911f3e1SChuck Lever (unsigned long long)__entry->offset, __entry->handle 16616911f3e1SChuck Lever ) 16626911f3e1SChuck Lever ); 16636911f3e1SChuck Lever 166478147ca8SChuck Lever TRACE_EVENT(svcrdma_decode_rseg, 166578147ca8SChuck Lever TP_PROTO( 166678147ca8SChuck Lever const struct rpc_rdma_cid *cid, 166778147ca8SChuck Lever const struct svc_rdma_chunk *chunk, 166878147ca8SChuck Lever const struct svc_rdma_segment *segment 166978147ca8SChuck Lever ), 167078147ca8SChuck Lever 167178147ca8SChuck Lever TP_ARGS(cid, chunk, segment), 167278147ca8SChuck Lever 167378147ca8SChuck Lever TP_STRUCT__entry( 167478147ca8SChuck Lever __field(u32, cq_id) 167578147ca8SChuck Lever __field(int, completion_id) 167678147ca8SChuck Lever __field(u32, segno) 167778147ca8SChuck Lever __field(u32, position) 167878147ca8SChuck Lever __field(u32, handle) 167978147ca8SChuck Lever __field(u32, length) 168078147ca8SChuck Lever __field(u64, offset) 168178147ca8SChuck Lever ), 168278147ca8SChuck Lever 168378147ca8SChuck Lever TP_fast_assign( 168478147ca8SChuck Lever __entry->cq_id = cid->ci_queue_id; 168578147ca8SChuck Lever __entry->completion_id = cid->ci_completion_id; 168678147ca8SChuck Lever __entry->segno = chunk->ch_segcount; 168778147ca8SChuck Lever __entry->position = chunk->ch_position; 168878147ca8SChuck Lever __entry->handle = segment->rs_handle; 168978147ca8SChuck Lever __entry->length = segment->rs_length; 169078147ca8SChuck Lever __entry->offset = segment->rs_offset; 169178147ca8SChuck Lever ), 169278147ca8SChuck Lever 169378147ca8SChuck Lever TP_printk("cq_id=%u cid=%d segno=%u position=%u %u@0x%016llx:0x%08x", 169478147ca8SChuck Lever __entry->cq_id, __entry->completion_id, 169578147ca8SChuck Lever __entry->segno, __entry->position, __entry->length, 169678147ca8SChuck Lever (unsigned long long)__entry->offset, __entry->handle 169778147ca8SChuck Lever ) 169878147ca8SChuck Lever ); 169978147ca8SChuck Lever 170078147ca8SChuck Lever TRACE_EVENT(svcrdma_decode_wseg, 170178147ca8SChuck Lever TP_PROTO( 170278147ca8SChuck Lever const struct rpc_rdma_cid *cid, 170378147ca8SChuck Lever const struct svc_rdma_chunk *chunk, 170478147ca8SChuck Lever u32 segno 170578147ca8SChuck Lever ), 170678147ca8SChuck Lever 170778147ca8SChuck Lever TP_ARGS(cid, chunk, segno), 170878147ca8SChuck Lever 170978147ca8SChuck Lever TP_STRUCT__entry( 171078147ca8SChuck Lever __field(u32, cq_id) 171178147ca8SChuck Lever __field(int, completion_id) 171278147ca8SChuck Lever __field(u32, segno) 171378147ca8SChuck Lever __field(u32, handle) 171478147ca8SChuck Lever __field(u32, length) 171578147ca8SChuck Lever __field(u64, offset) 171678147ca8SChuck Lever ), 171778147ca8SChuck Lever 171878147ca8SChuck Lever TP_fast_assign( 171978147ca8SChuck Lever const struct svc_rdma_segment *segment = 172078147ca8SChuck Lever &chunk->ch_segments[segno]; 172178147ca8SChuck Lever 172278147ca8SChuck Lever __entry->cq_id = cid->ci_queue_id; 172378147ca8SChuck Lever __entry->completion_id = cid->ci_completion_id; 172478147ca8SChuck Lever __entry->segno = segno; 172578147ca8SChuck Lever __entry->handle = segment->rs_handle; 172678147ca8SChuck Lever __entry->length = segment->rs_length; 172778147ca8SChuck Lever __entry->offset = segment->rs_offset; 172878147ca8SChuck Lever ), 172978147ca8SChuck Lever 173078147ca8SChuck Lever TP_printk("cq_id=%u cid=%d segno=%u %u@0x%016llx:0x%08x", 173178147ca8SChuck Lever __entry->cq_id, __entry->completion_id, 173278147ca8SChuck Lever __entry->segno, __entry->length, 173378147ca8SChuck Lever (unsigned long long)__entry->offset, __entry->handle 173478147ca8SChuck Lever ) 173578147ca8SChuck Lever ); 173678147ca8SChuck Lever 173798895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_error_event, 173898895edbSChuck Lever TP_PROTO( 173998895edbSChuck Lever __be32 xid 174098895edbSChuck Lever ), 174198895edbSChuck Lever 174298895edbSChuck Lever TP_ARGS(xid), 174398895edbSChuck Lever 174498895edbSChuck Lever TP_STRUCT__entry( 174598895edbSChuck Lever __field(u32, xid) 174698895edbSChuck Lever ), 174798895edbSChuck Lever 174898895edbSChuck Lever TP_fast_assign( 174998895edbSChuck Lever __entry->xid = be32_to_cpu(xid); 175098895edbSChuck Lever ), 175198895edbSChuck Lever 175298895edbSChuck Lever TP_printk("xid=0x%08x", 175398895edbSChuck Lever __entry->xid 175498895edbSChuck Lever ) 175598895edbSChuck Lever ); 175698895edbSChuck Lever 175798895edbSChuck Lever #define DEFINE_ERROR_EVENT(name) \ 175898895edbSChuck Lever DEFINE_EVENT(svcrdma_error_event, svcrdma_err_##name, \ 175998895edbSChuck Lever TP_PROTO( \ 176098895edbSChuck Lever __be32 xid \ 176198895edbSChuck Lever ), \ 176298895edbSChuck Lever TP_ARGS(xid)) 176398895edbSChuck Lever 176498895edbSChuck Lever DEFINE_ERROR_EVENT(vers); 176598895edbSChuck Lever DEFINE_ERROR_EVENT(chunk); 176698895edbSChuck Lever 1767bd2abef3SChuck Lever /** 1768bd2abef3SChuck Lever ** Server-side RDMA API events 1769bd2abef3SChuck Lever **/ 1770bd2abef3SChuck Lever 1771832b2cb9SChuck Lever DECLARE_EVENT_CLASS(svcrdma_dma_map_class, 1772bd2abef3SChuck Lever TP_PROTO( 1773bd2abef3SChuck Lever const struct svcxprt_rdma *rdma, 1774832b2cb9SChuck Lever u64 dma_addr, 1775832b2cb9SChuck Lever u32 length 1776bd2abef3SChuck Lever ), 1777bd2abef3SChuck Lever 1778832b2cb9SChuck Lever TP_ARGS(rdma, dma_addr, length), 1779bd2abef3SChuck Lever 1780bd2abef3SChuck Lever TP_STRUCT__entry( 1781832b2cb9SChuck Lever __field(u64, dma_addr) 1782832b2cb9SChuck Lever __field(u32, length) 1783bd2abef3SChuck Lever __string(device, rdma->sc_cm_id->device->name) 1784bd2abef3SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1785bd2abef3SChuck Lever ), 1786bd2abef3SChuck Lever 1787bd2abef3SChuck Lever TP_fast_assign( 1788832b2cb9SChuck Lever __entry->dma_addr = dma_addr; 1789832b2cb9SChuck Lever __entry->length = length; 1790bd2abef3SChuck Lever __assign_str(device, rdma->sc_cm_id->device->name); 1791bd2abef3SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1792bd2abef3SChuck Lever ), 1793bd2abef3SChuck Lever 1794832b2cb9SChuck Lever TP_printk("addr=%s device=%s dma_addr=%llu length=%u", 1795832b2cb9SChuck Lever __get_str(addr), __get_str(device), 1796832b2cb9SChuck Lever __entry->dma_addr, __entry->length 1797bd2abef3SChuck Lever ) 1798bd2abef3SChuck Lever ); 1799bd2abef3SChuck Lever 1800832b2cb9SChuck Lever #define DEFINE_SVC_DMA_EVENT(name) \ 1801832b2cb9SChuck Lever DEFINE_EVENT(svcrdma_dma_map_class, svcrdma_##name, \ 1802832b2cb9SChuck Lever TP_PROTO( \ 1803832b2cb9SChuck Lever const struct svcxprt_rdma *rdma,\ 1804832b2cb9SChuck Lever u64 dma_addr, \ 1805832b2cb9SChuck Lever u32 length \ 1806832b2cb9SChuck Lever ), \ 1807832b2cb9SChuck Lever TP_ARGS(rdma, dma_addr, length)) 1808832b2cb9SChuck Lever 1809832b2cb9SChuck Lever DEFINE_SVC_DMA_EVENT(dma_map_page); 18102371bcc0SChuck Lever DEFINE_SVC_DMA_EVENT(dma_map_err); 1811832b2cb9SChuck Lever DEFINE_SVC_DMA_EVENT(dma_unmap_page); 1812832b2cb9SChuck Lever 18132abfbe7eSChuck Lever TRACE_EVENT(svcrdma_dma_map_rw_err, 1814bd2abef3SChuck Lever TP_PROTO( 1815bd2abef3SChuck Lever const struct svcxprt_rdma *rdma, 18162abfbe7eSChuck Lever unsigned int nents, 1817bd2abef3SChuck Lever int status 1818bd2abef3SChuck Lever ), 1819bd2abef3SChuck Lever 18202abfbe7eSChuck Lever TP_ARGS(rdma, nents, status), 1821bd2abef3SChuck Lever 1822bd2abef3SChuck Lever TP_STRUCT__entry( 1823bd2abef3SChuck Lever __field(int, status) 18242abfbe7eSChuck Lever __field(unsigned int, nents) 1825bd2abef3SChuck Lever __string(device, rdma->sc_cm_id->device->name) 1826bd2abef3SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1827bd2abef3SChuck Lever ), 1828bd2abef3SChuck Lever 1829bd2abef3SChuck Lever TP_fast_assign( 1830bd2abef3SChuck Lever __entry->status = status; 18312abfbe7eSChuck Lever __entry->nents = nents; 1832bd2abef3SChuck Lever __assign_str(device, rdma->sc_cm_id->device->name); 1833bd2abef3SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1834bd2abef3SChuck Lever ), 1835bd2abef3SChuck Lever 18362abfbe7eSChuck Lever TP_printk("addr=%s device=%s nents=%u status=%d", 18372abfbe7eSChuck Lever __get_str(addr), __get_str(device), __entry->nents, 18382abfbe7eSChuck Lever __entry->status 1839bd2abef3SChuck Lever ) 1840bd2abef3SChuck Lever ); 1841bd2abef3SChuck Lever 1842f4e53e1cSChuck Lever TRACE_EVENT(svcrdma_no_rwctx_err, 1843f4e53e1cSChuck Lever TP_PROTO( 1844f4e53e1cSChuck Lever const struct svcxprt_rdma *rdma, 1845f4e53e1cSChuck Lever unsigned int num_sges 1846f4e53e1cSChuck Lever ), 1847f4e53e1cSChuck Lever 1848f4e53e1cSChuck Lever TP_ARGS(rdma, num_sges), 1849f4e53e1cSChuck Lever 1850f4e53e1cSChuck Lever TP_STRUCT__entry( 1851f4e53e1cSChuck Lever __field(unsigned int, num_sges) 1852f4e53e1cSChuck Lever __string(device, rdma->sc_cm_id->device->name) 1853f4e53e1cSChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1854f4e53e1cSChuck Lever ), 1855f4e53e1cSChuck Lever 1856f4e53e1cSChuck Lever TP_fast_assign( 1857f4e53e1cSChuck Lever __entry->num_sges = num_sges; 1858f4e53e1cSChuck Lever __assign_str(device, rdma->sc_cm_id->device->name); 1859f4e53e1cSChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1860f4e53e1cSChuck Lever ), 1861f4e53e1cSChuck Lever 1862f4e53e1cSChuck Lever TP_printk("addr=%s device=%s num_sges=%d", 1863f4e53e1cSChuck Lever __get_str(addr), __get_str(device), __entry->num_sges 1864f4e53e1cSChuck Lever ) 1865f4e53e1cSChuck Lever ); 1866f4e53e1cSChuck Lever 18679d200638SChuck Lever TRACE_EVENT(svcrdma_page_overrun_err, 18689d200638SChuck Lever TP_PROTO( 18699d200638SChuck Lever const struct svcxprt_rdma *rdma, 18709d200638SChuck Lever const struct svc_rqst *rqst, 18719d200638SChuck Lever unsigned int pageno 18729d200638SChuck Lever ), 18739d200638SChuck Lever 18749d200638SChuck Lever TP_ARGS(rdma, rqst, pageno), 18759d200638SChuck Lever 18769d200638SChuck Lever TP_STRUCT__entry( 18779d200638SChuck Lever __field(unsigned int, pageno) 18789d200638SChuck Lever __field(u32, xid) 18799d200638SChuck Lever __string(device, rdma->sc_cm_id->device->name) 18809d200638SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 18819d200638SChuck Lever ), 18829d200638SChuck Lever 18839d200638SChuck Lever TP_fast_assign( 18849d200638SChuck Lever __entry->pageno = pageno; 18859d200638SChuck Lever __entry->xid = __be32_to_cpu(rqst->rq_xid); 18869d200638SChuck Lever __assign_str(device, rdma->sc_cm_id->device->name); 18879d200638SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 18889d200638SChuck Lever ), 18899d200638SChuck Lever 18909d200638SChuck Lever TP_printk("addr=%s device=%s xid=0x%08x pageno=%u", __get_str(addr), 18919d200638SChuck Lever __get_str(device), __entry->xid, __entry->pageno 18929d200638SChuck Lever ) 18939d200638SChuck Lever ); 18949d200638SChuck Lever 1895dbc17acdSChuck Lever TRACE_EVENT(svcrdma_small_wrch_err, 1896dbc17acdSChuck Lever TP_PROTO( 1897dbc17acdSChuck Lever const struct svcxprt_rdma *rdma, 1898dbc17acdSChuck Lever unsigned int remaining, 1899dbc17acdSChuck Lever unsigned int seg_no, 1900dbc17acdSChuck Lever unsigned int num_segs 1901dbc17acdSChuck Lever ), 1902dbc17acdSChuck Lever 1903dbc17acdSChuck Lever TP_ARGS(rdma, remaining, seg_no, num_segs), 1904dbc17acdSChuck Lever 1905dbc17acdSChuck Lever TP_STRUCT__entry( 1906dbc17acdSChuck Lever __field(unsigned int, remaining) 1907dbc17acdSChuck Lever __field(unsigned int, seg_no) 1908dbc17acdSChuck Lever __field(unsigned int, num_segs) 1909dbc17acdSChuck Lever __string(device, rdma->sc_cm_id->device->name) 1910dbc17acdSChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1911dbc17acdSChuck Lever ), 1912dbc17acdSChuck Lever 1913dbc17acdSChuck Lever TP_fast_assign( 1914dbc17acdSChuck Lever __entry->remaining = remaining; 1915dbc17acdSChuck Lever __entry->seg_no = seg_no; 1916dbc17acdSChuck Lever __entry->num_segs = num_segs; 1917dbc17acdSChuck Lever __assign_str(device, rdma->sc_cm_id->device->name); 1918dbc17acdSChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1919dbc17acdSChuck Lever ), 1920dbc17acdSChuck Lever 1921dbc17acdSChuck Lever TP_printk("addr=%s device=%s remaining=%u seg_no=%u num_segs=%u", 1922dbc17acdSChuck Lever __get_str(addr), __get_str(device), __entry->remaining, 1923dbc17acdSChuck Lever __entry->seg_no, __entry->num_segs 1924dbc17acdSChuck Lever ) 1925dbc17acdSChuck Lever ); 1926dbc17acdSChuck Lever 19270dabe948SChuck Lever TRACE_EVENT(svcrdma_send_pullup, 19280dabe948SChuck Lever TP_PROTO( 19299d0b09d5SChuck Lever const struct svc_rdma_send_ctxt *ctxt, 19309d0b09d5SChuck Lever unsigned int msglen 19310dabe948SChuck Lever ), 19320dabe948SChuck Lever 19339d0b09d5SChuck Lever TP_ARGS(ctxt, msglen), 19340dabe948SChuck Lever 19350dabe948SChuck Lever TP_STRUCT__entry( 19369d0b09d5SChuck Lever __field(u32, cq_id) 19379d0b09d5SChuck Lever __field(int, completion_id) 19389d0b09d5SChuck Lever __field(unsigned int, hdrlen) 19399d0b09d5SChuck Lever __field(unsigned int, msglen) 19400dabe948SChuck Lever ), 19410dabe948SChuck Lever 19420dabe948SChuck Lever TP_fast_assign( 19439d0b09d5SChuck Lever __entry->cq_id = ctxt->sc_cid.ci_queue_id; 19449d0b09d5SChuck Lever __entry->completion_id = ctxt->sc_cid.ci_completion_id; 19459d0b09d5SChuck Lever __entry->hdrlen = ctxt->sc_hdrbuf.len, 19469d0b09d5SChuck Lever __entry->msglen = msglen; 19470dabe948SChuck Lever ), 19480dabe948SChuck Lever 19499d0b09d5SChuck Lever TP_printk("cq_id=%u cid=%d hdr=%u msg=%u (total %u)", 19509d0b09d5SChuck Lever __entry->cq_id, __entry->completion_id, 19519d0b09d5SChuck Lever __entry->hdrlen, __entry->msglen, 19529d0b09d5SChuck Lever __entry->hdrlen + __entry->msglen) 19530dabe948SChuck Lever ); 19540dabe948SChuck Lever 19553f8f25c6SChuck Lever TRACE_EVENT(svcrdma_send_err, 1956bd2abef3SChuck Lever TP_PROTO( 1957bd2abef3SChuck Lever const struct svc_rqst *rqst, 1958bd2abef3SChuck Lever int status 1959bd2abef3SChuck Lever ), 1960bd2abef3SChuck Lever 1961bd2abef3SChuck Lever TP_ARGS(rqst, status), 1962bd2abef3SChuck Lever 1963bd2abef3SChuck Lever TP_STRUCT__entry( 1964bd2abef3SChuck Lever __field(int, status) 1965bd2abef3SChuck Lever __field(u32, xid) 1966bd2abef3SChuck Lever __string(addr, rqst->rq_xprt->xpt_remotebuf) 1967bd2abef3SChuck Lever ), 1968bd2abef3SChuck Lever 1969bd2abef3SChuck Lever TP_fast_assign( 1970bd2abef3SChuck Lever __entry->status = status; 1971bd2abef3SChuck Lever __entry->xid = __be32_to_cpu(rqst->rq_xid); 1972bd2abef3SChuck Lever __assign_str(addr, rqst->rq_xprt->xpt_remotebuf); 1973bd2abef3SChuck Lever ), 1974bd2abef3SChuck Lever 19753f8f25c6SChuck Lever TP_printk("addr=%s xid=0x%08x status=%d", __get_str(addr), 1976bd2abef3SChuck Lever __entry->xid, __entry->status 1977bd2abef3SChuck Lever ) 1978bd2abef3SChuck Lever ); 1979bd2abef3SChuck Lever 1980bd2abef3SChuck Lever TRACE_EVENT(svcrdma_post_send, 1981bd2abef3SChuck Lever TP_PROTO( 198217f70f8dSChuck Lever const struct svc_rdma_send_ctxt *ctxt 1983bd2abef3SChuck Lever ), 1984bd2abef3SChuck Lever 198517f70f8dSChuck Lever TP_ARGS(ctxt), 1986bd2abef3SChuck Lever 1987bd2abef3SChuck Lever TP_STRUCT__entry( 198817f70f8dSChuck Lever __field(u32, cq_id) 198917f70f8dSChuck Lever __field(int, completion_id) 1990bd2abef3SChuck Lever __field(unsigned int, num_sge) 1991bd2abef3SChuck Lever __field(u32, inv_rkey) 1992bd2abef3SChuck Lever ), 1993bd2abef3SChuck Lever 1994bd2abef3SChuck Lever TP_fast_assign( 199517f70f8dSChuck Lever const struct ib_send_wr *wr = &ctxt->sc_send_wr; 199617f70f8dSChuck Lever 199717f70f8dSChuck Lever __entry->cq_id = ctxt->sc_cid.ci_queue_id; 199817f70f8dSChuck Lever __entry->completion_id = ctxt->sc_cid.ci_completion_id; 1999bd2abef3SChuck Lever __entry->num_sge = wr->num_sge; 2000bd2abef3SChuck Lever __entry->inv_rkey = (wr->opcode == IB_WR_SEND_WITH_INV) ? 2001bd2abef3SChuck Lever wr->ex.invalidate_rkey : 0; 2002bd2abef3SChuck Lever ), 2003bd2abef3SChuck Lever 200417f70f8dSChuck Lever TP_printk("cq_id=%u cid=%d num_sge=%u inv_rkey=0x%08x", 200517f70f8dSChuck Lever __entry->cq_id, __entry->completion_id, 200617f70f8dSChuck Lever __entry->num_sge, __entry->inv_rkey 2007bd2abef3SChuck Lever ) 2008bd2abef3SChuck Lever ); 2009bd2abef3SChuck Lever 2010eef2d8d4SChuck Lever DEFINE_SEND_COMPLETION_EVENT(svcrdma_wc_send); 2011eef2d8d4SChuck Lever DEFINE_SEND_FLUSH_EVENT(svcrdma_wc_send_flush); 2012eef2d8d4SChuck Lever DEFINE_SEND_FLUSH_EVENT(svcrdma_wc_send_err); 2013bd2abef3SChuck Lever 2014bd2abef3SChuck Lever TRACE_EVENT(svcrdma_post_recv, 2015bd2abef3SChuck Lever TP_PROTO( 20169b3bcf8cSChuck Lever const struct svc_rdma_recv_ctxt *ctxt 2017bd2abef3SChuck Lever ), 2018bd2abef3SChuck Lever 20199b3bcf8cSChuck Lever TP_ARGS(ctxt), 2020bd2abef3SChuck Lever 2021bd2abef3SChuck Lever TP_STRUCT__entry( 20229b3bcf8cSChuck Lever __field(u32, cq_id) 20239b3bcf8cSChuck Lever __field(int, completion_id) 2024bd2abef3SChuck Lever ), 2025bd2abef3SChuck Lever 2026bd2abef3SChuck Lever TP_fast_assign( 20279b3bcf8cSChuck Lever __entry->cq_id = ctxt->rc_cid.ci_queue_id; 20289b3bcf8cSChuck Lever __entry->completion_id = ctxt->rc_cid.ci_completion_id; 2029bd2abef3SChuck Lever ), 2030bd2abef3SChuck Lever 20319b3bcf8cSChuck Lever TP_printk("cq.id=%d cid=%d", 20329b3bcf8cSChuck Lever __entry->cq_id, __entry->completion_id 2033bd2abef3SChuck Lever ) 2034bd2abef3SChuck Lever ); 2035bd2abef3SChuck Lever 20368dcc5721SChuck Lever DEFINE_RECEIVE_SUCCESS_EVENT(svcrdma_wc_recv); 20378dcc5721SChuck Lever DEFINE_RECEIVE_FLUSH_EVENT(svcrdma_wc_recv_flush); 20388dcc5721SChuck Lever DEFINE_RECEIVE_FLUSH_EVENT(svcrdma_wc_recv_err); 20399b3bcf8cSChuck Lever 20409b3bcf8cSChuck Lever TRACE_EVENT(svcrdma_rq_post_err, 2041bd2abef3SChuck Lever TP_PROTO( 20429b3bcf8cSChuck Lever const struct svcxprt_rdma *rdma, 20439b3bcf8cSChuck Lever int status 2044bd2abef3SChuck Lever ), 2045bd2abef3SChuck Lever 20469b3bcf8cSChuck Lever TP_ARGS(rdma, status), 2047bd2abef3SChuck Lever 2048bd2abef3SChuck Lever TP_STRUCT__entry( 20499b3bcf8cSChuck Lever __field(int, status) 20509b3bcf8cSChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 2051bd2abef3SChuck Lever ), 2052bd2abef3SChuck Lever 2053bd2abef3SChuck Lever TP_fast_assign( 20549b3bcf8cSChuck Lever __entry->status = status; 20559b3bcf8cSChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 2056bd2abef3SChuck Lever ), 2057bd2abef3SChuck Lever 20589b3bcf8cSChuck Lever TP_printk("addr=%s status=%d", 20599b3bcf8cSChuck Lever __get_str(addr), __entry->status 2060bd2abef3SChuck Lever ) 2061bd2abef3SChuck Lever ); 2062bd2abef3SChuck Lever 2063b704be09SChuck Lever DECLARE_EVENT_CLASS(svcrdma_post_chunk_class, 2064bd2abef3SChuck Lever TP_PROTO( 20656787f0beSChuck Lever const struct rpc_rdma_cid *cid, 2066e28b4fc6SChuck Lever int sqecount 2067bd2abef3SChuck Lever ), 2068bd2abef3SChuck Lever 20696787f0beSChuck Lever TP_ARGS(cid, sqecount), 2070bd2abef3SChuck Lever 2071bd2abef3SChuck Lever TP_STRUCT__entry( 20726787f0beSChuck Lever __field(u32, cq_id) 20736787f0beSChuck Lever __field(int, completion_id) 2074bd2abef3SChuck Lever __field(int, sqecount) 2075bd2abef3SChuck Lever ), 2076bd2abef3SChuck Lever 2077bd2abef3SChuck Lever TP_fast_assign( 20786787f0beSChuck Lever __entry->cq_id = cid->ci_queue_id; 20796787f0beSChuck Lever __entry->completion_id = cid->ci_completion_id; 2080bd2abef3SChuck Lever __entry->sqecount = sqecount; 2081bd2abef3SChuck Lever ), 2082bd2abef3SChuck Lever 20836787f0beSChuck Lever TP_printk("cq.id=%u cid=%d sqecount=%d", 20846787f0beSChuck Lever __entry->cq_id, __entry->completion_id, 20856787f0beSChuck Lever __entry->sqecount 2086bd2abef3SChuck Lever ) 2087bd2abef3SChuck Lever ); 2088bd2abef3SChuck Lever 2089b704be09SChuck Lever #define DEFINE_POST_CHUNK_EVENT(name) \ 2090b704be09SChuck Lever DEFINE_EVENT(svcrdma_post_chunk_class, \ 2091b704be09SChuck Lever svcrdma_post_##name##_chunk, \ 2092b704be09SChuck Lever TP_PROTO( \ 2093b704be09SChuck Lever const struct rpc_rdma_cid *cid, \ 2094b704be09SChuck Lever int sqecount \ 2095b704be09SChuck Lever ), \ 2096b704be09SChuck Lever TP_ARGS(cid, sqecount)) 2097b704be09SChuck Lever 2098b704be09SChuck Lever DEFINE_POST_CHUNK_EVENT(read); 2099b704be09SChuck Lever DEFINE_POST_CHUNK_EVENT(write); 2100b704be09SChuck Lever DEFINE_POST_CHUNK_EVENT(reply); 2101b704be09SChuck Lever 2102*45f13584SChuck Lever TRACE_EVENT(svcrdma_wc_read, 2103*45f13584SChuck Lever TP_PROTO( 2104*45f13584SChuck Lever const struct ib_wc *wc, 2105*45f13584SChuck Lever const struct rpc_rdma_cid *cid, 2106*45f13584SChuck Lever unsigned int totalbytes, 2107*45f13584SChuck Lever const ktime_t posttime 2108*45f13584SChuck Lever ), 2109*45f13584SChuck Lever 2110*45f13584SChuck Lever TP_ARGS(wc, cid, totalbytes, posttime), 2111*45f13584SChuck Lever 2112*45f13584SChuck Lever TP_STRUCT__entry( 2113*45f13584SChuck Lever __field(u32, cq_id) 2114*45f13584SChuck Lever __field(int, completion_id) 2115*45f13584SChuck Lever __field(s64, read_latency) 2116*45f13584SChuck Lever __field(unsigned int, totalbytes) 2117*45f13584SChuck Lever ), 2118*45f13584SChuck Lever 2119*45f13584SChuck Lever TP_fast_assign( 2120*45f13584SChuck Lever __entry->cq_id = cid->ci_queue_id; 2121*45f13584SChuck Lever __entry->completion_id = cid->ci_completion_id; 2122*45f13584SChuck Lever __entry->totalbytes = totalbytes; 2123*45f13584SChuck Lever __entry->read_latency = ktime_us_delta(ktime_get(), posttime); 2124*45f13584SChuck Lever ), 2125*45f13584SChuck Lever 2126*45f13584SChuck Lever TP_printk("cq.id=%u cid=%d totalbytes=%u latency-us=%lld", 2127*45f13584SChuck Lever __entry->cq_id, __entry->completion_id, 2128*45f13584SChuck Lever __entry->totalbytes, __entry->read_latency 2129*45f13584SChuck Lever ) 2130*45f13584SChuck Lever ); 2131*45f13584SChuck Lever 2132*45f13584SChuck Lever DEFINE_SEND_FLUSH_EVENT(svcrdma_wc_read_flush); 2133*45f13584SChuck Lever DEFINE_SEND_FLUSH_EVENT(svcrdma_wc_read_err); 2134*45f13584SChuck Lever 2135*45f13584SChuck Lever DEFINE_SEND_COMPLETION_EVENT(svcrdma_wc_write); 2136*45f13584SChuck Lever DEFINE_SEND_FLUSH_EVENT(svcrdma_wc_write_flush); 2137*45f13584SChuck Lever DEFINE_SEND_FLUSH_EVENT(svcrdma_wc_write_err); 2138bd2abef3SChuck Lever 2139bd2abef3SChuck Lever TRACE_EVENT(svcrdma_qp_error, 2140bd2abef3SChuck Lever TP_PROTO( 2141bd2abef3SChuck Lever const struct ib_event *event, 2142bd2abef3SChuck Lever const struct sockaddr *sap 2143bd2abef3SChuck Lever ), 2144bd2abef3SChuck Lever 2145bd2abef3SChuck Lever TP_ARGS(event, sap), 2146bd2abef3SChuck Lever 2147bd2abef3SChuck Lever TP_STRUCT__entry( 2148bd2abef3SChuck Lever __field(unsigned int, event) 2149bd2abef3SChuck Lever __string(device, event->device->name) 2150bd2abef3SChuck Lever __array(__u8, addr, INET6_ADDRSTRLEN + 10) 2151bd2abef3SChuck Lever ), 2152bd2abef3SChuck Lever 2153bd2abef3SChuck Lever TP_fast_assign( 2154bd2abef3SChuck Lever __entry->event = event->event; 2155bd2abef3SChuck Lever __assign_str(device, event->device->name); 2156bd2abef3SChuck Lever snprintf(__entry->addr, sizeof(__entry->addr) - 1, 2157bd2abef3SChuck Lever "%pISpc", sap); 2158bd2abef3SChuck Lever ), 2159bd2abef3SChuck Lever 2160bd2abef3SChuck Lever TP_printk("addr=%s dev=%s event=%s (%u)", 2161bd2abef3SChuck Lever __entry->addr, __get_str(device), 2162bd2abef3SChuck Lever rdma_show_ib_event(__entry->event), __entry->event 2163bd2abef3SChuck Lever ) 2164bd2abef3SChuck Lever ); 2165bd2abef3SChuck Lever 2166bd2abef3SChuck Lever DECLARE_EVENT_CLASS(svcrdma_sendqueue_event, 2167bd2abef3SChuck Lever TP_PROTO( 2168bd2abef3SChuck Lever const struct svcxprt_rdma *rdma 2169bd2abef3SChuck Lever ), 2170bd2abef3SChuck Lever 2171bd2abef3SChuck Lever TP_ARGS(rdma), 2172bd2abef3SChuck Lever 2173bd2abef3SChuck Lever TP_STRUCT__entry( 2174bd2abef3SChuck Lever __field(int, avail) 2175bd2abef3SChuck Lever __field(int, depth) 2176bd2abef3SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 2177bd2abef3SChuck Lever ), 2178bd2abef3SChuck Lever 2179bd2abef3SChuck Lever TP_fast_assign( 2180bd2abef3SChuck Lever __entry->avail = atomic_read(&rdma->sc_sq_avail); 2181bd2abef3SChuck Lever __entry->depth = rdma->sc_sq_depth; 2182bd2abef3SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 2183bd2abef3SChuck Lever ), 2184bd2abef3SChuck Lever 2185bd2abef3SChuck Lever TP_printk("addr=%s sc_sq_avail=%d/%d", 2186bd2abef3SChuck Lever __get_str(addr), __entry->avail, __entry->depth 2187bd2abef3SChuck Lever ) 2188bd2abef3SChuck Lever ); 2189bd2abef3SChuck Lever 2190bd2abef3SChuck Lever #define DEFINE_SQ_EVENT(name) \ 2191bd2abef3SChuck Lever DEFINE_EVENT(svcrdma_sendqueue_event, svcrdma_sq_##name,\ 2192bd2abef3SChuck Lever TP_PROTO( \ 2193bd2abef3SChuck Lever const struct svcxprt_rdma *rdma \ 2194bd2abef3SChuck Lever ), \ 2195bd2abef3SChuck Lever TP_ARGS(rdma)) 2196bd2abef3SChuck Lever 2197bd2abef3SChuck Lever DEFINE_SQ_EVENT(full); 2198bd2abef3SChuck Lever DEFINE_SQ_EVENT(retry); 2199bd2abef3SChuck Lever 2200e28b4fc6SChuck Lever TRACE_EVENT(svcrdma_sq_post_err, 2201e28b4fc6SChuck Lever TP_PROTO( 2202e28b4fc6SChuck Lever const struct svcxprt_rdma *rdma, 2203e28b4fc6SChuck Lever int status 2204e28b4fc6SChuck Lever ), 2205e28b4fc6SChuck Lever 2206e28b4fc6SChuck Lever TP_ARGS(rdma, status), 2207e28b4fc6SChuck Lever 2208e28b4fc6SChuck Lever TP_STRUCT__entry( 2209e28b4fc6SChuck Lever __field(int, avail) 2210e28b4fc6SChuck Lever __field(int, depth) 2211e28b4fc6SChuck Lever __field(int, status) 2212e28b4fc6SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 2213e28b4fc6SChuck Lever ), 2214e28b4fc6SChuck Lever 2215e28b4fc6SChuck Lever TP_fast_assign( 2216e28b4fc6SChuck Lever __entry->avail = atomic_read(&rdma->sc_sq_avail); 2217e28b4fc6SChuck Lever __entry->depth = rdma->sc_sq_depth; 2218e28b4fc6SChuck Lever __entry->status = status; 2219e28b4fc6SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 2220e28b4fc6SChuck Lever ), 2221e28b4fc6SChuck Lever 2222e28b4fc6SChuck Lever TP_printk("addr=%s sc_sq_avail=%d/%d status=%d", 2223e28b4fc6SChuck Lever __get_str(addr), __entry->avail, __entry->depth, 2224e28b4fc6SChuck Lever __entry->status 2225e28b4fc6SChuck Lever ) 2226e28b4fc6SChuck Lever ); 2227e28b4fc6SChuck Lever 2228e48f083eSChuck Lever #endif /* _TRACE_RPCRDMA_H */ 2229e48f083eSChuck Lever 2230e48f083eSChuck Lever #include <trace/define_trace.h> 2231