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> 14e48f083eSChuck Lever #include <linux/tracepoint.h> 15e48f083eSChuck Lever #include <trace/events/rdma.h> 16e48f083eSChuck Lever 17ab03eff5SChuck Lever /** 18b4a7f91cSChuck Lever ** Event classes 19b4a7f91cSChuck Lever **/ 20b4a7f91cSChuck Lever 21b4a7f91cSChuck Lever DECLARE_EVENT_CLASS(xprtrdma_reply_event, 22b4a7f91cSChuck Lever TP_PROTO( 23b4a7f91cSChuck Lever const struct rpcrdma_rep *rep 24b4a7f91cSChuck Lever ), 25b4a7f91cSChuck Lever 26b4a7f91cSChuck Lever TP_ARGS(rep), 27b4a7f91cSChuck Lever 28b4a7f91cSChuck Lever TP_STRUCT__entry( 29b4a7f91cSChuck Lever __field(const void *, rep) 30b4a7f91cSChuck Lever __field(const void *, r_xprt) 31b4a7f91cSChuck Lever __field(u32, xid) 32b4a7f91cSChuck Lever __field(u32, version) 33b4a7f91cSChuck Lever __field(u32, proc) 34b4a7f91cSChuck Lever ), 35b4a7f91cSChuck Lever 36b4a7f91cSChuck Lever TP_fast_assign( 37b4a7f91cSChuck Lever __entry->rep = rep; 38b4a7f91cSChuck Lever __entry->r_xprt = rep->rr_rxprt; 39b4a7f91cSChuck Lever __entry->xid = be32_to_cpu(rep->rr_xid); 40b4a7f91cSChuck Lever __entry->version = be32_to_cpu(rep->rr_vers); 41b4a7f91cSChuck Lever __entry->proc = be32_to_cpu(rep->rr_proc); 42b4a7f91cSChuck Lever ), 43b4a7f91cSChuck Lever 44b4a7f91cSChuck Lever TP_printk("rxprt %p xid=0x%08x rep=%p: version %u proc %u", 45b4a7f91cSChuck Lever __entry->r_xprt, __entry->xid, __entry->rep, 46b4a7f91cSChuck Lever __entry->version, __entry->proc 47b4a7f91cSChuck Lever ) 48b4a7f91cSChuck Lever ); 49b4a7f91cSChuck Lever 50b4a7f91cSChuck Lever #define DEFINE_REPLY_EVENT(name) \ 51b4a7f91cSChuck Lever DEFINE_EVENT(xprtrdma_reply_event, name, \ 52b4a7f91cSChuck Lever TP_PROTO( \ 53b4a7f91cSChuck Lever const struct rpcrdma_rep *rep \ 54b4a7f91cSChuck Lever ), \ 55b4a7f91cSChuck Lever TP_ARGS(rep)) 56b4a7f91cSChuck Lever 571c443effSChuck Lever DECLARE_EVENT_CLASS(xprtrdma_rxprt, 581c443effSChuck Lever TP_PROTO( 591c443effSChuck Lever const struct rpcrdma_xprt *r_xprt 601c443effSChuck Lever ), 611c443effSChuck Lever 621c443effSChuck Lever TP_ARGS(r_xprt), 631c443effSChuck Lever 641c443effSChuck Lever TP_STRUCT__entry( 651c443effSChuck Lever __field(const void *, r_xprt) 661c443effSChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 671c443effSChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 681c443effSChuck Lever ), 691c443effSChuck Lever 701c443effSChuck Lever TP_fast_assign( 711c443effSChuck Lever __entry->r_xprt = r_xprt; 721c443effSChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 731c443effSChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 741c443effSChuck Lever ), 751c443effSChuck Lever 761c443effSChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p", 771c443effSChuck Lever __get_str(addr), __get_str(port), __entry->r_xprt 781c443effSChuck Lever ) 791c443effSChuck Lever ); 801c443effSChuck Lever 811c443effSChuck Lever #define DEFINE_RXPRT_EVENT(name) \ 821c443effSChuck Lever DEFINE_EVENT(xprtrdma_rxprt, name, \ 831c443effSChuck Lever TP_PROTO( \ 841c443effSChuck Lever const struct rpcrdma_xprt *r_xprt \ 851c443effSChuck Lever ), \ 861c443effSChuck Lever TP_ARGS(r_xprt)) 871c443effSChuck Lever 8858f10ad4SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_rdch_event, 8958f10ad4SChuck Lever TP_PROTO( 9058f10ad4SChuck Lever const struct rpc_task *task, 9158f10ad4SChuck Lever unsigned int pos, 9258f10ad4SChuck Lever struct rpcrdma_mr *mr, 9358f10ad4SChuck Lever int nsegs 9458f10ad4SChuck Lever ), 9558f10ad4SChuck Lever 9658f10ad4SChuck Lever TP_ARGS(task, pos, mr, nsegs), 9758f10ad4SChuck Lever 9858f10ad4SChuck Lever TP_STRUCT__entry( 9958f10ad4SChuck Lever __field(unsigned int, task_id) 10058f10ad4SChuck Lever __field(unsigned int, client_id) 10158f10ad4SChuck Lever __field(unsigned int, pos) 10258f10ad4SChuck Lever __field(int, nents) 10358f10ad4SChuck Lever __field(u32, handle) 10458f10ad4SChuck Lever __field(u32, length) 10558f10ad4SChuck Lever __field(u64, offset) 10658f10ad4SChuck Lever __field(int, nsegs) 10758f10ad4SChuck Lever ), 10858f10ad4SChuck Lever 10958f10ad4SChuck Lever TP_fast_assign( 11058f10ad4SChuck Lever __entry->task_id = task->tk_pid; 11158f10ad4SChuck Lever __entry->client_id = task->tk_client->cl_clid; 11258f10ad4SChuck Lever __entry->pos = pos; 11358f10ad4SChuck Lever __entry->nents = mr->mr_nents; 11458f10ad4SChuck Lever __entry->handle = mr->mr_handle; 11558f10ad4SChuck Lever __entry->length = mr->mr_length; 11658f10ad4SChuck Lever __entry->offset = mr->mr_offset; 11758f10ad4SChuck Lever __entry->nsegs = nsegs; 11858f10ad4SChuck Lever ), 11958f10ad4SChuck Lever 120aba11831SChuck Lever TP_printk("task:%u@%u pos=%u %u@0x%016llx:0x%08x (%s)", 121aba11831SChuck Lever __entry->task_id, __entry->client_id, 12258f10ad4SChuck Lever __entry->pos, __entry->length, 12358f10ad4SChuck Lever (unsigned long long)__entry->offset, __entry->handle, 12458f10ad4SChuck Lever __entry->nents < __entry->nsegs ? "more" : "last" 12558f10ad4SChuck Lever ) 12658f10ad4SChuck Lever ); 12758f10ad4SChuck Lever 12858f10ad4SChuck Lever #define DEFINE_RDCH_EVENT(name) \ 129aba11831SChuck Lever DEFINE_EVENT(xprtrdma_rdch_event, xprtrdma_chunk_##name,\ 13058f10ad4SChuck Lever TP_PROTO( \ 13158f10ad4SChuck Lever const struct rpc_task *task, \ 13258f10ad4SChuck Lever unsigned int pos, \ 13358f10ad4SChuck Lever struct rpcrdma_mr *mr, \ 13458f10ad4SChuck Lever int nsegs \ 13558f10ad4SChuck Lever ), \ 13658f10ad4SChuck Lever TP_ARGS(task, pos, mr, nsegs)) 13758f10ad4SChuck Lever 13858f10ad4SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_wrch_event, 13958f10ad4SChuck Lever TP_PROTO( 14058f10ad4SChuck Lever const struct rpc_task *task, 14158f10ad4SChuck Lever struct rpcrdma_mr *mr, 14258f10ad4SChuck Lever int nsegs 14358f10ad4SChuck Lever ), 14458f10ad4SChuck Lever 14558f10ad4SChuck Lever TP_ARGS(task, mr, nsegs), 14658f10ad4SChuck Lever 14758f10ad4SChuck Lever TP_STRUCT__entry( 14858f10ad4SChuck Lever __field(unsigned int, task_id) 14958f10ad4SChuck Lever __field(unsigned int, client_id) 15058f10ad4SChuck Lever __field(int, nents) 15158f10ad4SChuck Lever __field(u32, handle) 15258f10ad4SChuck Lever __field(u32, length) 15358f10ad4SChuck Lever __field(u64, offset) 15458f10ad4SChuck Lever __field(int, nsegs) 15558f10ad4SChuck Lever ), 15658f10ad4SChuck Lever 15758f10ad4SChuck Lever TP_fast_assign( 15858f10ad4SChuck Lever __entry->task_id = task->tk_pid; 15958f10ad4SChuck Lever __entry->client_id = task->tk_client->cl_clid; 16058f10ad4SChuck Lever __entry->nents = mr->mr_nents; 16158f10ad4SChuck Lever __entry->handle = mr->mr_handle; 16258f10ad4SChuck Lever __entry->length = mr->mr_length; 16358f10ad4SChuck Lever __entry->offset = mr->mr_offset; 16458f10ad4SChuck Lever __entry->nsegs = nsegs; 16558f10ad4SChuck Lever ), 16658f10ad4SChuck Lever 167aba11831SChuck Lever TP_printk("task:%u@%u %u@0x%016llx:0x%08x (%s)", 168aba11831SChuck Lever __entry->task_id, __entry->client_id, 16958f10ad4SChuck Lever __entry->length, (unsigned long long)__entry->offset, 17058f10ad4SChuck Lever __entry->handle, 17158f10ad4SChuck Lever __entry->nents < __entry->nsegs ? "more" : "last" 17258f10ad4SChuck Lever ) 17358f10ad4SChuck Lever ); 17458f10ad4SChuck Lever 17558f10ad4SChuck Lever #define DEFINE_WRCH_EVENT(name) \ 176aba11831SChuck Lever DEFINE_EVENT(xprtrdma_wrch_event, xprtrdma_chunk_##name,\ 17758f10ad4SChuck Lever TP_PROTO( \ 17858f10ad4SChuck Lever const struct rpc_task *task, \ 17958f10ad4SChuck Lever struct rpcrdma_mr *mr, \ 18058f10ad4SChuck Lever int nsegs \ 18158f10ad4SChuck Lever ), \ 18258f10ad4SChuck Lever TP_ARGS(task, mr, nsegs)) 18358f10ad4SChuck Lever 18458f10ad4SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_frwr_done, 18558f10ad4SChuck Lever TP_PROTO( 18658f10ad4SChuck Lever const struct ib_wc *wc, 18758f10ad4SChuck Lever const struct rpcrdma_frwr *frwr 18858f10ad4SChuck Lever ), 18958f10ad4SChuck Lever 19058f10ad4SChuck Lever TP_ARGS(wc, frwr), 19158f10ad4SChuck Lever 19258f10ad4SChuck Lever TP_STRUCT__entry( 19358f10ad4SChuck Lever __field(const void *, mr) 19458f10ad4SChuck Lever __field(unsigned int, status) 19558f10ad4SChuck Lever __field(unsigned int, vendor_err) 19658f10ad4SChuck Lever ), 19758f10ad4SChuck Lever 19858f10ad4SChuck Lever TP_fast_assign( 19958f10ad4SChuck Lever __entry->mr = container_of(frwr, struct rpcrdma_mr, frwr); 20058f10ad4SChuck Lever __entry->status = wc->status; 20158f10ad4SChuck Lever __entry->vendor_err = __entry->status ? wc->vendor_err : 0; 20258f10ad4SChuck Lever ), 20358f10ad4SChuck Lever 20458f10ad4SChuck Lever TP_printk( 20584756894SChuck Lever "mr=%p: %s (%u/0x%x)", 20684756894SChuck Lever __entry->mr, rdma_show_wc_status(__entry->status), 20758f10ad4SChuck Lever __entry->status, __entry->vendor_err 20858f10ad4SChuck Lever ) 20958f10ad4SChuck Lever ); 21058f10ad4SChuck Lever 21158f10ad4SChuck Lever #define DEFINE_FRWR_DONE_EVENT(name) \ 21258f10ad4SChuck Lever DEFINE_EVENT(xprtrdma_frwr_done, name, \ 21358f10ad4SChuck Lever TP_PROTO( \ 21458f10ad4SChuck Lever const struct ib_wc *wc, \ 21558f10ad4SChuck Lever const struct rpcrdma_frwr *frwr \ 21658f10ad4SChuck Lever ), \ 21758f10ad4SChuck Lever TP_ARGS(wc, frwr)) 21858f10ad4SChuck Lever 219aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_BIDIRECTIONAL); 220aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_TO_DEVICE); 221aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_FROM_DEVICE); 222aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_NONE); 223aba11831SChuck Lever 224aba11831SChuck Lever #define xprtrdma_show_direction(x) \ 225aba11831SChuck Lever __print_symbolic(x, \ 226aba11831SChuck Lever { DMA_BIDIRECTIONAL, "BIDIR" }, \ 227aba11831SChuck Lever { DMA_TO_DEVICE, "TO_DEVICE" }, \ 228aba11831SChuck Lever { DMA_FROM_DEVICE, "FROM_DEVICE" }, \ 229aba11831SChuck Lever { DMA_NONE, "NONE" }) 230aba11831SChuck Lever 2312937fedeSChuck Lever DECLARE_EVENT_CLASS(xprtrdma_mr, 2322937fedeSChuck Lever TP_PROTO( 2332937fedeSChuck Lever const struct rpcrdma_mr *mr 2342937fedeSChuck Lever ), 2352937fedeSChuck Lever 2362937fedeSChuck Lever TP_ARGS(mr), 2372937fedeSChuck Lever 2382937fedeSChuck Lever TP_STRUCT__entry( 2392937fedeSChuck Lever __field(const void *, mr) 2402937fedeSChuck Lever __field(u32, handle) 2412937fedeSChuck Lever __field(u32, length) 2422937fedeSChuck Lever __field(u64, offset) 243aba11831SChuck Lever __field(u32, dir) 2442937fedeSChuck Lever ), 2452937fedeSChuck Lever 2462937fedeSChuck Lever TP_fast_assign( 2472937fedeSChuck Lever __entry->mr = mr; 2482937fedeSChuck Lever __entry->handle = mr->mr_handle; 2492937fedeSChuck Lever __entry->length = mr->mr_length; 2502937fedeSChuck Lever __entry->offset = mr->mr_offset; 251aba11831SChuck Lever __entry->dir = mr->mr_dir; 2522937fedeSChuck Lever ), 2532937fedeSChuck Lever 254aba11831SChuck Lever TP_printk("mr=%p %u@0x%016llx:0x%08x (%s)", 2552937fedeSChuck Lever __entry->mr, __entry->length, 256aba11831SChuck Lever (unsigned long long)__entry->offset, __entry->handle, 257aba11831SChuck Lever xprtrdma_show_direction(__entry->dir) 2582937fedeSChuck Lever ) 2592937fedeSChuck Lever ); 2602937fedeSChuck Lever 2612937fedeSChuck Lever #define DEFINE_MR_EVENT(name) \ 262d379eaa8SChuck Lever DEFINE_EVENT(xprtrdma_mr, xprtrdma_mr_##name, \ 2632937fedeSChuck Lever TP_PROTO( \ 2642937fedeSChuck Lever const struct rpcrdma_mr *mr \ 2652937fedeSChuck Lever ), \ 2662937fedeSChuck Lever TP_ARGS(mr)) 2672937fedeSChuck Lever 268fc1eb807SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_cb_event, 269fc1eb807SChuck Lever TP_PROTO( 270fc1eb807SChuck Lever const struct rpc_rqst *rqst 271fc1eb807SChuck Lever ), 272fc1eb807SChuck Lever 273fc1eb807SChuck Lever TP_ARGS(rqst), 274fc1eb807SChuck Lever 275fc1eb807SChuck Lever TP_STRUCT__entry( 276fc1eb807SChuck Lever __field(const void *, rqst) 277fc1eb807SChuck Lever __field(const void *, rep) 278fc1eb807SChuck Lever __field(const void *, req) 279fc1eb807SChuck Lever __field(u32, xid) 280fc1eb807SChuck Lever ), 281fc1eb807SChuck Lever 282fc1eb807SChuck Lever TP_fast_assign( 283fc1eb807SChuck Lever __entry->rqst = rqst; 284fc1eb807SChuck Lever __entry->req = rpcr_to_rdmar(rqst); 285fc1eb807SChuck Lever __entry->rep = rpcr_to_rdmar(rqst)->rl_reply; 286fc1eb807SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 287fc1eb807SChuck Lever ), 288fc1eb807SChuck Lever 289fc1eb807SChuck Lever TP_printk("xid=0x%08x, rqst=%p req=%p rep=%p", 290fc1eb807SChuck Lever __entry->xid, __entry->rqst, __entry->req, __entry->rep 291fc1eb807SChuck Lever ) 292fc1eb807SChuck Lever ); 293fc1eb807SChuck Lever 294fc1eb807SChuck Lever #define DEFINE_CB_EVENT(name) \ 295fc1eb807SChuck Lever DEFINE_EVENT(xprtrdma_cb_event, name, \ 296fc1eb807SChuck Lever TP_PROTO( \ 297fc1eb807SChuck Lever const struct rpc_rqst *rqst \ 298fc1eb807SChuck Lever ), \ 299fc1eb807SChuck Lever TP_ARGS(rqst)) 300fc1eb807SChuck Lever 301b4a7f91cSChuck Lever /** 302b4744e00SChuck Lever ** Connection events 303b4744e00SChuck Lever **/ 304b4744e00SChuck Lever 305ae38288eSChuck Lever TRACE_EVENT(xprtrdma_cm_event, 306b4744e00SChuck Lever TP_PROTO( 307b4744e00SChuck Lever const struct rpcrdma_xprt *r_xprt, 308b4744e00SChuck Lever struct rdma_cm_event *event 309b4744e00SChuck Lever ), 310b4744e00SChuck Lever 311b4744e00SChuck Lever TP_ARGS(r_xprt, event), 312b4744e00SChuck Lever 313b4744e00SChuck Lever TP_STRUCT__entry( 314b4744e00SChuck Lever __field(const void *, r_xprt) 315b4744e00SChuck Lever __field(unsigned int, event) 316b4744e00SChuck Lever __field(int, status) 317b4744e00SChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 318b4744e00SChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 319b4744e00SChuck Lever ), 320b4744e00SChuck Lever 321b4744e00SChuck Lever TP_fast_assign( 322b4744e00SChuck Lever __entry->r_xprt = r_xprt; 323b4744e00SChuck Lever __entry->event = event->event; 324b4744e00SChuck Lever __entry->status = event->status; 325b4744e00SChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 326b4744e00SChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 327b4744e00SChuck Lever ), 328b4744e00SChuck Lever 329b4744e00SChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: %s (%u/%d)", 330b4744e00SChuck Lever __get_str(addr), __get_str(port), 331b4744e00SChuck Lever __entry->r_xprt, rdma_show_cm_event(__entry->event), 332b4744e00SChuck Lever __entry->event, __entry->status 333b4744e00SChuck Lever ) 334b4744e00SChuck Lever ); 335b4744e00SChuck Lever 336b4744e00SChuck Lever TRACE_EVENT(xprtrdma_disconnect, 337b4744e00SChuck Lever TP_PROTO( 338b4744e00SChuck Lever const struct rpcrdma_xprt *r_xprt, 339b4744e00SChuck Lever int status 340b4744e00SChuck Lever ), 341b4744e00SChuck Lever 342b4744e00SChuck Lever TP_ARGS(r_xprt, status), 343b4744e00SChuck Lever 344b4744e00SChuck Lever TP_STRUCT__entry( 345b4744e00SChuck Lever __field(const void *, r_xprt) 346b4744e00SChuck Lever __field(int, status) 347b4744e00SChuck Lever __field(int, connected) 348b4744e00SChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 349b4744e00SChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 350b4744e00SChuck Lever ), 351b4744e00SChuck Lever 352b4744e00SChuck Lever TP_fast_assign( 353b4744e00SChuck Lever __entry->r_xprt = r_xprt; 354b4744e00SChuck Lever __entry->status = status; 355b4744e00SChuck Lever __entry->connected = r_xprt->rx_ep.rep_connected; 356b4744e00SChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 357b4744e00SChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 358b4744e00SChuck Lever ), 359b4744e00SChuck Lever 360b4744e00SChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: status=%d %sconnected", 361b4744e00SChuck Lever __get_str(addr), __get_str(port), 362b4744e00SChuck Lever __entry->r_xprt, __entry->status, 363b4744e00SChuck Lever __entry->connected == 1 ? "still " : "dis" 364b4744e00SChuck Lever ) 365b4744e00SChuck Lever ); 366b4744e00SChuck Lever 367b4744e00SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_conn_start); 368b4744e00SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_conn_tout); 369b4744e00SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_create); 370395069fcSChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_op_destroy); 371b4744e00SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_remove); 372b4744e00SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_reinsert); 373b4744e00SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_reconnect); 374395069fcSChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_op_inject_dsc); 375395069fcSChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_op_close); 376395069fcSChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_op_connect); 377b4744e00SChuck Lever 378675dd90aSChuck Lever TRACE_EVENT(xprtrdma_op_set_cto, 379675dd90aSChuck Lever TP_PROTO( 380675dd90aSChuck Lever const struct rpcrdma_xprt *r_xprt, 381675dd90aSChuck Lever unsigned long connect, 382675dd90aSChuck Lever unsigned long reconnect 383675dd90aSChuck Lever ), 384675dd90aSChuck Lever 385675dd90aSChuck Lever TP_ARGS(r_xprt, connect, reconnect), 386675dd90aSChuck Lever 387675dd90aSChuck Lever TP_STRUCT__entry( 388675dd90aSChuck Lever __field(const void *, r_xprt) 389675dd90aSChuck Lever __field(unsigned long, connect) 390675dd90aSChuck Lever __field(unsigned long, reconnect) 391675dd90aSChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 392675dd90aSChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 393675dd90aSChuck Lever ), 394675dd90aSChuck Lever 395675dd90aSChuck Lever TP_fast_assign( 396675dd90aSChuck Lever __entry->r_xprt = r_xprt; 397675dd90aSChuck Lever __entry->connect = connect; 398675dd90aSChuck Lever __entry->reconnect = reconnect; 399675dd90aSChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 400675dd90aSChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 401675dd90aSChuck Lever ), 402675dd90aSChuck Lever 403675dd90aSChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: connect=%lu reconnect=%lu", 404675dd90aSChuck Lever __get_str(addr), __get_str(port), __entry->r_xprt, 405675dd90aSChuck Lever __entry->connect / HZ, __entry->reconnect / HZ 406675dd90aSChuck Lever ) 407675dd90aSChuck Lever ); 408675dd90aSChuck Lever 409f9521d53SChuck Lever TRACE_EVENT(xprtrdma_qp_event, 410643cf323SChuck Lever TP_PROTO( 411643cf323SChuck Lever const struct rpcrdma_xprt *r_xprt, 412643cf323SChuck Lever const struct ib_event *event 413643cf323SChuck Lever ), 414643cf323SChuck Lever 415643cf323SChuck Lever TP_ARGS(r_xprt, event), 416643cf323SChuck Lever 417643cf323SChuck Lever TP_STRUCT__entry( 418643cf323SChuck Lever __field(const void *, r_xprt) 419643cf323SChuck Lever __field(unsigned int, event) 420643cf323SChuck Lever __string(name, event->device->name) 421643cf323SChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 422643cf323SChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 423643cf323SChuck Lever ), 424643cf323SChuck Lever 425643cf323SChuck Lever TP_fast_assign( 426643cf323SChuck Lever __entry->r_xprt = r_xprt; 427643cf323SChuck Lever __entry->event = event->event; 428643cf323SChuck Lever __assign_str(name, event->device->name); 429643cf323SChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 430643cf323SChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 431643cf323SChuck Lever ), 432643cf323SChuck Lever 433643cf323SChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: dev %s: %s (%u)", 434643cf323SChuck Lever __get_str(addr), __get_str(port), __entry->r_xprt, 435643cf323SChuck Lever __get_str(name), rdma_show_ib_event(__entry->event), 436643cf323SChuck Lever __entry->event 437643cf323SChuck Lever ) 438643cf323SChuck Lever ); 439643cf323SChuck Lever 440b4744e00SChuck Lever /** 441ab03eff5SChuck Lever ** Call events 442ab03eff5SChuck Lever **/ 443ab03eff5SChuck Lever 4441c443effSChuck Lever TRACE_EVENT(xprtrdma_createmrs, 4451c443effSChuck Lever TP_PROTO( 4461c443effSChuck Lever const struct rpcrdma_xprt *r_xprt, 4471c443effSChuck Lever unsigned int count 4481c443effSChuck Lever ), 4491c443effSChuck Lever 4501c443effSChuck Lever TP_ARGS(r_xprt, count), 4511c443effSChuck Lever 4521c443effSChuck Lever TP_STRUCT__entry( 4531c443effSChuck Lever __field(const void *, r_xprt) 4546dc6ec9eSChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 4556dc6ec9eSChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 4561c443effSChuck Lever __field(unsigned int, count) 4571c443effSChuck Lever ), 4581c443effSChuck Lever 4591c443effSChuck Lever TP_fast_assign( 4601c443effSChuck Lever __entry->r_xprt = r_xprt; 4611c443effSChuck Lever __entry->count = count; 4626dc6ec9eSChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 4636dc6ec9eSChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 4641c443effSChuck Lever ), 4651c443effSChuck Lever 4666dc6ec9eSChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: created %u MRs", 4676dc6ec9eSChuck Lever __get_str(addr), __get_str(port), __entry->r_xprt, 4686dc6ec9eSChuck Lever __entry->count 4696dc6ec9eSChuck Lever ) 4706dc6ec9eSChuck Lever ); 4716dc6ec9eSChuck Lever 4726dc6ec9eSChuck Lever TRACE_EVENT(xprtrdma_mr_get, 4736dc6ec9eSChuck Lever TP_PROTO( 4746dc6ec9eSChuck Lever const struct rpcrdma_req *req 4756dc6ec9eSChuck Lever ), 4766dc6ec9eSChuck Lever 4776dc6ec9eSChuck Lever TP_ARGS(req), 4786dc6ec9eSChuck Lever 4796dc6ec9eSChuck Lever TP_STRUCT__entry( 4806dc6ec9eSChuck Lever __field(const void *, req) 4816dc6ec9eSChuck Lever __field(unsigned int, task_id) 4826dc6ec9eSChuck Lever __field(unsigned int, client_id) 4836dc6ec9eSChuck Lever __field(u32, xid) 4846dc6ec9eSChuck Lever ), 4856dc6ec9eSChuck Lever 4866dc6ec9eSChuck Lever TP_fast_assign( 4876dc6ec9eSChuck Lever const struct rpc_rqst *rqst = &req->rl_slot; 4886dc6ec9eSChuck Lever 4896dc6ec9eSChuck Lever __entry->req = req; 4906dc6ec9eSChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 4916dc6ec9eSChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 4926dc6ec9eSChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 4936dc6ec9eSChuck Lever ), 4946dc6ec9eSChuck Lever 4956dc6ec9eSChuck Lever TP_printk("task:%u@%u xid=0x%08x req=%p", 4966dc6ec9eSChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 4976dc6ec9eSChuck Lever __entry->req 4981c443effSChuck Lever ) 4991c443effSChuck Lever ); 5001c443effSChuck Lever 5013b39f52aSChuck Lever TRACE_EVENT(xprtrdma_nomrs, 5023b39f52aSChuck Lever TP_PROTO( 5033b39f52aSChuck Lever const struct rpcrdma_req *req 5043b39f52aSChuck Lever ), 5053b39f52aSChuck Lever 5063b39f52aSChuck Lever TP_ARGS(req), 5073b39f52aSChuck Lever 5083b39f52aSChuck Lever TP_STRUCT__entry( 5093b39f52aSChuck Lever __field(const void *, req) 5103b39f52aSChuck Lever __field(unsigned int, task_id) 5113b39f52aSChuck Lever __field(unsigned int, client_id) 5123b39f52aSChuck Lever __field(u32, xid) 5133b39f52aSChuck Lever ), 5143b39f52aSChuck Lever 5153b39f52aSChuck Lever TP_fast_assign( 5163b39f52aSChuck Lever const struct rpc_rqst *rqst = &req->rl_slot; 5173b39f52aSChuck Lever 5183b39f52aSChuck Lever __entry->req = req; 5193b39f52aSChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 5203b39f52aSChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 5213b39f52aSChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 5223b39f52aSChuck Lever ), 5233b39f52aSChuck Lever 5243b39f52aSChuck Lever TP_printk("task:%u@%u xid=0x%08x req=%p", 5253b39f52aSChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 5263b39f52aSChuck Lever __entry->req 5273b39f52aSChuck Lever ) 5283b39f52aSChuck Lever ); 5291c443effSChuck Lever 530aba11831SChuck Lever DEFINE_RDCH_EVENT(read); 531aba11831SChuck Lever DEFINE_WRCH_EVENT(write); 532aba11831SChuck Lever DEFINE_WRCH_EVENT(reply); 53358f10ad4SChuck Lever 534ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch); 535614f3c96SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch_pullup); 536614f3c96SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch_mapped); 537ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_readch); 538ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_areadch); 539ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_writech); 540ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_replych); 541ab03eff5SChuck Lever 542ab03eff5SChuck Lever #define xprtrdma_show_chunktype(x) \ 543ab03eff5SChuck Lever __print_symbolic(x, \ 544ab03eff5SChuck Lever { rpcrdma_noch, "inline" }, \ 545614f3c96SChuck Lever { rpcrdma_noch_pullup, "pullup" }, \ 546614f3c96SChuck Lever { rpcrdma_noch_mapped, "mapped" }, \ 547ab03eff5SChuck Lever { rpcrdma_readch, "read list" }, \ 548ab03eff5SChuck Lever { rpcrdma_areadch, "*read list" }, \ 549ab03eff5SChuck Lever { rpcrdma_writech, "write list" }, \ 550ab03eff5SChuck Lever { rpcrdma_replych, "reply chunk" }) 551ab03eff5SChuck Lever 552ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_marshal, 553ab03eff5SChuck Lever TP_PROTO( 5541310051cSChuck Lever const struct rpcrdma_req *req, 555ab03eff5SChuck Lever unsigned int rtype, 556ab03eff5SChuck Lever unsigned int wtype 557ab03eff5SChuck Lever ), 558ab03eff5SChuck Lever 5591310051cSChuck Lever TP_ARGS(req, rtype, wtype), 560ab03eff5SChuck Lever 561ab03eff5SChuck Lever TP_STRUCT__entry( 562ab03eff5SChuck Lever __field(unsigned int, task_id) 563ab03eff5SChuck Lever __field(unsigned int, client_id) 564ab03eff5SChuck Lever __field(u32, xid) 565ab03eff5SChuck Lever __field(unsigned int, hdrlen) 566ab03eff5SChuck Lever __field(unsigned int, headlen) 567ab03eff5SChuck Lever __field(unsigned int, pagelen) 568ab03eff5SChuck Lever __field(unsigned int, taillen) 569ab03eff5SChuck Lever __field(unsigned int, rtype) 570ab03eff5SChuck Lever __field(unsigned int, wtype) 571ab03eff5SChuck Lever ), 572ab03eff5SChuck Lever 573ab03eff5SChuck Lever TP_fast_assign( 5741310051cSChuck Lever const struct rpc_rqst *rqst = &req->rl_slot; 5751310051cSChuck Lever 576ab03eff5SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 577ab03eff5SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 578ab03eff5SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 5791310051cSChuck Lever __entry->hdrlen = req->rl_hdrbuf.len; 580ab03eff5SChuck Lever __entry->headlen = rqst->rq_snd_buf.head[0].iov_len; 581ab03eff5SChuck Lever __entry->pagelen = rqst->rq_snd_buf.page_len; 582ab03eff5SChuck Lever __entry->taillen = rqst->rq_snd_buf.tail[0].iov_len; 583ab03eff5SChuck Lever __entry->rtype = rtype; 584ab03eff5SChuck Lever __entry->wtype = wtype; 585ab03eff5SChuck Lever ), 586ab03eff5SChuck Lever 587ab03eff5SChuck Lever TP_printk("task:%u@%u xid=0x%08x: hdr=%u xdr=%u/%u/%u %s/%s", 588ab03eff5SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 589ab03eff5SChuck Lever __entry->hdrlen, 590ab03eff5SChuck Lever __entry->headlen, __entry->pagelen, __entry->taillen, 591ab03eff5SChuck Lever xprtrdma_show_chunktype(__entry->rtype), 592ab03eff5SChuck Lever xprtrdma_show_chunktype(__entry->wtype) 593ab03eff5SChuck Lever ) 594ab03eff5SChuck Lever ); 595ab03eff5SChuck Lever 59617e4c443SChuck Lever TRACE_EVENT(xprtrdma_marshal_failed, 59717e4c443SChuck Lever TP_PROTO(const struct rpc_rqst *rqst, 59817e4c443SChuck Lever int ret 59917e4c443SChuck Lever ), 60017e4c443SChuck Lever 60117e4c443SChuck Lever TP_ARGS(rqst, ret), 60217e4c443SChuck Lever 60317e4c443SChuck Lever TP_STRUCT__entry( 60417e4c443SChuck Lever __field(unsigned int, task_id) 60517e4c443SChuck Lever __field(unsigned int, client_id) 60617e4c443SChuck Lever __field(u32, xid) 60717e4c443SChuck Lever __field(int, ret) 60817e4c443SChuck Lever ), 60917e4c443SChuck Lever 61017e4c443SChuck Lever TP_fast_assign( 61117e4c443SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 61217e4c443SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 61317e4c443SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 61417e4c443SChuck Lever __entry->ret = ret; 61517e4c443SChuck Lever ), 61617e4c443SChuck Lever 61717e4c443SChuck Lever TP_printk("task:%u@%u xid=0x%08x: ret=%d", 61817e4c443SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 61917e4c443SChuck Lever __entry->ret 62017e4c443SChuck Lever ) 62117e4c443SChuck Lever ); 62217e4c443SChuck Lever 62305eb06d8SChuck Lever TRACE_EVENT(xprtrdma_prepsend_failed, 62405eb06d8SChuck Lever TP_PROTO(const struct rpc_rqst *rqst, 62505eb06d8SChuck Lever int ret 62605eb06d8SChuck Lever ), 62705eb06d8SChuck Lever 62805eb06d8SChuck Lever TP_ARGS(rqst, ret), 62905eb06d8SChuck Lever 63005eb06d8SChuck Lever TP_STRUCT__entry( 63105eb06d8SChuck Lever __field(unsigned int, task_id) 63205eb06d8SChuck Lever __field(unsigned int, client_id) 63305eb06d8SChuck Lever __field(u32, xid) 63405eb06d8SChuck Lever __field(int, ret) 63505eb06d8SChuck Lever ), 63605eb06d8SChuck Lever 63705eb06d8SChuck Lever TP_fast_assign( 63805eb06d8SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 63905eb06d8SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 64005eb06d8SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 64105eb06d8SChuck Lever __entry->ret = ret; 64205eb06d8SChuck Lever ), 64305eb06d8SChuck Lever 64405eb06d8SChuck Lever TP_printk("task:%u@%u xid=0x%08x: ret=%d", 64505eb06d8SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 64605eb06d8SChuck Lever __entry->ret 64705eb06d8SChuck Lever ) 64805eb06d8SChuck Lever ); 64905eb06d8SChuck Lever 650ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_post_send, 651ab03eff5SChuck Lever TP_PROTO( 652ab03eff5SChuck Lever const struct rpcrdma_req *req, 653ab03eff5SChuck Lever int status 654ab03eff5SChuck Lever ), 655ab03eff5SChuck Lever 656ab03eff5SChuck Lever TP_ARGS(req, status), 657ab03eff5SChuck Lever 658ab03eff5SChuck Lever TP_STRUCT__entry( 659ab03eff5SChuck Lever __field(const void *, req) 6600c77668dSChuck Lever __field(unsigned int, task_id) 6610c77668dSChuck Lever __field(unsigned int, client_id) 662ab03eff5SChuck Lever __field(int, num_sge) 663470443e0SChuck Lever __field(int, signaled) 664ab03eff5SChuck Lever __field(int, status) 665ab03eff5SChuck Lever ), 666ab03eff5SChuck Lever 667ab03eff5SChuck Lever TP_fast_assign( 6680c77668dSChuck Lever const struct rpc_rqst *rqst = &req->rl_slot; 6690c77668dSChuck Lever 6700c77668dSChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 67110694ac9SChuck Lever __entry->client_id = rqst->rq_task->tk_client ? 67210694ac9SChuck Lever rqst->rq_task->tk_client->cl_clid : -1; 673ab03eff5SChuck Lever __entry->req = req; 674dc15c3d5SChuck Lever __entry->num_sge = req->rl_wr.num_sge; 675dc15c3d5SChuck Lever __entry->signaled = req->rl_wr.send_flags & IB_SEND_SIGNALED; 676ab03eff5SChuck Lever __entry->status = status; 677ab03eff5SChuck Lever ), 678ab03eff5SChuck Lever 6790c77668dSChuck Lever TP_printk("task:%u@%u req=%p (%d SGE%s) %sstatus=%d", 6800c77668dSChuck Lever __entry->task_id, __entry->client_id, 681ab03eff5SChuck Lever __entry->req, __entry->num_sge, 6820c77668dSChuck Lever (__entry->num_sge == 1 ? "" : "s"), 6830c77668dSChuck Lever (__entry->signaled ? "signaled " : ""), 684ab03eff5SChuck Lever __entry->status 685ab03eff5SChuck Lever ) 686ab03eff5SChuck Lever ); 687ab03eff5SChuck Lever 688b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_post_recv, 689b4a7f91cSChuck Lever TP_PROTO( 6902dfdcd88SChuck Lever const struct rpcrdma_rep *rep 691b4a7f91cSChuck Lever ), 692b4a7f91cSChuck Lever 6932dfdcd88SChuck Lever TP_ARGS(rep), 694b4a7f91cSChuck Lever 695b4a7f91cSChuck Lever TP_STRUCT__entry( 6962dfdcd88SChuck Lever __field(const void *, rep) 697b4a7f91cSChuck Lever ), 698b4a7f91cSChuck Lever 699b4a7f91cSChuck Lever TP_fast_assign( 7002dfdcd88SChuck Lever __entry->rep = rep; 701b4a7f91cSChuck Lever ), 702b4a7f91cSChuck Lever 7032dfdcd88SChuck Lever TP_printk("rep=%p", 7042dfdcd88SChuck Lever __entry->rep 705b4a7f91cSChuck Lever ) 706b4a7f91cSChuck Lever ); 707b4a7f91cSChuck Lever 7087c8d9e7cSChuck Lever TRACE_EVENT(xprtrdma_post_recvs, 7097c8d9e7cSChuck Lever TP_PROTO( 7107c8d9e7cSChuck Lever const struct rpcrdma_xprt *r_xprt, 7117c8d9e7cSChuck Lever unsigned int count, 7127c8d9e7cSChuck Lever int status 7137c8d9e7cSChuck Lever ), 7147c8d9e7cSChuck Lever 7157c8d9e7cSChuck Lever TP_ARGS(r_xprt, count, status), 7167c8d9e7cSChuck Lever 7177c8d9e7cSChuck Lever TP_STRUCT__entry( 7187c8d9e7cSChuck Lever __field(const void *, r_xprt) 7197c8d9e7cSChuck Lever __field(unsigned int, count) 7207c8d9e7cSChuck Lever __field(int, status) 7217c8d9e7cSChuck Lever __field(int, posted) 7227c8d9e7cSChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 7237c8d9e7cSChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 7247c8d9e7cSChuck Lever ), 7257c8d9e7cSChuck Lever 7267c8d9e7cSChuck Lever TP_fast_assign( 7277c8d9e7cSChuck Lever __entry->r_xprt = r_xprt; 7287c8d9e7cSChuck Lever __entry->count = count; 7297c8d9e7cSChuck Lever __entry->status = status; 7306ceea368SChuck Lever __entry->posted = r_xprt->rx_ep.rep_receive_count; 7317c8d9e7cSChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 7327c8d9e7cSChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 7337c8d9e7cSChuck Lever ), 7347c8d9e7cSChuck Lever 7357c8d9e7cSChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: %u new recvs, %d active (rc %d)", 7367c8d9e7cSChuck Lever __get_str(addr), __get_str(port), __entry->r_xprt, 7377c8d9e7cSChuck Lever __entry->count, __entry->posted, __entry->status 738ab03eff5SChuck Lever ) 739ab03eff5SChuck Lever ); 740ab03eff5SChuck Lever 7414b93dab3SChuck Lever TRACE_EVENT(xprtrdma_post_linv, 7424b93dab3SChuck Lever TP_PROTO( 7434b93dab3SChuck Lever const struct rpcrdma_req *req, 7444b93dab3SChuck Lever int status 7454b93dab3SChuck Lever ), 7464b93dab3SChuck Lever 7474b93dab3SChuck Lever TP_ARGS(req, status), 7484b93dab3SChuck Lever 7494b93dab3SChuck Lever TP_STRUCT__entry( 7504b93dab3SChuck Lever __field(const void *, req) 7514b93dab3SChuck Lever __field(int, status) 7524b93dab3SChuck Lever __field(u32, xid) 7534b93dab3SChuck Lever ), 7544b93dab3SChuck Lever 7554b93dab3SChuck Lever TP_fast_assign( 7564b93dab3SChuck Lever __entry->req = req; 7574b93dab3SChuck Lever __entry->status = status; 7584b93dab3SChuck Lever __entry->xid = be32_to_cpu(req->rl_slot.rq_xid); 7594b93dab3SChuck Lever ), 7604b93dab3SChuck Lever 7614b93dab3SChuck Lever TP_printk("req=%p xid=0x%08x status=%d", 7624b93dab3SChuck Lever __entry->req, __entry->xid, __entry->status 7634b93dab3SChuck Lever ) 7644b93dab3SChuck Lever ); 7654b93dab3SChuck Lever 766ab03eff5SChuck Lever /** 767ab03eff5SChuck Lever ** Completion events 768ab03eff5SChuck Lever **/ 769ab03eff5SChuck Lever 770ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_wc_send, 771ab03eff5SChuck Lever TP_PROTO( 772ab03eff5SChuck Lever const struct rpcrdma_sendctx *sc, 773ab03eff5SChuck Lever const struct ib_wc *wc 774ab03eff5SChuck Lever ), 775ab03eff5SChuck Lever 776ab03eff5SChuck Lever TP_ARGS(sc, wc), 777ab03eff5SChuck Lever 778ab03eff5SChuck Lever TP_STRUCT__entry( 779ab03eff5SChuck Lever __field(const void *, req) 780ab03eff5SChuck Lever __field(unsigned int, unmap_count) 781ab03eff5SChuck Lever __field(unsigned int, status) 782ab03eff5SChuck Lever __field(unsigned int, vendor_err) 783ab03eff5SChuck Lever ), 784ab03eff5SChuck Lever 785ab03eff5SChuck Lever TP_fast_assign( 786ab03eff5SChuck Lever __entry->req = sc->sc_req; 787ab03eff5SChuck Lever __entry->unmap_count = sc->sc_unmap_count; 788ab03eff5SChuck Lever __entry->status = wc->status; 789ab03eff5SChuck Lever __entry->vendor_err = __entry->status ? wc->vendor_err : 0; 790ab03eff5SChuck Lever ), 791ab03eff5SChuck Lever 792ab03eff5SChuck Lever TP_printk("req=%p, unmapped %u pages: %s (%u/0x%x)", 793ab03eff5SChuck Lever __entry->req, __entry->unmap_count, 794ab03eff5SChuck Lever rdma_show_wc_status(__entry->status), 795ab03eff5SChuck Lever __entry->status, __entry->vendor_err 796ab03eff5SChuck Lever ) 797ab03eff5SChuck Lever ); 798ab03eff5SChuck Lever 799b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_wc_receive, 800b4a7f91cSChuck Lever TP_PROTO( 801b4a7f91cSChuck Lever const struct ib_wc *wc 802b4a7f91cSChuck Lever ), 803b4a7f91cSChuck Lever 8040e0b854cSChuck Lever TP_ARGS(wc), 805b4a7f91cSChuck Lever 806b4a7f91cSChuck Lever TP_STRUCT__entry( 8072dfdcd88SChuck Lever __field(const void *, rep) 8080e0b854cSChuck Lever __field(u32, byte_len) 809b4a7f91cSChuck Lever __field(unsigned int, status) 8100e0b854cSChuck Lever __field(u32, vendor_err) 811b4a7f91cSChuck Lever ), 812b4a7f91cSChuck Lever 813b4a7f91cSChuck Lever TP_fast_assign( 8142dfdcd88SChuck Lever __entry->rep = container_of(wc->wr_cqe, struct rpcrdma_rep, 8152dfdcd88SChuck Lever rr_cqe); 816b4a7f91cSChuck Lever __entry->status = wc->status; 8170e0b854cSChuck Lever if (wc->status) { 8180e0b854cSChuck Lever __entry->byte_len = 0; 8190e0b854cSChuck Lever __entry->vendor_err = wc->vendor_err; 8200e0b854cSChuck Lever } else { 8210e0b854cSChuck Lever __entry->byte_len = wc->byte_len; 8220e0b854cSChuck Lever __entry->vendor_err = 0; 8230e0b854cSChuck Lever } 824b4a7f91cSChuck Lever ), 825b4a7f91cSChuck Lever 8262dfdcd88SChuck Lever TP_printk("rep=%p %u bytes: %s (%u/0x%x)", 8272dfdcd88SChuck Lever __entry->rep, __entry->byte_len, 828b4a7f91cSChuck Lever rdma_show_wc_status(__entry->status), 829b4a7f91cSChuck Lever __entry->status, __entry->vendor_err 830b4a7f91cSChuck Lever ) 831b4a7f91cSChuck Lever ); 832b4a7f91cSChuck Lever 83358f10ad4SChuck Lever DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_fastreg); 8342937fedeSChuck Lever DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_li); 8352937fedeSChuck Lever DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_li_wake); 836d8099fedSChuck Lever DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_li_done); 8372937fedeSChuck Lever 83853b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_alloc, 83953b2c1cbSChuck Lever TP_PROTO( 84053b2c1cbSChuck Lever const struct rpcrdma_mr *mr, 84153b2c1cbSChuck Lever int rc 84253b2c1cbSChuck Lever ), 84353b2c1cbSChuck Lever 84453b2c1cbSChuck Lever TP_ARGS(mr, rc), 84553b2c1cbSChuck Lever 84653b2c1cbSChuck Lever TP_STRUCT__entry( 84753b2c1cbSChuck Lever __field(const void *, mr) 84853b2c1cbSChuck Lever __field(int, rc) 84953b2c1cbSChuck Lever ), 85053b2c1cbSChuck Lever 85153b2c1cbSChuck Lever TP_fast_assign( 85253b2c1cbSChuck Lever __entry->mr = mr; 85353b2c1cbSChuck Lever __entry->rc = rc; 85453b2c1cbSChuck Lever ), 85553b2c1cbSChuck Lever 85653b2c1cbSChuck Lever TP_printk("mr=%p: rc=%d", 85753b2c1cbSChuck Lever __entry->mr, __entry->rc 85853b2c1cbSChuck Lever ) 85953b2c1cbSChuck Lever ); 86053b2c1cbSChuck Lever 86153b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_dereg, 86253b2c1cbSChuck Lever TP_PROTO( 86353b2c1cbSChuck Lever const struct rpcrdma_mr *mr, 86453b2c1cbSChuck Lever int rc 86553b2c1cbSChuck Lever ), 86653b2c1cbSChuck Lever 86753b2c1cbSChuck Lever TP_ARGS(mr, rc), 86853b2c1cbSChuck Lever 86953b2c1cbSChuck Lever TP_STRUCT__entry( 87053b2c1cbSChuck Lever __field(const void *, mr) 87153b2c1cbSChuck Lever __field(u32, handle) 87253b2c1cbSChuck Lever __field(u32, length) 87353b2c1cbSChuck Lever __field(u64, offset) 87453b2c1cbSChuck Lever __field(u32, dir) 87553b2c1cbSChuck Lever __field(int, rc) 87653b2c1cbSChuck Lever ), 87753b2c1cbSChuck Lever 87853b2c1cbSChuck Lever TP_fast_assign( 87953b2c1cbSChuck Lever __entry->mr = mr; 88053b2c1cbSChuck Lever __entry->handle = mr->mr_handle; 88153b2c1cbSChuck Lever __entry->length = mr->mr_length; 88253b2c1cbSChuck Lever __entry->offset = mr->mr_offset; 88353b2c1cbSChuck Lever __entry->dir = mr->mr_dir; 88453b2c1cbSChuck Lever __entry->rc = rc; 88553b2c1cbSChuck Lever ), 88653b2c1cbSChuck Lever 88753b2c1cbSChuck Lever TP_printk("mr=%p %u@0x%016llx:0x%08x (%s): rc=%d", 88853b2c1cbSChuck Lever __entry->mr, __entry->length, 88953b2c1cbSChuck Lever (unsigned long long)__entry->offset, __entry->handle, 89053b2c1cbSChuck Lever xprtrdma_show_direction(__entry->dir), 89153b2c1cbSChuck Lever __entry->rc 89253b2c1cbSChuck Lever ) 89353b2c1cbSChuck Lever ); 89453b2c1cbSChuck Lever 89553b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_sgerr, 89653b2c1cbSChuck Lever TP_PROTO( 89753b2c1cbSChuck Lever const struct rpcrdma_mr *mr, 89853b2c1cbSChuck Lever int sg_nents 89953b2c1cbSChuck Lever ), 90053b2c1cbSChuck Lever 90153b2c1cbSChuck Lever TP_ARGS(mr, sg_nents), 90253b2c1cbSChuck Lever 90353b2c1cbSChuck Lever TP_STRUCT__entry( 90453b2c1cbSChuck Lever __field(const void *, mr) 90553b2c1cbSChuck Lever __field(u64, addr) 90653b2c1cbSChuck Lever __field(u32, dir) 90753b2c1cbSChuck Lever __field(int, nents) 90853b2c1cbSChuck Lever ), 90953b2c1cbSChuck Lever 91053b2c1cbSChuck Lever TP_fast_assign( 91153b2c1cbSChuck Lever __entry->mr = mr; 91253b2c1cbSChuck Lever __entry->addr = mr->mr_sg->dma_address; 91353b2c1cbSChuck Lever __entry->dir = mr->mr_dir; 91453b2c1cbSChuck Lever __entry->nents = sg_nents; 91553b2c1cbSChuck Lever ), 91653b2c1cbSChuck Lever 91753b2c1cbSChuck Lever TP_printk("mr=%p dma addr=0x%llx (%s) sg_nents=%d", 91853b2c1cbSChuck Lever __entry->mr, __entry->addr, 91953b2c1cbSChuck Lever xprtrdma_show_direction(__entry->dir), 92053b2c1cbSChuck Lever __entry->nents 92153b2c1cbSChuck Lever ) 92253b2c1cbSChuck Lever ); 92353b2c1cbSChuck Lever 92453b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_maperr, 92553b2c1cbSChuck Lever TP_PROTO( 92653b2c1cbSChuck Lever const struct rpcrdma_mr *mr, 92753b2c1cbSChuck Lever int num_mapped 92853b2c1cbSChuck Lever ), 92953b2c1cbSChuck Lever 93053b2c1cbSChuck Lever TP_ARGS(mr, num_mapped), 93153b2c1cbSChuck Lever 93253b2c1cbSChuck Lever TP_STRUCT__entry( 93353b2c1cbSChuck Lever __field(const void *, mr) 93453b2c1cbSChuck Lever __field(u64, addr) 93553b2c1cbSChuck Lever __field(u32, dir) 93653b2c1cbSChuck Lever __field(int, num_mapped) 93753b2c1cbSChuck Lever __field(int, nents) 93853b2c1cbSChuck Lever ), 93953b2c1cbSChuck Lever 94053b2c1cbSChuck Lever TP_fast_assign( 94153b2c1cbSChuck Lever __entry->mr = mr; 94253b2c1cbSChuck Lever __entry->addr = mr->mr_sg->dma_address; 94353b2c1cbSChuck Lever __entry->dir = mr->mr_dir; 94453b2c1cbSChuck Lever __entry->num_mapped = num_mapped; 94553b2c1cbSChuck Lever __entry->nents = mr->mr_nents; 94653b2c1cbSChuck Lever ), 94753b2c1cbSChuck Lever 94853b2c1cbSChuck Lever TP_printk("mr=%p dma addr=0x%llx (%s) nents=%d of %d", 94953b2c1cbSChuck Lever __entry->mr, __entry->addr, 95053b2c1cbSChuck Lever xprtrdma_show_direction(__entry->dir), 95153b2c1cbSChuck Lever __entry->num_mapped, __entry->nents 95253b2c1cbSChuck Lever ) 95353b2c1cbSChuck Lever ); 95453b2c1cbSChuck Lever 955d379eaa8SChuck Lever DEFINE_MR_EVENT(localinv); 956d379eaa8SChuck Lever DEFINE_MR_EVENT(map); 957d379eaa8SChuck Lever DEFINE_MR_EVENT(unmap); 958d379eaa8SChuck Lever DEFINE_MR_EVENT(remoteinv); 959d379eaa8SChuck Lever DEFINE_MR_EVENT(recycle); 96058f10ad4SChuck Lever 96153b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_dma_maperr, 96253b2c1cbSChuck Lever TP_PROTO( 96353b2c1cbSChuck Lever u64 addr 96453b2c1cbSChuck Lever ), 96553b2c1cbSChuck Lever 96653b2c1cbSChuck Lever TP_ARGS(addr), 96753b2c1cbSChuck Lever 96853b2c1cbSChuck Lever TP_STRUCT__entry( 96953b2c1cbSChuck Lever __field(u64, addr) 97053b2c1cbSChuck Lever ), 97153b2c1cbSChuck Lever 97253b2c1cbSChuck Lever TP_fast_assign( 97353b2c1cbSChuck Lever __entry->addr = addr; 97453b2c1cbSChuck Lever ), 97553b2c1cbSChuck Lever 97653b2c1cbSChuck Lever TP_printk("dma addr=0x%llx\n", __entry->addr) 97753b2c1cbSChuck Lever ); 97853b2c1cbSChuck Lever 979b4a7f91cSChuck Lever /** 980b4a7f91cSChuck Lever ** Reply events 981b4a7f91cSChuck Lever **/ 982b4a7f91cSChuck Lever 983b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_reply, 984b4a7f91cSChuck Lever TP_PROTO( 985b4a7f91cSChuck Lever const struct rpc_task *task, 986b4a7f91cSChuck Lever const struct rpcrdma_rep *rep, 987b4a7f91cSChuck Lever const struct rpcrdma_req *req, 988b4a7f91cSChuck Lever unsigned int credits 989b4a7f91cSChuck Lever ), 990b4a7f91cSChuck Lever 991b4a7f91cSChuck Lever TP_ARGS(task, rep, req, credits), 992b4a7f91cSChuck Lever 993b4a7f91cSChuck Lever TP_STRUCT__entry( 994b4a7f91cSChuck Lever __field(unsigned int, task_id) 995b4a7f91cSChuck Lever __field(unsigned int, client_id) 996b4a7f91cSChuck Lever __field(const void *, rep) 997b4a7f91cSChuck Lever __field(const void *, req) 998b4a7f91cSChuck Lever __field(u32, xid) 999b4a7f91cSChuck Lever __field(unsigned int, credits) 1000b4a7f91cSChuck Lever ), 1001b4a7f91cSChuck Lever 1002b4a7f91cSChuck Lever TP_fast_assign( 1003b4a7f91cSChuck Lever __entry->task_id = task->tk_pid; 1004b4a7f91cSChuck Lever __entry->client_id = task->tk_client->cl_clid; 1005b4a7f91cSChuck Lever __entry->rep = rep; 1006b4a7f91cSChuck Lever __entry->req = req; 1007b4a7f91cSChuck Lever __entry->xid = be32_to_cpu(rep->rr_xid); 1008b4a7f91cSChuck Lever __entry->credits = credits; 1009b4a7f91cSChuck Lever ), 1010b4a7f91cSChuck Lever 1011b4a7f91cSChuck Lever TP_printk("task:%u@%u xid=0x%08x, %u credits, rep=%p -> req=%p", 1012b4a7f91cSChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 1013b4a7f91cSChuck Lever __entry->credits, __entry->rep, __entry->req 1014b4a7f91cSChuck Lever ) 1015b4a7f91cSChuck Lever ); 1016b4a7f91cSChuck Lever 1017b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_defer_cmp, 1018b4a7f91cSChuck Lever TP_PROTO( 1019b4a7f91cSChuck Lever const struct rpcrdma_rep *rep 1020b4a7f91cSChuck Lever ), 1021b4a7f91cSChuck Lever 1022b4a7f91cSChuck Lever TP_ARGS(rep), 1023b4a7f91cSChuck Lever 1024b4a7f91cSChuck Lever TP_STRUCT__entry( 1025b4a7f91cSChuck Lever __field(unsigned int, task_id) 1026b4a7f91cSChuck Lever __field(unsigned int, client_id) 1027b4a7f91cSChuck Lever __field(const void *, rep) 1028b4a7f91cSChuck Lever __field(u32, xid) 1029b4a7f91cSChuck Lever ), 1030b4a7f91cSChuck Lever 1031b4a7f91cSChuck Lever TP_fast_assign( 1032b4a7f91cSChuck Lever __entry->task_id = rep->rr_rqst->rq_task->tk_pid; 1033b4a7f91cSChuck Lever __entry->client_id = rep->rr_rqst->rq_task->tk_client->cl_clid; 1034b4a7f91cSChuck Lever __entry->rep = rep; 1035b4a7f91cSChuck Lever __entry->xid = be32_to_cpu(rep->rr_xid); 1036b4a7f91cSChuck Lever ), 1037b4a7f91cSChuck Lever 1038b4a7f91cSChuck Lever TP_printk("task:%u@%u xid=0x%08x rep=%p", 1039b4a7f91cSChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 1040b4a7f91cSChuck Lever __entry->rep 1041b4a7f91cSChuck Lever ) 1042b4a7f91cSChuck Lever ); 1043b4a7f91cSChuck Lever 1044b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_vers); 1045b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_rqst); 1046b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_short); 1047b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_hdr); 1048b4a7f91cSChuck Lever 1049e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_fixup, 1050e11b7c96SChuck Lever TP_PROTO( 1051e11b7c96SChuck Lever const struct rpc_rqst *rqst, 1052e11b7c96SChuck Lever int len, 1053e11b7c96SChuck Lever int hdrlen 1054e11b7c96SChuck Lever ), 1055e11b7c96SChuck Lever 1056e11b7c96SChuck Lever TP_ARGS(rqst, len, hdrlen), 1057e11b7c96SChuck Lever 1058e11b7c96SChuck Lever TP_STRUCT__entry( 1059e11b7c96SChuck Lever __field(unsigned int, task_id) 1060e11b7c96SChuck Lever __field(unsigned int, client_id) 1061e11b7c96SChuck Lever __field(const void *, base) 1062e11b7c96SChuck Lever __field(int, len) 1063e11b7c96SChuck Lever __field(int, hdrlen) 1064e11b7c96SChuck Lever ), 1065e11b7c96SChuck Lever 1066e11b7c96SChuck Lever TP_fast_assign( 1067e11b7c96SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 1068e11b7c96SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 1069e11b7c96SChuck Lever __entry->base = rqst->rq_rcv_buf.head[0].iov_base; 1070e11b7c96SChuck Lever __entry->len = len; 1071e11b7c96SChuck Lever __entry->hdrlen = hdrlen; 1072e11b7c96SChuck Lever ), 1073e11b7c96SChuck Lever 1074e11b7c96SChuck Lever TP_printk("task:%u@%u base=%p len=%d hdrlen=%d", 1075e11b7c96SChuck Lever __entry->task_id, __entry->client_id, 1076e11b7c96SChuck Lever __entry->base, __entry->len, __entry->hdrlen 1077e11b7c96SChuck Lever ) 1078e11b7c96SChuck Lever ); 1079e11b7c96SChuck Lever 1080e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_fixup_pg, 1081e11b7c96SChuck Lever TP_PROTO( 1082e11b7c96SChuck Lever const struct rpc_rqst *rqst, 1083e11b7c96SChuck Lever int pageno, 1084e11b7c96SChuck Lever const void *pos, 1085e11b7c96SChuck Lever int len, 1086e11b7c96SChuck Lever int curlen 1087e11b7c96SChuck Lever ), 1088e11b7c96SChuck Lever 1089e11b7c96SChuck Lever TP_ARGS(rqst, pageno, pos, len, curlen), 1090e11b7c96SChuck Lever 1091e11b7c96SChuck Lever TP_STRUCT__entry( 1092e11b7c96SChuck Lever __field(unsigned int, task_id) 1093e11b7c96SChuck Lever __field(unsigned int, client_id) 1094e11b7c96SChuck Lever __field(const void *, pos) 1095e11b7c96SChuck Lever __field(int, pageno) 1096e11b7c96SChuck Lever __field(int, len) 1097e11b7c96SChuck Lever __field(int, curlen) 1098e11b7c96SChuck Lever ), 1099e11b7c96SChuck Lever 1100e11b7c96SChuck Lever TP_fast_assign( 1101e11b7c96SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 1102e11b7c96SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 1103e11b7c96SChuck Lever __entry->pos = pos; 1104e11b7c96SChuck Lever __entry->pageno = pageno; 1105e11b7c96SChuck Lever __entry->len = len; 1106e11b7c96SChuck Lever __entry->curlen = curlen; 1107e11b7c96SChuck Lever ), 1108e11b7c96SChuck Lever 1109e11b7c96SChuck Lever TP_printk("task:%u@%u pageno=%d pos=%p len=%d curlen=%d", 1110e11b7c96SChuck Lever __entry->task_id, __entry->client_id, 1111e11b7c96SChuck Lever __entry->pageno, __entry->pos, __entry->len, __entry->curlen 1112e11b7c96SChuck Lever ) 1113e11b7c96SChuck Lever ); 1114e11b7c96SChuck Lever 1115e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_decode_seg, 1116e11b7c96SChuck Lever TP_PROTO( 1117e11b7c96SChuck Lever u32 handle, 1118e11b7c96SChuck Lever u32 length, 1119e11b7c96SChuck Lever u64 offset 1120e11b7c96SChuck Lever ), 1121e11b7c96SChuck Lever 1122e11b7c96SChuck Lever TP_ARGS(handle, length, offset), 1123e11b7c96SChuck Lever 1124e11b7c96SChuck Lever TP_STRUCT__entry( 1125e11b7c96SChuck Lever __field(u32, handle) 1126e11b7c96SChuck Lever __field(u32, length) 1127e11b7c96SChuck Lever __field(u64, offset) 1128e11b7c96SChuck Lever ), 1129e11b7c96SChuck Lever 1130e11b7c96SChuck Lever TP_fast_assign( 1131e11b7c96SChuck Lever __entry->handle = handle; 1132e11b7c96SChuck Lever __entry->length = length; 1133e11b7c96SChuck Lever __entry->offset = offset; 1134e11b7c96SChuck Lever ), 1135e11b7c96SChuck Lever 1136e11b7c96SChuck Lever TP_printk("%u@0x%016llx:0x%08x", 1137e11b7c96SChuck Lever __entry->length, (unsigned long long)__entry->offset, 1138e11b7c96SChuck Lever __entry->handle 1139e11b7c96SChuck Lever ) 1140e11b7c96SChuck Lever ); 1141e11b7c96SChuck Lever 1142fc1eb807SChuck Lever /** 1143ae724676SChuck Lever ** Allocation/release of rpcrdma_reqs and rpcrdma_reps 1144ae724676SChuck Lever **/ 1145ae724676SChuck Lever 1146395069fcSChuck Lever TRACE_EVENT(xprtrdma_op_allocate, 1147ae724676SChuck Lever TP_PROTO( 1148ae724676SChuck Lever const struct rpc_task *task, 1149ae724676SChuck Lever const struct rpcrdma_req *req 1150ae724676SChuck Lever ), 1151ae724676SChuck Lever 1152ae724676SChuck Lever TP_ARGS(task, req), 1153ae724676SChuck Lever 1154ae724676SChuck Lever TP_STRUCT__entry( 1155ae724676SChuck Lever __field(unsigned int, task_id) 1156ae724676SChuck Lever __field(unsigned int, client_id) 1157ae724676SChuck Lever __field(const void *, req) 1158ae724676SChuck Lever __field(size_t, callsize) 1159ae724676SChuck Lever __field(size_t, rcvsize) 1160ae724676SChuck Lever ), 1161ae724676SChuck Lever 1162ae724676SChuck Lever TP_fast_assign( 1163ae724676SChuck Lever __entry->task_id = task->tk_pid; 1164ae724676SChuck Lever __entry->client_id = task->tk_client->cl_clid; 1165ae724676SChuck Lever __entry->req = req; 1166ae724676SChuck Lever __entry->callsize = task->tk_rqstp->rq_callsize; 1167ae724676SChuck Lever __entry->rcvsize = task->tk_rqstp->rq_rcvsize; 1168ae724676SChuck Lever ), 1169ae724676SChuck Lever 11707c8d9e7cSChuck Lever TP_printk("task:%u@%u req=%p (%zu, %zu)", 1171ae724676SChuck Lever __entry->task_id, __entry->client_id, 11727c8d9e7cSChuck Lever __entry->req, __entry->callsize, __entry->rcvsize 1173ae724676SChuck Lever ) 1174ae724676SChuck Lever ); 1175ae724676SChuck Lever 1176395069fcSChuck Lever TRACE_EVENT(xprtrdma_op_free, 1177ae724676SChuck Lever TP_PROTO( 1178ae724676SChuck Lever const struct rpc_task *task, 1179ae724676SChuck Lever const struct rpcrdma_req *req 1180ae724676SChuck Lever ), 1181ae724676SChuck Lever 1182ae724676SChuck Lever TP_ARGS(task, req), 1183ae724676SChuck Lever 1184ae724676SChuck Lever TP_STRUCT__entry( 1185ae724676SChuck Lever __field(unsigned int, task_id) 1186ae724676SChuck Lever __field(unsigned int, client_id) 1187ae724676SChuck Lever __field(const void *, req) 1188ae724676SChuck Lever __field(const void *, rep) 1189ae724676SChuck Lever ), 1190ae724676SChuck Lever 1191ae724676SChuck Lever TP_fast_assign( 1192ae724676SChuck Lever __entry->task_id = task->tk_pid; 1193ae724676SChuck Lever __entry->client_id = task->tk_client->cl_clid; 1194ae724676SChuck Lever __entry->req = req; 1195ae724676SChuck Lever __entry->rep = req->rl_reply; 1196ae724676SChuck Lever ), 1197ae724676SChuck Lever 1198ae724676SChuck Lever TP_printk("task:%u@%u req=%p rep=%p", 1199ae724676SChuck Lever __entry->task_id, __entry->client_id, 1200ae724676SChuck Lever __entry->req, __entry->rep 1201ae724676SChuck Lever ) 1202ae724676SChuck Lever ); 1203ae724676SChuck Lever 1204ae724676SChuck Lever /** 1205fc1eb807SChuck Lever ** Callback events 1206fc1eb807SChuck Lever **/ 1207fc1eb807SChuck Lever 1208fc1eb807SChuck Lever TRACE_EVENT(xprtrdma_cb_setup, 1209fc1eb807SChuck Lever TP_PROTO( 1210fc1eb807SChuck Lever const struct rpcrdma_xprt *r_xprt, 1211fc1eb807SChuck Lever unsigned int reqs 1212fc1eb807SChuck Lever ), 1213fc1eb807SChuck Lever 1214fc1eb807SChuck Lever TP_ARGS(r_xprt, reqs), 1215fc1eb807SChuck Lever 1216fc1eb807SChuck Lever TP_STRUCT__entry( 1217fc1eb807SChuck Lever __field(const void *, r_xprt) 1218fc1eb807SChuck Lever __field(unsigned int, reqs) 1219fc1eb807SChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 1220fc1eb807SChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 1221fc1eb807SChuck Lever ), 1222fc1eb807SChuck Lever 1223fc1eb807SChuck Lever TP_fast_assign( 1224fc1eb807SChuck Lever __entry->r_xprt = r_xprt; 1225fc1eb807SChuck Lever __entry->reqs = reqs; 1226fc1eb807SChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 1227fc1eb807SChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 1228fc1eb807SChuck Lever ), 1229fc1eb807SChuck Lever 1230fc1eb807SChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: %u reqs", 1231fc1eb807SChuck Lever __get_str(addr), __get_str(port), 1232fc1eb807SChuck Lever __entry->r_xprt, __entry->reqs 1233fc1eb807SChuck Lever ) 1234fc1eb807SChuck Lever ); 1235fc1eb807SChuck Lever 1236fc1eb807SChuck Lever DEFINE_CB_EVENT(xprtrdma_cb_call); 1237fc1eb807SChuck Lever DEFINE_CB_EVENT(xprtrdma_cb_reply); 1238fc1eb807SChuck Lever 123907e10308SChuck Lever TRACE_EVENT(xprtrdma_leaked_rep, 124007e10308SChuck Lever TP_PROTO( 124107e10308SChuck Lever const struct rpc_rqst *rqst, 124207e10308SChuck Lever const struct rpcrdma_rep *rep 124307e10308SChuck Lever ), 124407e10308SChuck Lever 124507e10308SChuck Lever TP_ARGS(rqst, rep), 124607e10308SChuck Lever 124707e10308SChuck Lever TP_STRUCT__entry( 124807e10308SChuck Lever __field(unsigned int, task_id) 124907e10308SChuck Lever __field(unsigned int, client_id) 125007e10308SChuck Lever __field(u32, xid) 125107e10308SChuck Lever __field(const void *, rep) 125207e10308SChuck Lever ), 125307e10308SChuck Lever 125407e10308SChuck Lever TP_fast_assign( 125507e10308SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 125607e10308SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 125707e10308SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 125807e10308SChuck Lever __entry->rep = rep; 125907e10308SChuck Lever ), 126007e10308SChuck Lever 126107e10308SChuck Lever TP_printk("task:%u@%u xid=0x%08x rep=%p", 126207e10308SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 126307e10308SChuck Lever __entry->rep 126407e10308SChuck Lever ) 126507e10308SChuck Lever ); 126607e10308SChuck Lever 126798895edbSChuck Lever /** 126898895edbSChuck Lever ** Server-side RPC/RDMA events 126998895edbSChuck Lever **/ 127098895edbSChuck Lever 127198895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_xprt_event, 127298895edbSChuck Lever TP_PROTO( 127398895edbSChuck Lever const struct svc_xprt *xprt 127498895edbSChuck Lever ), 127598895edbSChuck Lever 127698895edbSChuck Lever TP_ARGS(xprt), 127798895edbSChuck Lever 127898895edbSChuck Lever TP_STRUCT__entry( 127998895edbSChuck Lever __field(const void *, xprt) 128098895edbSChuck Lever __string(addr, xprt->xpt_remotebuf) 128198895edbSChuck Lever ), 128298895edbSChuck Lever 128398895edbSChuck Lever TP_fast_assign( 128498895edbSChuck Lever __entry->xprt = xprt; 128598895edbSChuck Lever __assign_str(addr, xprt->xpt_remotebuf); 128698895edbSChuck Lever ), 128798895edbSChuck Lever 128898895edbSChuck Lever TP_printk("xprt=%p addr=%s", 128998895edbSChuck Lever __entry->xprt, __get_str(addr) 129098895edbSChuck Lever ) 129198895edbSChuck Lever ); 129298895edbSChuck Lever 129398895edbSChuck Lever #define DEFINE_XPRT_EVENT(name) \ 129498895edbSChuck Lever DEFINE_EVENT(svcrdma_xprt_event, svcrdma_xprt_##name, \ 129598895edbSChuck Lever TP_PROTO( \ 129698895edbSChuck Lever const struct svc_xprt *xprt \ 129798895edbSChuck Lever ), \ 129898895edbSChuck Lever TP_ARGS(xprt)) 129998895edbSChuck Lever 130098895edbSChuck Lever DEFINE_XPRT_EVENT(accept); 130198895edbSChuck Lever DEFINE_XPRT_EVENT(fail); 130298895edbSChuck Lever DEFINE_XPRT_EVENT(free); 130398895edbSChuck Lever 130498895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_MSG); 130598895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_NOMSG); 130698895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_MSGP); 130798895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_DONE); 130898895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_ERROR); 130998895edbSChuck Lever 131098895edbSChuck Lever #define show_rpcrdma_proc(x) \ 131198895edbSChuck Lever __print_symbolic(x, \ 131298895edbSChuck Lever { RDMA_MSG, "RDMA_MSG" }, \ 131398895edbSChuck Lever { RDMA_NOMSG, "RDMA_NOMSG" }, \ 131498895edbSChuck Lever { RDMA_MSGP, "RDMA_MSGP" }, \ 131598895edbSChuck Lever { RDMA_DONE, "RDMA_DONE" }, \ 131698895edbSChuck Lever { RDMA_ERROR, "RDMA_ERROR" }) 131798895edbSChuck Lever 131898895edbSChuck Lever TRACE_EVENT(svcrdma_decode_rqst, 131998895edbSChuck Lever TP_PROTO( 132098895edbSChuck Lever __be32 *p, 132198895edbSChuck Lever unsigned int hdrlen 132298895edbSChuck Lever ), 132398895edbSChuck Lever 132498895edbSChuck Lever TP_ARGS(p, hdrlen), 132598895edbSChuck Lever 132698895edbSChuck Lever TP_STRUCT__entry( 132798895edbSChuck Lever __field(u32, xid) 132898895edbSChuck Lever __field(u32, vers) 132998895edbSChuck Lever __field(u32, proc) 133098895edbSChuck Lever __field(u32, credits) 133198895edbSChuck Lever __field(unsigned int, hdrlen) 133298895edbSChuck Lever ), 133398895edbSChuck Lever 133498895edbSChuck Lever TP_fast_assign( 133598895edbSChuck Lever __entry->xid = be32_to_cpup(p++); 133698895edbSChuck Lever __entry->vers = be32_to_cpup(p++); 133798895edbSChuck Lever __entry->credits = be32_to_cpup(p++); 133898895edbSChuck Lever __entry->proc = be32_to_cpup(p); 133998895edbSChuck Lever __entry->hdrlen = hdrlen; 134098895edbSChuck Lever ), 134198895edbSChuck Lever 134298895edbSChuck Lever TP_printk("xid=0x%08x vers=%u credits=%u proc=%s hdrlen=%u", 134398895edbSChuck Lever __entry->xid, __entry->vers, __entry->credits, 134498895edbSChuck Lever show_rpcrdma_proc(__entry->proc), __entry->hdrlen) 134598895edbSChuck Lever ); 134698895edbSChuck Lever 134798895edbSChuck Lever TRACE_EVENT(svcrdma_decode_short, 134898895edbSChuck Lever TP_PROTO( 134998895edbSChuck Lever unsigned int hdrlen 135098895edbSChuck Lever ), 135198895edbSChuck Lever 135298895edbSChuck Lever TP_ARGS(hdrlen), 135398895edbSChuck Lever 135498895edbSChuck Lever TP_STRUCT__entry( 135598895edbSChuck Lever __field(unsigned int, hdrlen) 135698895edbSChuck Lever ), 135798895edbSChuck Lever 135898895edbSChuck Lever TP_fast_assign( 135998895edbSChuck Lever __entry->hdrlen = hdrlen; 136098895edbSChuck Lever ), 136198895edbSChuck Lever 136298895edbSChuck Lever TP_printk("hdrlen=%u", __entry->hdrlen) 136398895edbSChuck Lever ); 136498895edbSChuck Lever 136598895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_badreq_event, 136698895edbSChuck Lever TP_PROTO( 136798895edbSChuck Lever __be32 *p 136898895edbSChuck Lever ), 136998895edbSChuck Lever 137098895edbSChuck Lever TP_ARGS(p), 137198895edbSChuck Lever 137298895edbSChuck Lever TP_STRUCT__entry( 137398895edbSChuck Lever __field(u32, xid) 137498895edbSChuck Lever __field(u32, vers) 137598895edbSChuck Lever __field(u32, proc) 137698895edbSChuck Lever __field(u32, credits) 137798895edbSChuck Lever ), 137898895edbSChuck Lever 137998895edbSChuck Lever TP_fast_assign( 138098895edbSChuck Lever __entry->xid = be32_to_cpup(p++); 138198895edbSChuck Lever __entry->vers = be32_to_cpup(p++); 138298895edbSChuck Lever __entry->credits = be32_to_cpup(p++); 138398895edbSChuck Lever __entry->proc = be32_to_cpup(p); 138498895edbSChuck Lever ), 138598895edbSChuck Lever 138698895edbSChuck Lever TP_printk("xid=0x%08x vers=%u credits=%u proc=%u", 138798895edbSChuck Lever __entry->xid, __entry->vers, __entry->credits, __entry->proc) 138898895edbSChuck Lever ); 138998895edbSChuck Lever 139098895edbSChuck Lever #define DEFINE_BADREQ_EVENT(name) \ 139198895edbSChuck Lever DEFINE_EVENT(svcrdma_badreq_event, svcrdma_decode_##name,\ 139298895edbSChuck Lever TP_PROTO( \ 139398895edbSChuck Lever __be32 *p \ 139498895edbSChuck Lever ), \ 139598895edbSChuck Lever TP_ARGS(p)) 139698895edbSChuck Lever 139798895edbSChuck Lever DEFINE_BADREQ_EVENT(badvers); 139898895edbSChuck Lever DEFINE_BADREQ_EVENT(drop); 139998895edbSChuck Lever DEFINE_BADREQ_EVENT(badproc); 140098895edbSChuck Lever DEFINE_BADREQ_EVENT(parse); 140198895edbSChuck Lever 140298895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_segment_event, 140398895edbSChuck Lever TP_PROTO( 140498895edbSChuck Lever u32 handle, 140598895edbSChuck Lever u32 length, 140698895edbSChuck Lever u64 offset 140798895edbSChuck Lever ), 140898895edbSChuck Lever 140998895edbSChuck Lever TP_ARGS(handle, length, offset), 141098895edbSChuck Lever 141198895edbSChuck Lever TP_STRUCT__entry( 141298895edbSChuck Lever __field(u32, handle) 141398895edbSChuck Lever __field(u32, length) 141498895edbSChuck Lever __field(u64, offset) 141598895edbSChuck Lever ), 141698895edbSChuck Lever 141798895edbSChuck Lever TP_fast_assign( 141898895edbSChuck Lever __entry->handle = handle; 141998895edbSChuck Lever __entry->length = length; 142098895edbSChuck Lever __entry->offset = offset; 142198895edbSChuck Lever ), 142298895edbSChuck Lever 142398895edbSChuck Lever TP_printk("%u@0x%016llx:0x%08x", 142498895edbSChuck Lever __entry->length, (unsigned long long)__entry->offset, 142598895edbSChuck Lever __entry->handle 142698895edbSChuck Lever ) 142798895edbSChuck Lever ); 142898895edbSChuck Lever 142998895edbSChuck Lever #define DEFINE_SEGMENT_EVENT(name) \ 143098895edbSChuck Lever DEFINE_EVENT(svcrdma_segment_event, svcrdma_encode_##name,\ 143198895edbSChuck Lever TP_PROTO( \ 143298895edbSChuck Lever u32 handle, \ 143398895edbSChuck Lever u32 length, \ 143498895edbSChuck Lever u64 offset \ 143598895edbSChuck Lever ), \ 143698895edbSChuck Lever TP_ARGS(handle, length, offset)) 143798895edbSChuck Lever 143898895edbSChuck Lever DEFINE_SEGMENT_EVENT(rseg); 143998895edbSChuck Lever DEFINE_SEGMENT_EVENT(wseg); 144098895edbSChuck Lever 144198895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_chunk_event, 144298895edbSChuck Lever TP_PROTO( 144398895edbSChuck Lever u32 length 144498895edbSChuck Lever ), 144598895edbSChuck Lever 144698895edbSChuck Lever TP_ARGS(length), 144798895edbSChuck Lever 144898895edbSChuck Lever TP_STRUCT__entry( 144998895edbSChuck Lever __field(u32, length) 145098895edbSChuck Lever ), 145198895edbSChuck Lever 145298895edbSChuck Lever TP_fast_assign( 145398895edbSChuck Lever __entry->length = length; 145498895edbSChuck Lever ), 145598895edbSChuck Lever 145698895edbSChuck Lever TP_printk("length=%u", 145798895edbSChuck Lever __entry->length 145898895edbSChuck Lever ) 145998895edbSChuck Lever ); 146098895edbSChuck Lever 146198895edbSChuck Lever #define DEFINE_CHUNK_EVENT(name) \ 146298895edbSChuck Lever DEFINE_EVENT(svcrdma_chunk_event, svcrdma_encode_##name,\ 146398895edbSChuck Lever TP_PROTO( \ 146498895edbSChuck Lever u32 length \ 146598895edbSChuck Lever ), \ 146698895edbSChuck Lever TP_ARGS(length)) 146798895edbSChuck Lever 146898895edbSChuck Lever DEFINE_CHUNK_EVENT(pzr); 146998895edbSChuck Lever DEFINE_CHUNK_EVENT(write); 147098895edbSChuck Lever DEFINE_CHUNK_EVENT(reply); 147198895edbSChuck Lever 147298895edbSChuck Lever TRACE_EVENT(svcrdma_encode_read, 147398895edbSChuck Lever TP_PROTO( 147498895edbSChuck Lever u32 length, 147598895edbSChuck Lever u32 position 147698895edbSChuck Lever ), 147798895edbSChuck Lever 147898895edbSChuck Lever TP_ARGS(length, position), 147998895edbSChuck Lever 148098895edbSChuck Lever TP_STRUCT__entry( 148198895edbSChuck Lever __field(u32, length) 148298895edbSChuck Lever __field(u32, position) 148398895edbSChuck Lever ), 148498895edbSChuck Lever 148598895edbSChuck Lever TP_fast_assign( 148698895edbSChuck Lever __entry->length = length; 148798895edbSChuck Lever __entry->position = position; 148898895edbSChuck Lever ), 148998895edbSChuck Lever 149098895edbSChuck Lever TP_printk("length=%u position=%u", 149198895edbSChuck Lever __entry->length, __entry->position 149298895edbSChuck Lever ) 149398895edbSChuck Lever ); 149498895edbSChuck Lever 149598895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_error_event, 149698895edbSChuck Lever TP_PROTO( 149798895edbSChuck Lever __be32 xid 149898895edbSChuck Lever ), 149998895edbSChuck Lever 150098895edbSChuck Lever TP_ARGS(xid), 150198895edbSChuck Lever 150298895edbSChuck Lever TP_STRUCT__entry( 150398895edbSChuck Lever __field(u32, xid) 150498895edbSChuck Lever ), 150598895edbSChuck Lever 150698895edbSChuck Lever TP_fast_assign( 150798895edbSChuck Lever __entry->xid = be32_to_cpu(xid); 150898895edbSChuck Lever ), 150998895edbSChuck Lever 151098895edbSChuck Lever TP_printk("xid=0x%08x", 151198895edbSChuck Lever __entry->xid 151298895edbSChuck Lever ) 151398895edbSChuck Lever ); 151498895edbSChuck Lever 151598895edbSChuck Lever #define DEFINE_ERROR_EVENT(name) \ 151698895edbSChuck Lever DEFINE_EVENT(svcrdma_error_event, svcrdma_err_##name, \ 151798895edbSChuck Lever TP_PROTO( \ 151898895edbSChuck Lever __be32 xid \ 151998895edbSChuck Lever ), \ 152098895edbSChuck Lever TP_ARGS(xid)) 152198895edbSChuck Lever 152298895edbSChuck Lever DEFINE_ERROR_EVENT(vers); 152398895edbSChuck Lever DEFINE_ERROR_EVENT(chunk); 152498895edbSChuck Lever 1525bd2abef3SChuck Lever /** 1526bd2abef3SChuck Lever ** Server-side RDMA API events 1527bd2abef3SChuck Lever **/ 1528bd2abef3SChuck Lever 1529bd2abef3SChuck Lever TRACE_EVENT(svcrdma_dma_map_page, 1530bd2abef3SChuck Lever TP_PROTO( 1531bd2abef3SChuck Lever const struct svcxprt_rdma *rdma, 1532bd2abef3SChuck Lever const void *page 1533bd2abef3SChuck Lever ), 1534bd2abef3SChuck Lever 1535bd2abef3SChuck Lever TP_ARGS(rdma, page), 1536bd2abef3SChuck Lever 1537bd2abef3SChuck Lever TP_STRUCT__entry( 1538bd2abef3SChuck Lever __field(const void *, page); 1539bd2abef3SChuck Lever __string(device, rdma->sc_cm_id->device->name) 1540bd2abef3SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1541bd2abef3SChuck Lever ), 1542bd2abef3SChuck Lever 1543bd2abef3SChuck Lever TP_fast_assign( 1544bd2abef3SChuck Lever __entry->page = page; 1545bd2abef3SChuck Lever __assign_str(device, rdma->sc_cm_id->device->name); 1546bd2abef3SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1547bd2abef3SChuck Lever ), 1548bd2abef3SChuck Lever 1549bd2abef3SChuck Lever TP_printk("addr=%s device=%s page=%p", 1550bd2abef3SChuck Lever __get_str(addr), __get_str(device), __entry->page 1551bd2abef3SChuck Lever ) 1552bd2abef3SChuck Lever ); 1553bd2abef3SChuck Lever 1554bd2abef3SChuck Lever TRACE_EVENT(svcrdma_dma_map_rwctx, 1555bd2abef3SChuck Lever TP_PROTO( 1556bd2abef3SChuck Lever const struct svcxprt_rdma *rdma, 1557bd2abef3SChuck Lever int status 1558bd2abef3SChuck Lever ), 1559bd2abef3SChuck Lever 1560bd2abef3SChuck Lever TP_ARGS(rdma, status), 1561bd2abef3SChuck Lever 1562bd2abef3SChuck Lever TP_STRUCT__entry( 1563bd2abef3SChuck Lever __field(int, status) 1564bd2abef3SChuck Lever __string(device, rdma->sc_cm_id->device->name) 1565bd2abef3SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1566bd2abef3SChuck Lever ), 1567bd2abef3SChuck Lever 1568bd2abef3SChuck Lever TP_fast_assign( 1569bd2abef3SChuck Lever __entry->status = status; 1570bd2abef3SChuck Lever __assign_str(device, rdma->sc_cm_id->device->name); 1571bd2abef3SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1572bd2abef3SChuck Lever ), 1573bd2abef3SChuck Lever 1574bd2abef3SChuck Lever TP_printk("addr=%s device=%s status=%d", 1575bd2abef3SChuck Lever __get_str(addr), __get_str(device), __entry->status 1576bd2abef3SChuck Lever ) 1577bd2abef3SChuck Lever ); 1578bd2abef3SChuck Lever 1579bd2abef3SChuck Lever TRACE_EVENT(svcrdma_send_failed, 1580bd2abef3SChuck Lever TP_PROTO( 1581bd2abef3SChuck Lever const struct svc_rqst *rqst, 1582bd2abef3SChuck Lever int status 1583bd2abef3SChuck Lever ), 1584bd2abef3SChuck Lever 1585bd2abef3SChuck Lever TP_ARGS(rqst, status), 1586bd2abef3SChuck Lever 1587bd2abef3SChuck Lever TP_STRUCT__entry( 1588bd2abef3SChuck Lever __field(int, status) 1589bd2abef3SChuck Lever __field(u32, xid) 1590bd2abef3SChuck Lever __field(const void *, xprt) 1591bd2abef3SChuck Lever __string(addr, rqst->rq_xprt->xpt_remotebuf) 1592bd2abef3SChuck Lever ), 1593bd2abef3SChuck Lever 1594bd2abef3SChuck Lever TP_fast_assign( 1595bd2abef3SChuck Lever __entry->status = status; 1596bd2abef3SChuck Lever __entry->xid = __be32_to_cpu(rqst->rq_xid); 1597bd2abef3SChuck Lever __entry->xprt = rqst->rq_xprt; 1598bd2abef3SChuck Lever __assign_str(addr, rqst->rq_xprt->xpt_remotebuf); 1599bd2abef3SChuck Lever ), 1600bd2abef3SChuck Lever 1601bd2abef3SChuck Lever TP_printk("xprt=%p addr=%s xid=0x%08x status=%d", 1602bd2abef3SChuck Lever __entry->xprt, __get_str(addr), 1603bd2abef3SChuck Lever __entry->xid, __entry->status 1604bd2abef3SChuck Lever ) 1605bd2abef3SChuck Lever ); 1606bd2abef3SChuck Lever 1607bd2abef3SChuck Lever DECLARE_EVENT_CLASS(svcrdma_sendcomp_event, 1608bd2abef3SChuck Lever TP_PROTO( 1609bd2abef3SChuck Lever const struct ib_wc *wc 1610bd2abef3SChuck Lever ), 1611bd2abef3SChuck Lever 1612bd2abef3SChuck Lever TP_ARGS(wc), 1613bd2abef3SChuck Lever 1614bd2abef3SChuck Lever TP_STRUCT__entry( 1615bd2abef3SChuck Lever __field(const void *, cqe) 1616bd2abef3SChuck Lever __field(unsigned int, status) 1617bd2abef3SChuck Lever __field(unsigned int, vendor_err) 1618bd2abef3SChuck Lever ), 1619bd2abef3SChuck Lever 1620bd2abef3SChuck Lever TP_fast_assign( 1621bd2abef3SChuck Lever __entry->cqe = wc->wr_cqe; 1622bd2abef3SChuck Lever __entry->status = wc->status; 1623bd2abef3SChuck Lever if (wc->status) 1624bd2abef3SChuck Lever __entry->vendor_err = wc->vendor_err; 1625bd2abef3SChuck Lever else 1626bd2abef3SChuck Lever __entry->vendor_err = 0; 1627bd2abef3SChuck Lever ), 1628bd2abef3SChuck Lever 1629bd2abef3SChuck Lever TP_printk("cqe=%p status=%s (%u/0x%x)", 1630bd2abef3SChuck Lever __entry->cqe, rdma_show_wc_status(__entry->status), 1631bd2abef3SChuck Lever __entry->status, __entry->vendor_err 1632bd2abef3SChuck Lever ) 1633bd2abef3SChuck Lever ); 1634bd2abef3SChuck Lever 1635bd2abef3SChuck Lever #define DEFINE_SENDCOMP_EVENT(name) \ 1636bd2abef3SChuck Lever DEFINE_EVENT(svcrdma_sendcomp_event, svcrdma_wc_##name, \ 1637bd2abef3SChuck Lever TP_PROTO( \ 1638bd2abef3SChuck Lever const struct ib_wc *wc \ 1639bd2abef3SChuck Lever ), \ 1640bd2abef3SChuck Lever TP_ARGS(wc)) 1641bd2abef3SChuck Lever 1642bd2abef3SChuck Lever TRACE_EVENT(svcrdma_post_send, 1643bd2abef3SChuck Lever TP_PROTO( 1644bd2abef3SChuck Lever const struct ib_send_wr *wr, 1645bd2abef3SChuck Lever int status 1646bd2abef3SChuck Lever ), 1647bd2abef3SChuck Lever 1648bd2abef3SChuck Lever TP_ARGS(wr, status), 1649bd2abef3SChuck Lever 1650bd2abef3SChuck Lever TP_STRUCT__entry( 1651bd2abef3SChuck Lever __field(const void *, cqe) 1652bd2abef3SChuck Lever __field(unsigned int, num_sge) 1653bd2abef3SChuck Lever __field(u32, inv_rkey) 1654bd2abef3SChuck Lever __field(int, status) 1655bd2abef3SChuck Lever ), 1656bd2abef3SChuck Lever 1657bd2abef3SChuck Lever TP_fast_assign( 1658bd2abef3SChuck Lever __entry->cqe = wr->wr_cqe; 1659bd2abef3SChuck Lever __entry->num_sge = wr->num_sge; 1660bd2abef3SChuck Lever __entry->inv_rkey = (wr->opcode == IB_WR_SEND_WITH_INV) ? 1661bd2abef3SChuck Lever wr->ex.invalidate_rkey : 0; 1662bd2abef3SChuck Lever __entry->status = status; 1663bd2abef3SChuck Lever ), 1664bd2abef3SChuck Lever 1665bd2abef3SChuck Lever TP_printk("cqe=%p num_sge=%u inv_rkey=0x%08x status=%d", 1666bd2abef3SChuck Lever __entry->cqe, __entry->num_sge, 1667bd2abef3SChuck Lever __entry->inv_rkey, __entry->status 1668bd2abef3SChuck Lever ) 1669bd2abef3SChuck Lever ); 1670bd2abef3SChuck Lever 1671bd2abef3SChuck Lever DEFINE_SENDCOMP_EVENT(send); 1672bd2abef3SChuck Lever 1673bd2abef3SChuck Lever TRACE_EVENT(svcrdma_post_recv, 1674bd2abef3SChuck Lever TP_PROTO( 1675bd2abef3SChuck Lever const struct ib_recv_wr *wr, 1676bd2abef3SChuck Lever int status 1677bd2abef3SChuck Lever ), 1678bd2abef3SChuck Lever 1679bd2abef3SChuck Lever TP_ARGS(wr, status), 1680bd2abef3SChuck Lever 1681bd2abef3SChuck Lever TP_STRUCT__entry( 1682bd2abef3SChuck Lever __field(const void *, cqe) 1683bd2abef3SChuck Lever __field(int, status) 1684bd2abef3SChuck Lever ), 1685bd2abef3SChuck Lever 1686bd2abef3SChuck Lever TP_fast_assign( 1687bd2abef3SChuck Lever __entry->cqe = wr->wr_cqe; 1688bd2abef3SChuck Lever __entry->status = status; 1689bd2abef3SChuck Lever ), 1690bd2abef3SChuck Lever 1691bd2abef3SChuck Lever TP_printk("cqe=%p status=%d", 1692bd2abef3SChuck Lever __entry->cqe, __entry->status 1693bd2abef3SChuck Lever ) 1694bd2abef3SChuck Lever ); 1695bd2abef3SChuck Lever 1696bd2abef3SChuck Lever TRACE_EVENT(svcrdma_wc_receive, 1697bd2abef3SChuck Lever TP_PROTO( 1698bd2abef3SChuck Lever const struct ib_wc *wc 1699bd2abef3SChuck Lever ), 1700bd2abef3SChuck Lever 1701bd2abef3SChuck Lever TP_ARGS(wc), 1702bd2abef3SChuck Lever 1703bd2abef3SChuck Lever TP_STRUCT__entry( 1704bd2abef3SChuck Lever __field(const void *, cqe) 1705bd2abef3SChuck Lever __field(u32, byte_len) 1706bd2abef3SChuck Lever __field(unsigned int, status) 1707bd2abef3SChuck Lever __field(u32, vendor_err) 1708bd2abef3SChuck Lever ), 1709bd2abef3SChuck Lever 1710bd2abef3SChuck Lever TP_fast_assign( 1711bd2abef3SChuck Lever __entry->cqe = wc->wr_cqe; 1712bd2abef3SChuck Lever __entry->status = wc->status; 1713bd2abef3SChuck Lever if (wc->status) { 1714bd2abef3SChuck Lever __entry->byte_len = 0; 1715bd2abef3SChuck Lever __entry->vendor_err = wc->vendor_err; 1716bd2abef3SChuck Lever } else { 1717bd2abef3SChuck Lever __entry->byte_len = wc->byte_len; 1718bd2abef3SChuck Lever __entry->vendor_err = 0; 1719bd2abef3SChuck Lever } 1720bd2abef3SChuck Lever ), 1721bd2abef3SChuck Lever 1722bd2abef3SChuck Lever TP_printk("cqe=%p byte_len=%u status=%s (%u/0x%x)", 1723bd2abef3SChuck Lever __entry->cqe, __entry->byte_len, 1724bd2abef3SChuck Lever rdma_show_wc_status(__entry->status), 1725bd2abef3SChuck Lever __entry->status, __entry->vendor_err 1726bd2abef3SChuck Lever ) 1727bd2abef3SChuck Lever ); 1728bd2abef3SChuck Lever 1729bd2abef3SChuck Lever TRACE_EVENT(svcrdma_post_rw, 1730bd2abef3SChuck Lever TP_PROTO( 1731bd2abef3SChuck Lever const void *cqe, 1732bd2abef3SChuck Lever int sqecount, 1733bd2abef3SChuck Lever int status 1734bd2abef3SChuck Lever ), 1735bd2abef3SChuck Lever 1736bd2abef3SChuck Lever TP_ARGS(cqe, sqecount, status), 1737bd2abef3SChuck Lever 1738bd2abef3SChuck Lever TP_STRUCT__entry( 1739bd2abef3SChuck Lever __field(const void *, cqe) 1740bd2abef3SChuck Lever __field(int, sqecount) 1741bd2abef3SChuck Lever __field(int, status) 1742bd2abef3SChuck Lever ), 1743bd2abef3SChuck Lever 1744bd2abef3SChuck Lever TP_fast_assign( 1745bd2abef3SChuck Lever __entry->cqe = cqe; 1746bd2abef3SChuck Lever __entry->sqecount = sqecount; 1747bd2abef3SChuck Lever __entry->status = status; 1748bd2abef3SChuck Lever ), 1749bd2abef3SChuck Lever 1750bd2abef3SChuck Lever TP_printk("cqe=%p sqecount=%d status=%d", 1751bd2abef3SChuck Lever __entry->cqe, __entry->sqecount, __entry->status 1752bd2abef3SChuck Lever ) 1753bd2abef3SChuck Lever ); 1754bd2abef3SChuck Lever 1755bd2abef3SChuck Lever DEFINE_SENDCOMP_EVENT(read); 1756bd2abef3SChuck Lever DEFINE_SENDCOMP_EVENT(write); 1757bd2abef3SChuck Lever 1758bd2abef3SChuck Lever TRACE_EVENT(svcrdma_cm_event, 1759bd2abef3SChuck Lever TP_PROTO( 1760bd2abef3SChuck Lever const struct rdma_cm_event *event, 1761bd2abef3SChuck Lever const struct sockaddr *sap 1762bd2abef3SChuck Lever ), 1763bd2abef3SChuck Lever 1764bd2abef3SChuck Lever TP_ARGS(event, sap), 1765bd2abef3SChuck Lever 1766bd2abef3SChuck Lever TP_STRUCT__entry( 1767bd2abef3SChuck Lever __field(unsigned int, event) 1768bd2abef3SChuck Lever __field(int, status) 1769bd2abef3SChuck Lever __array(__u8, addr, INET6_ADDRSTRLEN + 10) 1770bd2abef3SChuck Lever ), 1771bd2abef3SChuck Lever 1772bd2abef3SChuck Lever TP_fast_assign( 1773bd2abef3SChuck Lever __entry->event = event->event; 1774bd2abef3SChuck Lever __entry->status = event->status; 1775bd2abef3SChuck Lever snprintf(__entry->addr, sizeof(__entry->addr) - 1, 1776bd2abef3SChuck Lever "%pISpc", sap); 1777bd2abef3SChuck Lever ), 1778bd2abef3SChuck Lever 1779bd2abef3SChuck Lever TP_printk("addr=%s event=%s (%u/%d)", 1780bd2abef3SChuck Lever __entry->addr, 1781bd2abef3SChuck Lever rdma_show_cm_event(__entry->event), 1782bd2abef3SChuck Lever __entry->event, __entry->status 1783bd2abef3SChuck Lever ) 1784bd2abef3SChuck Lever ); 1785bd2abef3SChuck Lever 1786bd2abef3SChuck Lever TRACE_EVENT(svcrdma_qp_error, 1787bd2abef3SChuck Lever TP_PROTO( 1788bd2abef3SChuck Lever const struct ib_event *event, 1789bd2abef3SChuck Lever const struct sockaddr *sap 1790bd2abef3SChuck Lever ), 1791bd2abef3SChuck Lever 1792bd2abef3SChuck Lever TP_ARGS(event, sap), 1793bd2abef3SChuck Lever 1794bd2abef3SChuck Lever TP_STRUCT__entry( 1795bd2abef3SChuck Lever __field(unsigned int, event) 1796bd2abef3SChuck Lever __string(device, event->device->name) 1797bd2abef3SChuck Lever __array(__u8, addr, INET6_ADDRSTRLEN + 10) 1798bd2abef3SChuck Lever ), 1799bd2abef3SChuck Lever 1800bd2abef3SChuck Lever TP_fast_assign( 1801bd2abef3SChuck Lever __entry->event = event->event; 1802bd2abef3SChuck Lever __assign_str(device, event->device->name); 1803bd2abef3SChuck Lever snprintf(__entry->addr, sizeof(__entry->addr) - 1, 1804bd2abef3SChuck Lever "%pISpc", sap); 1805bd2abef3SChuck Lever ), 1806bd2abef3SChuck Lever 1807bd2abef3SChuck Lever TP_printk("addr=%s dev=%s event=%s (%u)", 1808bd2abef3SChuck Lever __entry->addr, __get_str(device), 1809bd2abef3SChuck Lever rdma_show_ib_event(__entry->event), __entry->event 1810bd2abef3SChuck Lever ) 1811bd2abef3SChuck Lever ); 1812bd2abef3SChuck Lever 1813bd2abef3SChuck Lever DECLARE_EVENT_CLASS(svcrdma_sendqueue_event, 1814bd2abef3SChuck Lever TP_PROTO( 1815bd2abef3SChuck Lever const struct svcxprt_rdma *rdma 1816bd2abef3SChuck Lever ), 1817bd2abef3SChuck Lever 1818bd2abef3SChuck Lever TP_ARGS(rdma), 1819bd2abef3SChuck Lever 1820bd2abef3SChuck Lever TP_STRUCT__entry( 1821bd2abef3SChuck Lever __field(int, avail) 1822bd2abef3SChuck Lever __field(int, depth) 1823bd2abef3SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1824bd2abef3SChuck Lever ), 1825bd2abef3SChuck Lever 1826bd2abef3SChuck Lever TP_fast_assign( 1827bd2abef3SChuck Lever __entry->avail = atomic_read(&rdma->sc_sq_avail); 1828bd2abef3SChuck Lever __entry->depth = rdma->sc_sq_depth; 1829bd2abef3SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1830bd2abef3SChuck Lever ), 1831bd2abef3SChuck Lever 1832bd2abef3SChuck Lever TP_printk("addr=%s sc_sq_avail=%d/%d", 1833bd2abef3SChuck Lever __get_str(addr), __entry->avail, __entry->depth 1834bd2abef3SChuck Lever ) 1835bd2abef3SChuck Lever ); 1836bd2abef3SChuck Lever 1837bd2abef3SChuck Lever #define DEFINE_SQ_EVENT(name) \ 1838bd2abef3SChuck Lever DEFINE_EVENT(svcrdma_sendqueue_event, svcrdma_sq_##name,\ 1839bd2abef3SChuck Lever TP_PROTO( \ 1840bd2abef3SChuck Lever const struct svcxprt_rdma *rdma \ 1841bd2abef3SChuck Lever ), \ 1842bd2abef3SChuck Lever TP_ARGS(rdma)) 1843bd2abef3SChuck Lever 1844bd2abef3SChuck Lever DEFINE_SQ_EVENT(full); 1845bd2abef3SChuck Lever DEFINE_SQ_EVENT(retry); 1846bd2abef3SChuck Lever 1847e48f083eSChuck Lever #endif /* _TRACE_RPCRDMA_H */ 1848e48f083eSChuck Lever 1849e48f083eSChuck Lever #include <trace/define_trace.h> 1850