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; 107e28ce900SChuck Lever __entry->connect_status = r_xprt->rx_ep->re_connect_status; 1087b020f17SChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 1097b020f17SChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 1107b020f17SChuck Lever ), 1117b020f17SChuck Lever 112d6ccebf9SChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: rc=%d connection 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 345f54c870dSChuck Lever TRACE_EVENT(xprtrdma_inline_thresh, 346f54c870dSChuck Lever TP_PROTO( 347745b734cSChuck Lever const struct rpcrdma_ep *ep 348f54c870dSChuck Lever ), 349f54c870dSChuck Lever 350745b734cSChuck Lever TP_ARGS(ep), 351f54c870dSChuck Lever 352f54c870dSChuck Lever TP_STRUCT__entry( 353f54c870dSChuck Lever __field(unsigned int, inline_send) 354f54c870dSChuck Lever __field(unsigned int, inline_recv) 355f54c870dSChuck Lever __field(unsigned int, max_send) 356f54c870dSChuck Lever __field(unsigned int, max_recv) 357745b734cSChuck Lever __array(unsigned char, srcaddr, sizeof(struct sockaddr_in6)) 358745b734cSChuck Lever __array(unsigned char, dstaddr, sizeof(struct sockaddr_in6)) 359f54c870dSChuck Lever ), 360f54c870dSChuck Lever 361f54c870dSChuck Lever TP_fast_assign( 362745b734cSChuck Lever const struct rdma_cm_id *id = ep->re_id; 363f54c870dSChuck Lever 36493aa8e0aSChuck Lever __entry->inline_send = ep->re_inline_send; 36593aa8e0aSChuck Lever __entry->inline_recv = ep->re_inline_recv; 36693aa8e0aSChuck Lever __entry->max_send = ep->re_max_inline_send; 36793aa8e0aSChuck Lever __entry->max_recv = ep->re_max_inline_recv; 368745b734cSChuck Lever memcpy(__entry->srcaddr, &id->route.addr.src_addr, 369745b734cSChuck Lever sizeof(struct sockaddr_in6)); 370745b734cSChuck Lever memcpy(__entry->dstaddr, &id->route.addr.dst_addr, 371745b734cSChuck Lever sizeof(struct sockaddr_in6)); 372f54c870dSChuck Lever ), 373f54c870dSChuck Lever 374745b734cSChuck Lever TP_printk("%pISpc -> %pISpc neg send/recv=%u/%u, calc send/recv=%u/%u", 375745b734cSChuck Lever __entry->srcaddr, __entry->dstaddr, 376f54c870dSChuck Lever __entry->inline_send, __entry->inline_recv, 377f54c870dSChuck Lever __entry->max_send, __entry->max_recv 378f54c870dSChuck Lever ) 379f54c870dSChuck Lever ); 380f54c870dSChuck Lever 3817b020f17SChuck Lever DEFINE_CONN_EVENT(connect); 3827b020f17SChuck Lever DEFINE_CONN_EVENT(disconnect); 3837b020f17SChuck Lever 3847b020f17SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_op_inject_dsc); 385a52c23b8SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_op_setport); 3867b020f17SChuck Lever 3877b020f17SChuck Lever TRACE_EVENT(xprtrdma_op_connect, 388b4744e00SChuck Lever TP_PROTO( 389b4744e00SChuck Lever const struct rpcrdma_xprt *r_xprt, 3907b020f17SChuck Lever unsigned long delay 391b4744e00SChuck Lever ), 392b4744e00SChuck Lever 3937b020f17SChuck Lever TP_ARGS(r_xprt, delay), 394b4744e00SChuck Lever 395b4744e00SChuck Lever TP_STRUCT__entry( 396b4744e00SChuck Lever __field(const void *, r_xprt) 3977b020f17SChuck Lever __field(unsigned long, delay) 398b4744e00SChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 399b4744e00SChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 400b4744e00SChuck Lever ), 401b4744e00SChuck Lever 402b4744e00SChuck Lever TP_fast_assign( 403b4744e00SChuck Lever __entry->r_xprt = r_xprt; 4047b020f17SChuck Lever __entry->delay = delay; 405b4744e00SChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 406b4744e00SChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 407b4744e00SChuck Lever ), 408b4744e00SChuck Lever 4097b020f17SChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p delay=%lu", 4107b020f17SChuck Lever __get_str(addr), __get_str(port), __entry->r_xprt, 4117b020f17SChuck Lever __entry->delay 412b4744e00SChuck Lever ) 413b4744e00SChuck Lever ); 414b4744e00SChuck Lever 415b4744e00SChuck Lever 416675dd90aSChuck Lever TRACE_EVENT(xprtrdma_op_set_cto, 417675dd90aSChuck Lever TP_PROTO( 418675dd90aSChuck Lever const struct rpcrdma_xprt *r_xprt, 419675dd90aSChuck Lever unsigned long connect, 420675dd90aSChuck Lever unsigned long reconnect 421675dd90aSChuck Lever ), 422675dd90aSChuck Lever 423675dd90aSChuck Lever TP_ARGS(r_xprt, connect, reconnect), 424675dd90aSChuck Lever 425675dd90aSChuck Lever TP_STRUCT__entry( 426675dd90aSChuck Lever __field(const void *, r_xprt) 427675dd90aSChuck Lever __field(unsigned long, connect) 428675dd90aSChuck Lever __field(unsigned long, reconnect) 429675dd90aSChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 430675dd90aSChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 431675dd90aSChuck Lever ), 432675dd90aSChuck Lever 433675dd90aSChuck Lever TP_fast_assign( 434675dd90aSChuck Lever __entry->r_xprt = r_xprt; 435675dd90aSChuck Lever __entry->connect = connect; 436675dd90aSChuck Lever __entry->reconnect = reconnect; 437675dd90aSChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 438675dd90aSChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 439675dd90aSChuck Lever ), 440675dd90aSChuck Lever 441675dd90aSChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: connect=%lu reconnect=%lu", 442675dd90aSChuck Lever __get_str(addr), __get_str(port), __entry->r_xprt, 443675dd90aSChuck Lever __entry->connect / HZ, __entry->reconnect / HZ 444675dd90aSChuck Lever ) 445675dd90aSChuck Lever ); 446675dd90aSChuck Lever 447f9521d53SChuck Lever TRACE_EVENT(xprtrdma_qp_event, 448643cf323SChuck Lever TP_PROTO( 449745b734cSChuck Lever const struct rpcrdma_ep *ep, 450643cf323SChuck Lever const struct ib_event *event 451643cf323SChuck Lever ), 452643cf323SChuck Lever 453745b734cSChuck Lever TP_ARGS(ep, event), 454643cf323SChuck Lever 455643cf323SChuck Lever TP_STRUCT__entry( 456745b734cSChuck Lever __field(unsigned long, event) 457643cf323SChuck Lever __string(name, event->device->name) 458745b734cSChuck Lever __array(unsigned char, srcaddr, sizeof(struct sockaddr_in6)) 459745b734cSChuck Lever __array(unsigned char, dstaddr, sizeof(struct sockaddr_in6)) 460643cf323SChuck Lever ), 461643cf323SChuck Lever 462643cf323SChuck Lever TP_fast_assign( 463745b734cSChuck Lever const struct rdma_cm_id *id = ep->re_id; 464745b734cSChuck Lever 465643cf323SChuck Lever __entry->event = event->event; 466643cf323SChuck Lever __assign_str(name, event->device->name); 467745b734cSChuck Lever memcpy(__entry->srcaddr, &id->route.addr.src_addr, 468745b734cSChuck Lever sizeof(struct sockaddr_in6)); 469745b734cSChuck Lever memcpy(__entry->dstaddr, &id->route.addr.dst_addr, 470745b734cSChuck Lever sizeof(struct sockaddr_in6)); 471643cf323SChuck Lever ), 472643cf323SChuck Lever 473745b734cSChuck Lever TP_printk("%pISpc -> %pISpc device=%s %s (%lu)", 474745b734cSChuck Lever __entry->srcaddr, __entry->dstaddr, __get_str(name), 475745b734cSChuck Lever rdma_show_ib_event(__entry->event), __entry->event 476643cf323SChuck Lever ) 477643cf323SChuck Lever ); 478643cf323SChuck Lever 479b4744e00SChuck Lever /** 480ab03eff5SChuck Lever ** Call events 481ab03eff5SChuck Lever **/ 482ab03eff5SChuck Lever 4831c443effSChuck Lever TRACE_EVENT(xprtrdma_createmrs, 4841c443effSChuck Lever TP_PROTO( 4851c443effSChuck Lever const struct rpcrdma_xprt *r_xprt, 4861c443effSChuck Lever unsigned int count 4871c443effSChuck Lever ), 4881c443effSChuck Lever 4891c443effSChuck Lever TP_ARGS(r_xprt, count), 4901c443effSChuck Lever 4911c443effSChuck Lever TP_STRUCT__entry( 4921c443effSChuck Lever __field(const void *, r_xprt) 4936dc6ec9eSChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 4946dc6ec9eSChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 4951c443effSChuck Lever __field(unsigned int, count) 4961c443effSChuck Lever ), 4971c443effSChuck Lever 4981c443effSChuck Lever TP_fast_assign( 4991c443effSChuck Lever __entry->r_xprt = r_xprt; 5001c443effSChuck Lever __entry->count = count; 5016dc6ec9eSChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 5026dc6ec9eSChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 5031c443effSChuck Lever ), 5041c443effSChuck Lever 5056dc6ec9eSChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: created %u MRs", 5066dc6ec9eSChuck Lever __get_str(addr), __get_str(port), __entry->r_xprt, 5076dc6ec9eSChuck Lever __entry->count 5086dc6ec9eSChuck Lever ) 5096dc6ec9eSChuck Lever ); 5106dc6ec9eSChuck Lever 5116dc6ec9eSChuck Lever TRACE_EVENT(xprtrdma_mr_get, 5126dc6ec9eSChuck Lever TP_PROTO( 5136dc6ec9eSChuck Lever const struct rpcrdma_req *req 5146dc6ec9eSChuck Lever ), 5156dc6ec9eSChuck Lever 5166dc6ec9eSChuck Lever TP_ARGS(req), 5176dc6ec9eSChuck Lever 5186dc6ec9eSChuck Lever TP_STRUCT__entry( 5196dc6ec9eSChuck Lever __field(const void *, req) 5206dc6ec9eSChuck Lever __field(unsigned int, task_id) 5216dc6ec9eSChuck Lever __field(unsigned int, client_id) 5226dc6ec9eSChuck Lever __field(u32, xid) 5236dc6ec9eSChuck Lever ), 5246dc6ec9eSChuck Lever 5256dc6ec9eSChuck Lever TP_fast_assign( 5266dc6ec9eSChuck Lever const struct rpc_rqst *rqst = &req->rl_slot; 5276dc6ec9eSChuck Lever 5286dc6ec9eSChuck Lever __entry->req = req; 5296dc6ec9eSChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 5306dc6ec9eSChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 5316dc6ec9eSChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 5326dc6ec9eSChuck Lever ), 5336dc6ec9eSChuck Lever 5346dc6ec9eSChuck Lever TP_printk("task:%u@%u xid=0x%08x req=%p", 5356dc6ec9eSChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 5366dc6ec9eSChuck Lever __entry->req 5371c443effSChuck Lever ) 5381c443effSChuck Lever ); 5391c443effSChuck Lever 5403b39f52aSChuck Lever TRACE_EVENT(xprtrdma_nomrs, 5413b39f52aSChuck Lever TP_PROTO( 5423b39f52aSChuck Lever const struct rpcrdma_req *req 5433b39f52aSChuck Lever ), 5443b39f52aSChuck Lever 5453b39f52aSChuck Lever TP_ARGS(req), 5463b39f52aSChuck Lever 5473b39f52aSChuck Lever TP_STRUCT__entry( 5483b39f52aSChuck Lever __field(const void *, req) 5493b39f52aSChuck Lever __field(unsigned int, task_id) 5503b39f52aSChuck Lever __field(unsigned int, client_id) 5513b39f52aSChuck Lever __field(u32, xid) 5523b39f52aSChuck Lever ), 5533b39f52aSChuck Lever 5543b39f52aSChuck Lever TP_fast_assign( 5553b39f52aSChuck Lever const struct rpc_rqst *rqst = &req->rl_slot; 5563b39f52aSChuck Lever 5573b39f52aSChuck Lever __entry->req = req; 5583b39f52aSChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 5593b39f52aSChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 5603b39f52aSChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 5613b39f52aSChuck Lever ), 5623b39f52aSChuck Lever 5633b39f52aSChuck Lever TP_printk("task:%u@%u xid=0x%08x req=%p", 5643b39f52aSChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 5653b39f52aSChuck Lever __entry->req 5663b39f52aSChuck Lever ) 5673b39f52aSChuck Lever ); 5681c443effSChuck Lever 569aba11831SChuck Lever DEFINE_RDCH_EVENT(read); 570aba11831SChuck Lever DEFINE_WRCH_EVENT(write); 571aba11831SChuck Lever DEFINE_WRCH_EVENT(reply); 57258f10ad4SChuck Lever 573ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch); 574614f3c96SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch_pullup); 575614f3c96SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch_mapped); 576ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_readch); 577ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_areadch); 578ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_writech); 579ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_replych); 580ab03eff5SChuck Lever 581ab03eff5SChuck Lever #define xprtrdma_show_chunktype(x) \ 582ab03eff5SChuck Lever __print_symbolic(x, \ 583ab03eff5SChuck Lever { rpcrdma_noch, "inline" }, \ 584614f3c96SChuck Lever { rpcrdma_noch_pullup, "pullup" }, \ 585614f3c96SChuck Lever { rpcrdma_noch_mapped, "mapped" }, \ 586ab03eff5SChuck Lever { rpcrdma_readch, "read list" }, \ 587ab03eff5SChuck Lever { rpcrdma_areadch, "*read list" }, \ 588ab03eff5SChuck Lever { rpcrdma_writech, "write list" }, \ 589ab03eff5SChuck Lever { rpcrdma_replych, "reply chunk" }) 590ab03eff5SChuck Lever 591ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_marshal, 592ab03eff5SChuck Lever TP_PROTO( 5931310051cSChuck Lever const struct rpcrdma_req *req, 594ab03eff5SChuck Lever unsigned int rtype, 595ab03eff5SChuck Lever unsigned int wtype 596ab03eff5SChuck Lever ), 597ab03eff5SChuck Lever 5981310051cSChuck Lever TP_ARGS(req, rtype, wtype), 599ab03eff5SChuck Lever 600ab03eff5SChuck Lever TP_STRUCT__entry( 601ab03eff5SChuck Lever __field(unsigned int, task_id) 602ab03eff5SChuck Lever __field(unsigned int, client_id) 603ab03eff5SChuck Lever __field(u32, xid) 604ab03eff5SChuck Lever __field(unsigned int, hdrlen) 605ab03eff5SChuck Lever __field(unsigned int, headlen) 606ab03eff5SChuck Lever __field(unsigned int, pagelen) 607ab03eff5SChuck Lever __field(unsigned int, taillen) 608ab03eff5SChuck Lever __field(unsigned int, rtype) 609ab03eff5SChuck Lever __field(unsigned int, wtype) 610ab03eff5SChuck Lever ), 611ab03eff5SChuck Lever 612ab03eff5SChuck Lever TP_fast_assign( 6131310051cSChuck Lever const struct rpc_rqst *rqst = &req->rl_slot; 6141310051cSChuck Lever 615ab03eff5SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 616ab03eff5SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 617ab03eff5SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 6181310051cSChuck Lever __entry->hdrlen = req->rl_hdrbuf.len; 619ab03eff5SChuck Lever __entry->headlen = rqst->rq_snd_buf.head[0].iov_len; 620ab03eff5SChuck Lever __entry->pagelen = rqst->rq_snd_buf.page_len; 621ab03eff5SChuck Lever __entry->taillen = rqst->rq_snd_buf.tail[0].iov_len; 622ab03eff5SChuck Lever __entry->rtype = rtype; 623ab03eff5SChuck Lever __entry->wtype = wtype; 624ab03eff5SChuck Lever ), 625ab03eff5SChuck Lever 626ab03eff5SChuck Lever TP_printk("task:%u@%u xid=0x%08x: hdr=%u xdr=%u/%u/%u %s/%s", 627ab03eff5SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 628ab03eff5SChuck Lever __entry->hdrlen, 629ab03eff5SChuck Lever __entry->headlen, __entry->pagelen, __entry->taillen, 630ab03eff5SChuck Lever xprtrdma_show_chunktype(__entry->rtype), 631ab03eff5SChuck Lever xprtrdma_show_chunktype(__entry->wtype) 632ab03eff5SChuck Lever ) 633ab03eff5SChuck Lever ); 634ab03eff5SChuck Lever 63517e4c443SChuck Lever TRACE_EVENT(xprtrdma_marshal_failed, 63617e4c443SChuck Lever TP_PROTO(const struct rpc_rqst *rqst, 63717e4c443SChuck Lever int ret 63817e4c443SChuck Lever ), 63917e4c443SChuck Lever 64017e4c443SChuck Lever TP_ARGS(rqst, ret), 64117e4c443SChuck Lever 64217e4c443SChuck Lever TP_STRUCT__entry( 64317e4c443SChuck Lever __field(unsigned int, task_id) 64417e4c443SChuck Lever __field(unsigned int, client_id) 64517e4c443SChuck Lever __field(u32, xid) 64617e4c443SChuck Lever __field(int, ret) 64717e4c443SChuck Lever ), 64817e4c443SChuck Lever 64917e4c443SChuck Lever TP_fast_assign( 65017e4c443SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 65117e4c443SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 65217e4c443SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 65317e4c443SChuck Lever __entry->ret = ret; 65417e4c443SChuck Lever ), 65517e4c443SChuck Lever 65617e4c443SChuck Lever TP_printk("task:%u@%u xid=0x%08x: ret=%d", 65717e4c443SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 65817e4c443SChuck Lever __entry->ret 65917e4c443SChuck Lever ) 66017e4c443SChuck Lever ); 66117e4c443SChuck Lever 66205eb06d8SChuck Lever TRACE_EVENT(xprtrdma_prepsend_failed, 66305eb06d8SChuck Lever TP_PROTO(const struct rpc_rqst *rqst, 66405eb06d8SChuck Lever int ret 66505eb06d8SChuck Lever ), 66605eb06d8SChuck Lever 66705eb06d8SChuck Lever TP_ARGS(rqst, ret), 66805eb06d8SChuck Lever 66905eb06d8SChuck Lever TP_STRUCT__entry( 67005eb06d8SChuck Lever __field(unsigned int, task_id) 67105eb06d8SChuck Lever __field(unsigned int, client_id) 67205eb06d8SChuck Lever __field(u32, xid) 67305eb06d8SChuck Lever __field(int, ret) 67405eb06d8SChuck Lever ), 67505eb06d8SChuck Lever 67605eb06d8SChuck Lever TP_fast_assign( 67705eb06d8SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 67805eb06d8SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 67905eb06d8SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 68005eb06d8SChuck Lever __entry->ret = ret; 68105eb06d8SChuck Lever ), 68205eb06d8SChuck Lever 68305eb06d8SChuck Lever TP_printk("task:%u@%u xid=0x%08x: ret=%d", 68405eb06d8SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 68505eb06d8SChuck Lever __entry->ret 68605eb06d8SChuck Lever ) 68705eb06d8SChuck Lever ); 68805eb06d8SChuck Lever 689ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_post_send, 690ab03eff5SChuck Lever TP_PROTO( 691bdb2ce82SChuck Lever const struct rpcrdma_req *req 692ab03eff5SChuck Lever ), 693ab03eff5SChuck Lever 694bdb2ce82SChuck Lever TP_ARGS(req), 695ab03eff5SChuck Lever 696ab03eff5SChuck Lever TP_STRUCT__entry( 697ab03eff5SChuck Lever __field(const void *, req) 698cb586decSChuck Lever __field(const void *, sc) 6990c77668dSChuck Lever __field(unsigned int, task_id) 7000c77668dSChuck Lever __field(unsigned int, client_id) 701ab03eff5SChuck Lever __field(int, num_sge) 702470443e0SChuck Lever __field(int, signaled) 703ab03eff5SChuck Lever ), 704ab03eff5SChuck Lever 705ab03eff5SChuck Lever TP_fast_assign( 7060c77668dSChuck Lever const struct rpc_rqst *rqst = &req->rl_slot; 7070c77668dSChuck Lever 7080c77668dSChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 70910694ac9SChuck Lever __entry->client_id = rqst->rq_task->tk_client ? 71010694ac9SChuck Lever rqst->rq_task->tk_client->cl_clid : -1; 711ab03eff5SChuck Lever __entry->req = req; 712cb586decSChuck Lever __entry->sc = req->rl_sendctx; 713dc15c3d5SChuck Lever __entry->num_sge = req->rl_wr.num_sge; 714dc15c3d5SChuck Lever __entry->signaled = req->rl_wr.send_flags & IB_SEND_SIGNALED; 715ab03eff5SChuck Lever ), 716ab03eff5SChuck Lever 717bdb2ce82SChuck Lever TP_printk("task:%u@%u req=%p sc=%p (%d SGE%s) %s", 7180c77668dSChuck Lever __entry->task_id, __entry->client_id, 719cb586decSChuck Lever __entry->req, __entry->sc, __entry->num_sge, 7200c77668dSChuck Lever (__entry->num_sge == 1 ? "" : "s"), 721bdb2ce82SChuck Lever (__entry->signaled ? "signaled" : "") 722ab03eff5SChuck Lever ) 723ab03eff5SChuck Lever ); 724ab03eff5SChuck Lever 725b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_post_recv, 726b4a7f91cSChuck Lever TP_PROTO( 7272dfdcd88SChuck Lever const struct rpcrdma_rep *rep 728b4a7f91cSChuck Lever ), 729b4a7f91cSChuck Lever 7302dfdcd88SChuck Lever TP_ARGS(rep), 731b4a7f91cSChuck Lever 732b4a7f91cSChuck Lever TP_STRUCT__entry( 7332dfdcd88SChuck Lever __field(const void *, rep) 734b4a7f91cSChuck Lever ), 735b4a7f91cSChuck Lever 736b4a7f91cSChuck Lever TP_fast_assign( 7372dfdcd88SChuck Lever __entry->rep = rep; 738b4a7f91cSChuck Lever ), 739b4a7f91cSChuck Lever 7402dfdcd88SChuck Lever TP_printk("rep=%p", 7412dfdcd88SChuck Lever __entry->rep 742b4a7f91cSChuck Lever ) 743b4a7f91cSChuck Lever ); 744b4a7f91cSChuck Lever 7457c8d9e7cSChuck Lever TRACE_EVENT(xprtrdma_post_recvs, 7467c8d9e7cSChuck Lever TP_PROTO( 7477c8d9e7cSChuck Lever const struct rpcrdma_xprt *r_xprt, 7487c8d9e7cSChuck Lever unsigned int count, 7497c8d9e7cSChuck Lever int status 7507c8d9e7cSChuck Lever ), 7517c8d9e7cSChuck Lever 7527c8d9e7cSChuck Lever TP_ARGS(r_xprt, count, status), 7537c8d9e7cSChuck Lever 7547c8d9e7cSChuck Lever TP_STRUCT__entry( 7557c8d9e7cSChuck Lever __field(const void *, r_xprt) 7567c8d9e7cSChuck Lever __field(unsigned int, count) 7577c8d9e7cSChuck Lever __field(int, status) 7587c8d9e7cSChuck Lever __field(int, posted) 7597c8d9e7cSChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 7607c8d9e7cSChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 7617c8d9e7cSChuck Lever ), 7627c8d9e7cSChuck Lever 7637c8d9e7cSChuck Lever TP_fast_assign( 7647c8d9e7cSChuck Lever __entry->r_xprt = r_xprt; 7657c8d9e7cSChuck Lever __entry->count = count; 7667c8d9e7cSChuck Lever __entry->status = status; 767e28ce900SChuck Lever __entry->posted = r_xprt->rx_ep->re_receive_count; 7687c8d9e7cSChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 7697c8d9e7cSChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 7707c8d9e7cSChuck Lever ), 7717c8d9e7cSChuck Lever 7727c8d9e7cSChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: %u new recvs, %d active (rc %d)", 7737c8d9e7cSChuck Lever __get_str(addr), __get_str(port), __entry->r_xprt, 7747c8d9e7cSChuck Lever __entry->count, __entry->posted, __entry->status 775ab03eff5SChuck Lever ) 776ab03eff5SChuck Lever ); 777ab03eff5SChuck Lever 7784b93dab3SChuck Lever TRACE_EVENT(xprtrdma_post_linv, 7794b93dab3SChuck Lever TP_PROTO( 7804b93dab3SChuck Lever const struct rpcrdma_req *req, 7814b93dab3SChuck Lever int status 7824b93dab3SChuck Lever ), 7834b93dab3SChuck Lever 7844b93dab3SChuck Lever TP_ARGS(req, status), 7854b93dab3SChuck Lever 7864b93dab3SChuck Lever TP_STRUCT__entry( 7874b93dab3SChuck Lever __field(const void *, req) 7884b93dab3SChuck Lever __field(int, status) 7894b93dab3SChuck Lever __field(u32, xid) 7904b93dab3SChuck Lever ), 7914b93dab3SChuck Lever 7924b93dab3SChuck Lever TP_fast_assign( 7934b93dab3SChuck Lever __entry->req = req; 7944b93dab3SChuck Lever __entry->status = status; 7954b93dab3SChuck Lever __entry->xid = be32_to_cpu(req->rl_slot.rq_xid); 7964b93dab3SChuck Lever ), 7974b93dab3SChuck Lever 7984b93dab3SChuck Lever TP_printk("req=%p xid=0x%08x status=%d", 7994b93dab3SChuck Lever __entry->req, __entry->xid, __entry->status 8004b93dab3SChuck Lever ) 8014b93dab3SChuck Lever ); 8024b93dab3SChuck Lever 803ab03eff5SChuck Lever /** 804ab03eff5SChuck Lever ** Completion events 805ab03eff5SChuck Lever **/ 806ab03eff5SChuck Lever 807ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_wc_send, 808ab03eff5SChuck Lever TP_PROTO( 809ab03eff5SChuck Lever const struct rpcrdma_sendctx *sc, 810ab03eff5SChuck Lever const struct ib_wc *wc 811ab03eff5SChuck Lever ), 812ab03eff5SChuck Lever 813ab03eff5SChuck Lever TP_ARGS(sc, wc), 814ab03eff5SChuck Lever 815ab03eff5SChuck Lever TP_STRUCT__entry( 816ab03eff5SChuck Lever __field(const void *, req) 817cb586decSChuck Lever __field(const void *, sc) 818ab03eff5SChuck Lever __field(unsigned int, unmap_count) 819ab03eff5SChuck Lever __field(unsigned int, status) 820ab03eff5SChuck Lever __field(unsigned int, vendor_err) 821ab03eff5SChuck Lever ), 822ab03eff5SChuck Lever 823ab03eff5SChuck Lever TP_fast_assign( 824ab03eff5SChuck Lever __entry->req = sc->sc_req; 825cb586decSChuck Lever __entry->sc = sc; 826ab03eff5SChuck Lever __entry->unmap_count = sc->sc_unmap_count; 827ab03eff5SChuck Lever __entry->status = wc->status; 828ab03eff5SChuck Lever __entry->vendor_err = __entry->status ? wc->vendor_err : 0; 829ab03eff5SChuck Lever ), 830ab03eff5SChuck Lever 831cb586decSChuck Lever TP_printk("req=%p sc=%p unmapped=%u: %s (%u/0x%x)", 832cb586decSChuck Lever __entry->req, __entry->sc, __entry->unmap_count, 833ab03eff5SChuck Lever rdma_show_wc_status(__entry->status), 834ab03eff5SChuck Lever __entry->status, __entry->vendor_err 835ab03eff5SChuck Lever ) 836ab03eff5SChuck Lever ); 837ab03eff5SChuck Lever 838b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_wc_receive, 839b4a7f91cSChuck Lever TP_PROTO( 840b4a7f91cSChuck Lever const struct ib_wc *wc 841b4a7f91cSChuck Lever ), 842b4a7f91cSChuck Lever 8430e0b854cSChuck Lever TP_ARGS(wc), 844b4a7f91cSChuck Lever 845b4a7f91cSChuck Lever TP_STRUCT__entry( 8462dfdcd88SChuck Lever __field(const void *, rep) 8470e0b854cSChuck Lever __field(u32, byte_len) 848b4a7f91cSChuck Lever __field(unsigned int, status) 8490e0b854cSChuck Lever __field(u32, vendor_err) 850b4a7f91cSChuck Lever ), 851b4a7f91cSChuck Lever 852b4a7f91cSChuck Lever TP_fast_assign( 8532dfdcd88SChuck Lever __entry->rep = container_of(wc->wr_cqe, struct rpcrdma_rep, 8542dfdcd88SChuck Lever rr_cqe); 855b4a7f91cSChuck Lever __entry->status = wc->status; 8560e0b854cSChuck Lever if (wc->status) { 8570e0b854cSChuck Lever __entry->byte_len = 0; 8580e0b854cSChuck Lever __entry->vendor_err = wc->vendor_err; 8590e0b854cSChuck Lever } else { 8600e0b854cSChuck Lever __entry->byte_len = wc->byte_len; 8610e0b854cSChuck Lever __entry->vendor_err = 0; 8620e0b854cSChuck Lever } 863b4a7f91cSChuck Lever ), 864b4a7f91cSChuck Lever 8652dfdcd88SChuck Lever TP_printk("rep=%p %u bytes: %s (%u/0x%x)", 8662dfdcd88SChuck Lever __entry->rep, __entry->byte_len, 867b4a7f91cSChuck Lever rdma_show_wc_status(__entry->status), 868b4a7f91cSChuck Lever __entry->status, __entry->vendor_err 869b4a7f91cSChuck Lever ) 870b4a7f91cSChuck Lever ); 871b4a7f91cSChuck Lever 87258f10ad4SChuck Lever DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_fastreg); 8732937fedeSChuck Lever DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_li); 8742937fedeSChuck Lever DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_li_wake); 875d8099fedSChuck Lever DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_li_done); 8762937fedeSChuck Lever 87753b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_alloc, 87853b2c1cbSChuck Lever TP_PROTO( 87953b2c1cbSChuck Lever const struct rpcrdma_mr *mr, 88053b2c1cbSChuck Lever int rc 88153b2c1cbSChuck Lever ), 88253b2c1cbSChuck Lever 88353b2c1cbSChuck Lever TP_ARGS(mr, rc), 88453b2c1cbSChuck Lever 88553b2c1cbSChuck Lever TP_STRUCT__entry( 88662a89501SChuck Lever __field(u32, mr_id) 88753b2c1cbSChuck Lever __field(int, rc) 88853b2c1cbSChuck Lever ), 88953b2c1cbSChuck Lever 89053b2c1cbSChuck Lever TP_fast_assign( 89162a89501SChuck Lever __entry->mr_id = mr->frwr.fr_mr->res.id; 89253b2c1cbSChuck Lever __entry->rc = rc; 89353b2c1cbSChuck Lever ), 89453b2c1cbSChuck Lever 89562a89501SChuck Lever TP_printk("mr.id=%u: rc=%d", 89662a89501SChuck Lever __entry->mr_id, __entry->rc 89753b2c1cbSChuck Lever ) 89853b2c1cbSChuck Lever ); 89953b2c1cbSChuck Lever 90053b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_dereg, 90153b2c1cbSChuck Lever TP_PROTO( 90253b2c1cbSChuck Lever const struct rpcrdma_mr *mr, 90353b2c1cbSChuck Lever int rc 90453b2c1cbSChuck Lever ), 90553b2c1cbSChuck Lever 90653b2c1cbSChuck Lever TP_ARGS(mr, rc), 90753b2c1cbSChuck Lever 90853b2c1cbSChuck Lever TP_STRUCT__entry( 90962a89501SChuck Lever __field(u32, mr_id) 91062a89501SChuck Lever __field(int, nents) 91153b2c1cbSChuck Lever __field(u32, handle) 91253b2c1cbSChuck Lever __field(u32, length) 91353b2c1cbSChuck Lever __field(u64, offset) 91453b2c1cbSChuck Lever __field(u32, dir) 91553b2c1cbSChuck Lever __field(int, rc) 91653b2c1cbSChuck Lever ), 91753b2c1cbSChuck Lever 91853b2c1cbSChuck Lever TP_fast_assign( 91962a89501SChuck Lever __entry->mr_id = mr->frwr.fr_mr->res.id; 92062a89501SChuck Lever __entry->nents = mr->mr_nents; 92153b2c1cbSChuck Lever __entry->handle = mr->mr_handle; 92253b2c1cbSChuck Lever __entry->length = mr->mr_length; 92353b2c1cbSChuck Lever __entry->offset = mr->mr_offset; 92453b2c1cbSChuck Lever __entry->dir = mr->mr_dir; 92553b2c1cbSChuck Lever __entry->rc = rc; 92653b2c1cbSChuck Lever ), 92753b2c1cbSChuck Lever 92862a89501SChuck Lever TP_printk("mr.id=%u nents=%d %u@0x%016llx:0x%08x (%s): rc=%d", 92962a89501SChuck Lever __entry->mr_id, __entry->nents, __entry->length, 93053b2c1cbSChuck Lever (unsigned long long)__entry->offset, __entry->handle, 93153b2c1cbSChuck Lever xprtrdma_show_direction(__entry->dir), 93253b2c1cbSChuck Lever __entry->rc 93353b2c1cbSChuck Lever ) 93453b2c1cbSChuck Lever ); 93553b2c1cbSChuck Lever 93653b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_sgerr, 93753b2c1cbSChuck Lever TP_PROTO( 93853b2c1cbSChuck Lever const struct rpcrdma_mr *mr, 93953b2c1cbSChuck Lever int sg_nents 94053b2c1cbSChuck Lever ), 94153b2c1cbSChuck Lever 94253b2c1cbSChuck Lever TP_ARGS(mr, sg_nents), 94353b2c1cbSChuck Lever 94453b2c1cbSChuck Lever TP_STRUCT__entry( 94562a89501SChuck Lever __field(u32, mr_id) 94653b2c1cbSChuck Lever __field(u64, addr) 94753b2c1cbSChuck Lever __field(u32, dir) 94853b2c1cbSChuck Lever __field(int, nents) 94953b2c1cbSChuck Lever ), 95053b2c1cbSChuck Lever 95153b2c1cbSChuck Lever TP_fast_assign( 95262a89501SChuck Lever __entry->mr_id = mr->frwr.fr_mr->res.id; 95353b2c1cbSChuck Lever __entry->addr = mr->mr_sg->dma_address; 95453b2c1cbSChuck Lever __entry->dir = mr->mr_dir; 95553b2c1cbSChuck Lever __entry->nents = sg_nents; 95653b2c1cbSChuck Lever ), 95753b2c1cbSChuck Lever 95862a89501SChuck Lever TP_printk("mr.id=%u DMA addr=0x%llx (%s) sg_nents=%d", 95962a89501SChuck Lever __entry->mr_id, __entry->addr, 96053b2c1cbSChuck Lever xprtrdma_show_direction(__entry->dir), 96153b2c1cbSChuck Lever __entry->nents 96253b2c1cbSChuck Lever ) 96353b2c1cbSChuck Lever ); 96453b2c1cbSChuck Lever 96553b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_maperr, 96653b2c1cbSChuck Lever TP_PROTO( 96753b2c1cbSChuck Lever const struct rpcrdma_mr *mr, 96853b2c1cbSChuck Lever int num_mapped 96953b2c1cbSChuck Lever ), 97053b2c1cbSChuck Lever 97153b2c1cbSChuck Lever TP_ARGS(mr, num_mapped), 97253b2c1cbSChuck Lever 97353b2c1cbSChuck Lever TP_STRUCT__entry( 97462a89501SChuck Lever __field(u32, mr_id) 97553b2c1cbSChuck Lever __field(u64, addr) 97653b2c1cbSChuck Lever __field(u32, dir) 97753b2c1cbSChuck Lever __field(int, num_mapped) 97853b2c1cbSChuck Lever __field(int, nents) 97953b2c1cbSChuck Lever ), 98053b2c1cbSChuck Lever 98153b2c1cbSChuck Lever TP_fast_assign( 98262a89501SChuck Lever __entry->mr_id = mr->frwr.fr_mr->res.id; 98353b2c1cbSChuck Lever __entry->addr = mr->mr_sg->dma_address; 98453b2c1cbSChuck Lever __entry->dir = mr->mr_dir; 98553b2c1cbSChuck Lever __entry->num_mapped = num_mapped; 98653b2c1cbSChuck Lever __entry->nents = mr->mr_nents; 98753b2c1cbSChuck Lever ), 98853b2c1cbSChuck Lever 98962a89501SChuck Lever TP_printk("mr.id=%u DMA addr=0x%llx (%s) nents=%d of %d", 99062a89501SChuck Lever __entry->mr_id, __entry->addr, 99153b2c1cbSChuck Lever xprtrdma_show_direction(__entry->dir), 99253b2c1cbSChuck Lever __entry->num_mapped, __entry->nents 99353b2c1cbSChuck Lever ) 99453b2c1cbSChuck Lever ); 99553b2c1cbSChuck Lever 996d379eaa8SChuck Lever DEFINE_MR_EVENT(localinv); 997d379eaa8SChuck Lever DEFINE_MR_EVENT(map); 998d379eaa8SChuck Lever DEFINE_MR_EVENT(unmap); 99962a89501SChuck Lever DEFINE_MR_EVENT(reminv); 1000d379eaa8SChuck Lever DEFINE_MR_EVENT(recycle); 100158f10ad4SChuck Lever 100253b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_dma_maperr, 100353b2c1cbSChuck Lever TP_PROTO( 100453b2c1cbSChuck Lever u64 addr 100553b2c1cbSChuck Lever ), 100653b2c1cbSChuck Lever 100753b2c1cbSChuck Lever TP_ARGS(addr), 100853b2c1cbSChuck Lever 100953b2c1cbSChuck Lever TP_STRUCT__entry( 101053b2c1cbSChuck Lever __field(u64, addr) 101153b2c1cbSChuck Lever ), 101253b2c1cbSChuck Lever 101353b2c1cbSChuck Lever TP_fast_assign( 101453b2c1cbSChuck Lever __entry->addr = addr; 101553b2c1cbSChuck Lever ), 101653b2c1cbSChuck Lever 101753b2c1cbSChuck Lever TP_printk("dma addr=0x%llx\n", __entry->addr) 101853b2c1cbSChuck Lever ); 101953b2c1cbSChuck Lever 1020b4a7f91cSChuck Lever /** 1021b4a7f91cSChuck Lever ** Reply events 1022b4a7f91cSChuck Lever **/ 1023b4a7f91cSChuck Lever 1024b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_reply, 1025b4a7f91cSChuck Lever TP_PROTO( 1026b4a7f91cSChuck Lever const struct rpc_task *task, 1027b4a7f91cSChuck Lever const struct rpcrdma_rep *rep, 1028b4a7f91cSChuck Lever const struct rpcrdma_req *req, 1029b4a7f91cSChuck Lever unsigned int credits 1030b4a7f91cSChuck Lever ), 1031b4a7f91cSChuck Lever 1032b4a7f91cSChuck Lever TP_ARGS(task, rep, req, credits), 1033b4a7f91cSChuck Lever 1034b4a7f91cSChuck Lever TP_STRUCT__entry( 1035b4a7f91cSChuck Lever __field(unsigned int, task_id) 1036b4a7f91cSChuck Lever __field(unsigned int, client_id) 1037b4a7f91cSChuck Lever __field(const void *, rep) 1038b4a7f91cSChuck Lever __field(const void *, req) 1039b4a7f91cSChuck Lever __field(u32, xid) 1040b4a7f91cSChuck Lever __field(unsigned int, credits) 1041b4a7f91cSChuck Lever ), 1042b4a7f91cSChuck Lever 1043b4a7f91cSChuck Lever TP_fast_assign( 1044b4a7f91cSChuck Lever __entry->task_id = task->tk_pid; 1045b4a7f91cSChuck Lever __entry->client_id = task->tk_client->cl_clid; 1046b4a7f91cSChuck Lever __entry->rep = rep; 1047b4a7f91cSChuck Lever __entry->req = req; 1048b4a7f91cSChuck Lever __entry->xid = be32_to_cpu(rep->rr_xid); 1049b4a7f91cSChuck Lever __entry->credits = credits; 1050b4a7f91cSChuck Lever ), 1051b4a7f91cSChuck Lever 1052b4a7f91cSChuck Lever TP_printk("task:%u@%u xid=0x%08x, %u credits, rep=%p -> req=%p", 1053b4a7f91cSChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 1054b4a7f91cSChuck Lever __entry->credits, __entry->rep, __entry->req 1055b4a7f91cSChuck Lever ) 1056b4a7f91cSChuck Lever ); 1057b4a7f91cSChuck Lever 1058b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_defer_cmp, 1059b4a7f91cSChuck Lever TP_PROTO( 1060b4a7f91cSChuck Lever const struct rpcrdma_rep *rep 1061b4a7f91cSChuck Lever ), 1062b4a7f91cSChuck Lever 1063b4a7f91cSChuck Lever TP_ARGS(rep), 1064b4a7f91cSChuck Lever 1065b4a7f91cSChuck Lever TP_STRUCT__entry( 1066b4a7f91cSChuck Lever __field(unsigned int, task_id) 1067b4a7f91cSChuck Lever __field(unsigned int, client_id) 1068b4a7f91cSChuck Lever __field(const void *, rep) 1069b4a7f91cSChuck Lever __field(u32, xid) 1070b4a7f91cSChuck Lever ), 1071b4a7f91cSChuck Lever 1072b4a7f91cSChuck Lever TP_fast_assign( 1073b4a7f91cSChuck Lever __entry->task_id = rep->rr_rqst->rq_task->tk_pid; 1074b4a7f91cSChuck Lever __entry->client_id = rep->rr_rqst->rq_task->tk_client->cl_clid; 1075b4a7f91cSChuck Lever __entry->rep = rep; 1076b4a7f91cSChuck Lever __entry->xid = be32_to_cpu(rep->rr_xid); 1077b4a7f91cSChuck Lever ), 1078b4a7f91cSChuck Lever 1079b4a7f91cSChuck Lever TP_printk("task:%u@%u xid=0x%08x rep=%p", 1080b4a7f91cSChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 1081b4a7f91cSChuck Lever __entry->rep 1082b4a7f91cSChuck Lever ) 1083b4a7f91cSChuck Lever ); 1084b4a7f91cSChuck Lever 1085b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_vers); 1086b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_rqst); 1087b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_short); 1088b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_hdr); 1089b4a7f91cSChuck Lever 1090e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_fixup, 1091e11b7c96SChuck Lever TP_PROTO( 1092e11b7c96SChuck Lever const struct rpc_rqst *rqst, 1093d4957f01SChuck Lever unsigned long fixup 1094e11b7c96SChuck Lever ), 1095e11b7c96SChuck Lever 1096d4957f01SChuck Lever TP_ARGS(rqst, fixup), 1097e11b7c96SChuck Lever 1098e11b7c96SChuck Lever TP_STRUCT__entry( 1099e11b7c96SChuck Lever __field(unsigned int, task_id) 1100e11b7c96SChuck Lever __field(unsigned int, client_id) 1101d4957f01SChuck Lever __field(unsigned long, fixup) 1102d4957f01SChuck Lever __field(size_t, headlen) 1103d4957f01SChuck Lever __field(unsigned int, pagelen) 1104d4957f01SChuck Lever __field(size_t, taillen) 1105e11b7c96SChuck Lever ), 1106e11b7c96SChuck Lever 1107e11b7c96SChuck Lever TP_fast_assign( 1108e11b7c96SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 1109e11b7c96SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 1110d4957f01SChuck Lever __entry->fixup = fixup; 1111d4957f01SChuck Lever __entry->headlen = rqst->rq_rcv_buf.head[0].iov_len; 1112d4957f01SChuck Lever __entry->pagelen = rqst->rq_rcv_buf.page_len; 1113d4957f01SChuck Lever __entry->taillen = rqst->rq_rcv_buf.tail[0].iov_len; 1114e11b7c96SChuck Lever ), 1115e11b7c96SChuck Lever 1116d4957f01SChuck Lever TP_printk("task:%u@%u fixup=%lu xdr=%zu/%u/%zu", 1117d4957f01SChuck Lever __entry->task_id, __entry->client_id, __entry->fixup, 1118d4957f01SChuck Lever __entry->headlen, __entry->pagelen, __entry->taillen 1119e11b7c96SChuck Lever ) 1120e11b7c96SChuck Lever ); 1121e11b7c96SChuck Lever 1122e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_decode_seg, 1123e11b7c96SChuck Lever TP_PROTO( 1124e11b7c96SChuck Lever u32 handle, 1125e11b7c96SChuck Lever u32 length, 1126e11b7c96SChuck Lever u64 offset 1127e11b7c96SChuck Lever ), 1128e11b7c96SChuck Lever 1129e11b7c96SChuck Lever TP_ARGS(handle, length, offset), 1130e11b7c96SChuck Lever 1131e11b7c96SChuck Lever TP_STRUCT__entry( 1132e11b7c96SChuck Lever __field(u32, handle) 1133e11b7c96SChuck Lever __field(u32, length) 1134e11b7c96SChuck Lever __field(u64, offset) 1135e11b7c96SChuck Lever ), 1136e11b7c96SChuck Lever 1137e11b7c96SChuck Lever TP_fast_assign( 1138e11b7c96SChuck Lever __entry->handle = handle; 1139e11b7c96SChuck Lever __entry->length = length; 1140e11b7c96SChuck Lever __entry->offset = offset; 1141e11b7c96SChuck Lever ), 1142e11b7c96SChuck Lever 1143e11b7c96SChuck Lever TP_printk("%u@0x%016llx:0x%08x", 1144e11b7c96SChuck Lever __entry->length, (unsigned long long)__entry->offset, 1145e11b7c96SChuck Lever __entry->handle 1146e11b7c96SChuck Lever ) 1147e11b7c96SChuck Lever ); 1148e11b7c96SChuck Lever 1149fc1eb807SChuck Lever /** 1150ae724676SChuck Lever ** Allocation/release of rpcrdma_reqs and rpcrdma_reps 1151ae724676SChuck Lever **/ 1152ae724676SChuck Lever 1153395069fcSChuck Lever TRACE_EVENT(xprtrdma_op_allocate, 1154ae724676SChuck Lever TP_PROTO( 1155ae724676SChuck Lever const struct rpc_task *task, 1156ae724676SChuck Lever const struct rpcrdma_req *req 1157ae724676SChuck Lever ), 1158ae724676SChuck Lever 1159ae724676SChuck Lever TP_ARGS(task, req), 1160ae724676SChuck Lever 1161ae724676SChuck Lever TP_STRUCT__entry( 1162ae724676SChuck Lever __field(unsigned int, task_id) 1163ae724676SChuck Lever __field(unsigned int, client_id) 1164ae724676SChuck Lever __field(const void *, req) 1165ae724676SChuck Lever __field(size_t, callsize) 1166ae724676SChuck Lever __field(size_t, rcvsize) 1167ae724676SChuck Lever ), 1168ae724676SChuck Lever 1169ae724676SChuck Lever TP_fast_assign( 1170ae724676SChuck Lever __entry->task_id = task->tk_pid; 1171ae724676SChuck Lever __entry->client_id = task->tk_client->cl_clid; 1172ae724676SChuck Lever __entry->req = req; 1173ae724676SChuck Lever __entry->callsize = task->tk_rqstp->rq_callsize; 1174ae724676SChuck Lever __entry->rcvsize = task->tk_rqstp->rq_rcvsize; 1175ae724676SChuck Lever ), 1176ae724676SChuck Lever 11777c8d9e7cSChuck Lever TP_printk("task:%u@%u req=%p (%zu, %zu)", 1178ae724676SChuck Lever __entry->task_id, __entry->client_id, 11797c8d9e7cSChuck Lever __entry->req, __entry->callsize, __entry->rcvsize 1180ae724676SChuck Lever ) 1181ae724676SChuck Lever ); 1182ae724676SChuck Lever 1183395069fcSChuck Lever TRACE_EVENT(xprtrdma_op_free, 1184ae724676SChuck Lever TP_PROTO( 1185ae724676SChuck Lever const struct rpc_task *task, 1186ae724676SChuck Lever const struct rpcrdma_req *req 1187ae724676SChuck Lever ), 1188ae724676SChuck Lever 1189ae724676SChuck Lever TP_ARGS(task, req), 1190ae724676SChuck Lever 1191ae724676SChuck Lever TP_STRUCT__entry( 1192ae724676SChuck Lever __field(unsigned int, task_id) 1193ae724676SChuck Lever __field(unsigned int, client_id) 1194ae724676SChuck Lever __field(const void *, req) 1195ae724676SChuck Lever __field(const void *, rep) 1196ae724676SChuck Lever ), 1197ae724676SChuck Lever 1198ae724676SChuck Lever TP_fast_assign( 1199ae724676SChuck Lever __entry->task_id = task->tk_pid; 1200ae724676SChuck Lever __entry->client_id = task->tk_client->cl_clid; 1201ae724676SChuck Lever __entry->req = req; 1202ae724676SChuck Lever __entry->rep = req->rl_reply; 1203ae724676SChuck Lever ), 1204ae724676SChuck Lever 1205ae724676SChuck Lever TP_printk("task:%u@%u req=%p rep=%p", 1206ae724676SChuck Lever __entry->task_id, __entry->client_id, 1207ae724676SChuck Lever __entry->req, __entry->rep 1208ae724676SChuck Lever ) 1209ae724676SChuck Lever ); 1210ae724676SChuck Lever 1211ae724676SChuck Lever /** 1212fc1eb807SChuck Lever ** Callback events 1213fc1eb807SChuck Lever **/ 1214fc1eb807SChuck Lever 1215fc1eb807SChuck Lever TRACE_EVENT(xprtrdma_cb_setup, 1216fc1eb807SChuck Lever TP_PROTO( 1217fc1eb807SChuck Lever const struct rpcrdma_xprt *r_xprt, 1218fc1eb807SChuck Lever unsigned int reqs 1219fc1eb807SChuck Lever ), 1220fc1eb807SChuck Lever 1221fc1eb807SChuck Lever TP_ARGS(r_xprt, reqs), 1222fc1eb807SChuck Lever 1223fc1eb807SChuck Lever TP_STRUCT__entry( 1224fc1eb807SChuck Lever __field(const void *, r_xprt) 1225fc1eb807SChuck Lever __field(unsigned int, reqs) 1226fc1eb807SChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 1227fc1eb807SChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 1228fc1eb807SChuck Lever ), 1229fc1eb807SChuck Lever 1230fc1eb807SChuck Lever TP_fast_assign( 1231fc1eb807SChuck Lever __entry->r_xprt = r_xprt; 1232fc1eb807SChuck Lever __entry->reqs = reqs; 1233fc1eb807SChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 1234fc1eb807SChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 1235fc1eb807SChuck Lever ), 1236fc1eb807SChuck Lever 1237fc1eb807SChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: %u reqs", 1238fc1eb807SChuck Lever __get_str(addr), __get_str(port), 1239fc1eb807SChuck Lever __entry->r_xprt, __entry->reqs 1240fc1eb807SChuck Lever ) 1241fc1eb807SChuck Lever ); 1242fc1eb807SChuck Lever 1243fc1eb807SChuck Lever DEFINE_CB_EVENT(xprtrdma_cb_call); 1244fc1eb807SChuck Lever DEFINE_CB_EVENT(xprtrdma_cb_reply); 1245fc1eb807SChuck Lever 124607e10308SChuck Lever TRACE_EVENT(xprtrdma_leaked_rep, 124707e10308SChuck Lever TP_PROTO( 124807e10308SChuck Lever const struct rpc_rqst *rqst, 124907e10308SChuck Lever const struct rpcrdma_rep *rep 125007e10308SChuck Lever ), 125107e10308SChuck Lever 125207e10308SChuck Lever TP_ARGS(rqst, rep), 125307e10308SChuck Lever 125407e10308SChuck Lever TP_STRUCT__entry( 125507e10308SChuck Lever __field(unsigned int, task_id) 125607e10308SChuck Lever __field(unsigned int, client_id) 125707e10308SChuck Lever __field(u32, xid) 125807e10308SChuck Lever __field(const void *, rep) 125907e10308SChuck Lever ), 126007e10308SChuck Lever 126107e10308SChuck Lever TP_fast_assign( 126207e10308SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 126307e10308SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 126407e10308SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 126507e10308SChuck Lever __entry->rep = rep; 126607e10308SChuck Lever ), 126707e10308SChuck Lever 126807e10308SChuck Lever TP_printk("task:%u@%u xid=0x%08x rep=%p", 126907e10308SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 127007e10308SChuck Lever __entry->rep 127107e10308SChuck Lever ) 127207e10308SChuck Lever ); 127307e10308SChuck Lever 127498895edbSChuck Lever /** 127598895edbSChuck Lever ** Server-side RPC/RDMA events 127698895edbSChuck Lever **/ 127798895edbSChuck Lever 1278e979a173SChuck Lever DECLARE_EVENT_CLASS(svcrdma_accept_class, 1279e979a173SChuck Lever TP_PROTO( 1280e979a173SChuck Lever const struct svcxprt_rdma *rdma, 1281e979a173SChuck Lever long status 1282e979a173SChuck Lever ), 1283e979a173SChuck Lever 1284e979a173SChuck Lever TP_ARGS(rdma, status), 1285e979a173SChuck Lever 1286e979a173SChuck Lever TP_STRUCT__entry( 1287e979a173SChuck Lever __field(long, status) 1288e979a173SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1289e979a173SChuck Lever ), 1290e979a173SChuck Lever 1291e979a173SChuck Lever TP_fast_assign( 1292e979a173SChuck Lever __entry->status = status; 1293e979a173SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1294e979a173SChuck Lever ), 1295e979a173SChuck Lever 1296e979a173SChuck Lever TP_printk("addr=%s status=%ld", 1297e979a173SChuck Lever __get_str(addr), __entry->status 1298e979a173SChuck Lever ) 1299e979a173SChuck Lever ); 1300e979a173SChuck Lever 1301e979a173SChuck Lever #define DEFINE_ACCEPT_EVENT(name) \ 1302e979a173SChuck Lever DEFINE_EVENT(svcrdma_accept_class, svcrdma_##name##_err, \ 1303e979a173SChuck Lever TP_PROTO( \ 1304e979a173SChuck Lever const struct svcxprt_rdma *rdma, \ 1305e979a173SChuck Lever long status \ 1306e979a173SChuck Lever ), \ 1307e979a173SChuck Lever TP_ARGS(rdma, status)) 1308e979a173SChuck Lever 1309e979a173SChuck Lever DEFINE_ACCEPT_EVENT(pd); 1310e979a173SChuck Lever DEFINE_ACCEPT_EVENT(qp); 1311e979a173SChuck Lever DEFINE_ACCEPT_EVENT(fabric); 1312e979a173SChuck Lever DEFINE_ACCEPT_EVENT(initdepth); 1313e979a173SChuck Lever DEFINE_ACCEPT_EVENT(accept); 1314e979a173SChuck Lever 131598895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_MSG); 131698895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_NOMSG); 131798895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_MSGP); 131898895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_DONE); 131998895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_ERROR); 132098895edbSChuck Lever 132198895edbSChuck Lever #define show_rpcrdma_proc(x) \ 132298895edbSChuck Lever __print_symbolic(x, \ 132398895edbSChuck Lever { RDMA_MSG, "RDMA_MSG" }, \ 132498895edbSChuck Lever { RDMA_NOMSG, "RDMA_NOMSG" }, \ 132598895edbSChuck Lever { RDMA_MSGP, "RDMA_MSGP" }, \ 132698895edbSChuck Lever { RDMA_DONE, "RDMA_DONE" }, \ 132798895edbSChuck Lever { RDMA_ERROR, "RDMA_ERROR" }) 132898895edbSChuck Lever 132998895edbSChuck Lever TRACE_EVENT(svcrdma_decode_rqst, 133098895edbSChuck Lever TP_PROTO( 133198895edbSChuck Lever __be32 *p, 133298895edbSChuck Lever unsigned int hdrlen 133398895edbSChuck Lever ), 133498895edbSChuck Lever 133598895edbSChuck Lever TP_ARGS(p, hdrlen), 133698895edbSChuck Lever 133798895edbSChuck Lever TP_STRUCT__entry( 133898895edbSChuck Lever __field(u32, xid) 133998895edbSChuck Lever __field(u32, vers) 134098895edbSChuck Lever __field(u32, proc) 134198895edbSChuck Lever __field(u32, credits) 134298895edbSChuck Lever __field(unsigned int, hdrlen) 134398895edbSChuck Lever ), 134498895edbSChuck Lever 134598895edbSChuck Lever TP_fast_assign( 134698895edbSChuck Lever __entry->xid = be32_to_cpup(p++); 134798895edbSChuck Lever __entry->vers = be32_to_cpup(p++); 134898895edbSChuck Lever __entry->credits = be32_to_cpup(p++); 134998895edbSChuck Lever __entry->proc = be32_to_cpup(p); 135098895edbSChuck Lever __entry->hdrlen = hdrlen; 135198895edbSChuck Lever ), 135298895edbSChuck Lever 135398895edbSChuck Lever TP_printk("xid=0x%08x vers=%u credits=%u proc=%s hdrlen=%u", 135498895edbSChuck Lever __entry->xid, __entry->vers, __entry->credits, 135598895edbSChuck Lever show_rpcrdma_proc(__entry->proc), __entry->hdrlen) 135698895edbSChuck Lever ); 135798895edbSChuck Lever 135827ce6294SChuck Lever TRACE_EVENT(svcrdma_decode_short_err, 135998895edbSChuck Lever TP_PROTO( 136098895edbSChuck Lever unsigned int hdrlen 136198895edbSChuck Lever ), 136298895edbSChuck Lever 136398895edbSChuck Lever TP_ARGS(hdrlen), 136498895edbSChuck Lever 136598895edbSChuck Lever TP_STRUCT__entry( 136698895edbSChuck Lever __field(unsigned int, hdrlen) 136798895edbSChuck Lever ), 136898895edbSChuck Lever 136998895edbSChuck Lever TP_fast_assign( 137098895edbSChuck Lever __entry->hdrlen = hdrlen; 137198895edbSChuck Lever ), 137298895edbSChuck Lever 137398895edbSChuck Lever TP_printk("hdrlen=%u", __entry->hdrlen) 137498895edbSChuck Lever ); 137598895edbSChuck Lever 137698895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_badreq_event, 137798895edbSChuck Lever TP_PROTO( 137898895edbSChuck Lever __be32 *p 137998895edbSChuck Lever ), 138098895edbSChuck Lever 138198895edbSChuck Lever TP_ARGS(p), 138298895edbSChuck Lever 138398895edbSChuck Lever TP_STRUCT__entry( 138498895edbSChuck Lever __field(u32, xid) 138598895edbSChuck Lever __field(u32, vers) 138698895edbSChuck Lever __field(u32, proc) 138798895edbSChuck Lever __field(u32, credits) 138898895edbSChuck Lever ), 138998895edbSChuck Lever 139098895edbSChuck Lever TP_fast_assign( 139198895edbSChuck Lever __entry->xid = be32_to_cpup(p++); 139298895edbSChuck Lever __entry->vers = be32_to_cpup(p++); 139398895edbSChuck Lever __entry->credits = be32_to_cpup(p++); 139498895edbSChuck Lever __entry->proc = be32_to_cpup(p); 139598895edbSChuck Lever ), 139698895edbSChuck Lever 139798895edbSChuck Lever TP_printk("xid=0x%08x vers=%u credits=%u proc=%u", 139898895edbSChuck Lever __entry->xid, __entry->vers, __entry->credits, __entry->proc) 139998895edbSChuck Lever ); 140098895edbSChuck Lever 140198895edbSChuck Lever #define DEFINE_BADREQ_EVENT(name) \ 140227ce6294SChuck Lever DEFINE_EVENT(svcrdma_badreq_event, \ 140327ce6294SChuck Lever svcrdma_decode_##name##_err, \ 140498895edbSChuck Lever TP_PROTO( \ 140598895edbSChuck Lever __be32 *p \ 140698895edbSChuck Lever ), \ 140798895edbSChuck Lever TP_ARGS(p)) 140898895edbSChuck Lever 140998895edbSChuck Lever DEFINE_BADREQ_EVENT(badvers); 141098895edbSChuck Lever DEFINE_BADREQ_EVENT(drop); 141198895edbSChuck Lever DEFINE_BADREQ_EVENT(badproc); 141298895edbSChuck Lever DEFINE_BADREQ_EVENT(parse); 141398895edbSChuck Lever 141498895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_segment_event, 141598895edbSChuck Lever TP_PROTO( 141698895edbSChuck Lever u32 handle, 141798895edbSChuck Lever u32 length, 141898895edbSChuck Lever u64 offset 141998895edbSChuck Lever ), 142098895edbSChuck Lever 142198895edbSChuck Lever TP_ARGS(handle, length, offset), 142298895edbSChuck Lever 142398895edbSChuck Lever TP_STRUCT__entry( 142498895edbSChuck Lever __field(u32, handle) 142598895edbSChuck Lever __field(u32, length) 142698895edbSChuck Lever __field(u64, offset) 142798895edbSChuck Lever ), 142898895edbSChuck Lever 142998895edbSChuck Lever TP_fast_assign( 143098895edbSChuck Lever __entry->handle = handle; 143198895edbSChuck Lever __entry->length = length; 143298895edbSChuck Lever __entry->offset = offset; 143398895edbSChuck Lever ), 143498895edbSChuck Lever 143598895edbSChuck Lever TP_printk("%u@0x%016llx:0x%08x", 143698895edbSChuck Lever __entry->length, (unsigned long long)__entry->offset, 143798895edbSChuck Lever __entry->handle 143898895edbSChuck Lever ) 143998895edbSChuck Lever ); 144098895edbSChuck Lever 144198895edbSChuck Lever #define DEFINE_SEGMENT_EVENT(name) \ 1442e604aad2SChuck Lever DEFINE_EVENT(svcrdma_segment_event, svcrdma_##name,\ 144398895edbSChuck Lever TP_PROTO( \ 144498895edbSChuck Lever u32 handle, \ 144598895edbSChuck Lever u32 length, \ 144698895edbSChuck Lever u64 offset \ 144798895edbSChuck Lever ), \ 144898895edbSChuck Lever TP_ARGS(handle, length, offset)) 144998895edbSChuck Lever 1450e604aad2SChuck Lever DEFINE_SEGMENT_EVENT(decode_wseg); 1451e604aad2SChuck Lever DEFINE_SEGMENT_EVENT(encode_rseg); 1452a406c563SChuck Lever DEFINE_SEGMENT_EVENT(send_rseg); 1453e604aad2SChuck Lever DEFINE_SEGMENT_EVENT(encode_wseg); 1454a406c563SChuck Lever DEFINE_SEGMENT_EVENT(send_wseg); 145598895edbSChuck Lever 145698895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_chunk_event, 145798895edbSChuck Lever TP_PROTO( 145898895edbSChuck Lever u32 length 145998895edbSChuck Lever ), 146098895edbSChuck Lever 146198895edbSChuck Lever TP_ARGS(length), 146298895edbSChuck Lever 146398895edbSChuck Lever TP_STRUCT__entry( 146498895edbSChuck Lever __field(u32, length) 146598895edbSChuck Lever ), 146698895edbSChuck Lever 146798895edbSChuck Lever TP_fast_assign( 146898895edbSChuck Lever __entry->length = length; 146998895edbSChuck Lever ), 147098895edbSChuck Lever 147198895edbSChuck Lever TP_printk("length=%u", 147298895edbSChuck Lever __entry->length 147398895edbSChuck Lever ) 147498895edbSChuck Lever ); 147598895edbSChuck Lever 147698895edbSChuck Lever #define DEFINE_CHUNK_EVENT(name) \ 1477a406c563SChuck Lever DEFINE_EVENT(svcrdma_chunk_event, svcrdma_##name, \ 147898895edbSChuck Lever TP_PROTO( \ 147998895edbSChuck Lever u32 length \ 148098895edbSChuck Lever ), \ 148198895edbSChuck Lever TP_ARGS(length)) 148298895edbSChuck Lever 1483a406c563SChuck Lever DEFINE_CHUNK_EVENT(send_pzr); 1484a406c563SChuck Lever DEFINE_CHUNK_EVENT(encode_write_chunk); 1485a406c563SChuck Lever DEFINE_CHUNK_EVENT(send_write_chunk); 1486a406c563SChuck Lever DEFINE_CHUNK_EVENT(encode_read_chunk); 1487a406c563SChuck Lever DEFINE_CHUNK_EVENT(send_reply_chunk); 148898895edbSChuck Lever 1489a406c563SChuck Lever TRACE_EVENT(svcrdma_send_read_chunk, 149098895edbSChuck Lever TP_PROTO( 149198895edbSChuck Lever u32 length, 149298895edbSChuck Lever u32 position 149398895edbSChuck Lever ), 149498895edbSChuck Lever 149598895edbSChuck Lever TP_ARGS(length, position), 149698895edbSChuck Lever 149798895edbSChuck Lever TP_STRUCT__entry( 149898895edbSChuck Lever __field(u32, length) 149998895edbSChuck Lever __field(u32, position) 150098895edbSChuck Lever ), 150198895edbSChuck Lever 150298895edbSChuck Lever TP_fast_assign( 150398895edbSChuck Lever __entry->length = length; 150498895edbSChuck Lever __entry->position = position; 150598895edbSChuck Lever ), 150698895edbSChuck Lever 150798895edbSChuck Lever TP_printk("length=%u position=%u", 150898895edbSChuck Lever __entry->length, __entry->position 150998895edbSChuck Lever ) 151098895edbSChuck Lever ); 151198895edbSChuck Lever 151298895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_error_event, 151398895edbSChuck Lever TP_PROTO( 151498895edbSChuck Lever __be32 xid 151598895edbSChuck Lever ), 151698895edbSChuck Lever 151798895edbSChuck Lever TP_ARGS(xid), 151898895edbSChuck Lever 151998895edbSChuck Lever TP_STRUCT__entry( 152098895edbSChuck Lever __field(u32, xid) 152198895edbSChuck Lever ), 152298895edbSChuck Lever 152398895edbSChuck Lever TP_fast_assign( 152498895edbSChuck Lever __entry->xid = be32_to_cpu(xid); 152598895edbSChuck Lever ), 152698895edbSChuck Lever 152798895edbSChuck Lever TP_printk("xid=0x%08x", 152898895edbSChuck Lever __entry->xid 152998895edbSChuck Lever ) 153098895edbSChuck Lever ); 153198895edbSChuck Lever 153298895edbSChuck Lever #define DEFINE_ERROR_EVENT(name) \ 153398895edbSChuck Lever DEFINE_EVENT(svcrdma_error_event, svcrdma_err_##name, \ 153498895edbSChuck Lever TP_PROTO( \ 153598895edbSChuck Lever __be32 xid \ 153698895edbSChuck Lever ), \ 153798895edbSChuck Lever TP_ARGS(xid)) 153898895edbSChuck Lever 153998895edbSChuck Lever DEFINE_ERROR_EVENT(vers); 154098895edbSChuck Lever DEFINE_ERROR_EVENT(chunk); 154198895edbSChuck Lever 1542bd2abef3SChuck Lever /** 1543bd2abef3SChuck Lever ** Server-side RDMA API events 1544bd2abef3SChuck Lever **/ 1545bd2abef3SChuck Lever 1546832b2cb9SChuck Lever DECLARE_EVENT_CLASS(svcrdma_dma_map_class, 1547bd2abef3SChuck Lever TP_PROTO( 1548bd2abef3SChuck Lever const struct svcxprt_rdma *rdma, 1549832b2cb9SChuck Lever u64 dma_addr, 1550832b2cb9SChuck Lever u32 length 1551bd2abef3SChuck Lever ), 1552bd2abef3SChuck Lever 1553832b2cb9SChuck Lever TP_ARGS(rdma, dma_addr, length), 1554bd2abef3SChuck Lever 1555bd2abef3SChuck Lever TP_STRUCT__entry( 1556832b2cb9SChuck Lever __field(u64, dma_addr) 1557832b2cb9SChuck Lever __field(u32, length) 1558bd2abef3SChuck Lever __string(device, rdma->sc_cm_id->device->name) 1559bd2abef3SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1560bd2abef3SChuck Lever ), 1561bd2abef3SChuck Lever 1562bd2abef3SChuck Lever TP_fast_assign( 1563832b2cb9SChuck Lever __entry->dma_addr = dma_addr; 1564832b2cb9SChuck Lever __entry->length = length; 1565bd2abef3SChuck Lever __assign_str(device, rdma->sc_cm_id->device->name); 1566bd2abef3SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1567bd2abef3SChuck Lever ), 1568bd2abef3SChuck Lever 1569832b2cb9SChuck Lever TP_printk("addr=%s device=%s dma_addr=%llu length=%u", 1570832b2cb9SChuck Lever __get_str(addr), __get_str(device), 1571832b2cb9SChuck Lever __entry->dma_addr, __entry->length 1572bd2abef3SChuck Lever ) 1573bd2abef3SChuck Lever ); 1574bd2abef3SChuck Lever 1575832b2cb9SChuck Lever #define DEFINE_SVC_DMA_EVENT(name) \ 1576832b2cb9SChuck Lever DEFINE_EVENT(svcrdma_dma_map_class, svcrdma_##name, \ 1577832b2cb9SChuck Lever TP_PROTO( \ 1578832b2cb9SChuck Lever const struct svcxprt_rdma *rdma,\ 1579832b2cb9SChuck Lever u64 dma_addr, \ 1580832b2cb9SChuck Lever u32 length \ 1581832b2cb9SChuck Lever ), \ 1582832b2cb9SChuck Lever TP_ARGS(rdma, dma_addr, length)) 1583832b2cb9SChuck Lever 1584832b2cb9SChuck Lever DEFINE_SVC_DMA_EVENT(dma_map_page); 1585832b2cb9SChuck Lever DEFINE_SVC_DMA_EVENT(dma_unmap_page); 1586832b2cb9SChuck Lever 15872abfbe7eSChuck Lever TRACE_EVENT(svcrdma_dma_map_rw_err, 1588bd2abef3SChuck Lever TP_PROTO( 1589bd2abef3SChuck Lever const struct svcxprt_rdma *rdma, 15902abfbe7eSChuck Lever unsigned int nents, 1591bd2abef3SChuck Lever int status 1592bd2abef3SChuck Lever ), 1593bd2abef3SChuck Lever 15942abfbe7eSChuck Lever TP_ARGS(rdma, nents, status), 1595bd2abef3SChuck Lever 1596bd2abef3SChuck Lever TP_STRUCT__entry( 1597bd2abef3SChuck Lever __field(int, status) 15982abfbe7eSChuck Lever __field(unsigned int, nents) 1599bd2abef3SChuck Lever __string(device, rdma->sc_cm_id->device->name) 1600bd2abef3SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1601bd2abef3SChuck Lever ), 1602bd2abef3SChuck Lever 1603bd2abef3SChuck Lever TP_fast_assign( 1604bd2abef3SChuck Lever __entry->status = status; 16052abfbe7eSChuck Lever __entry->nents = nents; 1606bd2abef3SChuck Lever __assign_str(device, rdma->sc_cm_id->device->name); 1607bd2abef3SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1608bd2abef3SChuck Lever ), 1609bd2abef3SChuck Lever 16102abfbe7eSChuck Lever TP_printk("addr=%s device=%s nents=%u status=%d", 16112abfbe7eSChuck Lever __get_str(addr), __get_str(device), __entry->nents, 16122abfbe7eSChuck Lever __entry->status 1613bd2abef3SChuck Lever ) 1614bd2abef3SChuck Lever ); 1615bd2abef3SChuck Lever 1616f4e53e1cSChuck Lever TRACE_EVENT(svcrdma_no_rwctx_err, 1617f4e53e1cSChuck Lever TP_PROTO( 1618f4e53e1cSChuck Lever const struct svcxprt_rdma *rdma, 1619f4e53e1cSChuck Lever unsigned int num_sges 1620f4e53e1cSChuck Lever ), 1621f4e53e1cSChuck Lever 1622f4e53e1cSChuck Lever TP_ARGS(rdma, num_sges), 1623f4e53e1cSChuck Lever 1624f4e53e1cSChuck Lever TP_STRUCT__entry( 1625f4e53e1cSChuck Lever __field(unsigned int, num_sges) 1626f4e53e1cSChuck Lever __string(device, rdma->sc_cm_id->device->name) 1627f4e53e1cSChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1628f4e53e1cSChuck Lever ), 1629f4e53e1cSChuck Lever 1630f4e53e1cSChuck Lever TP_fast_assign( 1631f4e53e1cSChuck Lever __entry->num_sges = num_sges; 1632f4e53e1cSChuck Lever __assign_str(device, rdma->sc_cm_id->device->name); 1633f4e53e1cSChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1634f4e53e1cSChuck Lever ), 1635f4e53e1cSChuck Lever 1636f4e53e1cSChuck Lever TP_printk("addr=%s device=%s num_sges=%d", 1637f4e53e1cSChuck Lever __get_str(addr), __get_str(device), __entry->num_sges 1638f4e53e1cSChuck Lever ) 1639f4e53e1cSChuck Lever ); 1640f4e53e1cSChuck Lever 16419d200638SChuck Lever TRACE_EVENT(svcrdma_page_overrun_err, 16429d200638SChuck Lever TP_PROTO( 16439d200638SChuck Lever const struct svcxprt_rdma *rdma, 16449d200638SChuck Lever const struct svc_rqst *rqst, 16459d200638SChuck Lever unsigned int pageno 16469d200638SChuck Lever ), 16479d200638SChuck Lever 16489d200638SChuck Lever TP_ARGS(rdma, rqst, pageno), 16499d200638SChuck Lever 16509d200638SChuck Lever TP_STRUCT__entry( 16519d200638SChuck Lever __field(unsigned int, pageno) 16529d200638SChuck Lever __field(u32, xid) 16539d200638SChuck Lever __string(device, rdma->sc_cm_id->device->name) 16549d200638SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 16559d200638SChuck Lever ), 16569d200638SChuck Lever 16579d200638SChuck Lever TP_fast_assign( 16589d200638SChuck Lever __entry->pageno = pageno; 16599d200638SChuck Lever __entry->xid = __be32_to_cpu(rqst->rq_xid); 16609d200638SChuck Lever __assign_str(device, rdma->sc_cm_id->device->name); 16619d200638SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 16629d200638SChuck Lever ), 16639d200638SChuck Lever 16649d200638SChuck Lever TP_printk("addr=%s device=%s xid=0x%08x pageno=%u", __get_str(addr), 16659d200638SChuck Lever __get_str(device), __entry->xid, __entry->pageno 16669d200638SChuck Lever ) 16679d200638SChuck Lever ); 16689d200638SChuck Lever 1669dbc17acdSChuck Lever TRACE_EVENT(svcrdma_small_wrch_err, 1670dbc17acdSChuck Lever TP_PROTO( 1671dbc17acdSChuck Lever const struct svcxprt_rdma *rdma, 1672dbc17acdSChuck Lever unsigned int remaining, 1673dbc17acdSChuck Lever unsigned int seg_no, 1674dbc17acdSChuck Lever unsigned int num_segs 1675dbc17acdSChuck Lever ), 1676dbc17acdSChuck Lever 1677dbc17acdSChuck Lever TP_ARGS(rdma, remaining, seg_no, num_segs), 1678dbc17acdSChuck Lever 1679dbc17acdSChuck Lever TP_STRUCT__entry( 1680dbc17acdSChuck Lever __field(unsigned int, remaining) 1681dbc17acdSChuck Lever __field(unsigned int, seg_no) 1682dbc17acdSChuck Lever __field(unsigned int, num_segs) 1683dbc17acdSChuck Lever __string(device, rdma->sc_cm_id->device->name) 1684dbc17acdSChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1685dbc17acdSChuck Lever ), 1686dbc17acdSChuck Lever 1687dbc17acdSChuck Lever TP_fast_assign( 1688dbc17acdSChuck Lever __entry->remaining = remaining; 1689dbc17acdSChuck Lever __entry->seg_no = seg_no; 1690dbc17acdSChuck Lever __entry->num_segs = num_segs; 1691dbc17acdSChuck Lever __assign_str(device, rdma->sc_cm_id->device->name); 1692dbc17acdSChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1693dbc17acdSChuck Lever ), 1694dbc17acdSChuck Lever 1695dbc17acdSChuck Lever TP_printk("addr=%s device=%s remaining=%u seg_no=%u num_segs=%u", 1696dbc17acdSChuck Lever __get_str(addr), __get_str(device), __entry->remaining, 1697dbc17acdSChuck Lever __entry->seg_no, __entry->num_segs 1698dbc17acdSChuck Lever ) 1699dbc17acdSChuck Lever ); 1700dbc17acdSChuck Lever 17010dabe948SChuck Lever TRACE_EVENT(svcrdma_send_pullup, 17020dabe948SChuck Lever TP_PROTO( 17030dabe948SChuck Lever unsigned int len 17040dabe948SChuck Lever ), 17050dabe948SChuck Lever 17060dabe948SChuck Lever TP_ARGS(len), 17070dabe948SChuck Lever 17080dabe948SChuck Lever TP_STRUCT__entry( 17090dabe948SChuck Lever __field(unsigned int, len) 17100dabe948SChuck Lever ), 17110dabe948SChuck Lever 17120dabe948SChuck Lever TP_fast_assign( 17130dabe948SChuck Lever __entry->len = len; 17140dabe948SChuck Lever ), 17150dabe948SChuck Lever 17160dabe948SChuck Lever TP_printk("len=%u", __entry->len) 17170dabe948SChuck Lever ); 17180dabe948SChuck Lever 17193f8f25c6SChuck Lever TRACE_EVENT(svcrdma_send_err, 1720bd2abef3SChuck Lever TP_PROTO( 1721bd2abef3SChuck Lever const struct svc_rqst *rqst, 1722bd2abef3SChuck Lever int status 1723bd2abef3SChuck Lever ), 1724bd2abef3SChuck Lever 1725bd2abef3SChuck Lever TP_ARGS(rqst, status), 1726bd2abef3SChuck Lever 1727bd2abef3SChuck Lever TP_STRUCT__entry( 1728bd2abef3SChuck Lever __field(int, status) 1729bd2abef3SChuck Lever __field(u32, xid) 1730bd2abef3SChuck Lever __string(addr, rqst->rq_xprt->xpt_remotebuf) 1731bd2abef3SChuck Lever ), 1732bd2abef3SChuck Lever 1733bd2abef3SChuck Lever TP_fast_assign( 1734bd2abef3SChuck Lever __entry->status = status; 1735bd2abef3SChuck Lever __entry->xid = __be32_to_cpu(rqst->rq_xid); 1736bd2abef3SChuck Lever __assign_str(addr, rqst->rq_xprt->xpt_remotebuf); 1737bd2abef3SChuck Lever ), 1738bd2abef3SChuck Lever 17393f8f25c6SChuck Lever TP_printk("addr=%s xid=0x%08x status=%d", __get_str(addr), 1740bd2abef3SChuck Lever __entry->xid, __entry->status 1741bd2abef3SChuck Lever ) 1742bd2abef3SChuck Lever ); 1743bd2abef3SChuck Lever 1744bd2abef3SChuck Lever DECLARE_EVENT_CLASS(svcrdma_sendcomp_event, 1745bd2abef3SChuck Lever TP_PROTO( 1746bd2abef3SChuck Lever const struct ib_wc *wc 1747bd2abef3SChuck Lever ), 1748bd2abef3SChuck Lever 1749bd2abef3SChuck Lever TP_ARGS(wc), 1750bd2abef3SChuck Lever 1751bd2abef3SChuck Lever TP_STRUCT__entry( 1752bd2abef3SChuck Lever __field(const void *, cqe) 1753bd2abef3SChuck Lever __field(unsigned int, status) 1754bd2abef3SChuck Lever __field(unsigned int, vendor_err) 1755bd2abef3SChuck Lever ), 1756bd2abef3SChuck Lever 1757bd2abef3SChuck Lever TP_fast_assign( 1758bd2abef3SChuck Lever __entry->cqe = wc->wr_cqe; 1759bd2abef3SChuck Lever __entry->status = wc->status; 1760bd2abef3SChuck Lever if (wc->status) 1761bd2abef3SChuck Lever __entry->vendor_err = wc->vendor_err; 1762bd2abef3SChuck Lever else 1763bd2abef3SChuck Lever __entry->vendor_err = 0; 1764bd2abef3SChuck Lever ), 1765bd2abef3SChuck Lever 1766bd2abef3SChuck Lever TP_printk("cqe=%p status=%s (%u/0x%x)", 1767bd2abef3SChuck Lever __entry->cqe, rdma_show_wc_status(__entry->status), 1768bd2abef3SChuck Lever __entry->status, __entry->vendor_err 1769bd2abef3SChuck Lever ) 1770bd2abef3SChuck Lever ); 1771bd2abef3SChuck Lever 1772bd2abef3SChuck Lever #define DEFINE_SENDCOMP_EVENT(name) \ 1773bd2abef3SChuck Lever DEFINE_EVENT(svcrdma_sendcomp_event, svcrdma_wc_##name, \ 1774bd2abef3SChuck Lever TP_PROTO( \ 1775bd2abef3SChuck Lever const struct ib_wc *wc \ 1776bd2abef3SChuck Lever ), \ 1777bd2abef3SChuck Lever TP_ARGS(wc)) 1778bd2abef3SChuck Lever 1779bd2abef3SChuck Lever TRACE_EVENT(svcrdma_post_send, 1780bd2abef3SChuck Lever TP_PROTO( 1781e28b4fc6SChuck Lever const struct ib_send_wr *wr 1782bd2abef3SChuck Lever ), 1783bd2abef3SChuck Lever 1784e28b4fc6SChuck Lever TP_ARGS(wr), 1785bd2abef3SChuck Lever 1786bd2abef3SChuck Lever TP_STRUCT__entry( 1787bd2abef3SChuck Lever __field(const void *, cqe) 1788bd2abef3SChuck Lever __field(unsigned int, num_sge) 1789bd2abef3SChuck Lever __field(u32, inv_rkey) 1790bd2abef3SChuck Lever ), 1791bd2abef3SChuck Lever 1792bd2abef3SChuck Lever TP_fast_assign( 1793bd2abef3SChuck Lever __entry->cqe = wr->wr_cqe; 1794bd2abef3SChuck Lever __entry->num_sge = wr->num_sge; 1795bd2abef3SChuck Lever __entry->inv_rkey = (wr->opcode == IB_WR_SEND_WITH_INV) ? 1796bd2abef3SChuck Lever wr->ex.invalidate_rkey : 0; 1797bd2abef3SChuck Lever ), 1798bd2abef3SChuck Lever 1799e28b4fc6SChuck Lever TP_printk("cqe=%p num_sge=%u inv_rkey=0x%08x", 1800bd2abef3SChuck Lever __entry->cqe, __entry->num_sge, 1801e28b4fc6SChuck Lever __entry->inv_rkey 1802bd2abef3SChuck Lever ) 1803bd2abef3SChuck Lever ); 1804bd2abef3SChuck Lever 1805bd2abef3SChuck Lever DEFINE_SENDCOMP_EVENT(send); 1806bd2abef3SChuck Lever 1807bd2abef3SChuck Lever TRACE_EVENT(svcrdma_post_recv, 1808bd2abef3SChuck Lever TP_PROTO( 1809bd2abef3SChuck Lever const struct ib_recv_wr *wr, 1810bd2abef3SChuck Lever int status 1811bd2abef3SChuck Lever ), 1812bd2abef3SChuck Lever 1813bd2abef3SChuck Lever TP_ARGS(wr, status), 1814bd2abef3SChuck Lever 1815bd2abef3SChuck Lever TP_STRUCT__entry( 1816bd2abef3SChuck Lever __field(const void *, cqe) 1817bd2abef3SChuck Lever __field(int, status) 1818bd2abef3SChuck Lever ), 1819bd2abef3SChuck Lever 1820bd2abef3SChuck Lever TP_fast_assign( 1821bd2abef3SChuck Lever __entry->cqe = wr->wr_cqe; 1822bd2abef3SChuck Lever __entry->status = status; 1823bd2abef3SChuck Lever ), 1824bd2abef3SChuck Lever 1825bd2abef3SChuck Lever TP_printk("cqe=%p status=%d", 1826bd2abef3SChuck Lever __entry->cqe, __entry->status 1827bd2abef3SChuck Lever ) 1828bd2abef3SChuck Lever ); 1829bd2abef3SChuck Lever 1830bd2abef3SChuck Lever TRACE_EVENT(svcrdma_wc_receive, 1831bd2abef3SChuck Lever TP_PROTO( 1832bd2abef3SChuck Lever const struct ib_wc *wc 1833bd2abef3SChuck Lever ), 1834bd2abef3SChuck Lever 1835bd2abef3SChuck Lever TP_ARGS(wc), 1836bd2abef3SChuck Lever 1837bd2abef3SChuck Lever TP_STRUCT__entry( 1838bd2abef3SChuck Lever __field(const void *, cqe) 1839bd2abef3SChuck Lever __field(u32, byte_len) 1840bd2abef3SChuck Lever __field(unsigned int, status) 1841bd2abef3SChuck Lever __field(u32, vendor_err) 1842bd2abef3SChuck Lever ), 1843bd2abef3SChuck Lever 1844bd2abef3SChuck Lever TP_fast_assign( 1845bd2abef3SChuck Lever __entry->cqe = wc->wr_cqe; 1846bd2abef3SChuck Lever __entry->status = wc->status; 1847bd2abef3SChuck Lever if (wc->status) { 1848bd2abef3SChuck Lever __entry->byte_len = 0; 1849bd2abef3SChuck Lever __entry->vendor_err = wc->vendor_err; 1850bd2abef3SChuck Lever } else { 1851bd2abef3SChuck Lever __entry->byte_len = wc->byte_len; 1852bd2abef3SChuck Lever __entry->vendor_err = 0; 1853bd2abef3SChuck Lever } 1854bd2abef3SChuck Lever ), 1855bd2abef3SChuck Lever 1856bd2abef3SChuck Lever TP_printk("cqe=%p byte_len=%u status=%s (%u/0x%x)", 1857bd2abef3SChuck Lever __entry->cqe, __entry->byte_len, 1858bd2abef3SChuck Lever rdma_show_wc_status(__entry->status), 1859bd2abef3SChuck Lever __entry->status, __entry->vendor_err 1860bd2abef3SChuck Lever ) 1861bd2abef3SChuck Lever ); 1862bd2abef3SChuck Lever 1863bd2abef3SChuck Lever TRACE_EVENT(svcrdma_post_rw, 1864bd2abef3SChuck Lever TP_PROTO( 1865bd2abef3SChuck Lever const void *cqe, 1866e28b4fc6SChuck Lever int sqecount 1867bd2abef3SChuck Lever ), 1868bd2abef3SChuck Lever 1869e28b4fc6SChuck Lever TP_ARGS(cqe, sqecount), 1870bd2abef3SChuck Lever 1871bd2abef3SChuck Lever TP_STRUCT__entry( 1872bd2abef3SChuck Lever __field(const void *, cqe) 1873bd2abef3SChuck Lever __field(int, sqecount) 1874bd2abef3SChuck Lever ), 1875bd2abef3SChuck Lever 1876bd2abef3SChuck Lever TP_fast_assign( 1877bd2abef3SChuck Lever __entry->cqe = cqe; 1878bd2abef3SChuck Lever __entry->sqecount = sqecount; 1879bd2abef3SChuck Lever ), 1880bd2abef3SChuck Lever 1881e28b4fc6SChuck Lever TP_printk("cqe=%p sqecount=%d", 1882e28b4fc6SChuck Lever __entry->cqe, __entry->sqecount 1883bd2abef3SChuck Lever ) 1884bd2abef3SChuck Lever ); 1885bd2abef3SChuck Lever 1886bd2abef3SChuck Lever DEFINE_SENDCOMP_EVENT(read); 1887bd2abef3SChuck Lever DEFINE_SENDCOMP_EVENT(write); 1888bd2abef3SChuck Lever 1889bd2abef3SChuck Lever TRACE_EVENT(svcrdma_qp_error, 1890bd2abef3SChuck Lever TP_PROTO( 1891bd2abef3SChuck Lever const struct ib_event *event, 1892bd2abef3SChuck Lever const struct sockaddr *sap 1893bd2abef3SChuck Lever ), 1894bd2abef3SChuck Lever 1895bd2abef3SChuck Lever TP_ARGS(event, sap), 1896bd2abef3SChuck Lever 1897bd2abef3SChuck Lever TP_STRUCT__entry( 1898bd2abef3SChuck Lever __field(unsigned int, event) 1899bd2abef3SChuck Lever __string(device, event->device->name) 1900bd2abef3SChuck Lever __array(__u8, addr, INET6_ADDRSTRLEN + 10) 1901bd2abef3SChuck Lever ), 1902bd2abef3SChuck Lever 1903bd2abef3SChuck Lever TP_fast_assign( 1904bd2abef3SChuck Lever __entry->event = event->event; 1905bd2abef3SChuck Lever __assign_str(device, event->device->name); 1906bd2abef3SChuck Lever snprintf(__entry->addr, sizeof(__entry->addr) - 1, 1907bd2abef3SChuck Lever "%pISpc", sap); 1908bd2abef3SChuck Lever ), 1909bd2abef3SChuck Lever 1910bd2abef3SChuck Lever TP_printk("addr=%s dev=%s event=%s (%u)", 1911bd2abef3SChuck Lever __entry->addr, __get_str(device), 1912bd2abef3SChuck Lever rdma_show_ib_event(__entry->event), __entry->event 1913bd2abef3SChuck Lever ) 1914bd2abef3SChuck Lever ); 1915bd2abef3SChuck Lever 1916bd2abef3SChuck Lever DECLARE_EVENT_CLASS(svcrdma_sendqueue_event, 1917bd2abef3SChuck Lever TP_PROTO( 1918bd2abef3SChuck Lever const struct svcxprt_rdma *rdma 1919bd2abef3SChuck Lever ), 1920bd2abef3SChuck Lever 1921bd2abef3SChuck Lever TP_ARGS(rdma), 1922bd2abef3SChuck Lever 1923bd2abef3SChuck Lever TP_STRUCT__entry( 1924bd2abef3SChuck Lever __field(int, avail) 1925bd2abef3SChuck Lever __field(int, depth) 1926bd2abef3SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1927bd2abef3SChuck Lever ), 1928bd2abef3SChuck Lever 1929bd2abef3SChuck Lever TP_fast_assign( 1930bd2abef3SChuck Lever __entry->avail = atomic_read(&rdma->sc_sq_avail); 1931bd2abef3SChuck Lever __entry->depth = rdma->sc_sq_depth; 1932bd2abef3SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1933bd2abef3SChuck Lever ), 1934bd2abef3SChuck Lever 1935bd2abef3SChuck Lever TP_printk("addr=%s sc_sq_avail=%d/%d", 1936bd2abef3SChuck Lever __get_str(addr), __entry->avail, __entry->depth 1937bd2abef3SChuck Lever ) 1938bd2abef3SChuck Lever ); 1939bd2abef3SChuck Lever 1940bd2abef3SChuck Lever #define DEFINE_SQ_EVENT(name) \ 1941bd2abef3SChuck Lever DEFINE_EVENT(svcrdma_sendqueue_event, svcrdma_sq_##name,\ 1942bd2abef3SChuck Lever TP_PROTO( \ 1943bd2abef3SChuck Lever const struct svcxprt_rdma *rdma \ 1944bd2abef3SChuck Lever ), \ 1945bd2abef3SChuck Lever TP_ARGS(rdma)) 1946bd2abef3SChuck Lever 1947bd2abef3SChuck Lever DEFINE_SQ_EVENT(full); 1948bd2abef3SChuck Lever DEFINE_SQ_EVENT(retry); 1949bd2abef3SChuck Lever 1950e28b4fc6SChuck Lever TRACE_EVENT(svcrdma_sq_post_err, 1951e28b4fc6SChuck Lever TP_PROTO( 1952e28b4fc6SChuck Lever const struct svcxprt_rdma *rdma, 1953e28b4fc6SChuck Lever int status 1954e28b4fc6SChuck Lever ), 1955e28b4fc6SChuck Lever 1956e28b4fc6SChuck Lever TP_ARGS(rdma, status), 1957e28b4fc6SChuck Lever 1958e28b4fc6SChuck Lever TP_STRUCT__entry( 1959e28b4fc6SChuck Lever __field(int, avail) 1960e28b4fc6SChuck Lever __field(int, depth) 1961e28b4fc6SChuck Lever __field(int, status) 1962e28b4fc6SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1963e28b4fc6SChuck Lever ), 1964e28b4fc6SChuck Lever 1965e28b4fc6SChuck Lever TP_fast_assign( 1966e28b4fc6SChuck Lever __entry->avail = atomic_read(&rdma->sc_sq_avail); 1967e28b4fc6SChuck Lever __entry->depth = rdma->sc_sq_depth; 1968e28b4fc6SChuck Lever __entry->status = status; 1969e28b4fc6SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1970e28b4fc6SChuck Lever ), 1971e28b4fc6SChuck Lever 1972e28b4fc6SChuck Lever TP_printk("addr=%s sc_sq_avail=%d/%d status=%d", 1973e28b4fc6SChuck Lever __get_str(addr), __entry->avail, __entry->depth, 1974e28b4fc6SChuck Lever __entry->status 1975e28b4fc6SChuck Lever ) 1976e28b4fc6SChuck Lever ); 1977e28b4fc6SChuck Lever 1978e48f083eSChuck Lever #endif /* _TRACE_RPCRDMA_H */ 1979e48f083eSChuck Lever 1980e48f083eSChuck Lever #include <trace/define_trace.h> 1981