1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Copyright (c) 2017, 2018 Oracle. All rights reserved. 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Trace point definitions for the "rpcrdma" subsystem. 6*4882a593Smuzhiyun */ 7*4882a593Smuzhiyun #undef TRACE_SYSTEM 8*4882a593Smuzhiyun #define TRACE_SYSTEM rpcrdma 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun #if !defined(_TRACE_RPCRDMA_H) || defined(TRACE_HEADER_MULTI_READ) 11*4882a593Smuzhiyun #define _TRACE_RPCRDMA_H 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun #include <linux/scatterlist.h> 14*4882a593Smuzhiyun #include <linux/sunrpc/rpc_rdma_cid.h> 15*4882a593Smuzhiyun #include <linux/tracepoint.h> 16*4882a593Smuzhiyun #include <rdma/ib_cm.h> 17*4882a593Smuzhiyun #include <trace/events/rdma.h> 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun /** 20*4882a593Smuzhiyun ** Event classes 21*4882a593Smuzhiyun **/ 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun DECLARE_EVENT_CLASS(rpcrdma_completion_class, 24*4882a593Smuzhiyun TP_PROTO( 25*4882a593Smuzhiyun const struct ib_wc *wc, 26*4882a593Smuzhiyun const struct rpc_rdma_cid *cid 27*4882a593Smuzhiyun ), 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun TP_ARGS(wc, cid), 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun TP_STRUCT__entry( 32*4882a593Smuzhiyun __field(u32, cq_id) 33*4882a593Smuzhiyun __field(int, completion_id) 34*4882a593Smuzhiyun __field(unsigned long, status) 35*4882a593Smuzhiyun __field(unsigned int, vendor_err) 36*4882a593Smuzhiyun ), 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun TP_fast_assign( 39*4882a593Smuzhiyun __entry->cq_id = cid->ci_queue_id; 40*4882a593Smuzhiyun __entry->completion_id = cid->ci_completion_id; 41*4882a593Smuzhiyun __entry->status = wc->status; 42*4882a593Smuzhiyun if (wc->status) 43*4882a593Smuzhiyun __entry->vendor_err = wc->vendor_err; 44*4882a593Smuzhiyun else 45*4882a593Smuzhiyun __entry->vendor_err = 0; 46*4882a593Smuzhiyun ), 47*4882a593Smuzhiyun 48*4882a593Smuzhiyun TP_printk("cq.id=%u cid=%d status=%s (%lu/0x%x)", 49*4882a593Smuzhiyun __entry->cq_id, __entry->completion_id, 50*4882a593Smuzhiyun rdma_show_wc_status(__entry->status), 51*4882a593Smuzhiyun __entry->status, __entry->vendor_err 52*4882a593Smuzhiyun ) 53*4882a593Smuzhiyun ); 54*4882a593Smuzhiyun 55*4882a593Smuzhiyun #define DEFINE_COMPLETION_EVENT(name) \ 56*4882a593Smuzhiyun DEFINE_EVENT(rpcrdma_completion_class, name, \ 57*4882a593Smuzhiyun TP_PROTO( \ 58*4882a593Smuzhiyun const struct ib_wc *wc, \ 59*4882a593Smuzhiyun const struct rpc_rdma_cid *cid \ 60*4882a593Smuzhiyun ), \ 61*4882a593Smuzhiyun TP_ARGS(wc, cid)) 62*4882a593Smuzhiyun 63*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xprtrdma_reply_event, 64*4882a593Smuzhiyun TP_PROTO( 65*4882a593Smuzhiyun const struct rpcrdma_rep *rep 66*4882a593Smuzhiyun ), 67*4882a593Smuzhiyun 68*4882a593Smuzhiyun TP_ARGS(rep), 69*4882a593Smuzhiyun 70*4882a593Smuzhiyun TP_STRUCT__entry( 71*4882a593Smuzhiyun __field(const void *, rep) 72*4882a593Smuzhiyun __field(const void *, r_xprt) 73*4882a593Smuzhiyun __field(u32, xid) 74*4882a593Smuzhiyun __field(u32, version) 75*4882a593Smuzhiyun __field(u32, proc) 76*4882a593Smuzhiyun ), 77*4882a593Smuzhiyun 78*4882a593Smuzhiyun TP_fast_assign( 79*4882a593Smuzhiyun __entry->rep = rep; 80*4882a593Smuzhiyun __entry->r_xprt = rep->rr_rxprt; 81*4882a593Smuzhiyun __entry->xid = be32_to_cpu(rep->rr_xid); 82*4882a593Smuzhiyun __entry->version = be32_to_cpu(rep->rr_vers); 83*4882a593Smuzhiyun __entry->proc = be32_to_cpu(rep->rr_proc); 84*4882a593Smuzhiyun ), 85*4882a593Smuzhiyun 86*4882a593Smuzhiyun TP_printk("rxprt %p xid=0x%08x rep=%p: version %u proc %u", 87*4882a593Smuzhiyun __entry->r_xprt, __entry->xid, __entry->rep, 88*4882a593Smuzhiyun __entry->version, __entry->proc 89*4882a593Smuzhiyun ) 90*4882a593Smuzhiyun ); 91*4882a593Smuzhiyun 92*4882a593Smuzhiyun #define DEFINE_REPLY_EVENT(name) \ 93*4882a593Smuzhiyun DEFINE_EVENT(xprtrdma_reply_event, name, \ 94*4882a593Smuzhiyun TP_PROTO( \ 95*4882a593Smuzhiyun const struct rpcrdma_rep *rep \ 96*4882a593Smuzhiyun ), \ 97*4882a593Smuzhiyun TP_ARGS(rep)) 98*4882a593Smuzhiyun 99*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xprtrdma_rxprt, 100*4882a593Smuzhiyun TP_PROTO( 101*4882a593Smuzhiyun const struct rpcrdma_xprt *r_xprt 102*4882a593Smuzhiyun ), 103*4882a593Smuzhiyun 104*4882a593Smuzhiyun TP_ARGS(r_xprt), 105*4882a593Smuzhiyun 106*4882a593Smuzhiyun TP_STRUCT__entry( 107*4882a593Smuzhiyun __field(const void *, r_xprt) 108*4882a593Smuzhiyun __string(addr, rpcrdma_addrstr(r_xprt)) 109*4882a593Smuzhiyun __string(port, rpcrdma_portstr(r_xprt)) 110*4882a593Smuzhiyun ), 111*4882a593Smuzhiyun 112*4882a593Smuzhiyun TP_fast_assign( 113*4882a593Smuzhiyun __entry->r_xprt = r_xprt; 114*4882a593Smuzhiyun __assign_str(addr, rpcrdma_addrstr(r_xprt)); 115*4882a593Smuzhiyun __assign_str(port, rpcrdma_portstr(r_xprt)); 116*4882a593Smuzhiyun ), 117*4882a593Smuzhiyun 118*4882a593Smuzhiyun TP_printk("peer=[%s]:%s r_xprt=%p", 119*4882a593Smuzhiyun __get_str(addr), __get_str(port), __entry->r_xprt 120*4882a593Smuzhiyun ) 121*4882a593Smuzhiyun ); 122*4882a593Smuzhiyun 123*4882a593Smuzhiyun #define DEFINE_RXPRT_EVENT(name) \ 124*4882a593Smuzhiyun DEFINE_EVENT(xprtrdma_rxprt, name, \ 125*4882a593Smuzhiyun TP_PROTO( \ 126*4882a593Smuzhiyun const struct rpcrdma_xprt *r_xprt \ 127*4882a593Smuzhiyun ), \ 128*4882a593Smuzhiyun TP_ARGS(r_xprt)) 129*4882a593Smuzhiyun 130*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xprtrdma_connect_class, 131*4882a593Smuzhiyun TP_PROTO( 132*4882a593Smuzhiyun const struct rpcrdma_xprt *r_xprt, 133*4882a593Smuzhiyun int rc 134*4882a593Smuzhiyun ), 135*4882a593Smuzhiyun 136*4882a593Smuzhiyun TP_ARGS(r_xprt, rc), 137*4882a593Smuzhiyun 138*4882a593Smuzhiyun TP_STRUCT__entry( 139*4882a593Smuzhiyun __field(const void *, r_xprt) 140*4882a593Smuzhiyun __field(int, rc) 141*4882a593Smuzhiyun __field(int, connect_status) 142*4882a593Smuzhiyun __string(addr, rpcrdma_addrstr(r_xprt)) 143*4882a593Smuzhiyun __string(port, rpcrdma_portstr(r_xprt)) 144*4882a593Smuzhiyun ), 145*4882a593Smuzhiyun 146*4882a593Smuzhiyun TP_fast_assign( 147*4882a593Smuzhiyun __entry->r_xprt = r_xprt; 148*4882a593Smuzhiyun __entry->rc = rc; 149*4882a593Smuzhiyun __entry->connect_status = r_xprt->rx_ep->re_connect_status; 150*4882a593Smuzhiyun __assign_str(addr, rpcrdma_addrstr(r_xprt)); 151*4882a593Smuzhiyun __assign_str(port, rpcrdma_portstr(r_xprt)); 152*4882a593Smuzhiyun ), 153*4882a593Smuzhiyun 154*4882a593Smuzhiyun TP_printk("peer=[%s]:%s r_xprt=%p: rc=%d connection status=%d", 155*4882a593Smuzhiyun __get_str(addr), __get_str(port), __entry->r_xprt, 156*4882a593Smuzhiyun __entry->rc, __entry->connect_status 157*4882a593Smuzhiyun ) 158*4882a593Smuzhiyun ); 159*4882a593Smuzhiyun 160*4882a593Smuzhiyun #define DEFINE_CONN_EVENT(name) \ 161*4882a593Smuzhiyun DEFINE_EVENT(xprtrdma_connect_class, xprtrdma_##name, \ 162*4882a593Smuzhiyun TP_PROTO( \ 163*4882a593Smuzhiyun const struct rpcrdma_xprt *r_xprt, \ 164*4882a593Smuzhiyun int rc \ 165*4882a593Smuzhiyun ), \ 166*4882a593Smuzhiyun TP_ARGS(r_xprt, rc)) 167*4882a593Smuzhiyun 168*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xprtrdma_rdch_event, 169*4882a593Smuzhiyun TP_PROTO( 170*4882a593Smuzhiyun const struct rpc_task *task, 171*4882a593Smuzhiyun unsigned int pos, 172*4882a593Smuzhiyun struct rpcrdma_mr *mr, 173*4882a593Smuzhiyun int nsegs 174*4882a593Smuzhiyun ), 175*4882a593Smuzhiyun 176*4882a593Smuzhiyun TP_ARGS(task, pos, mr, nsegs), 177*4882a593Smuzhiyun 178*4882a593Smuzhiyun TP_STRUCT__entry( 179*4882a593Smuzhiyun __field(unsigned int, task_id) 180*4882a593Smuzhiyun __field(unsigned int, client_id) 181*4882a593Smuzhiyun __field(unsigned int, pos) 182*4882a593Smuzhiyun __field(int, nents) 183*4882a593Smuzhiyun __field(u32, handle) 184*4882a593Smuzhiyun __field(u32, length) 185*4882a593Smuzhiyun __field(u64, offset) 186*4882a593Smuzhiyun __field(int, nsegs) 187*4882a593Smuzhiyun ), 188*4882a593Smuzhiyun 189*4882a593Smuzhiyun TP_fast_assign( 190*4882a593Smuzhiyun __entry->task_id = task->tk_pid; 191*4882a593Smuzhiyun __entry->client_id = task->tk_client->cl_clid; 192*4882a593Smuzhiyun __entry->pos = pos; 193*4882a593Smuzhiyun __entry->nents = mr->mr_nents; 194*4882a593Smuzhiyun __entry->handle = mr->mr_handle; 195*4882a593Smuzhiyun __entry->length = mr->mr_length; 196*4882a593Smuzhiyun __entry->offset = mr->mr_offset; 197*4882a593Smuzhiyun __entry->nsegs = nsegs; 198*4882a593Smuzhiyun ), 199*4882a593Smuzhiyun 200*4882a593Smuzhiyun TP_printk("task:%u@%u pos=%u %u@0x%016llx:0x%08x (%s)", 201*4882a593Smuzhiyun __entry->task_id, __entry->client_id, 202*4882a593Smuzhiyun __entry->pos, __entry->length, 203*4882a593Smuzhiyun (unsigned long long)__entry->offset, __entry->handle, 204*4882a593Smuzhiyun __entry->nents < __entry->nsegs ? "more" : "last" 205*4882a593Smuzhiyun ) 206*4882a593Smuzhiyun ); 207*4882a593Smuzhiyun 208*4882a593Smuzhiyun #define DEFINE_RDCH_EVENT(name) \ 209*4882a593Smuzhiyun DEFINE_EVENT(xprtrdma_rdch_event, xprtrdma_chunk_##name,\ 210*4882a593Smuzhiyun TP_PROTO( \ 211*4882a593Smuzhiyun const struct rpc_task *task, \ 212*4882a593Smuzhiyun unsigned int pos, \ 213*4882a593Smuzhiyun struct rpcrdma_mr *mr, \ 214*4882a593Smuzhiyun int nsegs \ 215*4882a593Smuzhiyun ), \ 216*4882a593Smuzhiyun TP_ARGS(task, pos, mr, nsegs)) 217*4882a593Smuzhiyun 218*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xprtrdma_wrch_event, 219*4882a593Smuzhiyun TP_PROTO( 220*4882a593Smuzhiyun const struct rpc_task *task, 221*4882a593Smuzhiyun struct rpcrdma_mr *mr, 222*4882a593Smuzhiyun int nsegs 223*4882a593Smuzhiyun ), 224*4882a593Smuzhiyun 225*4882a593Smuzhiyun TP_ARGS(task, mr, nsegs), 226*4882a593Smuzhiyun 227*4882a593Smuzhiyun TP_STRUCT__entry( 228*4882a593Smuzhiyun __field(unsigned int, task_id) 229*4882a593Smuzhiyun __field(unsigned int, client_id) 230*4882a593Smuzhiyun __field(int, nents) 231*4882a593Smuzhiyun __field(u32, handle) 232*4882a593Smuzhiyun __field(u32, length) 233*4882a593Smuzhiyun __field(u64, offset) 234*4882a593Smuzhiyun __field(int, nsegs) 235*4882a593Smuzhiyun ), 236*4882a593Smuzhiyun 237*4882a593Smuzhiyun TP_fast_assign( 238*4882a593Smuzhiyun __entry->task_id = task->tk_pid; 239*4882a593Smuzhiyun __entry->client_id = task->tk_client->cl_clid; 240*4882a593Smuzhiyun __entry->nents = mr->mr_nents; 241*4882a593Smuzhiyun __entry->handle = mr->mr_handle; 242*4882a593Smuzhiyun __entry->length = mr->mr_length; 243*4882a593Smuzhiyun __entry->offset = mr->mr_offset; 244*4882a593Smuzhiyun __entry->nsegs = nsegs; 245*4882a593Smuzhiyun ), 246*4882a593Smuzhiyun 247*4882a593Smuzhiyun TP_printk("task:%u@%u %u@0x%016llx:0x%08x (%s)", 248*4882a593Smuzhiyun __entry->task_id, __entry->client_id, 249*4882a593Smuzhiyun __entry->length, (unsigned long long)__entry->offset, 250*4882a593Smuzhiyun __entry->handle, 251*4882a593Smuzhiyun __entry->nents < __entry->nsegs ? "more" : "last" 252*4882a593Smuzhiyun ) 253*4882a593Smuzhiyun ); 254*4882a593Smuzhiyun 255*4882a593Smuzhiyun #define DEFINE_WRCH_EVENT(name) \ 256*4882a593Smuzhiyun DEFINE_EVENT(xprtrdma_wrch_event, xprtrdma_chunk_##name,\ 257*4882a593Smuzhiyun TP_PROTO( \ 258*4882a593Smuzhiyun const struct rpc_task *task, \ 259*4882a593Smuzhiyun struct rpcrdma_mr *mr, \ 260*4882a593Smuzhiyun int nsegs \ 261*4882a593Smuzhiyun ), \ 262*4882a593Smuzhiyun TP_ARGS(task, mr, nsegs)) 263*4882a593Smuzhiyun 264*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xprtrdma_frwr_done, 265*4882a593Smuzhiyun TP_PROTO( 266*4882a593Smuzhiyun const struct ib_wc *wc, 267*4882a593Smuzhiyun const struct rpcrdma_frwr *frwr 268*4882a593Smuzhiyun ), 269*4882a593Smuzhiyun 270*4882a593Smuzhiyun TP_ARGS(wc, frwr), 271*4882a593Smuzhiyun 272*4882a593Smuzhiyun TP_STRUCT__entry( 273*4882a593Smuzhiyun __field(u32, mr_id) 274*4882a593Smuzhiyun __field(unsigned int, status) 275*4882a593Smuzhiyun __field(unsigned int, vendor_err) 276*4882a593Smuzhiyun ), 277*4882a593Smuzhiyun 278*4882a593Smuzhiyun TP_fast_assign( 279*4882a593Smuzhiyun __entry->mr_id = frwr->fr_mr->res.id; 280*4882a593Smuzhiyun __entry->status = wc->status; 281*4882a593Smuzhiyun __entry->vendor_err = __entry->status ? wc->vendor_err : 0; 282*4882a593Smuzhiyun ), 283*4882a593Smuzhiyun 284*4882a593Smuzhiyun TP_printk( 285*4882a593Smuzhiyun "mr.id=%u: %s (%u/0x%x)", 286*4882a593Smuzhiyun __entry->mr_id, rdma_show_wc_status(__entry->status), 287*4882a593Smuzhiyun __entry->status, __entry->vendor_err 288*4882a593Smuzhiyun ) 289*4882a593Smuzhiyun ); 290*4882a593Smuzhiyun 291*4882a593Smuzhiyun #define DEFINE_FRWR_DONE_EVENT(name) \ 292*4882a593Smuzhiyun DEFINE_EVENT(xprtrdma_frwr_done, name, \ 293*4882a593Smuzhiyun TP_PROTO( \ 294*4882a593Smuzhiyun const struct ib_wc *wc, \ 295*4882a593Smuzhiyun const struct rpcrdma_frwr *frwr \ 296*4882a593Smuzhiyun ), \ 297*4882a593Smuzhiyun TP_ARGS(wc, frwr)) 298*4882a593Smuzhiyun 299*4882a593Smuzhiyun TRACE_DEFINE_ENUM(DMA_BIDIRECTIONAL); 300*4882a593Smuzhiyun TRACE_DEFINE_ENUM(DMA_TO_DEVICE); 301*4882a593Smuzhiyun TRACE_DEFINE_ENUM(DMA_FROM_DEVICE); 302*4882a593Smuzhiyun TRACE_DEFINE_ENUM(DMA_NONE); 303*4882a593Smuzhiyun 304*4882a593Smuzhiyun #define xprtrdma_show_direction(x) \ 305*4882a593Smuzhiyun __print_symbolic(x, \ 306*4882a593Smuzhiyun { DMA_BIDIRECTIONAL, "BIDIR" }, \ 307*4882a593Smuzhiyun { DMA_TO_DEVICE, "TO_DEVICE" }, \ 308*4882a593Smuzhiyun { DMA_FROM_DEVICE, "FROM_DEVICE" }, \ 309*4882a593Smuzhiyun { DMA_NONE, "NONE" }) 310*4882a593Smuzhiyun 311*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xprtrdma_mr, 312*4882a593Smuzhiyun TP_PROTO( 313*4882a593Smuzhiyun const struct rpcrdma_mr *mr 314*4882a593Smuzhiyun ), 315*4882a593Smuzhiyun 316*4882a593Smuzhiyun TP_ARGS(mr), 317*4882a593Smuzhiyun 318*4882a593Smuzhiyun TP_STRUCT__entry( 319*4882a593Smuzhiyun __field(u32, mr_id) 320*4882a593Smuzhiyun __field(int, nents) 321*4882a593Smuzhiyun __field(u32, handle) 322*4882a593Smuzhiyun __field(u32, length) 323*4882a593Smuzhiyun __field(u64, offset) 324*4882a593Smuzhiyun __field(u32, dir) 325*4882a593Smuzhiyun ), 326*4882a593Smuzhiyun 327*4882a593Smuzhiyun TP_fast_assign( 328*4882a593Smuzhiyun __entry->mr_id = mr->frwr.fr_mr->res.id; 329*4882a593Smuzhiyun __entry->nents = mr->mr_nents; 330*4882a593Smuzhiyun __entry->handle = mr->mr_handle; 331*4882a593Smuzhiyun __entry->length = mr->mr_length; 332*4882a593Smuzhiyun __entry->offset = mr->mr_offset; 333*4882a593Smuzhiyun __entry->dir = mr->mr_dir; 334*4882a593Smuzhiyun ), 335*4882a593Smuzhiyun 336*4882a593Smuzhiyun TP_printk("mr.id=%u nents=%d %u@0x%016llx:0x%08x (%s)", 337*4882a593Smuzhiyun __entry->mr_id, __entry->nents, __entry->length, 338*4882a593Smuzhiyun (unsigned long long)__entry->offset, __entry->handle, 339*4882a593Smuzhiyun xprtrdma_show_direction(__entry->dir) 340*4882a593Smuzhiyun ) 341*4882a593Smuzhiyun ); 342*4882a593Smuzhiyun 343*4882a593Smuzhiyun #define DEFINE_MR_EVENT(name) \ 344*4882a593Smuzhiyun DEFINE_EVENT(xprtrdma_mr, xprtrdma_mr_##name, \ 345*4882a593Smuzhiyun TP_PROTO( \ 346*4882a593Smuzhiyun const struct rpcrdma_mr *mr \ 347*4882a593Smuzhiyun ), \ 348*4882a593Smuzhiyun TP_ARGS(mr)) 349*4882a593Smuzhiyun 350*4882a593Smuzhiyun DECLARE_EVENT_CLASS(xprtrdma_cb_event, 351*4882a593Smuzhiyun TP_PROTO( 352*4882a593Smuzhiyun const struct rpc_rqst *rqst 353*4882a593Smuzhiyun ), 354*4882a593Smuzhiyun 355*4882a593Smuzhiyun TP_ARGS(rqst), 356*4882a593Smuzhiyun 357*4882a593Smuzhiyun TP_STRUCT__entry( 358*4882a593Smuzhiyun __field(const void *, rqst) 359*4882a593Smuzhiyun __field(const void *, rep) 360*4882a593Smuzhiyun __field(const void *, req) 361*4882a593Smuzhiyun __field(u32, xid) 362*4882a593Smuzhiyun ), 363*4882a593Smuzhiyun 364*4882a593Smuzhiyun TP_fast_assign( 365*4882a593Smuzhiyun __entry->rqst = rqst; 366*4882a593Smuzhiyun __entry->req = rpcr_to_rdmar(rqst); 367*4882a593Smuzhiyun __entry->rep = rpcr_to_rdmar(rqst)->rl_reply; 368*4882a593Smuzhiyun __entry->xid = be32_to_cpu(rqst->rq_xid); 369*4882a593Smuzhiyun ), 370*4882a593Smuzhiyun 371*4882a593Smuzhiyun TP_printk("xid=0x%08x, rqst=%p req=%p rep=%p", 372*4882a593Smuzhiyun __entry->xid, __entry->rqst, __entry->req, __entry->rep 373*4882a593Smuzhiyun ) 374*4882a593Smuzhiyun ); 375*4882a593Smuzhiyun 376*4882a593Smuzhiyun #define DEFINE_CB_EVENT(name) \ 377*4882a593Smuzhiyun DEFINE_EVENT(xprtrdma_cb_event, name, \ 378*4882a593Smuzhiyun TP_PROTO( \ 379*4882a593Smuzhiyun const struct rpc_rqst *rqst \ 380*4882a593Smuzhiyun ), \ 381*4882a593Smuzhiyun TP_ARGS(rqst)) 382*4882a593Smuzhiyun 383*4882a593Smuzhiyun /** 384*4882a593Smuzhiyun ** Connection events 385*4882a593Smuzhiyun **/ 386*4882a593Smuzhiyun 387*4882a593Smuzhiyun TRACE_EVENT(xprtrdma_inline_thresh, 388*4882a593Smuzhiyun TP_PROTO( 389*4882a593Smuzhiyun const struct rpcrdma_ep *ep 390*4882a593Smuzhiyun ), 391*4882a593Smuzhiyun 392*4882a593Smuzhiyun TP_ARGS(ep), 393*4882a593Smuzhiyun 394*4882a593Smuzhiyun TP_STRUCT__entry( 395*4882a593Smuzhiyun __field(unsigned int, inline_send) 396*4882a593Smuzhiyun __field(unsigned int, inline_recv) 397*4882a593Smuzhiyun __field(unsigned int, max_send) 398*4882a593Smuzhiyun __field(unsigned int, max_recv) 399*4882a593Smuzhiyun __array(unsigned char, srcaddr, sizeof(struct sockaddr_in6)) 400*4882a593Smuzhiyun __array(unsigned char, dstaddr, sizeof(struct sockaddr_in6)) 401*4882a593Smuzhiyun ), 402*4882a593Smuzhiyun 403*4882a593Smuzhiyun TP_fast_assign( 404*4882a593Smuzhiyun const struct rdma_cm_id *id = ep->re_id; 405*4882a593Smuzhiyun 406*4882a593Smuzhiyun __entry->inline_send = ep->re_inline_send; 407*4882a593Smuzhiyun __entry->inline_recv = ep->re_inline_recv; 408*4882a593Smuzhiyun __entry->max_send = ep->re_max_inline_send; 409*4882a593Smuzhiyun __entry->max_recv = ep->re_max_inline_recv; 410*4882a593Smuzhiyun memcpy(__entry->srcaddr, &id->route.addr.src_addr, 411*4882a593Smuzhiyun sizeof(struct sockaddr_in6)); 412*4882a593Smuzhiyun memcpy(__entry->dstaddr, &id->route.addr.dst_addr, 413*4882a593Smuzhiyun sizeof(struct sockaddr_in6)); 414*4882a593Smuzhiyun ), 415*4882a593Smuzhiyun 416*4882a593Smuzhiyun TP_printk("%pISpc -> %pISpc neg send/recv=%u/%u, calc send/recv=%u/%u", 417*4882a593Smuzhiyun __entry->srcaddr, __entry->dstaddr, 418*4882a593Smuzhiyun __entry->inline_send, __entry->inline_recv, 419*4882a593Smuzhiyun __entry->max_send, __entry->max_recv 420*4882a593Smuzhiyun ) 421*4882a593Smuzhiyun ); 422*4882a593Smuzhiyun 423*4882a593Smuzhiyun DEFINE_CONN_EVENT(connect); 424*4882a593Smuzhiyun DEFINE_CONN_EVENT(disconnect); 425*4882a593Smuzhiyun 426*4882a593Smuzhiyun DEFINE_RXPRT_EVENT(xprtrdma_op_inject_dsc); 427*4882a593Smuzhiyun 428*4882a593Smuzhiyun TRACE_EVENT(xprtrdma_op_connect, 429*4882a593Smuzhiyun TP_PROTO( 430*4882a593Smuzhiyun const struct rpcrdma_xprt *r_xprt, 431*4882a593Smuzhiyun unsigned long delay 432*4882a593Smuzhiyun ), 433*4882a593Smuzhiyun 434*4882a593Smuzhiyun TP_ARGS(r_xprt, delay), 435*4882a593Smuzhiyun 436*4882a593Smuzhiyun TP_STRUCT__entry( 437*4882a593Smuzhiyun __field(const void *, r_xprt) 438*4882a593Smuzhiyun __field(unsigned long, delay) 439*4882a593Smuzhiyun __string(addr, rpcrdma_addrstr(r_xprt)) 440*4882a593Smuzhiyun __string(port, rpcrdma_portstr(r_xprt)) 441*4882a593Smuzhiyun ), 442*4882a593Smuzhiyun 443*4882a593Smuzhiyun TP_fast_assign( 444*4882a593Smuzhiyun __entry->r_xprt = r_xprt; 445*4882a593Smuzhiyun __entry->delay = delay; 446*4882a593Smuzhiyun __assign_str(addr, rpcrdma_addrstr(r_xprt)); 447*4882a593Smuzhiyun __assign_str(port, rpcrdma_portstr(r_xprt)); 448*4882a593Smuzhiyun ), 449*4882a593Smuzhiyun 450*4882a593Smuzhiyun TP_printk("peer=[%s]:%s r_xprt=%p delay=%lu", 451*4882a593Smuzhiyun __get_str(addr), __get_str(port), __entry->r_xprt, 452*4882a593Smuzhiyun __entry->delay 453*4882a593Smuzhiyun ) 454*4882a593Smuzhiyun ); 455*4882a593Smuzhiyun 456*4882a593Smuzhiyun 457*4882a593Smuzhiyun TRACE_EVENT(xprtrdma_op_set_cto, 458*4882a593Smuzhiyun TP_PROTO( 459*4882a593Smuzhiyun const struct rpcrdma_xprt *r_xprt, 460*4882a593Smuzhiyun unsigned long connect, 461*4882a593Smuzhiyun unsigned long reconnect 462*4882a593Smuzhiyun ), 463*4882a593Smuzhiyun 464*4882a593Smuzhiyun TP_ARGS(r_xprt, connect, reconnect), 465*4882a593Smuzhiyun 466*4882a593Smuzhiyun TP_STRUCT__entry( 467*4882a593Smuzhiyun __field(const void *, r_xprt) 468*4882a593Smuzhiyun __field(unsigned long, connect) 469*4882a593Smuzhiyun __field(unsigned long, reconnect) 470*4882a593Smuzhiyun __string(addr, rpcrdma_addrstr(r_xprt)) 471*4882a593Smuzhiyun __string(port, rpcrdma_portstr(r_xprt)) 472*4882a593Smuzhiyun ), 473*4882a593Smuzhiyun 474*4882a593Smuzhiyun TP_fast_assign( 475*4882a593Smuzhiyun __entry->r_xprt = r_xprt; 476*4882a593Smuzhiyun __entry->connect = connect; 477*4882a593Smuzhiyun __entry->reconnect = reconnect; 478*4882a593Smuzhiyun __assign_str(addr, rpcrdma_addrstr(r_xprt)); 479*4882a593Smuzhiyun __assign_str(port, rpcrdma_portstr(r_xprt)); 480*4882a593Smuzhiyun ), 481*4882a593Smuzhiyun 482*4882a593Smuzhiyun TP_printk("peer=[%s]:%s r_xprt=%p: connect=%lu reconnect=%lu", 483*4882a593Smuzhiyun __get_str(addr), __get_str(port), __entry->r_xprt, 484*4882a593Smuzhiyun __entry->connect / HZ, __entry->reconnect / HZ 485*4882a593Smuzhiyun ) 486*4882a593Smuzhiyun ); 487*4882a593Smuzhiyun 488*4882a593Smuzhiyun TRACE_EVENT(xprtrdma_qp_event, 489*4882a593Smuzhiyun TP_PROTO( 490*4882a593Smuzhiyun const struct rpcrdma_ep *ep, 491*4882a593Smuzhiyun const struct ib_event *event 492*4882a593Smuzhiyun ), 493*4882a593Smuzhiyun 494*4882a593Smuzhiyun TP_ARGS(ep, event), 495*4882a593Smuzhiyun 496*4882a593Smuzhiyun TP_STRUCT__entry( 497*4882a593Smuzhiyun __field(unsigned long, event) 498*4882a593Smuzhiyun __string(name, event->device->name) 499*4882a593Smuzhiyun __array(unsigned char, srcaddr, sizeof(struct sockaddr_in6)) 500*4882a593Smuzhiyun __array(unsigned char, dstaddr, sizeof(struct sockaddr_in6)) 501*4882a593Smuzhiyun ), 502*4882a593Smuzhiyun 503*4882a593Smuzhiyun TP_fast_assign( 504*4882a593Smuzhiyun const struct rdma_cm_id *id = ep->re_id; 505*4882a593Smuzhiyun 506*4882a593Smuzhiyun __entry->event = event->event; 507*4882a593Smuzhiyun __assign_str(name, event->device->name); 508*4882a593Smuzhiyun memcpy(__entry->srcaddr, &id->route.addr.src_addr, 509*4882a593Smuzhiyun sizeof(struct sockaddr_in6)); 510*4882a593Smuzhiyun memcpy(__entry->dstaddr, &id->route.addr.dst_addr, 511*4882a593Smuzhiyun sizeof(struct sockaddr_in6)); 512*4882a593Smuzhiyun ), 513*4882a593Smuzhiyun 514*4882a593Smuzhiyun TP_printk("%pISpc -> %pISpc device=%s %s (%lu)", 515*4882a593Smuzhiyun __entry->srcaddr, __entry->dstaddr, __get_str(name), 516*4882a593Smuzhiyun rdma_show_ib_event(__entry->event), __entry->event 517*4882a593Smuzhiyun ) 518*4882a593Smuzhiyun ); 519*4882a593Smuzhiyun 520*4882a593Smuzhiyun /** 521*4882a593Smuzhiyun ** Call events 522*4882a593Smuzhiyun **/ 523*4882a593Smuzhiyun 524*4882a593Smuzhiyun TRACE_EVENT(xprtrdma_createmrs, 525*4882a593Smuzhiyun TP_PROTO( 526*4882a593Smuzhiyun const struct rpcrdma_xprt *r_xprt, 527*4882a593Smuzhiyun unsigned int count 528*4882a593Smuzhiyun ), 529*4882a593Smuzhiyun 530*4882a593Smuzhiyun TP_ARGS(r_xprt, count), 531*4882a593Smuzhiyun 532*4882a593Smuzhiyun TP_STRUCT__entry( 533*4882a593Smuzhiyun __field(const void *, r_xprt) 534*4882a593Smuzhiyun __string(addr, rpcrdma_addrstr(r_xprt)) 535*4882a593Smuzhiyun __string(port, rpcrdma_portstr(r_xprt)) 536*4882a593Smuzhiyun __field(unsigned int, count) 537*4882a593Smuzhiyun ), 538*4882a593Smuzhiyun 539*4882a593Smuzhiyun TP_fast_assign( 540*4882a593Smuzhiyun __entry->r_xprt = r_xprt; 541*4882a593Smuzhiyun __entry->count = count; 542*4882a593Smuzhiyun __assign_str(addr, rpcrdma_addrstr(r_xprt)); 543*4882a593Smuzhiyun __assign_str(port, rpcrdma_portstr(r_xprt)); 544*4882a593Smuzhiyun ), 545*4882a593Smuzhiyun 546*4882a593Smuzhiyun TP_printk("peer=[%s]:%s r_xprt=%p: created %u MRs", 547*4882a593Smuzhiyun __get_str(addr), __get_str(port), __entry->r_xprt, 548*4882a593Smuzhiyun __entry->count 549*4882a593Smuzhiyun ) 550*4882a593Smuzhiyun ); 551*4882a593Smuzhiyun 552*4882a593Smuzhiyun TRACE_EVENT(xprtrdma_mr_get, 553*4882a593Smuzhiyun TP_PROTO( 554*4882a593Smuzhiyun const struct rpcrdma_req *req 555*4882a593Smuzhiyun ), 556*4882a593Smuzhiyun 557*4882a593Smuzhiyun TP_ARGS(req), 558*4882a593Smuzhiyun 559*4882a593Smuzhiyun TP_STRUCT__entry( 560*4882a593Smuzhiyun __field(const void *, req) 561*4882a593Smuzhiyun __field(unsigned int, task_id) 562*4882a593Smuzhiyun __field(unsigned int, client_id) 563*4882a593Smuzhiyun __field(u32, xid) 564*4882a593Smuzhiyun ), 565*4882a593Smuzhiyun 566*4882a593Smuzhiyun TP_fast_assign( 567*4882a593Smuzhiyun const struct rpc_rqst *rqst = &req->rl_slot; 568*4882a593Smuzhiyun 569*4882a593Smuzhiyun __entry->req = req; 570*4882a593Smuzhiyun __entry->task_id = rqst->rq_task->tk_pid; 571*4882a593Smuzhiyun __entry->client_id = rqst->rq_task->tk_client->cl_clid; 572*4882a593Smuzhiyun __entry->xid = be32_to_cpu(rqst->rq_xid); 573*4882a593Smuzhiyun ), 574*4882a593Smuzhiyun 575*4882a593Smuzhiyun TP_printk("task:%u@%u xid=0x%08x req=%p", 576*4882a593Smuzhiyun __entry->task_id, __entry->client_id, __entry->xid, 577*4882a593Smuzhiyun __entry->req 578*4882a593Smuzhiyun ) 579*4882a593Smuzhiyun ); 580*4882a593Smuzhiyun 581*4882a593Smuzhiyun TRACE_EVENT(xprtrdma_nomrs, 582*4882a593Smuzhiyun TP_PROTO( 583*4882a593Smuzhiyun const struct rpcrdma_req *req 584*4882a593Smuzhiyun ), 585*4882a593Smuzhiyun 586*4882a593Smuzhiyun TP_ARGS(req), 587*4882a593Smuzhiyun 588*4882a593Smuzhiyun TP_STRUCT__entry( 589*4882a593Smuzhiyun __field(const void *, req) 590*4882a593Smuzhiyun __field(unsigned int, task_id) 591*4882a593Smuzhiyun __field(unsigned int, client_id) 592*4882a593Smuzhiyun __field(u32, xid) 593*4882a593Smuzhiyun ), 594*4882a593Smuzhiyun 595*4882a593Smuzhiyun TP_fast_assign( 596*4882a593Smuzhiyun const struct rpc_rqst *rqst = &req->rl_slot; 597*4882a593Smuzhiyun 598*4882a593Smuzhiyun __entry->req = req; 599*4882a593Smuzhiyun __entry->task_id = rqst->rq_task->tk_pid; 600*4882a593Smuzhiyun __entry->client_id = rqst->rq_task->tk_client->cl_clid; 601*4882a593Smuzhiyun __entry->xid = be32_to_cpu(rqst->rq_xid); 602*4882a593Smuzhiyun ), 603*4882a593Smuzhiyun 604*4882a593Smuzhiyun TP_printk("task:%u@%u xid=0x%08x req=%p", 605*4882a593Smuzhiyun __entry->task_id, __entry->client_id, __entry->xid, 606*4882a593Smuzhiyun __entry->req 607*4882a593Smuzhiyun ) 608*4882a593Smuzhiyun ); 609*4882a593Smuzhiyun 610*4882a593Smuzhiyun DEFINE_RDCH_EVENT(read); 611*4882a593Smuzhiyun DEFINE_WRCH_EVENT(write); 612*4882a593Smuzhiyun DEFINE_WRCH_EVENT(reply); 613*4882a593Smuzhiyun 614*4882a593Smuzhiyun TRACE_DEFINE_ENUM(rpcrdma_noch); 615*4882a593Smuzhiyun TRACE_DEFINE_ENUM(rpcrdma_noch_pullup); 616*4882a593Smuzhiyun TRACE_DEFINE_ENUM(rpcrdma_noch_mapped); 617*4882a593Smuzhiyun TRACE_DEFINE_ENUM(rpcrdma_readch); 618*4882a593Smuzhiyun TRACE_DEFINE_ENUM(rpcrdma_areadch); 619*4882a593Smuzhiyun TRACE_DEFINE_ENUM(rpcrdma_writech); 620*4882a593Smuzhiyun TRACE_DEFINE_ENUM(rpcrdma_replych); 621*4882a593Smuzhiyun 622*4882a593Smuzhiyun #define xprtrdma_show_chunktype(x) \ 623*4882a593Smuzhiyun __print_symbolic(x, \ 624*4882a593Smuzhiyun { rpcrdma_noch, "inline" }, \ 625*4882a593Smuzhiyun { rpcrdma_noch_pullup, "pullup" }, \ 626*4882a593Smuzhiyun { rpcrdma_noch_mapped, "mapped" }, \ 627*4882a593Smuzhiyun { rpcrdma_readch, "read list" }, \ 628*4882a593Smuzhiyun { rpcrdma_areadch, "*read list" }, \ 629*4882a593Smuzhiyun { rpcrdma_writech, "write list" }, \ 630*4882a593Smuzhiyun { rpcrdma_replych, "reply chunk" }) 631*4882a593Smuzhiyun 632*4882a593Smuzhiyun TRACE_EVENT(xprtrdma_marshal, 633*4882a593Smuzhiyun TP_PROTO( 634*4882a593Smuzhiyun const struct rpcrdma_req *req, 635*4882a593Smuzhiyun unsigned int rtype, 636*4882a593Smuzhiyun unsigned int wtype 637*4882a593Smuzhiyun ), 638*4882a593Smuzhiyun 639*4882a593Smuzhiyun TP_ARGS(req, rtype, wtype), 640*4882a593Smuzhiyun 641*4882a593Smuzhiyun TP_STRUCT__entry( 642*4882a593Smuzhiyun __field(unsigned int, task_id) 643*4882a593Smuzhiyun __field(unsigned int, client_id) 644*4882a593Smuzhiyun __field(u32, xid) 645*4882a593Smuzhiyun __field(unsigned int, hdrlen) 646*4882a593Smuzhiyun __field(unsigned int, headlen) 647*4882a593Smuzhiyun __field(unsigned int, pagelen) 648*4882a593Smuzhiyun __field(unsigned int, taillen) 649*4882a593Smuzhiyun __field(unsigned int, rtype) 650*4882a593Smuzhiyun __field(unsigned int, wtype) 651*4882a593Smuzhiyun ), 652*4882a593Smuzhiyun 653*4882a593Smuzhiyun TP_fast_assign( 654*4882a593Smuzhiyun const struct rpc_rqst *rqst = &req->rl_slot; 655*4882a593Smuzhiyun 656*4882a593Smuzhiyun __entry->task_id = rqst->rq_task->tk_pid; 657*4882a593Smuzhiyun __entry->client_id = rqst->rq_task->tk_client->cl_clid; 658*4882a593Smuzhiyun __entry->xid = be32_to_cpu(rqst->rq_xid); 659*4882a593Smuzhiyun __entry->hdrlen = req->rl_hdrbuf.len; 660*4882a593Smuzhiyun __entry->headlen = rqst->rq_snd_buf.head[0].iov_len; 661*4882a593Smuzhiyun __entry->pagelen = rqst->rq_snd_buf.page_len; 662*4882a593Smuzhiyun __entry->taillen = rqst->rq_snd_buf.tail[0].iov_len; 663*4882a593Smuzhiyun __entry->rtype = rtype; 664*4882a593Smuzhiyun __entry->wtype = wtype; 665*4882a593Smuzhiyun ), 666*4882a593Smuzhiyun 667*4882a593Smuzhiyun TP_printk("task:%u@%u xid=0x%08x: hdr=%u xdr=%u/%u/%u %s/%s", 668*4882a593Smuzhiyun __entry->task_id, __entry->client_id, __entry->xid, 669*4882a593Smuzhiyun __entry->hdrlen, 670*4882a593Smuzhiyun __entry->headlen, __entry->pagelen, __entry->taillen, 671*4882a593Smuzhiyun xprtrdma_show_chunktype(__entry->rtype), 672*4882a593Smuzhiyun xprtrdma_show_chunktype(__entry->wtype) 673*4882a593Smuzhiyun ) 674*4882a593Smuzhiyun ); 675*4882a593Smuzhiyun 676*4882a593Smuzhiyun TRACE_EVENT(xprtrdma_marshal_failed, 677*4882a593Smuzhiyun TP_PROTO(const struct rpc_rqst *rqst, 678*4882a593Smuzhiyun int ret 679*4882a593Smuzhiyun ), 680*4882a593Smuzhiyun 681*4882a593Smuzhiyun TP_ARGS(rqst, ret), 682*4882a593Smuzhiyun 683*4882a593Smuzhiyun TP_STRUCT__entry( 684*4882a593Smuzhiyun __field(unsigned int, task_id) 685*4882a593Smuzhiyun __field(unsigned int, client_id) 686*4882a593Smuzhiyun __field(u32, xid) 687*4882a593Smuzhiyun __field(int, ret) 688*4882a593Smuzhiyun ), 689*4882a593Smuzhiyun 690*4882a593Smuzhiyun TP_fast_assign( 691*4882a593Smuzhiyun __entry->task_id = rqst->rq_task->tk_pid; 692*4882a593Smuzhiyun __entry->client_id = rqst->rq_task->tk_client->cl_clid; 693*4882a593Smuzhiyun __entry->xid = be32_to_cpu(rqst->rq_xid); 694*4882a593Smuzhiyun __entry->ret = ret; 695*4882a593Smuzhiyun ), 696*4882a593Smuzhiyun 697*4882a593Smuzhiyun TP_printk("task:%u@%u xid=0x%08x: ret=%d", 698*4882a593Smuzhiyun __entry->task_id, __entry->client_id, __entry->xid, 699*4882a593Smuzhiyun __entry->ret 700*4882a593Smuzhiyun ) 701*4882a593Smuzhiyun ); 702*4882a593Smuzhiyun 703*4882a593Smuzhiyun TRACE_EVENT(xprtrdma_prepsend_failed, 704*4882a593Smuzhiyun TP_PROTO(const struct rpc_rqst *rqst, 705*4882a593Smuzhiyun int ret 706*4882a593Smuzhiyun ), 707*4882a593Smuzhiyun 708*4882a593Smuzhiyun TP_ARGS(rqst, ret), 709*4882a593Smuzhiyun 710*4882a593Smuzhiyun TP_STRUCT__entry( 711*4882a593Smuzhiyun __field(unsigned int, task_id) 712*4882a593Smuzhiyun __field(unsigned int, client_id) 713*4882a593Smuzhiyun __field(u32, xid) 714*4882a593Smuzhiyun __field(int, ret) 715*4882a593Smuzhiyun ), 716*4882a593Smuzhiyun 717*4882a593Smuzhiyun TP_fast_assign( 718*4882a593Smuzhiyun __entry->task_id = rqst->rq_task->tk_pid; 719*4882a593Smuzhiyun __entry->client_id = rqst->rq_task->tk_client->cl_clid; 720*4882a593Smuzhiyun __entry->xid = be32_to_cpu(rqst->rq_xid); 721*4882a593Smuzhiyun __entry->ret = ret; 722*4882a593Smuzhiyun ), 723*4882a593Smuzhiyun 724*4882a593Smuzhiyun TP_printk("task:%u@%u xid=0x%08x: ret=%d", 725*4882a593Smuzhiyun __entry->task_id, __entry->client_id, __entry->xid, 726*4882a593Smuzhiyun __entry->ret 727*4882a593Smuzhiyun ) 728*4882a593Smuzhiyun ); 729*4882a593Smuzhiyun 730*4882a593Smuzhiyun TRACE_EVENT(xprtrdma_post_send, 731*4882a593Smuzhiyun TP_PROTO( 732*4882a593Smuzhiyun const struct rpcrdma_req *req 733*4882a593Smuzhiyun ), 734*4882a593Smuzhiyun 735*4882a593Smuzhiyun TP_ARGS(req), 736*4882a593Smuzhiyun 737*4882a593Smuzhiyun TP_STRUCT__entry( 738*4882a593Smuzhiyun __field(const void *, req) 739*4882a593Smuzhiyun __field(const void *, sc) 740*4882a593Smuzhiyun __field(unsigned int, task_id) 741*4882a593Smuzhiyun __field(unsigned int, client_id) 742*4882a593Smuzhiyun __field(int, num_sge) 743*4882a593Smuzhiyun __field(int, signaled) 744*4882a593Smuzhiyun ), 745*4882a593Smuzhiyun 746*4882a593Smuzhiyun TP_fast_assign( 747*4882a593Smuzhiyun const struct rpc_rqst *rqst = &req->rl_slot; 748*4882a593Smuzhiyun 749*4882a593Smuzhiyun __entry->task_id = rqst->rq_task->tk_pid; 750*4882a593Smuzhiyun __entry->client_id = rqst->rq_task->tk_client ? 751*4882a593Smuzhiyun rqst->rq_task->tk_client->cl_clid : -1; 752*4882a593Smuzhiyun __entry->req = req; 753*4882a593Smuzhiyun __entry->sc = req->rl_sendctx; 754*4882a593Smuzhiyun __entry->num_sge = req->rl_wr.num_sge; 755*4882a593Smuzhiyun __entry->signaled = req->rl_wr.send_flags & IB_SEND_SIGNALED; 756*4882a593Smuzhiyun ), 757*4882a593Smuzhiyun 758*4882a593Smuzhiyun TP_printk("task:%u@%u req=%p sc=%p (%d SGE%s) %s", 759*4882a593Smuzhiyun __entry->task_id, __entry->client_id, 760*4882a593Smuzhiyun __entry->req, __entry->sc, __entry->num_sge, 761*4882a593Smuzhiyun (__entry->num_sge == 1 ? "" : "s"), 762*4882a593Smuzhiyun (__entry->signaled ? "signaled" : "") 763*4882a593Smuzhiyun ) 764*4882a593Smuzhiyun ); 765*4882a593Smuzhiyun 766*4882a593Smuzhiyun TRACE_EVENT(xprtrdma_post_recv, 767*4882a593Smuzhiyun TP_PROTO( 768*4882a593Smuzhiyun const struct rpcrdma_rep *rep 769*4882a593Smuzhiyun ), 770*4882a593Smuzhiyun 771*4882a593Smuzhiyun TP_ARGS(rep), 772*4882a593Smuzhiyun 773*4882a593Smuzhiyun TP_STRUCT__entry( 774*4882a593Smuzhiyun __field(const void *, rep) 775*4882a593Smuzhiyun ), 776*4882a593Smuzhiyun 777*4882a593Smuzhiyun TP_fast_assign( 778*4882a593Smuzhiyun __entry->rep = rep; 779*4882a593Smuzhiyun ), 780*4882a593Smuzhiyun 781*4882a593Smuzhiyun TP_printk("rep=%p", 782*4882a593Smuzhiyun __entry->rep 783*4882a593Smuzhiyun ) 784*4882a593Smuzhiyun ); 785*4882a593Smuzhiyun 786*4882a593Smuzhiyun TRACE_EVENT(xprtrdma_post_recvs, 787*4882a593Smuzhiyun TP_PROTO( 788*4882a593Smuzhiyun const struct rpcrdma_xprt *r_xprt, 789*4882a593Smuzhiyun unsigned int count, 790*4882a593Smuzhiyun int status 791*4882a593Smuzhiyun ), 792*4882a593Smuzhiyun 793*4882a593Smuzhiyun TP_ARGS(r_xprt, count, status), 794*4882a593Smuzhiyun 795*4882a593Smuzhiyun TP_STRUCT__entry( 796*4882a593Smuzhiyun __field(const void *, r_xprt) 797*4882a593Smuzhiyun __field(unsigned int, count) 798*4882a593Smuzhiyun __field(int, status) 799*4882a593Smuzhiyun __field(int, posted) 800*4882a593Smuzhiyun __string(addr, rpcrdma_addrstr(r_xprt)) 801*4882a593Smuzhiyun __string(port, rpcrdma_portstr(r_xprt)) 802*4882a593Smuzhiyun ), 803*4882a593Smuzhiyun 804*4882a593Smuzhiyun TP_fast_assign( 805*4882a593Smuzhiyun __entry->r_xprt = r_xprt; 806*4882a593Smuzhiyun __entry->count = count; 807*4882a593Smuzhiyun __entry->status = status; 808*4882a593Smuzhiyun __entry->posted = r_xprt->rx_ep->re_receive_count; 809*4882a593Smuzhiyun __assign_str(addr, rpcrdma_addrstr(r_xprt)); 810*4882a593Smuzhiyun __assign_str(port, rpcrdma_portstr(r_xprt)); 811*4882a593Smuzhiyun ), 812*4882a593Smuzhiyun 813*4882a593Smuzhiyun TP_printk("peer=[%s]:%s r_xprt=%p: %u new recvs, %d active (rc %d)", 814*4882a593Smuzhiyun __get_str(addr), __get_str(port), __entry->r_xprt, 815*4882a593Smuzhiyun __entry->count, __entry->posted, __entry->status 816*4882a593Smuzhiyun ) 817*4882a593Smuzhiyun ); 818*4882a593Smuzhiyun 819*4882a593Smuzhiyun TRACE_EVENT(xprtrdma_post_linv, 820*4882a593Smuzhiyun TP_PROTO( 821*4882a593Smuzhiyun const struct rpcrdma_req *req, 822*4882a593Smuzhiyun int status 823*4882a593Smuzhiyun ), 824*4882a593Smuzhiyun 825*4882a593Smuzhiyun TP_ARGS(req, status), 826*4882a593Smuzhiyun 827*4882a593Smuzhiyun TP_STRUCT__entry( 828*4882a593Smuzhiyun __field(const void *, req) 829*4882a593Smuzhiyun __field(int, status) 830*4882a593Smuzhiyun __field(u32, xid) 831*4882a593Smuzhiyun ), 832*4882a593Smuzhiyun 833*4882a593Smuzhiyun TP_fast_assign( 834*4882a593Smuzhiyun __entry->req = req; 835*4882a593Smuzhiyun __entry->status = status; 836*4882a593Smuzhiyun __entry->xid = be32_to_cpu(req->rl_slot.rq_xid); 837*4882a593Smuzhiyun ), 838*4882a593Smuzhiyun 839*4882a593Smuzhiyun TP_printk("req=%p xid=0x%08x status=%d", 840*4882a593Smuzhiyun __entry->req, __entry->xid, __entry->status 841*4882a593Smuzhiyun ) 842*4882a593Smuzhiyun ); 843*4882a593Smuzhiyun 844*4882a593Smuzhiyun /** 845*4882a593Smuzhiyun ** Completion events 846*4882a593Smuzhiyun **/ 847*4882a593Smuzhiyun 848*4882a593Smuzhiyun TRACE_EVENT(xprtrdma_wc_send, 849*4882a593Smuzhiyun TP_PROTO( 850*4882a593Smuzhiyun const struct rpcrdma_sendctx *sc, 851*4882a593Smuzhiyun const struct ib_wc *wc 852*4882a593Smuzhiyun ), 853*4882a593Smuzhiyun 854*4882a593Smuzhiyun TP_ARGS(sc, wc), 855*4882a593Smuzhiyun 856*4882a593Smuzhiyun TP_STRUCT__entry( 857*4882a593Smuzhiyun __field(const void *, req) 858*4882a593Smuzhiyun __field(const void *, sc) 859*4882a593Smuzhiyun __field(unsigned int, unmap_count) 860*4882a593Smuzhiyun __field(unsigned int, status) 861*4882a593Smuzhiyun __field(unsigned int, vendor_err) 862*4882a593Smuzhiyun ), 863*4882a593Smuzhiyun 864*4882a593Smuzhiyun TP_fast_assign( 865*4882a593Smuzhiyun __entry->req = sc->sc_req; 866*4882a593Smuzhiyun __entry->sc = sc; 867*4882a593Smuzhiyun __entry->unmap_count = sc->sc_unmap_count; 868*4882a593Smuzhiyun __entry->status = wc->status; 869*4882a593Smuzhiyun __entry->vendor_err = __entry->status ? wc->vendor_err : 0; 870*4882a593Smuzhiyun ), 871*4882a593Smuzhiyun 872*4882a593Smuzhiyun TP_printk("req=%p sc=%p unmapped=%u: %s (%u/0x%x)", 873*4882a593Smuzhiyun __entry->req, __entry->sc, __entry->unmap_count, 874*4882a593Smuzhiyun rdma_show_wc_status(__entry->status), 875*4882a593Smuzhiyun __entry->status, __entry->vendor_err 876*4882a593Smuzhiyun ) 877*4882a593Smuzhiyun ); 878*4882a593Smuzhiyun 879*4882a593Smuzhiyun TRACE_EVENT(xprtrdma_wc_receive, 880*4882a593Smuzhiyun TP_PROTO( 881*4882a593Smuzhiyun const struct ib_wc *wc 882*4882a593Smuzhiyun ), 883*4882a593Smuzhiyun 884*4882a593Smuzhiyun TP_ARGS(wc), 885*4882a593Smuzhiyun 886*4882a593Smuzhiyun TP_STRUCT__entry( 887*4882a593Smuzhiyun __field(const void *, rep) 888*4882a593Smuzhiyun __field(u32, byte_len) 889*4882a593Smuzhiyun __field(unsigned int, status) 890*4882a593Smuzhiyun __field(u32, vendor_err) 891*4882a593Smuzhiyun ), 892*4882a593Smuzhiyun 893*4882a593Smuzhiyun TP_fast_assign( 894*4882a593Smuzhiyun __entry->rep = container_of(wc->wr_cqe, struct rpcrdma_rep, 895*4882a593Smuzhiyun rr_cqe); 896*4882a593Smuzhiyun __entry->status = wc->status; 897*4882a593Smuzhiyun if (wc->status) { 898*4882a593Smuzhiyun __entry->byte_len = 0; 899*4882a593Smuzhiyun __entry->vendor_err = wc->vendor_err; 900*4882a593Smuzhiyun } else { 901*4882a593Smuzhiyun __entry->byte_len = wc->byte_len; 902*4882a593Smuzhiyun __entry->vendor_err = 0; 903*4882a593Smuzhiyun } 904*4882a593Smuzhiyun ), 905*4882a593Smuzhiyun 906*4882a593Smuzhiyun TP_printk("rep=%p %u bytes: %s (%u/0x%x)", 907*4882a593Smuzhiyun __entry->rep, __entry->byte_len, 908*4882a593Smuzhiyun rdma_show_wc_status(__entry->status), 909*4882a593Smuzhiyun __entry->status, __entry->vendor_err 910*4882a593Smuzhiyun ) 911*4882a593Smuzhiyun ); 912*4882a593Smuzhiyun 913*4882a593Smuzhiyun DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_fastreg); 914*4882a593Smuzhiyun DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_li); 915*4882a593Smuzhiyun DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_li_wake); 916*4882a593Smuzhiyun DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_li_done); 917*4882a593Smuzhiyun 918*4882a593Smuzhiyun TRACE_EVENT(xprtrdma_frwr_alloc, 919*4882a593Smuzhiyun TP_PROTO( 920*4882a593Smuzhiyun const struct rpcrdma_mr *mr, 921*4882a593Smuzhiyun int rc 922*4882a593Smuzhiyun ), 923*4882a593Smuzhiyun 924*4882a593Smuzhiyun TP_ARGS(mr, rc), 925*4882a593Smuzhiyun 926*4882a593Smuzhiyun TP_STRUCT__entry( 927*4882a593Smuzhiyun __field(u32, mr_id) 928*4882a593Smuzhiyun __field(int, rc) 929*4882a593Smuzhiyun ), 930*4882a593Smuzhiyun 931*4882a593Smuzhiyun TP_fast_assign( 932*4882a593Smuzhiyun __entry->mr_id = mr->frwr.fr_mr->res.id; 933*4882a593Smuzhiyun __entry->rc = rc; 934*4882a593Smuzhiyun ), 935*4882a593Smuzhiyun 936*4882a593Smuzhiyun TP_printk("mr.id=%u: rc=%d", 937*4882a593Smuzhiyun __entry->mr_id, __entry->rc 938*4882a593Smuzhiyun ) 939*4882a593Smuzhiyun ); 940*4882a593Smuzhiyun 941*4882a593Smuzhiyun TRACE_EVENT(xprtrdma_frwr_dereg, 942*4882a593Smuzhiyun TP_PROTO( 943*4882a593Smuzhiyun const struct rpcrdma_mr *mr, 944*4882a593Smuzhiyun int rc 945*4882a593Smuzhiyun ), 946*4882a593Smuzhiyun 947*4882a593Smuzhiyun TP_ARGS(mr, rc), 948*4882a593Smuzhiyun 949*4882a593Smuzhiyun TP_STRUCT__entry( 950*4882a593Smuzhiyun __field(u32, mr_id) 951*4882a593Smuzhiyun __field(int, nents) 952*4882a593Smuzhiyun __field(u32, handle) 953*4882a593Smuzhiyun __field(u32, length) 954*4882a593Smuzhiyun __field(u64, offset) 955*4882a593Smuzhiyun __field(u32, dir) 956*4882a593Smuzhiyun __field(int, rc) 957*4882a593Smuzhiyun ), 958*4882a593Smuzhiyun 959*4882a593Smuzhiyun TP_fast_assign( 960*4882a593Smuzhiyun __entry->mr_id = mr->frwr.fr_mr->res.id; 961*4882a593Smuzhiyun __entry->nents = mr->mr_nents; 962*4882a593Smuzhiyun __entry->handle = mr->mr_handle; 963*4882a593Smuzhiyun __entry->length = mr->mr_length; 964*4882a593Smuzhiyun __entry->offset = mr->mr_offset; 965*4882a593Smuzhiyun __entry->dir = mr->mr_dir; 966*4882a593Smuzhiyun __entry->rc = rc; 967*4882a593Smuzhiyun ), 968*4882a593Smuzhiyun 969*4882a593Smuzhiyun TP_printk("mr.id=%u nents=%d %u@0x%016llx:0x%08x (%s): rc=%d", 970*4882a593Smuzhiyun __entry->mr_id, __entry->nents, __entry->length, 971*4882a593Smuzhiyun (unsigned long long)__entry->offset, __entry->handle, 972*4882a593Smuzhiyun xprtrdma_show_direction(__entry->dir), 973*4882a593Smuzhiyun __entry->rc 974*4882a593Smuzhiyun ) 975*4882a593Smuzhiyun ); 976*4882a593Smuzhiyun 977*4882a593Smuzhiyun TRACE_EVENT(xprtrdma_frwr_sgerr, 978*4882a593Smuzhiyun TP_PROTO( 979*4882a593Smuzhiyun const struct rpcrdma_mr *mr, 980*4882a593Smuzhiyun int sg_nents 981*4882a593Smuzhiyun ), 982*4882a593Smuzhiyun 983*4882a593Smuzhiyun TP_ARGS(mr, sg_nents), 984*4882a593Smuzhiyun 985*4882a593Smuzhiyun TP_STRUCT__entry( 986*4882a593Smuzhiyun __field(u32, mr_id) 987*4882a593Smuzhiyun __field(u64, addr) 988*4882a593Smuzhiyun __field(u32, dir) 989*4882a593Smuzhiyun __field(int, nents) 990*4882a593Smuzhiyun ), 991*4882a593Smuzhiyun 992*4882a593Smuzhiyun TP_fast_assign( 993*4882a593Smuzhiyun __entry->mr_id = mr->frwr.fr_mr->res.id; 994*4882a593Smuzhiyun __entry->addr = mr->mr_sg->dma_address; 995*4882a593Smuzhiyun __entry->dir = mr->mr_dir; 996*4882a593Smuzhiyun __entry->nents = sg_nents; 997*4882a593Smuzhiyun ), 998*4882a593Smuzhiyun 999*4882a593Smuzhiyun TP_printk("mr.id=%u DMA addr=0x%llx (%s) sg_nents=%d", 1000*4882a593Smuzhiyun __entry->mr_id, __entry->addr, 1001*4882a593Smuzhiyun xprtrdma_show_direction(__entry->dir), 1002*4882a593Smuzhiyun __entry->nents 1003*4882a593Smuzhiyun ) 1004*4882a593Smuzhiyun ); 1005*4882a593Smuzhiyun 1006*4882a593Smuzhiyun TRACE_EVENT(xprtrdma_frwr_maperr, 1007*4882a593Smuzhiyun TP_PROTO( 1008*4882a593Smuzhiyun const struct rpcrdma_mr *mr, 1009*4882a593Smuzhiyun int num_mapped 1010*4882a593Smuzhiyun ), 1011*4882a593Smuzhiyun 1012*4882a593Smuzhiyun TP_ARGS(mr, num_mapped), 1013*4882a593Smuzhiyun 1014*4882a593Smuzhiyun TP_STRUCT__entry( 1015*4882a593Smuzhiyun __field(u32, mr_id) 1016*4882a593Smuzhiyun __field(u64, addr) 1017*4882a593Smuzhiyun __field(u32, dir) 1018*4882a593Smuzhiyun __field(int, num_mapped) 1019*4882a593Smuzhiyun __field(int, nents) 1020*4882a593Smuzhiyun ), 1021*4882a593Smuzhiyun 1022*4882a593Smuzhiyun TP_fast_assign( 1023*4882a593Smuzhiyun __entry->mr_id = mr->frwr.fr_mr->res.id; 1024*4882a593Smuzhiyun __entry->addr = mr->mr_sg->dma_address; 1025*4882a593Smuzhiyun __entry->dir = mr->mr_dir; 1026*4882a593Smuzhiyun __entry->num_mapped = num_mapped; 1027*4882a593Smuzhiyun __entry->nents = mr->mr_nents; 1028*4882a593Smuzhiyun ), 1029*4882a593Smuzhiyun 1030*4882a593Smuzhiyun TP_printk("mr.id=%u DMA addr=0x%llx (%s) nents=%d of %d", 1031*4882a593Smuzhiyun __entry->mr_id, __entry->addr, 1032*4882a593Smuzhiyun xprtrdma_show_direction(__entry->dir), 1033*4882a593Smuzhiyun __entry->num_mapped, __entry->nents 1034*4882a593Smuzhiyun ) 1035*4882a593Smuzhiyun ); 1036*4882a593Smuzhiyun 1037*4882a593Smuzhiyun DEFINE_MR_EVENT(localinv); 1038*4882a593Smuzhiyun DEFINE_MR_EVENT(map); 1039*4882a593Smuzhiyun DEFINE_MR_EVENT(unmap); 1040*4882a593Smuzhiyun DEFINE_MR_EVENT(reminv); 1041*4882a593Smuzhiyun DEFINE_MR_EVENT(recycle); 1042*4882a593Smuzhiyun 1043*4882a593Smuzhiyun TRACE_EVENT(xprtrdma_dma_maperr, 1044*4882a593Smuzhiyun TP_PROTO( 1045*4882a593Smuzhiyun u64 addr 1046*4882a593Smuzhiyun ), 1047*4882a593Smuzhiyun 1048*4882a593Smuzhiyun TP_ARGS(addr), 1049*4882a593Smuzhiyun 1050*4882a593Smuzhiyun TP_STRUCT__entry( 1051*4882a593Smuzhiyun __field(u64, addr) 1052*4882a593Smuzhiyun ), 1053*4882a593Smuzhiyun 1054*4882a593Smuzhiyun TP_fast_assign( 1055*4882a593Smuzhiyun __entry->addr = addr; 1056*4882a593Smuzhiyun ), 1057*4882a593Smuzhiyun 1058*4882a593Smuzhiyun TP_printk("dma addr=0x%llx\n", __entry->addr) 1059*4882a593Smuzhiyun ); 1060*4882a593Smuzhiyun 1061*4882a593Smuzhiyun /** 1062*4882a593Smuzhiyun ** Reply events 1063*4882a593Smuzhiyun **/ 1064*4882a593Smuzhiyun 1065*4882a593Smuzhiyun TRACE_EVENT(xprtrdma_reply, 1066*4882a593Smuzhiyun TP_PROTO( 1067*4882a593Smuzhiyun const struct rpc_task *task, 1068*4882a593Smuzhiyun const struct rpcrdma_rep *rep, 1069*4882a593Smuzhiyun const struct rpcrdma_req *req, 1070*4882a593Smuzhiyun unsigned int credits 1071*4882a593Smuzhiyun ), 1072*4882a593Smuzhiyun 1073*4882a593Smuzhiyun TP_ARGS(task, rep, req, credits), 1074*4882a593Smuzhiyun 1075*4882a593Smuzhiyun TP_STRUCT__entry( 1076*4882a593Smuzhiyun __field(unsigned int, task_id) 1077*4882a593Smuzhiyun __field(unsigned int, client_id) 1078*4882a593Smuzhiyun __field(const void *, rep) 1079*4882a593Smuzhiyun __field(const void *, req) 1080*4882a593Smuzhiyun __field(u32, xid) 1081*4882a593Smuzhiyun __field(unsigned int, credits) 1082*4882a593Smuzhiyun ), 1083*4882a593Smuzhiyun 1084*4882a593Smuzhiyun TP_fast_assign( 1085*4882a593Smuzhiyun __entry->task_id = task->tk_pid; 1086*4882a593Smuzhiyun __entry->client_id = task->tk_client->cl_clid; 1087*4882a593Smuzhiyun __entry->rep = rep; 1088*4882a593Smuzhiyun __entry->req = req; 1089*4882a593Smuzhiyun __entry->xid = be32_to_cpu(rep->rr_xid); 1090*4882a593Smuzhiyun __entry->credits = credits; 1091*4882a593Smuzhiyun ), 1092*4882a593Smuzhiyun 1093*4882a593Smuzhiyun TP_printk("task:%u@%u xid=0x%08x, %u credits, rep=%p -> req=%p", 1094*4882a593Smuzhiyun __entry->task_id, __entry->client_id, __entry->xid, 1095*4882a593Smuzhiyun __entry->credits, __entry->rep, __entry->req 1096*4882a593Smuzhiyun ) 1097*4882a593Smuzhiyun ); 1098*4882a593Smuzhiyun 1099*4882a593Smuzhiyun TRACE_EVENT(xprtrdma_defer_cmp, 1100*4882a593Smuzhiyun TP_PROTO( 1101*4882a593Smuzhiyun const struct rpcrdma_rep *rep 1102*4882a593Smuzhiyun ), 1103*4882a593Smuzhiyun 1104*4882a593Smuzhiyun TP_ARGS(rep), 1105*4882a593Smuzhiyun 1106*4882a593Smuzhiyun TP_STRUCT__entry( 1107*4882a593Smuzhiyun __field(unsigned int, task_id) 1108*4882a593Smuzhiyun __field(unsigned int, client_id) 1109*4882a593Smuzhiyun __field(const void *, rep) 1110*4882a593Smuzhiyun __field(u32, xid) 1111*4882a593Smuzhiyun ), 1112*4882a593Smuzhiyun 1113*4882a593Smuzhiyun TP_fast_assign( 1114*4882a593Smuzhiyun __entry->task_id = rep->rr_rqst->rq_task->tk_pid; 1115*4882a593Smuzhiyun __entry->client_id = rep->rr_rqst->rq_task->tk_client->cl_clid; 1116*4882a593Smuzhiyun __entry->rep = rep; 1117*4882a593Smuzhiyun __entry->xid = be32_to_cpu(rep->rr_xid); 1118*4882a593Smuzhiyun ), 1119*4882a593Smuzhiyun 1120*4882a593Smuzhiyun TP_printk("task:%u@%u xid=0x%08x rep=%p", 1121*4882a593Smuzhiyun __entry->task_id, __entry->client_id, __entry->xid, 1122*4882a593Smuzhiyun __entry->rep 1123*4882a593Smuzhiyun ) 1124*4882a593Smuzhiyun ); 1125*4882a593Smuzhiyun 1126*4882a593Smuzhiyun DEFINE_REPLY_EVENT(xprtrdma_reply_vers); 1127*4882a593Smuzhiyun DEFINE_REPLY_EVENT(xprtrdma_reply_rqst); 1128*4882a593Smuzhiyun DEFINE_REPLY_EVENT(xprtrdma_reply_short); 1129*4882a593Smuzhiyun DEFINE_REPLY_EVENT(xprtrdma_reply_hdr); 1130*4882a593Smuzhiyun 1131*4882a593Smuzhiyun TRACE_EVENT(xprtrdma_fixup, 1132*4882a593Smuzhiyun TP_PROTO( 1133*4882a593Smuzhiyun const struct rpc_rqst *rqst, 1134*4882a593Smuzhiyun unsigned long fixup 1135*4882a593Smuzhiyun ), 1136*4882a593Smuzhiyun 1137*4882a593Smuzhiyun TP_ARGS(rqst, fixup), 1138*4882a593Smuzhiyun 1139*4882a593Smuzhiyun TP_STRUCT__entry( 1140*4882a593Smuzhiyun __field(unsigned int, task_id) 1141*4882a593Smuzhiyun __field(unsigned int, client_id) 1142*4882a593Smuzhiyun __field(unsigned long, fixup) 1143*4882a593Smuzhiyun __field(size_t, headlen) 1144*4882a593Smuzhiyun __field(unsigned int, pagelen) 1145*4882a593Smuzhiyun __field(size_t, taillen) 1146*4882a593Smuzhiyun ), 1147*4882a593Smuzhiyun 1148*4882a593Smuzhiyun TP_fast_assign( 1149*4882a593Smuzhiyun __entry->task_id = rqst->rq_task->tk_pid; 1150*4882a593Smuzhiyun __entry->client_id = rqst->rq_task->tk_client->cl_clid; 1151*4882a593Smuzhiyun __entry->fixup = fixup; 1152*4882a593Smuzhiyun __entry->headlen = rqst->rq_rcv_buf.head[0].iov_len; 1153*4882a593Smuzhiyun __entry->pagelen = rqst->rq_rcv_buf.page_len; 1154*4882a593Smuzhiyun __entry->taillen = rqst->rq_rcv_buf.tail[0].iov_len; 1155*4882a593Smuzhiyun ), 1156*4882a593Smuzhiyun 1157*4882a593Smuzhiyun TP_printk("task:%u@%u fixup=%lu xdr=%zu/%u/%zu", 1158*4882a593Smuzhiyun __entry->task_id, __entry->client_id, __entry->fixup, 1159*4882a593Smuzhiyun __entry->headlen, __entry->pagelen, __entry->taillen 1160*4882a593Smuzhiyun ) 1161*4882a593Smuzhiyun ); 1162*4882a593Smuzhiyun 1163*4882a593Smuzhiyun TRACE_EVENT(xprtrdma_decode_seg, 1164*4882a593Smuzhiyun TP_PROTO( 1165*4882a593Smuzhiyun u32 handle, 1166*4882a593Smuzhiyun u32 length, 1167*4882a593Smuzhiyun u64 offset 1168*4882a593Smuzhiyun ), 1169*4882a593Smuzhiyun 1170*4882a593Smuzhiyun TP_ARGS(handle, length, offset), 1171*4882a593Smuzhiyun 1172*4882a593Smuzhiyun TP_STRUCT__entry( 1173*4882a593Smuzhiyun __field(u32, handle) 1174*4882a593Smuzhiyun __field(u32, length) 1175*4882a593Smuzhiyun __field(u64, offset) 1176*4882a593Smuzhiyun ), 1177*4882a593Smuzhiyun 1178*4882a593Smuzhiyun TP_fast_assign( 1179*4882a593Smuzhiyun __entry->handle = handle; 1180*4882a593Smuzhiyun __entry->length = length; 1181*4882a593Smuzhiyun __entry->offset = offset; 1182*4882a593Smuzhiyun ), 1183*4882a593Smuzhiyun 1184*4882a593Smuzhiyun TP_printk("%u@0x%016llx:0x%08x", 1185*4882a593Smuzhiyun __entry->length, (unsigned long long)__entry->offset, 1186*4882a593Smuzhiyun __entry->handle 1187*4882a593Smuzhiyun ) 1188*4882a593Smuzhiyun ); 1189*4882a593Smuzhiyun 1190*4882a593Smuzhiyun /** 1191*4882a593Smuzhiyun ** Callback events 1192*4882a593Smuzhiyun **/ 1193*4882a593Smuzhiyun 1194*4882a593Smuzhiyun TRACE_EVENT(xprtrdma_cb_setup, 1195*4882a593Smuzhiyun TP_PROTO( 1196*4882a593Smuzhiyun const struct rpcrdma_xprt *r_xprt, 1197*4882a593Smuzhiyun unsigned int reqs 1198*4882a593Smuzhiyun ), 1199*4882a593Smuzhiyun 1200*4882a593Smuzhiyun TP_ARGS(r_xprt, reqs), 1201*4882a593Smuzhiyun 1202*4882a593Smuzhiyun TP_STRUCT__entry( 1203*4882a593Smuzhiyun __field(const void *, r_xprt) 1204*4882a593Smuzhiyun __field(unsigned int, reqs) 1205*4882a593Smuzhiyun __string(addr, rpcrdma_addrstr(r_xprt)) 1206*4882a593Smuzhiyun __string(port, rpcrdma_portstr(r_xprt)) 1207*4882a593Smuzhiyun ), 1208*4882a593Smuzhiyun 1209*4882a593Smuzhiyun TP_fast_assign( 1210*4882a593Smuzhiyun __entry->r_xprt = r_xprt; 1211*4882a593Smuzhiyun __entry->reqs = reqs; 1212*4882a593Smuzhiyun __assign_str(addr, rpcrdma_addrstr(r_xprt)); 1213*4882a593Smuzhiyun __assign_str(port, rpcrdma_portstr(r_xprt)); 1214*4882a593Smuzhiyun ), 1215*4882a593Smuzhiyun 1216*4882a593Smuzhiyun TP_printk("peer=[%s]:%s r_xprt=%p: %u reqs", 1217*4882a593Smuzhiyun __get_str(addr), __get_str(port), 1218*4882a593Smuzhiyun __entry->r_xprt, __entry->reqs 1219*4882a593Smuzhiyun ) 1220*4882a593Smuzhiyun ); 1221*4882a593Smuzhiyun 1222*4882a593Smuzhiyun DEFINE_CB_EVENT(xprtrdma_cb_call); 1223*4882a593Smuzhiyun DEFINE_CB_EVENT(xprtrdma_cb_reply); 1224*4882a593Smuzhiyun 1225*4882a593Smuzhiyun TRACE_EVENT(xprtrdma_leaked_rep, 1226*4882a593Smuzhiyun TP_PROTO( 1227*4882a593Smuzhiyun const struct rpc_rqst *rqst, 1228*4882a593Smuzhiyun const struct rpcrdma_rep *rep 1229*4882a593Smuzhiyun ), 1230*4882a593Smuzhiyun 1231*4882a593Smuzhiyun TP_ARGS(rqst, rep), 1232*4882a593Smuzhiyun 1233*4882a593Smuzhiyun TP_STRUCT__entry( 1234*4882a593Smuzhiyun __field(unsigned int, task_id) 1235*4882a593Smuzhiyun __field(unsigned int, client_id) 1236*4882a593Smuzhiyun __field(u32, xid) 1237*4882a593Smuzhiyun __field(const void *, rep) 1238*4882a593Smuzhiyun ), 1239*4882a593Smuzhiyun 1240*4882a593Smuzhiyun TP_fast_assign( 1241*4882a593Smuzhiyun __entry->task_id = rqst->rq_task->tk_pid; 1242*4882a593Smuzhiyun __entry->client_id = rqst->rq_task->tk_client->cl_clid; 1243*4882a593Smuzhiyun __entry->xid = be32_to_cpu(rqst->rq_xid); 1244*4882a593Smuzhiyun __entry->rep = rep; 1245*4882a593Smuzhiyun ), 1246*4882a593Smuzhiyun 1247*4882a593Smuzhiyun TP_printk("task:%u@%u xid=0x%08x rep=%p", 1248*4882a593Smuzhiyun __entry->task_id, __entry->client_id, __entry->xid, 1249*4882a593Smuzhiyun __entry->rep 1250*4882a593Smuzhiyun ) 1251*4882a593Smuzhiyun ); 1252*4882a593Smuzhiyun 1253*4882a593Smuzhiyun /** 1254*4882a593Smuzhiyun ** Server-side RPC/RDMA events 1255*4882a593Smuzhiyun **/ 1256*4882a593Smuzhiyun 1257*4882a593Smuzhiyun DECLARE_EVENT_CLASS(svcrdma_accept_class, 1258*4882a593Smuzhiyun TP_PROTO( 1259*4882a593Smuzhiyun const struct svcxprt_rdma *rdma, 1260*4882a593Smuzhiyun long status 1261*4882a593Smuzhiyun ), 1262*4882a593Smuzhiyun 1263*4882a593Smuzhiyun TP_ARGS(rdma, status), 1264*4882a593Smuzhiyun 1265*4882a593Smuzhiyun TP_STRUCT__entry( 1266*4882a593Smuzhiyun __field(long, status) 1267*4882a593Smuzhiyun __string(addr, rdma->sc_xprt.xpt_remotebuf) 1268*4882a593Smuzhiyun ), 1269*4882a593Smuzhiyun 1270*4882a593Smuzhiyun TP_fast_assign( 1271*4882a593Smuzhiyun __entry->status = status; 1272*4882a593Smuzhiyun __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1273*4882a593Smuzhiyun ), 1274*4882a593Smuzhiyun 1275*4882a593Smuzhiyun TP_printk("addr=%s status=%ld", 1276*4882a593Smuzhiyun __get_str(addr), __entry->status 1277*4882a593Smuzhiyun ) 1278*4882a593Smuzhiyun ); 1279*4882a593Smuzhiyun 1280*4882a593Smuzhiyun #define DEFINE_ACCEPT_EVENT(name) \ 1281*4882a593Smuzhiyun DEFINE_EVENT(svcrdma_accept_class, svcrdma_##name##_err, \ 1282*4882a593Smuzhiyun TP_PROTO( \ 1283*4882a593Smuzhiyun const struct svcxprt_rdma *rdma, \ 1284*4882a593Smuzhiyun long status \ 1285*4882a593Smuzhiyun ), \ 1286*4882a593Smuzhiyun TP_ARGS(rdma, status)) 1287*4882a593Smuzhiyun 1288*4882a593Smuzhiyun DEFINE_ACCEPT_EVENT(pd); 1289*4882a593Smuzhiyun DEFINE_ACCEPT_EVENT(qp); 1290*4882a593Smuzhiyun DEFINE_ACCEPT_EVENT(fabric); 1291*4882a593Smuzhiyun DEFINE_ACCEPT_EVENT(initdepth); 1292*4882a593Smuzhiyun DEFINE_ACCEPT_EVENT(accept); 1293*4882a593Smuzhiyun 1294*4882a593Smuzhiyun TRACE_DEFINE_ENUM(RDMA_MSG); 1295*4882a593Smuzhiyun TRACE_DEFINE_ENUM(RDMA_NOMSG); 1296*4882a593Smuzhiyun TRACE_DEFINE_ENUM(RDMA_MSGP); 1297*4882a593Smuzhiyun TRACE_DEFINE_ENUM(RDMA_DONE); 1298*4882a593Smuzhiyun TRACE_DEFINE_ENUM(RDMA_ERROR); 1299*4882a593Smuzhiyun 1300*4882a593Smuzhiyun #define show_rpcrdma_proc(x) \ 1301*4882a593Smuzhiyun __print_symbolic(x, \ 1302*4882a593Smuzhiyun { RDMA_MSG, "RDMA_MSG" }, \ 1303*4882a593Smuzhiyun { RDMA_NOMSG, "RDMA_NOMSG" }, \ 1304*4882a593Smuzhiyun { RDMA_MSGP, "RDMA_MSGP" }, \ 1305*4882a593Smuzhiyun { RDMA_DONE, "RDMA_DONE" }, \ 1306*4882a593Smuzhiyun { RDMA_ERROR, "RDMA_ERROR" }) 1307*4882a593Smuzhiyun 1308*4882a593Smuzhiyun TRACE_EVENT(svcrdma_decode_rqst, 1309*4882a593Smuzhiyun TP_PROTO( 1310*4882a593Smuzhiyun const struct svc_rdma_recv_ctxt *ctxt, 1311*4882a593Smuzhiyun __be32 *p, 1312*4882a593Smuzhiyun unsigned int hdrlen 1313*4882a593Smuzhiyun ), 1314*4882a593Smuzhiyun 1315*4882a593Smuzhiyun TP_ARGS(ctxt, p, hdrlen), 1316*4882a593Smuzhiyun 1317*4882a593Smuzhiyun TP_STRUCT__entry( 1318*4882a593Smuzhiyun __field(u32, cq_id) 1319*4882a593Smuzhiyun __field(int, completion_id) 1320*4882a593Smuzhiyun __field(u32, xid) 1321*4882a593Smuzhiyun __field(u32, vers) 1322*4882a593Smuzhiyun __field(u32, proc) 1323*4882a593Smuzhiyun __field(u32, credits) 1324*4882a593Smuzhiyun __field(unsigned int, hdrlen) 1325*4882a593Smuzhiyun ), 1326*4882a593Smuzhiyun 1327*4882a593Smuzhiyun TP_fast_assign( 1328*4882a593Smuzhiyun __entry->cq_id = ctxt->rc_cid.ci_queue_id; 1329*4882a593Smuzhiyun __entry->completion_id = ctxt->rc_cid.ci_completion_id; 1330*4882a593Smuzhiyun __entry->xid = be32_to_cpup(p++); 1331*4882a593Smuzhiyun __entry->vers = be32_to_cpup(p++); 1332*4882a593Smuzhiyun __entry->credits = be32_to_cpup(p++); 1333*4882a593Smuzhiyun __entry->proc = be32_to_cpup(p); 1334*4882a593Smuzhiyun __entry->hdrlen = hdrlen; 1335*4882a593Smuzhiyun ), 1336*4882a593Smuzhiyun 1337*4882a593Smuzhiyun TP_printk("cq.id=%u cid=%d xid=0x%08x vers=%u credits=%u proc=%s hdrlen=%u", 1338*4882a593Smuzhiyun __entry->cq_id, __entry->completion_id, 1339*4882a593Smuzhiyun __entry->xid, __entry->vers, __entry->credits, 1340*4882a593Smuzhiyun show_rpcrdma_proc(__entry->proc), __entry->hdrlen) 1341*4882a593Smuzhiyun ); 1342*4882a593Smuzhiyun 1343*4882a593Smuzhiyun TRACE_EVENT(svcrdma_decode_short_err, 1344*4882a593Smuzhiyun TP_PROTO( 1345*4882a593Smuzhiyun const struct svc_rdma_recv_ctxt *ctxt, 1346*4882a593Smuzhiyun unsigned int hdrlen 1347*4882a593Smuzhiyun ), 1348*4882a593Smuzhiyun 1349*4882a593Smuzhiyun TP_ARGS(ctxt, hdrlen), 1350*4882a593Smuzhiyun 1351*4882a593Smuzhiyun TP_STRUCT__entry( 1352*4882a593Smuzhiyun __field(u32, cq_id) 1353*4882a593Smuzhiyun __field(int, completion_id) 1354*4882a593Smuzhiyun __field(unsigned int, hdrlen) 1355*4882a593Smuzhiyun ), 1356*4882a593Smuzhiyun 1357*4882a593Smuzhiyun TP_fast_assign( 1358*4882a593Smuzhiyun __entry->cq_id = ctxt->rc_cid.ci_queue_id; 1359*4882a593Smuzhiyun __entry->completion_id = ctxt->rc_cid.ci_completion_id; 1360*4882a593Smuzhiyun __entry->hdrlen = hdrlen; 1361*4882a593Smuzhiyun ), 1362*4882a593Smuzhiyun 1363*4882a593Smuzhiyun TP_printk("cq.id=%u cid=%d hdrlen=%u", 1364*4882a593Smuzhiyun __entry->cq_id, __entry->completion_id, 1365*4882a593Smuzhiyun __entry->hdrlen) 1366*4882a593Smuzhiyun ); 1367*4882a593Smuzhiyun 1368*4882a593Smuzhiyun DECLARE_EVENT_CLASS(svcrdma_badreq_event, 1369*4882a593Smuzhiyun TP_PROTO( 1370*4882a593Smuzhiyun const struct svc_rdma_recv_ctxt *ctxt, 1371*4882a593Smuzhiyun __be32 *p 1372*4882a593Smuzhiyun ), 1373*4882a593Smuzhiyun 1374*4882a593Smuzhiyun TP_ARGS(ctxt, p), 1375*4882a593Smuzhiyun 1376*4882a593Smuzhiyun TP_STRUCT__entry( 1377*4882a593Smuzhiyun __field(u32, cq_id) 1378*4882a593Smuzhiyun __field(int, completion_id) 1379*4882a593Smuzhiyun __field(u32, xid) 1380*4882a593Smuzhiyun __field(u32, vers) 1381*4882a593Smuzhiyun __field(u32, proc) 1382*4882a593Smuzhiyun __field(u32, credits) 1383*4882a593Smuzhiyun ), 1384*4882a593Smuzhiyun 1385*4882a593Smuzhiyun TP_fast_assign( 1386*4882a593Smuzhiyun __entry->cq_id = ctxt->rc_cid.ci_queue_id; 1387*4882a593Smuzhiyun __entry->completion_id = ctxt->rc_cid.ci_completion_id; 1388*4882a593Smuzhiyun __entry->xid = be32_to_cpup(p++); 1389*4882a593Smuzhiyun __entry->vers = be32_to_cpup(p++); 1390*4882a593Smuzhiyun __entry->credits = be32_to_cpup(p++); 1391*4882a593Smuzhiyun __entry->proc = be32_to_cpup(p); 1392*4882a593Smuzhiyun ), 1393*4882a593Smuzhiyun 1394*4882a593Smuzhiyun TP_printk("cq.id=%u cid=%d xid=0x%08x vers=%u credits=%u proc=%u", 1395*4882a593Smuzhiyun __entry->cq_id, __entry->completion_id, 1396*4882a593Smuzhiyun __entry->xid, __entry->vers, __entry->credits, __entry->proc) 1397*4882a593Smuzhiyun ); 1398*4882a593Smuzhiyun 1399*4882a593Smuzhiyun #define DEFINE_BADREQ_EVENT(name) \ 1400*4882a593Smuzhiyun DEFINE_EVENT(svcrdma_badreq_event, \ 1401*4882a593Smuzhiyun svcrdma_decode_##name##_err, \ 1402*4882a593Smuzhiyun TP_PROTO( \ 1403*4882a593Smuzhiyun const struct svc_rdma_recv_ctxt *ctxt, \ 1404*4882a593Smuzhiyun __be32 *p \ 1405*4882a593Smuzhiyun ), \ 1406*4882a593Smuzhiyun TP_ARGS(ctxt, p)) 1407*4882a593Smuzhiyun 1408*4882a593Smuzhiyun DEFINE_BADREQ_EVENT(badvers); 1409*4882a593Smuzhiyun DEFINE_BADREQ_EVENT(drop); 1410*4882a593Smuzhiyun DEFINE_BADREQ_EVENT(badproc); 1411*4882a593Smuzhiyun DEFINE_BADREQ_EVENT(parse); 1412*4882a593Smuzhiyun 1413*4882a593Smuzhiyun DECLARE_EVENT_CLASS(svcrdma_segment_event, 1414*4882a593Smuzhiyun TP_PROTO( 1415*4882a593Smuzhiyun u32 handle, 1416*4882a593Smuzhiyun u32 length, 1417*4882a593Smuzhiyun u64 offset 1418*4882a593Smuzhiyun ), 1419*4882a593Smuzhiyun 1420*4882a593Smuzhiyun TP_ARGS(handle, length, offset), 1421*4882a593Smuzhiyun 1422*4882a593Smuzhiyun TP_STRUCT__entry( 1423*4882a593Smuzhiyun __field(u32, handle) 1424*4882a593Smuzhiyun __field(u32, length) 1425*4882a593Smuzhiyun __field(u64, offset) 1426*4882a593Smuzhiyun ), 1427*4882a593Smuzhiyun 1428*4882a593Smuzhiyun TP_fast_assign( 1429*4882a593Smuzhiyun __entry->handle = handle; 1430*4882a593Smuzhiyun __entry->length = length; 1431*4882a593Smuzhiyun __entry->offset = offset; 1432*4882a593Smuzhiyun ), 1433*4882a593Smuzhiyun 1434*4882a593Smuzhiyun TP_printk("%u@0x%016llx:0x%08x", 1435*4882a593Smuzhiyun __entry->length, (unsigned long long)__entry->offset, 1436*4882a593Smuzhiyun __entry->handle 1437*4882a593Smuzhiyun ) 1438*4882a593Smuzhiyun ); 1439*4882a593Smuzhiyun 1440*4882a593Smuzhiyun #define DEFINE_SEGMENT_EVENT(name) \ 1441*4882a593Smuzhiyun DEFINE_EVENT(svcrdma_segment_event, svcrdma_##name,\ 1442*4882a593Smuzhiyun TP_PROTO( \ 1443*4882a593Smuzhiyun u32 handle, \ 1444*4882a593Smuzhiyun u32 length, \ 1445*4882a593Smuzhiyun u64 offset \ 1446*4882a593Smuzhiyun ), \ 1447*4882a593Smuzhiyun TP_ARGS(handle, length, offset)) 1448*4882a593Smuzhiyun 1449*4882a593Smuzhiyun DEFINE_SEGMENT_EVENT(decode_wseg); 1450*4882a593Smuzhiyun DEFINE_SEGMENT_EVENT(encode_rseg); 1451*4882a593Smuzhiyun DEFINE_SEGMENT_EVENT(send_rseg); 1452*4882a593Smuzhiyun DEFINE_SEGMENT_EVENT(encode_wseg); 1453*4882a593Smuzhiyun DEFINE_SEGMENT_EVENT(send_wseg); 1454*4882a593Smuzhiyun 1455*4882a593Smuzhiyun DECLARE_EVENT_CLASS(svcrdma_chunk_event, 1456*4882a593Smuzhiyun TP_PROTO( 1457*4882a593Smuzhiyun u32 length 1458*4882a593Smuzhiyun ), 1459*4882a593Smuzhiyun 1460*4882a593Smuzhiyun TP_ARGS(length), 1461*4882a593Smuzhiyun 1462*4882a593Smuzhiyun TP_STRUCT__entry( 1463*4882a593Smuzhiyun __field(u32, length) 1464*4882a593Smuzhiyun ), 1465*4882a593Smuzhiyun 1466*4882a593Smuzhiyun TP_fast_assign( 1467*4882a593Smuzhiyun __entry->length = length; 1468*4882a593Smuzhiyun ), 1469*4882a593Smuzhiyun 1470*4882a593Smuzhiyun TP_printk("length=%u", 1471*4882a593Smuzhiyun __entry->length 1472*4882a593Smuzhiyun ) 1473*4882a593Smuzhiyun ); 1474*4882a593Smuzhiyun 1475*4882a593Smuzhiyun #define DEFINE_CHUNK_EVENT(name) \ 1476*4882a593Smuzhiyun DEFINE_EVENT(svcrdma_chunk_event, svcrdma_##name, \ 1477*4882a593Smuzhiyun TP_PROTO( \ 1478*4882a593Smuzhiyun u32 length \ 1479*4882a593Smuzhiyun ), \ 1480*4882a593Smuzhiyun TP_ARGS(length)) 1481*4882a593Smuzhiyun 1482*4882a593Smuzhiyun DEFINE_CHUNK_EVENT(send_pzr); 1483*4882a593Smuzhiyun DEFINE_CHUNK_EVENT(encode_write_chunk); 1484*4882a593Smuzhiyun DEFINE_CHUNK_EVENT(send_write_chunk); 1485*4882a593Smuzhiyun DEFINE_CHUNK_EVENT(encode_read_chunk); 1486*4882a593Smuzhiyun DEFINE_CHUNK_EVENT(send_reply_chunk); 1487*4882a593Smuzhiyun 1488*4882a593Smuzhiyun TRACE_EVENT(svcrdma_send_read_chunk, 1489*4882a593Smuzhiyun TP_PROTO( 1490*4882a593Smuzhiyun u32 length, 1491*4882a593Smuzhiyun u32 position 1492*4882a593Smuzhiyun ), 1493*4882a593Smuzhiyun 1494*4882a593Smuzhiyun TP_ARGS(length, position), 1495*4882a593Smuzhiyun 1496*4882a593Smuzhiyun TP_STRUCT__entry( 1497*4882a593Smuzhiyun __field(u32, length) 1498*4882a593Smuzhiyun __field(u32, position) 1499*4882a593Smuzhiyun ), 1500*4882a593Smuzhiyun 1501*4882a593Smuzhiyun TP_fast_assign( 1502*4882a593Smuzhiyun __entry->length = length; 1503*4882a593Smuzhiyun __entry->position = position; 1504*4882a593Smuzhiyun ), 1505*4882a593Smuzhiyun 1506*4882a593Smuzhiyun TP_printk("length=%u position=%u", 1507*4882a593Smuzhiyun __entry->length, __entry->position 1508*4882a593Smuzhiyun ) 1509*4882a593Smuzhiyun ); 1510*4882a593Smuzhiyun 1511*4882a593Smuzhiyun DECLARE_EVENT_CLASS(svcrdma_error_event, 1512*4882a593Smuzhiyun TP_PROTO( 1513*4882a593Smuzhiyun __be32 xid 1514*4882a593Smuzhiyun ), 1515*4882a593Smuzhiyun 1516*4882a593Smuzhiyun TP_ARGS(xid), 1517*4882a593Smuzhiyun 1518*4882a593Smuzhiyun TP_STRUCT__entry( 1519*4882a593Smuzhiyun __field(u32, xid) 1520*4882a593Smuzhiyun ), 1521*4882a593Smuzhiyun 1522*4882a593Smuzhiyun TP_fast_assign( 1523*4882a593Smuzhiyun __entry->xid = be32_to_cpu(xid); 1524*4882a593Smuzhiyun ), 1525*4882a593Smuzhiyun 1526*4882a593Smuzhiyun TP_printk("xid=0x%08x", 1527*4882a593Smuzhiyun __entry->xid 1528*4882a593Smuzhiyun ) 1529*4882a593Smuzhiyun ); 1530*4882a593Smuzhiyun 1531*4882a593Smuzhiyun #define DEFINE_ERROR_EVENT(name) \ 1532*4882a593Smuzhiyun DEFINE_EVENT(svcrdma_error_event, svcrdma_err_##name, \ 1533*4882a593Smuzhiyun TP_PROTO( \ 1534*4882a593Smuzhiyun __be32 xid \ 1535*4882a593Smuzhiyun ), \ 1536*4882a593Smuzhiyun TP_ARGS(xid)) 1537*4882a593Smuzhiyun 1538*4882a593Smuzhiyun DEFINE_ERROR_EVENT(vers); 1539*4882a593Smuzhiyun DEFINE_ERROR_EVENT(chunk); 1540*4882a593Smuzhiyun 1541*4882a593Smuzhiyun /** 1542*4882a593Smuzhiyun ** Server-side RDMA API events 1543*4882a593Smuzhiyun **/ 1544*4882a593Smuzhiyun 1545*4882a593Smuzhiyun DECLARE_EVENT_CLASS(svcrdma_dma_map_class, 1546*4882a593Smuzhiyun TP_PROTO( 1547*4882a593Smuzhiyun const struct svcxprt_rdma *rdma, 1548*4882a593Smuzhiyun u64 dma_addr, 1549*4882a593Smuzhiyun u32 length 1550*4882a593Smuzhiyun ), 1551*4882a593Smuzhiyun 1552*4882a593Smuzhiyun TP_ARGS(rdma, dma_addr, length), 1553*4882a593Smuzhiyun 1554*4882a593Smuzhiyun TP_STRUCT__entry( 1555*4882a593Smuzhiyun __field(u64, dma_addr) 1556*4882a593Smuzhiyun __field(u32, length) 1557*4882a593Smuzhiyun __string(device, rdma->sc_cm_id->device->name) 1558*4882a593Smuzhiyun __string(addr, rdma->sc_xprt.xpt_remotebuf) 1559*4882a593Smuzhiyun ), 1560*4882a593Smuzhiyun 1561*4882a593Smuzhiyun TP_fast_assign( 1562*4882a593Smuzhiyun __entry->dma_addr = dma_addr; 1563*4882a593Smuzhiyun __entry->length = length; 1564*4882a593Smuzhiyun __assign_str(device, rdma->sc_cm_id->device->name); 1565*4882a593Smuzhiyun __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1566*4882a593Smuzhiyun ), 1567*4882a593Smuzhiyun 1568*4882a593Smuzhiyun TP_printk("addr=%s device=%s dma_addr=%llu length=%u", 1569*4882a593Smuzhiyun __get_str(addr), __get_str(device), 1570*4882a593Smuzhiyun __entry->dma_addr, __entry->length 1571*4882a593Smuzhiyun ) 1572*4882a593Smuzhiyun ); 1573*4882a593Smuzhiyun 1574*4882a593Smuzhiyun #define DEFINE_SVC_DMA_EVENT(name) \ 1575*4882a593Smuzhiyun DEFINE_EVENT(svcrdma_dma_map_class, svcrdma_##name, \ 1576*4882a593Smuzhiyun TP_PROTO( \ 1577*4882a593Smuzhiyun const struct svcxprt_rdma *rdma,\ 1578*4882a593Smuzhiyun u64 dma_addr, \ 1579*4882a593Smuzhiyun u32 length \ 1580*4882a593Smuzhiyun ), \ 1581*4882a593Smuzhiyun TP_ARGS(rdma, dma_addr, length)) 1582*4882a593Smuzhiyun 1583*4882a593Smuzhiyun DEFINE_SVC_DMA_EVENT(dma_map_page); 1584*4882a593Smuzhiyun DEFINE_SVC_DMA_EVENT(dma_unmap_page); 1585*4882a593Smuzhiyun 1586*4882a593Smuzhiyun TRACE_EVENT(svcrdma_dma_map_rw_err, 1587*4882a593Smuzhiyun TP_PROTO( 1588*4882a593Smuzhiyun const struct svcxprt_rdma *rdma, 1589*4882a593Smuzhiyun unsigned int nents, 1590*4882a593Smuzhiyun int status 1591*4882a593Smuzhiyun ), 1592*4882a593Smuzhiyun 1593*4882a593Smuzhiyun TP_ARGS(rdma, nents, status), 1594*4882a593Smuzhiyun 1595*4882a593Smuzhiyun TP_STRUCT__entry( 1596*4882a593Smuzhiyun __field(int, status) 1597*4882a593Smuzhiyun __field(unsigned int, nents) 1598*4882a593Smuzhiyun __string(device, rdma->sc_cm_id->device->name) 1599*4882a593Smuzhiyun __string(addr, rdma->sc_xprt.xpt_remotebuf) 1600*4882a593Smuzhiyun ), 1601*4882a593Smuzhiyun 1602*4882a593Smuzhiyun TP_fast_assign( 1603*4882a593Smuzhiyun __entry->status = status; 1604*4882a593Smuzhiyun __entry->nents = nents; 1605*4882a593Smuzhiyun __assign_str(device, rdma->sc_cm_id->device->name); 1606*4882a593Smuzhiyun __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1607*4882a593Smuzhiyun ), 1608*4882a593Smuzhiyun 1609*4882a593Smuzhiyun TP_printk("addr=%s device=%s nents=%u status=%d", 1610*4882a593Smuzhiyun __get_str(addr), __get_str(device), __entry->nents, 1611*4882a593Smuzhiyun __entry->status 1612*4882a593Smuzhiyun ) 1613*4882a593Smuzhiyun ); 1614*4882a593Smuzhiyun 1615*4882a593Smuzhiyun TRACE_EVENT(svcrdma_no_rwctx_err, 1616*4882a593Smuzhiyun TP_PROTO( 1617*4882a593Smuzhiyun const struct svcxprt_rdma *rdma, 1618*4882a593Smuzhiyun unsigned int num_sges 1619*4882a593Smuzhiyun ), 1620*4882a593Smuzhiyun 1621*4882a593Smuzhiyun TP_ARGS(rdma, num_sges), 1622*4882a593Smuzhiyun 1623*4882a593Smuzhiyun TP_STRUCT__entry( 1624*4882a593Smuzhiyun __field(unsigned int, num_sges) 1625*4882a593Smuzhiyun __string(device, rdma->sc_cm_id->device->name) 1626*4882a593Smuzhiyun __string(addr, rdma->sc_xprt.xpt_remotebuf) 1627*4882a593Smuzhiyun ), 1628*4882a593Smuzhiyun 1629*4882a593Smuzhiyun TP_fast_assign( 1630*4882a593Smuzhiyun __entry->num_sges = num_sges; 1631*4882a593Smuzhiyun __assign_str(device, rdma->sc_cm_id->device->name); 1632*4882a593Smuzhiyun __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1633*4882a593Smuzhiyun ), 1634*4882a593Smuzhiyun 1635*4882a593Smuzhiyun TP_printk("addr=%s device=%s num_sges=%d", 1636*4882a593Smuzhiyun __get_str(addr), __get_str(device), __entry->num_sges 1637*4882a593Smuzhiyun ) 1638*4882a593Smuzhiyun ); 1639*4882a593Smuzhiyun 1640*4882a593Smuzhiyun TRACE_EVENT(svcrdma_page_overrun_err, 1641*4882a593Smuzhiyun TP_PROTO( 1642*4882a593Smuzhiyun const struct svcxprt_rdma *rdma, 1643*4882a593Smuzhiyun const struct svc_rqst *rqst, 1644*4882a593Smuzhiyun unsigned int pageno 1645*4882a593Smuzhiyun ), 1646*4882a593Smuzhiyun 1647*4882a593Smuzhiyun TP_ARGS(rdma, rqst, pageno), 1648*4882a593Smuzhiyun 1649*4882a593Smuzhiyun TP_STRUCT__entry( 1650*4882a593Smuzhiyun __field(unsigned int, pageno) 1651*4882a593Smuzhiyun __field(u32, xid) 1652*4882a593Smuzhiyun __string(device, rdma->sc_cm_id->device->name) 1653*4882a593Smuzhiyun __string(addr, rdma->sc_xprt.xpt_remotebuf) 1654*4882a593Smuzhiyun ), 1655*4882a593Smuzhiyun 1656*4882a593Smuzhiyun TP_fast_assign( 1657*4882a593Smuzhiyun __entry->pageno = pageno; 1658*4882a593Smuzhiyun __entry->xid = __be32_to_cpu(rqst->rq_xid); 1659*4882a593Smuzhiyun __assign_str(device, rdma->sc_cm_id->device->name); 1660*4882a593Smuzhiyun __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1661*4882a593Smuzhiyun ), 1662*4882a593Smuzhiyun 1663*4882a593Smuzhiyun TP_printk("addr=%s device=%s xid=0x%08x pageno=%u", __get_str(addr), 1664*4882a593Smuzhiyun __get_str(device), __entry->xid, __entry->pageno 1665*4882a593Smuzhiyun ) 1666*4882a593Smuzhiyun ); 1667*4882a593Smuzhiyun 1668*4882a593Smuzhiyun TRACE_EVENT(svcrdma_small_wrch_err, 1669*4882a593Smuzhiyun TP_PROTO( 1670*4882a593Smuzhiyun const struct svcxprt_rdma *rdma, 1671*4882a593Smuzhiyun unsigned int remaining, 1672*4882a593Smuzhiyun unsigned int seg_no, 1673*4882a593Smuzhiyun unsigned int num_segs 1674*4882a593Smuzhiyun ), 1675*4882a593Smuzhiyun 1676*4882a593Smuzhiyun TP_ARGS(rdma, remaining, seg_no, num_segs), 1677*4882a593Smuzhiyun 1678*4882a593Smuzhiyun TP_STRUCT__entry( 1679*4882a593Smuzhiyun __field(unsigned int, remaining) 1680*4882a593Smuzhiyun __field(unsigned int, seg_no) 1681*4882a593Smuzhiyun __field(unsigned int, num_segs) 1682*4882a593Smuzhiyun __string(device, rdma->sc_cm_id->device->name) 1683*4882a593Smuzhiyun __string(addr, rdma->sc_xprt.xpt_remotebuf) 1684*4882a593Smuzhiyun ), 1685*4882a593Smuzhiyun 1686*4882a593Smuzhiyun TP_fast_assign( 1687*4882a593Smuzhiyun __entry->remaining = remaining; 1688*4882a593Smuzhiyun __entry->seg_no = seg_no; 1689*4882a593Smuzhiyun __entry->num_segs = num_segs; 1690*4882a593Smuzhiyun __assign_str(device, rdma->sc_cm_id->device->name); 1691*4882a593Smuzhiyun __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1692*4882a593Smuzhiyun ), 1693*4882a593Smuzhiyun 1694*4882a593Smuzhiyun TP_printk("addr=%s device=%s remaining=%u seg_no=%u num_segs=%u", 1695*4882a593Smuzhiyun __get_str(addr), __get_str(device), __entry->remaining, 1696*4882a593Smuzhiyun __entry->seg_no, __entry->num_segs 1697*4882a593Smuzhiyun ) 1698*4882a593Smuzhiyun ); 1699*4882a593Smuzhiyun 1700*4882a593Smuzhiyun TRACE_EVENT(svcrdma_send_pullup, 1701*4882a593Smuzhiyun TP_PROTO( 1702*4882a593Smuzhiyun unsigned int len 1703*4882a593Smuzhiyun ), 1704*4882a593Smuzhiyun 1705*4882a593Smuzhiyun TP_ARGS(len), 1706*4882a593Smuzhiyun 1707*4882a593Smuzhiyun TP_STRUCT__entry( 1708*4882a593Smuzhiyun __field(unsigned int, len) 1709*4882a593Smuzhiyun ), 1710*4882a593Smuzhiyun 1711*4882a593Smuzhiyun TP_fast_assign( 1712*4882a593Smuzhiyun __entry->len = len; 1713*4882a593Smuzhiyun ), 1714*4882a593Smuzhiyun 1715*4882a593Smuzhiyun TP_printk("len=%u", __entry->len) 1716*4882a593Smuzhiyun ); 1717*4882a593Smuzhiyun 1718*4882a593Smuzhiyun TRACE_EVENT(svcrdma_send_err, 1719*4882a593Smuzhiyun TP_PROTO( 1720*4882a593Smuzhiyun const struct svc_rqst *rqst, 1721*4882a593Smuzhiyun int status 1722*4882a593Smuzhiyun ), 1723*4882a593Smuzhiyun 1724*4882a593Smuzhiyun TP_ARGS(rqst, status), 1725*4882a593Smuzhiyun 1726*4882a593Smuzhiyun TP_STRUCT__entry( 1727*4882a593Smuzhiyun __field(int, status) 1728*4882a593Smuzhiyun __field(u32, xid) 1729*4882a593Smuzhiyun __string(addr, rqst->rq_xprt->xpt_remotebuf) 1730*4882a593Smuzhiyun ), 1731*4882a593Smuzhiyun 1732*4882a593Smuzhiyun TP_fast_assign( 1733*4882a593Smuzhiyun __entry->status = status; 1734*4882a593Smuzhiyun __entry->xid = __be32_to_cpu(rqst->rq_xid); 1735*4882a593Smuzhiyun __assign_str(addr, rqst->rq_xprt->xpt_remotebuf); 1736*4882a593Smuzhiyun ), 1737*4882a593Smuzhiyun 1738*4882a593Smuzhiyun TP_printk("addr=%s xid=0x%08x status=%d", __get_str(addr), 1739*4882a593Smuzhiyun __entry->xid, __entry->status 1740*4882a593Smuzhiyun ) 1741*4882a593Smuzhiyun ); 1742*4882a593Smuzhiyun 1743*4882a593Smuzhiyun TRACE_EVENT(svcrdma_post_send, 1744*4882a593Smuzhiyun TP_PROTO( 1745*4882a593Smuzhiyun const struct svc_rdma_send_ctxt *ctxt 1746*4882a593Smuzhiyun ), 1747*4882a593Smuzhiyun 1748*4882a593Smuzhiyun TP_ARGS(ctxt), 1749*4882a593Smuzhiyun 1750*4882a593Smuzhiyun TP_STRUCT__entry( 1751*4882a593Smuzhiyun __field(u32, cq_id) 1752*4882a593Smuzhiyun __field(int, completion_id) 1753*4882a593Smuzhiyun __field(unsigned int, num_sge) 1754*4882a593Smuzhiyun __field(u32, inv_rkey) 1755*4882a593Smuzhiyun ), 1756*4882a593Smuzhiyun 1757*4882a593Smuzhiyun TP_fast_assign( 1758*4882a593Smuzhiyun const struct ib_send_wr *wr = &ctxt->sc_send_wr; 1759*4882a593Smuzhiyun 1760*4882a593Smuzhiyun __entry->cq_id = ctxt->sc_cid.ci_queue_id; 1761*4882a593Smuzhiyun __entry->completion_id = ctxt->sc_cid.ci_completion_id; 1762*4882a593Smuzhiyun __entry->num_sge = wr->num_sge; 1763*4882a593Smuzhiyun __entry->inv_rkey = (wr->opcode == IB_WR_SEND_WITH_INV) ? 1764*4882a593Smuzhiyun wr->ex.invalidate_rkey : 0; 1765*4882a593Smuzhiyun ), 1766*4882a593Smuzhiyun 1767*4882a593Smuzhiyun TP_printk("cq_id=%u cid=%d num_sge=%u inv_rkey=0x%08x", 1768*4882a593Smuzhiyun __entry->cq_id, __entry->completion_id, 1769*4882a593Smuzhiyun __entry->num_sge, __entry->inv_rkey 1770*4882a593Smuzhiyun ) 1771*4882a593Smuzhiyun ); 1772*4882a593Smuzhiyun 1773*4882a593Smuzhiyun DEFINE_COMPLETION_EVENT(svcrdma_wc_send); 1774*4882a593Smuzhiyun 1775*4882a593Smuzhiyun TRACE_EVENT(svcrdma_post_recv, 1776*4882a593Smuzhiyun TP_PROTO( 1777*4882a593Smuzhiyun const struct svc_rdma_recv_ctxt *ctxt 1778*4882a593Smuzhiyun ), 1779*4882a593Smuzhiyun 1780*4882a593Smuzhiyun TP_ARGS(ctxt), 1781*4882a593Smuzhiyun 1782*4882a593Smuzhiyun TP_STRUCT__entry( 1783*4882a593Smuzhiyun __field(u32, cq_id) 1784*4882a593Smuzhiyun __field(int, completion_id) 1785*4882a593Smuzhiyun ), 1786*4882a593Smuzhiyun 1787*4882a593Smuzhiyun TP_fast_assign( 1788*4882a593Smuzhiyun __entry->cq_id = ctxt->rc_cid.ci_queue_id; 1789*4882a593Smuzhiyun __entry->completion_id = ctxt->rc_cid.ci_completion_id; 1790*4882a593Smuzhiyun ), 1791*4882a593Smuzhiyun 1792*4882a593Smuzhiyun TP_printk("cq.id=%d cid=%d", 1793*4882a593Smuzhiyun __entry->cq_id, __entry->completion_id 1794*4882a593Smuzhiyun ) 1795*4882a593Smuzhiyun ); 1796*4882a593Smuzhiyun 1797*4882a593Smuzhiyun DEFINE_COMPLETION_EVENT(svcrdma_wc_receive); 1798*4882a593Smuzhiyun 1799*4882a593Smuzhiyun TRACE_EVENT(svcrdma_rq_post_err, 1800*4882a593Smuzhiyun TP_PROTO( 1801*4882a593Smuzhiyun const struct svcxprt_rdma *rdma, 1802*4882a593Smuzhiyun int status 1803*4882a593Smuzhiyun ), 1804*4882a593Smuzhiyun 1805*4882a593Smuzhiyun TP_ARGS(rdma, status), 1806*4882a593Smuzhiyun 1807*4882a593Smuzhiyun TP_STRUCT__entry( 1808*4882a593Smuzhiyun __field(int, status) 1809*4882a593Smuzhiyun __string(addr, rdma->sc_xprt.xpt_remotebuf) 1810*4882a593Smuzhiyun ), 1811*4882a593Smuzhiyun 1812*4882a593Smuzhiyun TP_fast_assign( 1813*4882a593Smuzhiyun __entry->status = status; 1814*4882a593Smuzhiyun __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1815*4882a593Smuzhiyun ), 1816*4882a593Smuzhiyun 1817*4882a593Smuzhiyun TP_printk("addr=%s status=%d", 1818*4882a593Smuzhiyun __get_str(addr), __entry->status 1819*4882a593Smuzhiyun ) 1820*4882a593Smuzhiyun ); 1821*4882a593Smuzhiyun 1822*4882a593Smuzhiyun TRACE_EVENT(svcrdma_post_chunk, 1823*4882a593Smuzhiyun TP_PROTO( 1824*4882a593Smuzhiyun const struct rpc_rdma_cid *cid, 1825*4882a593Smuzhiyun int sqecount 1826*4882a593Smuzhiyun ), 1827*4882a593Smuzhiyun 1828*4882a593Smuzhiyun TP_ARGS(cid, sqecount), 1829*4882a593Smuzhiyun 1830*4882a593Smuzhiyun TP_STRUCT__entry( 1831*4882a593Smuzhiyun __field(u32, cq_id) 1832*4882a593Smuzhiyun __field(int, completion_id) 1833*4882a593Smuzhiyun __field(int, sqecount) 1834*4882a593Smuzhiyun ), 1835*4882a593Smuzhiyun 1836*4882a593Smuzhiyun TP_fast_assign( 1837*4882a593Smuzhiyun __entry->cq_id = cid->ci_queue_id; 1838*4882a593Smuzhiyun __entry->completion_id = cid->ci_completion_id; 1839*4882a593Smuzhiyun __entry->sqecount = sqecount; 1840*4882a593Smuzhiyun ), 1841*4882a593Smuzhiyun 1842*4882a593Smuzhiyun TP_printk("cq.id=%u cid=%d sqecount=%d", 1843*4882a593Smuzhiyun __entry->cq_id, __entry->completion_id, 1844*4882a593Smuzhiyun __entry->sqecount 1845*4882a593Smuzhiyun ) 1846*4882a593Smuzhiyun ); 1847*4882a593Smuzhiyun 1848*4882a593Smuzhiyun DEFINE_COMPLETION_EVENT(svcrdma_wc_read); 1849*4882a593Smuzhiyun DEFINE_COMPLETION_EVENT(svcrdma_wc_write); 1850*4882a593Smuzhiyun 1851*4882a593Smuzhiyun TRACE_EVENT(svcrdma_qp_error, 1852*4882a593Smuzhiyun TP_PROTO( 1853*4882a593Smuzhiyun const struct ib_event *event, 1854*4882a593Smuzhiyun const struct sockaddr *sap 1855*4882a593Smuzhiyun ), 1856*4882a593Smuzhiyun 1857*4882a593Smuzhiyun TP_ARGS(event, sap), 1858*4882a593Smuzhiyun 1859*4882a593Smuzhiyun TP_STRUCT__entry( 1860*4882a593Smuzhiyun __field(unsigned int, event) 1861*4882a593Smuzhiyun __string(device, event->device->name) 1862*4882a593Smuzhiyun __array(__u8, addr, INET6_ADDRSTRLEN + 10) 1863*4882a593Smuzhiyun ), 1864*4882a593Smuzhiyun 1865*4882a593Smuzhiyun TP_fast_assign( 1866*4882a593Smuzhiyun __entry->event = event->event; 1867*4882a593Smuzhiyun __assign_str(device, event->device->name); 1868*4882a593Smuzhiyun snprintf(__entry->addr, sizeof(__entry->addr) - 1, 1869*4882a593Smuzhiyun "%pISpc", sap); 1870*4882a593Smuzhiyun ), 1871*4882a593Smuzhiyun 1872*4882a593Smuzhiyun TP_printk("addr=%s dev=%s event=%s (%u)", 1873*4882a593Smuzhiyun __entry->addr, __get_str(device), 1874*4882a593Smuzhiyun rdma_show_ib_event(__entry->event), __entry->event 1875*4882a593Smuzhiyun ) 1876*4882a593Smuzhiyun ); 1877*4882a593Smuzhiyun 1878*4882a593Smuzhiyun DECLARE_EVENT_CLASS(svcrdma_sendqueue_event, 1879*4882a593Smuzhiyun TP_PROTO( 1880*4882a593Smuzhiyun const struct svcxprt_rdma *rdma 1881*4882a593Smuzhiyun ), 1882*4882a593Smuzhiyun 1883*4882a593Smuzhiyun TP_ARGS(rdma), 1884*4882a593Smuzhiyun 1885*4882a593Smuzhiyun TP_STRUCT__entry( 1886*4882a593Smuzhiyun __field(int, avail) 1887*4882a593Smuzhiyun __field(int, depth) 1888*4882a593Smuzhiyun __string(addr, rdma->sc_xprt.xpt_remotebuf) 1889*4882a593Smuzhiyun ), 1890*4882a593Smuzhiyun 1891*4882a593Smuzhiyun TP_fast_assign( 1892*4882a593Smuzhiyun __entry->avail = atomic_read(&rdma->sc_sq_avail); 1893*4882a593Smuzhiyun __entry->depth = rdma->sc_sq_depth; 1894*4882a593Smuzhiyun __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1895*4882a593Smuzhiyun ), 1896*4882a593Smuzhiyun 1897*4882a593Smuzhiyun TP_printk("addr=%s sc_sq_avail=%d/%d", 1898*4882a593Smuzhiyun __get_str(addr), __entry->avail, __entry->depth 1899*4882a593Smuzhiyun ) 1900*4882a593Smuzhiyun ); 1901*4882a593Smuzhiyun 1902*4882a593Smuzhiyun #define DEFINE_SQ_EVENT(name) \ 1903*4882a593Smuzhiyun DEFINE_EVENT(svcrdma_sendqueue_event, svcrdma_sq_##name,\ 1904*4882a593Smuzhiyun TP_PROTO( \ 1905*4882a593Smuzhiyun const struct svcxprt_rdma *rdma \ 1906*4882a593Smuzhiyun ), \ 1907*4882a593Smuzhiyun TP_ARGS(rdma)) 1908*4882a593Smuzhiyun 1909*4882a593Smuzhiyun DEFINE_SQ_EVENT(full); 1910*4882a593Smuzhiyun DEFINE_SQ_EVENT(retry); 1911*4882a593Smuzhiyun 1912*4882a593Smuzhiyun TRACE_EVENT(svcrdma_sq_post_err, 1913*4882a593Smuzhiyun TP_PROTO( 1914*4882a593Smuzhiyun const struct svcxprt_rdma *rdma, 1915*4882a593Smuzhiyun int status 1916*4882a593Smuzhiyun ), 1917*4882a593Smuzhiyun 1918*4882a593Smuzhiyun TP_ARGS(rdma, status), 1919*4882a593Smuzhiyun 1920*4882a593Smuzhiyun TP_STRUCT__entry( 1921*4882a593Smuzhiyun __field(int, avail) 1922*4882a593Smuzhiyun __field(int, depth) 1923*4882a593Smuzhiyun __field(int, status) 1924*4882a593Smuzhiyun __string(addr, rdma->sc_xprt.xpt_remotebuf) 1925*4882a593Smuzhiyun ), 1926*4882a593Smuzhiyun 1927*4882a593Smuzhiyun TP_fast_assign( 1928*4882a593Smuzhiyun __entry->avail = atomic_read(&rdma->sc_sq_avail); 1929*4882a593Smuzhiyun __entry->depth = rdma->sc_sq_depth; 1930*4882a593Smuzhiyun __entry->status = status; 1931*4882a593Smuzhiyun __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1932*4882a593Smuzhiyun ), 1933*4882a593Smuzhiyun 1934*4882a593Smuzhiyun TP_printk("addr=%s sc_sq_avail=%d/%d status=%d", 1935*4882a593Smuzhiyun __get_str(addr), __entry->avail, __entry->depth, 1936*4882a593Smuzhiyun __entry->status 1937*4882a593Smuzhiyun ) 1938*4882a593Smuzhiyun ); 1939*4882a593Smuzhiyun 1940*4882a593Smuzhiyun #endif /* _TRACE_RPCRDMA_H */ 1941*4882a593Smuzhiyun 1942*4882a593Smuzhiyun #include <trace/define_trace.h> 1943