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( 23158f10ad4SChuck Lever __field(const void *, mr) 23258f10ad4SChuck Lever __field(unsigned int, status) 23358f10ad4SChuck Lever __field(unsigned int, vendor_err) 23458f10ad4SChuck Lever ), 23558f10ad4SChuck Lever 23658f10ad4SChuck Lever TP_fast_assign( 23758f10ad4SChuck Lever __entry->mr = container_of(frwr, struct rpcrdma_mr, frwr); 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( 24384756894SChuck Lever "mr=%p: %s (%u/0x%x)", 24484756894SChuck Lever __entry->mr, 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( 2772937fedeSChuck Lever __field(const void *, mr) 2782937fedeSChuck Lever __field(u32, handle) 2792937fedeSChuck Lever __field(u32, length) 2802937fedeSChuck Lever __field(u64, offset) 281aba11831SChuck Lever __field(u32, dir) 2822937fedeSChuck Lever ), 2832937fedeSChuck Lever 2842937fedeSChuck Lever TP_fast_assign( 2852937fedeSChuck Lever __entry->mr = mr; 2862937fedeSChuck Lever __entry->handle = mr->mr_handle; 2872937fedeSChuck Lever __entry->length = mr->mr_length; 2882937fedeSChuck Lever __entry->offset = mr->mr_offset; 289aba11831SChuck Lever __entry->dir = mr->mr_dir; 2902937fedeSChuck Lever ), 2912937fedeSChuck Lever 292aba11831SChuck Lever TP_printk("mr=%p %u@0x%016llx:0x%08x (%s)", 2932937fedeSChuck Lever __entry->mr, __entry->length, 294aba11831SChuck Lever (unsigned long long)__entry->offset, __entry->handle, 295aba11831SChuck Lever xprtrdma_show_direction(__entry->dir) 2962937fedeSChuck Lever ) 2972937fedeSChuck Lever ); 2982937fedeSChuck Lever 2992937fedeSChuck Lever #define DEFINE_MR_EVENT(name) \ 300d379eaa8SChuck Lever DEFINE_EVENT(xprtrdma_mr, xprtrdma_mr_##name, \ 3012937fedeSChuck Lever TP_PROTO( \ 3022937fedeSChuck Lever const struct rpcrdma_mr *mr \ 3032937fedeSChuck Lever ), \ 3042937fedeSChuck Lever TP_ARGS(mr)) 3052937fedeSChuck Lever 306fc1eb807SChuck Lever DECLARE_EVENT_CLASS(xprtrdma_cb_event, 307fc1eb807SChuck Lever TP_PROTO( 308fc1eb807SChuck Lever const struct rpc_rqst *rqst 309fc1eb807SChuck Lever ), 310fc1eb807SChuck Lever 311fc1eb807SChuck Lever TP_ARGS(rqst), 312fc1eb807SChuck Lever 313fc1eb807SChuck Lever TP_STRUCT__entry( 314fc1eb807SChuck Lever __field(const void *, rqst) 315fc1eb807SChuck Lever __field(const void *, rep) 316fc1eb807SChuck Lever __field(const void *, req) 317fc1eb807SChuck Lever __field(u32, xid) 318fc1eb807SChuck Lever ), 319fc1eb807SChuck Lever 320fc1eb807SChuck Lever TP_fast_assign( 321fc1eb807SChuck Lever __entry->rqst = rqst; 322fc1eb807SChuck Lever __entry->req = rpcr_to_rdmar(rqst); 323fc1eb807SChuck Lever __entry->rep = rpcr_to_rdmar(rqst)->rl_reply; 324fc1eb807SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 325fc1eb807SChuck Lever ), 326fc1eb807SChuck Lever 327fc1eb807SChuck Lever TP_printk("xid=0x%08x, rqst=%p req=%p rep=%p", 328fc1eb807SChuck Lever __entry->xid, __entry->rqst, __entry->req, __entry->rep 329fc1eb807SChuck Lever ) 330fc1eb807SChuck Lever ); 331fc1eb807SChuck Lever 332fc1eb807SChuck Lever #define DEFINE_CB_EVENT(name) \ 333fc1eb807SChuck Lever DEFINE_EVENT(xprtrdma_cb_event, name, \ 334fc1eb807SChuck Lever TP_PROTO( \ 335fc1eb807SChuck Lever const struct rpc_rqst *rqst \ 336fc1eb807SChuck Lever ), \ 337fc1eb807SChuck Lever TP_ARGS(rqst)) 338fc1eb807SChuck Lever 339b4a7f91cSChuck Lever /** 340b4744e00SChuck Lever ** Connection events 341b4744e00SChuck Lever **/ 342b4744e00SChuck Lever 343ae38288eSChuck Lever TRACE_EVENT(xprtrdma_cm_event, 344b4744e00SChuck Lever TP_PROTO( 345b4744e00SChuck Lever const struct rpcrdma_xprt *r_xprt, 346b4744e00SChuck Lever struct rdma_cm_event *event 347b4744e00SChuck Lever ), 348b4744e00SChuck Lever 349b4744e00SChuck Lever TP_ARGS(r_xprt, event), 350b4744e00SChuck Lever 351b4744e00SChuck Lever TP_STRUCT__entry( 352b4744e00SChuck Lever __field(const void *, r_xprt) 353b4744e00SChuck Lever __field(unsigned int, event) 354b4744e00SChuck Lever __field(int, status) 355b4744e00SChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 356b4744e00SChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 357b4744e00SChuck Lever ), 358b4744e00SChuck Lever 359b4744e00SChuck Lever TP_fast_assign( 360b4744e00SChuck Lever __entry->r_xprt = r_xprt; 361b4744e00SChuck Lever __entry->event = event->event; 362b4744e00SChuck Lever __entry->status = event->status; 363b4744e00SChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 364b4744e00SChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 365b4744e00SChuck Lever ), 366b4744e00SChuck Lever 367b4744e00SChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: %s (%u/%d)", 368b4744e00SChuck Lever __get_str(addr), __get_str(port), 369b4744e00SChuck Lever __entry->r_xprt, rdma_show_cm_event(__entry->event), 370b4744e00SChuck Lever __entry->event, __entry->status 371b4744e00SChuck Lever ) 372b4744e00SChuck Lever ); 373b4744e00SChuck Lever 3747b020f17SChuck Lever DEFINE_CONN_EVENT(connect); 3757b020f17SChuck Lever DEFINE_CONN_EVENT(disconnect); 3767b020f17SChuck Lever 3777b020f17SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_create); 3787b020f17SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_op_destroy); 3797b020f17SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_remove); 3807b020f17SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_reinsert); 3817b020f17SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_op_inject_dsc); 3827b020f17SChuck Lever DEFINE_RXPRT_EVENT(xprtrdma_op_close); 3837b020f17SChuck Lever 3847b020f17SChuck Lever TRACE_EVENT(xprtrdma_op_connect, 385b4744e00SChuck Lever TP_PROTO( 386b4744e00SChuck Lever const struct rpcrdma_xprt *r_xprt, 3877b020f17SChuck Lever unsigned long delay 388b4744e00SChuck Lever ), 389b4744e00SChuck Lever 3907b020f17SChuck Lever TP_ARGS(r_xprt, delay), 391b4744e00SChuck Lever 392b4744e00SChuck Lever TP_STRUCT__entry( 393b4744e00SChuck Lever __field(const void *, r_xprt) 3947b020f17SChuck Lever __field(unsigned long, delay) 395b4744e00SChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 396b4744e00SChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 397b4744e00SChuck Lever ), 398b4744e00SChuck Lever 399b4744e00SChuck Lever TP_fast_assign( 400b4744e00SChuck Lever __entry->r_xprt = r_xprt; 4017b020f17SChuck Lever __entry->delay = delay; 402b4744e00SChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 403b4744e00SChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 404b4744e00SChuck Lever ), 405b4744e00SChuck Lever 4067b020f17SChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p delay=%lu", 4077b020f17SChuck Lever __get_str(addr), __get_str(port), __entry->r_xprt, 4087b020f17SChuck Lever __entry->delay 409b4744e00SChuck Lever ) 410b4744e00SChuck Lever ); 411b4744e00SChuck Lever 412b4744e00SChuck Lever 413675dd90aSChuck Lever TRACE_EVENT(xprtrdma_op_set_cto, 414675dd90aSChuck Lever TP_PROTO( 415675dd90aSChuck Lever const struct rpcrdma_xprt *r_xprt, 416675dd90aSChuck Lever unsigned long connect, 417675dd90aSChuck Lever unsigned long reconnect 418675dd90aSChuck Lever ), 419675dd90aSChuck Lever 420675dd90aSChuck Lever TP_ARGS(r_xprt, connect, reconnect), 421675dd90aSChuck Lever 422675dd90aSChuck Lever TP_STRUCT__entry( 423675dd90aSChuck Lever __field(const void *, r_xprt) 424675dd90aSChuck Lever __field(unsigned long, connect) 425675dd90aSChuck Lever __field(unsigned long, reconnect) 426675dd90aSChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 427675dd90aSChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 428675dd90aSChuck Lever ), 429675dd90aSChuck Lever 430675dd90aSChuck Lever TP_fast_assign( 431675dd90aSChuck Lever __entry->r_xprt = r_xprt; 432675dd90aSChuck Lever __entry->connect = connect; 433675dd90aSChuck Lever __entry->reconnect = reconnect; 434675dd90aSChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 435675dd90aSChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 436675dd90aSChuck Lever ), 437675dd90aSChuck Lever 438675dd90aSChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: connect=%lu reconnect=%lu", 439675dd90aSChuck Lever __get_str(addr), __get_str(port), __entry->r_xprt, 440675dd90aSChuck Lever __entry->connect / HZ, __entry->reconnect / HZ 441675dd90aSChuck Lever ) 442675dd90aSChuck Lever ); 443675dd90aSChuck Lever 444f9521d53SChuck Lever TRACE_EVENT(xprtrdma_qp_event, 445643cf323SChuck Lever TP_PROTO( 446643cf323SChuck Lever const struct rpcrdma_xprt *r_xprt, 447643cf323SChuck Lever const struct ib_event *event 448643cf323SChuck Lever ), 449643cf323SChuck Lever 450643cf323SChuck Lever TP_ARGS(r_xprt, event), 451643cf323SChuck Lever 452643cf323SChuck Lever TP_STRUCT__entry( 453643cf323SChuck Lever __field(const void *, r_xprt) 454643cf323SChuck Lever __field(unsigned int, event) 455643cf323SChuck Lever __string(name, event->device->name) 456643cf323SChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 457643cf323SChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 458643cf323SChuck Lever ), 459643cf323SChuck Lever 460643cf323SChuck Lever TP_fast_assign( 461643cf323SChuck Lever __entry->r_xprt = r_xprt; 462643cf323SChuck Lever __entry->event = event->event; 463643cf323SChuck Lever __assign_str(name, event->device->name); 464643cf323SChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 465643cf323SChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 466643cf323SChuck Lever ), 467643cf323SChuck Lever 468643cf323SChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: dev %s: %s (%u)", 469643cf323SChuck Lever __get_str(addr), __get_str(port), __entry->r_xprt, 470643cf323SChuck Lever __get_str(name), rdma_show_ib_event(__entry->event), 471643cf323SChuck Lever __entry->event 472643cf323SChuck Lever ) 473643cf323SChuck Lever ); 474643cf323SChuck Lever 475b4744e00SChuck Lever /** 476ab03eff5SChuck Lever ** Call events 477ab03eff5SChuck Lever **/ 478ab03eff5SChuck Lever 4791c443effSChuck Lever TRACE_EVENT(xprtrdma_createmrs, 4801c443effSChuck Lever TP_PROTO( 4811c443effSChuck Lever const struct rpcrdma_xprt *r_xprt, 4821c443effSChuck Lever unsigned int count 4831c443effSChuck Lever ), 4841c443effSChuck Lever 4851c443effSChuck Lever TP_ARGS(r_xprt, count), 4861c443effSChuck Lever 4871c443effSChuck Lever TP_STRUCT__entry( 4881c443effSChuck Lever __field(const void *, r_xprt) 4896dc6ec9eSChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 4906dc6ec9eSChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 4911c443effSChuck Lever __field(unsigned int, count) 4921c443effSChuck Lever ), 4931c443effSChuck Lever 4941c443effSChuck Lever TP_fast_assign( 4951c443effSChuck Lever __entry->r_xprt = r_xprt; 4961c443effSChuck Lever __entry->count = count; 4976dc6ec9eSChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 4986dc6ec9eSChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 4991c443effSChuck Lever ), 5001c443effSChuck Lever 5016dc6ec9eSChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: created %u MRs", 5026dc6ec9eSChuck Lever __get_str(addr), __get_str(port), __entry->r_xprt, 5036dc6ec9eSChuck Lever __entry->count 5046dc6ec9eSChuck Lever ) 5056dc6ec9eSChuck Lever ); 5066dc6ec9eSChuck Lever 5076dc6ec9eSChuck Lever TRACE_EVENT(xprtrdma_mr_get, 5086dc6ec9eSChuck Lever TP_PROTO( 5096dc6ec9eSChuck Lever const struct rpcrdma_req *req 5106dc6ec9eSChuck Lever ), 5116dc6ec9eSChuck Lever 5126dc6ec9eSChuck Lever TP_ARGS(req), 5136dc6ec9eSChuck Lever 5146dc6ec9eSChuck Lever TP_STRUCT__entry( 5156dc6ec9eSChuck Lever __field(const void *, req) 5166dc6ec9eSChuck Lever __field(unsigned int, task_id) 5176dc6ec9eSChuck Lever __field(unsigned int, client_id) 5186dc6ec9eSChuck Lever __field(u32, xid) 5196dc6ec9eSChuck Lever ), 5206dc6ec9eSChuck Lever 5216dc6ec9eSChuck Lever TP_fast_assign( 5226dc6ec9eSChuck Lever const struct rpc_rqst *rqst = &req->rl_slot; 5236dc6ec9eSChuck Lever 5246dc6ec9eSChuck Lever __entry->req = req; 5256dc6ec9eSChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 5266dc6ec9eSChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 5276dc6ec9eSChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 5286dc6ec9eSChuck Lever ), 5296dc6ec9eSChuck Lever 5306dc6ec9eSChuck Lever TP_printk("task:%u@%u xid=0x%08x req=%p", 5316dc6ec9eSChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 5326dc6ec9eSChuck Lever __entry->req 5331c443effSChuck Lever ) 5341c443effSChuck Lever ); 5351c443effSChuck Lever 5363b39f52aSChuck Lever TRACE_EVENT(xprtrdma_nomrs, 5373b39f52aSChuck Lever TP_PROTO( 5383b39f52aSChuck Lever const struct rpcrdma_req *req 5393b39f52aSChuck Lever ), 5403b39f52aSChuck Lever 5413b39f52aSChuck Lever TP_ARGS(req), 5423b39f52aSChuck Lever 5433b39f52aSChuck Lever TP_STRUCT__entry( 5443b39f52aSChuck Lever __field(const void *, req) 5453b39f52aSChuck Lever __field(unsigned int, task_id) 5463b39f52aSChuck Lever __field(unsigned int, client_id) 5473b39f52aSChuck Lever __field(u32, xid) 5483b39f52aSChuck Lever ), 5493b39f52aSChuck Lever 5503b39f52aSChuck Lever TP_fast_assign( 5513b39f52aSChuck Lever const struct rpc_rqst *rqst = &req->rl_slot; 5523b39f52aSChuck Lever 5533b39f52aSChuck Lever __entry->req = req; 5543b39f52aSChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 5553b39f52aSChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 5563b39f52aSChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 5573b39f52aSChuck Lever ), 5583b39f52aSChuck Lever 5593b39f52aSChuck Lever TP_printk("task:%u@%u xid=0x%08x req=%p", 5603b39f52aSChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 5613b39f52aSChuck Lever __entry->req 5623b39f52aSChuck Lever ) 5633b39f52aSChuck Lever ); 5641c443effSChuck Lever 565aba11831SChuck Lever DEFINE_RDCH_EVENT(read); 566aba11831SChuck Lever DEFINE_WRCH_EVENT(write); 567aba11831SChuck Lever DEFINE_WRCH_EVENT(reply); 56858f10ad4SChuck Lever 569ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch); 570614f3c96SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch_pullup); 571614f3c96SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_noch_mapped); 572ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_readch); 573ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_areadch); 574ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_writech); 575ab03eff5SChuck Lever TRACE_DEFINE_ENUM(rpcrdma_replych); 576ab03eff5SChuck Lever 577ab03eff5SChuck Lever #define xprtrdma_show_chunktype(x) \ 578ab03eff5SChuck Lever __print_symbolic(x, \ 579ab03eff5SChuck Lever { rpcrdma_noch, "inline" }, \ 580614f3c96SChuck Lever { rpcrdma_noch_pullup, "pullup" }, \ 581614f3c96SChuck Lever { rpcrdma_noch_mapped, "mapped" }, \ 582ab03eff5SChuck Lever { rpcrdma_readch, "read list" }, \ 583ab03eff5SChuck Lever { rpcrdma_areadch, "*read list" }, \ 584ab03eff5SChuck Lever { rpcrdma_writech, "write list" }, \ 585ab03eff5SChuck Lever { rpcrdma_replych, "reply chunk" }) 586ab03eff5SChuck Lever 587ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_marshal, 588ab03eff5SChuck Lever TP_PROTO( 5891310051cSChuck Lever const struct rpcrdma_req *req, 590ab03eff5SChuck Lever unsigned int rtype, 591ab03eff5SChuck Lever unsigned int wtype 592ab03eff5SChuck Lever ), 593ab03eff5SChuck Lever 5941310051cSChuck Lever TP_ARGS(req, rtype, wtype), 595ab03eff5SChuck Lever 596ab03eff5SChuck Lever TP_STRUCT__entry( 597ab03eff5SChuck Lever __field(unsigned int, task_id) 598ab03eff5SChuck Lever __field(unsigned int, client_id) 599ab03eff5SChuck Lever __field(u32, xid) 600ab03eff5SChuck Lever __field(unsigned int, hdrlen) 601ab03eff5SChuck Lever __field(unsigned int, headlen) 602ab03eff5SChuck Lever __field(unsigned int, pagelen) 603ab03eff5SChuck Lever __field(unsigned int, taillen) 604ab03eff5SChuck Lever __field(unsigned int, rtype) 605ab03eff5SChuck Lever __field(unsigned int, wtype) 606ab03eff5SChuck Lever ), 607ab03eff5SChuck Lever 608ab03eff5SChuck Lever TP_fast_assign( 6091310051cSChuck Lever const struct rpc_rqst *rqst = &req->rl_slot; 6101310051cSChuck Lever 611ab03eff5SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 612ab03eff5SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 613ab03eff5SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 6141310051cSChuck Lever __entry->hdrlen = req->rl_hdrbuf.len; 615ab03eff5SChuck Lever __entry->headlen = rqst->rq_snd_buf.head[0].iov_len; 616ab03eff5SChuck Lever __entry->pagelen = rqst->rq_snd_buf.page_len; 617ab03eff5SChuck Lever __entry->taillen = rqst->rq_snd_buf.tail[0].iov_len; 618ab03eff5SChuck Lever __entry->rtype = rtype; 619ab03eff5SChuck Lever __entry->wtype = wtype; 620ab03eff5SChuck Lever ), 621ab03eff5SChuck Lever 622ab03eff5SChuck Lever TP_printk("task:%u@%u xid=0x%08x: hdr=%u xdr=%u/%u/%u %s/%s", 623ab03eff5SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 624ab03eff5SChuck Lever __entry->hdrlen, 625ab03eff5SChuck Lever __entry->headlen, __entry->pagelen, __entry->taillen, 626ab03eff5SChuck Lever xprtrdma_show_chunktype(__entry->rtype), 627ab03eff5SChuck Lever xprtrdma_show_chunktype(__entry->wtype) 628ab03eff5SChuck Lever ) 629ab03eff5SChuck Lever ); 630ab03eff5SChuck Lever 63117e4c443SChuck Lever TRACE_EVENT(xprtrdma_marshal_failed, 63217e4c443SChuck Lever TP_PROTO(const struct rpc_rqst *rqst, 63317e4c443SChuck Lever int ret 63417e4c443SChuck Lever ), 63517e4c443SChuck Lever 63617e4c443SChuck Lever TP_ARGS(rqst, ret), 63717e4c443SChuck Lever 63817e4c443SChuck Lever TP_STRUCT__entry( 63917e4c443SChuck Lever __field(unsigned int, task_id) 64017e4c443SChuck Lever __field(unsigned int, client_id) 64117e4c443SChuck Lever __field(u32, xid) 64217e4c443SChuck Lever __field(int, ret) 64317e4c443SChuck Lever ), 64417e4c443SChuck Lever 64517e4c443SChuck Lever TP_fast_assign( 64617e4c443SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 64717e4c443SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 64817e4c443SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 64917e4c443SChuck Lever __entry->ret = ret; 65017e4c443SChuck Lever ), 65117e4c443SChuck Lever 65217e4c443SChuck Lever TP_printk("task:%u@%u xid=0x%08x: ret=%d", 65317e4c443SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 65417e4c443SChuck Lever __entry->ret 65517e4c443SChuck Lever ) 65617e4c443SChuck Lever ); 65717e4c443SChuck Lever 65805eb06d8SChuck Lever TRACE_EVENT(xprtrdma_prepsend_failed, 65905eb06d8SChuck Lever TP_PROTO(const struct rpc_rqst *rqst, 66005eb06d8SChuck Lever int ret 66105eb06d8SChuck Lever ), 66205eb06d8SChuck Lever 66305eb06d8SChuck Lever TP_ARGS(rqst, ret), 66405eb06d8SChuck Lever 66505eb06d8SChuck Lever TP_STRUCT__entry( 66605eb06d8SChuck Lever __field(unsigned int, task_id) 66705eb06d8SChuck Lever __field(unsigned int, client_id) 66805eb06d8SChuck Lever __field(u32, xid) 66905eb06d8SChuck Lever __field(int, ret) 67005eb06d8SChuck Lever ), 67105eb06d8SChuck Lever 67205eb06d8SChuck Lever TP_fast_assign( 67305eb06d8SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 67405eb06d8SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 67505eb06d8SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 67605eb06d8SChuck Lever __entry->ret = ret; 67705eb06d8SChuck Lever ), 67805eb06d8SChuck Lever 67905eb06d8SChuck Lever TP_printk("task:%u@%u xid=0x%08x: ret=%d", 68005eb06d8SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 68105eb06d8SChuck Lever __entry->ret 68205eb06d8SChuck Lever ) 68305eb06d8SChuck Lever ); 68405eb06d8SChuck Lever 685ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_post_send, 686ab03eff5SChuck Lever TP_PROTO( 687ab03eff5SChuck Lever const struct rpcrdma_req *req, 688ab03eff5SChuck Lever int status 689ab03eff5SChuck Lever ), 690ab03eff5SChuck Lever 691ab03eff5SChuck Lever TP_ARGS(req, status), 692ab03eff5SChuck Lever 693ab03eff5SChuck Lever TP_STRUCT__entry( 694ab03eff5SChuck Lever __field(const void *, req) 6950c77668dSChuck Lever __field(unsigned int, task_id) 6960c77668dSChuck Lever __field(unsigned int, client_id) 697ab03eff5SChuck Lever __field(int, num_sge) 698470443e0SChuck Lever __field(int, signaled) 699ab03eff5SChuck Lever __field(int, status) 700ab03eff5SChuck Lever ), 701ab03eff5SChuck Lever 702ab03eff5SChuck Lever TP_fast_assign( 7030c77668dSChuck Lever const struct rpc_rqst *rqst = &req->rl_slot; 7040c77668dSChuck Lever 7050c77668dSChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 70610694ac9SChuck Lever __entry->client_id = rqst->rq_task->tk_client ? 70710694ac9SChuck Lever rqst->rq_task->tk_client->cl_clid : -1; 708ab03eff5SChuck Lever __entry->req = req; 709dc15c3d5SChuck Lever __entry->num_sge = req->rl_wr.num_sge; 710dc15c3d5SChuck Lever __entry->signaled = req->rl_wr.send_flags & IB_SEND_SIGNALED; 711ab03eff5SChuck Lever __entry->status = status; 712ab03eff5SChuck Lever ), 713ab03eff5SChuck Lever 7140c77668dSChuck Lever TP_printk("task:%u@%u req=%p (%d SGE%s) %sstatus=%d", 7150c77668dSChuck Lever __entry->task_id, __entry->client_id, 716ab03eff5SChuck Lever __entry->req, __entry->num_sge, 7170c77668dSChuck Lever (__entry->num_sge == 1 ? "" : "s"), 7180c77668dSChuck Lever (__entry->signaled ? "signaled " : ""), 719ab03eff5SChuck Lever __entry->status 720ab03eff5SChuck Lever ) 721ab03eff5SChuck Lever ); 722ab03eff5SChuck Lever 723b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_post_recv, 724b4a7f91cSChuck Lever TP_PROTO( 7252dfdcd88SChuck Lever const struct rpcrdma_rep *rep 726b4a7f91cSChuck Lever ), 727b4a7f91cSChuck Lever 7282dfdcd88SChuck Lever TP_ARGS(rep), 729b4a7f91cSChuck Lever 730b4a7f91cSChuck Lever TP_STRUCT__entry( 7312dfdcd88SChuck Lever __field(const void *, rep) 732b4a7f91cSChuck Lever ), 733b4a7f91cSChuck Lever 734b4a7f91cSChuck Lever TP_fast_assign( 7352dfdcd88SChuck Lever __entry->rep = rep; 736b4a7f91cSChuck Lever ), 737b4a7f91cSChuck Lever 7382dfdcd88SChuck Lever TP_printk("rep=%p", 7392dfdcd88SChuck Lever __entry->rep 740b4a7f91cSChuck Lever ) 741b4a7f91cSChuck Lever ); 742b4a7f91cSChuck Lever 7437c8d9e7cSChuck Lever TRACE_EVENT(xprtrdma_post_recvs, 7447c8d9e7cSChuck Lever TP_PROTO( 7457c8d9e7cSChuck Lever const struct rpcrdma_xprt *r_xprt, 7467c8d9e7cSChuck Lever unsigned int count, 7477c8d9e7cSChuck Lever int status 7487c8d9e7cSChuck Lever ), 7497c8d9e7cSChuck Lever 7507c8d9e7cSChuck Lever TP_ARGS(r_xprt, count, status), 7517c8d9e7cSChuck Lever 7527c8d9e7cSChuck Lever TP_STRUCT__entry( 7537c8d9e7cSChuck Lever __field(const void *, r_xprt) 7547c8d9e7cSChuck Lever __field(unsigned int, count) 7557c8d9e7cSChuck Lever __field(int, status) 7567c8d9e7cSChuck Lever __field(int, posted) 7577c8d9e7cSChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 7587c8d9e7cSChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 7597c8d9e7cSChuck Lever ), 7607c8d9e7cSChuck Lever 7617c8d9e7cSChuck Lever TP_fast_assign( 7627c8d9e7cSChuck Lever __entry->r_xprt = r_xprt; 7637c8d9e7cSChuck Lever __entry->count = count; 7647c8d9e7cSChuck Lever __entry->status = status; 7656ceea368SChuck Lever __entry->posted = r_xprt->rx_ep.rep_receive_count; 7667c8d9e7cSChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 7677c8d9e7cSChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 7687c8d9e7cSChuck Lever ), 7697c8d9e7cSChuck Lever 7707c8d9e7cSChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: %u new recvs, %d active (rc %d)", 7717c8d9e7cSChuck Lever __get_str(addr), __get_str(port), __entry->r_xprt, 7727c8d9e7cSChuck Lever __entry->count, __entry->posted, __entry->status 773ab03eff5SChuck Lever ) 774ab03eff5SChuck Lever ); 775ab03eff5SChuck Lever 7764b93dab3SChuck Lever TRACE_EVENT(xprtrdma_post_linv, 7774b93dab3SChuck Lever TP_PROTO( 7784b93dab3SChuck Lever const struct rpcrdma_req *req, 7794b93dab3SChuck Lever int status 7804b93dab3SChuck Lever ), 7814b93dab3SChuck Lever 7824b93dab3SChuck Lever TP_ARGS(req, status), 7834b93dab3SChuck Lever 7844b93dab3SChuck Lever TP_STRUCT__entry( 7854b93dab3SChuck Lever __field(const void *, req) 7864b93dab3SChuck Lever __field(int, status) 7874b93dab3SChuck Lever __field(u32, xid) 7884b93dab3SChuck Lever ), 7894b93dab3SChuck Lever 7904b93dab3SChuck Lever TP_fast_assign( 7914b93dab3SChuck Lever __entry->req = req; 7924b93dab3SChuck Lever __entry->status = status; 7934b93dab3SChuck Lever __entry->xid = be32_to_cpu(req->rl_slot.rq_xid); 7944b93dab3SChuck Lever ), 7954b93dab3SChuck Lever 7964b93dab3SChuck Lever TP_printk("req=%p xid=0x%08x status=%d", 7974b93dab3SChuck Lever __entry->req, __entry->xid, __entry->status 7984b93dab3SChuck Lever ) 7994b93dab3SChuck Lever ); 8004b93dab3SChuck Lever 801ab03eff5SChuck Lever /** 802ab03eff5SChuck Lever ** Completion events 803ab03eff5SChuck Lever **/ 804ab03eff5SChuck Lever 805ab03eff5SChuck Lever TRACE_EVENT(xprtrdma_wc_send, 806ab03eff5SChuck Lever TP_PROTO( 807ab03eff5SChuck Lever const struct rpcrdma_sendctx *sc, 808ab03eff5SChuck Lever const struct ib_wc *wc 809ab03eff5SChuck Lever ), 810ab03eff5SChuck Lever 811ab03eff5SChuck Lever TP_ARGS(sc, wc), 812ab03eff5SChuck Lever 813ab03eff5SChuck Lever TP_STRUCT__entry( 814ab03eff5SChuck Lever __field(const void *, req) 815ab03eff5SChuck Lever __field(unsigned int, unmap_count) 816ab03eff5SChuck Lever __field(unsigned int, status) 817ab03eff5SChuck Lever __field(unsigned int, vendor_err) 818ab03eff5SChuck Lever ), 819ab03eff5SChuck Lever 820ab03eff5SChuck Lever TP_fast_assign( 821ab03eff5SChuck Lever __entry->req = sc->sc_req; 822ab03eff5SChuck Lever __entry->unmap_count = sc->sc_unmap_count; 823ab03eff5SChuck Lever __entry->status = wc->status; 824ab03eff5SChuck Lever __entry->vendor_err = __entry->status ? wc->vendor_err : 0; 825ab03eff5SChuck Lever ), 826ab03eff5SChuck Lever 827ab03eff5SChuck Lever TP_printk("req=%p, unmapped %u pages: %s (%u/0x%x)", 828ab03eff5SChuck Lever __entry->req, __entry->unmap_count, 829ab03eff5SChuck Lever rdma_show_wc_status(__entry->status), 830ab03eff5SChuck Lever __entry->status, __entry->vendor_err 831ab03eff5SChuck Lever ) 832ab03eff5SChuck Lever ); 833ab03eff5SChuck Lever 834b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_wc_receive, 835b4a7f91cSChuck Lever TP_PROTO( 836b4a7f91cSChuck Lever const struct ib_wc *wc 837b4a7f91cSChuck Lever ), 838b4a7f91cSChuck Lever 8390e0b854cSChuck Lever TP_ARGS(wc), 840b4a7f91cSChuck Lever 841b4a7f91cSChuck Lever TP_STRUCT__entry( 8422dfdcd88SChuck Lever __field(const void *, rep) 8430e0b854cSChuck Lever __field(u32, byte_len) 844b4a7f91cSChuck Lever __field(unsigned int, status) 8450e0b854cSChuck Lever __field(u32, vendor_err) 846b4a7f91cSChuck Lever ), 847b4a7f91cSChuck Lever 848b4a7f91cSChuck Lever TP_fast_assign( 8492dfdcd88SChuck Lever __entry->rep = container_of(wc->wr_cqe, struct rpcrdma_rep, 8502dfdcd88SChuck Lever rr_cqe); 851b4a7f91cSChuck Lever __entry->status = wc->status; 8520e0b854cSChuck Lever if (wc->status) { 8530e0b854cSChuck Lever __entry->byte_len = 0; 8540e0b854cSChuck Lever __entry->vendor_err = wc->vendor_err; 8550e0b854cSChuck Lever } else { 8560e0b854cSChuck Lever __entry->byte_len = wc->byte_len; 8570e0b854cSChuck Lever __entry->vendor_err = 0; 8580e0b854cSChuck Lever } 859b4a7f91cSChuck Lever ), 860b4a7f91cSChuck Lever 8612dfdcd88SChuck Lever TP_printk("rep=%p %u bytes: %s (%u/0x%x)", 8622dfdcd88SChuck Lever __entry->rep, __entry->byte_len, 863b4a7f91cSChuck Lever rdma_show_wc_status(__entry->status), 864b4a7f91cSChuck Lever __entry->status, __entry->vendor_err 865b4a7f91cSChuck Lever ) 866b4a7f91cSChuck Lever ); 867b4a7f91cSChuck Lever 86858f10ad4SChuck Lever DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_fastreg); 8692937fedeSChuck Lever DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_li); 8702937fedeSChuck Lever DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_li_wake); 871d8099fedSChuck Lever DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_li_done); 8722937fedeSChuck Lever 87353b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_alloc, 87453b2c1cbSChuck Lever TP_PROTO( 87553b2c1cbSChuck Lever const struct rpcrdma_mr *mr, 87653b2c1cbSChuck Lever int rc 87753b2c1cbSChuck Lever ), 87853b2c1cbSChuck Lever 87953b2c1cbSChuck Lever TP_ARGS(mr, rc), 88053b2c1cbSChuck Lever 88153b2c1cbSChuck Lever TP_STRUCT__entry( 88253b2c1cbSChuck Lever __field(const void *, mr) 88353b2c1cbSChuck Lever __field(int, rc) 88453b2c1cbSChuck Lever ), 88553b2c1cbSChuck Lever 88653b2c1cbSChuck Lever TP_fast_assign( 88753b2c1cbSChuck Lever __entry->mr = mr; 88853b2c1cbSChuck Lever __entry->rc = rc; 88953b2c1cbSChuck Lever ), 89053b2c1cbSChuck Lever 89153b2c1cbSChuck Lever TP_printk("mr=%p: rc=%d", 89253b2c1cbSChuck Lever __entry->mr, __entry->rc 89353b2c1cbSChuck Lever ) 89453b2c1cbSChuck Lever ); 89553b2c1cbSChuck Lever 89653b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_dereg, 89753b2c1cbSChuck Lever TP_PROTO( 89853b2c1cbSChuck Lever const struct rpcrdma_mr *mr, 89953b2c1cbSChuck Lever int rc 90053b2c1cbSChuck Lever ), 90153b2c1cbSChuck Lever 90253b2c1cbSChuck Lever TP_ARGS(mr, rc), 90353b2c1cbSChuck Lever 90453b2c1cbSChuck Lever TP_STRUCT__entry( 90553b2c1cbSChuck Lever __field(const void *, mr) 90653b2c1cbSChuck Lever __field(u32, handle) 90753b2c1cbSChuck Lever __field(u32, length) 90853b2c1cbSChuck Lever __field(u64, offset) 90953b2c1cbSChuck Lever __field(u32, dir) 91053b2c1cbSChuck Lever __field(int, rc) 91153b2c1cbSChuck Lever ), 91253b2c1cbSChuck Lever 91353b2c1cbSChuck Lever TP_fast_assign( 91453b2c1cbSChuck Lever __entry->mr = mr; 91553b2c1cbSChuck Lever __entry->handle = mr->mr_handle; 91653b2c1cbSChuck Lever __entry->length = mr->mr_length; 91753b2c1cbSChuck Lever __entry->offset = mr->mr_offset; 91853b2c1cbSChuck Lever __entry->dir = mr->mr_dir; 91953b2c1cbSChuck Lever __entry->rc = rc; 92053b2c1cbSChuck Lever ), 92153b2c1cbSChuck Lever 92253b2c1cbSChuck Lever TP_printk("mr=%p %u@0x%016llx:0x%08x (%s): rc=%d", 92353b2c1cbSChuck Lever __entry->mr, __entry->length, 92453b2c1cbSChuck Lever (unsigned long long)__entry->offset, __entry->handle, 92553b2c1cbSChuck Lever xprtrdma_show_direction(__entry->dir), 92653b2c1cbSChuck Lever __entry->rc 92753b2c1cbSChuck Lever ) 92853b2c1cbSChuck Lever ); 92953b2c1cbSChuck Lever 93053b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_sgerr, 93153b2c1cbSChuck Lever TP_PROTO( 93253b2c1cbSChuck Lever const struct rpcrdma_mr *mr, 93353b2c1cbSChuck Lever int sg_nents 93453b2c1cbSChuck Lever ), 93553b2c1cbSChuck Lever 93653b2c1cbSChuck Lever TP_ARGS(mr, sg_nents), 93753b2c1cbSChuck Lever 93853b2c1cbSChuck Lever TP_STRUCT__entry( 93953b2c1cbSChuck Lever __field(const void *, mr) 94053b2c1cbSChuck Lever __field(u64, addr) 94153b2c1cbSChuck Lever __field(u32, dir) 94253b2c1cbSChuck Lever __field(int, nents) 94353b2c1cbSChuck Lever ), 94453b2c1cbSChuck Lever 94553b2c1cbSChuck Lever TP_fast_assign( 94653b2c1cbSChuck Lever __entry->mr = mr; 94753b2c1cbSChuck Lever __entry->addr = mr->mr_sg->dma_address; 94853b2c1cbSChuck Lever __entry->dir = mr->mr_dir; 94953b2c1cbSChuck Lever __entry->nents = sg_nents; 95053b2c1cbSChuck Lever ), 95153b2c1cbSChuck Lever 95253b2c1cbSChuck Lever TP_printk("mr=%p dma addr=0x%llx (%s) sg_nents=%d", 95353b2c1cbSChuck Lever __entry->mr, __entry->addr, 95453b2c1cbSChuck Lever xprtrdma_show_direction(__entry->dir), 95553b2c1cbSChuck Lever __entry->nents 95653b2c1cbSChuck Lever ) 95753b2c1cbSChuck Lever ); 95853b2c1cbSChuck Lever 95953b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_frwr_maperr, 96053b2c1cbSChuck Lever TP_PROTO( 96153b2c1cbSChuck Lever const struct rpcrdma_mr *mr, 96253b2c1cbSChuck Lever int num_mapped 96353b2c1cbSChuck Lever ), 96453b2c1cbSChuck Lever 96553b2c1cbSChuck Lever TP_ARGS(mr, num_mapped), 96653b2c1cbSChuck Lever 96753b2c1cbSChuck Lever TP_STRUCT__entry( 96853b2c1cbSChuck Lever __field(const void *, mr) 96953b2c1cbSChuck Lever __field(u64, addr) 97053b2c1cbSChuck Lever __field(u32, dir) 97153b2c1cbSChuck Lever __field(int, num_mapped) 97253b2c1cbSChuck Lever __field(int, nents) 97353b2c1cbSChuck Lever ), 97453b2c1cbSChuck Lever 97553b2c1cbSChuck Lever TP_fast_assign( 97653b2c1cbSChuck Lever __entry->mr = mr; 97753b2c1cbSChuck Lever __entry->addr = mr->mr_sg->dma_address; 97853b2c1cbSChuck Lever __entry->dir = mr->mr_dir; 97953b2c1cbSChuck Lever __entry->num_mapped = num_mapped; 98053b2c1cbSChuck Lever __entry->nents = mr->mr_nents; 98153b2c1cbSChuck Lever ), 98253b2c1cbSChuck Lever 98353b2c1cbSChuck Lever TP_printk("mr=%p dma addr=0x%llx (%s) nents=%d of %d", 98453b2c1cbSChuck Lever __entry->mr, __entry->addr, 98553b2c1cbSChuck Lever xprtrdma_show_direction(__entry->dir), 98653b2c1cbSChuck Lever __entry->num_mapped, __entry->nents 98753b2c1cbSChuck Lever ) 98853b2c1cbSChuck Lever ); 98953b2c1cbSChuck Lever 990d379eaa8SChuck Lever DEFINE_MR_EVENT(localinv); 991d379eaa8SChuck Lever DEFINE_MR_EVENT(map); 992d379eaa8SChuck Lever DEFINE_MR_EVENT(unmap); 993d379eaa8SChuck Lever DEFINE_MR_EVENT(remoteinv); 994d379eaa8SChuck Lever DEFINE_MR_EVENT(recycle); 99558f10ad4SChuck Lever 99653b2c1cbSChuck Lever TRACE_EVENT(xprtrdma_dma_maperr, 99753b2c1cbSChuck Lever TP_PROTO( 99853b2c1cbSChuck Lever u64 addr 99953b2c1cbSChuck Lever ), 100053b2c1cbSChuck Lever 100153b2c1cbSChuck Lever TP_ARGS(addr), 100253b2c1cbSChuck Lever 100353b2c1cbSChuck Lever TP_STRUCT__entry( 100453b2c1cbSChuck Lever __field(u64, addr) 100553b2c1cbSChuck Lever ), 100653b2c1cbSChuck Lever 100753b2c1cbSChuck Lever TP_fast_assign( 100853b2c1cbSChuck Lever __entry->addr = addr; 100953b2c1cbSChuck Lever ), 101053b2c1cbSChuck Lever 101153b2c1cbSChuck Lever TP_printk("dma addr=0x%llx\n", __entry->addr) 101253b2c1cbSChuck Lever ); 101353b2c1cbSChuck Lever 1014b4a7f91cSChuck Lever /** 1015b4a7f91cSChuck Lever ** Reply events 1016b4a7f91cSChuck Lever **/ 1017b4a7f91cSChuck Lever 1018b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_reply, 1019b4a7f91cSChuck Lever TP_PROTO( 1020b4a7f91cSChuck Lever const struct rpc_task *task, 1021b4a7f91cSChuck Lever const struct rpcrdma_rep *rep, 1022b4a7f91cSChuck Lever const struct rpcrdma_req *req, 1023b4a7f91cSChuck Lever unsigned int credits 1024b4a7f91cSChuck Lever ), 1025b4a7f91cSChuck Lever 1026b4a7f91cSChuck Lever TP_ARGS(task, rep, req, credits), 1027b4a7f91cSChuck Lever 1028b4a7f91cSChuck Lever TP_STRUCT__entry( 1029b4a7f91cSChuck Lever __field(unsigned int, task_id) 1030b4a7f91cSChuck Lever __field(unsigned int, client_id) 1031b4a7f91cSChuck Lever __field(const void *, rep) 1032b4a7f91cSChuck Lever __field(const void *, req) 1033b4a7f91cSChuck Lever __field(u32, xid) 1034b4a7f91cSChuck Lever __field(unsigned int, credits) 1035b4a7f91cSChuck Lever ), 1036b4a7f91cSChuck Lever 1037b4a7f91cSChuck Lever TP_fast_assign( 1038b4a7f91cSChuck Lever __entry->task_id = task->tk_pid; 1039b4a7f91cSChuck Lever __entry->client_id = task->tk_client->cl_clid; 1040b4a7f91cSChuck Lever __entry->rep = rep; 1041b4a7f91cSChuck Lever __entry->req = req; 1042b4a7f91cSChuck Lever __entry->xid = be32_to_cpu(rep->rr_xid); 1043b4a7f91cSChuck Lever __entry->credits = credits; 1044b4a7f91cSChuck Lever ), 1045b4a7f91cSChuck Lever 1046b4a7f91cSChuck Lever TP_printk("task:%u@%u xid=0x%08x, %u credits, rep=%p -> req=%p", 1047b4a7f91cSChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 1048b4a7f91cSChuck Lever __entry->credits, __entry->rep, __entry->req 1049b4a7f91cSChuck Lever ) 1050b4a7f91cSChuck Lever ); 1051b4a7f91cSChuck Lever 1052b4a7f91cSChuck Lever TRACE_EVENT(xprtrdma_defer_cmp, 1053b4a7f91cSChuck Lever TP_PROTO( 1054b4a7f91cSChuck Lever const struct rpcrdma_rep *rep 1055b4a7f91cSChuck Lever ), 1056b4a7f91cSChuck Lever 1057b4a7f91cSChuck Lever TP_ARGS(rep), 1058b4a7f91cSChuck Lever 1059b4a7f91cSChuck Lever TP_STRUCT__entry( 1060b4a7f91cSChuck Lever __field(unsigned int, task_id) 1061b4a7f91cSChuck Lever __field(unsigned int, client_id) 1062b4a7f91cSChuck Lever __field(const void *, rep) 1063b4a7f91cSChuck Lever __field(u32, xid) 1064b4a7f91cSChuck Lever ), 1065b4a7f91cSChuck Lever 1066b4a7f91cSChuck Lever TP_fast_assign( 1067b4a7f91cSChuck Lever __entry->task_id = rep->rr_rqst->rq_task->tk_pid; 1068b4a7f91cSChuck Lever __entry->client_id = rep->rr_rqst->rq_task->tk_client->cl_clid; 1069b4a7f91cSChuck Lever __entry->rep = rep; 1070b4a7f91cSChuck Lever __entry->xid = be32_to_cpu(rep->rr_xid); 1071b4a7f91cSChuck Lever ), 1072b4a7f91cSChuck Lever 1073b4a7f91cSChuck Lever TP_printk("task:%u@%u xid=0x%08x rep=%p", 1074b4a7f91cSChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 1075b4a7f91cSChuck Lever __entry->rep 1076b4a7f91cSChuck Lever ) 1077b4a7f91cSChuck Lever ); 1078b4a7f91cSChuck Lever 1079b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_vers); 1080b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_rqst); 1081b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_short); 1082b4a7f91cSChuck Lever DEFINE_REPLY_EVENT(xprtrdma_reply_hdr); 1083b4a7f91cSChuck Lever 1084e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_fixup, 1085e11b7c96SChuck Lever TP_PROTO( 1086e11b7c96SChuck Lever const struct rpc_rqst *rqst, 1087e11b7c96SChuck Lever int len, 1088e11b7c96SChuck Lever int hdrlen 1089e11b7c96SChuck Lever ), 1090e11b7c96SChuck Lever 1091e11b7c96SChuck Lever TP_ARGS(rqst, len, hdrlen), 1092e11b7c96SChuck Lever 1093e11b7c96SChuck Lever TP_STRUCT__entry( 1094e11b7c96SChuck Lever __field(unsigned int, task_id) 1095e11b7c96SChuck Lever __field(unsigned int, client_id) 1096e11b7c96SChuck Lever __field(const void *, base) 1097e11b7c96SChuck Lever __field(int, len) 1098e11b7c96SChuck Lever __field(int, hdrlen) 1099e11b7c96SChuck Lever ), 1100e11b7c96SChuck Lever 1101e11b7c96SChuck Lever TP_fast_assign( 1102e11b7c96SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 1103e11b7c96SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 1104e11b7c96SChuck Lever __entry->base = rqst->rq_rcv_buf.head[0].iov_base; 1105e11b7c96SChuck Lever __entry->len = len; 1106e11b7c96SChuck Lever __entry->hdrlen = hdrlen; 1107e11b7c96SChuck Lever ), 1108e11b7c96SChuck Lever 1109e11b7c96SChuck Lever TP_printk("task:%u@%u base=%p len=%d hdrlen=%d", 1110e11b7c96SChuck Lever __entry->task_id, __entry->client_id, 1111e11b7c96SChuck Lever __entry->base, __entry->len, __entry->hdrlen 1112e11b7c96SChuck Lever ) 1113e11b7c96SChuck Lever ); 1114e11b7c96SChuck Lever 1115e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_fixup_pg, 1116e11b7c96SChuck Lever TP_PROTO( 1117e11b7c96SChuck Lever const struct rpc_rqst *rqst, 1118e11b7c96SChuck Lever int pageno, 1119e11b7c96SChuck Lever const void *pos, 1120e11b7c96SChuck Lever int len, 1121e11b7c96SChuck Lever int curlen 1122e11b7c96SChuck Lever ), 1123e11b7c96SChuck Lever 1124e11b7c96SChuck Lever TP_ARGS(rqst, pageno, pos, len, curlen), 1125e11b7c96SChuck Lever 1126e11b7c96SChuck Lever TP_STRUCT__entry( 1127e11b7c96SChuck Lever __field(unsigned int, task_id) 1128e11b7c96SChuck Lever __field(unsigned int, client_id) 1129e11b7c96SChuck Lever __field(const void *, pos) 1130e11b7c96SChuck Lever __field(int, pageno) 1131e11b7c96SChuck Lever __field(int, len) 1132e11b7c96SChuck Lever __field(int, curlen) 1133e11b7c96SChuck Lever ), 1134e11b7c96SChuck Lever 1135e11b7c96SChuck Lever TP_fast_assign( 1136e11b7c96SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 1137e11b7c96SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 1138e11b7c96SChuck Lever __entry->pos = pos; 1139e11b7c96SChuck Lever __entry->pageno = pageno; 1140e11b7c96SChuck Lever __entry->len = len; 1141e11b7c96SChuck Lever __entry->curlen = curlen; 1142e11b7c96SChuck Lever ), 1143e11b7c96SChuck Lever 1144e11b7c96SChuck Lever TP_printk("task:%u@%u pageno=%d pos=%p len=%d curlen=%d", 1145e11b7c96SChuck Lever __entry->task_id, __entry->client_id, 1146e11b7c96SChuck Lever __entry->pageno, __entry->pos, __entry->len, __entry->curlen 1147e11b7c96SChuck Lever ) 1148e11b7c96SChuck Lever ); 1149e11b7c96SChuck Lever 1150e11b7c96SChuck Lever TRACE_EVENT(xprtrdma_decode_seg, 1151e11b7c96SChuck Lever TP_PROTO( 1152e11b7c96SChuck Lever u32 handle, 1153e11b7c96SChuck Lever u32 length, 1154e11b7c96SChuck Lever u64 offset 1155e11b7c96SChuck Lever ), 1156e11b7c96SChuck Lever 1157e11b7c96SChuck Lever TP_ARGS(handle, length, offset), 1158e11b7c96SChuck Lever 1159e11b7c96SChuck Lever TP_STRUCT__entry( 1160e11b7c96SChuck Lever __field(u32, handle) 1161e11b7c96SChuck Lever __field(u32, length) 1162e11b7c96SChuck Lever __field(u64, offset) 1163e11b7c96SChuck Lever ), 1164e11b7c96SChuck Lever 1165e11b7c96SChuck Lever TP_fast_assign( 1166e11b7c96SChuck Lever __entry->handle = handle; 1167e11b7c96SChuck Lever __entry->length = length; 1168e11b7c96SChuck Lever __entry->offset = offset; 1169e11b7c96SChuck Lever ), 1170e11b7c96SChuck Lever 1171e11b7c96SChuck Lever TP_printk("%u@0x%016llx:0x%08x", 1172e11b7c96SChuck Lever __entry->length, (unsigned long long)__entry->offset, 1173e11b7c96SChuck Lever __entry->handle 1174e11b7c96SChuck Lever ) 1175e11b7c96SChuck Lever ); 1176e11b7c96SChuck Lever 1177fc1eb807SChuck Lever /** 1178ae724676SChuck Lever ** Allocation/release of rpcrdma_reqs and rpcrdma_reps 1179ae724676SChuck Lever **/ 1180ae724676SChuck Lever 1181395069fcSChuck Lever TRACE_EVENT(xprtrdma_op_allocate, 1182ae724676SChuck Lever TP_PROTO( 1183ae724676SChuck Lever const struct rpc_task *task, 1184ae724676SChuck Lever const struct rpcrdma_req *req 1185ae724676SChuck Lever ), 1186ae724676SChuck Lever 1187ae724676SChuck Lever TP_ARGS(task, req), 1188ae724676SChuck Lever 1189ae724676SChuck Lever TP_STRUCT__entry( 1190ae724676SChuck Lever __field(unsigned int, task_id) 1191ae724676SChuck Lever __field(unsigned int, client_id) 1192ae724676SChuck Lever __field(const void *, req) 1193ae724676SChuck Lever __field(size_t, callsize) 1194ae724676SChuck Lever __field(size_t, rcvsize) 1195ae724676SChuck Lever ), 1196ae724676SChuck Lever 1197ae724676SChuck Lever TP_fast_assign( 1198ae724676SChuck Lever __entry->task_id = task->tk_pid; 1199ae724676SChuck Lever __entry->client_id = task->tk_client->cl_clid; 1200ae724676SChuck Lever __entry->req = req; 1201ae724676SChuck Lever __entry->callsize = task->tk_rqstp->rq_callsize; 1202ae724676SChuck Lever __entry->rcvsize = task->tk_rqstp->rq_rcvsize; 1203ae724676SChuck Lever ), 1204ae724676SChuck Lever 12057c8d9e7cSChuck Lever TP_printk("task:%u@%u req=%p (%zu, %zu)", 1206ae724676SChuck Lever __entry->task_id, __entry->client_id, 12077c8d9e7cSChuck Lever __entry->req, __entry->callsize, __entry->rcvsize 1208ae724676SChuck Lever ) 1209ae724676SChuck Lever ); 1210ae724676SChuck Lever 1211395069fcSChuck Lever TRACE_EVENT(xprtrdma_op_free, 1212ae724676SChuck Lever TP_PROTO( 1213ae724676SChuck Lever const struct rpc_task *task, 1214ae724676SChuck Lever const struct rpcrdma_req *req 1215ae724676SChuck Lever ), 1216ae724676SChuck Lever 1217ae724676SChuck Lever TP_ARGS(task, req), 1218ae724676SChuck Lever 1219ae724676SChuck Lever TP_STRUCT__entry( 1220ae724676SChuck Lever __field(unsigned int, task_id) 1221ae724676SChuck Lever __field(unsigned int, client_id) 1222ae724676SChuck Lever __field(const void *, req) 1223ae724676SChuck Lever __field(const void *, rep) 1224ae724676SChuck Lever ), 1225ae724676SChuck Lever 1226ae724676SChuck Lever TP_fast_assign( 1227ae724676SChuck Lever __entry->task_id = task->tk_pid; 1228ae724676SChuck Lever __entry->client_id = task->tk_client->cl_clid; 1229ae724676SChuck Lever __entry->req = req; 1230ae724676SChuck Lever __entry->rep = req->rl_reply; 1231ae724676SChuck Lever ), 1232ae724676SChuck Lever 1233ae724676SChuck Lever TP_printk("task:%u@%u req=%p rep=%p", 1234ae724676SChuck Lever __entry->task_id, __entry->client_id, 1235ae724676SChuck Lever __entry->req, __entry->rep 1236ae724676SChuck Lever ) 1237ae724676SChuck Lever ); 1238ae724676SChuck Lever 1239ae724676SChuck Lever /** 1240fc1eb807SChuck Lever ** Callback events 1241fc1eb807SChuck Lever **/ 1242fc1eb807SChuck Lever 1243fc1eb807SChuck Lever TRACE_EVENT(xprtrdma_cb_setup, 1244fc1eb807SChuck Lever TP_PROTO( 1245fc1eb807SChuck Lever const struct rpcrdma_xprt *r_xprt, 1246fc1eb807SChuck Lever unsigned int reqs 1247fc1eb807SChuck Lever ), 1248fc1eb807SChuck Lever 1249fc1eb807SChuck Lever TP_ARGS(r_xprt, reqs), 1250fc1eb807SChuck Lever 1251fc1eb807SChuck Lever TP_STRUCT__entry( 1252fc1eb807SChuck Lever __field(const void *, r_xprt) 1253fc1eb807SChuck Lever __field(unsigned int, reqs) 1254fc1eb807SChuck Lever __string(addr, rpcrdma_addrstr(r_xprt)) 1255fc1eb807SChuck Lever __string(port, rpcrdma_portstr(r_xprt)) 1256fc1eb807SChuck Lever ), 1257fc1eb807SChuck Lever 1258fc1eb807SChuck Lever TP_fast_assign( 1259fc1eb807SChuck Lever __entry->r_xprt = r_xprt; 1260fc1eb807SChuck Lever __entry->reqs = reqs; 1261fc1eb807SChuck Lever __assign_str(addr, rpcrdma_addrstr(r_xprt)); 1262fc1eb807SChuck Lever __assign_str(port, rpcrdma_portstr(r_xprt)); 1263fc1eb807SChuck Lever ), 1264fc1eb807SChuck Lever 1265fc1eb807SChuck Lever TP_printk("peer=[%s]:%s r_xprt=%p: %u reqs", 1266fc1eb807SChuck Lever __get_str(addr), __get_str(port), 1267fc1eb807SChuck Lever __entry->r_xprt, __entry->reqs 1268fc1eb807SChuck Lever ) 1269fc1eb807SChuck Lever ); 1270fc1eb807SChuck Lever 1271fc1eb807SChuck Lever DEFINE_CB_EVENT(xprtrdma_cb_call); 1272fc1eb807SChuck Lever DEFINE_CB_EVENT(xprtrdma_cb_reply); 1273fc1eb807SChuck Lever 127407e10308SChuck Lever TRACE_EVENT(xprtrdma_leaked_rep, 127507e10308SChuck Lever TP_PROTO( 127607e10308SChuck Lever const struct rpc_rqst *rqst, 127707e10308SChuck Lever const struct rpcrdma_rep *rep 127807e10308SChuck Lever ), 127907e10308SChuck Lever 128007e10308SChuck Lever TP_ARGS(rqst, rep), 128107e10308SChuck Lever 128207e10308SChuck Lever TP_STRUCT__entry( 128307e10308SChuck Lever __field(unsigned int, task_id) 128407e10308SChuck Lever __field(unsigned int, client_id) 128507e10308SChuck Lever __field(u32, xid) 128607e10308SChuck Lever __field(const void *, rep) 128707e10308SChuck Lever ), 128807e10308SChuck Lever 128907e10308SChuck Lever TP_fast_assign( 129007e10308SChuck Lever __entry->task_id = rqst->rq_task->tk_pid; 129107e10308SChuck Lever __entry->client_id = rqst->rq_task->tk_client->cl_clid; 129207e10308SChuck Lever __entry->xid = be32_to_cpu(rqst->rq_xid); 129307e10308SChuck Lever __entry->rep = rep; 129407e10308SChuck Lever ), 129507e10308SChuck Lever 129607e10308SChuck Lever TP_printk("task:%u@%u xid=0x%08x rep=%p", 129707e10308SChuck Lever __entry->task_id, __entry->client_id, __entry->xid, 129807e10308SChuck Lever __entry->rep 129907e10308SChuck Lever ) 130007e10308SChuck Lever ); 130107e10308SChuck Lever 130298895edbSChuck Lever /** 130398895edbSChuck Lever ** Server-side RPC/RDMA events 130498895edbSChuck Lever **/ 130598895edbSChuck Lever 130698895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_xprt_event, 130798895edbSChuck Lever TP_PROTO( 130898895edbSChuck Lever const struct svc_xprt *xprt 130998895edbSChuck Lever ), 131098895edbSChuck Lever 131198895edbSChuck Lever TP_ARGS(xprt), 131298895edbSChuck Lever 131398895edbSChuck Lever TP_STRUCT__entry( 131498895edbSChuck Lever __field(const void *, xprt) 131598895edbSChuck Lever __string(addr, xprt->xpt_remotebuf) 131698895edbSChuck Lever ), 131798895edbSChuck Lever 131898895edbSChuck Lever TP_fast_assign( 131998895edbSChuck Lever __entry->xprt = xprt; 132098895edbSChuck Lever __assign_str(addr, xprt->xpt_remotebuf); 132198895edbSChuck Lever ), 132298895edbSChuck Lever 132398895edbSChuck Lever TP_printk("xprt=%p addr=%s", 132498895edbSChuck Lever __entry->xprt, __get_str(addr) 132598895edbSChuck Lever ) 132698895edbSChuck Lever ); 132798895edbSChuck Lever 132898895edbSChuck Lever #define DEFINE_XPRT_EVENT(name) \ 132998895edbSChuck Lever DEFINE_EVENT(svcrdma_xprt_event, svcrdma_xprt_##name, \ 133098895edbSChuck Lever TP_PROTO( \ 133198895edbSChuck Lever const struct svc_xprt *xprt \ 133298895edbSChuck Lever ), \ 133398895edbSChuck Lever TP_ARGS(xprt)) 133498895edbSChuck Lever 133598895edbSChuck Lever DEFINE_XPRT_EVENT(accept); 133698895edbSChuck Lever DEFINE_XPRT_EVENT(fail); 133798895edbSChuck Lever DEFINE_XPRT_EVENT(free); 133898895edbSChuck Lever 133998895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_MSG); 134098895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_NOMSG); 134198895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_MSGP); 134298895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_DONE); 134398895edbSChuck Lever TRACE_DEFINE_ENUM(RDMA_ERROR); 134498895edbSChuck Lever 134598895edbSChuck Lever #define show_rpcrdma_proc(x) \ 134698895edbSChuck Lever __print_symbolic(x, \ 134798895edbSChuck Lever { RDMA_MSG, "RDMA_MSG" }, \ 134898895edbSChuck Lever { RDMA_NOMSG, "RDMA_NOMSG" }, \ 134998895edbSChuck Lever { RDMA_MSGP, "RDMA_MSGP" }, \ 135098895edbSChuck Lever { RDMA_DONE, "RDMA_DONE" }, \ 135198895edbSChuck Lever { RDMA_ERROR, "RDMA_ERROR" }) 135298895edbSChuck Lever 135398895edbSChuck Lever TRACE_EVENT(svcrdma_decode_rqst, 135498895edbSChuck Lever TP_PROTO( 135598895edbSChuck Lever __be32 *p, 135698895edbSChuck Lever unsigned int hdrlen 135798895edbSChuck Lever ), 135898895edbSChuck Lever 135998895edbSChuck Lever TP_ARGS(p, hdrlen), 136098895edbSChuck Lever 136198895edbSChuck Lever TP_STRUCT__entry( 136298895edbSChuck Lever __field(u32, xid) 136398895edbSChuck Lever __field(u32, vers) 136498895edbSChuck Lever __field(u32, proc) 136598895edbSChuck Lever __field(u32, credits) 136698895edbSChuck Lever __field(unsigned int, hdrlen) 136798895edbSChuck Lever ), 136898895edbSChuck Lever 136998895edbSChuck Lever TP_fast_assign( 137098895edbSChuck Lever __entry->xid = be32_to_cpup(p++); 137198895edbSChuck Lever __entry->vers = be32_to_cpup(p++); 137298895edbSChuck Lever __entry->credits = be32_to_cpup(p++); 137398895edbSChuck Lever __entry->proc = be32_to_cpup(p); 137498895edbSChuck Lever __entry->hdrlen = hdrlen; 137598895edbSChuck Lever ), 137698895edbSChuck Lever 137798895edbSChuck Lever TP_printk("xid=0x%08x vers=%u credits=%u proc=%s hdrlen=%u", 137898895edbSChuck Lever __entry->xid, __entry->vers, __entry->credits, 137998895edbSChuck Lever show_rpcrdma_proc(__entry->proc), __entry->hdrlen) 138098895edbSChuck Lever ); 138198895edbSChuck Lever 138298895edbSChuck Lever TRACE_EVENT(svcrdma_decode_short, 138398895edbSChuck Lever TP_PROTO( 138498895edbSChuck Lever unsigned int hdrlen 138598895edbSChuck Lever ), 138698895edbSChuck Lever 138798895edbSChuck Lever TP_ARGS(hdrlen), 138898895edbSChuck Lever 138998895edbSChuck Lever TP_STRUCT__entry( 139098895edbSChuck Lever __field(unsigned int, hdrlen) 139198895edbSChuck Lever ), 139298895edbSChuck Lever 139398895edbSChuck Lever TP_fast_assign( 139498895edbSChuck Lever __entry->hdrlen = hdrlen; 139598895edbSChuck Lever ), 139698895edbSChuck Lever 139798895edbSChuck Lever TP_printk("hdrlen=%u", __entry->hdrlen) 139898895edbSChuck Lever ); 139998895edbSChuck Lever 140098895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_badreq_event, 140198895edbSChuck Lever TP_PROTO( 140298895edbSChuck Lever __be32 *p 140398895edbSChuck Lever ), 140498895edbSChuck Lever 140598895edbSChuck Lever TP_ARGS(p), 140698895edbSChuck Lever 140798895edbSChuck Lever TP_STRUCT__entry( 140898895edbSChuck Lever __field(u32, xid) 140998895edbSChuck Lever __field(u32, vers) 141098895edbSChuck Lever __field(u32, proc) 141198895edbSChuck Lever __field(u32, credits) 141298895edbSChuck Lever ), 141398895edbSChuck Lever 141498895edbSChuck Lever TP_fast_assign( 141598895edbSChuck Lever __entry->xid = be32_to_cpup(p++); 141698895edbSChuck Lever __entry->vers = be32_to_cpup(p++); 141798895edbSChuck Lever __entry->credits = be32_to_cpup(p++); 141898895edbSChuck Lever __entry->proc = be32_to_cpup(p); 141998895edbSChuck Lever ), 142098895edbSChuck Lever 142198895edbSChuck Lever TP_printk("xid=0x%08x vers=%u credits=%u proc=%u", 142298895edbSChuck Lever __entry->xid, __entry->vers, __entry->credits, __entry->proc) 142398895edbSChuck Lever ); 142498895edbSChuck Lever 142598895edbSChuck Lever #define DEFINE_BADREQ_EVENT(name) \ 142698895edbSChuck Lever DEFINE_EVENT(svcrdma_badreq_event, svcrdma_decode_##name,\ 142798895edbSChuck Lever TP_PROTO( \ 142898895edbSChuck Lever __be32 *p \ 142998895edbSChuck Lever ), \ 143098895edbSChuck Lever TP_ARGS(p)) 143198895edbSChuck Lever 143298895edbSChuck Lever DEFINE_BADREQ_EVENT(badvers); 143398895edbSChuck Lever DEFINE_BADREQ_EVENT(drop); 143498895edbSChuck Lever DEFINE_BADREQ_EVENT(badproc); 143598895edbSChuck Lever DEFINE_BADREQ_EVENT(parse); 143698895edbSChuck Lever 143798895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_segment_event, 143898895edbSChuck Lever TP_PROTO( 143998895edbSChuck Lever u32 handle, 144098895edbSChuck Lever u32 length, 144198895edbSChuck Lever u64 offset 144298895edbSChuck Lever ), 144398895edbSChuck Lever 144498895edbSChuck Lever TP_ARGS(handle, length, offset), 144598895edbSChuck Lever 144698895edbSChuck Lever TP_STRUCT__entry( 144798895edbSChuck Lever __field(u32, handle) 144898895edbSChuck Lever __field(u32, length) 144998895edbSChuck Lever __field(u64, offset) 145098895edbSChuck Lever ), 145198895edbSChuck Lever 145298895edbSChuck Lever TP_fast_assign( 145398895edbSChuck Lever __entry->handle = handle; 145498895edbSChuck Lever __entry->length = length; 145598895edbSChuck Lever __entry->offset = offset; 145698895edbSChuck Lever ), 145798895edbSChuck Lever 145898895edbSChuck Lever TP_printk("%u@0x%016llx:0x%08x", 145998895edbSChuck Lever __entry->length, (unsigned long long)__entry->offset, 146098895edbSChuck Lever __entry->handle 146198895edbSChuck Lever ) 146298895edbSChuck Lever ); 146398895edbSChuck Lever 146498895edbSChuck Lever #define DEFINE_SEGMENT_EVENT(name) \ 146598895edbSChuck Lever DEFINE_EVENT(svcrdma_segment_event, svcrdma_encode_##name,\ 146698895edbSChuck Lever TP_PROTO( \ 146798895edbSChuck Lever u32 handle, \ 146898895edbSChuck Lever u32 length, \ 146998895edbSChuck Lever u64 offset \ 147098895edbSChuck Lever ), \ 147198895edbSChuck Lever TP_ARGS(handle, length, offset)) 147298895edbSChuck Lever 147398895edbSChuck Lever DEFINE_SEGMENT_EVENT(rseg); 147498895edbSChuck Lever DEFINE_SEGMENT_EVENT(wseg); 147598895edbSChuck Lever 147698895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_chunk_event, 147798895edbSChuck Lever TP_PROTO( 147898895edbSChuck Lever u32 length 147998895edbSChuck Lever ), 148098895edbSChuck Lever 148198895edbSChuck Lever TP_ARGS(length), 148298895edbSChuck Lever 148398895edbSChuck Lever TP_STRUCT__entry( 148498895edbSChuck Lever __field(u32, length) 148598895edbSChuck Lever ), 148698895edbSChuck Lever 148798895edbSChuck Lever TP_fast_assign( 148898895edbSChuck Lever __entry->length = length; 148998895edbSChuck Lever ), 149098895edbSChuck Lever 149198895edbSChuck Lever TP_printk("length=%u", 149298895edbSChuck Lever __entry->length 149398895edbSChuck Lever ) 149498895edbSChuck Lever ); 149598895edbSChuck Lever 149698895edbSChuck Lever #define DEFINE_CHUNK_EVENT(name) \ 149798895edbSChuck Lever DEFINE_EVENT(svcrdma_chunk_event, svcrdma_encode_##name,\ 149898895edbSChuck Lever TP_PROTO( \ 149998895edbSChuck Lever u32 length \ 150098895edbSChuck Lever ), \ 150198895edbSChuck Lever TP_ARGS(length)) 150298895edbSChuck Lever 150398895edbSChuck Lever DEFINE_CHUNK_EVENT(pzr); 150498895edbSChuck Lever DEFINE_CHUNK_EVENT(write); 150598895edbSChuck Lever DEFINE_CHUNK_EVENT(reply); 150698895edbSChuck Lever 150798895edbSChuck Lever TRACE_EVENT(svcrdma_encode_read, 150898895edbSChuck Lever TP_PROTO( 150998895edbSChuck Lever u32 length, 151098895edbSChuck Lever u32 position 151198895edbSChuck Lever ), 151298895edbSChuck Lever 151398895edbSChuck Lever TP_ARGS(length, position), 151498895edbSChuck Lever 151598895edbSChuck Lever TP_STRUCT__entry( 151698895edbSChuck Lever __field(u32, length) 151798895edbSChuck Lever __field(u32, position) 151898895edbSChuck Lever ), 151998895edbSChuck Lever 152098895edbSChuck Lever TP_fast_assign( 152198895edbSChuck Lever __entry->length = length; 152298895edbSChuck Lever __entry->position = position; 152398895edbSChuck Lever ), 152498895edbSChuck Lever 152598895edbSChuck Lever TP_printk("length=%u position=%u", 152698895edbSChuck Lever __entry->length, __entry->position 152798895edbSChuck Lever ) 152898895edbSChuck Lever ); 152998895edbSChuck Lever 153098895edbSChuck Lever DECLARE_EVENT_CLASS(svcrdma_error_event, 153198895edbSChuck Lever TP_PROTO( 153298895edbSChuck Lever __be32 xid 153398895edbSChuck Lever ), 153498895edbSChuck Lever 153598895edbSChuck Lever TP_ARGS(xid), 153698895edbSChuck Lever 153798895edbSChuck Lever TP_STRUCT__entry( 153898895edbSChuck Lever __field(u32, xid) 153998895edbSChuck Lever ), 154098895edbSChuck Lever 154198895edbSChuck Lever TP_fast_assign( 154298895edbSChuck Lever __entry->xid = be32_to_cpu(xid); 154398895edbSChuck Lever ), 154498895edbSChuck Lever 154598895edbSChuck Lever TP_printk("xid=0x%08x", 154698895edbSChuck Lever __entry->xid 154798895edbSChuck Lever ) 154898895edbSChuck Lever ); 154998895edbSChuck Lever 155098895edbSChuck Lever #define DEFINE_ERROR_EVENT(name) \ 155198895edbSChuck Lever DEFINE_EVENT(svcrdma_error_event, svcrdma_err_##name, \ 155298895edbSChuck Lever TP_PROTO( \ 155398895edbSChuck Lever __be32 xid \ 155498895edbSChuck Lever ), \ 155598895edbSChuck Lever TP_ARGS(xid)) 155698895edbSChuck Lever 155798895edbSChuck Lever DEFINE_ERROR_EVENT(vers); 155898895edbSChuck Lever DEFINE_ERROR_EVENT(chunk); 155998895edbSChuck Lever 1560bd2abef3SChuck Lever /** 1561bd2abef3SChuck Lever ** Server-side RDMA API events 1562bd2abef3SChuck Lever **/ 1563bd2abef3SChuck Lever 1564bd2abef3SChuck Lever TRACE_EVENT(svcrdma_dma_map_page, 1565bd2abef3SChuck Lever TP_PROTO( 1566bd2abef3SChuck Lever const struct svcxprt_rdma *rdma, 1567bd2abef3SChuck Lever const void *page 1568bd2abef3SChuck Lever ), 1569bd2abef3SChuck Lever 1570bd2abef3SChuck Lever TP_ARGS(rdma, page), 1571bd2abef3SChuck Lever 1572bd2abef3SChuck Lever TP_STRUCT__entry( 1573bd2abef3SChuck Lever __field(const void *, page); 1574bd2abef3SChuck Lever __string(device, rdma->sc_cm_id->device->name) 1575bd2abef3SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1576bd2abef3SChuck Lever ), 1577bd2abef3SChuck Lever 1578bd2abef3SChuck Lever TP_fast_assign( 1579bd2abef3SChuck Lever __entry->page = page; 1580bd2abef3SChuck Lever __assign_str(device, rdma->sc_cm_id->device->name); 1581bd2abef3SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1582bd2abef3SChuck Lever ), 1583bd2abef3SChuck Lever 1584bd2abef3SChuck Lever TP_printk("addr=%s device=%s page=%p", 1585bd2abef3SChuck Lever __get_str(addr), __get_str(device), __entry->page 1586bd2abef3SChuck Lever ) 1587bd2abef3SChuck Lever ); 1588bd2abef3SChuck Lever 1589bd2abef3SChuck Lever TRACE_EVENT(svcrdma_dma_map_rwctx, 1590bd2abef3SChuck Lever TP_PROTO( 1591bd2abef3SChuck Lever const struct svcxprt_rdma *rdma, 1592bd2abef3SChuck Lever int status 1593bd2abef3SChuck Lever ), 1594bd2abef3SChuck Lever 1595bd2abef3SChuck Lever TP_ARGS(rdma, status), 1596bd2abef3SChuck Lever 1597bd2abef3SChuck Lever TP_STRUCT__entry( 1598bd2abef3SChuck Lever __field(int, status) 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; 1605bd2abef3SChuck Lever __assign_str(device, rdma->sc_cm_id->device->name); 1606bd2abef3SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1607bd2abef3SChuck Lever ), 1608bd2abef3SChuck Lever 1609bd2abef3SChuck Lever TP_printk("addr=%s device=%s status=%d", 1610bd2abef3SChuck Lever __get_str(addr), __get_str(device), __entry->status 1611bd2abef3SChuck Lever ) 1612bd2abef3SChuck Lever ); 1613bd2abef3SChuck Lever 1614bd2abef3SChuck Lever TRACE_EVENT(svcrdma_send_failed, 1615bd2abef3SChuck Lever TP_PROTO( 1616bd2abef3SChuck Lever const struct svc_rqst *rqst, 1617bd2abef3SChuck Lever int status 1618bd2abef3SChuck Lever ), 1619bd2abef3SChuck Lever 1620bd2abef3SChuck Lever TP_ARGS(rqst, status), 1621bd2abef3SChuck Lever 1622bd2abef3SChuck Lever TP_STRUCT__entry( 1623bd2abef3SChuck Lever __field(int, status) 1624bd2abef3SChuck Lever __field(u32, xid) 1625bd2abef3SChuck Lever __field(const void *, xprt) 1626bd2abef3SChuck Lever __string(addr, rqst->rq_xprt->xpt_remotebuf) 1627bd2abef3SChuck Lever ), 1628bd2abef3SChuck Lever 1629bd2abef3SChuck Lever TP_fast_assign( 1630bd2abef3SChuck Lever __entry->status = status; 1631bd2abef3SChuck Lever __entry->xid = __be32_to_cpu(rqst->rq_xid); 1632bd2abef3SChuck Lever __entry->xprt = rqst->rq_xprt; 1633bd2abef3SChuck Lever __assign_str(addr, rqst->rq_xprt->xpt_remotebuf); 1634bd2abef3SChuck Lever ), 1635bd2abef3SChuck Lever 1636bd2abef3SChuck Lever TP_printk("xprt=%p addr=%s xid=0x%08x status=%d", 1637bd2abef3SChuck Lever __entry->xprt, __get_str(addr), 1638bd2abef3SChuck Lever __entry->xid, __entry->status 1639bd2abef3SChuck Lever ) 1640bd2abef3SChuck Lever ); 1641bd2abef3SChuck Lever 1642bd2abef3SChuck Lever DECLARE_EVENT_CLASS(svcrdma_sendcomp_event, 1643bd2abef3SChuck Lever TP_PROTO( 1644bd2abef3SChuck Lever const struct ib_wc *wc 1645bd2abef3SChuck Lever ), 1646bd2abef3SChuck Lever 1647bd2abef3SChuck Lever TP_ARGS(wc), 1648bd2abef3SChuck Lever 1649bd2abef3SChuck Lever TP_STRUCT__entry( 1650bd2abef3SChuck Lever __field(const void *, cqe) 1651bd2abef3SChuck Lever __field(unsigned int, status) 1652bd2abef3SChuck Lever __field(unsigned int, vendor_err) 1653bd2abef3SChuck Lever ), 1654bd2abef3SChuck Lever 1655bd2abef3SChuck Lever TP_fast_assign( 1656bd2abef3SChuck Lever __entry->cqe = wc->wr_cqe; 1657bd2abef3SChuck Lever __entry->status = wc->status; 1658bd2abef3SChuck Lever if (wc->status) 1659bd2abef3SChuck Lever __entry->vendor_err = wc->vendor_err; 1660bd2abef3SChuck Lever else 1661bd2abef3SChuck Lever __entry->vendor_err = 0; 1662bd2abef3SChuck Lever ), 1663bd2abef3SChuck Lever 1664bd2abef3SChuck Lever TP_printk("cqe=%p status=%s (%u/0x%x)", 1665bd2abef3SChuck Lever __entry->cqe, rdma_show_wc_status(__entry->status), 1666bd2abef3SChuck Lever __entry->status, __entry->vendor_err 1667bd2abef3SChuck Lever ) 1668bd2abef3SChuck Lever ); 1669bd2abef3SChuck Lever 1670bd2abef3SChuck Lever #define DEFINE_SENDCOMP_EVENT(name) \ 1671bd2abef3SChuck Lever DEFINE_EVENT(svcrdma_sendcomp_event, svcrdma_wc_##name, \ 1672bd2abef3SChuck Lever TP_PROTO( \ 1673bd2abef3SChuck Lever const struct ib_wc *wc \ 1674bd2abef3SChuck Lever ), \ 1675bd2abef3SChuck Lever TP_ARGS(wc)) 1676bd2abef3SChuck Lever 1677bd2abef3SChuck Lever TRACE_EVENT(svcrdma_post_send, 1678bd2abef3SChuck Lever TP_PROTO( 1679bd2abef3SChuck Lever const struct ib_send_wr *wr, 1680bd2abef3SChuck Lever int status 1681bd2abef3SChuck Lever ), 1682bd2abef3SChuck Lever 1683bd2abef3SChuck Lever TP_ARGS(wr, status), 1684bd2abef3SChuck Lever 1685bd2abef3SChuck Lever TP_STRUCT__entry( 1686bd2abef3SChuck Lever __field(const void *, cqe) 1687bd2abef3SChuck Lever __field(unsigned int, num_sge) 1688bd2abef3SChuck Lever __field(u32, inv_rkey) 1689bd2abef3SChuck Lever __field(int, status) 1690bd2abef3SChuck Lever ), 1691bd2abef3SChuck Lever 1692bd2abef3SChuck Lever TP_fast_assign( 1693bd2abef3SChuck Lever __entry->cqe = wr->wr_cqe; 1694bd2abef3SChuck Lever __entry->num_sge = wr->num_sge; 1695bd2abef3SChuck Lever __entry->inv_rkey = (wr->opcode == IB_WR_SEND_WITH_INV) ? 1696bd2abef3SChuck Lever wr->ex.invalidate_rkey : 0; 1697bd2abef3SChuck Lever __entry->status = status; 1698bd2abef3SChuck Lever ), 1699bd2abef3SChuck Lever 1700bd2abef3SChuck Lever TP_printk("cqe=%p num_sge=%u inv_rkey=0x%08x status=%d", 1701bd2abef3SChuck Lever __entry->cqe, __entry->num_sge, 1702bd2abef3SChuck Lever __entry->inv_rkey, __entry->status 1703bd2abef3SChuck Lever ) 1704bd2abef3SChuck Lever ); 1705bd2abef3SChuck Lever 1706bd2abef3SChuck Lever DEFINE_SENDCOMP_EVENT(send); 1707bd2abef3SChuck Lever 1708bd2abef3SChuck Lever TRACE_EVENT(svcrdma_post_recv, 1709bd2abef3SChuck Lever TP_PROTO( 1710bd2abef3SChuck Lever const struct ib_recv_wr *wr, 1711bd2abef3SChuck Lever int status 1712bd2abef3SChuck Lever ), 1713bd2abef3SChuck Lever 1714bd2abef3SChuck Lever TP_ARGS(wr, status), 1715bd2abef3SChuck Lever 1716bd2abef3SChuck Lever TP_STRUCT__entry( 1717bd2abef3SChuck Lever __field(const void *, cqe) 1718bd2abef3SChuck Lever __field(int, status) 1719bd2abef3SChuck Lever ), 1720bd2abef3SChuck Lever 1721bd2abef3SChuck Lever TP_fast_assign( 1722bd2abef3SChuck Lever __entry->cqe = wr->wr_cqe; 1723bd2abef3SChuck Lever __entry->status = status; 1724bd2abef3SChuck Lever ), 1725bd2abef3SChuck Lever 1726bd2abef3SChuck Lever TP_printk("cqe=%p status=%d", 1727bd2abef3SChuck Lever __entry->cqe, __entry->status 1728bd2abef3SChuck Lever ) 1729bd2abef3SChuck Lever ); 1730bd2abef3SChuck Lever 1731bd2abef3SChuck Lever TRACE_EVENT(svcrdma_wc_receive, 1732bd2abef3SChuck Lever TP_PROTO( 1733bd2abef3SChuck Lever const struct ib_wc *wc 1734bd2abef3SChuck Lever ), 1735bd2abef3SChuck Lever 1736bd2abef3SChuck Lever TP_ARGS(wc), 1737bd2abef3SChuck Lever 1738bd2abef3SChuck Lever TP_STRUCT__entry( 1739bd2abef3SChuck Lever __field(const void *, cqe) 1740bd2abef3SChuck Lever __field(u32, byte_len) 1741bd2abef3SChuck Lever __field(unsigned int, status) 1742bd2abef3SChuck Lever __field(u32, vendor_err) 1743bd2abef3SChuck Lever ), 1744bd2abef3SChuck Lever 1745bd2abef3SChuck Lever TP_fast_assign( 1746bd2abef3SChuck Lever __entry->cqe = wc->wr_cqe; 1747bd2abef3SChuck Lever __entry->status = wc->status; 1748bd2abef3SChuck Lever if (wc->status) { 1749bd2abef3SChuck Lever __entry->byte_len = 0; 1750bd2abef3SChuck Lever __entry->vendor_err = wc->vendor_err; 1751bd2abef3SChuck Lever } else { 1752bd2abef3SChuck Lever __entry->byte_len = wc->byte_len; 1753bd2abef3SChuck Lever __entry->vendor_err = 0; 1754bd2abef3SChuck Lever } 1755bd2abef3SChuck Lever ), 1756bd2abef3SChuck Lever 1757bd2abef3SChuck Lever TP_printk("cqe=%p byte_len=%u status=%s (%u/0x%x)", 1758bd2abef3SChuck Lever __entry->cqe, __entry->byte_len, 1759bd2abef3SChuck Lever rdma_show_wc_status(__entry->status), 1760bd2abef3SChuck Lever __entry->status, __entry->vendor_err 1761bd2abef3SChuck Lever ) 1762bd2abef3SChuck Lever ); 1763bd2abef3SChuck Lever 1764bd2abef3SChuck Lever TRACE_EVENT(svcrdma_post_rw, 1765bd2abef3SChuck Lever TP_PROTO( 1766bd2abef3SChuck Lever const void *cqe, 1767bd2abef3SChuck Lever int sqecount, 1768bd2abef3SChuck Lever int status 1769bd2abef3SChuck Lever ), 1770bd2abef3SChuck Lever 1771bd2abef3SChuck Lever TP_ARGS(cqe, sqecount, status), 1772bd2abef3SChuck Lever 1773bd2abef3SChuck Lever TP_STRUCT__entry( 1774bd2abef3SChuck Lever __field(const void *, cqe) 1775bd2abef3SChuck Lever __field(int, sqecount) 1776bd2abef3SChuck Lever __field(int, status) 1777bd2abef3SChuck Lever ), 1778bd2abef3SChuck Lever 1779bd2abef3SChuck Lever TP_fast_assign( 1780bd2abef3SChuck Lever __entry->cqe = cqe; 1781bd2abef3SChuck Lever __entry->sqecount = sqecount; 1782bd2abef3SChuck Lever __entry->status = status; 1783bd2abef3SChuck Lever ), 1784bd2abef3SChuck Lever 1785bd2abef3SChuck Lever TP_printk("cqe=%p sqecount=%d status=%d", 1786bd2abef3SChuck Lever __entry->cqe, __entry->sqecount, __entry->status 1787bd2abef3SChuck Lever ) 1788bd2abef3SChuck Lever ); 1789bd2abef3SChuck Lever 1790bd2abef3SChuck Lever DEFINE_SENDCOMP_EVENT(read); 1791bd2abef3SChuck Lever DEFINE_SENDCOMP_EVENT(write); 1792bd2abef3SChuck Lever 1793bd2abef3SChuck Lever TRACE_EVENT(svcrdma_cm_event, 1794bd2abef3SChuck Lever TP_PROTO( 1795bd2abef3SChuck Lever const struct rdma_cm_event *event, 1796bd2abef3SChuck Lever const struct sockaddr *sap 1797bd2abef3SChuck Lever ), 1798bd2abef3SChuck Lever 1799bd2abef3SChuck Lever TP_ARGS(event, sap), 1800bd2abef3SChuck Lever 1801bd2abef3SChuck Lever TP_STRUCT__entry( 1802bd2abef3SChuck Lever __field(unsigned int, event) 1803bd2abef3SChuck Lever __field(int, status) 1804bd2abef3SChuck Lever __array(__u8, addr, INET6_ADDRSTRLEN + 10) 1805bd2abef3SChuck Lever ), 1806bd2abef3SChuck Lever 1807bd2abef3SChuck Lever TP_fast_assign( 1808bd2abef3SChuck Lever __entry->event = event->event; 1809bd2abef3SChuck Lever __entry->status = event->status; 1810bd2abef3SChuck Lever snprintf(__entry->addr, sizeof(__entry->addr) - 1, 1811bd2abef3SChuck Lever "%pISpc", sap); 1812bd2abef3SChuck Lever ), 1813bd2abef3SChuck Lever 1814bd2abef3SChuck Lever TP_printk("addr=%s event=%s (%u/%d)", 1815bd2abef3SChuck Lever __entry->addr, 1816bd2abef3SChuck Lever rdma_show_cm_event(__entry->event), 1817bd2abef3SChuck Lever __entry->event, __entry->status 1818bd2abef3SChuck Lever ) 1819bd2abef3SChuck Lever ); 1820bd2abef3SChuck Lever 1821bd2abef3SChuck Lever TRACE_EVENT(svcrdma_qp_error, 1822bd2abef3SChuck Lever TP_PROTO( 1823bd2abef3SChuck Lever const struct ib_event *event, 1824bd2abef3SChuck Lever const struct sockaddr *sap 1825bd2abef3SChuck Lever ), 1826bd2abef3SChuck Lever 1827bd2abef3SChuck Lever TP_ARGS(event, sap), 1828bd2abef3SChuck Lever 1829bd2abef3SChuck Lever TP_STRUCT__entry( 1830bd2abef3SChuck Lever __field(unsigned int, event) 1831bd2abef3SChuck Lever __string(device, event->device->name) 1832bd2abef3SChuck Lever __array(__u8, addr, INET6_ADDRSTRLEN + 10) 1833bd2abef3SChuck Lever ), 1834bd2abef3SChuck Lever 1835bd2abef3SChuck Lever TP_fast_assign( 1836bd2abef3SChuck Lever __entry->event = event->event; 1837bd2abef3SChuck Lever __assign_str(device, event->device->name); 1838bd2abef3SChuck Lever snprintf(__entry->addr, sizeof(__entry->addr) - 1, 1839bd2abef3SChuck Lever "%pISpc", sap); 1840bd2abef3SChuck Lever ), 1841bd2abef3SChuck Lever 1842bd2abef3SChuck Lever TP_printk("addr=%s dev=%s event=%s (%u)", 1843bd2abef3SChuck Lever __entry->addr, __get_str(device), 1844bd2abef3SChuck Lever rdma_show_ib_event(__entry->event), __entry->event 1845bd2abef3SChuck Lever ) 1846bd2abef3SChuck Lever ); 1847bd2abef3SChuck Lever 1848bd2abef3SChuck Lever DECLARE_EVENT_CLASS(svcrdma_sendqueue_event, 1849bd2abef3SChuck Lever TP_PROTO( 1850bd2abef3SChuck Lever const struct svcxprt_rdma *rdma 1851bd2abef3SChuck Lever ), 1852bd2abef3SChuck Lever 1853bd2abef3SChuck Lever TP_ARGS(rdma), 1854bd2abef3SChuck Lever 1855bd2abef3SChuck Lever TP_STRUCT__entry( 1856bd2abef3SChuck Lever __field(int, avail) 1857bd2abef3SChuck Lever __field(int, depth) 1858bd2abef3SChuck Lever __string(addr, rdma->sc_xprt.xpt_remotebuf) 1859bd2abef3SChuck Lever ), 1860bd2abef3SChuck Lever 1861bd2abef3SChuck Lever TP_fast_assign( 1862bd2abef3SChuck Lever __entry->avail = atomic_read(&rdma->sc_sq_avail); 1863bd2abef3SChuck Lever __entry->depth = rdma->sc_sq_depth; 1864bd2abef3SChuck Lever __assign_str(addr, rdma->sc_xprt.xpt_remotebuf); 1865bd2abef3SChuck Lever ), 1866bd2abef3SChuck Lever 1867bd2abef3SChuck Lever TP_printk("addr=%s sc_sq_avail=%d/%d", 1868bd2abef3SChuck Lever __get_str(addr), __entry->avail, __entry->depth 1869bd2abef3SChuck Lever ) 1870bd2abef3SChuck Lever ); 1871bd2abef3SChuck Lever 1872bd2abef3SChuck Lever #define DEFINE_SQ_EVENT(name) \ 1873bd2abef3SChuck Lever DEFINE_EVENT(svcrdma_sendqueue_event, svcrdma_sq_##name,\ 1874bd2abef3SChuck Lever TP_PROTO( \ 1875bd2abef3SChuck Lever const struct svcxprt_rdma *rdma \ 1876bd2abef3SChuck Lever ), \ 1877bd2abef3SChuck Lever TP_ARGS(rdma)) 1878bd2abef3SChuck Lever 1879bd2abef3SChuck Lever DEFINE_SQ_EVENT(full); 1880bd2abef3SChuck Lever DEFINE_SQ_EVENT(retry); 1881bd2abef3SChuck Lever 1882e48f083eSChuck Lever #endif /* _TRACE_RPCRDMA_H */ 1883e48f083eSChuck Lever 1884e48f083eSChuck Lever #include <trace/define_trace.h> 1885