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 13e48f083eSChuck Lever #include <linux/tracepoint.h> 14e48f083eSChuck Lever #include <trace/events/rdma.h> 15e48f083eSChuck Lever 16ab03eff5SChuck Lever /** 17b4a7f91cSChuck Lever ** Event classes 18b4a7f91cSChuck Lever **/ 19b4a7f91cSChuck Lever 20b4a7f91cSChuck Lever DECLARE_EVENT_CLASS(xprtrdma_reply_event, 21b4a7f91cSChuck Lever TP_PROTO( 22b4a7f91cSChuck Lever const struct rpcrdma_rep *rep 23b4a7f91cSChuck Lever ), 24b4a7f91cSChuck Lever 25b4a7f91cSChuck Lever TP_ARGS(rep), 26b4a7f91cSChuck Lever 27b4a7f91cSChuck Lever TP_STRUCT__entry( 28b4a7f91cSChuck Lever __field(const void *, rep) 29b4a7f91cSChuck Lever __field(const void *, r_xprt) 30b4a7f91cSChuck Lever __field(u32, xid) 31b4a7f91cSChuck Lever __field(u32, version) 32b4a7f91cSChuck Lever __field(u32, proc) 33b4a7f91cSChuck Lever ), 34b4a7f91cSChuck Lever 35b4a7f91cSChuck Lever TP_fast_assign( 36b4a7f91cSChuck Lever __entry->rep = rep; 37b4a7f91cSChuck Lever __entry->r_xprt = rep->rr_rxprt; 38b4a7f91cSChuck Lever __entry->xid = be32_to_cpu(rep->rr_xid); 39b4a7f91cSChuck Lever __entry->version = be32_to_cpu(rep->rr_vers); 40b4a7f91cSChuck Lever __entry->proc = be32_to_cpu(rep->rr_proc); 41b4a7f91cSChuck Lever ), 42b4a7f91cSChuck Lever 43b4a7f91cSChuck Lever TP_printk("rxprt %p xid=0x%08x rep=%p: version %u proc %u", 44b4a7f91cSChuck Lever __entry->r_xprt, __entry->xid, __entry->rep, 45b4a7f91cSChuck Lever __entry->version, __entry->proc 46b4a7f91cSChuck Lever ) 47b4a7f91cSChuck Lever ); 48b4a7f91cSChuck Lever 49b4a7f91cSChuck Lever #define DEFINE_REPLY_EVENT(name) \ 50b4a7f91cSChuck Lever DEFINE_EVENT(xprtrdma_reply_event, name, \ 51b4a7f91cSChuck Lever TP_PROTO( \ 52b4a7f91cSChuck Lever const struct rpcrdma_rep *rep \ 53b4a7f91cSChuck Lever ), \ 54b4a7f91cSChuck Lever TP_ARGS(rep)) 55b4a7f91cSChuck Lever 561c443effSChuck Lever DECLARE_EVENT_CLASS(xprtrdma_rxprt, 571c443effSChuck Lever TP_PROTO( 581c443effSChuck Lever const struct rpcrdma_xprt *r_xprt 591c443effSChuck Lever ), 601c443effSChuck Lever 611c443effSChuck Lever TP_ARGS(r_xprt), 621c443effSChuck Lever 631c443effSChuck Lever TP_STRUCT__entry( 641c443effSChuck Lever __field(const void *, r_xprt) 651c443effSChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 661c443effSChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 671c443effSChuck Lever ), 681c443effSChuck Lever 691c443effSChuck Lever TP_fast_assign( 701c443effSChuck Lever __entry->r_xprt = r_xprt; 711c443effSChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 721c443effSChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 731c443effSChuck Lever ), 741c443effSChuck Lever 751c443effSChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p", 761c443effSChuck Lever __get_str(addr), __get_str(port), __entry->r_xprt 771c443effSChuck Lever ) 781c443effSChuck Lever ); 791c443effSChuck Lever 801c443effSChuck Lever #define DEFINE_RXPRT_EVENT(name) \ 811c443effSChuck Lever DEFINE_EVENT(xprtrdma_rxprt, name, \ 821c443effSChuck Lever TP_PROTO( \ 831c443effSChuck Lever const struct rpcrdma_xprt *r_xprt \ 841c443effSChuck Lever ), \ 851c443effSChuck Lever TP_ARGS(r_xprt)) 861c443effSChuck Lever 8758f10ad4SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_rdch_event, 8858f10ad4SChuck Lever TP_PROTO( 8958f10ad4SChuck Lever const struct rpc_task *task, 9058f10ad4SChuck Lever unsigned int pos, 9158f10ad4SChuck Lever struct rpcrdma_mr *mr, 9258f10ad4SChuck Lever int nsegs 9358f10ad4SChuck Lever ), 9458f10ad4SChuck Lever 9558f10ad4SChuck Lever TP_ARGS(task, pos, mr, nsegs), 9658f10ad4SChuck Lever 9758f10ad4SChuck Lever TP_STRUCT__entry( 9858f10ad4SChuck Lever __field(unsigned int, task_id) 9958f10ad4SChuck Lever __field(unsigned int, client_id) 10058f10ad4SChuck Lever __field(unsigned int, pos) 10158f10ad4SChuck Lever __field(int, nents) 10258f10ad4SChuck Lever __field(u32, handle) 10358f10ad4SChuck Lever __field(u32, length) 10458f10ad4SChuck Lever __field(u64, offset) 10558f10ad4SChuck Lever __field(int, nsegs) 10658f10ad4SChuck Lever ), 10758f10ad4SChuck Lever 10858f10ad4SChuck Lever TP_fast_assign( 10958f10ad4SChuck Lever __entry->task_id = task->tk_pid; 11058f10ad4SChuck Lever __entry->client_id = task->tk_client->cl_clid; 11158f10ad4SChuck Lever __entry->pos = pos; 11258f10ad4SChuck Lever __entry->nents = mr->mr_nents; 11358f10ad4SChuck Lever __entry->handle = mr->mr_handle; 11458f10ad4SChuck Lever __entry->length = mr->mr_length; 11558f10ad4SChuck Lever __entry->offset = mr->mr_offset; 11658f10ad4SChuck Lever __entry->nsegs = nsegs; 11758f10ad4SChuck Lever ), 11858f10ad4SChuck Lever 119aba11831SChuck Lever TP_printk("task:%u@%u pos=%u %u@0x%016llx:0x%08x (%s)", 120aba11831SChuck Lever __entry->task_id, __entry->client_id, 12158f10ad4SChuck Lever __entry->pos, __entry->length, 12258f10ad4SChuck Lever (unsigned long long)__entry->offset, __entry->handle, 12358f10ad4SChuck Lever __entry->nents < __entry->nsegs ? "more" : "last" 12458f10ad4SChuck Lever ) 12558f10ad4SChuck Lever ); 12658f10ad4SChuck Lever 12758f10ad4SChuck Lever #define DEFINE_RDCH_EVENT(name) \ 128aba11831SChuck Lever DEFINE_EVENT(xprtrdma_rdch_event, xprtrdma_chunk_##name,\ 12958f10ad4SChuck Lever TP_PROTO( \ 13058f10ad4SChuck Lever const struct rpc_task *task, \ 13158f10ad4SChuck Lever unsigned int pos, \ 13258f10ad4SChuck Lever struct rpcrdma_mr *mr, \ 13358f10ad4SChuck Lever int nsegs \ 13458f10ad4SChuck Lever ), \ 13558f10ad4SChuck Lever TP_ARGS(task, pos, mr, nsegs)) 13658f10ad4SChuck Lever 13758f10ad4SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_wrch_event, 13858f10ad4SChuck Lever TP_PROTO( 13958f10ad4SChuck Lever const struct rpc_task *task, 14058f10ad4SChuck Lever struct rpcrdma_mr *mr, 14158f10ad4SChuck Lever int nsegs 14258f10ad4SChuck Lever ), 14358f10ad4SChuck Lever 14458f10ad4SChuck Lever TP_ARGS(task, mr, nsegs), 14558f10ad4SChuck Lever 14658f10ad4SChuck Lever TP_STRUCT__entry( 14758f10ad4SChuck Lever __field(unsigned int, task_id) 14858f10ad4SChuck Lever __field(unsigned int, client_id) 14958f10ad4SChuck Lever __field(int, nents) 15058f10ad4SChuck Lever __field(u32, handle) 15158f10ad4SChuck Lever __field(u32, length) 15258f10ad4SChuck Lever __field(u64, offset) 15358f10ad4SChuck Lever __field(int, nsegs) 15458f10ad4SChuck Lever ), 15558f10ad4SChuck Lever 15658f10ad4SChuck Lever TP_fast_assign( 15758f10ad4SChuck Lever __entry->task_id = task->tk_pid; 15858f10ad4SChuck Lever __entry->client_id = task->tk_client->cl_clid; 15958f10ad4SChuck Lever __entry->nents = mr->mr_nents; 16058f10ad4SChuck Lever __entry->handle = mr->mr_handle; 16158f10ad4SChuck Lever __entry->length = mr->mr_length; 16258f10ad4SChuck Lever __entry->offset = mr->mr_offset; 16358f10ad4SChuck Lever __entry->nsegs = nsegs; 16458f10ad4SChuck Lever ), 16558f10ad4SChuck Lever 166aba11831SChuck Lever TP_printk("task:%u@%u %u@0x%016llx:0x%08x (%s)", 167aba11831SChuck Lever __entry->task_id, __entry->client_id, 16858f10ad4SChuck Lever __entry->length, (unsigned long long)__entry->offset, 16958f10ad4SChuck Lever __entry->handle, 17058f10ad4SChuck Lever __entry->nents < __entry->nsegs ? "more" : "last" 17158f10ad4SChuck Lever ) 17258f10ad4SChuck Lever ); 17358f10ad4SChuck Lever 17458f10ad4SChuck Lever #define DEFINE_WRCH_EVENT(name) \ 175aba11831SChuck Lever DEFINE_EVENT(xprtrdma_wrch_event, xprtrdma_chunk_##name,\ 17658f10ad4SChuck Lever TP_PROTO( \ 17758f10ad4SChuck Lever const struct rpc_task *task, \ 17858f10ad4SChuck Lever struct rpcrdma_mr *mr, \ 17958f10ad4SChuck Lever int nsegs \ 18058f10ad4SChuck Lever ), \ 18158f10ad4SChuck Lever TP_ARGS(task, mr, nsegs)) 18258f10ad4SChuck Lever 18358f10ad4SChuck Lever TRACE_DEFINE_ENUM(FRWR_IS_INVALID); 18458f10ad4SChuck Lever TRACE_DEFINE_ENUM(FRWR_IS_VALID); 18558f10ad4SChuck Lever TRACE_DEFINE_ENUM(FRWR_FLUSHED_FR); 18658f10ad4SChuck Lever TRACE_DEFINE_ENUM(FRWR_FLUSHED_LI); 18758f10ad4SChuck Lever 18858f10ad4SChuck Lever #define xprtrdma_show_frwr_state(x) \ 18958f10ad4SChuck Lever __print_symbolic(x, \ 19058f10ad4SChuck Lever { FRWR_IS_INVALID, "INVALID" }, \ 19158f10ad4SChuck Lever { FRWR_IS_VALID, "VALID" }, \ 19258f10ad4SChuck Lever { FRWR_FLUSHED_FR, "FLUSHED_FR" }, \ 19358f10ad4SChuck Lever { FRWR_FLUSHED_LI, "FLUSHED_LI" }) 19458f10ad4SChuck Lever 19558f10ad4SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_frwr_done, 19658f10ad4SChuck Lever TP_PROTO( 19758f10ad4SChuck Lever const struct ib_wc *wc, 19858f10ad4SChuck Lever const struct rpcrdma_frwr *frwr 19958f10ad4SChuck Lever ), 20058f10ad4SChuck Lever 20158f10ad4SChuck Lever TP_ARGS(wc, frwr), 20258f10ad4SChuck Lever 20358f10ad4SChuck Lever TP_STRUCT__entry( 20458f10ad4SChuck Lever __field(const void *, mr) 20558f10ad4SChuck Lever __field(unsigned int, state) 20658f10ad4SChuck Lever __field(unsigned int, status) 20758f10ad4SChuck Lever __field(unsigned int, vendor_err) 20858f10ad4SChuck Lever ), 20958f10ad4SChuck Lever 21058f10ad4SChuck Lever TP_fast_assign( 21158f10ad4SChuck Lever __entry->mr = container_of(frwr, struct rpcrdma_mr, frwr); 21258f10ad4SChuck Lever __entry->state = frwr->fr_state; 21358f10ad4SChuck Lever __entry->status = wc->status; 21458f10ad4SChuck Lever __entry->vendor_err = __entry->status ? wc->vendor_err : 0; 21558f10ad4SChuck Lever ), 21658f10ad4SChuck Lever 21758f10ad4SChuck Lever TP_printk( 21858f10ad4SChuck Lever "mr=%p state=%s: %s (%u/0x%x)", 21958f10ad4SChuck Lever __entry->mr, xprtrdma_show_frwr_state(__entry->state), 22058f10ad4SChuck Lever rdma_show_wc_status(__entry->status), 22158f10ad4SChuck Lever __entry->status, __entry->vendor_err 22258f10ad4SChuck Lever ) 22358f10ad4SChuck Lever ); 22458f10ad4SChuck Lever 22558f10ad4SChuck Lever #define DEFINE_FRWR_DONE_EVENT(name) \ 22658f10ad4SChuck Lever DEFINE_EVENT(xprtrdma_frwr_done, name, \ 22758f10ad4SChuck Lever TP_PROTO( \ 22858f10ad4SChuck Lever const struct ib_wc *wc, \ 22958f10ad4SChuck Lever const struct rpcrdma_frwr *frwr \ 23058f10ad4SChuck Lever ), \ 23158f10ad4SChuck Lever TP_ARGS(wc, frwr)) 23258f10ad4SChuck Lever 233aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_BIDIRECTIONAL); 234aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_TO_DEVICE); 235aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_FROM_DEVICE); 236aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_NONE); 237aba11831SChuck Lever 238aba11831SChuck Lever #define xprtrdma_show_direction(x) \ 239aba11831SChuck Lever __print_symbolic(x, \ 240aba11831SChuck Lever { DMA_BIDIRECTIONAL, "BIDIR" }, \ 241aba11831SChuck Lever { DMA_TO_DEVICE, "TO_DEVICE" }, \ 242aba11831SChuck Lever { DMA_FROM_DEVICE, "FROM_DEVICE" }, \ 243aba11831SChuck Lever { DMA_NONE, "NONE" }) 244aba11831SChuck Lever 2452937fedeSChuck Lever DECLARE_EVENT_CLASS(xprtrdma_mr, 2462937fedeSChuck Lever TP_PROTO( 2472937fedeSChuck Lever const struct rpcrdma_mr *mr 2482937fedeSChuck Lever ), 2492937fedeSChuck Lever 2502937fedeSChuck Lever TP_ARGS(mr), 2512937fedeSChuck Lever 2522937fedeSChuck Lever TP_STRUCT__entry( 2532937fedeSChuck Lever __field(const void *, mr) 2542937fedeSChuck Lever __field(u32, handle) 2552937fedeSChuck Lever __field(u32, length) 2562937fedeSChuck Lever __field(u64, offset) 257aba11831SChuck Lever __field(u32, dir) 2582937fedeSChuck Lever ), 2592937fedeSChuck Lever 2602937fedeSChuck Lever TP_fast_assign( 2612937fedeSChuck Lever __entry->mr = mr; 2622937fedeSChuck Lever __entry->handle = mr->mr_handle; 2632937fedeSChuck Lever __entry->length = mr->mr_length; 2642937fedeSChuck Lever __entry->offset = mr->mr_offset; 265aba11831SChuck Lever __entry->dir = mr->mr_dir; 2662937fedeSChuck Lever ), 2672937fedeSChuck Lever 268aba11831SChuck Lever TP_printk("mr=%p %u@0x%016llx:0x%08x (%s)", 2692937fedeSChuck Lever __entry->mr, __entry->length, 270aba11831SChuck Lever (unsigned long long)__entry->offset, __entry->handle, 271aba11831SChuck Lever xprtrdma_show_direction(__entry->dir) 2722937fedeSChuck Lever ) 2732937fedeSChuck Lever ); 2742937fedeSChuck Lever 2752937fedeSChuck Lever #define DEFINE_MR_EVENT(name) \ 276d379eaa8SChuck Lever DEFINE_EVENT(xprtrdma_mr, xprtrdma_mr_##name, \ 2772937fedeSChuck Lever TP_PROTO( \ 2782937fedeSChuck Lever const struct rpcrdma_mr *mr \ 2792937fedeSChuck Lever ), \ 2802937fedeSChuck Lever TP_ARGS(mr)) 2812937fedeSChuck Lever 282fc1eb807SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_cb_event, 283fc1eb807SChuck Lever TP_PROTO( 284fc1eb807SChuck Lever const struct rpc_rqst *rqst 285fc1eb807SChuck Lever ), 286fc1eb807SChuck Lever 287fc1eb807SChuck Lever TP_ARGS(rqst), 288fc1eb807SChuck Lever 289fc1eb807SChuck Lever TP_STRUCT__entry( 290fc1eb807SChuck Lever __field(const void *, rqst) 291fc1eb807SChuck Lever __field(const void *, rep) 292fc1eb807SChuck Lever __field(const void *, req) 293fc1eb807SChuck Lever __field(u32, xid) 294fc1eb807SChuck Lever ), 295fc1eb807SChuck Lever 296fc1eb807SChuck Lever TP_fast_assign( 297fc1eb807SChuck Lever __entry->rqst = rqst; 298fc1eb807SChuck Lever __entry->req = rpcr_to_rdmar(rqst); 299fc1eb807SChuck Lever __entry->rep = rpcr_to_rdmar(rqst)->rl_reply; 300fc1eb807SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 301fc1eb807SChuck Lever ), 302fc1eb807SChuck Lever 303fc1eb807SChuck Lever TP_printk("xid=0x%08x, rqst=%p req=%p rep=%p", 304fc1eb807SChuck Lever __entry->xid, __entry->rqst, __entry->req, __entry->rep 305fc1eb807SChuck Lever ) 306fc1eb807SChuck Lever ); 307fc1eb807SChuck Lever 308fc1eb807SChuck Lever #define DEFINE_CB_EVENT(name) \ 309fc1eb807SChuck Lever DEFINE_EVENT(xprtrdma_cb_event, name, \ 310fc1eb807SChuck Lever TP_PROTO( \ 311fc1eb807SChuck Lever const struct rpc_rqst *rqst \ 312fc1eb807SChuck Lever ), \ 313fc1eb807SChuck Lever TP_ARGS(rqst)) 314fc1eb807SChuck Lever 315b4a7f91cSChuck Lever /** 316b4744e00SChuck Lever ** Connection events 317b4744e00SChuck Lever **/ 318b4744e00SChuck Lever 319ae38288eSChuck Lever TRACE_EVENT(xprtrdma_cm_event, 320b4744e00SChuck Lever TP_PROTO( 321b4744e00SChuck Lever const struct rpcrdma_xprt *r_xprt, 322b4744e00SChuck Lever struct rdma_cm_event *event 323b4744e00SChuck Lever ), 324b4744e00SChuck Lever 325b4744e00SChuck Lever TP_ARGS(r_xprt, event), 326b4744e00SChuck Lever 327b4744e00SChuck Lever TP_STRUCT__entry( 328b4744e00SChuck Lever __field(const void *, r_xprt) 329b4744e00SChuck Lever __field(unsigned int, event) 330b4744e00SChuck Lever __field(int, status) 331b4744e00SChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 332b4744e00SChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 333b4744e00SChuck Lever ), 334b4744e00SChuck Lever 335b4744e00SChuck Lever TP_fast_assign( 336b4744e00SChuck Lever __entry->r_xprt = r_xprt; 337b4744e00SChuck Lever __entry->event = event->event; 338b4744e00SChuck Lever __entry->status = event->status; 339b4744e00SChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 340b4744e00SChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 341b4744e00SChuck Lever ), 342b4744e00SChuck Lever 343b4744e00SChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: %s (%u/%d)", 344b4744e00SChuck Lever __get_str(addr), __get_str(port), 345b4744e00SChuck Lever __entry->r_xprt, rdma_show_cm_event(__entry->event), 346b4744e00SChuck Lever __entry->event, __entry->status 347b4744e00SChuck Lever ) 348b4744e00SChuck Lever ); 349b4744e00SChuck Lever 350b4744e00SChuck Lever TRACE_EVENT(xprtrdma_disconnect, 351b4744e00SChuck Lever TP_PROTO( 352b4744e00SChuck Lever const struct rpcrdma_xprt *r_xprt, 353b4744e00SChuck Lever int status 354b4744e00SChuck Lever ), 355b4744e00SChuck Lever 356b4744e00SChuck Lever TP_ARGS(r_xprt, status), 357b4744e00SChuck Lever 358b4744e00SChuck Lever TP_STRUCT__entry( 359b4744e00SChuck Lever __field(const void *, r_xprt) 360b4744e00SChuck Lever __field(int, status) 361b4744e00SChuck Lever __field(int, connected) 362b4744e00SChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 363b4744e00SChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 364b4744e00SChuck Lever ), 365b4744e00SChuck Lever 366b4744e00SChuck Lever TP_fast_assign( 367b4744e00SChuck Lever __entry->r_xprt = r_xprt; 368b4744e00SChuck Lever __entry->status = status; 369b4744e00SChuck Lever __entry->connected = r_xprt->rx_ep.rep_connected; 370b4744e00SChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 371b4744e00SChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 372b4744e00SChuck Lever ), 373b4744e00SChuck Lever 374b4744e00SChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: status=%d %sconnected", 375b4744e00SChuck Lever __get_str(addr), __get_str(port), 376b4744e00SChuck Lever __entry->r_xprt, __entry->status, 377b4744e00SChuck Lever __entry->connected == 1 ? "still " : "dis" 378b4744e00SChuck Lever ) 379b4744e00SChuck Lever ); 380b4744e00SChuck Lever 381b4744e00SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_conn_start); 382b4744e00SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_conn_tout); 383b4744e00SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_create); 384b4744e00SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_destroy); 385b4744e00SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_remove); 386b4744e00SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_reinsert); 387b4744e00SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_reconnect); 388b4744e00SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_inject_dsc); 389b4744e00SChuck Lever 390f9521d53SChuck Lever TRACE_EVENT(xprtrdma_qp_event, 391643cf323SChuck Lever TP_PROTO( 392643cf323SChuck Lever const struct rpcrdma_xprt *r_xprt, 393643cf323SChuck Lever const struct ib_event *event 394643cf323SChuck Lever ), 395643cf323SChuck Lever 396643cf323SChuck Lever TP_ARGS(r_xprt, event), 397643cf323SChuck Lever 398643cf323SChuck Lever TP_STRUCT__entry( 399643cf323SChuck Lever __field(const void *, r_xprt) 400643cf323SChuck Lever __field(unsigned int, event) 401643cf323SChuck Lever __string(name, event->device->name) 402643cf323SChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 403643cf323SChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 404643cf323SChuck Lever ), 405643cf323SChuck Lever 406643cf323SChuck Lever TP_fast_assign( 407643cf323SChuck Lever __entry->r_xprt = r_xprt; 408643cf323SChuck Lever __entry->event = event->event; 409643cf323SChuck Lever __assign_str(name, event->device->name); 410643cf323SChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 411643cf323SChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 412643cf323SChuck Lever ), 413643cf323SChuck Lever 414643cf323SChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: dev %s: %s (%u)", 415643cf323SChuck Lever __get_str(addr), __get_str(port), __entry->r_xprt, 416643cf323SChuck Lever __get_str(name), rdma_show_ib_event(__entry->event), 417643cf323SChuck Lever __entry->event 418643cf323SChuck Lever ) 419643cf323SChuck Lever ); 420643cf323SChuck Lever 421b4744e00SChuck Lever /** 422ab03eff5SChuck Lever ** Call events 423ab03eff5SChuck Lever **/ 424ab03eff5SChuck Lever 4251c443effSChuck Lever TRACE_EVENT(xprtrdma_createmrs, 4261c443effSChuck Lever TP_PROTO( 4271c443effSChuck Lever const struct rpcrdma_xprt *r_xprt, 4281c443effSChuck Lever unsigned int count 4291c443effSChuck Lever ), 4301c443effSChuck Lever 4311c443effSChuck Lever TP_ARGS(r_xprt, count), 4321c443effSChuck Lever 4331c443effSChuck Lever TP_STRUCT__entry( 4341c443effSChuck Lever __field(const void *, r_xprt) 4351c443effSChuck Lever __field(unsigned int, count) 4361c443effSChuck Lever ), 4371c443effSChuck Lever 4381c443effSChuck Lever TP_fast_assign( 4391c443effSChuck Lever __entry->r_xprt = r_xprt; 4401c443effSChuck Lever __entry->count = count; 4411c443effSChuck Lever ), 4421c443effSChuck Lever 4431c443effSChuck Lever TP_printk("r_xprt=%p: created %u MRs", 4441c443effSChuck Lever __entry->r_xprt, __entry->count 4451c443effSChuck Lever ) 4461c443effSChuck Lever ); 4471c443effSChuck Lever 4481c443effSChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_nomrs); 4491c443effSChuck Lever 450aba11831SChuck Lever DEFINE_RDCH_EVENT(read); 451aba11831SChuck Lever DEFINE_WRCH_EVENT(write); 452aba11831SChuck Lever DEFINE_WRCH_EVENT(reply); 45358f10ad4SChuck Lever 454ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch); 455ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_readch); 456ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_areadch); 457ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_writech); 458ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_replych); 459ab03eff5SChuck Lever 460ab03eff5SChuck Lever #define xprtrdma_show_chunktype(x) \ 461ab03eff5SChuck Lever __print_symbolic(x, \ 462ab03eff5SChuck Lever { rpcrdma_noch, "inline" }, \ 463ab03eff5SChuck Lever { rpcrdma_readch, "read list" }, \ 464ab03eff5SChuck Lever { rpcrdma_areadch, "*read list" }, \ 465ab03eff5SChuck Lever { rpcrdma_writech, "write list" }, \ 466ab03eff5SChuck Lever { rpcrdma_replych, "reply chunk" }) 467ab03eff5SChuck Lever 468ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_marshal, 469ab03eff5SChuck Lever TP_PROTO( 470ab03eff5SChuck Lever const struct rpc_rqst *rqst, 471ab03eff5SChuck Lever unsigned int hdrlen, 472ab03eff5SChuck Lever unsigned int rtype, 473ab03eff5SChuck Lever unsigned int wtype 474ab03eff5SChuck Lever ), 475ab03eff5SChuck Lever 476ab03eff5SChuck Lever TP_ARGS(rqst, hdrlen, rtype, wtype), 477ab03eff5SChuck Lever 478ab03eff5SChuck Lever TP_STRUCT__entry( 479ab03eff5SChuck Lever __field(unsigned int, task_id) 480ab03eff5SChuck Lever __field(unsigned int, client_id) 481ab03eff5SChuck Lever __field(u32, xid) 482ab03eff5SChuck Lever __field(unsigned int, hdrlen) 483ab03eff5SChuck Lever __field(unsigned int, headlen) 484ab03eff5SChuck Lever __field(unsigned int, pagelen) 485ab03eff5SChuck Lever __field(unsigned int, taillen) 486ab03eff5SChuck Lever __field(unsigned int, rtype) 487ab03eff5SChuck Lever __field(unsigned int, wtype) 488ab03eff5SChuck Lever ), 489ab03eff5SChuck Lever 490ab03eff5SChuck Lever TP_fast_assign( 491ab03eff5SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 492ab03eff5SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 493ab03eff5SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 494ab03eff5SChuck Lever __entry->hdrlen = hdrlen; 495ab03eff5SChuck Lever __entry->headlen = rqst->rq_snd_buf.head[0].iov_len; 496ab03eff5SChuck Lever __entry->pagelen = rqst->rq_snd_buf.page_len; 497ab03eff5SChuck Lever __entry->taillen = rqst->rq_snd_buf.tail[0].iov_len; 498ab03eff5SChuck Lever __entry->rtype = rtype; 499ab03eff5SChuck Lever __entry->wtype = wtype; 500ab03eff5SChuck Lever ), 501ab03eff5SChuck Lever 502ab03eff5SChuck Lever TP_printk("task:%u@%u xid=0x%08x: hdr=%u xdr=%u/%u/%u %s/%s", 503ab03eff5SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 504ab03eff5SChuck Lever __entry->hdrlen, 505ab03eff5SChuck Lever __entry->headlen, __entry->pagelen, __entry->taillen, 506ab03eff5SChuck Lever xprtrdma_show_chunktype(__entry->rtype), 507ab03eff5SChuck Lever xprtrdma_show_chunktype(__entry->wtype) 508ab03eff5SChuck Lever ) 509ab03eff5SChuck Lever ); 510ab03eff5SChuck Lever 511ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_post_send, 512ab03eff5SChuck Lever TP_PROTO( 513ab03eff5SChuck Lever const struct rpcrdma_req *req, 514ab03eff5SChuck Lever int status 515ab03eff5SChuck Lever ), 516ab03eff5SChuck Lever 517ab03eff5SChuck Lever TP_ARGS(req, status), 518ab03eff5SChuck Lever 519ab03eff5SChuck Lever TP_STRUCT__entry( 520ab03eff5SChuck Lever __field(const void *, req) 521ab03eff5SChuck Lever __field(int, num_sge) 522470443e0SChuck Lever __field(int, signaled) 523ab03eff5SChuck Lever __field(int, status) 524ab03eff5SChuck Lever ), 525ab03eff5SChuck Lever 526ab03eff5SChuck Lever TP_fast_assign( 527ab03eff5SChuck Lever __entry->req = req; 528ab03eff5SChuck Lever __entry->num_sge = req->rl_sendctx->sc_wr.num_sge; 529ab03eff5SChuck Lever __entry->signaled = req->rl_sendctx->sc_wr.send_flags & 530ab03eff5SChuck Lever IB_SEND_SIGNALED; 531ab03eff5SChuck Lever __entry->status = status; 532ab03eff5SChuck Lever ), 533ab03eff5SChuck Lever 534ab03eff5SChuck Lever TP_printk("req=%p, %d SGEs%s, status=%d", 535ab03eff5SChuck Lever __entry->req, __entry->num_sge, 536ab03eff5SChuck Lever (__entry->signaled ? ", signaled" : ""), 537ab03eff5SChuck Lever __entry->status 538ab03eff5SChuck Lever ) 539ab03eff5SChuck Lever ); 540ab03eff5SChuck Lever 541b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_post_recv, 542b4a7f91cSChuck Lever TP_PROTO( 5430e0b854cSChuck Lever const struct ib_cqe *cqe 544b4a7f91cSChuck Lever ), 545b4a7f91cSChuck Lever 5460e0b854cSChuck Lever TP_ARGS(cqe), 547b4a7f91cSChuck Lever 548b4a7f91cSChuck Lever TP_STRUCT__entry( 5490e0b854cSChuck Lever __field(const void *, cqe) 550b4a7f91cSChuck Lever ), 551b4a7f91cSChuck Lever 552b4a7f91cSChuck Lever TP_fast_assign( 5530e0b854cSChuck Lever __entry->cqe = cqe; 554b4a7f91cSChuck Lever ), 555b4a7f91cSChuck Lever 5560e0b854cSChuck Lever TP_printk("cqe=%p", 5570e0b854cSChuck Lever __entry->cqe 558b4a7f91cSChuck Lever ) 559b4a7f91cSChuck Lever ); 560b4a7f91cSChuck Lever 5617c8d9e7cSChuck Lever TRACE_EVENT(xprtrdma_post_recvs, 5627c8d9e7cSChuck Lever TP_PROTO( 5637c8d9e7cSChuck Lever const struct rpcrdma_xprt *r_xprt, 5647c8d9e7cSChuck Lever unsigned int count, 5657c8d9e7cSChuck Lever int status 5667c8d9e7cSChuck Lever ), 5677c8d9e7cSChuck Lever 5687c8d9e7cSChuck Lever TP_ARGS(r_xprt, count, status), 5697c8d9e7cSChuck Lever 5707c8d9e7cSChuck Lever TP_STRUCT__entry( 5717c8d9e7cSChuck Lever __field(const void *, r_xprt) 5727c8d9e7cSChuck Lever __field(unsigned int, count) 5737c8d9e7cSChuck Lever __field(int, status) 5747c8d9e7cSChuck Lever __field(int, posted) 5757c8d9e7cSChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 5767c8d9e7cSChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 5777c8d9e7cSChuck Lever ), 5787c8d9e7cSChuck Lever 5797c8d9e7cSChuck Lever TP_fast_assign( 5807c8d9e7cSChuck Lever __entry->r_xprt = r_xprt; 5817c8d9e7cSChuck Lever __entry->count = count; 5827c8d9e7cSChuck Lever __entry->status = status; 5836ceea368SChuck Lever __entry->posted = r_xprt->rx_ep.rep_receive_count; 5847c8d9e7cSChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 5857c8d9e7cSChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 5867c8d9e7cSChuck Lever ), 5877c8d9e7cSChuck Lever 5887c8d9e7cSChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: %u new recvs, %d active (rc %d)", 5897c8d9e7cSChuck Lever __get_str(addr), __get_str(port), __entry->r_xprt, 5907c8d9e7cSChuck Lever __entry->count, __entry->posted, __entry->status 591ab03eff5SChuck Lever ) 592ab03eff5SChuck Lever ); 593ab03eff5SChuck Lever 594ab03eff5SChuck Lever /** 595ab03eff5SChuck Lever ** Completion events 596ab03eff5SChuck Lever **/ 597ab03eff5SChuck Lever 598ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_wc_send, 599ab03eff5SChuck Lever TP_PROTO( 600ab03eff5SChuck Lever const struct rpcrdma_sendctx *sc, 601ab03eff5SChuck Lever const struct ib_wc *wc 602ab03eff5SChuck Lever ), 603ab03eff5SChuck Lever 604ab03eff5SChuck Lever TP_ARGS(sc, wc), 605ab03eff5SChuck Lever 606ab03eff5SChuck Lever TP_STRUCT__entry( 607ab03eff5SChuck Lever __field(const void *, req) 608ab03eff5SChuck Lever __field(unsigned int, unmap_count) 609ab03eff5SChuck Lever __field(unsigned int, status) 610ab03eff5SChuck Lever __field(unsigned int, vendor_err) 611ab03eff5SChuck Lever ), 612ab03eff5SChuck Lever 613ab03eff5SChuck Lever TP_fast_assign( 614ab03eff5SChuck Lever __entry->req = sc->sc_req; 615ab03eff5SChuck Lever __entry->unmap_count = sc->sc_unmap_count; 616ab03eff5SChuck Lever __entry->status = wc->status; 617ab03eff5SChuck Lever __entry->vendor_err = __entry->status ? wc->vendor_err : 0; 618ab03eff5SChuck Lever ), 619ab03eff5SChuck Lever 620ab03eff5SChuck Lever TP_printk("req=%p, unmapped %u pages: %s (%u/0x%x)", 621ab03eff5SChuck Lever __entry->req, __entry->unmap_count, 622ab03eff5SChuck Lever rdma_show_wc_status(__entry->status), 623ab03eff5SChuck Lever __entry->status, __entry->vendor_err 624ab03eff5SChuck Lever ) 625ab03eff5SChuck Lever ); 626ab03eff5SChuck Lever 627b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_wc_receive, 628b4a7f91cSChuck Lever TP_PROTO( 629b4a7f91cSChuck Lever const struct ib_wc *wc 630b4a7f91cSChuck Lever ), 631b4a7f91cSChuck Lever 6320e0b854cSChuck Lever TP_ARGS(wc), 633b4a7f91cSChuck Lever 634b4a7f91cSChuck Lever TP_STRUCT__entry( 6350e0b854cSChuck Lever __field(const void *, cqe) 6360e0b854cSChuck Lever __field(u32, byte_len) 637b4a7f91cSChuck Lever __field(unsigned int, status) 6380e0b854cSChuck Lever __field(u32, vendor_err) 639b4a7f91cSChuck Lever ), 640b4a7f91cSChuck Lever 641b4a7f91cSChuck Lever TP_fast_assign( 6420e0b854cSChuck Lever __entry->cqe = wc->wr_cqe; 643b4a7f91cSChuck Lever __entry->status = wc->status; 6440e0b854cSChuck Lever if (wc->status) { 6450e0b854cSChuck Lever __entry->byte_len = 0; 6460e0b854cSChuck Lever __entry->vendor_err = wc->vendor_err; 6470e0b854cSChuck Lever } else { 6480e0b854cSChuck Lever __entry->byte_len = wc->byte_len; 6490e0b854cSChuck Lever __entry->vendor_err = 0; 6500e0b854cSChuck Lever } 651b4a7f91cSChuck Lever ), 652b4a7f91cSChuck Lever 6530e0b854cSChuck Lever TP_printk("cqe=%p %u bytes: %s (%u/0x%x)", 6540e0b854cSChuck Lever __entry->cqe, __entry->byte_len, 655b4a7f91cSChuck Lever rdma_show_wc_status(__entry->status), 656b4a7f91cSChuck Lever __entry->status, __entry->vendor_err 657b4a7f91cSChuck Lever ) 658b4a7f91cSChuck Lever ); 659b4a7f91cSChuck Lever 66058f10ad4SChuck Lever DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_fastreg); 6612937fedeSChuck Lever DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_li); 6622937fedeSChuck Lever DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_li_wake); 6632937fedeSChuck Lever 664d379eaa8SChuck Lever DEFINE_MR_EVENT(localinv); 665d379eaa8SChuck Lever DEFINE_MR_EVENT(map); 666d379eaa8SChuck Lever DEFINE_MR_EVENT(unmap); 667d379eaa8SChuck Lever DEFINE_MR_EVENT(remoteinv); 668d379eaa8SChuck Lever DEFINE_MR_EVENT(recycle); 66958f10ad4SChuck Lever 670b4a7f91cSChuck Lever /** 671b4a7f91cSChuck Lever ** Reply events 672b4a7f91cSChuck Lever **/ 673b4a7f91cSChuck Lever 674b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_reply, 675b4a7f91cSChuck Lever TP_PROTO( 676b4a7f91cSChuck Lever const struct rpc_task *task, 677b4a7f91cSChuck Lever const struct rpcrdma_rep *rep, 678b4a7f91cSChuck Lever const struct rpcrdma_req *req, 679b4a7f91cSChuck Lever unsigned int credits 680b4a7f91cSChuck Lever ), 681b4a7f91cSChuck Lever 682b4a7f91cSChuck Lever TP_ARGS(task, rep, req, credits), 683b4a7f91cSChuck Lever 684b4a7f91cSChuck Lever TP_STRUCT__entry( 685b4a7f91cSChuck Lever __field(unsigned int, task_id) 686b4a7f91cSChuck Lever __field(unsigned int, client_id) 687b4a7f91cSChuck Lever __field(const void *, rep) 688b4a7f91cSChuck Lever __field(const void *, req) 689b4a7f91cSChuck Lever __field(u32, xid) 690b4a7f91cSChuck Lever __field(unsigned int, credits) 691b4a7f91cSChuck Lever ), 692b4a7f91cSChuck Lever 693b4a7f91cSChuck Lever TP_fast_assign( 694b4a7f91cSChuck Lever __entry->task_id = task->tk_pid; 695b4a7f91cSChuck Lever __entry->client_id = task->tk_client->cl_clid; 696b4a7f91cSChuck Lever __entry->rep = rep; 697b4a7f91cSChuck Lever __entry->req = req; 698b4a7f91cSChuck Lever __entry->xid = be32_to_cpu(rep->rr_xid); 699b4a7f91cSChuck Lever __entry->credits = credits; 700b4a7f91cSChuck Lever ), 701b4a7f91cSChuck Lever 702b4a7f91cSChuck Lever TP_printk("task:%u@%u xid=0x%08x, %u credits, rep=%p -> req=%p", 703b4a7f91cSChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 704b4a7f91cSChuck Lever __entry->credits, __entry->rep, __entry->req 705b4a7f91cSChuck Lever ) 706b4a7f91cSChuck Lever ); 707b4a7f91cSChuck Lever 708b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_defer_cmp, 709b4a7f91cSChuck Lever TP_PROTO( 710b4a7f91cSChuck Lever const struct rpcrdma_rep *rep 711b4a7f91cSChuck Lever ), 712b4a7f91cSChuck Lever 713b4a7f91cSChuck Lever TP_ARGS(rep), 714b4a7f91cSChuck Lever 715b4a7f91cSChuck Lever TP_STRUCT__entry( 716b4a7f91cSChuck Lever __field(unsigned int, task_id) 717b4a7f91cSChuck Lever __field(unsigned int, client_id) 718b4a7f91cSChuck Lever __field(const void *, rep) 719b4a7f91cSChuck Lever __field(u32, xid) 720b4a7f91cSChuck Lever ), 721b4a7f91cSChuck Lever 722b4a7f91cSChuck Lever TP_fast_assign( 723b4a7f91cSChuck Lever __entry->task_id = rep->rr_rqst->rq_task->tk_pid; 724b4a7f91cSChuck Lever __entry->client_id = rep->rr_rqst->rq_task->tk_client->cl_clid; 725b4a7f91cSChuck Lever __entry->rep = rep; 726b4a7f91cSChuck Lever __entry->xid = be32_to_cpu(rep->rr_xid); 727b4a7f91cSChuck Lever ), 728b4a7f91cSChuck Lever 729b4a7f91cSChuck Lever TP_printk("task:%u@%u xid=0x%08x rep=%p", 730b4a7f91cSChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 731b4a7f91cSChuck Lever __entry->rep 732b4a7f91cSChuck Lever ) 733b4a7f91cSChuck Lever ); 734b4a7f91cSChuck Lever 735b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_vers); 736b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_rqst); 737b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_short); 738b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_hdr); 739b4a7f91cSChuck Lever 740e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_fixup, 741e11b7c96SChuck Lever TP_PROTO( 742e11b7c96SChuck Lever const struct rpc_rqst *rqst, 743e11b7c96SChuck Lever int len, 744e11b7c96SChuck Lever int hdrlen 745e11b7c96SChuck Lever ), 746e11b7c96SChuck Lever 747e11b7c96SChuck Lever TP_ARGS(rqst, len, hdrlen), 748e11b7c96SChuck Lever 749e11b7c96SChuck Lever TP_STRUCT__entry( 750e11b7c96SChuck Lever __field(unsigned int, task_id) 751e11b7c96SChuck Lever __field(unsigned int, client_id) 752e11b7c96SChuck Lever __field(const void *, base) 753e11b7c96SChuck Lever __field(int, len) 754e11b7c96SChuck Lever __field(int, hdrlen) 755e11b7c96SChuck Lever ), 756e11b7c96SChuck Lever 757e11b7c96SChuck Lever TP_fast_assign( 758e11b7c96SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 759e11b7c96SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 760e11b7c96SChuck Lever __entry->base = rqst->rq_rcv_buf.head[0].iov_base; 761e11b7c96SChuck Lever __entry->len = len; 762e11b7c96SChuck Lever __entry->hdrlen = hdrlen; 763e11b7c96SChuck Lever ), 764e11b7c96SChuck Lever 765e11b7c96SChuck Lever TP_printk("task:%u@%u base=%p len=%d hdrlen=%d", 766e11b7c96SChuck Lever __entry->task_id, __entry->client_id, 767e11b7c96SChuck Lever __entry->base, __entry->len, __entry->hdrlen 768e11b7c96SChuck Lever ) 769e11b7c96SChuck Lever ); 770e11b7c96SChuck Lever 771e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_fixup_pg, 772e11b7c96SChuck Lever TP_PROTO( 773e11b7c96SChuck Lever const struct rpc_rqst *rqst, 774e11b7c96SChuck Lever int pageno, 775e11b7c96SChuck Lever const void *pos, 776e11b7c96SChuck Lever int len, 777e11b7c96SChuck Lever int curlen 778e11b7c96SChuck Lever ), 779e11b7c96SChuck Lever 780e11b7c96SChuck Lever TP_ARGS(rqst, pageno, pos, len, curlen), 781e11b7c96SChuck Lever 782e11b7c96SChuck Lever TP_STRUCT__entry( 783e11b7c96SChuck Lever __field(unsigned int, task_id) 784e11b7c96SChuck Lever __field(unsigned int, client_id) 785e11b7c96SChuck Lever __field(const void *, pos) 786e11b7c96SChuck Lever __field(int, pageno) 787e11b7c96SChuck Lever __field(int, len) 788e11b7c96SChuck Lever __field(int, curlen) 789e11b7c96SChuck Lever ), 790e11b7c96SChuck Lever 791e11b7c96SChuck Lever TP_fast_assign( 792e11b7c96SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 793e11b7c96SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 794e11b7c96SChuck Lever __entry->pos = pos; 795e11b7c96SChuck Lever __entry->pageno = pageno; 796e11b7c96SChuck Lever __entry->len = len; 797e11b7c96SChuck Lever __entry->curlen = curlen; 798e11b7c96SChuck Lever ), 799e11b7c96SChuck Lever 800e11b7c96SChuck Lever TP_printk("task:%u@%u pageno=%d pos=%p len=%d curlen=%d", 801e11b7c96SChuck Lever __entry->task_id, __entry->client_id, 802e11b7c96SChuck Lever __entry->pageno, __entry->pos, __entry->len, __entry->curlen 803e11b7c96SChuck Lever ) 804e11b7c96SChuck Lever ); 805e11b7c96SChuck Lever 806e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_decode_seg, 807e11b7c96SChuck Lever TP_PROTO( 808e11b7c96SChuck Lever u32 handle, 809e11b7c96SChuck Lever u32 length, 810e11b7c96SChuck Lever u64 offset 811e11b7c96SChuck Lever ), 812e11b7c96SChuck Lever 813e11b7c96SChuck Lever TP_ARGS(handle, length, offset), 814e11b7c96SChuck Lever 815e11b7c96SChuck Lever TP_STRUCT__entry( 816e11b7c96SChuck Lever __field(u32, handle) 817e11b7c96SChuck Lever __field(u32, length) 818e11b7c96SChuck Lever __field(u64, offset) 819e11b7c96SChuck Lever ), 820e11b7c96SChuck Lever 821e11b7c96SChuck Lever TP_fast_assign( 822e11b7c96SChuck Lever __entry->handle = handle; 823e11b7c96SChuck Lever __entry->length = length; 824e11b7c96SChuck Lever __entry->offset = offset; 825e11b7c96SChuck Lever ), 826e11b7c96SChuck Lever 827e11b7c96SChuck Lever TP_printk("%u@0x%016llx:0x%08x", 828e11b7c96SChuck Lever __entry->length, (unsigned long long)__entry->offset, 829e11b7c96SChuck Lever __entry->handle 830e11b7c96SChuck Lever ) 831e11b7c96SChuck Lever ); 832e11b7c96SChuck Lever 833fc1eb807SChuck Lever /** 834ae724676SChuck Lever ** Allocation/release of rpcrdma_reqs and rpcrdma_reps 835ae724676SChuck Lever **/ 836ae724676SChuck Lever 837ae724676SChuck Lever TRACE_EVENT(xprtrdma_allocate, 838ae724676SChuck Lever TP_PROTO( 839ae724676SChuck Lever const struct rpc_task *task, 840ae724676SChuck Lever const struct rpcrdma_req *req 841ae724676SChuck Lever ), 842ae724676SChuck Lever 843ae724676SChuck Lever TP_ARGS(task, req), 844ae724676SChuck Lever 845ae724676SChuck Lever TP_STRUCT__entry( 846ae724676SChuck Lever __field(unsigned int, task_id) 847ae724676SChuck Lever __field(unsigned int, client_id) 848ae724676SChuck Lever __field(const void *, req) 849ae724676SChuck Lever __field(size_t, callsize) 850ae724676SChuck Lever __field(size_t, rcvsize) 851ae724676SChuck Lever ), 852ae724676SChuck Lever 853ae724676SChuck Lever TP_fast_assign( 854ae724676SChuck Lever __entry->task_id = task->tk_pid; 855ae724676SChuck Lever __entry->client_id = task->tk_client->cl_clid; 856ae724676SChuck Lever __entry->req = req; 857ae724676SChuck Lever __entry->callsize = task->tk_rqstp->rq_callsize; 858ae724676SChuck Lever __entry->rcvsize = task->tk_rqstp->rq_rcvsize; 859ae724676SChuck Lever ), 860ae724676SChuck Lever 8617c8d9e7cSChuck Lever TP_printk("task:%u@%u req=%p (%zu, %zu)", 862ae724676SChuck Lever __entry->task_id, __entry->client_id, 8637c8d9e7cSChuck Lever __entry->req, __entry->callsize, __entry->rcvsize 864ae724676SChuck Lever ) 865ae724676SChuck Lever ); 866ae724676SChuck Lever 867ae724676SChuck Lever TRACE_EVENT(xprtrdma_rpc_done, 868ae724676SChuck Lever TP_PROTO( 869ae724676SChuck Lever const struct rpc_task *task, 870ae724676SChuck Lever const struct rpcrdma_req *req 871ae724676SChuck Lever ), 872ae724676SChuck Lever 873ae724676SChuck Lever TP_ARGS(task, req), 874ae724676SChuck Lever 875ae724676SChuck Lever TP_STRUCT__entry( 876ae724676SChuck Lever __field(unsigned int, task_id) 877ae724676SChuck Lever __field(unsigned int, client_id) 878ae724676SChuck Lever __field(const void *, req) 879ae724676SChuck Lever __field(const void *, rep) 880ae724676SChuck Lever ), 881ae724676SChuck Lever 882ae724676SChuck Lever TP_fast_assign( 883ae724676SChuck Lever __entry->task_id = task->tk_pid; 884ae724676SChuck Lever __entry->client_id = task->tk_client->cl_clid; 885ae724676SChuck Lever __entry->req = req; 886ae724676SChuck Lever __entry->rep = req->rl_reply; 887ae724676SChuck Lever ), 888ae724676SChuck Lever 889ae724676SChuck Lever TP_printk("task:%u@%u req=%p rep=%p", 890ae724676SChuck Lever __entry->task_id, __entry->client_id, 891ae724676SChuck Lever __entry->req, __entry->rep 892ae724676SChuck Lever ) 893ae724676SChuck Lever ); 894ae724676SChuck Lever 895ae724676SChuck Lever /** 896fc1eb807SChuck Lever ** Callback events 897fc1eb807SChuck Lever **/ 898fc1eb807SChuck Lever 899fc1eb807SChuck Lever TRACE_EVENT(xprtrdma_cb_setup, 900fc1eb807SChuck Lever TP_PROTO( 901fc1eb807SChuck Lever const struct rpcrdma_xprt *r_xprt, 902fc1eb807SChuck Lever unsigned int reqs 903fc1eb807SChuck Lever ), 904fc1eb807SChuck Lever 905fc1eb807SChuck Lever TP_ARGS(r_xprt, reqs), 906fc1eb807SChuck Lever 907fc1eb807SChuck Lever TP_STRUCT__entry( 908fc1eb807SChuck Lever __field(const void *, r_xprt) 909fc1eb807SChuck Lever __field(unsigned int, reqs) 910fc1eb807SChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 911fc1eb807SChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 912fc1eb807SChuck Lever ), 913fc1eb807SChuck Lever 914fc1eb807SChuck Lever TP_fast_assign( 915fc1eb807SChuck Lever __entry->r_xprt = r_xprt; 916fc1eb807SChuck Lever __entry->reqs = reqs; 917fc1eb807SChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 918fc1eb807SChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 919fc1eb807SChuck Lever ), 920fc1eb807SChuck Lever 921fc1eb807SChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: %u reqs", 922fc1eb807SChuck Lever __get_str(addr), __get_str(port), 923fc1eb807SChuck Lever __entry->r_xprt, __entry->reqs 924fc1eb807SChuck Lever ) 925fc1eb807SChuck Lever ); 926fc1eb807SChuck Lever 927fc1eb807SChuck Lever DEFINE_CB_EVENT(xprtrdma_cb_call); 928fc1eb807SChuck Lever DEFINE_CB_EVENT(xprtrdma_cb_reply); 929fc1eb807SChuck Lever 93098895edbSChuck Lever /** 93198895edbSChuck Lever ** Server-side RPC/RDMA events 93298895edbSChuck Lever **/ 93398895edbSChuck Lever 93498895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_xprt_event, 93598895edbSChuck Lever TP_PROTO( 93698895edbSChuck Lever const struct svc_xprt *xprt 93798895edbSChuck Lever ), 93898895edbSChuck Lever 93998895edbSChuck Lever TP_ARGS(xprt), 94098895edbSChuck Lever 94198895edbSChuck Lever TP_STRUCT__entry( 94298895edbSChuck Lever __field(const void *, xprt) 94398895edbSChuck Lever __string(addr, xprt->xpt_remotebuf) 94498895edbSChuck Lever ), 94598895edbSChuck Lever 94698895edbSChuck Lever TP_fast_assign( 94798895edbSChuck Lever __entry->xprt = xprt; 94898895edbSChuck Lever __assign_str(addr, xprt->xpt_remotebuf); 94998895edbSChuck Lever ), 95098895edbSChuck Lever 95198895edbSChuck Lever TP_printk("xprt=%p addr=%s", 95298895edbSChuck Lever __entry->xprt, __get_str(addr) 95398895edbSChuck Lever ) 95498895edbSChuck Lever ); 95598895edbSChuck Lever 95698895edbSChuck Lever #define DEFINE_XPRT_EVENT(name) \ 95798895edbSChuck Lever DEFINE_EVENT(svcrdma_xprt_event, svcrdma_xprt_##name, \ 95898895edbSChuck Lever TP_PROTO( \ 95998895edbSChuck Lever const struct svc_xprt *xprt \ 96098895edbSChuck Lever ), \ 96198895edbSChuck Lever TP_ARGS(xprt)) 96298895edbSChuck Lever 96398895edbSChuck Lever DEFINE_XPRT_EVENT(accept); 96498895edbSChuck Lever DEFINE_XPRT_EVENT(fail); 96598895edbSChuck Lever DEFINE_XPRT_EVENT(free); 96698895edbSChuck Lever 96798895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_MSG); 96898895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_NOMSG); 96998895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_MSGP); 97098895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_DONE); 97198895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_ERROR); 97298895edbSChuck Lever 97398895edbSChuck Lever #define show_rpcrdma_proc(x) \ 97498895edbSChuck Lever __print_symbolic(x, \ 97598895edbSChuck Lever { RDMA_MSG, "RDMA_MSG" }, \ 97698895edbSChuck Lever { RDMA_NOMSG, "RDMA_NOMSG" }, \ 97798895edbSChuck Lever { RDMA_MSGP, "RDMA_MSGP" }, \ 97898895edbSChuck Lever { RDMA_DONE, "RDMA_DONE" }, \ 97998895edbSChuck Lever { RDMA_ERROR, "RDMA_ERROR" }) 98098895edbSChuck Lever 98198895edbSChuck Lever TRACE_EVENT(svcrdma_decode_rqst, 98298895edbSChuck Lever TP_PROTO( 98398895edbSChuck Lever __be32 *p, 98498895edbSChuck Lever unsigned int hdrlen 98598895edbSChuck Lever ), 98698895edbSChuck Lever 98798895edbSChuck Lever TP_ARGS(p, hdrlen), 98898895edbSChuck Lever 98998895edbSChuck Lever TP_STRUCT__entry( 99098895edbSChuck Lever __field(u32, xid) 99198895edbSChuck Lever __field(u32, vers) 99298895edbSChuck Lever __field(u32, proc) 99398895edbSChuck Lever __field(u32, credits) 99498895edbSChuck Lever __field(unsigned int, hdrlen) 99598895edbSChuck Lever ), 99698895edbSChuck Lever 99798895edbSChuck Lever TP_fast_assign( 99898895edbSChuck Lever __entry->xid = be32_to_cpup(p++); 99998895edbSChuck Lever __entry->vers = be32_to_cpup(p++); 100098895edbSChuck Lever __entry->credits = be32_to_cpup(p++); 100198895edbSChuck Lever __entry->proc = be32_to_cpup(p); 100298895edbSChuck Lever __entry->hdrlen = hdrlen; 100398895edbSChuck Lever ), 100498895edbSChuck Lever 100598895edbSChuck Lever TP_printk("xid=0x%08x vers=%u credits=%u proc=%s hdrlen=%u", 100698895edbSChuck Lever __entry->xid, __entry->vers, __entry->credits, 100798895edbSChuck Lever show_rpcrdma_proc(__entry->proc), __entry->hdrlen) 100898895edbSChuck Lever ); 100998895edbSChuck Lever 101098895edbSChuck Lever TRACE_EVENT(svcrdma_decode_short, 101198895edbSChuck Lever TP_PROTO( 101298895edbSChuck Lever unsigned int hdrlen 101398895edbSChuck Lever ), 101498895edbSChuck Lever 101598895edbSChuck Lever TP_ARGS(hdrlen), 101698895edbSChuck Lever 101798895edbSChuck Lever TP_STRUCT__entry( 101898895edbSChuck Lever __field(unsigned int, hdrlen) 101998895edbSChuck Lever ), 102098895edbSChuck Lever 102198895edbSChuck Lever TP_fast_assign( 102298895edbSChuck Lever __entry->hdrlen = hdrlen; 102398895edbSChuck Lever ), 102498895edbSChuck Lever 102598895edbSChuck Lever TP_printk("hdrlen=%u", __entry->hdrlen) 102698895edbSChuck Lever ); 102798895edbSChuck Lever 102898895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_badreq_event, 102998895edbSChuck Lever TP_PROTO( 103098895edbSChuck Lever __be32 *p 103198895edbSChuck Lever ), 103298895edbSChuck Lever 103398895edbSChuck Lever TP_ARGS(p), 103498895edbSChuck Lever 103598895edbSChuck Lever TP_STRUCT__entry( 103698895edbSChuck Lever __field(u32, xid) 103798895edbSChuck Lever __field(u32, vers) 103898895edbSChuck Lever __field(u32, proc) 103998895edbSChuck Lever __field(u32, credits) 104098895edbSChuck Lever ), 104198895edbSChuck Lever 104298895edbSChuck Lever TP_fast_assign( 104398895edbSChuck Lever __entry->xid = be32_to_cpup(p++); 104498895edbSChuck Lever __entry->vers = be32_to_cpup(p++); 104598895edbSChuck Lever __entry->credits = be32_to_cpup(p++); 104698895edbSChuck Lever __entry->proc = be32_to_cpup(p); 104798895edbSChuck Lever ), 104898895edbSChuck Lever 104998895edbSChuck Lever TP_printk("xid=0x%08x vers=%u credits=%u proc=%u", 105098895edbSChuck Lever __entry->xid, __entry->vers, __entry->credits, __entry->proc) 105198895edbSChuck Lever ); 105298895edbSChuck Lever 105398895edbSChuck Lever #define DEFINE_BADREQ_EVENT(name) \ 105498895edbSChuck Lever DEFINE_EVENT(svcrdma_badreq_event, svcrdma_decode_##name,\ 105598895edbSChuck Lever TP_PROTO( \ 105698895edbSChuck Lever __be32 *p \ 105798895edbSChuck Lever ), \ 105898895edbSChuck Lever TP_ARGS(p)) 105998895edbSChuck Lever 106098895edbSChuck Lever DEFINE_BADREQ_EVENT(badvers); 106198895edbSChuck Lever DEFINE_BADREQ_EVENT(drop); 106298895edbSChuck Lever DEFINE_BADREQ_EVENT(badproc); 106398895edbSChuck Lever DEFINE_BADREQ_EVENT(parse); 106498895edbSChuck Lever 106598895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_segment_event, 106698895edbSChuck Lever TP_PROTO( 106798895edbSChuck Lever u32 handle, 106898895edbSChuck Lever u32 length, 106998895edbSChuck Lever u64 offset 107098895edbSChuck Lever ), 107198895edbSChuck Lever 107298895edbSChuck Lever TP_ARGS(handle, length, offset), 107398895edbSChuck Lever 107498895edbSChuck Lever TP_STRUCT__entry( 107598895edbSChuck Lever __field(u32, handle) 107698895edbSChuck Lever __field(u32, length) 107798895edbSChuck Lever __field(u64, offset) 107898895edbSChuck Lever ), 107998895edbSChuck Lever 108098895edbSChuck Lever TP_fast_assign( 108198895edbSChuck Lever __entry->handle = handle; 108298895edbSChuck Lever __entry->length = length; 108398895edbSChuck Lever __entry->offset = offset; 108498895edbSChuck Lever ), 108598895edbSChuck Lever 108698895edbSChuck Lever TP_printk("%u@0x%016llx:0x%08x", 108798895edbSChuck Lever __entry->length, (unsigned long long)__entry->offset, 108898895edbSChuck Lever __entry->handle 108998895edbSChuck Lever ) 109098895edbSChuck Lever ); 109198895edbSChuck Lever 109298895edbSChuck Lever #define DEFINE_SEGMENT_EVENT(name) \ 109398895edbSChuck Lever DEFINE_EVENT(svcrdma_segment_event, svcrdma_encode_##name,\ 109498895edbSChuck Lever TP_PROTO( \ 109598895edbSChuck Lever u32 handle, \ 109698895edbSChuck Lever u32 length, \ 109798895edbSChuck Lever u64 offset \ 109898895edbSChuck Lever ), \ 109998895edbSChuck Lever TP_ARGS(handle, length, offset)) 110098895edbSChuck Lever 110198895edbSChuck Lever DEFINE_SEGMENT_EVENT(rseg); 110298895edbSChuck Lever DEFINE_SEGMENT_EVENT(wseg); 110398895edbSChuck Lever 110498895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_chunk_event, 110598895edbSChuck Lever TP_PROTO( 110698895edbSChuck Lever u32 length 110798895edbSChuck Lever ), 110898895edbSChuck Lever 110998895edbSChuck Lever TP_ARGS(length), 111098895edbSChuck Lever 111198895edbSChuck Lever TP_STRUCT__entry( 111298895edbSChuck Lever __field(u32, length) 111398895edbSChuck Lever ), 111498895edbSChuck Lever 111598895edbSChuck Lever TP_fast_assign( 111698895edbSChuck Lever __entry->length = length; 111798895edbSChuck Lever ), 111898895edbSChuck Lever 111998895edbSChuck Lever TP_printk("length=%u", 112098895edbSChuck Lever __entry->length 112198895edbSChuck Lever ) 112298895edbSChuck Lever ); 112398895edbSChuck Lever 112498895edbSChuck Lever #define DEFINE_CHUNK_EVENT(name) \ 112598895edbSChuck Lever DEFINE_EVENT(svcrdma_chunk_event, svcrdma_encode_##name,\ 112698895edbSChuck Lever TP_PROTO( \ 112798895edbSChuck Lever u32 length \ 112898895edbSChuck Lever ), \ 112998895edbSChuck Lever TP_ARGS(length)) 113098895edbSChuck Lever 113198895edbSChuck Lever DEFINE_CHUNK_EVENT(pzr); 113298895edbSChuck Lever DEFINE_CHUNK_EVENT(write); 113398895edbSChuck Lever DEFINE_CHUNK_EVENT(reply); 113498895edbSChuck Lever 113598895edbSChuck Lever TRACE_EVENT(svcrdma_encode_read, 113698895edbSChuck Lever TP_PROTO( 113798895edbSChuck Lever u32 length, 113898895edbSChuck Lever u32 position 113998895edbSChuck Lever ), 114098895edbSChuck Lever 114198895edbSChuck Lever TP_ARGS(length, position), 114298895edbSChuck Lever 114398895edbSChuck Lever TP_STRUCT__entry( 114498895edbSChuck Lever __field(u32, length) 114598895edbSChuck Lever __field(u32, position) 114698895edbSChuck Lever ), 114798895edbSChuck Lever 114898895edbSChuck Lever TP_fast_assign( 114998895edbSChuck Lever __entry->length = length; 115098895edbSChuck Lever __entry->position = position; 115198895edbSChuck Lever ), 115298895edbSChuck Lever 115398895edbSChuck Lever TP_printk("length=%u position=%u", 115498895edbSChuck Lever __entry->length, __entry->position 115598895edbSChuck Lever ) 115698895edbSChuck Lever ); 115798895edbSChuck Lever 115898895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_error_event, 115998895edbSChuck Lever TP_PROTO( 116098895edbSChuck Lever __be32 xid 116198895edbSChuck Lever ), 116298895edbSChuck Lever 116398895edbSChuck Lever TP_ARGS(xid), 116498895edbSChuck Lever 116598895edbSChuck Lever TP_STRUCT__entry( 116698895edbSChuck Lever __field(u32, xid) 116798895edbSChuck Lever ), 116898895edbSChuck Lever 116998895edbSChuck Lever TP_fast_assign( 117098895edbSChuck Lever __entry->xid = be32_to_cpu(xid); 117198895edbSChuck Lever ), 117298895edbSChuck Lever 117398895edbSChuck Lever TP_printk("xid=0x%08x", 117498895edbSChuck Lever __entry->xid 117598895edbSChuck Lever ) 117698895edbSChuck Lever ); 117798895edbSChuck Lever 117898895edbSChuck Lever #define DEFINE_ERROR_EVENT(name) \ 117998895edbSChuck Lever DEFINE_EVENT(svcrdma_error_event, svcrdma_err_##name, \ 118098895edbSChuck Lever TP_PROTO( \ 118198895edbSChuck Lever __be32 xid \ 118298895edbSChuck Lever ), \ 118398895edbSChuck Lever TP_ARGS(xid)) 118498895edbSChuck Lever 118598895edbSChuck Lever DEFINE_ERROR_EVENT(vers); 118698895edbSChuck Lever DEFINE_ERROR_EVENT(chunk); 118798895edbSChuck Lever 1188bd2abef3SChuck Lever /** 1189bd2abef3SChuck Lever ** Server-side RDMA API events 1190bd2abef3SChuck Lever **/ 1191bd2abef3SChuck Lever 1192bd2abef3SChuck Lever TRACE_EVENT(svcrdma_dma_map_page, 1193bd2abef3SChuck Lever TP_PROTO( 1194bd2abef3SChuck Lever const struct svcxprt_rdma *rdma, 1195bd2abef3SChuck Lever const void *page 1196bd2abef3SChuck Lever ), 1197bd2abef3SChuck Lever 1198bd2abef3SChuck Lever TP_ARGS(rdma, page), 1199bd2abef3SChuck Lever 1200bd2abef3SChuck Lever TP_STRUCT__entry( 1201bd2abef3SChuck Lever __field(const void *, page); 1202bd2abef3SChuck Lever __string(device, rdma->sc_cm_id->device->name) 1203bd2abef3SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1204bd2abef3SChuck Lever ), 1205bd2abef3SChuck Lever 1206bd2abef3SChuck Lever TP_fast_assign( 1207bd2abef3SChuck Lever __entry->page = page; 1208bd2abef3SChuck Lever __assign_str(device, rdma->sc_cm_id->device->name); 1209bd2abef3SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1210bd2abef3SChuck Lever ), 1211bd2abef3SChuck Lever 1212bd2abef3SChuck Lever TP_printk("addr=%s device=%s page=%p", 1213bd2abef3SChuck Lever __get_str(addr), __get_str(device), __entry->page 1214bd2abef3SChuck Lever ) 1215bd2abef3SChuck Lever ); 1216bd2abef3SChuck Lever 1217bd2abef3SChuck Lever TRACE_EVENT(svcrdma_dma_map_rwctx, 1218bd2abef3SChuck Lever TP_PROTO( 1219bd2abef3SChuck Lever const struct svcxprt_rdma *rdma, 1220bd2abef3SChuck Lever int status 1221bd2abef3SChuck Lever ), 1222bd2abef3SChuck Lever 1223bd2abef3SChuck Lever TP_ARGS(rdma, status), 1224bd2abef3SChuck Lever 1225bd2abef3SChuck Lever TP_STRUCT__entry( 1226bd2abef3SChuck Lever __field(int, status) 1227bd2abef3SChuck Lever __string(device, rdma->sc_cm_id->device->name) 1228bd2abef3SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1229bd2abef3SChuck Lever ), 1230bd2abef3SChuck Lever 1231bd2abef3SChuck Lever TP_fast_assign( 1232bd2abef3SChuck Lever __entry->status = status; 1233bd2abef3SChuck Lever __assign_str(device, rdma->sc_cm_id->device->name); 1234bd2abef3SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1235bd2abef3SChuck Lever ), 1236bd2abef3SChuck Lever 1237bd2abef3SChuck Lever TP_printk("addr=%s device=%s status=%d", 1238bd2abef3SChuck Lever __get_str(addr), __get_str(device), __entry->status 1239bd2abef3SChuck Lever ) 1240bd2abef3SChuck Lever ); 1241bd2abef3SChuck Lever 1242bd2abef3SChuck Lever TRACE_EVENT(svcrdma_send_failed, 1243bd2abef3SChuck Lever TP_PROTO( 1244bd2abef3SChuck Lever const struct svc_rqst *rqst, 1245bd2abef3SChuck Lever int status 1246bd2abef3SChuck Lever ), 1247bd2abef3SChuck Lever 1248bd2abef3SChuck Lever TP_ARGS(rqst, status), 1249bd2abef3SChuck Lever 1250bd2abef3SChuck Lever TP_STRUCT__entry( 1251bd2abef3SChuck Lever __field(int, status) 1252bd2abef3SChuck Lever __field(u32, xid) 1253bd2abef3SChuck Lever __field(const void *, xprt) 1254bd2abef3SChuck Lever __string(addr, rqst->rq_xprt->xpt_remotebuf) 1255bd2abef3SChuck Lever ), 1256bd2abef3SChuck Lever 1257bd2abef3SChuck Lever TP_fast_assign( 1258bd2abef3SChuck Lever __entry->status = status; 1259bd2abef3SChuck Lever __entry->xid = __be32_to_cpu(rqst->rq_xid); 1260bd2abef3SChuck Lever __entry->xprt = rqst->rq_xprt; 1261bd2abef3SChuck Lever __assign_str(addr, rqst->rq_xprt->xpt_remotebuf); 1262bd2abef3SChuck Lever ), 1263bd2abef3SChuck Lever 1264bd2abef3SChuck Lever TP_printk("xprt=%p addr=%s xid=0x%08x status=%d", 1265bd2abef3SChuck Lever __entry->xprt, __get_str(addr), 1266bd2abef3SChuck Lever __entry->xid, __entry->status 1267bd2abef3SChuck Lever ) 1268bd2abef3SChuck Lever ); 1269bd2abef3SChuck Lever 1270bd2abef3SChuck Lever DECLARE_EVENT_CLASS(svcrdma_sendcomp_event, 1271bd2abef3SChuck Lever TP_PROTO( 1272bd2abef3SChuck Lever const struct ib_wc *wc 1273bd2abef3SChuck Lever ), 1274bd2abef3SChuck Lever 1275bd2abef3SChuck Lever TP_ARGS(wc), 1276bd2abef3SChuck Lever 1277bd2abef3SChuck Lever TP_STRUCT__entry( 1278bd2abef3SChuck Lever __field(const void *, cqe) 1279bd2abef3SChuck Lever __field(unsigned int, status) 1280bd2abef3SChuck Lever __field(unsigned int, vendor_err) 1281bd2abef3SChuck Lever ), 1282bd2abef3SChuck Lever 1283bd2abef3SChuck Lever TP_fast_assign( 1284bd2abef3SChuck Lever __entry->cqe = wc->wr_cqe; 1285bd2abef3SChuck Lever __entry->status = wc->status; 1286bd2abef3SChuck Lever if (wc->status) 1287bd2abef3SChuck Lever __entry->vendor_err = wc->vendor_err; 1288bd2abef3SChuck Lever else 1289bd2abef3SChuck Lever __entry->vendor_err = 0; 1290bd2abef3SChuck Lever ), 1291bd2abef3SChuck Lever 1292bd2abef3SChuck Lever TP_printk("cqe=%p status=%s (%u/0x%x)", 1293bd2abef3SChuck Lever __entry->cqe, rdma_show_wc_status(__entry->status), 1294bd2abef3SChuck Lever __entry->status, __entry->vendor_err 1295bd2abef3SChuck Lever ) 1296bd2abef3SChuck Lever ); 1297bd2abef3SChuck Lever 1298bd2abef3SChuck Lever #define DEFINE_SENDCOMP_EVENT(name) \ 1299bd2abef3SChuck Lever DEFINE_EVENT(svcrdma_sendcomp_event, svcrdma_wc_##name, \ 1300bd2abef3SChuck Lever TP_PROTO( \ 1301bd2abef3SChuck Lever const struct ib_wc *wc \ 1302bd2abef3SChuck Lever ), \ 1303bd2abef3SChuck Lever TP_ARGS(wc)) 1304bd2abef3SChuck Lever 1305bd2abef3SChuck Lever TRACE_EVENT(svcrdma_post_send, 1306bd2abef3SChuck Lever TP_PROTO( 1307bd2abef3SChuck Lever const struct ib_send_wr *wr, 1308bd2abef3SChuck Lever int status 1309bd2abef3SChuck Lever ), 1310bd2abef3SChuck Lever 1311bd2abef3SChuck Lever TP_ARGS(wr, status), 1312bd2abef3SChuck Lever 1313bd2abef3SChuck Lever TP_STRUCT__entry( 1314bd2abef3SChuck Lever __field(const void *, cqe) 1315bd2abef3SChuck Lever __field(unsigned int, num_sge) 1316bd2abef3SChuck Lever __field(u32, inv_rkey) 1317bd2abef3SChuck Lever __field(int, status) 1318bd2abef3SChuck Lever ), 1319bd2abef3SChuck Lever 1320bd2abef3SChuck Lever TP_fast_assign( 1321bd2abef3SChuck Lever __entry->cqe = wr->wr_cqe; 1322bd2abef3SChuck Lever __entry->num_sge = wr->num_sge; 1323bd2abef3SChuck Lever __entry->inv_rkey = (wr->opcode == IB_WR_SEND_WITH_INV) ? 1324bd2abef3SChuck Lever wr->ex.invalidate_rkey : 0; 1325bd2abef3SChuck Lever __entry->status = status; 1326bd2abef3SChuck Lever ), 1327bd2abef3SChuck Lever 1328bd2abef3SChuck Lever TP_printk("cqe=%p num_sge=%u inv_rkey=0x%08x status=%d", 1329bd2abef3SChuck Lever __entry->cqe, __entry->num_sge, 1330bd2abef3SChuck Lever __entry->inv_rkey, __entry->status 1331bd2abef3SChuck Lever ) 1332bd2abef3SChuck Lever ); 1333bd2abef3SChuck Lever 1334bd2abef3SChuck Lever DEFINE_SENDCOMP_EVENT(send); 1335bd2abef3SChuck Lever 1336bd2abef3SChuck Lever TRACE_EVENT(svcrdma_post_recv, 1337bd2abef3SChuck Lever TP_PROTO( 1338bd2abef3SChuck Lever const struct ib_recv_wr *wr, 1339bd2abef3SChuck Lever int status 1340bd2abef3SChuck Lever ), 1341bd2abef3SChuck Lever 1342bd2abef3SChuck Lever TP_ARGS(wr, status), 1343bd2abef3SChuck Lever 1344bd2abef3SChuck Lever TP_STRUCT__entry( 1345bd2abef3SChuck Lever __field(const void *, cqe) 1346bd2abef3SChuck Lever __field(int, status) 1347bd2abef3SChuck Lever ), 1348bd2abef3SChuck Lever 1349bd2abef3SChuck Lever TP_fast_assign( 1350bd2abef3SChuck Lever __entry->cqe = wr->wr_cqe; 1351bd2abef3SChuck Lever __entry->status = status; 1352bd2abef3SChuck Lever ), 1353bd2abef3SChuck Lever 1354bd2abef3SChuck Lever TP_printk("cqe=%p status=%d", 1355bd2abef3SChuck Lever __entry->cqe, __entry->status 1356bd2abef3SChuck Lever ) 1357bd2abef3SChuck Lever ); 1358bd2abef3SChuck Lever 1359bd2abef3SChuck Lever TRACE_EVENT(svcrdma_wc_receive, 1360bd2abef3SChuck Lever TP_PROTO( 1361bd2abef3SChuck Lever const struct ib_wc *wc 1362bd2abef3SChuck Lever ), 1363bd2abef3SChuck Lever 1364bd2abef3SChuck Lever TP_ARGS(wc), 1365bd2abef3SChuck Lever 1366bd2abef3SChuck Lever TP_STRUCT__entry( 1367bd2abef3SChuck Lever __field(const void *, cqe) 1368bd2abef3SChuck Lever __field(u32, byte_len) 1369bd2abef3SChuck Lever __field(unsigned int, status) 1370bd2abef3SChuck Lever __field(u32, vendor_err) 1371bd2abef3SChuck Lever ), 1372bd2abef3SChuck Lever 1373bd2abef3SChuck Lever TP_fast_assign( 1374bd2abef3SChuck Lever __entry->cqe = wc->wr_cqe; 1375bd2abef3SChuck Lever __entry->status = wc->status; 1376bd2abef3SChuck Lever if (wc->status) { 1377bd2abef3SChuck Lever __entry->byte_len = 0; 1378bd2abef3SChuck Lever __entry->vendor_err = wc->vendor_err; 1379bd2abef3SChuck Lever } else { 1380bd2abef3SChuck Lever __entry->byte_len = wc->byte_len; 1381bd2abef3SChuck Lever __entry->vendor_err = 0; 1382bd2abef3SChuck Lever } 1383bd2abef3SChuck Lever ), 1384bd2abef3SChuck Lever 1385bd2abef3SChuck Lever TP_printk("cqe=%p byte_len=%u status=%s (%u/0x%x)", 1386bd2abef3SChuck Lever __entry->cqe, __entry->byte_len, 1387bd2abef3SChuck Lever rdma_show_wc_status(__entry->status), 1388bd2abef3SChuck Lever __entry->status, __entry->vendor_err 1389bd2abef3SChuck Lever ) 1390bd2abef3SChuck Lever ); 1391bd2abef3SChuck Lever 1392bd2abef3SChuck Lever TRACE_EVENT(svcrdma_post_rw, 1393bd2abef3SChuck Lever TP_PROTO( 1394bd2abef3SChuck Lever const void *cqe, 1395bd2abef3SChuck Lever int sqecount, 1396bd2abef3SChuck Lever int status 1397bd2abef3SChuck Lever ), 1398bd2abef3SChuck Lever 1399bd2abef3SChuck Lever TP_ARGS(cqe, sqecount, status), 1400bd2abef3SChuck Lever 1401bd2abef3SChuck Lever TP_STRUCT__entry( 1402bd2abef3SChuck Lever __field(const void *, cqe) 1403bd2abef3SChuck Lever __field(int, sqecount) 1404bd2abef3SChuck Lever __field(int, status) 1405bd2abef3SChuck Lever ), 1406bd2abef3SChuck Lever 1407bd2abef3SChuck Lever TP_fast_assign( 1408bd2abef3SChuck Lever __entry->cqe = cqe; 1409bd2abef3SChuck Lever __entry->sqecount = sqecount; 1410bd2abef3SChuck Lever __entry->status = status; 1411bd2abef3SChuck Lever ), 1412bd2abef3SChuck Lever 1413bd2abef3SChuck Lever TP_printk("cqe=%p sqecount=%d status=%d", 1414bd2abef3SChuck Lever __entry->cqe, __entry->sqecount, __entry->status 1415bd2abef3SChuck Lever ) 1416bd2abef3SChuck Lever ); 1417bd2abef3SChuck Lever 1418bd2abef3SChuck Lever DEFINE_SENDCOMP_EVENT(read); 1419bd2abef3SChuck Lever DEFINE_SENDCOMP_EVENT(write); 1420bd2abef3SChuck Lever 1421bd2abef3SChuck Lever TRACE_EVENT(svcrdma_cm_event, 1422bd2abef3SChuck Lever TP_PROTO( 1423bd2abef3SChuck Lever const struct rdma_cm_event *event, 1424bd2abef3SChuck Lever const struct sockaddr *sap 1425bd2abef3SChuck Lever ), 1426bd2abef3SChuck Lever 1427bd2abef3SChuck Lever TP_ARGS(event, sap), 1428bd2abef3SChuck Lever 1429bd2abef3SChuck Lever TP_STRUCT__entry( 1430bd2abef3SChuck Lever __field(unsigned int, event) 1431bd2abef3SChuck Lever __field(int, status) 1432bd2abef3SChuck Lever __array(__u8, addr, INET6_ADDRSTRLEN + 10) 1433bd2abef3SChuck Lever ), 1434bd2abef3SChuck Lever 1435bd2abef3SChuck Lever TP_fast_assign( 1436bd2abef3SChuck Lever __entry->event = event->event; 1437bd2abef3SChuck Lever __entry->status = event->status; 1438bd2abef3SChuck Lever snprintf(__entry->addr, sizeof(__entry->addr) - 1, 1439bd2abef3SChuck Lever "%pISpc", sap); 1440bd2abef3SChuck Lever ), 1441bd2abef3SChuck Lever 1442bd2abef3SChuck Lever TP_printk("addr=%s event=%s (%u/%d)", 1443bd2abef3SChuck Lever __entry->addr, 1444bd2abef3SChuck Lever rdma_show_cm_event(__entry->event), 1445bd2abef3SChuck Lever __entry->event, __entry->status 1446bd2abef3SChuck Lever ) 1447bd2abef3SChuck Lever ); 1448bd2abef3SChuck Lever 1449bd2abef3SChuck Lever TRACE_EVENT(svcrdma_qp_error, 1450bd2abef3SChuck Lever TP_PROTO( 1451bd2abef3SChuck Lever const struct ib_event *event, 1452bd2abef3SChuck Lever const struct sockaddr *sap 1453bd2abef3SChuck Lever ), 1454bd2abef3SChuck Lever 1455bd2abef3SChuck Lever TP_ARGS(event, sap), 1456bd2abef3SChuck Lever 1457bd2abef3SChuck Lever TP_STRUCT__entry( 1458bd2abef3SChuck Lever __field(unsigned int, event) 1459bd2abef3SChuck Lever __string(device, event->device->name) 1460bd2abef3SChuck Lever __array(__u8, addr, INET6_ADDRSTRLEN + 10) 1461bd2abef3SChuck Lever ), 1462bd2abef3SChuck Lever 1463bd2abef3SChuck Lever TP_fast_assign( 1464bd2abef3SChuck Lever __entry->event = event->event; 1465bd2abef3SChuck Lever __assign_str(device, event->device->name); 1466bd2abef3SChuck Lever snprintf(__entry->addr, sizeof(__entry->addr) - 1, 1467bd2abef3SChuck Lever "%pISpc", sap); 1468bd2abef3SChuck Lever ), 1469bd2abef3SChuck Lever 1470bd2abef3SChuck Lever TP_printk("addr=%s dev=%s event=%s (%u)", 1471bd2abef3SChuck Lever __entry->addr, __get_str(device), 1472bd2abef3SChuck Lever rdma_show_ib_event(__entry->event), __entry->event 1473bd2abef3SChuck Lever ) 1474bd2abef3SChuck Lever ); 1475bd2abef3SChuck Lever 1476bd2abef3SChuck Lever DECLARE_EVENT_CLASS(svcrdma_sendqueue_event, 1477bd2abef3SChuck Lever TP_PROTO( 1478bd2abef3SChuck Lever const struct svcxprt_rdma *rdma 1479bd2abef3SChuck Lever ), 1480bd2abef3SChuck Lever 1481bd2abef3SChuck Lever TP_ARGS(rdma), 1482bd2abef3SChuck Lever 1483bd2abef3SChuck Lever TP_STRUCT__entry( 1484bd2abef3SChuck Lever __field(int, avail) 1485bd2abef3SChuck Lever __field(int, depth) 1486bd2abef3SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1487bd2abef3SChuck Lever ), 1488bd2abef3SChuck Lever 1489bd2abef3SChuck Lever TP_fast_assign( 1490bd2abef3SChuck Lever __entry->avail = atomic_read(&rdma->sc_sq_avail); 1491bd2abef3SChuck Lever __entry->depth = rdma->sc_sq_depth; 1492bd2abef3SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1493bd2abef3SChuck Lever ), 1494bd2abef3SChuck Lever 1495bd2abef3SChuck Lever TP_printk("addr=%s sc_sq_avail=%d/%d", 1496bd2abef3SChuck Lever __get_str(addr), __entry->avail, __entry->depth 1497bd2abef3SChuck Lever ) 1498bd2abef3SChuck Lever ); 1499bd2abef3SChuck Lever 1500bd2abef3SChuck Lever #define DEFINE_SQ_EVENT(name) \ 1501bd2abef3SChuck Lever DEFINE_EVENT(svcrdma_sendqueue_event, svcrdma_sq_##name,\ 1502bd2abef3SChuck Lever TP_PROTO( \ 1503bd2abef3SChuck Lever const struct svcxprt_rdma *rdma \ 1504bd2abef3SChuck Lever ), \ 1505bd2abef3SChuck Lever TP_ARGS(rdma)) 1506bd2abef3SChuck Lever 1507bd2abef3SChuck Lever DEFINE_SQ_EVENT(full); 1508bd2abef3SChuck Lever DEFINE_SQ_EVENT(retry); 1509bd2abef3SChuck Lever 1510e48f083eSChuck Lever #endif /* _TRACE_RPCRDMA_H */ 1511e48f083eSChuck Lever 1512e48f083eSChuck Lever #include <trace/define_trace.h> 1513