1e48f083eSChuck Lever /* SPDX-License-Identifier: GPL-2.0 */ 2e48f083eSChuck Lever /* 398895edbSChuck Lever * Copyright (c) 2017, 2018 Oracle. All rights reserved. 498895edbSChuck Lever * 598895edbSChuck Lever * Trace point definitions for the "rpcrdma" subsystem. 6e48f083eSChuck Lever */ 7e48f083eSChuck Lever #undef TRACE_SYSTEM 8e48f083eSChuck Lever #define TRACE_SYSTEM rpcrdma 9e48f083eSChuck Lever 10e48f083eSChuck Lever #if !defined(_TRACE_RPCRDMA_H) || defined(TRACE_HEADER_MULTI_READ) 11e48f083eSChuck Lever #define _TRACE_RPCRDMA_H 12e48f083eSChuck Lever 1353b2c1cbSChuck Lever #include <linux/scatterlist.h> 14e48f083eSChuck Lever #include <linux/tracepoint.h> 15e48f083eSChuck Lever #include <trace/events/rdma.h> 16e48f083eSChuck Lever 17ab03eff5SChuck Lever /** 18b4a7f91cSChuck Lever ** Event classes 19b4a7f91cSChuck Lever **/ 20b4a7f91cSChuck Lever 21b4a7f91cSChuck Lever DECLARE_EVENT_CLASS(xprtrdma_reply_event, 22b4a7f91cSChuck Lever TP_PROTO( 23b4a7f91cSChuck Lever const struct rpcrdma_rep *rep 24b4a7f91cSChuck Lever ), 25b4a7f91cSChuck Lever 26b4a7f91cSChuck Lever TP_ARGS(rep), 27b4a7f91cSChuck Lever 28b4a7f91cSChuck Lever TP_STRUCT__entry( 29b4a7f91cSChuck Lever __field(const void *, rep) 30b4a7f91cSChuck Lever __field(const void *, r_xprt) 31b4a7f91cSChuck Lever __field(u32, xid) 32b4a7f91cSChuck Lever __field(u32, version) 33b4a7f91cSChuck Lever __field(u32, proc) 34b4a7f91cSChuck Lever ), 35b4a7f91cSChuck Lever 36b4a7f91cSChuck Lever TP_fast_assign( 37b4a7f91cSChuck Lever __entry->rep = rep; 38b4a7f91cSChuck Lever __entry->r_xprt = rep->rr_rxprt; 39b4a7f91cSChuck Lever __entry->xid = be32_to_cpu(rep->rr_xid); 40b4a7f91cSChuck Lever __entry->version = be32_to_cpu(rep->rr_vers); 41b4a7f91cSChuck Lever __entry->proc = be32_to_cpu(rep->rr_proc); 42b4a7f91cSChuck Lever ), 43b4a7f91cSChuck Lever 44b4a7f91cSChuck Lever TP_printk("rxprt %p xid=0x%08x rep=%p: version %u proc %u", 45b4a7f91cSChuck Lever __entry->r_xprt, __entry->xid, __entry->rep, 46b4a7f91cSChuck Lever __entry->version, __entry->proc 47b4a7f91cSChuck Lever ) 48b4a7f91cSChuck Lever ); 49b4a7f91cSChuck Lever 50b4a7f91cSChuck Lever #define DEFINE_REPLY_EVENT(name) \ 51b4a7f91cSChuck Lever DEFINE_EVENT(xprtrdma_reply_event, name, \ 52b4a7f91cSChuck Lever TP_PROTO( \ 53b4a7f91cSChuck Lever const struct rpcrdma_rep *rep \ 54b4a7f91cSChuck Lever ), \ 55b4a7f91cSChuck Lever TP_ARGS(rep)) 56b4a7f91cSChuck Lever 571c443effSChuck Lever DECLARE_EVENT_CLASS(xprtrdma_rxprt, 581c443effSChuck Lever TP_PROTO( 591c443effSChuck Lever const struct rpcrdma_xprt *r_xprt 601c443effSChuck Lever ), 611c443effSChuck Lever 621c443effSChuck Lever TP_ARGS(r_xprt), 631c443effSChuck Lever 641c443effSChuck Lever TP_STRUCT__entry( 651c443effSChuck Lever __field(const void *, r_xprt) 661c443effSChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 671c443effSChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 681c443effSChuck Lever ), 691c443effSChuck Lever 701c443effSChuck Lever TP_fast_assign( 711c443effSChuck Lever __entry->r_xprt = r_xprt; 721c443effSChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 731c443effSChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 741c443effSChuck Lever ), 751c443effSChuck Lever 761c443effSChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p", 771c443effSChuck Lever __get_str(addr), __get_str(port), __entry->r_xprt 781c443effSChuck Lever ) 791c443effSChuck Lever ); 801c443effSChuck Lever 811c443effSChuck Lever #define DEFINE_RXPRT_EVENT(name) \ 821c443effSChuck Lever DEFINE_EVENT(xprtrdma_rxprt, name, \ 831c443effSChuck Lever TP_PROTO( \ 841c443effSChuck Lever const struct rpcrdma_xprt *r_xprt \ 851c443effSChuck Lever ), \ 861c443effSChuck Lever TP_ARGS(r_xprt)) 871c443effSChuck Lever 887b020f17SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_connect_class, 897b020f17SChuck Lever TP_PROTO( 907b020f17SChuck Lever const struct rpcrdma_xprt *r_xprt, 917b020f17SChuck Lever int rc 927b020f17SChuck Lever ), 937b020f17SChuck Lever 947b020f17SChuck Lever TP_ARGS(r_xprt, rc), 957b020f17SChuck Lever 967b020f17SChuck Lever TP_STRUCT__entry( 977b020f17SChuck Lever __field(const void *, r_xprt) 987b020f17SChuck Lever __field(int, rc) 997b020f17SChuck Lever __field(int, connect_status) 1007b020f17SChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 1017b020f17SChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 1027b020f17SChuck Lever ), 1037b020f17SChuck Lever 1047b020f17SChuck Lever TP_fast_assign( 1057b020f17SChuck Lever __entry->r_xprt = r_xprt; 1067b020f17SChuck Lever __entry->rc = rc; 1077b020f17SChuck Lever __entry->connect_status = r_xprt->rx_ep.rep_connected; 1087b020f17SChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 1097b020f17SChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 1107b020f17SChuck Lever ), 1117b020f17SChuck Lever 1127b020f17SChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: rc=%d connect status=%d", 1137b020f17SChuck Lever __get_str(addr), __get_str(port), __entry->r_xprt, 1147b020f17SChuck Lever __entry->rc, __entry->connect_status 1157b020f17SChuck Lever ) 1167b020f17SChuck Lever ); 1177b020f17SChuck Lever 1187b020f17SChuck Lever #define DEFINE_CONN_EVENT(name) \ 1197b020f17SChuck Lever DEFINE_EVENT(xprtrdma_connect_class, xprtrdma_##name, \ 1207b020f17SChuck Lever TP_PROTO( \ 1217b020f17SChuck Lever const struct rpcrdma_xprt *r_xprt, \ 1227b020f17SChuck Lever int rc \ 1237b020f17SChuck Lever ), \ 1247b020f17SChuck Lever TP_ARGS(r_xprt, rc)) 1257b020f17SChuck Lever 12658f10ad4SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_rdch_event, 12758f10ad4SChuck Lever TP_PROTO( 12858f10ad4SChuck Lever const struct rpc_task *task, 12958f10ad4SChuck Lever unsigned int pos, 13058f10ad4SChuck Lever struct rpcrdma_mr *mr, 13158f10ad4SChuck Lever int nsegs 13258f10ad4SChuck Lever ), 13358f10ad4SChuck Lever 13458f10ad4SChuck Lever TP_ARGS(task, pos, mr, nsegs), 13558f10ad4SChuck Lever 13658f10ad4SChuck Lever TP_STRUCT__entry( 13758f10ad4SChuck Lever __field(unsigned int, task_id) 13858f10ad4SChuck Lever __field(unsigned int, client_id) 13958f10ad4SChuck Lever __field(unsigned int, pos) 14058f10ad4SChuck Lever __field(int, nents) 14158f10ad4SChuck Lever __field(u32, handle) 14258f10ad4SChuck Lever __field(u32, length) 14358f10ad4SChuck Lever __field(u64, offset) 14458f10ad4SChuck Lever __field(int, nsegs) 14558f10ad4SChuck Lever ), 14658f10ad4SChuck Lever 14758f10ad4SChuck Lever TP_fast_assign( 14858f10ad4SChuck Lever __entry->task_id = task->tk_pid; 14958f10ad4SChuck Lever __entry->client_id = task->tk_client->cl_clid; 15058f10ad4SChuck Lever __entry->pos = pos; 15158f10ad4SChuck Lever __entry->nents = mr->mr_nents; 15258f10ad4SChuck Lever __entry->handle = mr->mr_handle; 15358f10ad4SChuck Lever __entry->length = mr->mr_length; 15458f10ad4SChuck Lever __entry->offset = mr->mr_offset; 15558f10ad4SChuck Lever __entry->nsegs = nsegs; 15658f10ad4SChuck Lever ), 15758f10ad4SChuck Lever 158aba11831SChuck Lever TP_printk("task:%u@%u pos=%u %u@0x%016llx:0x%08x (%s)", 159aba11831SChuck Lever __entry->task_id, __entry->client_id, 16058f10ad4SChuck Lever __entry->pos, __entry->length, 16158f10ad4SChuck Lever (unsigned long long)__entry->offset, __entry->handle, 16258f10ad4SChuck Lever __entry->nents < __entry->nsegs ? "more" : "last" 16358f10ad4SChuck Lever ) 16458f10ad4SChuck Lever ); 16558f10ad4SChuck Lever 16658f10ad4SChuck Lever #define DEFINE_RDCH_EVENT(name) \ 167aba11831SChuck Lever DEFINE_EVENT(xprtrdma_rdch_event, xprtrdma_chunk_##name,\ 16858f10ad4SChuck Lever TP_PROTO( \ 16958f10ad4SChuck Lever const struct rpc_task *task, \ 17058f10ad4SChuck Lever unsigned int pos, \ 17158f10ad4SChuck Lever struct rpcrdma_mr *mr, \ 17258f10ad4SChuck Lever int nsegs \ 17358f10ad4SChuck Lever ), \ 17458f10ad4SChuck Lever TP_ARGS(task, pos, mr, nsegs)) 17558f10ad4SChuck Lever 17658f10ad4SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_wrch_event, 17758f10ad4SChuck Lever TP_PROTO( 17858f10ad4SChuck Lever const struct rpc_task *task, 17958f10ad4SChuck Lever struct rpcrdma_mr *mr, 18058f10ad4SChuck Lever int nsegs 18158f10ad4SChuck Lever ), 18258f10ad4SChuck Lever 18358f10ad4SChuck Lever TP_ARGS(task, mr, nsegs), 18458f10ad4SChuck Lever 18558f10ad4SChuck Lever TP_STRUCT__entry( 18658f10ad4SChuck Lever __field(unsigned int, task_id) 18758f10ad4SChuck Lever __field(unsigned int, client_id) 18858f10ad4SChuck Lever __field(int, nents) 18958f10ad4SChuck Lever __field(u32, handle) 19058f10ad4SChuck Lever __field(u32, length) 19158f10ad4SChuck Lever __field(u64, offset) 19258f10ad4SChuck Lever __field(int, nsegs) 19358f10ad4SChuck Lever ), 19458f10ad4SChuck Lever 19558f10ad4SChuck Lever TP_fast_assign( 19658f10ad4SChuck Lever __entry->task_id = task->tk_pid; 19758f10ad4SChuck Lever __entry->client_id = task->tk_client->cl_clid; 19858f10ad4SChuck Lever __entry->nents = mr->mr_nents; 19958f10ad4SChuck Lever __entry->handle = mr->mr_handle; 20058f10ad4SChuck Lever __entry->length = mr->mr_length; 20158f10ad4SChuck Lever __entry->offset = mr->mr_offset; 20258f10ad4SChuck Lever __entry->nsegs = nsegs; 20358f10ad4SChuck Lever ), 20458f10ad4SChuck Lever 205aba11831SChuck Lever TP_printk("task:%u@%u %u@0x%016llx:0x%08x (%s)", 206aba11831SChuck Lever __entry->task_id, __entry->client_id, 20758f10ad4SChuck Lever __entry->length, (unsigned long long)__entry->offset, 20858f10ad4SChuck Lever __entry->handle, 20958f10ad4SChuck Lever __entry->nents < __entry->nsegs ? "more" : "last" 21058f10ad4SChuck Lever ) 21158f10ad4SChuck Lever ); 21258f10ad4SChuck Lever 21358f10ad4SChuck Lever #define DEFINE_WRCH_EVENT(name) \ 214aba11831SChuck Lever DEFINE_EVENT(xprtrdma_wrch_event, xprtrdma_chunk_##name,\ 21558f10ad4SChuck Lever TP_PROTO( \ 21658f10ad4SChuck Lever const struct rpc_task *task, \ 21758f10ad4SChuck Lever struct rpcrdma_mr *mr, \ 21858f10ad4SChuck Lever int nsegs \ 21958f10ad4SChuck Lever ), \ 22058f10ad4SChuck Lever TP_ARGS(task, mr, nsegs)) 22158f10ad4SChuck Lever 22258f10ad4SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_frwr_done, 22358f10ad4SChuck Lever TP_PROTO( 22458f10ad4SChuck Lever const struct ib_wc *wc, 22558f10ad4SChuck Lever const struct rpcrdma_frwr *frwr 22658f10ad4SChuck Lever ), 22758f10ad4SChuck Lever 22858f10ad4SChuck Lever TP_ARGS(wc, frwr), 22958f10ad4SChuck Lever 23058f10ad4SChuck Lever TP_STRUCT__entry( 23162a89501SChuck Lever __field(u32, mr_id) 23258f10ad4SChuck Lever __field(unsigned int, status) 23358f10ad4SChuck Lever __field(unsigned int, vendor_err) 23458f10ad4SChuck Lever ), 23558f10ad4SChuck Lever 23658f10ad4SChuck Lever TP_fast_assign( 23762a89501SChuck Lever __entry->mr_id = frwr->fr_mr->res.id; 23858f10ad4SChuck Lever __entry->status = wc->status; 23958f10ad4SChuck Lever __entry->vendor_err = __entry->status ? wc->vendor_err : 0; 24058f10ad4SChuck Lever ), 24158f10ad4SChuck Lever 24258f10ad4SChuck Lever TP_printk( 24362a89501SChuck Lever "mr.id=%u: %s (%u/0x%x)", 24462a89501SChuck Lever __entry->mr_id, rdma_show_wc_status(__entry->status), 24558f10ad4SChuck Lever __entry->status, __entry->vendor_err 24658f10ad4SChuck Lever ) 24758f10ad4SChuck Lever ); 24858f10ad4SChuck Lever 24958f10ad4SChuck Lever #define DEFINE_FRWR_DONE_EVENT(name) \ 25058f10ad4SChuck Lever DEFINE_EVENT(xprtrdma_frwr_done, name, \ 25158f10ad4SChuck Lever TP_PROTO( \ 25258f10ad4SChuck Lever const struct ib_wc *wc, \ 25358f10ad4SChuck Lever const struct rpcrdma_frwr *frwr \ 25458f10ad4SChuck Lever ), \ 25558f10ad4SChuck Lever TP_ARGS(wc, frwr)) 25658f10ad4SChuck Lever 257aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_BIDIRECTIONAL); 258aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_TO_DEVICE); 259aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_FROM_DEVICE); 260aba11831SChuck Lever TRACE_DEFINE_ENUM(DMA_NONE); 261aba11831SChuck Lever 262aba11831SChuck Lever #define xprtrdma_show_direction(x) \ 263aba11831SChuck Lever __print_symbolic(x, \ 264aba11831SChuck Lever { DMA_BIDIRECTIONAL, "BIDIR" }, \ 265aba11831SChuck Lever { DMA_TO_DEVICE, "TO_DEVICE" }, \ 266aba11831SChuck Lever { DMA_FROM_DEVICE, "FROM_DEVICE" }, \ 267aba11831SChuck Lever { DMA_NONE, "NONE" }) 268aba11831SChuck Lever 2692937fedeSChuck Lever DECLARE_EVENT_CLASS(xprtrdma_mr, 2702937fedeSChuck Lever TP_PROTO( 2712937fedeSChuck Lever const struct rpcrdma_mr *mr 2722937fedeSChuck Lever ), 2732937fedeSChuck Lever 2742937fedeSChuck Lever TP_ARGS(mr), 2752937fedeSChuck Lever 2762937fedeSChuck Lever TP_STRUCT__entry( 27762a89501SChuck Lever __field(u32, mr_id) 27862a89501SChuck Lever __field(int, nents) 2792937fedeSChuck Lever __field(u32, handle) 2802937fedeSChuck Lever __field(u32, length) 2812937fedeSChuck Lever __field(u64, offset) 282aba11831SChuck Lever __field(u32, dir) 2832937fedeSChuck Lever ), 2842937fedeSChuck Lever 2852937fedeSChuck Lever TP_fast_assign( 28662a89501SChuck Lever __entry->mr_id = mr->frwr.fr_mr->res.id; 28762a89501SChuck Lever __entry->nents = mr->mr_nents; 2882937fedeSChuck Lever __entry->handle = mr->mr_handle; 2892937fedeSChuck Lever __entry->length = mr->mr_length; 2902937fedeSChuck Lever __entry->offset = mr->mr_offset; 291aba11831SChuck Lever __entry->dir = mr->mr_dir; 2922937fedeSChuck Lever ), 2932937fedeSChuck Lever 29462a89501SChuck Lever TP_printk("mr.id=%u nents=%d %u@0x%016llx:0x%08x (%s)", 29562a89501SChuck Lever __entry->mr_id, __entry->nents, __entry->length, 296aba11831SChuck Lever (unsigned long long)__entry->offset, __entry->handle, 297aba11831SChuck Lever xprtrdma_show_direction(__entry->dir) 2982937fedeSChuck Lever ) 2992937fedeSChuck Lever ); 3002937fedeSChuck Lever 3012937fedeSChuck Lever #define DEFINE_MR_EVENT(name) \ 302d379eaa8SChuck Lever DEFINE_EVENT(xprtrdma_mr, xprtrdma_mr_##name, \ 3032937fedeSChuck Lever TP_PROTO( \ 3042937fedeSChuck Lever const struct rpcrdma_mr *mr \ 3052937fedeSChuck Lever ), \ 3062937fedeSChuck Lever TP_ARGS(mr)) 3072937fedeSChuck Lever 308fc1eb807SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_cb_event, 309fc1eb807SChuck Lever TP_PROTO( 310fc1eb807SChuck Lever const struct rpc_rqst *rqst 311fc1eb807SChuck Lever ), 312fc1eb807SChuck Lever 313fc1eb807SChuck Lever TP_ARGS(rqst), 314fc1eb807SChuck Lever 315fc1eb807SChuck Lever TP_STRUCT__entry( 316fc1eb807SChuck Lever __field(const void *, rqst) 317fc1eb807SChuck Lever __field(const void *, rep) 318fc1eb807SChuck Lever __field(const void *, req) 319fc1eb807SChuck Lever __field(u32, xid) 320fc1eb807SChuck Lever ), 321fc1eb807SChuck Lever 322fc1eb807SChuck Lever TP_fast_assign( 323fc1eb807SChuck Lever __entry->rqst = rqst; 324fc1eb807SChuck Lever __entry->req = rpcr_to_rdmar(rqst); 325fc1eb807SChuck Lever __entry->rep = rpcr_to_rdmar(rqst)->rl_reply; 326fc1eb807SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 327fc1eb807SChuck Lever ), 328fc1eb807SChuck Lever 329fc1eb807SChuck Lever TP_printk("xid=0x%08x, rqst=%p req=%p rep=%p", 330fc1eb807SChuck Lever __entry->xid, __entry->rqst, __entry->req, __entry->rep 331fc1eb807SChuck Lever ) 332fc1eb807SChuck Lever ); 333fc1eb807SChuck Lever 334fc1eb807SChuck Lever #define DEFINE_CB_EVENT(name) \ 335fc1eb807SChuck Lever DEFINE_EVENT(xprtrdma_cb_event, name, \ 336fc1eb807SChuck Lever TP_PROTO( \ 337fc1eb807SChuck Lever const struct rpc_rqst *rqst \ 338fc1eb807SChuck Lever ), \ 339fc1eb807SChuck Lever TP_ARGS(rqst)) 340fc1eb807SChuck Lever 341b4a7f91cSChuck Lever /** 342b4744e00SChuck Lever ** Connection events 343b4744e00SChuck Lever **/ 344b4744e00SChuck Lever 345ae38288eSChuck Lever TRACE_EVENT(xprtrdma_cm_event, 346b4744e00SChuck Lever TP_PROTO( 347b4744e00SChuck Lever const struct rpcrdma_xprt *r_xprt, 348b4744e00SChuck Lever struct rdma_cm_event *event 349b4744e00SChuck Lever ), 350b4744e00SChuck Lever 351b4744e00SChuck Lever TP_ARGS(r_xprt, event), 352b4744e00SChuck Lever 353b4744e00SChuck Lever TP_STRUCT__entry( 354b4744e00SChuck Lever __field(const void *, r_xprt) 355b4744e00SChuck Lever __field(unsigned int, event) 356b4744e00SChuck Lever __field(int, status) 357b4744e00SChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 358b4744e00SChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 359b4744e00SChuck Lever ), 360b4744e00SChuck Lever 361b4744e00SChuck Lever TP_fast_assign( 362b4744e00SChuck Lever __entry->r_xprt = r_xprt; 363b4744e00SChuck Lever __entry->event = event->event; 364b4744e00SChuck Lever __entry->status = event->status; 365b4744e00SChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 366b4744e00SChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 367b4744e00SChuck Lever ), 368b4744e00SChuck Lever 369b4744e00SChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: %s (%u/%d)", 370b4744e00SChuck Lever __get_str(addr), __get_str(port), 371b4744e00SChuck Lever __entry->r_xprt, rdma_show_cm_event(__entry->event), 372b4744e00SChuck Lever __entry->event, __entry->status 373b4744e00SChuck Lever ) 374b4744e00SChuck Lever ); 375b4744e00SChuck Lever 376f54c870dSChuck Lever TRACE_EVENT(xprtrdma_inline_thresh, 377f54c870dSChuck Lever TP_PROTO( 378f54c870dSChuck Lever const struct rpcrdma_xprt *r_xprt 379f54c870dSChuck Lever ), 380f54c870dSChuck Lever 381f54c870dSChuck Lever TP_ARGS(r_xprt), 382f54c870dSChuck Lever 383f54c870dSChuck Lever TP_STRUCT__entry( 384f54c870dSChuck Lever __field(const void *, r_xprt) 385f54c870dSChuck Lever __field(unsigned int, inline_send) 386f54c870dSChuck Lever __field(unsigned int, inline_recv) 387f54c870dSChuck Lever __field(unsigned int, max_send) 388f54c870dSChuck Lever __field(unsigned int, max_recv) 389f54c870dSChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 390f54c870dSChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 391f54c870dSChuck Lever ), 392f54c870dSChuck Lever 393f54c870dSChuck Lever TP_fast_assign( 394f54c870dSChuck Lever const struct rpcrdma_ep *ep = &r_xprt->rx_ep; 395f54c870dSChuck Lever 396f54c870dSChuck Lever __entry->r_xprt = r_xprt; 397f54c870dSChuck Lever __entry->inline_send = ep->rep_inline_send; 398f54c870dSChuck Lever __entry->inline_recv = ep->rep_inline_recv; 399f54c870dSChuck Lever __entry->max_send = ep->rep_max_inline_send; 400f54c870dSChuck Lever __entry->max_recv = ep->rep_max_inline_recv; 401f54c870dSChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 402f54c870dSChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 403f54c870dSChuck Lever ), 404f54c870dSChuck Lever 405f54c870dSChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p neg send/recv=%u/%u, calc send/recv=%u/%u", 406f54c870dSChuck Lever __get_str(addr), __get_str(port), __entry->r_xprt, 407f54c870dSChuck Lever __entry->inline_send, __entry->inline_recv, 408f54c870dSChuck Lever __entry->max_send, __entry->max_recv 409f54c870dSChuck Lever ) 410f54c870dSChuck Lever ); 411f54c870dSChuck Lever 4127b020f17SChuck Lever DEFINE_CONN_EVENT(connect); 4137b020f17SChuck Lever DEFINE_CONN_EVENT(disconnect); 4147b020f17SChuck Lever 4157b020f17SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_create); 4167b020f17SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_op_destroy); 4177b020f17SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_remove); 4187b020f17SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_reinsert); 4197b020f17SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_op_inject_dsc); 4207b020f17SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_op_close); 421a52c23b8SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_op_setport); 4227b020f17SChuck Lever 4237b020f17SChuck Lever TRACE_EVENT(xprtrdma_op_connect, 424b4744e00SChuck Lever TP_PROTO( 425b4744e00SChuck Lever const struct rpcrdma_xprt *r_xprt, 4267b020f17SChuck Lever unsigned long delay 427b4744e00SChuck Lever ), 428b4744e00SChuck Lever 4297b020f17SChuck Lever TP_ARGS(r_xprt, delay), 430b4744e00SChuck Lever 431b4744e00SChuck Lever TP_STRUCT__entry( 432b4744e00SChuck Lever __field(const void *, r_xprt) 4337b020f17SChuck Lever __field(unsigned long, delay) 434b4744e00SChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 435b4744e00SChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 436b4744e00SChuck Lever ), 437b4744e00SChuck Lever 438b4744e00SChuck Lever TP_fast_assign( 439b4744e00SChuck Lever __entry->r_xprt = r_xprt; 4407b020f17SChuck Lever __entry->delay = delay; 441b4744e00SChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 442b4744e00SChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 443b4744e00SChuck Lever ), 444b4744e00SChuck Lever 4457b020f17SChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p delay=%lu", 4467b020f17SChuck Lever __get_str(addr), __get_str(port), __entry->r_xprt, 4477b020f17SChuck Lever __entry->delay 448b4744e00SChuck Lever ) 449b4744e00SChuck Lever ); 450b4744e00SChuck Lever 451b4744e00SChuck Lever 452675dd90aSChuck Lever TRACE_EVENT(xprtrdma_op_set_cto, 453675dd90aSChuck Lever TP_PROTO( 454675dd90aSChuck Lever const struct rpcrdma_xprt *r_xprt, 455675dd90aSChuck Lever unsigned long connect, 456675dd90aSChuck Lever unsigned long reconnect 457675dd90aSChuck Lever ), 458675dd90aSChuck Lever 459675dd90aSChuck Lever TP_ARGS(r_xprt, connect, reconnect), 460675dd90aSChuck Lever 461675dd90aSChuck Lever TP_STRUCT__entry( 462675dd90aSChuck Lever __field(const void *, r_xprt) 463675dd90aSChuck Lever __field(unsigned long, connect) 464675dd90aSChuck Lever __field(unsigned long, reconnect) 465675dd90aSChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 466675dd90aSChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 467675dd90aSChuck Lever ), 468675dd90aSChuck Lever 469675dd90aSChuck Lever TP_fast_assign( 470675dd90aSChuck Lever __entry->r_xprt = r_xprt; 471675dd90aSChuck Lever __entry->connect = connect; 472675dd90aSChuck Lever __entry->reconnect = reconnect; 473675dd90aSChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 474675dd90aSChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 475675dd90aSChuck Lever ), 476675dd90aSChuck Lever 477675dd90aSChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: connect=%lu reconnect=%lu", 478675dd90aSChuck Lever __get_str(addr), __get_str(port), __entry->r_xprt, 479675dd90aSChuck Lever __entry->connect / HZ, __entry->reconnect / HZ 480675dd90aSChuck Lever ) 481675dd90aSChuck Lever ); 482675dd90aSChuck Lever 483f9521d53SChuck Lever TRACE_EVENT(xprtrdma_qp_event, 484643cf323SChuck Lever TP_PROTO( 485643cf323SChuck Lever const struct rpcrdma_xprt *r_xprt, 486643cf323SChuck Lever const struct ib_event *event 487643cf323SChuck Lever ), 488643cf323SChuck Lever 489643cf323SChuck Lever TP_ARGS(r_xprt, event), 490643cf323SChuck Lever 491643cf323SChuck Lever TP_STRUCT__entry( 492643cf323SChuck Lever __field(const void *, r_xprt) 493643cf323SChuck Lever __field(unsigned int, event) 494643cf323SChuck Lever __string(name, event->device->name) 495643cf323SChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 496643cf323SChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 497643cf323SChuck Lever ), 498643cf323SChuck Lever 499643cf323SChuck Lever TP_fast_assign( 500643cf323SChuck Lever __entry->r_xprt = r_xprt; 501643cf323SChuck Lever __entry->event = event->event; 502643cf323SChuck Lever __assign_str(name, event->device->name); 503643cf323SChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 504643cf323SChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 505643cf323SChuck Lever ), 506643cf323SChuck Lever 507643cf323SChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: dev %s: %s (%u)", 508643cf323SChuck Lever __get_str(addr), __get_str(port), __entry->r_xprt, 509643cf323SChuck Lever __get_str(name), rdma_show_ib_event(__entry->event), 510643cf323SChuck Lever __entry->event 511643cf323SChuck Lever ) 512643cf323SChuck Lever ); 513643cf323SChuck Lever 514b4744e00SChuck Lever /** 515ab03eff5SChuck Lever ** Call events 516ab03eff5SChuck Lever **/ 517ab03eff5SChuck Lever 5181c443effSChuck Lever TRACE_EVENT(xprtrdma_createmrs, 5191c443effSChuck Lever TP_PROTO( 5201c443effSChuck Lever const struct rpcrdma_xprt *r_xprt, 5211c443effSChuck Lever unsigned int count 5221c443effSChuck Lever ), 5231c443effSChuck Lever 5241c443effSChuck Lever TP_ARGS(r_xprt, count), 5251c443effSChuck Lever 5261c443effSChuck Lever TP_STRUCT__entry( 5271c443effSChuck Lever __field(const void *, r_xprt) 5286dc6ec9eSChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 5296dc6ec9eSChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 5301c443effSChuck Lever __field(unsigned int, count) 5311c443effSChuck Lever ), 5321c443effSChuck Lever 5331c443effSChuck Lever TP_fast_assign( 5341c443effSChuck Lever __entry->r_xprt = r_xprt; 5351c443effSChuck Lever __entry->count = count; 5366dc6ec9eSChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 5376dc6ec9eSChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 5381c443effSChuck Lever ), 5391c443effSChuck Lever 5406dc6ec9eSChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: created %u MRs", 5416dc6ec9eSChuck Lever __get_str(addr), __get_str(port), __entry->r_xprt, 5426dc6ec9eSChuck Lever __entry->count 5436dc6ec9eSChuck Lever ) 5446dc6ec9eSChuck Lever ); 5456dc6ec9eSChuck Lever 5466dc6ec9eSChuck Lever TRACE_EVENT(xprtrdma_mr_get, 5476dc6ec9eSChuck Lever TP_PROTO( 5486dc6ec9eSChuck Lever const struct rpcrdma_req *req 5496dc6ec9eSChuck Lever ), 5506dc6ec9eSChuck Lever 5516dc6ec9eSChuck Lever TP_ARGS(req), 5526dc6ec9eSChuck Lever 5536dc6ec9eSChuck Lever TP_STRUCT__entry( 5546dc6ec9eSChuck Lever __field(const void *, req) 5556dc6ec9eSChuck Lever __field(unsigned int, task_id) 5566dc6ec9eSChuck Lever __field(unsigned int, client_id) 5576dc6ec9eSChuck Lever __field(u32, xid) 5586dc6ec9eSChuck Lever ), 5596dc6ec9eSChuck Lever 5606dc6ec9eSChuck Lever TP_fast_assign( 5616dc6ec9eSChuck Lever const struct rpc_rqst *rqst = &req->rl_slot; 5626dc6ec9eSChuck Lever 5636dc6ec9eSChuck Lever __entry->req = req; 5646dc6ec9eSChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 5656dc6ec9eSChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 5666dc6ec9eSChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 5676dc6ec9eSChuck Lever ), 5686dc6ec9eSChuck Lever 5696dc6ec9eSChuck Lever TP_printk("task:%u@%u xid=0x%08x req=%p", 5706dc6ec9eSChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 5716dc6ec9eSChuck Lever __entry->req 5721c443effSChuck Lever ) 5731c443effSChuck Lever ); 5741c443effSChuck Lever 5753b39f52aSChuck Lever TRACE_EVENT(xprtrdma_nomrs, 5763b39f52aSChuck Lever TP_PROTO( 5773b39f52aSChuck Lever const struct rpcrdma_req *req 5783b39f52aSChuck Lever ), 5793b39f52aSChuck Lever 5803b39f52aSChuck Lever TP_ARGS(req), 5813b39f52aSChuck Lever 5823b39f52aSChuck Lever TP_STRUCT__entry( 5833b39f52aSChuck Lever __field(const void *, req) 5843b39f52aSChuck Lever __field(unsigned int, task_id) 5853b39f52aSChuck Lever __field(unsigned int, client_id) 5863b39f52aSChuck Lever __field(u32, xid) 5873b39f52aSChuck Lever ), 5883b39f52aSChuck Lever 5893b39f52aSChuck Lever TP_fast_assign( 5903b39f52aSChuck Lever const struct rpc_rqst *rqst = &req->rl_slot; 5913b39f52aSChuck Lever 5923b39f52aSChuck Lever __entry->req = req; 5933b39f52aSChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 5943b39f52aSChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 5953b39f52aSChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 5963b39f52aSChuck Lever ), 5973b39f52aSChuck Lever 5983b39f52aSChuck Lever TP_printk("task:%u@%u xid=0x%08x req=%p", 5993b39f52aSChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 6003b39f52aSChuck Lever __entry->req 6013b39f52aSChuck Lever ) 6023b39f52aSChuck Lever ); 6031c443effSChuck Lever 604aba11831SChuck Lever DEFINE_RDCH_EVENT(read); 605aba11831SChuck Lever DEFINE_WRCH_EVENT(write); 606aba11831SChuck Lever DEFINE_WRCH_EVENT(reply); 60758f10ad4SChuck Lever 608ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch); 609614f3c96SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch_pullup); 610614f3c96SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch_mapped); 611ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_readch); 612ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_areadch); 613ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_writech); 614ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_replych); 615ab03eff5SChuck Lever 616ab03eff5SChuck Lever #define xprtrdma_show_chunktype(x) \ 617ab03eff5SChuck Lever __print_symbolic(x, \ 618ab03eff5SChuck Lever { rpcrdma_noch, "inline" }, \ 619614f3c96SChuck Lever { rpcrdma_noch_pullup, "pullup" }, \ 620614f3c96SChuck Lever { rpcrdma_noch_mapped, "mapped" }, \ 621ab03eff5SChuck Lever { rpcrdma_readch, "read list" }, \ 622ab03eff5SChuck Lever { rpcrdma_areadch, "*read list" }, \ 623ab03eff5SChuck Lever { rpcrdma_writech, "write list" }, \ 624ab03eff5SChuck Lever { rpcrdma_replych, "reply chunk" }) 625ab03eff5SChuck Lever 626ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_marshal, 627ab03eff5SChuck Lever TP_PROTO( 6281310051cSChuck Lever const struct rpcrdma_req *req, 629ab03eff5SChuck Lever unsigned int rtype, 630ab03eff5SChuck Lever unsigned int wtype 631ab03eff5SChuck Lever ), 632ab03eff5SChuck Lever 6331310051cSChuck Lever TP_ARGS(req, rtype, wtype), 634ab03eff5SChuck Lever 635ab03eff5SChuck Lever TP_STRUCT__entry( 636ab03eff5SChuck Lever __field(unsigned int, task_id) 637ab03eff5SChuck Lever __field(unsigned int, client_id) 638ab03eff5SChuck Lever __field(u32, xid) 639ab03eff5SChuck Lever __field(unsigned int, hdrlen) 640ab03eff5SChuck Lever __field(unsigned int, headlen) 641ab03eff5SChuck Lever __field(unsigned int, pagelen) 642ab03eff5SChuck Lever __field(unsigned int, taillen) 643ab03eff5SChuck Lever __field(unsigned int, rtype) 644ab03eff5SChuck Lever __field(unsigned int, wtype) 645ab03eff5SChuck Lever ), 646ab03eff5SChuck Lever 647ab03eff5SChuck Lever TP_fast_assign( 6481310051cSChuck Lever const struct rpc_rqst *rqst = &req->rl_slot; 6491310051cSChuck Lever 650ab03eff5SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 651ab03eff5SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 652ab03eff5SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 6531310051cSChuck Lever __entry->hdrlen = req->rl_hdrbuf.len; 654ab03eff5SChuck Lever __entry->headlen = rqst->rq_snd_buf.head[0].iov_len; 655ab03eff5SChuck Lever __entry->pagelen = rqst->rq_snd_buf.page_len; 656ab03eff5SChuck Lever __entry->taillen = rqst->rq_snd_buf.tail[0].iov_len; 657ab03eff5SChuck Lever __entry->rtype = rtype; 658ab03eff5SChuck Lever __entry->wtype = wtype; 659ab03eff5SChuck Lever ), 660ab03eff5SChuck Lever 661ab03eff5SChuck Lever TP_printk("task:%u@%u xid=0x%08x: hdr=%u xdr=%u/%u/%u %s/%s", 662ab03eff5SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 663ab03eff5SChuck Lever __entry->hdrlen, 664ab03eff5SChuck Lever __entry->headlen, __entry->pagelen, __entry->taillen, 665ab03eff5SChuck Lever xprtrdma_show_chunktype(__entry->rtype), 666ab03eff5SChuck Lever xprtrdma_show_chunktype(__entry->wtype) 667ab03eff5SChuck Lever ) 668ab03eff5SChuck Lever ); 669ab03eff5SChuck Lever 67017e4c443SChuck Lever TRACE_EVENT(xprtrdma_marshal_failed, 67117e4c443SChuck Lever TP_PROTO(const struct rpc_rqst *rqst, 67217e4c443SChuck Lever int ret 67317e4c443SChuck Lever ), 67417e4c443SChuck Lever 67517e4c443SChuck Lever TP_ARGS(rqst, ret), 67617e4c443SChuck Lever 67717e4c443SChuck Lever TP_STRUCT__entry( 67817e4c443SChuck Lever __field(unsigned int, task_id) 67917e4c443SChuck Lever __field(unsigned int, client_id) 68017e4c443SChuck Lever __field(u32, xid) 68117e4c443SChuck Lever __field(int, ret) 68217e4c443SChuck Lever ), 68317e4c443SChuck Lever 68417e4c443SChuck Lever TP_fast_assign( 68517e4c443SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 68617e4c443SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 68717e4c443SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 68817e4c443SChuck Lever __entry->ret = ret; 68917e4c443SChuck Lever ), 69017e4c443SChuck Lever 69117e4c443SChuck Lever TP_printk("task:%u@%u xid=0x%08x: ret=%d", 69217e4c443SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 69317e4c443SChuck Lever __entry->ret 69417e4c443SChuck Lever ) 69517e4c443SChuck Lever ); 69617e4c443SChuck Lever 69705eb06d8SChuck Lever TRACE_EVENT(xprtrdma_prepsend_failed, 69805eb06d8SChuck Lever TP_PROTO(const struct rpc_rqst *rqst, 69905eb06d8SChuck Lever int ret 70005eb06d8SChuck Lever ), 70105eb06d8SChuck Lever 70205eb06d8SChuck Lever TP_ARGS(rqst, ret), 70305eb06d8SChuck Lever 70405eb06d8SChuck Lever TP_STRUCT__entry( 70505eb06d8SChuck Lever __field(unsigned int, task_id) 70605eb06d8SChuck Lever __field(unsigned int, client_id) 70705eb06d8SChuck Lever __field(u32, xid) 70805eb06d8SChuck Lever __field(int, ret) 70905eb06d8SChuck Lever ), 71005eb06d8SChuck Lever 71105eb06d8SChuck Lever TP_fast_assign( 71205eb06d8SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 71305eb06d8SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 71405eb06d8SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 71505eb06d8SChuck Lever __entry->ret = ret; 71605eb06d8SChuck Lever ), 71705eb06d8SChuck Lever 71805eb06d8SChuck Lever TP_printk("task:%u@%u xid=0x%08x: ret=%d", 71905eb06d8SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 72005eb06d8SChuck Lever __entry->ret 72105eb06d8SChuck Lever ) 72205eb06d8SChuck Lever ); 72305eb06d8SChuck Lever 724ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_post_send, 725ab03eff5SChuck Lever TP_PROTO( 726ab03eff5SChuck Lever const struct rpcrdma_req *req, 727ab03eff5SChuck Lever int status 728ab03eff5SChuck Lever ), 729ab03eff5SChuck Lever 730ab03eff5SChuck Lever TP_ARGS(req, status), 731ab03eff5SChuck Lever 732ab03eff5SChuck Lever TP_STRUCT__entry( 733ab03eff5SChuck Lever __field(const void *, req) 734cb586decSChuck Lever __field(const void *, sc) 7350c77668dSChuck Lever __field(unsigned int, task_id) 7360c77668dSChuck Lever __field(unsigned int, client_id) 737ab03eff5SChuck Lever __field(int, num_sge) 738470443e0SChuck Lever __field(int, signaled) 739ab03eff5SChuck Lever __field(int, status) 740ab03eff5SChuck Lever ), 741ab03eff5SChuck Lever 742ab03eff5SChuck Lever TP_fast_assign( 7430c77668dSChuck Lever const struct rpc_rqst *rqst = &req->rl_slot; 7440c77668dSChuck Lever 7450c77668dSChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 74610694ac9SChuck Lever __entry->client_id = rqst->rq_task->tk_client ? 74710694ac9SChuck Lever rqst->rq_task->tk_client->cl_clid : -1; 748ab03eff5SChuck Lever __entry->req = req; 749cb586decSChuck Lever __entry->sc = req->rl_sendctx; 750dc15c3d5SChuck Lever __entry->num_sge = req->rl_wr.num_sge; 751dc15c3d5SChuck Lever __entry->signaled = req->rl_wr.send_flags & IB_SEND_SIGNALED; 752ab03eff5SChuck Lever __entry->status = status; 753ab03eff5SChuck Lever ), 754ab03eff5SChuck Lever 755cb586decSChuck Lever TP_printk("task:%u@%u req=%p sc=%p (%d SGE%s) %sstatus=%d", 7560c77668dSChuck Lever __entry->task_id, __entry->client_id, 757cb586decSChuck Lever __entry->req, __entry->sc, __entry->num_sge, 7580c77668dSChuck Lever (__entry->num_sge == 1 ? "" : "s"), 7590c77668dSChuck Lever (__entry->signaled ? "signaled " : ""), 760ab03eff5SChuck Lever __entry->status 761ab03eff5SChuck Lever ) 762ab03eff5SChuck Lever ); 763ab03eff5SChuck Lever 764b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_post_recv, 765b4a7f91cSChuck Lever TP_PROTO( 7662dfdcd88SChuck Lever const struct rpcrdma_rep *rep 767b4a7f91cSChuck Lever ), 768b4a7f91cSChuck Lever 7692dfdcd88SChuck Lever TP_ARGS(rep), 770b4a7f91cSChuck Lever 771b4a7f91cSChuck Lever TP_STRUCT__entry( 7722dfdcd88SChuck Lever __field(const void *, rep) 773b4a7f91cSChuck Lever ), 774b4a7f91cSChuck Lever 775b4a7f91cSChuck Lever TP_fast_assign( 7762dfdcd88SChuck Lever __entry->rep = rep; 777b4a7f91cSChuck Lever ), 778b4a7f91cSChuck Lever 7792dfdcd88SChuck Lever TP_printk("rep=%p", 7802dfdcd88SChuck Lever __entry->rep 781b4a7f91cSChuck Lever ) 782b4a7f91cSChuck Lever ); 783b4a7f91cSChuck Lever 7847c8d9e7cSChuck Lever TRACE_EVENT(xprtrdma_post_recvs, 7857c8d9e7cSChuck Lever TP_PROTO( 7867c8d9e7cSChuck Lever const struct rpcrdma_xprt *r_xprt, 7877c8d9e7cSChuck Lever unsigned int count, 7887c8d9e7cSChuck Lever int status 7897c8d9e7cSChuck Lever ), 7907c8d9e7cSChuck Lever 7917c8d9e7cSChuck Lever TP_ARGS(r_xprt, count, status), 7927c8d9e7cSChuck Lever 7937c8d9e7cSChuck Lever TP_STRUCT__entry( 7947c8d9e7cSChuck Lever __field(const void *, r_xprt) 7957c8d9e7cSChuck Lever __field(unsigned int, count) 7967c8d9e7cSChuck Lever __field(int, status) 7977c8d9e7cSChuck Lever __field(int, posted) 7987c8d9e7cSChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 7997c8d9e7cSChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 8007c8d9e7cSChuck Lever ), 8017c8d9e7cSChuck Lever 8027c8d9e7cSChuck Lever TP_fast_assign( 8037c8d9e7cSChuck Lever __entry->r_xprt = r_xprt; 8047c8d9e7cSChuck Lever __entry->count = count; 8057c8d9e7cSChuck Lever __entry->status = status; 8066ceea368SChuck Lever __entry->posted = r_xprt->rx_ep.rep_receive_count; 8077c8d9e7cSChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 8087c8d9e7cSChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 8097c8d9e7cSChuck Lever ), 8107c8d9e7cSChuck Lever 8117c8d9e7cSChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: %u new recvs, %d active (rc %d)", 8127c8d9e7cSChuck Lever __get_str(addr), __get_str(port), __entry->r_xprt, 8137c8d9e7cSChuck Lever __entry->count, __entry->posted, __entry->status 814ab03eff5SChuck Lever ) 815ab03eff5SChuck Lever ); 816ab03eff5SChuck Lever 8174b93dab3SChuck Lever TRACE_EVENT(xprtrdma_post_linv, 8184b93dab3SChuck Lever TP_PROTO( 8194b93dab3SChuck Lever const struct rpcrdma_req *req, 8204b93dab3SChuck Lever int status 8214b93dab3SChuck Lever ), 8224b93dab3SChuck Lever 8234b93dab3SChuck Lever TP_ARGS(req, status), 8244b93dab3SChuck Lever 8254b93dab3SChuck Lever TP_STRUCT__entry( 8264b93dab3SChuck Lever __field(const void *, req) 8274b93dab3SChuck Lever __field(int, status) 8284b93dab3SChuck Lever __field(u32, xid) 8294b93dab3SChuck Lever ), 8304b93dab3SChuck Lever 8314b93dab3SChuck Lever TP_fast_assign( 8324b93dab3SChuck Lever __entry->req = req; 8334b93dab3SChuck Lever __entry->status = status; 8344b93dab3SChuck Lever __entry->xid = be32_to_cpu(req->rl_slot.rq_xid); 8354b93dab3SChuck Lever ), 8364b93dab3SChuck Lever 8374b93dab3SChuck Lever TP_printk("req=%p xid=0x%08x status=%d", 8384b93dab3SChuck Lever __entry->req, __entry->xid, __entry->status 8394b93dab3SChuck Lever ) 8404b93dab3SChuck Lever ); 8414b93dab3SChuck Lever 842ab03eff5SChuck Lever /** 843ab03eff5SChuck Lever ** Completion events 844ab03eff5SChuck Lever **/ 845ab03eff5SChuck Lever 846ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_wc_send, 847ab03eff5SChuck Lever TP_PROTO( 848ab03eff5SChuck Lever const struct rpcrdma_sendctx *sc, 849ab03eff5SChuck Lever const struct ib_wc *wc 850ab03eff5SChuck Lever ), 851ab03eff5SChuck Lever 852ab03eff5SChuck Lever TP_ARGS(sc, wc), 853ab03eff5SChuck Lever 854ab03eff5SChuck Lever TP_STRUCT__entry( 855ab03eff5SChuck Lever __field(const void *, req) 856cb586decSChuck Lever __field(const void *, sc) 857ab03eff5SChuck Lever __field(unsigned int, unmap_count) 858ab03eff5SChuck Lever __field(unsigned int, status) 859ab03eff5SChuck Lever __field(unsigned int, vendor_err) 860ab03eff5SChuck Lever ), 861ab03eff5SChuck Lever 862ab03eff5SChuck Lever TP_fast_assign( 863ab03eff5SChuck Lever __entry->req = sc->sc_req; 864cb586decSChuck Lever __entry->sc = sc; 865ab03eff5SChuck Lever __entry->unmap_count = sc->sc_unmap_count; 866ab03eff5SChuck Lever __entry->status = wc->status; 867ab03eff5SChuck Lever __entry->vendor_err = __entry->status ? wc->vendor_err : 0; 868ab03eff5SChuck Lever ), 869ab03eff5SChuck Lever 870cb586decSChuck Lever TP_printk("req=%p sc=%p unmapped=%u: %s (%u/0x%x)", 871cb586decSChuck Lever __entry->req, __entry->sc, __entry->unmap_count, 872ab03eff5SChuck Lever rdma_show_wc_status(__entry->status), 873ab03eff5SChuck Lever __entry->status, __entry->vendor_err 874ab03eff5SChuck Lever ) 875ab03eff5SChuck Lever ); 876ab03eff5SChuck Lever 877b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_wc_receive, 878b4a7f91cSChuck Lever TP_PROTO( 879b4a7f91cSChuck Lever const struct ib_wc *wc 880b4a7f91cSChuck Lever ), 881b4a7f91cSChuck Lever 8820e0b854cSChuck Lever TP_ARGS(wc), 883b4a7f91cSChuck Lever 884b4a7f91cSChuck Lever TP_STRUCT__entry( 8852dfdcd88SChuck Lever __field(const void *, rep) 8860e0b854cSChuck Lever __field(u32, byte_len) 887b4a7f91cSChuck Lever __field(unsigned int, status) 8880e0b854cSChuck Lever __field(u32, vendor_err) 889b4a7f91cSChuck Lever ), 890b4a7f91cSChuck Lever 891b4a7f91cSChuck Lever TP_fast_assign( 8922dfdcd88SChuck Lever __entry->rep = container_of(wc->wr_cqe, struct rpcrdma_rep, 8932dfdcd88SChuck Lever rr_cqe); 894b4a7f91cSChuck Lever __entry->status = wc->status; 8950e0b854cSChuck Lever if (wc->status) { 8960e0b854cSChuck Lever __entry->byte_len = 0; 8970e0b854cSChuck Lever __entry->vendor_err = wc->vendor_err; 8980e0b854cSChuck Lever } else { 8990e0b854cSChuck Lever __entry->byte_len = wc->byte_len; 9000e0b854cSChuck Lever __entry->vendor_err = 0; 9010e0b854cSChuck Lever } 902b4a7f91cSChuck Lever ), 903b4a7f91cSChuck Lever 9042dfdcd88SChuck Lever TP_printk("rep=%p %u bytes: %s (%u/0x%x)", 9052dfdcd88SChuck Lever __entry->rep, __entry->byte_len, 906b4a7f91cSChuck Lever rdma_show_wc_status(__entry->status), 907b4a7f91cSChuck Lever __entry->status, __entry->vendor_err 908b4a7f91cSChuck Lever ) 909b4a7f91cSChuck Lever ); 910b4a7f91cSChuck Lever 91158f10ad4SChuck Lever DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_fastreg); 9122937fedeSChuck Lever DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_li); 9132937fedeSChuck Lever DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_li_wake); 914d8099fedSChuck Lever DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_li_done); 9152937fedeSChuck Lever 91653b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_alloc, 91753b2c1cbSChuck Lever TP_PROTO( 91853b2c1cbSChuck Lever const struct rpcrdma_mr *mr, 91953b2c1cbSChuck Lever int rc 92053b2c1cbSChuck Lever ), 92153b2c1cbSChuck Lever 92253b2c1cbSChuck Lever TP_ARGS(mr, rc), 92353b2c1cbSChuck Lever 92453b2c1cbSChuck Lever TP_STRUCT__entry( 92562a89501SChuck Lever __field(u32, mr_id) 92653b2c1cbSChuck Lever __field(int, rc) 92753b2c1cbSChuck Lever ), 92853b2c1cbSChuck Lever 92953b2c1cbSChuck Lever TP_fast_assign( 93062a89501SChuck Lever __entry->mr_id = mr->frwr.fr_mr->res.id; 93153b2c1cbSChuck Lever __entry->rc = rc; 93253b2c1cbSChuck Lever ), 93353b2c1cbSChuck Lever 93462a89501SChuck Lever TP_printk("mr.id=%u: rc=%d", 93562a89501SChuck Lever __entry->mr_id, __entry->rc 93653b2c1cbSChuck Lever ) 93753b2c1cbSChuck Lever ); 93853b2c1cbSChuck Lever 93953b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_dereg, 94053b2c1cbSChuck Lever TP_PROTO( 94153b2c1cbSChuck Lever const struct rpcrdma_mr *mr, 94253b2c1cbSChuck Lever int rc 94353b2c1cbSChuck Lever ), 94453b2c1cbSChuck Lever 94553b2c1cbSChuck Lever TP_ARGS(mr, rc), 94653b2c1cbSChuck Lever 94753b2c1cbSChuck Lever TP_STRUCT__entry( 94862a89501SChuck Lever __field(u32, mr_id) 94962a89501SChuck Lever __field(int, nents) 95053b2c1cbSChuck Lever __field(u32, handle) 95153b2c1cbSChuck Lever __field(u32, length) 95253b2c1cbSChuck Lever __field(u64, offset) 95353b2c1cbSChuck Lever __field(u32, dir) 95453b2c1cbSChuck Lever __field(int, rc) 95553b2c1cbSChuck Lever ), 95653b2c1cbSChuck Lever 95753b2c1cbSChuck Lever TP_fast_assign( 95862a89501SChuck Lever __entry->mr_id = mr->frwr.fr_mr->res.id; 95962a89501SChuck Lever __entry->nents = mr->mr_nents; 96053b2c1cbSChuck Lever __entry->handle = mr->mr_handle; 96153b2c1cbSChuck Lever __entry->length = mr->mr_length; 96253b2c1cbSChuck Lever __entry->offset = mr->mr_offset; 96353b2c1cbSChuck Lever __entry->dir = mr->mr_dir; 96453b2c1cbSChuck Lever __entry->rc = rc; 96553b2c1cbSChuck Lever ), 96653b2c1cbSChuck Lever 96762a89501SChuck Lever TP_printk("mr.id=%u nents=%d %u@0x%016llx:0x%08x (%s): rc=%d", 96862a89501SChuck Lever __entry->mr_id, __entry->nents, __entry->length, 96953b2c1cbSChuck Lever (unsigned long long)__entry->offset, __entry->handle, 97053b2c1cbSChuck Lever xprtrdma_show_direction(__entry->dir), 97153b2c1cbSChuck Lever __entry->rc 97253b2c1cbSChuck Lever ) 97353b2c1cbSChuck Lever ); 97453b2c1cbSChuck Lever 97553b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_sgerr, 97653b2c1cbSChuck Lever TP_PROTO( 97753b2c1cbSChuck Lever const struct rpcrdma_mr *mr, 97853b2c1cbSChuck Lever int sg_nents 97953b2c1cbSChuck Lever ), 98053b2c1cbSChuck Lever 98153b2c1cbSChuck Lever TP_ARGS(mr, sg_nents), 98253b2c1cbSChuck Lever 98353b2c1cbSChuck Lever TP_STRUCT__entry( 98462a89501SChuck Lever __field(u32, mr_id) 98553b2c1cbSChuck Lever __field(u64, addr) 98653b2c1cbSChuck Lever __field(u32, dir) 98753b2c1cbSChuck Lever __field(int, nents) 98853b2c1cbSChuck Lever ), 98953b2c1cbSChuck Lever 99053b2c1cbSChuck Lever TP_fast_assign( 99162a89501SChuck Lever __entry->mr_id = mr->frwr.fr_mr->res.id; 99253b2c1cbSChuck Lever __entry->addr = mr->mr_sg->dma_address; 99353b2c1cbSChuck Lever __entry->dir = mr->mr_dir; 99453b2c1cbSChuck Lever __entry->nents = sg_nents; 99553b2c1cbSChuck Lever ), 99653b2c1cbSChuck Lever 99762a89501SChuck Lever TP_printk("mr.id=%u DMA addr=0x%llx (%s) sg_nents=%d", 99862a89501SChuck Lever __entry->mr_id, __entry->addr, 99953b2c1cbSChuck Lever xprtrdma_show_direction(__entry->dir), 100053b2c1cbSChuck Lever __entry->nents 100153b2c1cbSChuck Lever ) 100253b2c1cbSChuck Lever ); 100353b2c1cbSChuck Lever 100453b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_maperr, 100553b2c1cbSChuck Lever TP_PROTO( 100653b2c1cbSChuck Lever const struct rpcrdma_mr *mr, 100753b2c1cbSChuck Lever int num_mapped 100853b2c1cbSChuck Lever ), 100953b2c1cbSChuck Lever 101053b2c1cbSChuck Lever TP_ARGS(mr, num_mapped), 101153b2c1cbSChuck Lever 101253b2c1cbSChuck Lever TP_STRUCT__entry( 101362a89501SChuck Lever __field(u32, mr_id) 101453b2c1cbSChuck Lever __field(u64, addr) 101553b2c1cbSChuck Lever __field(u32, dir) 101653b2c1cbSChuck Lever __field(int, num_mapped) 101753b2c1cbSChuck Lever __field(int, nents) 101853b2c1cbSChuck Lever ), 101953b2c1cbSChuck Lever 102053b2c1cbSChuck Lever TP_fast_assign( 102162a89501SChuck Lever __entry->mr_id = mr->frwr.fr_mr->res.id; 102253b2c1cbSChuck Lever __entry->addr = mr->mr_sg->dma_address; 102353b2c1cbSChuck Lever __entry->dir = mr->mr_dir; 102453b2c1cbSChuck Lever __entry->num_mapped = num_mapped; 102553b2c1cbSChuck Lever __entry->nents = mr->mr_nents; 102653b2c1cbSChuck Lever ), 102753b2c1cbSChuck Lever 102862a89501SChuck Lever TP_printk("mr.id=%u DMA addr=0x%llx (%s) nents=%d of %d", 102962a89501SChuck Lever __entry->mr_id, __entry->addr, 103053b2c1cbSChuck Lever xprtrdma_show_direction(__entry->dir), 103153b2c1cbSChuck Lever __entry->num_mapped, __entry->nents 103253b2c1cbSChuck Lever ) 103353b2c1cbSChuck Lever ); 103453b2c1cbSChuck Lever 1035d379eaa8SChuck Lever DEFINE_MR_EVENT(localinv); 1036d379eaa8SChuck Lever DEFINE_MR_EVENT(map); 1037d379eaa8SChuck Lever DEFINE_MR_EVENT(unmap); 103862a89501SChuck Lever DEFINE_MR_EVENT(reminv); 1039d379eaa8SChuck Lever DEFINE_MR_EVENT(recycle); 104058f10ad4SChuck Lever 104153b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_dma_maperr, 104253b2c1cbSChuck Lever TP_PROTO( 104353b2c1cbSChuck Lever u64 addr 104453b2c1cbSChuck Lever ), 104553b2c1cbSChuck Lever 104653b2c1cbSChuck Lever TP_ARGS(addr), 104753b2c1cbSChuck Lever 104853b2c1cbSChuck Lever TP_STRUCT__entry( 104953b2c1cbSChuck Lever __field(u64, addr) 105053b2c1cbSChuck Lever ), 105153b2c1cbSChuck Lever 105253b2c1cbSChuck Lever TP_fast_assign( 105353b2c1cbSChuck Lever __entry->addr = addr; 105453b2c1cbSChuck Lever ), 105553b2c1cbSChuck Lever 105653b2c1cbSChuck Lever TP_printk("dma addr=0x%llx\n", __entry->addr) 105753b2c1cbSChuck Lever ); 105853b2c1cbSChuck Lever 1059b4a7f91cSChuck Lever /** 1060b4a7f91cSChuck Lever ** Reply events 1061b4a7f91cSChuck Lever **/ 1062b4a7f91cSChuck Lever 1063b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_reply, 1064b4a7f91cSChuck Lever TP_PROTO( 1065b4a7f91cSChuck Lever const struct rpc_task *task, 1066b4a7f91cSChuck Lever const struct rpcrdma_rep *rep, 1067b4a7f91cSChuck Lever const struct rpcrdma_req *req, 1068b4a7f91cSChuck Lever unsigned int credits 1069b4a7f91cSChuck Lever ), 1070b4a7f91cSChuck Lever 1071b4a7f91cSChuck Lever TP_ARGS(task, rep, req, credits), 1072b4a7f91cSChuck Lever 1073b4a7f91cSChuck Lever TP_STRUCT__entry( 1074b4a7f91cSChuck Lever __field(unsigned int, task_id) 1075b4a7f91cSChuck Lever __field(unsigned int, client_id) 1076b4a7f91cSChuck Lever __field(const void *, rep) 1077b4a7f91cSChuck Lever __field(const void *, req) 1078b4a7f91cSChuck Lever __field(u32, xid) 1079b4a7f91cSChuck Lever __field(unsigned int, credits) 1080b4a7f91cSChuck Lever ), 1081b4a7f91cSChuck Lever 1082b4a7f91cSChuck Lever TP_fast_assign( 1083b4a7f91cSChuck Lever __entry->task_id = task->tk_pid; 1084b4a7f91cSChuck Lever __entry->client_id = task->tk_client->cl_clid; 1085b4a7f91cSChuck Lever __entry->rep = rep; 1086b4a7f91cSChuck Lever __entry->req = req; 1087b4a7f91cSChuck Lever __entry->xid = be32_to_cpu(rep->rr_xid); 1088b4a7f91cSChuck Lever __entry->credits = credits; 1089b4a7f91cSChuck Lever ), 1090b4a7f91cSChuck Lever 1091b4a7f91cSChuck Lever TP_printk("task:%u@%u xid=0x%08x, %u credits, rep=%p -> req=%p", 1092b4a7f91cSChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 1093b4a7f91cSChuck Lever __entry->credits, __entry->rep, __entry->req 1094b4a7f91cSChuck Lever ) 1095b4a7f91cSChuck Lever ); 1096b4a7f91cSChuck Lever 1097b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_defer_cmp, 1098b4a7f91cSChuck Lever TP_PROTO( 1099b4a7f91cSChuck Lever const struct rpcrdma_rep *rep 1100b4a7f91cSChuck Lever ), 1101b4a7f91cSChuck Lever 1102b4a7f91cSChuck Lever TP_ARGS(rep), 1103b4a7f91cSChuck Lever 1104b4a7f91cSChuck Lever TP_STRUCT__entry( 1105b4a7f91cSChuck Lever __field(unsigned int, task_id) 1106b4a7f91cSChuck Lever __field(unsigned int, client_id) 1107b4a7f91cSChuck Lever __field(const void *, rep) 1108b4a7f91cSChuck Lever __field(u32, xid) 1109b4a7f91cSChuck Lever ), 1110b4a7f91cSChuck Lever 1111b4a7f91cSChuck Lever TP_fast_assign( 1112b4a7f91cSChuck Lever __entry->task_id = rep->rr_rqst->rq_task->tk_pid; 1113b4a7f91cSChuck Lever __entry->client_id = rep->rr_rqst->rq_task->tk_client->cl_clid; 1114b4a7f91cSChuck Lever __entry->rep = rep; 1115b4a7f91cSChuck Lever __entry->xid = be32_to_cpu(rep->rr_xid); 1116b4a7f91cSChuck Lever ), 1117b4a7f91cSChuck Lever 1118b4a7f91cSChuck Lever TP_printk("task:%u@%u xid=0x%08x rep=%p", 1119b4a7f91cSChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 1120b4a7f91cSChuck Lever __entry->rep 1121b4a7f91cSChuck Lever ) 1122b4a7f91cSChuck Lever ); 1123b4a7f91cSChuck Lever 1124b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_vers); 1125b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_rqst); 1126b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_short); 1127b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_hdr); 1128b4a7f91cSChuck Lever 1129e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_fixup, 1130e11b7c96SChuck Lever TP_PROTO( 1131e11b7c96SChuck Lever const struct rpc_rqst *rqst, 1132d4957f01SChuck Lever unsigned long fixup 1133e11b7c96SChuck Lever ), 1134e11b7c96SChuck Lever 1135d4957f01SChuck Lever TP_ARGS(rqst, fixup), 1136e11b7c96SChuck Lever 1137e11b7c96SChuck Lever TP_STRUCT__entry( 1138e11b7c96SChuck Lever __field(unsigned int, task_id) 1139e11b7c96SChuck Lever __field(unsigned int, client_id) 1140d4957f01SChuck Lever __field(unsigned long, fixup) 1141d4957f01SChuck Lever __field(size_t, headlen) 1142d4957f01SChuck Lever __field(unsigned int, pagelen) 1143d4957f01SChuck Lever __field(size_t, taillen) 1144e11b7c96SChuck Lever ), 1145e11b7c96SChuck Lever 1146e11b7c96SChuck Lever TP_fast_assign( 1147e11b7c96SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 1148e11b7c96SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 1149d4957f01SChuck Lever __entry->fixup = fixup; 1150d4957f01SChuck Lever __entry->headlen = rqst->rq_rcv_buf.head[0].iov_len; 1151d4957f01SChuck Lever __entry->pagelen = rqst->rq_rcv_buf.page_len; 1152d4957f01SChuck Lever __entry->taillen = rqst->rq_rcv_buf.tail[0].iov_len; 1153e11b7c96SChuck Lever ), 1154e11b7c96SChuck Lever 1155d4957f01SChuck Lever TP_printk("task:%u@%u fixup=%lu xdr=%zu/%u/%zu", 1156d4957f01SChuck Lever __entry->task_id, __entry->client_id, __entry->fixup, 1157d4957f01SChuck Lever __entry->headlen, __entry->pagelen, __entry->taillen 1158e11b7c96SChuck Lever ) 1159e11b7c96SChuck Lever ); 1160e11b7c96SChuck Lever 1161e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_decode_seg, 1162e11b7c96SChuck Lever TP_PROTO( 1163e11b7c96SChuck Lever u32 handle, 1164e11b7c96SChuck Lever u32 length, 1165e11b7c96SChuck Lever u64 offset 1166e11b7c96SChuck Lever ), 1167e11b7c96SChuck Lever 1168e11b7c96SChuck Lever TP_ARGS(handle, length, offset), 1169e11b7c96SChuck Lever 1170e11b7c96SChuck Lever TP_STRUCT__entry( 1171e11b7c96SChuck Lever __field(u32, handle) 1172e11b7c96SChuck Lever __field(u32, length) 1173e11b7c96SChuck Lever __field(u64, offset) 1174e11b7c96SChuck Lever ), 1175e11b7c96SChuck Lever 1176e11b7c96SChuck Lever TP_fast_assign( 1177e11b7c96SChuck Lever __entry->handle = handle; 1178e11b7c96SChuck Lever __entry->length = length; 1179e11b7c96SChuck Lever __entry->offset = offset; 1180e11b7c96SChuck Lever ), 1181e11b7c96SChuck Lever 1182e11b7c96SChuck Lever TP_printk("%u@0x%016llx:0x%08x", 1183e11b7c96SChuck Lever __entry->length, (unsigned long long)__entry->offset, 1184e11b7c96SChuck Lever __entry->handle 1185e11b7c96SChuck Lever ) 1186e11b7c96SChuck Lever ); 1187e11b7c96SChuck Lever 1188fc1eb807SChuck Lever /** 1189ae724676SChuck Lever ** Allocation/release of rpcrdma_reqs and rpcrdma_reps 1190ae724676SChuck Lever **/ 1191ae724676SChuck Lever 1192395069fcSChuck Lever TRACE_EVENT(xprtrdma_op_allocate, 1193ae724676SChuck Lever TP_PROTO( 1194ae724676SChuck Lever const struct rpc_task *task, 1195ae724676SChuck Lever const struct rpcrdma_req *req 1196ae724676SChuck Lever ), 1197ae724676SChuck Lever 1198ae724676SChuck Lever TP_ARGS(task, req), 1199ae724676SChuck Lever 1200ae724676SChuck Lever TP_STRUCT__entry( 1201ae724676SChuck Lever __field(unsigned int, task_id) 1202ae724676SChuck Lever __field(unsigned int, client_id) 1203ae724676SChuck Lever __field(const void *, req) 1204ae724676SChuck Lever __field(size_t, callsize) 1205ae724676SChuck Lever __field(size_t, rcvsize) 1206ae724676SChuck Lever ), 1207ae724676SChuck Lever 1208ae724676SChuck Lever TP_fast_assign( 1209ae724676SChuck Lever __entry->task_id = task->tk_pid; 1210ae724676SChuck Lever __entry->client_id = task->tk_client->cl_clid; 1211ae724676SChuck Lever __entry->req = req; 1212ae724676SChuck Lever __entry->callsize = task->tk_rqstp->rq_callsize; 1213ae724676SChuck Lever __entry->rcvsize = task->tk_rqstp->rq_rcvsize; 1214ae724676SChuck Lever ), 1215ae724676SChuck Lever 12167c8d9e7cSChuck Lever TP_printk("task:%u@%u req=%p (%zu, %zu)", 1217ae724676SChuck Lever __entry->task_id, __entry->client_id, 12187c8d9e7cSChuck Lever __entry->req, __entry->callsize, __entry->rcvsize 1219ae724676SChuck Lever ) 1220ae724676SChuck Lever ); 1221ae724676SChuck Lever 1222395069fcSChuck Lever TRACE_EVENT(xprtrdma_op_free, 1223ae724676SChuck Lever TP_PROTO( 1224ae724676SChuck Lever const struct rpc_task *task, 1225ae724676SChuck Lever const struct rpcrdma_req *req 1226ae724676SChuck Lever ), 1227ae724676SChuck Lever 1228ae724676SChuck Lever TP_ARGS(task, req), 1229ae724676SChuck Lever 1230ae724676SChuck Lever TP_STRUCT__entry( 1231ae724676SChuck Lever __field(unsigned int, task_id) 1232ae724676SChuck Lever __field(unsigned int, client_id) 1233ae724676SChuck Lever __field(const void *, req) 1234ae724676SChuck Lever __field(const void *, rep) 1235ae724676SChuck Lever ), 1236ae724676SChuck Lever 1237ae724676SChuck Lever TP_fast_assign( 1238ae724676SChuck Lever __entry->task_id = task->tk_pid; 1239ae724676SChuck Lever __entry->client_id = task->tk_client->cl_clid; 1240ae724676SChuck Lever __entry->req = req; 1241ae724676SChuck Lever __entry->rep = req->rl_reply; 1242ae724676SChuck Lever ), 1243ae724676SChuck Lever 1244ae724676SChuck Lever TP_printk("task:%u@%u req=%p rep=%p", 1245ae724676SChuck Lever __entry->task_id, __entry->client_id, 1246ae724676SChuck Lever __entry->req, __entry->rep 1247ae724676SChuck Lever ) 1248ae724676SChuck Lever ); 1249ae724676SChuck Lever 1250ae724676SChuck Lever /** 1251fc1eb807SChuck Lever ** Callback events 1252fc1eb807SChuck Lever **/ 1253fc1eb807SChuck Lever 1254fc1eb807SChuck Lever TRACE_EVENT(xprtrdma_cb_setup, 1255fc1eb807SChuck Lever TP_PROTO( 1256fc1eb807SChuck Lever const struct rpcrdma_xprt *r_xprt, 1257fc1eb807SChuck Lever unsigned int reqs 1258fc1eb807SChuck Lever ), 1259fc1eb807SChuck Lever 1260fc1eb807SChuck Lever TP_ARGS(r_xprt, reqs), 1261fc1eb807SChuck Lever 1262fc1eb807SChuck Lever TP_STRUCT__entry( 1263fc1eb807SChuck Lever __field(const void *, r_xprt) 1264fc1eb807SChuck Lever __field(unsigned int, reqs) 1265fc1eb807SChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 1266fc1eb807SChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 1267fc1eb807SChuck Lever ), 1268fc1eb807SChuck Lever 1269fc1eb807SChuck Lever TP_fast_assign( 1270fc1eb807SChuck Lever __entry->r_xprt = r_xprt; 1271fc1eb807SChuck Lever __entry->reqs = reqs; 1272fc1eb807SChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 1273fc1eb807SChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 1274fc1eb807SChuck Lever ), 1275fc1eb807SChuck Lever 1276fc1eb807SChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: %u reqs", 1277fc1eb807SChuck Lever __get_str(addr), __get_str(port), 1278fc1eb807SChuck Lever __entry->r_xprt, __entry->reqs 1279fc1eb807SChuck Lever ) 1280fc1eb807SChuck Lever ); 1281fc1eb807SChuck Lever 1282fc1eb807SChuck Lever DEFINE_CB_EVENT(xprtrdma_cb_call); 1283fc1eb807SChuck Lever DEFINE_CB_EVENT(xprtrdma_cb_reply); 1284fc1eb807SChuck Lever 128507e10308SChuck Lever TRACE_EVENT(xprtrdma_leaked_rep, 128607e10308SChuck Lever TP_PROTO( 128707e10308SChuck Lever const struct rpc_rqst *rqst, 128807e10308SChuck Lever const struct rpcrdma_rep *rep 128907e10308SChuck Lever ), 129007e10308SChuck Lever 129107e10308SChuck Lever TP_ARGS(rqst, rep), 129207e10308SChuck Lever 129307e10308SChuck Lever TP_STRUCT__entry( 129407e10308SChuck Lever __field(unsigned int, task_id) 129507e10308SChuck Lever __field(unsigned int, client_id) 129607e10308SChuck Lever __field(u32, xid) 129707e10308SChuck Lever __field(const void *, rep) 129807e10308SChuck Lever ), 129907e10308SChuck Lever 130007e10308SChuck Lever TP_fast_assign( 130107e10308SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 130207e10308SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 130307e10308SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 130407e10308SChuck Lever __entry->rep = rep; 130507e10308SChuck Lever ), 130607e10308SChuck Lever 130707e10308SChuck Lever TP_printk("task:%u@%u xid=0x%08x rep=%p", 130807e10308SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 130907e10308SChuck Lever __entry->rep 131007e10308SChuck Lever ) 131107e10308SChuck Lever ); 131207e10308SChuck Lever 131398895edbSChuck Lever /** 131498895edbSChuck Lever ** Server-side RPC/RDMA events 131598895edbSChuck Lever **/ 131698895edbSChuck Lever 131798895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_xprt_event, 131898895edbSChuck Lever TP_PROTO( 131998895edbSChuck Lever const struct svc_xprt *xprt 132098895edbSChuck Lever ), 132198895edbSChuck Lever 132298895edbSChuck Lever TP_ARGS(xprt), 132398895edbSChuck Lever 132498895edbSChuck Lever TP_STRUCT__entry( 132598895edbSChuck Lever __field(const void *, xprt) 132698895edbSChuck Lever __string(addr, xprt->xpt_remotebuf) 132798895edbSChuck Lever ), 132898895edbSChuck Lever 132998895edbSChuck Lever TP_fast_assign( 133098895edbSChuck Lever __entry->xprt = xprt; 133198895edbSChuck Lever __assign_str(addr, xprt->xpt_remotebuf); 133298895edbSChuck Lever ), 133398895edbSChuck Lever 133498895edbSChuck Lever TP_printk("xprt=%p addr=%s", 133598895edbSChuck Lever __entry->xprt, __get_str(addr) 133698895edbSChuck Lever ) 133798895edbSChuck Lever ); 133898895edbSChuck Lever 133998895edbSChuck Lever #define DEFINE_XPRT_EVENT(name) \ 134098895edbSChuck Lever DEFINE_EVENT(svcrdma_xprt_event, svcrdma_xprt_##name, \ 134198895edbSChuck Lever TP_PROTO( \ 134298895edbSChuck Lever const struct svc_xprt *xprt \ 134398895edbSChuck Lever ), \ 134498895edbSChuck Lever TP_ARGS(xprt)) 134598895edbSChuck Lever 134698895edbSChuck Lever DEFINE_XPRT_EVENT(accept); 134798895edbSChuck Lever DEFINE_XPRT_EVENT(fail); 134898895edbSChuck Lever DEFINE_XPRT_EVENT(free); 134998895edbSChuck Lever 135098895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_MSG); 135198895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_NOMSG); 135298895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_MSGP); 135398895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_DONE); 135498895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_ERROR); 135598895edbSChuck Lever 135698895edbSChuck Lever #define show_rpcrdma_proc(x) \ 135798895edbSChuck Lever __print_symbolic(x, \ 135898895edbSChuck Lever { RDMA_MSG, "RDMA_MSG" }, \ 135998895edbSChuck Lever { RDMA_NOMSG, "RDMA_NOMSG" }, \ 136098895edbSChuck Lever { RDMA_MSGP, "RDMA_MSGP" }, \ 136198895edbSChuck Lever { RDMA_DONE, "RDMA_DONE" }, \ 136298895edbSChuck Lever { RDMA_ERROR, "RDMA_ERROR" }) 136398895edbSChuck Lever 136498895edbSChuck Lever TRACE_EVENT(svcrdma_decode_rqst, 136598895edbSChuck Lever TP_PROTO( 136698895edbSChuck Lever __be32 *p, 136798895edbSChuck Lever unsigned int hdrlen 136898895edbSChuck Lever ), 136998895edbSChuck Lever 137098895edbSChuck Lever TP_ARGS(p, hdrlen), 137198895edbSChuck Lever 137298895edbSChuck Lever TP_STRUCT__entry( 137398895edbSChuck Lever __field(u32, xid) 137498895edbSChuck Lever __field(u32, vers) 137598895edbSChuck Lever __field(u32, proc) 137698895edbSChuck Lever __field(u32, credits) 137798895edbSChuck Lever __field(unsigned int, hdrlen) 137898895edbSChuck Lever ), 137998895edbSChuck Lever 138098895edbSChuck Lever TP_fast_assign( 138198895edbSChuck Lever __entry->xid = be32_to_cpup(p++); 138298895edbSChuck Lever __entry->vers = be32_to_cpup(p++); 138398895edbSChuck Lever __entry->credits = be32_to_cpup(p++); 138498895edbSChuck Lever __entry->proc = be32_to_cpup(p); 138598895edbSChuck Lever __entry->hdrlen = hdrlen; 138698895edbSChuck Lever ), 138798895edbSChuck Lever 138898895edbSChuck Lever TP_printk("xid=0x%08x vers=%u credits=%u proc=%s hdrlen=%u", 138998895edbSChuck Lever __entry->xid, __entry->vers, __entry->credits, 139098895edbSChuck Lever show_rpcrdma_proc(__entry->proc), __entry->hdrlen) 139198895edbSChuck Lever ); 139298895edbSChuck Lever 139398895edbSChuck Lever TRACE_EVENT(svcrdma_decode_short, 139498895edbSChuck Lever TP_PROTO( 139598895edbSChuck Lever unsigned int hdrlen 139698895edbSChuck Lever ), 139798895edbSChuck Lever 139898895edbSChuck Lever TP_ARGS(hdrlen), 139998895edbSChuck Lever 140098895edbSChuck Lever TP_STRUCT__entry( 140198895edbSChuck Lever __field(unsigned int, hdrlen) 140298895edbSChuck Lever ), 140398895edbSChuck Lever 140498895edbSChuck Lever TP_fast_assign( 140598895edbSChuck Lever __entry->hdrlen = hdrlen; 140698895edbSChuck Lever ), 140798895edbSChuck Lever 140898895edbSChuck Lever TP_printk("hdrlen=%u", __entry->hdrlen) 140998895edbSChuck Lever ); 141098895edbSChuck Lever 141198895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_badreq_event, 141298895edbSChuck Lever TP_PROTO( 141398895edbSChuck Lever __be32 *p 141498895edbSChuck Lever ), 141598895edbSChuck Lever 141698895edbSChuck Lever TP_ARGS(p), 141798895edbSChuck Lever 141898895edbSChuck Lever TP_STRUCT__entry( 141998895edbSChuck Lever __field(u32, xid) 142098895edbSChuck Lever __field(u32, vers) 142198895edbSChuck Lever __field(u32, proc) 142298895edbSChuck Lever __field(u32, credits) 142398895edbSChuck Lever ), 142498895edbSChuck Lever 142598895edbSChuck Lever TP_fast_assign( 142698895edbSChuck Lever __entry->xid = be32_to_cpup(p++); 142798895edbSChuck Lever __entry->vers = be32_to_cpup(p++); 142898895edbSChuck Lever __entry->credits = be32_to_cpup(p++); 142998895edbSChuck Lever __entry->proc = be32_to_cpup(p); 143098895edbSChuck Lever ), 143198895edbSChuck Lever 143298895edbSChuck Lever TP_printk("xid=0x%08x vers=%u credits=%u proc=%u", 143398895edbSChuck Lever __entry->xid, __entry->vers, __entry->credits, __entry->proc) 143498895edbSChuck Lever ); 143598895edbSChuck Lever 143698895edbSChuck Lever #define DEFINE_BADREQ_EVENT(name) \ 143798895edbSChuck Lever DEFINE_EVENT(svcrdma_badreq_event, svcrdma_decode_##name,\ 143898895edbSChuck Lever TP_PROTO( \ 143998895edbSChuck Lever __be32 *p \ 144098895edbSChuck Lever ), \ 144198895edbSChuck Lever TP_ARGS(p)) 144298895edbSChuck Lever 144398895edbSChuck Lever DEFINE_BADREQ_EVENT(badvers); 144498895edbSChuck Lever DEFINE_BADREQ_EVENT(drop); 144598895edbSChuck Lever DEFINE_BADREQ_EVENT(badproc); 144698895edbSChuck Lever DEFINE_BADREQ_EVENT(parse); 144798895edbSChuck Lever 144898895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_segment_event, 144998895edbSChuck Lever TP_PROTO( 145098895edbSChuck Lever u32 handle, 145198895edbSChuck Lever u32 length, 145298895edbSChuck Lever u64 offset 145398895edbSChuck Lever ), 145498895edbSChuck Lever 145598895edbSChuck Lever TP_ARGS(handle, length, offset), 145698895edbSChuck Lever 145798895edbSChuck Lever TP_STRUCT__entry( 145898895edbSChuck Lever __field(u32, handle) 145998895edbSChuck Lever __field(u32, length) 146098895edbSChuck Lever __field(u64, offset) 146198895edbSChuck Lever ), 146298895edbSChuck Lever 146398895edbSChuck Lever TP_fast_assign( 146498895edbSChuck Lever __entry->handle = handle; 146598895edbSChuck Lever __entry->length = length; 146698895edbSChuck Lever __entry->offset = offset; 146798895edbSChuck Lever ), 146898895edbSChuck Lever 146998895edbSChuck Lever TP_printk("%u@0x%016llx:0x%08x", 147098895edbSChuck Lever __entry->length, (unsigned long long)__entry->offset, 147198895edbSChuck Lever __entry->handle 147298895edbSChuck Lever ) 147398895edbSChuck Lever ); 147498895edbSChuck Lever 147598895edbSChuck Lever #define DEFINE_SEGMENT_EVENT(name) \ 147698895edbSChuck Lever DEFINE_EVENT(svcrdma_segment_event, svcrdma_encode_##name,\ 147798895edbSChuck Lever TP_PROTO( \ 147898895edbSChuck Lever u32 handle, \ 147998895edbSChuck Lever u32 length, \ 148098895edbSChuck Lever u64 offset \ 148198895edbSChuck Lever ), \ 148298895edbSChuck Lever TP_ARGS(handle, length, offset)) 148398895edbSChuck Lever 148498895edbSChuck Lever DEFINE_SEGMENT_EVENT(rseg); 148598895edbSChuck Lever DEFINE_SEGMENT_EVENT(wseg); 148698895edbSChuck Lever 148798895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_chunk_event, 148898895edbSChuck Lever TP_PROTO( 148998895edbSChuck Lever u32 length 149098895edbSChuck Lever ), 149198895edbSChuck Lever 149298895edbSChuck Lever TP_ARGS(length), 149398895edbSChuck Lever 149498895edbSChuck Lever TP_STRUCT__entry( 149598895edbSChuck Lever __field(u32, length) 149698895edbSChuck Lever ), 149798895edbSChuck Lever 149898895edbSChuck Lever TP_fast_assign( 149998895edbSChuck Lever __entry->length = length; 150098895edbSChuck Lever ), 150198895edbSChuck Lever 150298895edbSChuck Lever TP_printk("length=%u", 150398895edbSChuck Lever __entry->length 150498895edbSChuck Lever ) 150598895edbSChuck Lever ); 150698895edbSChuck Lever 150798895edbSChuck Lever #define DEFINE_CHUNK_EVENT(name) \ 150898895edbSChuck Lever DEFINE_EVENT(svcrdma_chunk_event, svcrdma_encode_##name,\ 150998895edbSChuck Lever TP_PROTO( \ 151098895edbSChuck Lever u32 length \ 151198895edbSChuck Lever ), \ 151298895edbSChuck Lever TP_ARGS(length)) 151398895edbSChuck Lever 151498895edbSChuck Lever DEFINE_CHUNK_EVENT(pzr); 151598895edbSChuck Lever DEFINE_CHUNK_EVENT(write); 151698895edbSChuck Lever DEFINE_CHUNK_EVENT(reply); 151798895edbSChuck Lever 151898895edbSChuck Lever TRACE_EVENT(svcrdma_encode_read, 151998895edbSChuck Lever TP_PROTO( 152098895edbSChuck Lever u32 length, 152198895edbSChuck Lever u32 position 152298895edbSChuck Lever ), 152398895edbSChuck Lever 152498895edbSChuck Lever TP_ARGS(length, position), 152598895edbSChuck Lever 152698895edbSChuck Lever TP_STRUCT__entry( 152798895edbSChuck Lever __field(u32, length) 152898895edbSChuck Lever __field(u32, position) 152998895edbSChuck Lever ), 153098895edbSChuck Lever 153198895edbSChuck Lever TP_fast_assign( 153298895edbSChuck Lever __entry->length = length; 153398895edbSChuck Lever __entry->position = position; 153498895edbSChuck Lever ), 153598895edbSChuck Lever 153698895edbSChuck Lever TP_printk("length=%u position=%u", 153798895edbSChuck Lever __entry->length, __entry->position 153898895edbSChuck Lever ) 153998895edbSChuck Lever ); 154098895edbSChuck Lever 154198895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_error_event, 154298895edbSChuck Lever TP_PROTO( 154398895edbSChuck Lever __be32 xid 154498895edbSChuck Lever ), 154598895edbSChuck Lever 154698895edbSChuck Lever TP_ARGS(xid), 154798895edbSChuck Lever 154898895edbSChuck Lever TP_STRUCT__entry( 154998895edbSChuck Lever __field(u32, xid) 155098895edbSChuck Lever ), 155198895edbSChuck Lever 155298895edbSChuck Lever TP_fast_assign( 155398895edbSChuck Lever __entry->xid = be32_to_cpu(xid); 155498895edbSChuck Lever ), 155598895edbSChuck Lever 155698895edbSChuck Lever TP_printk("xid=0x%08x", 155798895edbSChuck Lever __entry->xid 155898895edbSChuck Lever ) 155998895edbSChuck Lever ); 156098895edbSChuck Lever 156198895edbSChuck Lever #define DEFINE_ERROR_EVENT(name) \ 156298895edbSChuck Lever DEFINE_EVENT(svcrdma_error_event, svcrdma_err_##name, \ 156398895edbSChuck Lever TP_PROTO( \ 156498895edbSChuck Lever __be32 xid \ 156598895edbSChuck Lever ), \ 156698895edbSChuck Lever TP_ARGS(xid)) 156798895edbSChuck Lever 156898895edbSChuck Lever DEFINE_ERROR_EVENT(vers); 156998895edbSChuck Lever DEFINE_ERROR_EVENT(chunk); 157098895edbSChuck Lever 1571bd2abef3SChuck Lever /** 1572bd2abef3SChuck Lever ** Server-side RDMA API events 1573bd2abef3SChuck Lever **/ 1574bd2abef3SChuck Lever 1575832b2cb9SChuck Lever DECLARE_EVENT_CLASS(svcrdma_dma_map_class, 1576bd2abef3SChuck Lever TP_PROTO( 1577bd2abef3SChuck Lever const struct svcxprt_rdma *rdma, 1578832b2cb9SChuck Lever u64 dma_addr, 1579832b2cb9SChuck Lever u32 length 1580bd2abef3SChuck Lever ), 1581bd2abef3SChuck Lever 1582832b2cb9SChuck Lever TP_ARGS(rdma, dma_addr, length), 1583bd2abef3SChuck Lever 1584bd2abef3SChuck Lever TP_STRUCT__entry( 1585832b2cb9SChuck Lever __field(u64, dma_addr) 1586832b2cb9SChuck Lever __field(u32, length) 1587bd2abef3SChuck Lever __string(device, rdma->sc_cm_id->device->name) 1588bd2abef3SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1589bd2abef3SChuck Lever ), 1590bd2abef3SChuck Lever 1591bd2abef3SChuck Lever TP_fast_assign( 1592832b2cb9SChuck Lever __entry->dma_addr = dma_addr; 1593832b2cb9SChuck Lever __entry->length = length; 1594bd2abef3SChuck Lever __assign_str(device, rdma->sc_cm_id->device->name); 1595bd2abef3SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1596bd2abef3SChuck Lever ), 1597bd2abef3SChuck Lever 1598832b2cb9SChuck Lever TP_printk("addr=%s device=%s dma_addr=%llu length=%u", 1599832b2cb9SChuck Lever __get_str(addr), __get_str(device), 1600832b2cb9SChuck Lever __entry->dma_addr, __entry->length 1601bd2abef3SChuck Lever ) 1602bd2abef3SChuck Lever ); 1603bd2abef3SChuck Lever 1604832b2cb9SChuck Lever #define DEFINE_SVC_DMA_EVENT(name) \ 1605832b2cb9SChuck Lever DEFINE_EVENT(svcrdma_dma_map_class, svcrdma_##name, \ 1606832b2cb9SChuck Lever TP_PROTO( \ 1607832b2cb9SChuck Lever const struct svcxprt_rdma *rdma,\ 1608832b2cb9SChuck Lever u64 dma_addr, \ 1609832b2cb9SChuck Lever u32 length \ 1610832b2cb9SChuck Lever ), \ 1611832b2cb9SChuck Lever TP_ARGS(rdma, dma_addr, length)) 1612832b2cb9SChuck Lever 1613832b2cb9SChuck Lever DEFINE_SVC_DMA_EVENT(dma_map_page); 1614832b2cb9SChuck Lever DEFINE_SVC_DMA_EVENT(dma_unmap_page); 1615832b2cb9SChuck Lever 1616bd2abef3SChuck Lever TRACE_EVENT(svcrdma_dma_map_rwctx, 1617bd2abef3SChuck Lever TP_PROTO( 1618bd2abef3SChuck Lever const struct svcxprt_rdma *rdma, 1619bd2abef3SChuck Lever int status 1620bd2abef3SChuck Lever ), 1621bd2abef3SChuck Lever 1622bd2abef3SChuck Lever TP_ARGS(rdma, status), 1623bd2abef3SChuck Lever 1624bd2abef3SChuck Lever TP_STRUCT__entry( 1625bd2abef3SChuck Lever __field(int, status) 1626bd2abef3SChuck Lever __string(device, rdma->sc_cm_id->device->name) 1627bd2abef3SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1628bd2abef3SChuck Lever ), 1629bd2abef3SChuck Lever 1630bd2abef3SChuck Lever TP_fast_assign( 1631bd2abef3SChuck Lever __entry->status = status; 1632bd2abef3SChuck Lever __assign_str(device, rdma->sc_cm_id->device->name); 1633bd2abef3SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1634bd2abef3SChuck Lever ), 1635bd2abef3SChuck Lever 1636bd2abef3SChuck Lever TP_printk("addr=%s device=%s status=%d", 1637bd2abef3SChuck Lever __get_str(addr), __get_str(device), __entry->status 1638bd2abef3SChuck Lever ) 1639bd2abef3SChuck Lever ); 1640bd2abef3SChuck Lever 1641bd2abef3SChuck Lever TRACE_EVENT(svcrdma_send_failed, 1642bd2abef3SChuck Lever TP_PROTO( 1643bd2abef3SChuck Lever const struct svc_rqst *rqst, 1644bd2abef3SChuck Lever int status 1645bd2abef3SChuck Lever ), 1646bd2abef3SChuck Lever 1647bd2abef3SChuck Lever TP_ARGS(rqst, status), 1648bd2abef3SChuck Lever 1649bd2abef3SChuck Lever TP_STRUCT__entry( 1650bd2abef3SChuck Lever __field(int, status) 1651bd2abef3SChuck Lever __field(u32, xid) 1652bd2abef3SChuck Lever __field(const void *, xprt) 1653bd2abef3SChuck Lever __string(addr, rqst->rq_xprt->xpt_remotebuf) 1654bd2abef3SChuck Lever ), 1655bd2abef3SChuck Lever 1656bd2abef3SChuck Lever TP_fast_assign( 1657bd2abef3SChuck Lever __entry->status = status; 1658bd2abef3SChuck Lever __entry->xid = __be32_to_cpu(rqst->rq_xid); 1659bd2abef3SChuck Lever __entry->xprt = rqst->rq_xprt; 1660bd2abef3SChuck Lever __assign_str(addr, rqst->rq_xprt->xpt_remotebuf); 1661bd2abef3SChuck Lever ), 1662bd2abef3SChuck Lever 1663bd2abef3SChuck Lever TP_printk("xprt=%p addr=%s xid=0x%08x status=%d", 1664bd2abef3SChuck Lever __entry->xprt, __get_str(addr), 1665bd2abef3SChuck Lever __entry->xid, __entry->status 1666bd2abef3SChuck Lever ) 1667bd2abef3SChuck Lever ); 1668bd2abef3SChuck Lever 1669bd2abef3SChuck Lever DECLARE_EVENT_CLASS(svcrdma_sendcomp_event, 1670bd2abef3SChuck Lever TP_PROTO( 1671bd2abef3SChuck Lever const struct ib_wc *wc 1672bd2abef3SChuck Lever ), 1673bd2abef3SChuck Lever 1674bd2abef3SChuck Lever TP_ARGS(wc), 1675bd2abef3SChuck Lever 1676bd2abef3SChuck Lever TP_STRUCT__entry( 1677bd2abef3SChuck Lever __field(const void *, cqe) 1678bd2abef3SChuck Lever __field(unsigned int, status) 1679bd2abef3SChuck Lever __field(unsigned int, vendor_err) 1680bd2abef3SChuck Lever ), 1681bd2abef3SChuck Lever 1682bd2abef3SChuck Lever TP_fast_assign( 1683bd2abef3SChuck Lever __entry->cqe = wc->wr_cqe; 1684bd2abef3SChuck Lever __entry->status = wc->status; 1685bd2abef3SChuck Lever if (wc->status) 1686bd2abef3SChuck Lever __entry->vendor_err = wc->vendor_err; 1687bd2abef3SChuck Lever else 1688bd2abef3SChuck Lever __entry->vendor_err = 0; 1689bd2abef3SChuck Lever ), 1690bd2abef3SChuck Lever 1691bd2abef3SChuck Lever TP_printk("cqe=%p status=%s (%u/0x%x)", 1692bd2abef3SChuck Lever __entry->cqe, rdma_show_wc_status(__entry->status), 1693bd2abef3SChuck Lever __entry->status, __entry->vendor_err 1694bd2abef3SChuck Lever ) 1695bd2abef3SChuck Lever ); 1696bd2abef3SChuck Lever 1697bd2abef3SChuck Lever #define DEFINE_SENDCOMP_EVENT(name) \ 1698bd2abef3SChuck Lever DEFINE_EVENT(svcrdma_sendcomp_event, svcrdma_wc_##name, \ 1699bd2abef3SChuck Lever TP_PROTO( \ 1700bd2abef3SChuck Lever const struct ib_wc *wc \ 1701bd2abef3SChuck Lever ), \ 1702bd2abef3SChuck Lever TP_ARGS(wc)) 1703bd2abef3SChuck Lever 1704bd2abef3SChuck Lever TRACE_EVENT(svcrdma_post_send, 1705bd2abef3SChuck Lever TP_PROTO( 1706bd2abef3SChuck Lever const struct ib_send_wr *wr, 1707bd2abef3SChuck Lever int status 1708bd2abef3SChuck Lever ), 1709bd2abef3SChuck Lever 1710bd2abef3SChuck Lever TP_ARGS(wr, status), 1711bd2abef3SChuck Lever 1712bd2abef3SChuck Lever TP_STRUCT__entry( 1713bd2abef3SChuck Lever __field(const void *, cqe) 1714bd2abef3SChuck Lever __field(unsigned int, num_sge) 1715bd2abef3SChuck Lever __field(u32, inv_rkey) 1716bd2abef3SChuck Lever __field(int, status) 1717bd2abef3SChuck Lever ), 1718bd2abef3SChuck Lever 1719bd2abef3SChuck Lever TP_fast_assign( 1720bd2abef3SChuck Lever __entry->cqe = wr->wr_cqe; 1721bd2abef3SChuck Lever __entry->num_sge = wr->num_sge; 1722bd2abef3SChuck Lever __entry->inv_rkey = (wr->opcode == IB_WR_SEND_WITH_INV) ? 1723bd2abef3SChuck Lever wr->ex.invalidate_rkey : 0; 1724bd2abef3SChuck Lever __entry->status = status; 1725bd2abef3SChuck Lever ), 1726bd2abef3SChuck Lever 1727bd2abef3SChuck Lever TP_printk("cqe=%p num_sge=%u inv_rkey=0x%08x status=%d", 1728bd2abef3SChuck Lever __entry->cqe, __entry->num_sge, 1729bd2abef3SChuck Lever __entry->inv_rkey, __entry->status 1730bd2abef3SChuck Lever ) 1731bd2abef3SChuck Lever ); 1732bd2abef3SChuck Lever 1733bd2abef3SChuck Lever DEFINE_SENDCOMP_EVENT(send); 1734bd2abef3SChuck Lever 1735bd2abef3SChuck Lever TRACE_EVENT(svcrdma_post_recv, 1736bd2abef3SChuck Lever TP_PROTO( 1737bd2abef3SChuck Lever const struct ib_recv_wr *wr, 1738bd2abef3SChuck Lever int status 1739bd2abef3SChuck Lever ), 1740bd2abef3SChuck Lever 1741bd2abef3SChuck Lever TP_ARGS(wr, status), 1742bd2abef3SChuck Lever 1743bd2abef3SChuck Lever TP_STRUCT__entry( 1744bd2abef3SChuck Lever __field(const void *, cqe) 1745bd2abef3SChuck Lever __field(int, status) 1746bd2abef3SChuck Lever ), 1747bd2abef3SChuck Lever 1748bd2abef3SChuck Lever TP_fast_assign( 1749bd2abef3SChuck Lever __entry->cqe = wr->wr_cqe; 1750bd2abef3SChuck Lever __entry->status = status; 1751bd2abef3SChuck Lever ), 1752bd2abef3SChuck Lever 1753bd2abef3SChuck Lever TP_printk("cqe=%p status=%d", 1754bd2abef3SChuck Lever __entry->cqe, __entry->status 1755bd2abef3SChuck Lever ) 1756bd2abef3SChuck Lever ); 1757bd2abef3SChuck Lever 1758bd2abef3SChuck Lever TRACE_EVENT(svcrdma_wc_receive, 1759bd2abef3SChuck Lever TP_PROTO( 1760bd2abef3SChuck Lever const struct ib_wc *wc 1761bd2abef3SChuck Lever ), 1762bd2abef3SChuck Lever 1763bd2abef3SChuck Lever TP_ARGS(wc), 1764bd2abef3SChuck Lever 1765bd2abef3SChuck Lever TP_STRUCT__entry( 1766bd2abef3SChuck Lever __field(const void *, cqe) 1767bd2abef3SChuck Lever __field(u32, byte_len) 1768bd2abef3SChuck Lever __field(unsigned int, status) 1769bd2abef3SChuck Lever __field(u32, vendor_err) 1770bd2abef3SChuck Lever ), 1771bd2abef3SChuck Lever 1772bd2abef3SChuck Lever TP_fast_assign( 1773bd2abef3SChuck Lever __entry->cqe = wc->wr_cqe; 1774bd2abef3SChuck Lever __entry->status = wc->status; 1775bd2abef3SChuck Lever if (wc->status) { 1776bd2abef3SChuck Lever __entry->byte_len = 0; 1777bd2abef3SChuck Lever __entry->vendor_err = wc->vendor_err; 1778bd2abef3SChuck Lever } else { 1779bd2abef3SChuck Lever __entry->byte_len = wc->byte_len; 1780bd2abef3SChuck Lever __entry->vendor_err = 0; 1781bd2abef3SChuck Lever } 1782bd2abef3SChuck Lever ), 1783bd2abef3SChuck Lever 1784bd2abef3SChuck Lever TP_printk("cqe=%p byte_len=%u status=%s (%u/0x%x)", 1785bd2abef3SChuck Lever __entry->cqe, __entry->byte_len, 1786bd2abef3SChuck Lever rdma_show_wc_status(__entry->status), 1787bd2abef3SChuck Lever __entry->status, __entry->vendor_err 1788bd2abef3SChuck Lever ) 1789bd2abef3SChuck Lever ); 1790bd2abef3SChuck Lever 1791bd2abef3SChuck Lever TRACE_EVENT(svcrdma_post_rw, 1792bd2abef3SChuck Lever TP_PROTO( 1793bd2abef3SChuck Lever const void *cqe, 1794bd2abef3SChuck Lever int sqecount, 1795bd2abef3SChuck Lever int status 1796bd2abef3SChuck Lever ), 1797bd2abef3SChuck Lever 1798bd2abef3SChuck Lever TP_ARGS(cqe, sqecount, status), 1799bd2abef3SChuck Lever 1800bd2abef3SChuck Lever TP_STRUCT__entry( 1801bd2abef3SChuck Lever __field(const void *, cqe) 1802bd2abef3SChuck Lever __field(int, sqecount) 1803bd2abef3SChuck Lever __field(int, status) 1804bd2abef3SChuck Lever ), 1805bd2abef3SChuck Lever 1806bd2abef3SChuck Lever TP_fast_assign( 1807bd2abef3SChuck Lever __entry->cqe = cqe; 1808bd2abef3SChuck Lever __entry->sqecount = sqecount; 1809bd2abef3SChuck Lever __entry->status = status; 1810bd2abef3SChuck Lever ), 1811bd2abef3SChuck Lever 1812bd2abef3SChuck Lever TP_printk("cqe=%p sqecount=%d status=%d", 1813bd2abef3SChuck Lever __entry->cqe, __entry->sqecount, __entry->status 1814bd2abef3SChuck Lever ) 1815bd2abef3SChuck Lever ); 1816bd2abef3SChuck Lever 1817bd2abef3SChuck Lever DEFINE_SENDCOMP_EVENT(read); 1818bd2abef3SChuck Lever DEFINE_SENDCOMP_EVENT(write); 1819bd2abef3SChuck Lever 1820bd2abef3SChuck Lever TRACE_EVENT(svcrdma_cm_event, 1821bd2abef3SChuck Lever TP_PROTO( 1822bd2abef3SChuck Lever const struct rdma_cm_event *event, 1823bd2abef3SChuck Lever const struct sockaddr *sap 1824bd2abef3SChuck Lever ), 1825bd2abef3SChuck Lever 1826bd2abef3SChuck Lever TP_ARGS(event, sap), 1827bd2abef3SChuck Lever 1828bd2abef3SChuck Lever TP_STRUCT__entry( 1829bd2abef3SChuck Lever __field(unsigned int, event) 1830bd2abef3SChuck Lever __field(int, status) 1831bd2abef3SChuck Lever __array(__u8, addr, INET6_ADDRSTRLEN + 10) 1832bd2abef3SChuck Lever ), 1833bd2abef3SChuck Lever 1834bd2abef3SChuck Lever TP_fast_assign( 1835bd2abef3SChuck Lever __entry->event = event->event; 1836bd2abef3SChuck Lever __entry->status = event->status; 1837bd2abef3SChuck Lever snprintf(__entry->addr, sizeof(__entry->addr) - 1, 1838bd2abef3SChuck Lever "%pISpc", sap); 1839bd2abef3SChuck Lever ), 1840bd2abef3SChuck Lever 1841bd2abef3SChuck Lever TP_printk("addr=%s event=%s (%u/%d)", 1842bd2abef3SChuck Lever __entry->addr, 1843bd2abef3SChuck Lever rdma_show_cm_event(__entry->event), 1844bd2abef3SChuck Lever __entry->event, __entry->status 1845bd2abef3SChuck Lever ) 1846bd2abef3SChuck Lever ); 1847bd2abef3SChuck Lever 1848bd2abef3SChuck Lever TRACE_EVENT(svcrdma_qp_error, 1849bd2abef3SChuck Lever TP_PROTO( 1850bd2abef3SChuck Lever const struct ib_event *event, 1851bd2abef3SChuck Lever const struct sockaddr *sap 1852bd2abef3SChuck Lever ), 1853bd2abef3SChuck Lever 1854bd2abef3SChuck Lever TP_ARGS(event, sap), 1855bd2abef3SChuck Lever 1856bd2abef3SChuck Lever TP_STRUCT__entry( 1857bd2abef3SChuck Lever __field(unsigned int, event) 1858bd2abef3SChuck Lever __string(device, event->device->name) 1859bd2abef3SChuck Lever __array(__u8, addr, INET6_ADDRSTRLEN + 10) 1860bd2abef3SChuck Lever ), 1861bd2abef3SChuck Lever 1862bd2abef3SChuck Lever TP_fast_assign( 1863bd2abef3SChuck Lever __entry->event = event->event; 1864bd2abef3SChuck Lever __assign_str(device, event->device->name); 1865bd2abef3SChuck Lever snprintf(__entry->addr, sizeof(__entry->addr) - 1, 1866bd2abef3SChuck Lever "%pISpc", sap); 1867bd2abef3SChuck Lever ), 1868bd2abef3SChuck Lever 1869bd2abef3SChuck Lever TP_printk("addr=%s dev=%s event=%s (%u)", 1870bd2abef3SChuck Lever __entry->addr, __get_str(device), 1871bd2abef3SChuck Lever rdma_show_ib_event(__entry->event), __entry->event 1872bd2abef3SChuck Lever ) 1873bd2abef3SChuck Lever ); 1874bd2abef3SChuck Lever 1875bd2abef3SChuck Lever DECLARE_EVENT_CLASS(svcrdma_sendqueue_event, 1876bd2abef3SChuck Lever TP_PROTO( 1877bd2abef3SChuck Lever const struct svcxprt_rdma *rdma 1878bd2abef3SChuck Lever ), 1879bd2abef3SChuck Lever 1880bd2abef3SChuck Lever TP_ARGS(rdma), 1881bd2abef3SChuck Lever 1882bd2abef3SChuck Lever TP_STRUCT__entry( 1883bd2abef3SChuck Lever __field(int, avail) 1884bd2abef3SChuck Lever __field(int, depth) 1885bd2abef3SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1886bd2abef3SChuck Lever ), 1887bd2abef3SChuck Lever 1888bd2abef3SChuck Lever TP_fast_assign( 1889bd2abef3SChuck Lever __entry->avail = atomic_read(&rdma->sc_sq_avail); 1890bd2abef3SChuck Lever __entry->depth = rdma->sc_sq_depth; 1891bd2abef3SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1892bd2abef3SChuck Lever ), 1893bd2abef3SChuck Lever 1894bd2abef3SChuck Lever TP_printk("addr=%s sc_sq_avail=%d/%d", 1895bd2abef3SChuck Lever __get_str(addr), __entry->avail, __entry->depth 1896bd2abef3SChuck Lever ) 1897bd2abef3SChuck Lever ); 1898bd2abef3SChuck Lever 1899bd2abef3SChuck Lever #define DEFINE_SQ_EVENT(name) \ 1900bd2abef3SChuck Lever DEFINE_EVENT(svcrdma_sendqueue_event, svcrdma_sq_##name,\ 1901bd2abef3SChuck Lever TP_PROTO( \ 1902bd2abef3SChuck Lever const struct svcxprt_rdma *rdma \ 1903bd2abef3SChuck Lever ), \ 1904bd2abef3SChuck Lever TP_ARGS(rdma)) 1905bd2abef3SChuck Lever 1906bd2abef3SChuck Lever DEFINE_SQ_EVENT(full); 1907bd2abef3SChuck Lever DEFINE_SQ_EVENT(retry); 1908bd2abef3SChuck Lever 1909e48f083eSChuck Lever #endif /* _TRACE_RPCRDMA_H */ 1910e48f083eSChuck Lever 1911e48f083eSChuck Lever #include <trace/define_trace.h> 1912