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(const void *, mr) 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->mr = mr; 11358f10ad4SChuck Lever __entry->pos = pos; 11458f10ad4SChuck Lever __entry->nents = mr->mr_nents; 11558f10ad4SChuck Lever __entry->handle = mr->mr_handle; 11658f10ad4SChuck Lever __entry->length = mr->mr_length; 11758f10ad4SChuck Lever __entry->offset = mr->mr_offset; 11858f10ad4SChuck Lever __entry->nsegs = nsegs; 11958f10ad4SChuck Lever ), 12058f10ad4SChuck Lever 12158f10ad4SChuck Lever TP_printk("task:%u@%u mr=%p pos=%u %u@0x%016llx:0x%08x (%s)", 12258f10ad4SChuck Lever __entry->task_id, __entry->client_id, __entry->mr, 12358f10ad4SChuck Lever __entry->pos, __entry->length, 12458f10ad4SChuck Lever (unsigned long long)__entry->offset, __entry->handle, 12558f10ad4SChuck Lever __entry->nents < __entry->nsegs ? "more" : "last" 12658f10ad4SChuck Lever ) 12758f10ad4SChuck Lever ); 12858f10ad4SChuck Lever 12958f10ad4SChuck Lever #define DEFINE_RDCH_EVENT(name) \ 13058f10ad4SChuck Lever DEFINE_EVENT(xprtrdma_rdch_event, name, \ 13158f10ad4SChuck Lever TP_PROTO( \ 13258f10ad4SChuck Lever const struct rpc_task *task, \ 13358f10ad4SChuck Lever unsigned int pos, \ 13458f10ad4SChuck Lever struct rpcrdma_mr *mr, \ 13558f10ad4SChuck Lever int nsegs \ 13658f10ad4SChuck Lever ), \ 13758f10ad4SChuck Lever TP_ARGS(task, pos, mr, nsegs)) 13858f10ad4SChuck Lever 13958f10ad4SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_wrch_event, 14058f10ad4SChuck Lever TP_PROTO( 14158f10ad4SChuck Lever const struct rpc_task *task, 14258f10ad4SChuck Lever struct rpcrdma_mr *mr, 14358f10ad4SChuck Lever int nsegs 14458f10ad4SChuck Lever ), 14558f10ad4SChuck Lever 14658f10ad4SChuck Lever TP_ARGS(task, mr, nsegs), 14758f10ad4SChuck Lever 14858f10ad4SChuck Lever TP_STRUCT__entry( 14958f10ad4SChuck Lever __field(unsigned int, task_id) 15058f10ad4SChuck Lever __field(unsigned int, client_id) 15158f10ad4SChuck Lever __field(const void *, mr) 15258f10ad4SChuck Lever __field(int, nents) 15358f10ad4SChuck Lever __field(u32, handle) 15458f10ad4SChuck Lever __field(u32, length) 15558f10ad4SChuck Lever __field(u64, offset) 15658f10ad4SChuck Lever __field(int, nsegs) 15758f10ad4SChuck Lever ), 15858f10ad4SChuck Lever 15958f10ad4SChuck Lever TP_fast_assign( 16058f10ad4SChuck Lever __entry->task_id = task->tk_pid; 16158f10ad4SChuck Lever __entry->client_id = task->tk_client->cl_clid; 16258f10ad4SChuck Lever __entry->mr = mr; 16358f10ad4SChuck Lever __entry->nents = mr->mr_nents; 16458f10ad4SChuck Lever __entry->handle = mr->mr_handle; 16558f10ad4SChuck Lever __entry->length = mr->mr_length; 16658f10ad4SChuck Lever __entry->offset = mr->mr_offset; 16758f10ad4SChuck Lever __entry->nsegs = nsegs; 16858f10ad4SChuck Lever ), 16958f10ad4SChuck Lever 17058f10ad4SChuck Lever TP_printk("task:%u@%u mr=%p %u@0x%016llx:0x%08x (%s)", 17158f10ad4SChuck Lever __entry->task_id, __entry->client_id, __entry->mr, 17258f10ad4SChuck Lever __entry->length, (unsigned long long)__entry->offset, 17358f10ad4SChuck Lever __entry->handle, 17458f10ad4SChuck Lever __entry->nents < __entry->nsegs ? "more" : "last" 17558f10ad4SChuck Lever ) 17658f10ad4SChuck Lever ); 17758f10ad4SChuck Lever 17858f10ad4SChuck Lever #define DEFINE_WRCH_EVENT(name) \ 17958f10ad4SChuck Lever DEFINE_EVENT(xprtrdma_wrch_event, name, \ 18058f10ad4SChuck Lever TP_PROTO( \ 18158f10ad4SChuck Lever const struct rpc_task *task, \ 18258f10ad4SChuck Lever struct rpcrdma_mr *mr, \ 18358f10ad4SChuck Lever int nsegs \ 18458f10ad4SChuck Lever ), \ 18558f10ad4SChuck Lever TP_ARGS(task, mr, nsegs)) 18658f10ad4SChuck Lever 18758f10ad4SChuck Lever TRACE_DEFINE_ENUM(FRWR_IS_INVALID); 18858f10ad4SChuck Lever TRACE_DEFINE_ENUM(FRWR_IS_VALID); 18958f10ad4SChuck Lever TRACE_DEFINE_ENUM(FRWR_FLUSHED_FR); 19058f10ad4SChuck Lever TRACE_DEFINE_ENUM(FRWR_FLUSHED_LI); 19158f10ad4SChuck Lever 19258f10ad4SChuck Lever #define xprtrdma_show_frwr_state(x) \ 19358f10ad4SChuck Lever __print_symbolic(x, \ 19458f10ad4SChuck Lever { FRWR_IS_INVALID, "INVALID" }, \ 19558f10ad4SChuck Lever { FRWR_IS_VALID, "VALID" }, \ 19658f10ad4SChuck Lever { FRWR_FLUSHED_FR, "FLUSHED_FR" }, \ 19758f10ad4SChuck Lever { FRWR_FLUSHED_LI, "FLUSHED_LI" }) 19858f10ad4SChuck Lever 19958f10ad4SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_frwr_done, 20058f10ad4SChuck Lever TP_PROTO( 20158f10ad4SChuck Lever const struct ib_wc *wc, 20258f10ad4SChuck Lever const struct rpcrdma_frwr *frwr 20358f10ad4SChuck Lever ), 20458f10ad4SChuck Lever 20558f10ad4SChuck Lever TP_ARGS(wc, frwr), 20658f10ad4SChuck Lever 20758f10ad4SChuck Lever TP_STRUCT__entry( 20858f10ad4SChuck Lever __field(const void *, mr) 20958f10ad4SChuck Lever __field(unsigned int, state) 21058f10ad4SChuck Lever __field(unsigned int, status) 21158f10ad4SChuck Lever __field(unsigned int, vendor_err) 21258f10ad4SChuck Lever ), 21358f10ad4SChuck Lever 21458f10ad4SChuck Lever TP_fast_assign( 21558f10ad4SChuck Lever __entry->mr = container_of(frwr, struct rpcrdma_mr, frwr); 21658f10ad4SChuck Lever __entry->state = frwr->fr_state; 21758f10ad4SChuck Lever __entry->status = wc->status; 21858f10ad4SChuck Lever __entry->vendor_err = __entry->status ? wc->vendor_err : 0; 21958f10ad4SChuck Lever ), 22058f10ad4SChuck Lever 22158f10ad4SChuck Lever TP_printk( 22258f10ad4SChuck Lever "mr=%p state=%s: %s (%u/0x%x)", 22358f10ad4SChuck Lever __entry->mr, xprtrdma_show_frwr_state(__entry->state), 22458f10ad4SChuck Lever rdma_show_wc_status(__entry->status), 22558f10ad4SChuck Lever __entry->status, __entry->vendor_err 22658f10ad4SChuck Lever ) 22758f10ad4SChuck Lever ); 22858f10ad4SChuck Lever 22958f10ad4SChuck Lever #define DEFINE_FRWR_DONE_EVENT(name) \ 23058f10ad4SChuck Lever DEFINE_EVENT(xprtrdma_frwr_done, name, \ 23158f10ad4SChuck Lever TP_PROTO( \ 23258f10ad4SChuck Lever const struct ib_wc *wc, \ 23358f10ad4SChuck Lever const struct rpcrdma_frwr *frwr \ 23458f10ad4SChuck Lever ), \ 23558f10ad4SChuck Lever TP_ARGS(wc, frwr)) 23658f10ad4SChuck Lever 2372937fedeSChuck Lever DECLARE_EVENT_CLASS(xprtrdma_mr, 2382937fedeSChuck Lever TP_PROTO( 2392937fedeSChuck Lever const struct rpcrdma_mr *mr 2402937fedeSChuck Lever ), 2412937fedeSChuck Lever 2422937fedeSChuck Lever TP_ARGS(mr), 2432937fedeSChuck Lever 2442937fedeSChuck Lever TP_STRUCT__entry( 2452937fedeSChuck Lever __field(const void *, mr) 2462937fedeSChuck Lever __field(u32, handle) 2472937fedeSChuck Lever __field(u32, length) 2482937fedeSChuck Lever __field(u64, offset) 2492937fedeSChuck Lever ), 2502937fedeSChuck Lever 2512937fedeSChuck Lever TP_fast_assign( 2522937fedeSChuck Lever __entry->mr = mr; 2532937fedeSChuck Lever __entry->handle = mr->mr_handle; 2542937fedeSChuck Lever __entry->length = mr->mr_length; 2552937fedeSChuck Lever __entry->offset = mr->mr_offset; 2562937fedeSChuck Lever ), 2572937fedeSChuck Lever 2582937fedeSChuck Lever TP_printk("mr=%p %u@0x%016llx:0x%08x", 2592937fedeSChuck Lever __entry->mr, __entry->length, 2602937fedeSChuck Lever (unsigned long long)__entry->offset, 2612937fedeSChuck Lever __entry->handle 2622937fedeSChuck Lever ) 2632937fedeSChuck Lever ); 2642937fedeSChuck Lever 2652937fedeSChuck Lever #define DEFINE_MR_EVENT(name) \ 2662937fedeSChuck Lever DEFINE_EVENT(xprtrdma_mr, name, \ 2672937fedeSChuck Lever TP_PROTO( \ 2682937fedeSChuck Lever const struct rpcrdma_mr *mr \ 2692937fedeSChuck Lever ), \ 2702937fedeSChuck Lever TP_ARGS(mr)) 2712937fedeSChuck Lever 272fc1eb807SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_cb_event, 273fc1eb807SChuck Lever TP_PROTO( 274fc1eb807SChuck Lever const struct rpc_rqst *rqst 275fc1eb807SChuck Lever ), 276fc1eb807SChuck Lever 277fc1eb807SChuck Lever TP_ARGS(rqst), 278fc1eb807SChuck Lever 279fc1eb807SChuck Lever TP_STRUCT__entry( 280fc1eb807SChuck Lever __field(const void *, rqst) 281fc1eb807SChuck Lever __field(const void *, rep) 282fc1eb807SChuck Lever __field(const void *, req) 283fc1eb807SChuck Lever __field(u32, xid) 284fc1eb807SChuck Lever ), 285fc1eb807SChuck Lever 286fc1eb807SChuck Lever TP_fast_assign( 287fc1eb807SChuck Lever __entry->rqst = rqst; 288fc1eb807SChuck Lever __entry->req = rpcr_to_rdmar(rqst); 289fc1eb807SChuck Lever __entry->rep = rpcr_to_rdmar(rqst)->rl_reply; 290fc1eb807SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 291fc1eb807SChuck Lever ), 292fc1eb807SChuck Lever 293fc1eb807SChuck Lever TP_printk("xid=0x%08x, rqst=%p req=%p rep=%p", 294fc1eb807SChuck Lever __entry->xid, __entry->rqst, __entry->req, __entry->rep 295fc1eb807SChuck Lever ) 296fc1eb807SChuck Lever ); 297fc1eb807SChuck Lever 298fc1eb807SChuck Lever #define DEFINE_CB_EVENT(name) \ 299fc1eb807SChuck Lever DEFINE_EVENT(xprtrdma_cb_event, name, \ 300fc1eb807SChuck Lever TP_PROTO( \ 301fc1eb807SChuck Lever const struct rpc_rqst *rqst \ 302fc1eb807SChuck Lever ), \ 303fc1eb807SChuck Lever TP_ARGS(rqst)) 304fc1eb807SChuck Lever 305b4a7f91cSChuck Lever /** 306b4744e00SChuck Lever ** Connection events 307b4744e00SChuck Lever **/ 308b4744e00SChuck Lever 309b4744e00SChuck Lever TRACE_EVENT(xprtrdma_conn_upcall, 310b4744e00SChuck Lever TP_PROTO( 311b4744e00SChuck Lever const struct rpcrdma_xprt *r_xprt, 312b4744e00SChuck Lever struct rdma_cm_event *event 313b4744e00SChuck Lever ), 314b4744e00SChuck Lever 315b4744e00SChuck Lever TP_ARGS(r_xprt, event), 316b4744e00SChuck Lever 317b4744e00SChuck Lever TP_STRUCT__entry( 318b4744e00SChuck Lever __field(const void *, r_xprt) 319b4744e00SChuck Lever __field(unsigned int, event) 320b4744e00SChuck Lever __field(int, status) 321b4744e00SChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 322b4744e00SChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 323b4744e00SChuck Lever ), 324b4744e00SChuck Lever 325b4744e00SChuck Lever TP_fast_assign( 326b4744e00SChuck Lever __entry->r_xprt = r_xprt; 327b4744e00SChuck Lever __entry->event = event->event; 328b4744e00SChuck Lever __entry->status = event->status; 329b4744e00SChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 330b4744e00SChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 331b4744e00SChuck Lever ), 332b4744e00SChuck Lever 333b4744e00SChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: %s (%u/%d)", 334b4744e00SChuck Lever __get_str(addr), __get_str(port), 335b4744e00SChuck Lever __entry->r_xprt, rdma_show_cm_event(__entry->event), 336b4744e00SChuck Lever __entry->event, __entry->status 337b4744e00SChuck Lever ) 338b4744e00SChuck Lever ); 339b4744e00SChuck Lever 340b4744e00SChuck Lever TRACE_EVENT(xprtrdma_disconnect, 341b4744e00SChuck Lever TP_PROTO( 342b4744e00SChuck Lever const struct rpcrdma_xprt *r_xprt, 343b4744e00SChuck Lever int status 344b4744e00SChuck Lever ), 345b4744e00SChuck Lever 346b4744e00SChuck Lever TP_ARGS(r_xprt, status), 347b4744e00SChuck Lever 348b4744e00SChuck Lever TP_STRUCT__entry( 349b4744e00SChuck Lever __field(const void *, r_xprt) 350b4744e00SChuck Lever __field(int, status) 351b4744e00SChuck Lever __field(int, connected) 352b4744e00SChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 353b4744e00SChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 354b4744e00SChuck Lever ), 355b4744e00SChuck Lever 356b4744e00SChuck Lever TP_fast_assign( 357b4744e00SChuck Lever __entry->r_xprt = r_xprt; 358b4744e00SChuck Lever __entry->status = status; 359b4744e00SChuck Lever __entry->connected = r_xprt->rx_ep.rep_connected; 360b4744e00SChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 361b4744e00SChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 362b4744e00SChuck Lever ), 363b4744e00SChuck Lever 364b4744e00SChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: status=%d %sconnected", 365b4744e00SChuck Lever __get_str(addr), __get_str(port), 366b4744e00SChuck Lever __entry->r_xprt, __entry->status, 367b4744e00SChuck Lever __entry->connected == 1 ? "still " : "dis" 368b4744e00SChuck Lever ) 369b4744e00SChuck Lever ); 370b4744e00SChuck Lever 371b4744e00SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_conn_start); 372b4744e00SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_conn_tout); 373b4744e00SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_create); 374b4744e00SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_destroy); 375b4744e00SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_remove); 376b4744e00SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_reinsert); 377b4744e00SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_reconnect); 378b4744e00SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_inject_dsc); 379b4744e00SChuck Lever 380643cf323SChuck Lever TRACE_EVENT(xprtrdma_qp_error, 381643cf323SChuck Lever TP_PROTO( 382643cf323SChuck Lever const struct rpcrdma_xprt *r_xprt, 383643cf323SChuck Lever const struct ib_event *event 384643cf323SChuck Lever ), 385643cf323SChuck Lever 386643cf323SChuck Lever TP_ARGS(r_xprt, event), 387643cf323SChuck Lever 388643cf323SChuck Lever TP_STRUCT__entry( 389643cf323SChuck Lever __field(const void *, r_xprt) 390643cf323SChuck Lever __field(unsigned int, event) 391643cf323SChuck Lever __string(name, event->device->name) 392643cf323SChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 393643cf323SChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 394643cf323SChuck Lever ), 395643cf323SChuck Lever 396643cf323SChuck Lever TP_fast_assign( 397643cf323SChuck Lever __entry->r_xprt = r_xprt; 398643cf323SChuck Lever __entry->event = event->event; 399643cf323SChuck Lever __assign_str(name, event->device->name); 400643cf323SChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 401643cf323SChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 402643cf323SChuck Lever ), 403643cf323SChuck Lever 404643cf323SChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: dev %s: %s (%u)", 405643cf323SChuck Lever __get_str(addr), __get_str(port), __entry->r_xprt, 406643cf323SChuck Lever __get_str(name), rdma_show_ib_event(__entry->event), 407643cf323SChuck Lever __entry->event 408643cf323SChuck Lever ) 409643cf323SChuck Lever ); 410643cf323SChuck Lever 411b4744e00SChuck Lever /** 412ab03eff5SChuck Lever ** Call events 413ab03eff5SChuck Lever **/ 414ab03eff5SChuck Lever 4151c443effSChuck Lever TRACE_EVENT(xprtrdma_createmrs, 4161c443effSChuck Lever TP_PROTO( 4171c443effSChuck Lever const struct rpcrdma_xprt *r_xprt, 4181c443effSChuck Lever unsigned int count 4191c443effSChuck Lever ), 4201c443effSChuck Lever 4211c443effSChuck Lever TP_ARGS(r_xprt, count), 4221c443effSChuck Lever 4231c443effSChuck Lever TP_STRUCT__entry( 4241c443effSChuck Lever __field(const void *, r_xprt) 4251c443effSChuck Lever __field(unsigned int, count) 4261c443effSChuck Lever ), 4271c443effSChuck Lever 4281c443effSChuck Lever TP_fast_assign( 4291c443effSChuck Lever __entry->r_xprt = r_xprt; 4301c443effSChuck Lever __entry->count = count; 4311c443effSChuck Lever ), 4321c443effSChuck Lever 4331c443effSChuck Lever TP_printk("r_xprt=%p: created %u MRs", 4341c443effSChuck Lever __entry->r_xprt, __entry->count 4351c443effSChuck Lever ) 4361c443effSChuck Lever ); 4371c443effSChuck Lever 4381c443effSChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_nomrs); 4391c443effSChuck Lever 44058f10ad4SChuck Lever DEFINE_RDCH_EVENT(xprtrdma_read_chunk); 44158f10ad4SChuck Lever DEFINE_WRCH_EVENT(xprtrdma_write_chunk); 44258f10ad4SChuck Lever DEFINE_WRCH_EVENT(xprtrdma_reply_chunk); 44358f10ad4SChuck Lever 444ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch); 445ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_readch); 446ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_areadch); 447ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_writech); 448ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_replych); 449ab03eff5SChuck Lever 450ab03eff5SChuck Lever #define xprtrdma_show_chunktype(x) \ 451ab03eff5SChuck Lever __print_symbolic(x, \ 452ab03eff5SChuck Lever { rpcrdma_noch, "inline" }, \ 453ab03eff5SChuck Lever { rpcrdma_readch, "read list" }, \ 454ab03eff5SChuck Lever { rpcrdma_areadch, "*read list" }, \ 455ab03eff5SChuck Lever { rpcrdma_writech, "write list" }, \ 456ab03eff5SChuck Lever { rpcrdma_replych, "reply chunk" }) 457ab03eff5SChuck Lever 458ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_marshal, 459ab03eff5SChuck Lever TP_PROTO( 460ab03eff5SChuck Lever const struct rpc_rqst *rqst, 461ab03eff5SChuck Lever unsigned int hdrlen, 462ab03eff5SChuck Lever unsigned int rtype, 463ab03eff5SChuck Lever unsigned int wtype 464ab03eff5SChuck Lever ), 465ab03eff5SChuck Lever 466ab03eff5SChuck Lever TP_ARGS(rqst, hdrlen, rtype, wtype), 467ab03eff5SChuck Lever 468ab03eff5SChuck Lever TP_STRUCT__entry( 469ab03eff5SChuck Lever __field(unsigned int, task_id) 470ab03eff5SChuck Lever __field(unsigned int, client_id) 471ab03eff5SChuck Lever __field(u32, xid) 472ab03eff5SChuck Lever __field(unsigned int, hdrlen) 473ab03eff5SChuck Lever __field(unsigned int, headlen) 474ab03eff5SChuck Lever __field(unsigned int, pagelen) 475ab03eff5SChuck Lever __field(unsigned int, taillen) 476ab03eff5SChuck Lever __field(unsigned int, rtype) 477ab03eff5SChuck Lever __field(unsigned int, wtype) 478ab03eff5SChuck Lever ), 479ab03eff5SChuck Lever 480ab03eff5SChuck Lever TP_fast_assign( 481ab03eff5SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 482ab03eff5SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 483ab03eff5SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 484ab03eff5SChuck Lever __entry->hdrlen = hdrlen; 485ab03eff5SChuck Lever __entry->headlen = rqst->rq_snd_buf.head[0].iov_len; 486ab03eff5SChuck Lever __entry->pagelen = rqst->rq_snd_buf.page_len; 487ab03eff5SChuck Lever __entry->taillen = rqst->rq_snd_buf.tail[0].iov_len; 488ab03eff5SChuck Lever __entry->rtype = rtype; 489ab03eff5SChuck Lever __entry->wtype = wtype; 490ab03eff5SChuck Lever ), 491ab03eff5SChuck Lever 492ab03eff5SChuck Lever TP_printk("task:%u@%u xid=0x%08x: hdr=%u xdr=%u/%u/%u %s/%s", 493ab03eff5SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 494ab03eff5SChuck Lever __entry->hdrlen, 495ab03eff5SChuck Lever __entry->headlen, __entry->pagelen, __entry->taillen, 496ab03eff5SChuck Lever xprtrdma_show_chunktype(__entry->rtype), 497ab03eff5SChuck Lever xprtrdma_show_chunktype(__entry->wtype) 498ab03eff5SChuck Lever ) 499ab03eff5SChuck Lever ); 500ab03eff5SChuck Lever 501ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_post_send, 502ab03eff5SChuck Lever TP_PROTO( 503ab03eff5SChuck Lever const struct rpcrdma_req *req, 504ab03eff5SChuck Lever int status 505ab03eff5SChuck Lever ), 506ab03eff5SChuck Lever 507ab03eff5SChuck Lever TP_ARGS(req, status), 508ab03eff5SChuck Lever 509ab03eff5SChuck Lever TP_STRUCT__entry( 510ab03eff5SChuck Lever __field(const void *, req) 511ab03eff5SChuck Lever __field(int, num_sge) 512ab03eff5SChuck Lever __field(bool, signaled) 513ab03eff5SChuck Lever __field(int, status) 514ab03eff5SChuck Lever ), 515ab03eff5SChuck Lever 516ab03eff5SChuck Lever TP_fast_assign( 517ab03eff5SChuck Lever __entry->req = req; 518ab03eff5SChuck Lever __entry->num_sge = req->rl_sendctx->sc_wr.num_sge; 519ab03eff5SChuck Lever __entry->signaled = req->rl_sendctx->sc_wr.send_flags & 520ab03eff5SChuck Lever IB_SEND_SIGNALED; 521ab03eff5SChuck Lever __entry->status = status; 522ab03eff5SChuck Lever ), 523ab03eff5SChuck Lever 524ab03eff5SChuck Lever TP_printk("req=%p, %d SGEs%s, status=%d", 525ab03eff5SChuck Lever __entry->req, __entry->num_sge, 526ab03eff5SChuck Lever (__entry->signaled ? ", signaled" : ""), 527ab03eff5SChuck Lever __entry->status 528ab03eff5SChuck Lever ) 529ab03eff5SChuck Lever ); 530ab03eff5SChuck Lever 531b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_post_recv, 532b4a7f91cSChuck Lever TP_PROTO( 533b4a7f91cSChuck Lever const struct rpcrdma_rep *rep, 534b4a7f91cSChuck Lever int status 535b4a7f91cSChuck Lever ), 536b4a7f91cSChuck Lever 537b4a7f91cSChuck Lever TP_ARGS(rep, status), 538b4a7f91cSChuck Lever 539b4a7f91cSChuck Lever TP_STRUCT__entry( 540b4a7f91cSChuck Lever __field(const void *, rep) 541b4a7f91cSChuck Lever __field(int, status) 542b4a7f91cSChuck Lever ), 543b4a7f91cSChuck Lever 544b4a7f91cSChuck Lever TP_fast_assign( 545b4a7f91cSChuck Lever __entry->rep = rep; 546b4a7f91cSChuck Lever __entry->status = status; 547b4a7f91cSChuck Lever ), 548b4a7f91cSChuck Lever 549b4a7f91cSChuck Lever TP_printk("rep=%p status=%d", 550b4a7f91cSChuck Lever __entry->rep, __entry->status 551b4a7f91cSChuck Lever ) 552b4a7f91cSChuck Lever ); 553b4a7f91cSChuck Lever 554ab03eff5SChuck Lever /** 555ab03eff5SChuck Lever ** Completion events 556ab03eff5SChuck Lever **/ 557ab03eff5SChuck Lever 558ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_wc_send, 559ab03eff5SChuck Lever TP_PROTO( 560ab03eff5SChuck Lever const struct rpcrdma_sendctx *sc, 561ab03eff5SChuck Lever const struct ib_wc *wc 562ab03eff5SChuck Lever ), 563ab03eff5SChuck Lever 564ab03eff5SChuck Lever TP_ARGS(sc, wc), 565ab03eff5SChuck Lever 566ab03eff5SChuck Lever TP_STRUCT__entry( 567ab03eff5SChuck Lever __field(const void *, req) 568ab03eff5SChuck Lever __field(unsigned int, unmap_count) 569ab03eff5SChuck Lever __field(unsigned int, status) 570ab03eff5SChuck Lever __field(unsigned int, vendor_err) 571ab03eff5SChuck Lever ), 572ab03eff5SChuck Lever 573ab03eff5SChuck Lever TP_fast_assign( 574ab03eff5SChuck Lever __entry->req = sc->sc_req; 575ab03eff5SChuck Lever __entry->unmap_count = sc->sc_unmap_count; 576ab03eff5SChuck Lever __entry->status = wc->status; 577ab03eff5SChuck Lever __entry->vendor_err = __entry->status ? wc->vendor_err : 0; 578ab03eff5SChuck Lever ), 579ab03eff5SChuck Lever 580ab03eff5SChuck Lever TP_printk("req=%p, unmapped %u pages: %s (%u/0x%x)", 581ab03eff5SChuck Lever __entry->req, __entry->unmap_count, 582ab03eff5SChuck Lever rdma_show_wc_status(__entry->status), 583ab03eff5SChuck Lever __entry->status, __entry->vendor_err 584ab03eff5SChuck Lever ) 585ab03eff5SChuck Lever ); 586ab03eff5SChuck Lever 587b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_wc_receive, 588b4a7f91cSChuck Lever TP_PROTO( 589b4a7f91cSChuck Lever const struct rpcrdma_rep *rep, 590b4a7f91cSChuck Lever const struct ib_wc *wc 591b4a7f91cSChuck Lever ), 592b4a7f91cSChuck Lever 593b4a7f91cSChuck Lever TP_ARGS(rep, wc), 594b4a7f91cSChuck Lever 595b4a7f91cSChuck Lever TP_STRUCT__entry( 596b4a7f91cSChuck Lever __field(const void *, rep) 597b4a7f91cSChuck Lever __field(unsigned int, byte_len) 598b4a7f91cSChuck Lever __field(unsigned int, status) 599b4a7f91cSChuck Lever __field(unsigned int, vendor_err) 600b4a7f91cSChuck Lever ), 601b4a7f91cSChuck Lever 602b4a7f91cSChuck Lever TP_fast_assign( 603b4a7f91cSChuck Lever __entry->rep = rep; 604b4a7f91cSChuck Lever __entry->byte_len = wc->byte_len; 605b4a7f91cSChuck Lever __entry->status = wc->status; 606b4a7f91cSChuck Lever __entry->vendor_err = __entry->status ? wc->vendor_err : 0; 607b4a7f91cSChuck Lever ), 608b4a7f91cSChuck Lever 609b4a7f91cSChuck Lever TP_printk("rep=%p, %u bytes: %s (%u/0x%x)", 610b4a7f91cSChuck Lever __entry->rep, __entry->byte_len, 611b4a7f91cSChuck Lever rdma_show_wc_status(__entry->status), 612b4a7f91cSChuck Lever __entry->status, __entry->vendor_err 613b4a7f91cSChuck Lever ) 614b4a7f91cSChuck Lever ); 615b4a7f91cSChuck Lever 61658f10ad4SChuck Lever DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_fastreg); 6172937fedeSChuck Lever DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_li); 6182937fedeSChuck Lever DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_li_wake); 6192937fedeSChuck Lever 6202937fedeSChuck Lever DEFINE_MR_EVENT(xprtrdma_localinv); 6212937fedeSChuck Lever DEFINE_MR_EVENT(xprtrdma_dma_unmap); 6222937fedeSChuck Lever DEFINE_MR_EVENT(xprtrdma_remoteinv); 6231c443effSChuck Lever DEFINE_MR_EVENT(xprtrdma_recover_mr); 62458f10ad4SChuck Lever 625b4a7f91cSChuck Lever /** 626b4a7f91cSChuck Lever ** Reply events 627b4a7f91cSChuck Lever **/ 628b4a7f91cSChuck Lever 629b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_reply, 630b4a7f91cSChuck Lever TP_PROTO( 631b4a7f91cSChuck Lever const struct rpc_task *task, 632b4a7f91cSChuck Lever const struct rpcrdma_rep *rep, 633b4a7f91cSChuck Lever const struct rpcrdma_req *req, 634b4a7f91cSChuck Lever unsigned int credits 635b4a7f91cSChuck Lever ), 636b4a7f91cSChuck Lever 637b4a7f91cSChuck Lever TP_ARGS(task, rep, req, credits), 638b4a7f91cSChuck Lever 639b4a7f91cSChuck Lever TP_STRUCT__entry( 640b4a7f91cSChuck Lever __field(unsigned int, task_id) 641b4a7f91cSChuck Lever __field(unsigned int, client_id) 642b4a7f91cSChuck Lever __field(const void *, rep) 643b4a7f91cSChuck Lever __field(const void *, req) 644b4a7f91cSChuck Lever __field(u32, xid) 645b4a7f91cSChuck Lever __field(unsigned int, credits) 646b4a7f91cSChuck Lever ), 647b4a7f91cSChuck Lever 648b4a7f91cSChuck Lever TP_fast_assign( 649b4a7f91cSChuck Lever __entry->task_id = task->tk_pid; 650b4a7f91cSChuck Lever __entry->client_id = task->tk_client->cl_clid; 651b4a7f91cSChuck Lever __entry->rep = rep; 652b4a7f91cSChuck Lever __entry->req = req; 653b4a7f91cSChuck Lever __entry->xid = be32_to_cpu(rep->rr_xid); 654b4a7f91cSChuck Lever __entry->credits = credits; 655b4a7f91cSChuck Lever ), 656b4a7f91cSChuck Lever 657b4a7f91cSChuck Lever TP_printk("task:%u@%u xid=0x%08x, %u credits, rep=%p -> req=%p", 658b4a7f91cSChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 659b4a7f91cSChuck Lever __entry->credits, __entry->rep, __entry->req 660b4a7f91cSChuck Lever ) 661b4a7f91cSChuck Lever ); 662b4a7f91cSChuck Lever 663b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_defer_cmp, 664b4a7f91cSChuck Lever TP_PROTO( 665b4a7f91cSChuck Lever const struct rpcrdma_rep *rep 666b4a7f91cSChuck Lever ), 667b4a7f91cSChuck Lever 668b4a7f91cSChuck Lever TP_ARGS(rep), 669b4a7f91cSChuck Lever 670b4a7f91cSChuck Lever TP_STRUCT__entry( 671b4a7f91cSChuck Lever __field(unsigned int, task_id) 672b4a7f91cSChuck Lever __field(unsigned int, client_id) 673b4a7f91cSChuck Lever __field(const void *, rep) 674b4a7f91cSChuck Lever __field(u32, xid) 675b4a7f91cSChuck Lever ), 676b4a7f91cSChuck Lever 677b4a7f91cSChuck Lever TP_fast_assign( 678b4a7f91cSChuck Lever __entry->task_id = rep->rr_rqst->rq_task->tk_pid; 679b4a7f91cSChuck Lever __entry->client_id = rep->rr_rqst->rq_task->tk_client->cl_clid; 680b4a7f91cSChuck Lever __entry->rep = rep; 681b4a7f91cSChuck Lever __entry->xid = be32_to_cpu(rep->rr_xid); 682b4a7f91cSChuck Lever ), 683b4a7f91cSChuck Lever 684b4a7f91cSChuck Lever TP_printk("task:%u@%u xid=0x%08x rep=%p", 685b4a7f91cSChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 686b4a7f91cSChuck Lever __entry->rep 687b4a7f91cSChuck Lever ) 688b4a7f91cSChuck Lever ); 689b4a7f91cSChuck Lever 690b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_vers); 691b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_rqst); 692b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_short); 693b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_hdr); 694b4a7f91cSChuck Lever 695e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_fixup, 696e11b7c96SChuck Lever TP_PROTO( 697e11b7c96SChuck Lever const struct rpc_rqst *rqst, 698e11b7c96SChuck Lever int len, 699e11b7c96SChuck Lever int hdrlen 700e11b7c96SChuck Lever ), 701e11b7c96SChuck Lever 702e11b7c96SChuck Lever TP_ARGS(rqst, len, hdrlen), 703e11b7c96SChuck Lever 704e11b7c96SChuck Lever TP_STRUCT__entry( 705e11b7c96SChuck Lever __field(unsigned int, task_id) 706e11b7c96SChuck Lever __field(unsigned int, client_id) 707e11b7c96SChuck Lever __field(const void *, base) 708e11b7c96SChuck Lever __field(int, len) 709e11b7c96SChuck Lever __field(int, hdrlen) 710e11b7c96SChuck Lever ), 711e11b7c96SChuck Lever 712e11b7c96SChuck Lever TP_fast_assign( 713e11b7c96SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 714e11b7c96SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 715e11b7c96SChuck Lever __entry->base = rqst->rq_rcv_buf.head[0].iov_base; 716e11b7c96SChuck Lever __entry->len = len; 717e11b7c96SChuck Lever __entry->hdrlen = hdrlen; 718e11b7c96SChuck Lever ), 719e11b7c96SChuck Lever 720e11b7c96SChuck Lever TP_printk("task:%u@%u base=%p len=%d hdrlen=%d", 721e11b7c96SChuck Lever __entry->task_id, __entry->client_id, 722e11b7c96SChuck Lever __entry->base, __entry->len, __entry->hdrlen 723e11b7c96SChuck Lever ) 724e11b7c96SChuck Lever ); 725e11b7c96SChuck Lever 726e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_fixup_pg, 727e11b7c96SChuck Lever TP_PROTO( 728e11b7c96SChuck Lever const struct rpc_rqst *rqst, 729e11b7c96SChuck Lever int pageno, 730e11b7c96SChuck Lever const void *pos, 731e11b7c96SChuck Lever int len, 732e11b7c96SChuck Lever int curlen 733e11b7c96SChuck Lever ), 734e11b7c96SChuck Lever 735e11b7c96SChuck Lever TP_ARGS(rqst, pageno, pos, len, curlen), 736e11b7c96SChuck Lever 737e11b7c96SChuck Lever TP_STRUCT__entry( 738e11b7c96SChuck Lever __field(unsigned int, task_id) 739e11b7c96SChuck Lever __field(unsigned int, client_id) 740e11b7c96SChuck Lever __field(const void *, pos) 741e11b7c96SChuck Lever __field(int, pageno) 742e11b7c96SChuck Lever __field(int, len) 743e11b7c96SChuck Lever __field(int, curlen) 744e11b7c96SChuck Lever ), 745e11b7c96SChuck Lever 746e11b7c96SChuck Lever TP_fast_assign( 747e11b7c96SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 748e11b7c96SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 749e11b7c96SChuck Lever __entry->pos = pos; 750e11b7c96SChuck Lever __entry->pageno = pageno; 751e11b7c96SChuck Lever __entry->len = len; 752e11b7c96SChuck Lever __entry->curlen = curlen; 753e11b7c96SChuck Lever ), 754e11b7c96SChuck Lever 755e11b7c96SChuck Lever TP_printk("task:%u@%u pageno=%d pos=%p len=%d curlen=%d", 756e11b7c96SChuck Lever __entry->task_id, __entry->client_id, 757e11b7c96SChuck Lever __entry->pageno, __entry->pos, __entry->len, __entry->curlen 758e11b7c96SChuck Lever ) 759e11b7c96SChuck Lever ); 760e11b7c96SChuck Lever 761e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_decode_seg, 762e11b7c96SChuck Lever TP_PROTO( 763e11b7c96SChuck Lever u32 handle, 764e11b7c96SChuck Lever u32 length, 765e11b7c96SChuck Lever u64 offset 766e11b7c96SChuck Lever ), 767e11b7c96SChuck Lever 768e11b7c96SChuck Lever TP_ARGS(handle, length, offset), 769e11b7c96SChuck Lever 770e11b7c96SChuck Lever TP_STRUCT__entry( 771e11b7c96SChuck Lever __field(u32, handle) 772e11b7c96SChuck Lever __field(u32, length) 773e11b7c96SChuck Lever __field(u64, offset) 774e11b7c96SChuck Lever ), 775e11b7c96SChuck Lever 776e11b7c96SChuck Lever TP_fast_assign( 777e11b7c96SChuck Lever __entry->handle = handle; 778e11b7c96SChuck Lever __entry->length = length; 779e11b7c96SChuck Lever __entry->offset = offset; 780e11b7c96SChuck Lever ), 781e11b7c96SChuck Lever 782e11b7c96SChuck Lever TP_printk("%u@0x%016llx:0x%08x", 783e11b7c96SChuck Lever __entry->length, (unsigned long long)__entry->offset, 784e11b7c96SChuck Lever __entry->handle 785e11b7c96SChuck Lever ) 786e11b7c96SChuck Lever ); 787e11b7c96SChuck Lever 788fc1eb807SChuck Lever /** 789ae724676SChuck Lever ** Allocation/release of rpcrdma_reqs and rpcrdma_reps 790ae724676SChuck Lever **/ 791ae724676SChuck Lever 792ae724676SChuck Lever TRACE_EVENT(xprtrdma_allocate, 793ae724676SChuck Lever TP_PROTO( 794ae724676SChuck Lever const struct rpc_task *task, 795ae724676SChuck Lever const struct rpcrdma_req *req 796ae724676SChuck Lever ), 797ae724676SChuck Lever 798ae724676SChuck Lever TP_ARGS(task, req), 799ae724676SChuck Lever 800ae724676SChuck Lever TP_STRUCT__entry( 801ae724676SChuck Lever __field(unsigned int, task_id) 802ae724676SChuck Lever __field(unsigned int, client_id) 803ae724676SChuck Lever __field(const void *, req) 804ae724676SChuck Lever __field(const void *, rep) 805ae724676SChuck Lever __field(size_t, callsize) 806ae724676SChuck Lever __field(size_t, rcvsize) 807ae724676SChuck Lever ), 808ae724676SChuck Lever 809ae724676SChuck Lever TP_fast_assign( 810ae724676SChuck Lever __entry->task_id = task->tk_pid; 811ae724676SChuck Lever __entry->client_id = task->tk_client->cl_clid; 812ae724676SChuck Lever __entry->req = req; 813ae724676SChuck Lever __entry->rep = req ? req->rl_reply : NULL; 814ae724676SChuck Lever __entry->callsize = task->tk_rqstp->rq_callsize; 815ae724676SChuck Lever __entry->rcvsize = task->tk_rqstp->rq_rcvsize; 816ae724676SChuck Lever ), 817ae724676SChuck Lever 818ae724676SChuck Lever TP_printk("task:%u@%u req=%p rep=%p (%zu, %zu)", 819ae724676SChuck Lever __entry->task_id, __entry->client_id, 820ae724676SChuck Lever __entry->req, __entry->rep, 821ae724676SChuck Lever __entry->callsize, __entry->rcvsize 822ae724676SChuck Lever ) 823ae724676SChuck Lever ); 824ae724676SChuck Lever 825ae724676SChuck Lever TRACE_EVENT(xprtrdma_rpc_done, 826ae724676SChuck Lever TP_PROTO( 827ae724676SChuck Lever const struct rpc_task *task, 828ae724676SChuck Lever const struct rpcrdma_req *req 829ae724676SChuck Lever ), 830ae724676SChuck Lever 831ae724676SChuck Lever TP_ARGS(task, req), 832ae724676SChuck Lever 833ae724676SChuck Lever TP_STRUCT__entry( 834ae724676SChuck Lever __field(unsigned int, task_id) 835ae724676SChuck Lever __field(unsigned int, client_id) 836ae724676SChuck Lever __field(const void *, req) 837ae724676SChuck Lever __field(const void *, rep) 838ae724676SChuck Lever ), 839ae724676SChuck Lever 840ae724676SChuck Lever TP_fast_assign( 841ae724676SChuck Lever __entry->task_id = task->tk_pid; 842ae724676SChuck Lever __entry->client_id = task->tk_client->cl_clid; 843ae724676SChuck Lever __entry->req = req; 844ae724676SChuck Lever __entry->rep = req->rl_reply; 845ae724676SChuck Lever ), 846ae724676SChuck Lever 847ae724676SChuck Lever TP_printk("task:%u@%u req=%p rep=%p", 848ae724676SChuck Lever __entry->task_id, __entry->client_id, 849ae724676SChuck Lever __entry->req, __entry->rep 850ae724676SChuck Lever ) 851ae724676SChuck Lever ); 852ae724676SChuck Lever 853ae724676SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_noreps); 854ae724676SChuck Lever 855ae724676SChuck Lever /** 856fc1eb807SChuck Lever ** Callback events 857fc1eb807SChuck Lever **/ 858fc1eb807SChuck Lever 859fc1eb807SChuck Lever TRACE_EVENT(xprtrdma_cb_setup, 860fc1eb807SChuck Lever TP_PROTO( 861fc1eb807SChuck Lever const struct rpcrdma_xprt *r_xprt, 862fc1eb807SChuck Lever unsigned int reqs 863fc1eb807SChuck Lever ), 864fc1eb807SChuck Lever 865fc1eb807SChuck Lever TP_ARGS(r_xprt, reqs), 866fc1eb807SChuck Lever 867fc1eb807SChuck Lever TP_STRUCT__entry( 868fc1eb807SChuck Lever __field(const void *, r_xprt) 869fc1eb807SChuck Lever __field(unsigned int, reqs) 870fc1eb807SChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 871fc1eb807SChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 872fc1eb807SChuck Lever ), 873fc1eb807SChuck Lever 874fc1eb807SChuck Lever TP_fast_assign( 875fc1eb807SChuck Lever __entry->r_xprt = r_xprt; 876fc1eb807SChuck Lever __entry->reqs = reqs; 877fc1eb807SChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 878fc1eb807SChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 879fc1eb807SChuck Lever ), 880fc1eb807SChuck Lever 881fc1eb807SChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: %u reqs", 882fc1eb807SChuck Lever __get_str(addr), __get_str(port), 883fc1eb807SChuck Lever __entry->r_xprt, __entry->reqs 884fc1eb807SChuck Lever ) 885fc1eb807SChuck Lever ); 886fc1eb807SChuck Lever 887fc1eb807SChuck Lever DEFINE_CB_EVENT(xprtrdma_cb_call); 888fc1eb807SChuck Lever DEFINE_CB_EVENT(xprtrdma_cb_reply); 889fc1eb807SChuck Lever 89098895edbSChuck Lever /** 89198895edbSChuck Lever ** Server-side RPC/RDMA events 89298895edbSChuck Lever **/ 89398895edbSChuck Lever 89498895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_xprt_event, 89598895edbSChuck Lever TP_PROTO( 89698895edbSChuck Lever const struct svc_xprt *xprt 89798895edbSChuck Lever ), 89898895edbSChuck Lever 89998895edbSChuck Lever TP_ARGS(xprt), 90098895edbSChuck Lever 90198895edbSChuck Lever TP_STRUCT__entry( 90298895edbSChuck Lever __field(const void *, xprt) 90398895edbSChuck Lever __string(addr, xprt->xpt_remotebuf) 90498895edbSChuck Lever ), 90598895edbSChuck Lever 90698895edbSChuck Lever TP_fast_assign( 90798895edbSChuck Lever __entry->xprt = xprt; 90898895edbSChuck Lever __assign_str(addr, xprt->xpt_remotebuf); 90998895edbSChuck Lever ), 91098895edbSChuck Lever 91198895edbSChuck Lever TP_printk("xprt=%p addr=%s", 91298895edbSChuck Lever __entry->xprt, __get_str(addr) 91398895edbSChuck Lever ) 91498895edbSChuck Lever ); 91598895edbSChuck Lever 91698895edbSChuck Lever #define DEFINE_XPRT_EVENT(name) \ 91798895edbSChuck Lever DEFINE_EVENT(svcrdma_xprt_event, svcrdma_xprt_##name, \ 91898895edbSChuck Lever TP_PROTO( \ 91998895edbSChuck Lever const struct svc_xprt *xprt \ 92098895edbSChuck Lever ), \ 92198895edbSChuck Lever TP_ARGS(xprt)) 92298895edbSChuck Lever 92398895edbSChuck Lever DEFINE_XPRT_EVENT(accept); 92498895edbSChuck Lever DEFINE_XPRT_EVENT(fail); 92598895edbSChuck Lever DEFINE_XPRT_EVENT(free); 92698895edbSChuck Lever 92798895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_MSG); 92898895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_NOMSG); 92998895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_MSGP); 93098895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_DONE); 93198895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_ERROR); 93298895edbSChuck Lever 93398895edbSChuck Lever #define show_rpcrdma_proc(x) \ 93498895edbSChuck Lever __print_symbolic(x, \ 93598895edbSChuck Lever { RDMA_MSG, "RDMA_MSG" }, \ 93698895edbSChuck Lever { RDMA_NOMSG, "RDMA_NOMSG" }, \ 93798895edbSChuck Lever { RDMA_MSGP, "RDMA_MSGP" }, \ 93898895edbSChuck Lever { RDMA_DONE, "RDMA_DONE" }, \ 93998895edbSChuck Lever { RDMA_ERROR, "RDMA_ERROR" }) 94098895edbSChuck Lever 94198895edbSChuck Lever TRACE_EVENT(svcrdma_decode_rqst, 94298895edbSChuck Lever TP_PROTO( 94398895edbSChuck Lever __be32 *p, 94498895edbSChuck Lever unsigned int hdrlen 94598895edbSChuck Lever ), 94698895edbSChuck Lever 94798895edbSChuck Lever TP_ARGS(p, hdrlen), 94898895edbSChuck Lever 94998895edbSChuck Lever TP_STRUCT__entry( 95098895edbSChuck Lever __field(u32, xid) 95198895edbSChuck Lever __field(u32, vers) 95298895edbSChuck Lever __field(u32, proc) 95398895edbSChuck Lever __field(u32, credits) 95498895edbSChuck Lever __field(unsigned int, hdrlen) 95598895edbSChuck Lever ), 95698895edbSChuck Lever 95798895edbSChuck Lever TP_fast_assign( 95898895edbSChuck Lever __entry->xid = be32_to_cpup(p++); 95998895edbSChuck Lever __entry->vers = be32_to_cpup(p++); 96098895edbSChuck Lever __entry->credits = be32_to_cpup(p++); 96198895edbSChuck Lever __entry->proc = be32_to_cpup(p); 96298895edbSChuck Lever __entry->hdrlen = hdrlen; 96398895edbSChuck Lever ), 96498895edbSChuck Lever 96598895edbSChuck Lever TP_printk("xid=0x%08x vers=%u credits=%u proc=%s hdrlen=%u", 96698895edbSChuck Lever __entry->xid, __entry->vers, __entry->credits, 96798895edbSChuck Lever show_rpcrdma_proc(__entry->proc), __entry->hdrlen) 96898895edbSChuck Lever ); 96998895edbSChuck Lever 97098895edbSChuck Lever TRACE_EVENT(svcrdma_decode_short, 97198895edbSChuck Lever TP_PROTO( 97298895edbSChuck Lever unsigned int hdrlen 97398895edbSChuck Lever ), 97498895edbSChuck Lever 97598895edbSChuck Lever TP_ARGS(hdrlen), 97698895edbSChuck Lever 97798895edbSChuck Lever TP_STRUCT__entry( 97898895edbSChuck Lever __field(unsigned int, hdrlen) 97998895edbSChuck Lever ), 98098895edbSChuck Lever 98198895edbSChuck Lever TP_fast_assign( 98298895edbSChuck Lever __entry->hdrlen = hdrlen; 98398895edbSChuck Lever ), 98498895edbSChuck Lever 98598895edbSChuck Lever TP_printk("hdrlen=%u", __entry->hdrlen) 98698895edbSChuck Lever ); 98798895edbSChuck Lever 98898895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_badreq_event, 98998895edbSChuck Lever TP_PROTO( 99098895edbSChuck Lever __be32 *p 99198895edbSChuck Lever ), 99298895edbSChuck Lever 99398895edbSChuck Lever TP_ARGS(p), 99498895edbSChuck Lever 99598895edbSChuck Lever TP_STRUCT__entry( 99698895edbSChuck Lever __field(u32, xid) 99798895edbSChuck Lever __field(u32, vers) 99898895edbSChuck Lever __field(u32, proc) 99998895edbSChuck Lever __field(u32, credits) 100098895edbSChuck Lever ), 100198895edbSChuck Lever 100298895edbSChuck Lever TP_fast_assign( 100398895edbSChuck Lever __entry->xid = be32_to_cpup(p++); 100498895edbSChuck Lever __entry->vers = be32_to_cpup(p++); 100598895edbSChuck Lever __entry->credits = be32_to_cpup(p++); 100698895edbSChuck Lever __entry->proc = be32_to_cpup(p); 100798895edbSChuck Lever ), 100898895edbSChuck Lever 100998895edbSChuck Lever TP_printk("xid=0x%08x vers=%u credits=%u proc=%u", 101098895edbSChuck Lever __entry->xid, __entry->vers, __entry->credits, __entry->proc) 101198895edbSChuck Lever ); 101298895edbSChuck Lever 101398895edbSChuck Lever #define DEFINE_BADREQ_EVENT(name) \ 101498895edbSChuck Lever DEFINE_EVENT(svcrdma_badreq_event, svcrdma_decode_##name,\ 101598895edbSChuck Lever TP_PROTO( \ 101698895edbSChuck Lever __be32 *p \ 101798895edbSChuck Lever ), \ 101898895edbSChuck Lever TP_ARGS(p)) 101998895edbSChuck Lever 102098895edbSChuck Lever DEFINE_BADREQ_EVENT(badvers); 102198895edbSChuck Lever DEFINE_BADREQ_EVENT(drop); 102298895edbSChuck Lever DEFINE_BADREQ_EVENT(badproc); 102398895edbSChuck Lever DEFINE_BADREQ_EVENT(parse); 102498895edbSChuck Lever 102598895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_segment_event, 102698895edbSChuck Lever TP_PROTO( 102798895edbSChuck Lever u32 handle, 102898895edbSChuck Lever u32 length, 102998895edbSChuck Lever u64 offset 103098895edbSChuck Lever ), 103198895edbSChuck Lever 103298895edbSChuck Lever TP_ARGS(handle, length, offset), 103398895edbSChuck Lever 103498895edbSChuck Lever TP_STRUCT__entry( 103598895edbSChuck Lever __field(u32, handle) 103698895edbSChuck Lever __field(u32, length) 103798895edbSChuck Lever __field(u64, offset) 103898895edbSChuck Lever ), 103998895edbSChuck Lever 104098895edbSChuck Lever TP_fast_assign( 104198895edbSChuck Lever __entry->handle = handle; 104298895edbSChuck Lever __entry->length = length; 104398895edbSChuck Lever __entry->offset = offset; 104498895edbSChuck Lever ), 104598895edbSChuck Lever 104698895edbSChuck Lever TP_printk("%u@0x%016llx:0x%08x", 104798895edbSChuck Lever __entry->length, (unsigned long long)__entry->offset, 104898895edbSChuck Lever __entry->handle 104998895edbSChuck Lever ) 105098895edbSChuck Lever ); 105198895edbSChuck Lever 105298895edbSChuck Lever #define DEFINE_SEGMENT_EVENT(name) \ 105398895edbSChuck Lever DEFINE_EVENT(svcrdma_segment_event, svcrdma_encode_##name,\ 105498895edbSChuck Lever TP_PROTO( \ 105598895edbSChuck Lever u32 handle, \ 105698895edbSChuck Lever u32 length, \ 105798895edbSChuck Lever u64 offset \ 105898895edbSChuck Lever ), \ 105998895edbSChuck Lever TP_ARGS(handle, length, offset)) 106098895edbSChuck Lever 106198895edbSChuck Lever DEFINE_SEGMENT_EVENT(rseg); 106298895edbSChuck Lever DEFINE_SEGMENT_EVENT(wseg); 106398895edbSChuck Lever 106498895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_chunk_event, 106598895edbSChuck Lever TP_PROTO( 106698895edbSChuck Lever u32 length 106798895edbSChuck Lever ), 106898895edbSChuck Lever 106998895edbSChuck Lever TP_ARGS(length), 107098895edbSChuck Lever 107198895edbSChuck Lever TP_STRUCT__entry( 107298895edbSChuck Lever __field(u32, length) 107398895edbSChuck Lever ), 107498895edbSChuck Lever 107598895edbSChuck Lever TP_fast_assign( 107698895edbSChuck Lever __entry->length = length; 107798895edbSChuck Lever ), 107898895edbSChuck Lever 107998895edbSChuck Lever TP_printk("length=%u", 108098895edbSChuck Lever __entry->length 108198895edbSChuck Lever ) 108298895edbSChuck Lever ); 108398895edbSChuck Lever 108498895edbSChuck Lever #define DEFINE_CHUNK_EVENT(name) \ 108598895edbSChuck Lever DEFINE_EVENT(svcrdma_chunk_event, svcrdma_encode_##name,\ 108698895edbSChuck Lever TP_PROTO( \ 108798895edbSChuck Lever u32 length \ 108898895edbSChuck Lever ), \ 108998895edbSChuck Lever TP_ARGS(length)) 109098895edbSChuck Lever 109198895edbSChuck Lever DEFINE_CHUNK_EVENT(pzr); 109298895edbSChuck Lever DEFINE_CHUNK_EVENT(write); 109398895edbSChuck Lever DEFINE_CHUNK_EVENT(reply); 109498895edbSChuck Lever 109598895edbSChuck Lever TRACE_EVENT(svcrdma_encode_read, 109698895edbSChuck Lever TP_PROTO( 109798895edbSChuck Lever u32 length, 109898895edbSChuck Lever u32 position 109998895edbSChuck Lever ), 110098895edbSChuck Lever 110198895edbSChuck Lever TP_ARGS(length, position), 110298895edbSChuck Lever 110398895edbSChuck Lever TP_STRUCT__entry( 110498895edbSChuck Lever __field(u32, length) 110598895edbSChuck Lever __field(u32, position) 110698895edbSChuck Lever ), 110798895edbSChuck Lever 110898895edbSChuck Lever TP_fast_assign( 110998895edbSChuck Lever __entry->length = length; 111098895edbSChuck Lever __entry->position = position; 111198895edbSChuck Lever ), 111298895edbSChuck Lever 111398895edbSChuck Lever TP_printk("length=%u position=%u", 111498895edbSChuck Lever __entry->length, __entry->position 111598895edbSChuck Lever ) 111698895edbSChuck Lever ); 111798895edbSChuck Lever 111898895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_error_event, 111998895edbSChuck Lever TP_PROTO( 112098895edbSChuck Lever __be32 xid 112198895edbSChuck Lever ), 112298895edbSChuck Lever 112398895edbSChuck Lever TP_ARGS(xid), 112498895edbSChuck Lever 112598895edbSChuck Lever TP_STRUCT__entry( 112698895edbSChuck Lever __field(u32, xid) 112798895edbSChuck Lever ), 112898895edbSChuck Lever 112998895edbSChuck Lever TP_fast_assign( 113098895edbSChuck Lever __entry->xid = be32_to_cpu(xid); 113198895edbSChuck Lever ), 113298895edbSChuck Lever 113398895edbSChuck Lever TP_printk("xid=0x%08x", 113498895edbSChuck Lever __entry->xid 113598895edbSChuck Lever ) 113698895edbSChuck Lever ); 113798895edbSChuck Lever 113898895edbSChuck Lever #define DEFINE_ERROR_EVENT(name) \ 113998895edbSChuck Lever DEFINE_EVENT(svcrdma_error_event, svcrdma_err_##name, \ 114098895edbSChuck Lever TP_PROTO( \ 114198895edbSChuck Lever __be32 xid \ 114298895edbSChuck Lever ), \ 114398895edbSChuck Lever TP_ARGS(xid)) 114498895edbSChuck Lever 114598895edbSChuck Lever DEFINE_ERROR_EVENT(vers); 114698895edbSChuck Lever DEFINE_ERROR_EVENT(chunk); 114798895edbSChuck Lever 1148e48f083eSChuck Lever #endif /* _TRACE_RPCRDMA_H */ 1149e48f083eSChuck Lever 1150e48f083eSChuck Lever #include <trace/define_trace.h> 1151