1e48f083eSChuck Lever /* SPDX-License-Identifier: GPL-2.0 */ 2e48f083eSChuck Lever /* 3e48f083eSChuck Lever * Copyright (c) 2017 Oracle. All rights reserved. 4e48f083eSChuck Lever */ 5e48f083eSChuck Lever #undef TRACE_SYSTEM 6e48f083eSChuck Lever #define TRACE_SYSTEM rpcrdma 7e48f083eSChuck Lever 8e48f083eSChuck Lever #if !defined(_TRACE_RPCRDMA_H) || defined(TRACE_HEADER_MULTI_READ) 9e48f083eSChuck Lever #define _TRACE_RPCRDMA_H 10e48f083eSChuck Lever 11e48f083eSChuck Lever #include <linux/tracepoint.h> 12e48f083eSChuck Lever #include <trace/events/rdma.h> 13e48f083eSChuck Lever 14ab03eff5SChuck Lever /** 15b4a7f91cSChuck Lever ** Event classes 16b4a7f91cSChuck Lever **/ 17b4a7f91cSChuck Lever 18b4a7f91cSChuck Lever DECLARE_EVENT_CLASS(xprtrdma_reply_event, 19b4a7f91cSChuck Lever TP_PROTO( 20b4a7f91cSChuck Lever const struct rpcrdma_rep *rep 21b4a7f91cSChuck Lever ), 22b4a7f91cSChuck Lever 23b4a7f91cSChuck Lever TP_ARGS(rep), 24b4a7f91cSChuck Lever 25b4a7f91cSChuck Lever TP_STRUCT__entry( 26b4a7f91cSChuck Lever __field(const void *, rep) 27b4a7f91cSChuck Lever __field(const void *, r_xprt) 28b4a7f91cSChuck Lever __field(u32, xid) 29b4a7f91cSChuck Lever __field(u32, version) 30b4a7f91cSChuck Lever __field(u32, proc) 31b4a7f91cSChuck Lever ), 32b4a7f91cSChuck Lever 33b4a7f91cSChuck Lever TP_fast_assign( 34b4a7f91cSChuck Lever __entry->rep = rep; 35b4a7f91cSChuck Lever __entry->r_xprt = rep->rr_rxprt; 36b4a7f91cSChuck Lever __entry->xid = be32_to_cpu(rep->rr_xid); 37b4a7f91cSChuck Lever __entry->version = be32_to_cpu(rep->rr_vers); 38b4a7f91cSChuck Lever __entry->proc = be32_to_cpu(rep->rr_proc); 39b4a7f91cSChuck Lever ), 40b4a7f91cSChuck Lever 41b4a7f91cSChuck Lever TP_printk("rxprt %p xid=0x%08x rep=%p: version %u proc %u", 42b4a7f91cSChuck Lever __entry->r_xprt, __entry->xid, __entry->rep, 43b4a7f91cSChuck Lever __entry->version, __entry->proc 44b4a7f91cSChuck Lever ) 45b4a7f91cSChuck Lever ); 46b4a7f91cSChuck Lever 47b4a7f91cSChuck Lever #define DEFINE_REPLY_EVENT(name) \ 48b4a7f91cSChuck Lever DEFINE_EVENT(xprtrdma_reply_event, name, \ 49b4a7f91cSChuck Lever TP_PROTO( \ 50b4a7f91cSChuck Lever const struct rpcrdma_rep *rep \ 51b4a7f91cSChuck Lever ), \ 52b4a7f91cSChuck Lever TP_ARGS(rep)) 53b4a7f91cSChuck Lever 541c443effSChuck Lever DECLARE_EVENT_CLASS(xprtrdma_rxprt, 551c443effSChuck Lever TP_PROTO( 561c443effSChuck Lever const struct rpcrdma_xprt *r_xprt 571c443effSChuck Lever ), 581c443effSChuck Lever 591c443effSChuck Lever TP_ARGS(r_xprt), 601c443effSChuck Lever 611c443effSChuck Lever TP_STRUCT__entry( 621c443effSChuck Lever __field(const void *, r_xprt) 631c443effSChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 641c443effSChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 651c443effSChuck Lever ), 661c443effSChuck Lever 671c443effSChuck Lever TP_fast_assign( 681c443effSChuck Lever __entry->r_xprt = r_xprt; 691c443effSChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 701c443effSChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 711c443effSChuck Lever ), 721c443effSChuck Lever 731c443effSChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p", 741c443effSChuck Lever __get_str(addr), __get_str(port), __entry->r_xprt 751c443effSChuck Lever ) 761c443effSChuck Lever ); 771c443effSChuck Lever 781c443effSChuck Lever #define DEFINE_RXPRT_EVENT(name) \ 791c443effSChuck Lever DEFINE_EVENT(xprtrdma_rxprt, name, \ 801c443effSChuck Lever TP_PROTO( \ 811c443effSChuck Lever const struct rpcrdma_xprt *r_xprt \ 821c443effSChuck Lever ), \ 831c443effSChuck Lever TP_ARGS(r_xprt)) 841c443effSChuck Lever 8558f10ad4SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_rdch_event, 8658f10ad4SChuck Lever TP_PROTO( 8758f10ad4SChuck Lever const struct rpc_task *task, 8858f10ad4SChuck Lever unsigned int pos, 8958f10ad4SChuck Lever struct rpcrdma_mr *mr, 9058f10ad4SChuck Lever int nsegs 9158f10ad4SChuck Lever ), 9258f10ad4SChuck Lever 9358f10ad4SChuck Lever TP_ARGS(task, pos, mr, nsegs), 9458f10ad4SChuck Lever 9558f10ad4SChuck Lever TP_STRUCT__entry( 9658f10ad4SChuck Lever __field(unsigned int, task_id) 9758f10ad4SChuck Lever __field(unsigned int, client_id) 9858f10ad4SChuck Lever __field(const void *, mr) 9958f10ad4SChuck Lever __field(unsigned int, pos) 10058f10ad4SChuck Lever __field(int, nents) 10158f10ad4SChuck Lever __field(u32, handle) 10258f10ad4SChuck Lever __field(u32, length) 10358f10ad4SChuck Lever __field(u64, offset) 10458f10ad4SChuck Lever __field(int, nsegs) 10558f10ad4SChuck Lever ), 10658f10ad4SChuck Lever 10758f10ad4SChuck Lever TP_fast_assign( 10858f10ad4SChuck Lever __entry->task_id = task->tk_pid; 10958f10ad4SChuck Lever __entry->client_id = task->tk_client->cl_clid; 11058f10ad4SChuck Lever __entry->mr = mr; 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 11958f10ad4SChuck Lever TP_printk("task:%u@%u mr=%p pos=%u %u@0x%016llx:0x%08x (%s)", 12058f10ad4SChuck Lever __entry->task_id, __entry->client_id, __entry->mr, 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) \ 12858f10ad4SChuck Lever DEFINE_EVENT(xprtrdma_rdch_event, 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(const void *, mr) 15058f10ad4SChuck Lever __field(int, nents) 15158f10ad4SChuck Lever __field(u32, handle) 15258f10ad4SChuck Lever __field(u32, length) 15358f10ad4SChuck Lever __field(u64, offset) 15458f10ad4SChuck Lever __field(int, nsegs) 15558f10ad4SChuck Lever ), 15658f10ad4SChuck Lever 15758f10ad4SChuck Lever TP_fast_assign( 15858f10ad4SChuck Lever __entry->task_id = task->tk_pid; 15958f10ad4SChuck Lever __entry->client_id = task->tk_client->cl_clid; 16058f10ad4SChuck Lever __entry->mr = mr; 16158f10ad4SChuck Lever __entry->nents = mr->mr_nents; 16258f10ad4SChuck Lever __entry->handle = mr->mr_handle; 16358f10ad4SChuck Lever __entry->length = mr->mr_length; 16458f10ad4SChuck Lever __entry->offset = mr->mr_offset; 16558f10ad4SChuck Lever __entry->nsegs = nsegs; 16658f10ad4SChuck Lever ), 16758f10ad4SChuck Lever 16858f10ad4SChuck Lever TP_printk("task:%u@%u mr=%p %u@0x%016llx:0x%08x (%s)", 16958f10ad4SChuck Lever __entry->task_id, __entry->client_id, __entry->mr, 17058f10ad4SChuck Lever __entry->length, (unsigned long long)__entry->offset, 17158f10ad4SChuck Lever __entry->handle, 17258f10ad4SChuck Lever __entry->nents < __entry->nsegs ? "more" : "last" 17358f10ad4SChuck Lever ) 17458f10ad4SChuck Lever ); 17558f10ad4SChuck Lever 17658f10ad4SChuck Lever #define DEFINE_WRCH_EVENT(name) \ 17758f10ad4SChuck Lever DEFINE_EVENT(xprtrdma_wrch_event, name, \ 17858f10ad4SChuck Lever TP_PROTO( \ 17958f10ad4SChuck Lever const struct rpc_task *task, \ 18058f10ad4SChuck Lever struct rpcrdma_mr *mr, \ 18158f10ad4SChuck Lever int nsegs \ 18258f10ad4SChuck Lever ), \ 18358f10ad4SChuck Lever TP_ARGS(task, mr, nsegs)) 18458f10ad4SChuck Lever 18558f10ad4SChuck Lever TRACE_DEFINE_ENUM(FRWR_IS_INVALID); 18658f10ad4SChuck Lever TRACE_DEFINE_ENUM(FRWR_IS_VALID); 18758f10ad4SChuck Lever TRACE_DEFINE_ENUM(FRWR_FLUSHED_FR); 18858f10ad4SChuck Lever TRACE_DEFINE_ENUM(FRWR_FLUSHED_LI); 18958f10ad4SChuck Lever 19058f10ad4SChuck Lever #define xprtrdma_show_frwr_state(x) \ 19158f10ad4SChuck Lever __print_symbolic(x, \ 19258f10ad4SChuck Lever { FRWR_IS_INVALID, "INVALID" }, \ 19358f10ad4SChuck Lever { FRWR_IS_VALID, "VALID" }, \ 19458f10ad4SChuck Lever { FRWR_FLUSHED_FR, "FLUSHED_FR" }, \ 19558f10ad4SChuck Lever { FRWR_FLUSHED_LI, "FLUSHED_LI" }) 19658f10ad4SChuck Lever 19758f10ad4SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_frwr_done, 19858f10ad4SChuck Lever TP_PROTO( 19958f10ad4SChuck Lever const struct ib_wc *wc, 20058f10ad4SChuck Lever const struct rpcrdma_frwr *frwr 20158f10ad4SChuck Lever ), 20258f10ad4SChuck Lever 20358f10ad4SChuck Lever TP_ARGS(wc, frwr), 20458f10ad4SChuck Lever 20558f10ad4SChuck Lever TP_STRUCT__entry( 20658f10ad4SChuck Lever __field(const void *, mr) 20758f10ad4SChuck Lever __field(unsigned int, state) 20858f10ad4SChuck Lever __field(unsigned int, status) 20958f10ad4SChuck Lever __field(unsigned int, vendor_err) 21058f10ad4SChuck Lever ), 21158f10ad4SChuck Lever 21258f10ad4SChuck Lever TP_fast_assign( 21358f10ad4SChuck Lever __entry->mr = container_of(frwr, struct rpcrdma_mr, frwr); 21458f10ad4SChuck Lever __entry->state = frwr->fr_state; 21558f10ad4SChuck Lever __entry->status = wc->status; 21658f10ad4SChuck Lever __entry->vendor_err = __entry->status ? wc->vendor_err : 0; 21758f10ad4SChuck Lever ), 21858f10ad4SChuck Lever 21958f10ad4SChuck Lever TP_printk( 22058f10ad4SChuck Lever "mr=%p state=%s: %s (%u/0x%x)", 22158f10ad4SChuck Lever __entry->mr, xprtrdma_show_frwr_state(__entry->state), 22258f10ad4SChuck Lever rdma_show_wc_status(__entry->status), 22358f10ad4SChuck Lever __entry->status, __entry->vendor_err 22458f10ad4SChuck Lever ) 22558f10ad4SChuck Lever ); 22658f10ad4SChuck Lever 22758f10ad4SChuck Lever #define DEFINE_FRWR_DONE_EVENT(name) \ 22858f10ad4SChuck Lever DEFINE_EVENT(xprtrdma_frwr_done, name, \ 22958f10ad4SChuck Lever TP_PROTO( \ 23058f10ad4SChuck Lever const struct ib_wc *wc, \ 23158f10ad4SChuck Lever const struct rpcrdma_frwr *frwr \ 23258f10ad4SChuck Lever ), \ 23358f10ad4SChuck Lever TP_ARGS(wc, frwr)) 23458f10ad4SChuck Lever 2352937fedeSChuck Lever DECLARE_EVENT_CLASS(xprtrdma_mr, 2362937fedeSChuck Lever TP_PROTO( 2372937fedeSChuck Lever const struct rpcrdma_mr *mr 2382937fedeSChuck Lever ), 2392937fedeSChuck Lever 2402937fedeSChuck Lever TP_ARGS(mr), 2412937fedeSChuck Lever 2422937fedeSChuck Lever TP_STRUCT__entry( 2432937fedeSChuck Lever __field(const void *, mr) 2442937fedeSChuck Lever __field(u32, handle) 2452937fedeSChuck Lever __field(u32, length) 2462937fedeSChuck Lever __field(u64, offset) 2472937fedeSChuck Lever ), 2482937fedeSChuck Lever 2492937fedeSChuck Lever TP_fast_assign( 2502937fedeSChuck Lever __entry->mr = mr; 2512937fedeSChuck Lever __entry->handle = mr->mr_handle; 2522937fedeSChuck Lever __entry->length = mr->mr_length; 2532937fedeSChuck Lever __entry->offset = mr->mr_offset; 2542937fedeSChuck Lever ), 2552937fedeSChuck Lever 2562937fedeSChuck Lever TP_printk("mr=%p %u@0x%016llx:0x%08x", 2572937fedeSChuck Lever __entry->mr, __entry->length, 2582937fedeSChuck Lever (unsigned long long)__entry->offset, 2592937fedeSChuck Lever __entry->handle 2602937fedeSChuck Lever ) 2612937fedeSChuck Lever ); 2622937fedeSChuck Lever 2632937fedeSChuck Lever #define DEFINE_MR_EVENT(name) \ 2642937fedeSChuck Lever DEFINE_EVENT(xprtrdma_mr, name, \ 2652937fedeSChuck Lever TP_PROTO( \ 2662937fedeSChuck Lever const struct rpcrdma_mr *mr \ 2672937fedeSChuck Lever ), \ 2682937fedeSChuck Lever TP_ARGS(mr)) 2692937fedeSChuck Lever 270fc1eb807SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_cb_event, 271fc1eb807SChuck Lever TP_PROTO( 272fc1eb807SChuck Lever const struct rpc_rqst *rqst 273fc1eb807SChuck Lever ), 274fc1eb807SChuck Lever 275fc1eb807SChuck Lever TP_ARGS(rqst), 276fc1eb807SChuck Lever 277fc1eb807SChuck Lever TP_STRUCT__entry( 278fc1eb807SChuck Lever __field(const void *, rqst) 279fc1eb807SChuck Lever __field(const void *, rep) 280fc1eb807SChuck Lever __field(const void *, req) 281fc1eb807SChuck Lever __field(u32, xid) 282fc1eb807SChuck Lever ), 283fc1eb807SChuck Lever 284fc1eb807SChuck Lever TP_fast_assign( 285fc1eb807SChuck Lever __entry->rqst = rqst; 286fc1eb807SChuck Lever __entry->req = rpcr_to_rdmar(rqst); 287fc1eb807SChuck Lever __entry->rep = rpcr_to_rdmar(rqst)->rl_reply; 288fc1eb807SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 289fc1eb807SChuck Lever ), 290fc1eb807SChuck Lever 291fc1eb807SChuck Lever TP_printk("xid=0x%08x, rqst=%p req=%p rep=%p", 292fc1eb807SChuck Lever __entry->xid, __entry->rqst, __entry->req, __entry->rep 293fc1eb807SChuck Lever ) 294fc1eb807SChuck Lever ); 295fc1eb807SChuck Lever 296fc1eb807SChuck Lever #define DEFINE_CB_EVENT(name) \ 297fc1eb807SChuck Lever DEFINE_EVENT(xprtrdma_cb_event, name, \ 298fc1eb807SChuck Lever TP_PROTO( \ 299fc1eb807SChuck Lever const struct rpc_rqst *rqst \ 300fc1eb807SChuck Lever ), \ 301fc1eb807SChuck Lever TP_ARGS(rqst)) 302fc1eb807SChuck Lever 303b4a7f91cSChuck Lever /** 304b4744e00SChuck Lever ** Connection events 305b4744e00SChuck Lever **/ 306b4744e00SChuck Lever 307b4744e00SChuck Lever TRACE_EVENT(xprtrdma_conn_upcall, 308b4744e00SChuck Lever TP_PROTO( 309b4744e00SChuck Lever const struct rpcrdma_xprt *r_xprt, 310b4744e00SChuck Lever struct rdma_cm_event *event 311b4744e00SChuck Lever ), 312b4744e00SChuck Lever 313b4744e00SChuck Lever TP_ARGS(r_xprt, event), 314b4744e00SChuck Lever 315b4744e00SChuck Lever TP_STRUCT__entry( 316b4744e00SChuck Lever __field(const void *, r_xprt) 317b4744e00SChuck Lever __field(unsigned int, event) 318b4744e00SChuck Lever __field(int, status) 319b4744e00SChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 320b4744e00SChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 321b4744e00SChuck Lever ), 322b4744e00SChuck Lever 323b4744e00SChuck Lever TP_fast_assign( 324b4744e00SChuck Lever __entry->r_xprt = r_xprt; 325b4744e00SChuck Lever __entry->event = event->event; 326b4744e00SChuck Lever __entry->status = event->status; 327b4744e00SChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 328b4744e00SChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 329b4744e00SChuck Lever ), 330b4744e00SChuck Lever 331b4744e00SChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: %s (%u/%d)", 332b4744e00SChuck Lever __get_str(addr), __get_str(port), 333b4744e00SChuck Lever __entry->r_xprt, rdma_show_cm_event(__entry->event), 334b4744e00SChuck Lever __entry->event, __entry->status 335b4744e00SChuck Lever ) 336b4744e00SChuck Lever ); 337b4744e00SChuck Lever 338b4744e00SChuck Lever TRACE_EVENT(xprtrdma_disconnect, 339b4744e00SChuck Lever TP_PROTO( 340b4744e00SChuck Lever const struct rpcrdma_xprt *r_xprt, 341b4744e00SChuck Lever int status 342b4744e00SChuck Lever ), 343b4744e00SChuck Lever 344b4744e00SChuck Lever TP_ARGS(r_xprt, status), 345b4744e00SChuck Lever 346b4744e00SChuck Lever TP_STRUCT__entry( 347b4744e00SChuck Lever __field(const void *, r_xprt) 348b4744e00SChuck Lever __field(int, status) 349b4744e00SChuck Lever __field(int, connected) 350b4744e00SChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 351b4744e00SChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 352b4744e00SChuck Lever ), 353b4744e00SChuck Lever 354b4744e00SChuck Lever TP_fast_assign( 355b4744e00SChuck Lever __entry->r_xprt = r_xprt; 356b4744e00SChuck Lever __entry->status = status; 357b4744e00SChuck Lever __entry->connected = r_xprt->rx_ep.rep_connected; 358b4744e00SChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 359b4744e00SChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 360b4744e00SChuck Lever ), 361b4744e00SChuck Lever 362b4744e00SChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: status=%d %sconnected", 363b4744e00SChuck Lever __get_str(addr), __get_str(port), 364b4744e00SChuck Lever __entry->r_xprt, __entry->status, 365b4744e00SChuck Lever __entry->connected == 1 ? "still " : "dis" 366b4744e00SChuck Lever ) 367b4744e00SChuck Lever ); 368b4744e00SChuck Lever 369b4744e00SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_conn_start); 370b4744e00SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_conn_tout); 371b4744e00SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_create); 372b4744e00SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_destroy); 373b4744e00SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_remove); 374b4744e00SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_reinsert); 375b4744e00SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_reconnect); 376b4744e00SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_inject_dsc); 377b4744e00SChuck Lever 378b4744e00SChuck Lever /** 379ab03eff5SChuck Lever ** Call events 380ab03eff5SChuck Lever **/ 381ab03eff5SChuck Lever 3821c443effSChuck Lever TRACE_EVENT(xprtrdma_createmrs, 3831c443effSChuck Lever TP_PROTO( 3841c443effSChuck Lever const struct rpcrdma_xprt *r_xprt, 3851c443effSChuck Lever unsigned int count 3861c443effSChuck Lever ), 3871c443effSChuck Lever 3881c443effSChuck Lever TP_ARGS(r_xprt, count), 3891c443effSChuck Lever 3901c443effSChuck Lever TP_STRUCT__entry( 3911c443effSChuck Lever __field(const void *, r_xprt) 3921c443effSChuck Lever __field(unsigned int, count) 3931c443effSChuck Lever ), 3941c443effSChuck Lever 3951c443effSChuck Lever TP_fast_assign( 3961c443effSChuck Lever __entry->r_xprt = r_xprt; 3971c443effSChuck Lever __entry->count = count; 3981c443effSChuck Lever ), 3991c443effSChuck Lever 4001c443effSChuck Lever TP_printk("r_xprt=%p: created %u MRs", 4011c443effSChuck Lever __entry->r_xprt, __entry->count 4021c443effSChuck Lever ) 4031c443effSChuck Lever ); 4041c443effSChuck Lever 4051c443effSChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_nomrs); 4061c443effSChuck Lever 40758f10ad4SChuck Lever DEFINE_RDCH_EVENT(xprtrdma_read_chunk); 40858f10ad4SChuck Lever DEFINE_WRCH_EVENT(xprtrdma_write_chunk); 40958f10ad4SChuck Lever DEFINE_WRCH_EVENT(xprtrdma_reply_chunk); 41058f10ad4SChuck Lever 411ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch); 412ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_readch); 413ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_areadch); 414ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_writech); 415ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_replych); 416ab03eff5SChuck Lever 417ab03eff5SChuck Lever #define xprtrdma_show_chunktype(x) \ 418ab03eff5SChuck Lever __print_symbolic(x, \ 419ab03eff5SChuck Lever { rpcrdma_noch, "inline" }, \ 420ab03eff5SChuck Lever { rpcrdma_readch, "read list" }, \ 421ab03eff5SChuck Lever { rpcrdma_areadch, "*read list" }, \ 422ab03eff5SChuck Lever { rpcrdma_writech, "write list" }, \ 423ab03eff5SChuck Lever { rpcrdma_replych, "reply chunk" }) 424ab03eff5SChuck Lever 425ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_marshal, 426ab03eff5SChuck Lever TP_PROTO( 427ab03eff5SChuck Lever const struct rpc_rqst *rqst, 428ab03eff5SChuck Lever unsigned int hdrlen, 429ab03eff5SChuck Lever unsigned int rtype, 430ab03eff5SChuck Lever unsigned int wtype 431ab03eff5SChuck Lever ), 432ab03eff5SChuck Lever 433ab03eff5SChuck Lever TP_ARGS(rqst, hdrlen, rtype, wtype), 434ab03eff5SChuck Lever 435ab03eff5SChuck Lever TP_STRUCT__entry( 436ab03eff5SChuck Lever __field(unsigned int, task_id) 437ab03eff5SChuck Lever __field(unsigned int, client_id) 438ab03eff5SChuck Lever __field(u32, xid) 439ab03eff5SChuck Lever __field(unsigned int, hdrlen) 440ab03eff5SChuck Lever __field(unsigned int, headlen) 441ab03eff5SChuck Lever __field(unsigned int, pagelen) 442ab03eff5SChuck Lever __field(unsigned int, taillen) 443ab03eff5SChuck Lever __field(unsigned int, rtype) 444ab03eff5SChuck Lever __field(unsigned int, wtype) 445ab03eff5SChuck Lever ), 446ab03eff5SChuck Lever 447ab03eff5SChuck Lever TP_fast_assign( 448ab03eff5SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 449ab03eff5SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 450ab03eff5SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 451ab03eff5SChuck Lever __entry->hdrlen = hdrlen; 452ab03eff5SChuck Lever __entry->headlen = rqst->rq_snd_buf.head[0].iov_len; 453ab03eff5SChuck Lever __entry->pagelen = rqst->rq_snd_buf.page_len; 454ab03eff5SChuck Lever __entry->taillen = rqst->rq_snd_buf.tail[0].iov_len; 455ab03eff5SChuck Lever __entry->rtype = rtype; 456ab03eff5SChuck Lever __entry->wtype = wtype; 457ab03eff5SChuck Lever ), 458ab03eff5SChuck Lever 459ab03eff5SChuck Lever TP_printk("task:%u@%u xid=0x%08x: hdr=%u xdr=%u/%u/%u %s/%s", 460ab03eff5SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 461ab03eff5SChuck Lever __entry->hdrlen, 462ab03eff5SChuck Lever __entry->headlen, __entry->pagelen, __entry->taillen, 463ab03eff5SChuck Lever xprtrdma_show_chunktype(__entry->rtype), 464ab03eff5SChuck Lever xprtrdma_show_chunktype(__entry->wtype) 465ab03eff5SChuck Lever ) 466ab03eff5SChuck Lever ); 467ab03eff5SChuck Lever 468ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_post_send, 469ab03eff5SChuck Lever TP_PROTO( 470ab03eff5SChuck Lever const struct rpcrdma_req *req, 471ab03eff5SChuck Lever int status 472ab03eff5SChuck Lever ), 473ab03eff5SChuck Lever 474ab03eff5SChuck Lever TP_ARGS(req, status), 475ab03eff5SChuck Lever 476ab03eff5SChuck Lever TP_STRUCT__entry( 477ab03eff5SChuck Lever __field(const void *, req) 478ab03eff5SChuck Lever __field(int, num_sge) 479ab03eff5SChuck Lever __field(bool, signaled) 480ab03eff5SChuck Lever __field(int, status) 481ab03eff5SChuck Lever ), 482ab03eff5SChuck Lever 483ab03eff5SChuck Lever TP_fast_assign( 484ab03eff5SChuck Lever __entry->req = req; 485ab03eff5SChuck Lever __entry->num_sge = req->rl_sendctx->sc_wr.num_sge; 486ab03eff5SChuck Lever __entry->signaled = req->rl_sendctx->sc_wr.send_flags & 487ab03eff5SChuck Lever IB_SEND_SIGNALED; 488ab03eff5SChuck Lever __entry->status = status; 489ab03eff5SChuck Lever ), 490ab03eff5SChuck Lever 491ab03eff5SChuck Lever TP_printk("req=%p, %d SGEs%s, status=%d", 492ab03eff5SChuck Lever __entry->req, __entry->num_sge, 493ab03eff5SChuck Lever (__entry->signaled ? ", signaled" : ""), 494ab03eff5SChuck Lever __entry->status 495ab03eff5SChuck Lever ) 496ab03eff5SChuck Lever ); 497ab03eff5SChuck Lever 498b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_post_recv, 499b4a7f91cSChuck Lever TP_PROTO( 500b4a7f91cSChuck Lever const struct rpcrdma_rep *rep, 501b4a7f91cSChuck Lever int status 502b4a7f91cSChuck Lever ), 503b4a7f91cSChuck Lever 504b4a7f91cSChuck Lever TP_ARGS(rep, status), 505b4a7f91cSChuck Lever 506b4a7f91cSChuck Lever TP_STRUCT__entry( 507b4a7f91cSChuck Lever __field(const void *, rep) 508b4a7f91cSChuck Lever __field(int, status) 509b4a7f91cSChuck Lever ), 510b4a7f91cSChuck Lever 511b4a7f91cSChuck Lever TP_fast_assign( 512b4a7f91cSChuck Lever __entry->rep = rep; 513b4a7f91cSChuck Lever __entry->status = status; 514b4a7f91cSChuck Lever ), 515b4a7f91cSChuck Lever 516b4a7f91cSChuck Lever TP_printk("rep=%p status=%d", 517b4a7f91cSChuck Lever __entry->rep, __entry->status 518b4a7f91cSChuck Lever ) 519b4a7f91cSChuck Lever ); 520b4a7f91cSChuck Lever 521ab03eff5SChuck Lever /** 522ab03eff5SChuck Lever ** Completion events 523ab03eff5SChuck Lever **/ 524ab03eff5SChuck Lever 525ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_wc_send, 526ab03eff5SChuck Lever TP_PROTO( 527ab03eff5SChuck Lever const struct rpcrdma_sendctx *sc, 528ab03eff5SChuck Lever const struct ib_wc *wc 529ab03eff5SChuck Lever ), 530ab03eff5SChuck Lever 531ab03eff5SChuck Lever TP_ARGS(sc, wc), 532ab03eff5SChuck Lever 533ab03eff5SChuck Lever TP_STRUCT__entry( 534ab03eff5SChuck Lever __field(const void *, req) 535ab03eff5SChuck Lever __field(unsigned int, unmap_count) 536ab03eff5SChuck Lever __field(unsigned int, status) 537ab03eff5SChuck Lever __field(unsigned int, vendor_err) 538ab03eff5SChuck Lever ), 539ab03eff5SChuck Lever 540ab03eff5SChuck Lever TP_fast_assign( 541ab03eff5SChuck Lever __entry->req = sc->sc_req; 542ab03eff5SChuck Lever __entry->unmap_count = sc->sc_unmap_count; 543ab03eff5SChuck Lever __entry->status = wc->status; 544ab03eff5SChuck Lever __entry->vendor_err = __entry->status ? wc->vendor_err : 0; 545ab03eff5SChuck Lever ), 546ab03eff5SChuck Lever 547ab03eff5SChuck Lever TP_printk("req=%p, unmapped %u pages: %s (%u/0x%x)", 548ab03eff5SChuck Lever __entry->req, __entry->unmap_count, 549ab03eff5SChuck Lever rdma_show_wc_status(__entry->status), 550ab03eff5SChuck Lever __entry->status, __entry->vendor_err 551ab03eff5SChuck Lever ) 552ab03eff5SChuck Lever ); 553ab03eff5SChuck Lever 554b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_wc_receive, 555b4a7f91cSChuck Lever TP_PROTO( 556b4a7f91cSChuck Lever const struct rpcrdma_rep *rep, 557b4a7f91cSChuck Lever const struct ib_wc *wc 558b4a7f91cSChuck Lever ), 559b4a7f91cSChuck Lever 560b4a7f91cSChuck Lever TP_ARGS(rep, wc), 561b4a7f91cSChuck Lever 562b4a7f91cSChuck Lever TP_STRUCT__entry( 563b4a7f91cSChuck Lever __field(const void *, rep) 564b4a7f91cSChuck Lever __field(unsigned int, byte_len) 565b4a7f91cSChuck Lever __field(unsigned int, status) 566b4a7f91cSChuck Lever __field(unsigned int, vendor_err) 567b4a7f91cSChuck Lever ), 568b4a7f91cSChuck Lever 569b4a7f91cSChuck Lever TP_fast_assign( 570b4a7f91cSChuck Lever __entry->rep = rep; 571b4a7f91cSChuck Lever __entry->byte_len = wc->byte_len; 572b4a7f91cSChuck Lever __entry->status = wc->status; 573b4a7f91cSChuck Lever __entry->vendor_err = __entry->status ? wc->vendor_err : 0; 574b4a7f91cSChuck Lever ), 575b4a7f91cSChuck Lever 576b4a7f91cSChuck Lever TP_printk("rep=%p, %u bytes: %s (%u/0x%x)", 577b4a7f91cSChuck Lever __entry->rep, __entry->byte_len, 578b4a7f91cSChuck Lever rdma_show_wc_status(__entry->status), 579b4a7f91cSChuck Lever __entry->status, __entry->vendor_err 580b4a7f91cSChuck Lever ) 581b4a7f91cSChuck Lever ); 582b4a7f91cSChuck Lever 58358f10ad4SChuck Lever DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_fastreg); 5842937fedeSChuck Lever DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_li); 5852937fedeSChuck Lever DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_li_wake); 5862937fedeSChuck Lever 5872937fedeSChuck Lever DEFINE_MR_EVENT(xprtrdma_localinv); 5882937fedeSChuck Lever DEFINE_MR_EVENT(xprtrdma_dma_unmap); 5892937fedeSChuck Lever DEFINE_MR_EVENT(xprtrdma_remoteinv); 5901c443effSChuck Lever DEFINE_MR_EVENT(xprtrdma_recover_mr); 59158f10ad4SChuck Lever 592b4a7f91cSChuck Lever /** 593b4a7f91cSChuck Lever ** Reply events 594b4a7f91cSChuck Lever **/ 595b4a7f91cSChuck Lever 596b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_reply, 597b4a7f91cSChuck Lever TP_PROTO( 598b4a7f91cSChuck Lever const struct rpc_task *task, 599b4a7f91cSChuck Lever const struct rpcrdma_rep *rep, 600b4a7f91cSChuck Lever const struct rpcrdma_req *req, 601b4a7f91cSChuck Lever unsigned int credits 602b4a7f91cSChuck Lever ), 603b4a7f91cSChuck Lever 604b4a7f91cSChuck Lever TP_ARGS(task, rep, req, credits), 605b4a7f91cSChuck Lever 606b4a7f91cSChuck Lever TP_STRUCT__entry( 607b4a7f91cSChuck Lever __field(unsigned int, task_id) 608b4a7f91cSChuck Lever __field(unsigned int, client_id) 609b4a7f91cSChuck Lever __field(const void *, rep) 610b4a7f91cSChuck Lever __field(const void *, req) 611b4a7f91cSChuck Lever __field(u32, xid) 612b4a7f91cSChuck Lever __field(unsigned int, credits) 613b4a7f91cSChuck Lever ), 614b4a7f91cSChuck Lever 615b4a7f91cSChuck Lever TP_fast_assign( 616b4a7f91cSChuck Lever __entry->task_id = task->tk_pid; 617b4a7f91cSChuck Lever __entry->client_id = task->tk_client->cl_clid; 618b4a7f91cSChuck Lever __entry->rep = rep; 619b4a7f91cSChuck Lever __entry->req = req; 620b4a7f91cSChuck Lever __entry->xid = be32_to_cpu(rep->rr_xid); 621b4a7f91cSChuck Lever __entry->credits = credits; 622b4a7f91cSChuck Lever ), 623b4a7f91cSChuck Lever 624b4a7f91cSChuck Lever TP_printk("task:%u@%u xid=0x%08x, %u credits, rep=%p -> req=%p", 625b4a7f91cSChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 626b4a7f91cSChuck Lever __entry->credits, __entry->rep, __entry->req 627b4a7f91cSChuck Lever ) 628b4a7f91cSChuck Lever ); 629b4a7f91cSChuck Lever 630b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_defer_cmp, 631b4a7f91cSChuck Lever TP_PROTO( 632b4a7f91cSChuck Lever const struct rpcrdma_rep *rep 633b4a7f91cSChuck Lever ), 634b4a7f91cSChuck Lever 635b4a7f91cSChuck Lever TP_ARGS(rep), 636b4a7f91cSChuck Lever 637b4a7f91cSChuck Lever TP_STRUCT__entry( 638b4a7f91cSChuck Lever __field(unsigned int, task_id) 639b4a7f91cSChuck Lever __field(unsigned int, client_id) 640b4a7f91cSChuck Lever __field(const void *, rep) 641b4a7f91cSChuck Lever __field(u32, xid) 642b4a7f91cSChuck Lever ), 643b4a7f91cSChuck Lever 644b4a7f91cSChuck Lever TP_fast_assign( 645b4a7f91cSChuck Lever __entry->task_id = rep->rr_rqst->rq_task->tk_pid; 646b4a7f91cSChuck Lever __entry->client_id = rep->rr_rqst->rq_task->tk_client->cl_clid; 647b4a7f91cSChuck Lever __entry->rep = rep; 648b4a7f91cSChuck Lever __entry->xid = be32_to_cpu(rep->rr_xid); 649b4a7f91cSChuck Lever ), 650b4a7f91cSChuck Lever 651b4a7f91cSChuck Lever TP_printk("task:%u@%u xid=0x%08x rep=%p", 652b4a7f91cSChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 653b4a7f91cSChuck Lever __entry->rep 654b4a7f91cSChuck Lever ) 655b4a7f91cSChuck Lever ); 656b4a7f91cSChuck Lever 657b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_vers); 658b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_rqst); 659b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_short); 660b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_hdr); 661b4a7f91cSChuck Lever 662e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_fixup, 663e11b7c96SChuck Lever TP_PROTO( 664e11b7c96SChuck Lever const struct rpc_rqst *rqst, 665e11b7c96SChuck Lever int len, 666e11b7c96SChuck Lever int hdrlen 667e11b7c96SChuck Lever ), 668e11b7c96SChuck Lever 669e11b7c96SChuck Lever TP_ARGS(rqst, len, hdrlen), 670e11b7c96SChuck Lever 671e11b7c96SChuck Lever TP_STRUCT__entry( 672e11b7c96SChuck Lever __field(unsigned int, task_id) 673e11b7c96SChuck Lever __field(unsigned int, client_id) 674e11b7c96SChuck Lever __field(const void *, base) 675e11b7c96SChuck Lever __field(int, len) 676e11b7c96SChuck Lever __field(int, hdrlen) 677e11b7c96SChuck Lever ), 678e11b7c96SChuck Lever 679e11b7c96SChuck Lever TP_fast_assign( 680e11b7c96SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 681e11b7c96SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 682e11b7c96SChuck Lever __entry->base = rqst->rq_rcv_buf.head[0].iov_base; 683e11b7c96SChuck Lever __entry->len = len; 684e11b7c96SChuck Lever __entry->hdrlen = hdrlen; 685e11b7c96SChuck Lever ), 686e11b7c96SChuck Lever 687e11b7c96SChuck Lever TP_printk("task:%u@%u base=%p len=%d hdrlen=%d", 688e11b7c96SChuck Lever __entry->task_id, __entry->client_id, 689e11b7c96SChuck Lever __entry->base, __entry->len, __entry->hdrlen 690e11b7c96SChuck Lever ) 691e11b7c96SChuck Lever ); 692e11b7c96SChuck Lever 693e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_fixup_pg, 694e11b7c96SChuck Lever TP_PROTO( 695e11b7c96SChuck Lever const struct rpc_rqst *rqst, 696e11b7c96SChuck Lever int pageno, 697e11b7c96SChuck Lever const void *pos, 698e11b7c96SChuck Lever int len, 699e11b7c96SChuck Lever int curlen 700e11b7c96SChuck Lever ), 701e11b7c96SChuck Lever 702e11b7c96SChuck Lever TP_ARGS(rqst, pageno, pos, len, curlen), 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 *, pos) 708e11b7c96SChuck Lever __field(int, pageno) 709e11b7c96SChuck Lever __field(int, len) 710e11b7c96SChuck Lever __field(int, curlen) 711e11b7c96SChuck Lever ), 712e11b7c96SChuck Lever 713e11b7c96SChuck Lever TP_fast_assign( 714e11b7c96SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 715e11b7c96SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 716e11b7c96SChuck Lever __entry->pos = pos; 717e11b7c96SChuck Lever __entry->pageno = pageno; 718e11b7c96SChuck Lever __entry->len = len; 719e11b7c96SChuck Lever __entry->curlen = curlen; 720e11b7c96SChuck Lever ), 721e11b7c96SChuck Lever 722e11b7c96SChuck Lever TP_printk("task:%u@%u pageno=%d pos=%p len=%d curlen=%d", 723e11b7c96SChuck Lever __entry->task_id, __entry->client_id, 724e11b7c96SChuck Lever __entry->pageno, __entry->pos, __entry->len, __entry->curlen 725e11b7c96SChuck Lever ) 726e11b7c96SChuck Lever ); 727e11b7c96SChuck Lever 728e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_decode_seg, 729e11b7c96SChuck Lever TP_PROTO( 730e11b7c96SChuck Lever u32 handle, 731e11b7c96SChuck Lever u32 length, 732e11b7c96SChuck Lever u64 offset 733e11b7c96SChuck Lever ), 734e11b7c96SChuck Lever 735e11b7c96SChuck Lever TP_ARGS(handle, length, offset), 736e11b7c96SChuck Lever 737e11b7c96SChuck Lever TP_STRUCT__entry( 738e11b7c96SChuck Lever __field(u32, handle) 739e11b7c96SChuck Lever __field(u32, length) 740e11b7c96SChuck Lever __field(u64, offset) 741e11b7c96SChuck Lever ), 742e11b7c96SChuck Lever 743e11b7c96SChuck Lever TP_fast_assign( 744e11b7c96SChuck Lever __entry->handle = handle; 745e11b7c96SChuck Lever __entry->length = length; 746e11b7c96SChuck Lever __entry->offset = offset; 747e11b7c96SChuck Lever ), 748e11b7c96SChuck Lever 749e11b7c96SChuck Lever TP_printk("%u@0x%016llx:0x%08x", 750e11b7c96SChuck Lever __entry->length, (unsigned long long)__entry->offset, 751e11b7c96SChuck Lever __entry->handle 752e11b7c96SChuck Lever ) 753e11b7c96SChuck Lever ); 754e11b7c96SChuck Lever 755fc1eb807SChuck Lever /** 756fc1eb807SChuck Lever ** Callback events 757fc1eb807SChuck Lever **/ 758fc1eb807SChuck Lever 759fc1eb807SChuck Lever TRACE_EVENT(xprtrdma_cb_setup, 760fc1eb807SChuck Lever TP_PROTO( 761fc1eb807SChuck Lever const struct rpcrdma_xprt *r_xprt, 762fc1eb807SChuck Lever unsigned int reqs 763fc1eb807SChuck Lever ), 764fc1eb807SChuck Lever 765fc1eb807SChuck Lever TP_ARGS(r_xprt, reqs), 766fc1eb807SChuck Lever 767fc1eb807SChuck Lever TP_STRUCT__entry( 768fc1eb807SChuck Lever __field(const void *, r_xprt) 769fc1eb807SChuck Lever __field(unsigned int, reqs) 770fc1eb807SChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 771fc1eb807SChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 772fc1eb807SChuck Lever ), 773fc1eb807SChuck Lever 774fc1eb807SChuck Lever TP_fast_assign( 775fc1eb807SChuck Lever __entry->r_xprt = r_xprt; 776fc1eb807SChuck Lever __entry->reqs = reqs; 777fc1eb807SChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 778fc1eb807SChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 779fc1eb807SChuck Lever ), 780fc1eb807SChuck Lever 781fc1eb807SChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: %u reqs", 782fc1eb807SChuck Lever __get_str(addr), __get_str(port), 783fc1eb807SChuck Lever __entry->r_xprt, __entry->reqs 784fc1eb807SChuck Lever ) 785fc1eb807SChuck Lever ); 786fc1eb807SChuck Lever 787fc1eb807SChuck Lever DEFINE_CB_EVENT(xprtrdma_cb_call); 788fc1eb807SChuck Lever DEFINE_CB_EVENT(xprtrdma_cb_reply); 789fc1eb807SChuck Lever 790e48f083eSChuck Lever #endif /* _TRACE_RPCRDMA_H */ 791e48f083eSChuck Lever 792e48f083eSChuck Lever #include <trace/define_trace.h> 793