2018-01-20 19:16:34 +03:00
/* SPDX-License-Identifier: GPL-2.0 */
/*
2018-05-07 22:27:11 +03:00
* Copyright ( c ) 2017 , 2018 Oracle . All rights reserved .
*
* Trace point definitions for the " rpcrdma " subsystem .
2018-01-20 19:16:34 +03:00
*/
# undef TRACE_SYSTEM
# define TRACE_SYSTEM rpcrdma
# if !defined(_TRACE_RPCRDMA_H) || defined(TRACE_HEADER_MULTI_READ)
# define _TRACE_RPCRDMA_H
2018-12-19 19:00:06 +03:00
# include <linux/scatterlist.h>
2020-05-19 16:30:32 +03:00
# include <linux/sunrpc/rpc_rdma_cid.h>
2018-01-20 19:16:34 +03:00
# include <linux/tracepoint.h>
2020-08-17 16:53:11 +03:00
# include <rdma/ib_cm.h>
2018-01-20 19:16:34 +03:00
# include <trace/events/rdma.h>
2017-12-21 00:30:48 +03:00
/**
* * Event classes
* */
2020-05-19 16:30:32 +03:00
DECLARE_EVENT_CLASS ( rpcrdma_completion_class ,
TP_PROTO (
const struct ib_wc * wc ,
const struct rpc_rdma_cid * cid
) ,
TP_ARGS ( wc , cid ) ,
TP_STRUCT__entry (
__field ( u32 , cq_id )
__field ( int , completion_id )
__field ( unsigned long , status )
__field ( unsigned int , vendor_err )
) ,
TP_fast_assign (
__entry - > cq_id = cid - > ci_queue_id ;
__entry - > completion_id = cid - > ci_completion_id ;
__entry - > status = wc - > status ;
if ( wc - > status )
__entry - > vendor_err = wc - > vendor_err ;
else
__entry - > vendor_err = 0 ;
) ,
TP_printk ( " cq.id=%u cid=%d status=%s (%lu/0x%x) " ,
__entry - > cq_id , __entry - > completion_id ,
rdma_show_wc_status ( __entry - > status ) ,
__entry - > status , __entry - > vendor_err
)
) ;
# define DEFINE_COMPLETION_EVENT(name) \
DEFINE_EVENT ( rpcrdma_completion_class , name , \
TP_PROTO ( \
const struct ib_wc * wc , \
const struct rpc_rdma_cid * cid \
) , \
TP_ARGS ( wc , cid ) )
2017-12-21 00:30:48 +03:00
DECLARE_EVENT_CLASS ( xprtrdma_reply_event ,
TP_PROTO (
const struct rpcrdma_rep * rep
) ,
TP_ARGS ( rep ) ,
TP_STRUCT__entry (
__field ( const void * , rep )
__field ( const void * , r_xprt )
__field ( u32 , xid )
__field ( u32 , version )
__field ( u32 , proc )
) ,
TP_fast_assign (
__entry - > rep = rep ;
__entry - > r_xprt = rep - > rr_rxprt ;
__entry - > xid = be32_to_cpu ( rep - > rr_xid ) ;
__entry - > version = be32_to_cpu ( rep - > rr_vers ) ;
__entry - > proc = be32_to_cpu ( rep - > rr_proc ) ;
) ,
TP_printk ( " rxprt %p xid=0x%08x rep=%p: version %u proc %u " ,
__entry - > r_xprt , __entry - > xid , __entry - > rep ,
__entry - > version , __entry - > proc
)
) ;
# define DEFINE_REPLY_EVENT(name) \
DEFINE_EVENT ( xprtrdma_reply_event , name , \
TP_PROTO ( \
const struct rpcrdma_rep * rep \
) , \
TP_ARGS ( rep ) )
2017-12-21 00:31:21 +03:00
DECLARE_EVENT_CLASS ( xprtrdma_rxprt ,
TP_PROTO (
const struct rpcrdma_xprt * r_xprt
) ,
TP_ARGS ( r_xprt ) ,
TP_STRUCT__entry (
__field ( const void * , r_xprt )
__string ( addr , rpcrdma_addrstr ( r_xprt ) )
__string ( port , rpcrdma_portstr ( r_xprt ) )
) ,
TP_fast_assign (
__entry - > r_xprt = r_xprt ;
__assign_str ( addr , rpcrdma_addrstr ( r_xprt ) ) ;
__assign_str ( port , rpcrdma_portstr ( r_xprt ) ) ;
) ,
TP_printk ( " peer=[%s]:%s r_xprt=%p " ,
__get_str ( addr ) , __get_str ( port ) , __entry - > r_xprt
)
) ;
# define DEFINE_RXPRT_EVENT(name) \
DEFINE_EVENT ( xprtrdma_rxprt , name , \
TP_PROTO ( \
const struct rpcrdma_xprt * r_xprt \
) , \
TP_ARGS ( r_xprt ) )
2019-10-23 17:01:58 +03:00
DECLARE_EVENT_CLASS ( xprtrdma_connect_class ,
TP_PROTO (
const struct rpcrdma_xprt * r_xprt ,
int rc
) ,
TP_ARGS ( r_xprt , rc ) ,
TP_STRUCT__entry (
__field ( const void * , r_xprt )
__field ( int , rc )
__field ( int , connect_status )
__string ( addr , rpcrdma_addrstr ( r_xprt ) )
__string ( port , rpcrdma_portstr ( r_xprt ) )
) ,
TP_fast_assign (
__entry - > r_xprt = r_xprt ;
__entry - > rc = rc ;
2020-02-22 01:01:05 +03:00
__entry - > connect_status = r_xprt - > rx_ep - > re_connect_status ;
2019-10-23 17:01:58 +03:00
__assign_str ( addr , rpcrdma_addrstr ( r_xprt ) ) ;
__assign_str ( port , rpcrdma_portstr ( r_xprt ) ) ;
) ,
2020-02-22 01:00:49 +03:00
TP_printk ( " peer=[%s]:%s r_xprt=%p: rc=%d connection status=%d " ,
2019-10-23 17:01:58 +03:00
__get_str ( addr ) , __get_str ( port ) , __entry - > r_xprt ,
__entry - > rc , __entry - > connect_status
)
) ;
# define DEFINE_CONN_EVENT(name) \
DEFINE_EVENT ( xprtrdma_connect_class , xprtrdma_ # # name , \
TP_PROTO ( \
const struct rpcrdma_xprt * r_xprt , \
int rc \
) , \
TP_ARGS ( r_xprt , rc ) )
2017-12-21 00:30:56 +03:00
DECLARE_EVENT_CLASS ( xprtrdma_rdch_event ,
TP_PROTO (
const struct rpc_task * task ,
unsigned int pos ,
struct rpcrdma_mr * mr ,
int nsegs
) ,
TP_ARGS ( task , pos , mr , nsegs ) ,
TP_STRUCT__entry (
__field ( unsigned int , task_id )
__field ( unsigned int , client_id )
__field ( unsigned int , pos )
__field ( int , nents )
__field ( u32 , handle )
__field ( u32 , length )
__field ( u64 , offset )
__field ( int , nsegs )
) ,
TP_fast_assign (
__entry - > task_id = task - > tk_pid ;
__entry - > client_id = task - > tk_client - > cl_clid ;
__entry - > pos = pos ;
__entry - > nents = mr - > mr_nents ;
__entry - > handle = mr - > mr_handle ;
__entry - > length = mr - > mr_length ;
__entry - > offset = mr - > mr_offset ;
__entry - > nsegs = nsegs ;
) ,
2018-12-19 18:59:49 +03:00
TP_printk ( " task:%u@%u pos=%u %u@0x%016llx:0x%08x (%s) " ,
__entry - > task_id , __entry - > client_id ,
2017-12-21 00:30:56 +03:00
__entry - > pos , __entry - > length ,
( unsigned long long ) __entry - > offset , __entry - > handle ,
__entry - > nents < __entry - > nsegs ? " more " : " last "
)
) ;
# define DEFINE_RDCH_EVENT(name) \
2018-12-19 18:59:49 +03:00
DEFINE_EVENT ( xprtrdma_rdch_event , xprtrdma_chunk_ # # name , \
2017-12-21 00:30:56 +03:00
TP_PROTO ( \
const struct rpc_task * task , \
unsigned int pos , \
struct rpcrdma_mr * mr , \
int nsegs \
) , \
TP_ARGS ( task , pos , mr , nsegs ) )
DECLARE_EVENT_CLASS ( xprtrdma_wrch_event ,
TP_PROTO (
const struct rpc_task * task ,
struct rpcrdma_mr * mr ,
int nsegs
) ,
TP_ARGS ( task , mr , nsegs ) ,
TP_STRUCT__entry (
__field ( unsigned int , task_id )
__field ( unsigned int , client_id )
__field ( int , nents )
__field ( u32 , handle )
__field ( u32 , length )
__field ( u64 , offset )
__field ( int , nsegs )
) ,
TP_fast_assign (
__entry - > task_id = task - > tk_pid ;
__entry - > client_id = task - > tk_client - > cl_clid ;
__entry - > nents = mr - > mr_nents ;
__entry - > handle = mr - > mr_handle ;
__entry - > length = mr - > mr_length ;
__entry - > offset = mr - > mr_offset ;
__entry - > nsegs = nsegs ;
) ,
2018-12-19 18:59:49 +03:00
TP_printk ( " task:%u@%u %u@0x%016llx:0x%08x (%s) " ,
__entry - > task_id , __entry - > client_id ,
2017-12-21 00:30:56 +03:00
__entry - > length , ( unsigned long long ) __entry - > offset ,
__entry - > handle ,
__entry - > nents < __entry - > nsegs ? " more " : " last "
)
) ;
# define DEFINE_WRCH_EVENT(name) \
2018-12-19 18:59:49 +03:00
DEFINE_EVENT ( xprtrdma_wrch_event , xprtrdma_chunk_ # # name , \
2017-12-21 00:30:56 +03:00
TP_PROTO ( \
const struct rpc_task * task , \
struct rpcrdma_mr * mr , \
int nsegs \
) , \
TP_ARGS ( task , mr , nsegs ) )
DECLARE_EVENT_CLASS ( xprtrdma_frwr_done ,
TP_PROTO (
const struct ib_wc * wc ,
const struct rpcrdma_frwr * frwr
) ,
TP_ARGS ( wc , frwr ) ,
TP_STRUCT__entry (
2020-02-12 19:12:35 +03:00
__field ( u32 , mr_id )
2017-12-21 00:30:56 +03:00
__field ( unsigned int , status )
__field ( unsigned int , vendor_err )
) ,
TP_fast_assign (
2020-02-12 19:12:35 +03:00
__entry - > mr_id = frwr - > fr_mr - > res . id ;
2017-12-21 00:30:56 +03:00
__entry - > status = wc - > status ;
__entry - > vendor_err = __entry - > status ? wc - > vendor_err : 0 ;
) ,
TP_printk (
2020-02-12 19:12:35 +03:00
" mr.id=%u: %s (%u/0x%x) " ,
__entry - > mr_id , rdma_show_wc_status ( __entry - > status ) ,
2017-12-21 00:30:56 +03:00
__entry - > status , __entry - > vendor_err
)
) ;
# define DEFINE_FRWR_DONE_EVENT(name) \
DEFINE_EVENT ( xprtrdma_frwr_done , name , \
TP_PROTO ( \
const struct ib_wc * wc , \
const struct rpcrdma_frwr * frwr \
) , \
TP_ARGS ( wc , frwr ) )
2018-12-19 18:59:49 +03:00
TRACE_DEFINE_ENUM ( DMA_BIDIRECTIONAL ) ;
TRACE_DEFINE_ENUM ( DMA_TO_DEVICE ) ;
TRACE_DEFINE_ENUM ( DMA_FROM_DEVICE ) ;
TRACE_DEFINE_ENUM ( DMA_NONE ) ;
# define xprtrdma_show_direction(x) \
__print_symbolic ( x , \
{ DMA_BIDIRECTIONAL , " BIDIR " } , \
{ DMA_TO_DEVICE , " TO_DEVICE " } , \
{ DMA_FROM_DEVICE , " FROM_DEVICE " } , \
{ DMA_NONE , " NONE " } )
2017-12-21 00:31:12 +03:00
DECLARE_EVENT_CLASS ( xprtrdma_mr ,
TP_PROTO (
const struct rpcrdma_mr * mr
) ,
TP_ARGS ( mr ) ,
TP_STRUCT__entry (
2020-02-12 19:12:35 +03:00
__field ( u32 , mr_id )
__field ( int , nents )
2017-12-21 00:31:12 +03:00
__field ( u32 , handle )
__field ( u32 , length )
__field ( u64 , offset )
2018-12-19 18:59:49 +03:00
__field ( u32 , dir )
2017-12-21 00:31:12 +03:00
) ,
TP_fast_assign (
2020-02-12 19:12:35 +03:00
__entry - > mr_id = mr - > frwr . fr_mr - > res . id ;
__entry - > nents = mr - > mr_nents ;
2017-12-21 00:31:12 +03:00
__entry - > handle = mr - > mr_handle ;
__entry - > length = mr - > mr_length ;
__entry - > offset = mr - > mr_offset ;
2018-12-19 18:59:49 +03:00
__entry - > dir = mr - > mr_dir ;
2017-12-21 00:31:12 +03:00
) ,
2020-02-12 19:12:35 +03:00
TP_printk ( " mr.id=%u nents=%d %u@0x%016llx:0x%08x (%s) " ,
__entry - > mr_id , __entry - > nents , __entry - > length ,
2018-12-19 18:59:49 +03:00
( unsigned long long ) __entry - > offset , __entry - > handle ,
xprtrdma_show_direction ( __entry - > dir )
2017-12-21 00:31:12 +03:00
)
) ;
# define DEFINE_MR_EVENT(name) \
2018-10-01 21:25:30 +03:00
DEFINE_EVENT ( xprtrdma_mr , xprtrdma_mr_ # # name , \
2017-12-21 00:31:12 +03:00
TP_PROTO ( \
const struct rpcrdma_mr * mr \
) , \
TP_ARGS ( mr ) )
2017-12-21 00:31:37 +03:00
DECLARE_EVENT_CLASS ( xprtrdma_cb_event ,
TP_PROTO (
const struct rpc_rqst * rqst
) ,
TP_ARGS ( rqst ) ,
TP_STRUCT__entry (
__field ( const void * , rqst )
__field ( const void * , rep )
__field ( const void * , req )
__field ( u32 , xid )
) ,
TP_fast_assign (
__entry - > rqst = rqst ;
__entry - > req = rpcr_to_rdmar ( rqst ) ;
__entry - > rep = rpcr_to_rdmar ( rqst ) - > rl_reply ;
__entry - > xid = be32_to_cpu ( rqst - > rq_xid ) ;
) ,
TP_printk ( " xid=0x%08x, rqst=%p req=%p rep=%p " ,
__entry - > xid , __entry - > rqst , __entry - > req , __entry - > rep
)
) ;
# define DEFINE_CB_EVENT(name) \
DEFINE_EVENT ( xprtrdma_cb_event , name , \
TP_PROTO ( \
const struct rpc_rqst * rqst \
) , \
TP_ARGS ( rqst ) )
2017-12-21 00:31:29 +03:00
/**
* * Connection events
* */
2019-10-23 17:02:09 +03:00
TRACE_EVENT ( xprtrdma_inline_thresh ,
TP_PROTO (
2020-02-22 01:01:00 +03:00
const struct rpcrdma_ep * ep
2019-10-23 17:02:09 +03:00
) ,
2020-02-22 01:01:00 +03:00
TP_ARGS ( ep ) ,
2019-10-23 17:02:09 +03:00
TP_STRUCT__entry (
__field ( unsigned int , inline_send )
__field ( unsigned int , inline_recv )
__field ( unsigned int , max_send )
__field ( unsigned int , max_recv )
2020-02-22 01:01:00 +03:00
__array ( unsigned char , srcaddr , sizeof ( struct sockaddr_in6 ) )
__array ( unsigned char , dstaddr , sizeof ( struct sockaddr_in6 ) )
2019-10-23 17:02:09 +03:00
) ,
TP_fast_assign (
2020-02-22 01:01:00 +03:00
const struct rdma_cm_id * id = ep - > re_id ;
2019-10-23 17:02:09 +03:00
2020-02-22 01:00:54 +03:00
__entry - > inline_send = ep - > re_inline_send ;
__entry - > inline_recv = ep - > re_inline_recv ;
__entry - > max_send = ep - > re_max_inline_send ;
__entry - > max_recv = ep - > re_max_inline_recv ;
2020-02-22 01:01:00 +03:00
memcpy ( __entry - > srcaddr , & id - > route . addr . src_addr ,
sizeof ( struct sockaddr_in6 ) ) ;
memcpy ( __entry - > dstaddr , & id - > route . addr . dst_addr ,
sizeof ( struct sockaddr_in6 ) ) ;
2019-10-23 17:02:09 +03:00
) ,
2020-02-22 01:01:00 +03:00
TP_printk ( " %pISpc -> %pISpc neg send/recv=%u/%u, calc send/recv=%u/%u " ,
__entry - > srcaddr , __entry - > dstaddr ,
2019-10-23 17:02:09 +03:00
__entry - > inline_send , __entry - > inline_recv ,
__entry - > max_send , __entry - > max_recv
)
) ;
2019-10-23 17:01:58 +03:00
DEFINE_CONN_EVENT ( connect ) ;
DEFINE_CONN_EVENT ( disconnect ) ;
DEFINE_RXPRT_EVENT ( xprtrdma_op_inject_dsc ) ;
TRACE_EVENT ( xprtrdma_op_connect ,
2017-12-21 00:31:29 +03:00
TP_PROTO (
const struct rpcrdma_xprt * r_xprt ,
2019-10-23 17:01:58 +03:00
unsigned long delay
2017-12-21 00:31:29 +03:00
) ,
2019-10-23 17:01:58 +03:00
TP_ARGS ( r_xprt , delay ) ,
2017-12-21 00:31:29 +03:00
TP_STRUCT__entry (
__field ( const void * , r_xprt )
2019-10-23 17:01:58 +03:00
__field ( unsigned long , delay )
2017-12-21 00:31:29 +03:00
__string ( addr , rpcrdma_addrstr ( r_xprt ) )
__string ( port , rpcrdma_portstr ( r_xprt ) )
) ,
TP_fast_assign (
__entry - > r_xprt = r_xprt ;
2019-10-23 17:01:58 +03:00
__entry - > delay = delay ;
2017-12-21 00:31:29 +03:00
__assign_str ( addr , rpcrdma_addrstr ( r_xprt ) ) ;
__assign_str ( port , rpcrdma_portstr ( r_xprt ) ) ;
) ,
2019-10-23 17:01:58 +03:00
TP_printk ( " peer=[%s]:%s r_xprt=%p delay=%lu " ,
__get_str ( addr ) , __get_str ( port ) , __entry - > r_xprt ,
__entry - > delay
2017-12-21 00:31:29 +03:00
)
) ;
2019-06-19 17:33:42 +03:00
TRACE_EVENT ( xprtrdma_op_set_cto ,
TP_PROTO (
const struct rpcrdma_xprt * r_xprt ,
unsigned long connect ,
unsigned long reconnect
) ,
TP_ARGS ( r_xprt , connect , reconnect ) ,
TP_STRUCT__entry (
__field ( const void * , r_xprt )
__field ( unsigned long , connect )
__field ( unsigned long , reconnect )
__string ( addr , rpcrdma_addrstr ( r_xprt ) )
__string ( port , rpcrdma_portstr ( r_xprt ) )
) ,
TP_fast_assign (
__entry - > r_xprt = r_xprt ;
__entry - > connect = connect ;
__entry - > reconnect = reconnect ;
__assign_str ( addr , rpcrdma_addrstr ( r_xprt ) ) ;
__assign_str ( port , rpcrdma_portstr ( r_xprt ) ) ;
) ,
TP_printk ( " peer=[%s]:%s r_xprt=%p: connect=%lu reconnect=%lu " ,
__get_str ( addr ) , __get_str ( port ) , __entry - > r_xprt ,
__entry - > connect / HZ , __entry - > reconnect / HZ
)
) ;
2018-10-01 21:26:13 +03:00
TRACE_EVENT ( xprtrdma_qp_event ,
2017-12-21 00:31:45 +03:00
TP_PROTO (
2020-02-22 01:01:00 +03:00
const struct rpcrdma_ep * ep ,
2017-12-21 00:31:45 +03:00
const struct ib_event * event
) ,
2020-02-22 01:01:00 +03:00
TP_ARGS ( ep , event ) ,
2017-12-21 00:31:45 +03:00
TP_STRUCT__entry (
2020-02-22 01:01:00 +03:00
__field ( unsigned long , event )
2017-12-21 00:31:45 +03:00
__string ( name , event - > device - > name )
2020-02-22 01:01:00 +03:00
__array ( unsigned char , srcaddr , sizeof ( struct sockaddr_in6 ) )
__array ( unsigned char , dstaddr , sizeof ( struct sockaddr_in6 ) )
2017-12-21 00:31:45 +03:00
) ,
TP_fast_assign (
2020-02-22 01:01:00 +03:00
const struct rdma_cm_id * id = ep - > re_id ;
2017-12-21 00:31:45 +03:00
__entry - > event = event - > event ;
__assign_str ( name , event - > device - > name ) ;
2020-02-22 01:01:00 +03:00
memcpy ( __entry - > srcaddr , & id - > route . addr . src_addr ,
sizeof ( struct sockaddr_in6 ) ) ;
memcpy ( __entry - > dstaddr , & id - > route . addr . dst_addr ,
sizeof ( struct sockaddr_in6 ) ) ;
2017-12-21 00:31:45 +03:00
) ,
2020-02-22 01:01:00 +03:00
TP_printk ( " %pISpc -> %pISpc device=%s %s (%lu) " ,
__entry - > srcaddr , __entry - > dstaddr , __get_str ( name ) ,
rdma_show_ib_event ( __entry - > event ) , __entry - > event
2017-12-21 00:31:45 +03:00
)
) ;
2017-12-21 00:30:40 +03:00
/**
* * Call events
* */
2017-12-21 00:31:21 +03:00
TRACE_EVENT ( xprtrdma_createmrs ,
TP_PROTO (
const struct rpcrdma_xprt * r_xprt ,
unsigned int count
) ,
TP_ARGS ( r_xprt , count ) ,
TP_STRUCT__entry (
__field ( const void * , r_xprt )
2019-08-20 01:47:10 +03:00
__string ( addr , rpcrdma_addrstr ( r_xprt ) )
__string ( port , rpcrdma_portstr ( r_xprt ) )
2017-12-21 00:31:21 +03:00
__field ( unsigned int , count )
) ,
TP_fast_assign (
__entry - > r_xprt = r_xprt ;
__entry - > count = count ;
2019-08-20 01:47:10 +03:00
__assign_str ( addr , rpcrdma_addrstr ( r_xprt ) ) ;
__assign_str ( port , rpcrdma_portstr ( r_xprt ) ) ;
2017-12-21 00:31:21 +03:00
) ,
2019-08-20 01:47:10 +03:00
TP_printk ( " peer=[%s]:%s r_xprt=%p: created %u MRs " ,
__get_str ( addr ) , __get_str ( port ) , __entry - > r_xprt ,
__entry - > count
)
) ;
TRACE_EVENT ( xprtrdma_mr_get ,
TP_PROTO (
const struct rpcrdma_req * req
) ,
TP_ARGS ( req ) ,
TP_STRUCT__entry (
__field ( const void * , req )
__field ( unsigned int , task_id )
__field ( unsigned int , client_id )
__field ( u32 , xid )
) ,
TP_fast_assign (
const struct rpc_rqst * rqst = & req - > rl_slot ;
__entry - > req = req ;
__entry - > task_id = rqst - > rq_task - > tk_pid ;
__entry - > client_id = rqst - > rq_task - > tk_client - > cl_clid ;
__entry - > xid = be32_to_cpu ( rqst - > rq_xid ) ;
) ,
TP_printk ( " task:%u@%u xid=0x%08x req=%p " ,
__entry - > task_id , __entry - > client_id , __entry - > xid ,
__entry - > req
2017-12-21 00:31:21 +03:00
)
) ;
2019-08-20 01:45:37 +03:00
TRACE_EVENT ( xprtrdma_nomrs ,
TP_PROTO (
const struct rpcrdma_req * req
) ,
TP_ARGS ( req ) ,
TP_STRUCT__entry (
__field ( const void * , req )
__field ( unsigned int , task_id )
__field ( unsigned int , client_id )
__field ( u32 , xid )
) ,
TP_fast_assign (
const struct rpc_rqst * rqst = & req - > rl_slot ;
__entry - > req = req ;
__entry - > task_id = rqst - > rq_task - > tk_pid ;
__entry - > client_id = rqst - > rq_task - > tk_client - > cl_clid ;
__entry - > xid = be32_to_cpu ( rqst - > rq_xid ) ;
) ,
TP_printk ( " task:%u@%u xid=0x%08x req=%p " ,
__entry - > task_id , __entry - > client_id , __entry - > xid ,
__entry - > req
)
) ;
2017-12-21 00:31:21 +03:00
2018-12-19 18:59:49 +03:00
DEFINE_RDCH_EVENT ( read ) ;
DEFINE_WRCH_EVENT ( write ) ;
DEFINE_WRCH_EVENT ( reply ) ;
2017-12-21 00:30:56 +03:00
2017-12-21 00:30:40 +03:00
TRACE_DEFINE_ENUM ( rpcrdma_noch ) ;
2019-10-17 21:31:53 +03:00
TRACE_DEFINE_ENUM ( rpcrdma_noch_pullup ) ;
TRACE_DEFINE_ENUM ( rpcrdma_noch_mapped ) ;
2017-12-21 00:30:40 +03:00
TRACE_DEFINE_ENUM ( rpcrdma_readch ) ;
TRACE_DEFINE_ENUM ( rpcrdma_areadch ) ;
TRACE_DEFINE_ENUM ( rpcrdma_writech ) ;
TRACE_DEFINE_ENUM ( rpcrdma_replych ) ;
# define xprtrdma_show_chunktype(x) \
__print_symbolic ( x , \
{ rpcrdma_noch , " inline " } , \
2019-10-17 21:31:53 +03:00
{ rpcrdma_noch_pullup , " pullup " } , \
{ rpcrdma_noch_mapped , " mapped " } , \
2017-12-21 00:30:40 +03:00
{ rpcrdma_readch , " read list " } , \
{ rpcrdma_areadch , " *read list " } , \
{ rpcrdma_writech , " write list " } , \
{ rpcrdma_replych , " reply chunk " } )
TRACE_EVENT ( xprtrdma_marshal ,
TP_PROTO (
2019-06-19 17:32:43 +03:00
const struct rpcrdma_req * req ,
2017-12-21 00:30:40 +03:00
unsigned int rtype ,
unsigned int wtype
) ,
2019-06-19 17:32:43 +03:00
TP_ARGS ( req , rtype , wtype ) ,
2017-12-21 00:30:40 +03:00
TP_STRUCT__entry (
__field ( unsigned int , task_id )
__field ( unsigned int , client_id )
__field ( u32 , xid )
__field ( unsigned int , hdrlen )
__field ( unsigned int , headlen )
__field ( unsigned int , pagelen )
__field ( unsigned int , taillen )
__field ( unsigned int , rtype )
__field ( unsigned int , wtype )
) ,
TP_fast_assign (
2019-06-19 17:32:43 +03:00
const struct rpc_rqst * rqst = & req - > rl_slot ;
2017-12-21 00:30:40 +03:00
__entry - > task_id = rqst - > rq_task - > tk_pid ;
__entry - > client_id = rqst - > rq_task - > tk_client - > cl_clid ;
__entry - > xid = be32_to_cpu ( rqst - > rq_xid ) ;
2019-06-19 17:32:43 +03:00
__entry - > hdrlen = req - > rl_hdrbuf . len ;
2017-12-21 00:30:40 +03:00
__entry - > headlen = rqst - > rq_snd_buf . head [ 0 ] . iov_len ;
__entry - > pagelen = rqst - > rq_snd_buf . page_len ;
__entry - > taillen = rqst - > rq_snd_buf . tail [ 0 ] . iov_len ;
__entry - > rtype = rtype ;
__entry - > wtype = wtype ;
) ,
TP_printk ( " task:%u@%u xid=0x%08x: hdr=%u xdr=%u/%u/%u %s/%s " ,
__entry - > task_id , __entry - > client_id , __entry - > xid ,
__entry - > hdrlen ,
__entry - > headlen , __entry - > pagelen , __entry - > taillen ,
xprtrdma_show_chunktype ( __entry - > rtype ) ,
xprtrdma_show_chunktype ( __entry - > wtype )
)
) ;
2019-04-24 16:39:48 +03:00
TRACE_EVENT ( xprtrdma_marshal_failed ,
TP_PROTO ( const struct rpc_rqst * rqst ,
int ret
) ,
TP_ARGS ( rqst , ret ) ,
TP_STRUCT__entry (
__field ( unsigned int , task_id )
__field ( unsigned int , client_id )
__field ( u32 , xid )
__field ( int , ret )
) ,
TP_fast_assign (
__entry - > task_id = rqst - > rq_task - > tk_pid ;
__entry - > client_id = rqst - > rq_task - > tk_client - > cl_clid ;
__entry - > xid = be32_to_cpu ( rqst - > rq_xid ) ;
__entry - > ret = ret ;
) ,
TP_printk ( " task:%u@%u xid=0x%08x: ret=%d " ,
__entry - > task_id , __entry - > client_id , __entry - > xid ,
__entry - > ret
)
) ;
2019-06-19 17:32:48 +03:00
TRACE_EVENT ( xprtrdma_prepsend_failed ,
TP_PROTO ( const struct rpc_rqst * rqst ,
int ret
) ,
TP_ARGS ( rqst , ret ) ,
TP_STRUCT__entry (
__field ( unsigned int , task_id )
__field ( unsigned int , client_id )
__field ( u32 , xid )
__field ( int , ret )
) ,
TP_fast_assign (
__entry - > task_id = rqst - > rq_task - > tk_pid ;
__entry - > client_id = rqst - > rq_task - > tk_client - > cl_clid ;
__entry - > xid = be32_to_cpu ( rqst - > rq_xid ) ;
__entry - > ret = ret ;
) ,
TP_printk ( " task:%u@%u xid=0x%08x: ret=%d " ,
__entry - > task_id , __entry - > client_id , __entry - > xid ,
__entry - > ret
)
) ;
2017-12-21 00:30:40 +03:00
TRACE_EVENT ( xprtrdma_post_send ,
TP_PROTO (
2020-04-20 03:03:05 +03:00
const struct rpcrdma_req * req
2017-12-21 00:30:40 +03:00
) ,
2020-04-20 03:03:05 +03:00
TP_ARGS ( req ) ,
2017-12-21 00:30:40 +03:00
TP_STRUCT__entry (
__field ( const void * , req )
2020-01-03 19:56:32 +03:00
__field ( const void * , sc )
2019-02-11 19:25:04 +03:00
__field ( unsigned int , task_id )
__field ( unsigned int , client_id )
2017-12-21 00:30:40 +03:00
__field ( int , num_sge )
2018-10-01 21:26:51 +03:00
__field ( int , signaled )
2017-12-21 00:30:40 +03:00
) ,
TP_fast_assign (
2019-02-11 19:25:04 +03:00
const struct rpc_rqst * rqst = & req - > rl_slot ;
__entry - > task_id = rqst - > rq_task - > tk_pid ;
2019-06-19 17:32:32 +03:00
__entry - > client_id = rqst - > rq_task - > tk_client ?
rqst - > rq_task - > tk_client - > cl_clid : - 1 ;
2017-12-21 00:30:40 +03:00
__entry - > req = req ;
2020-01-03 19:56:32 +03:00
__entry - > sc = req - > rl_sendctx ;
2019-10-17 21:31:35 +03:00
__entry - > num_sge = req - > rl_wr . num_sge ;
__entry - > signaled = req - > rl_wr . send_flags & IB_SEND_SIGNALED ;
2017-12-21 00:30:40 +03:00
) ,
2020-04-20 03:03:05 +03:00
TP_printk ( " task:%u@%u req=%p sc=%p (%d SGE%s) %s " ,
2019-02-11 19:25:04 +03:00
__entry - > task_id , __entry - > client_id ,
2020-01-03 19:56:32 +03:00
__entry - > req , __entry - > sc , __entry - > num_sge ,
2019-02-11 19:25:04 +03:00
( __entry - > num_sge = = 1 ? " " : " s " ) ,
2020-04-20 03:03:05 +03:00
( __entry - > signaled ? " signaled " : " " )
2017-12-21 00:30:40 +03:00
)
) ;
2017-12-21 00:30:48 +03:00
TRACE_EVENT ( xprtrdma_post_recv ,
TP_PROTO (
2019-08-20 01:41:44 +03:00
const struct rpcrdma_rep * rep
2017-12-21 00:30:48 +03:00
) ,
2019-08-20 01:41:44 +03:00
TP_ARGS ( rep ) ,
2017-12-21 00:30:48 +03:00
TP_STRUCT__entry (
2019-08-20 01:41:44 +03:00
__field ( const void * , rep )
2017-12-21 00:30:48 +03:00
) ,
TP_fast_assign (
2019-08-20 01:41:44 +03:00
__entry - > rep = rep ;
2017-12-21 00:30:48 +03:00
) ,
2019-08-20 01:41:44 +03:00
TP_printk ( " rep=%p " ,
__entry - > rep
2017-12-21 00:30:48 +03:00
)
) ;
2018-05-04 22:35:20 +03:00
TRACE_EVENT ( xprtrdma_post_recvs ,
TP_PROTO (
const struct rpcrdma_xprt * r_xprt ,
unsigned int count ,
2017-12-21 00:30:48 +03:00
int status
) ,
2018-05-04 22:35:20 +03:00
TP_ARGS ( r_xprt , count , status ) ,
2017-12-21 00:30:48 +03:00
TP_STRUCT__entry (
2018-05-04 22:35:20 +03:00
__field ( const void * , r_xprt )
__field ( unsigned int , count )
2017-12-21 00:30:48 +03:00
__field ( int , status )
2018-05-04 22:35:20 +03:00
__field ( int , posted )
__string ( addr , rpcrdma_addrstr ( r_xprt ) )
__string ( port , rpcrdma_portstr ( r_xprt ) )
2017-12-21 00:30:48 +03:00
) ,
TP_fast_assign (
2018-05-04 22:35:20 +03:00
__entry - > r_xprt = r_xprt ;
__entry - > count = count ;
2017-12-21 00:30:48 +03:00
__entry - > status = status ;
2020-02-22 01:01:05 +03:00
__entry - > posted = r_xprt - > rx_ep - > re_receive_count ;
2018-05-04 22:35:20 +03:00
__assign_str ( addr , rpcrdma_addrstr ( r_xprt ) ) ;
__assign_str ( port , rpcrdma_portstr ( r_xprt ) ) ;
2017-12-21 00:30:48 +03:00
) ,
2018-05-04 22:35:20 +03:00
TP_printk ( " peer=[%s]:%s r_xprt=%p: %u new recvs, %d active (rc %d) " ,
__get_str ( addr ) , __get_str ( port ) , __entry - > r_xprt ,
__entry - > count , __entry - > posted , __entry - > status
2017-12-21 00:30:48 +03:00
)
) ;
2019-10-09 20:07:21 +03:00
TRACE_EVENT ( xprtrdma_post_linv ,
TP_PROTO (
const struct rpcrdma_req * req ,
int status
) ,
TP_ARGS ( req , status ) ,
TP_STRUCT__entry (
__field ( const void * , req )
__field ( int , status )
__field ( u32 , xid )
) ,
TP_fast_assign (
__entry - > req = req ;
__entry - > status = status ;
__entry - > xid = be32_to_cpu ( req - > rl_slot . rq_xid ) ;
) ,
TP_printk ( " req=%p xid=0x%08x status=%d " ,
__entry - > req , __entry - > xid , __entry - > status
)
) ;
2017-12-21 00:30:40 +03:00
/**
* * Completion events
* */
TRACE_EVENT ( xprtrdma_wc_send ,
TP_PROTO (
const struct rpcrdma_sendctx * sc ,
const struct ib_wc * wc
) ,
TP_ARGS ( sc , wc ) ,
TP_STRUCT__entry (
__field ( const void * , req )
2020-01-03 19:56:32 +03:00
__field ( const void * , sc )
2017-12-21 00:30:40 +03:00
__field ( unsigned int , unmap_count )
__field ( unsigned int , status )
__field ( unsigned int , vendor_err )
) ,
TP_fast_assign (
__entry - > req = sc - > sc_req ;
2020-01-03 19:56:32 +03:00
__entry - > sc = sc ;
2017-12-21 00:30:40 +03:00
__entry - > unmap_count = sc - > sc_unmap_count ;
__entry - > status = wc - > status ;
__entry - > vendor_err = __entry - > status ? wc - > vendor_err : 0 ;
) ,
2020-01-03 19:56:32 +03:00
TP_printk ( " req=%p sc=%p unmapped=%u: %s (%u/0x%x) " ,
__entry - > req , __entry - > sc , __entry - > unmap_count ,
2017-12-21 00:30:40 +03:00
rdma_show_wc_status ( __entry - > status ) ,
__entry - > status , __entry - > vendor_err
)
) ;
2017-12-21 00:30:48 +03:00
TRACE_EVENT ( xprtrdma_wc_receive ,
TP_PROTO (
const struct ib_wc * wc
) ,
2018-05-04 22:35:14 +03:00
TP_ARGS ( wc ) ,
2017-12-21 00:30:48 +03:00
TP_STRUCT__entry (
2019-08-20 01:41:44 +03:00
__field ( const void * , rep )
2018-05-04 22:35:14 +03:00
__field ( u32 , byte_len )
2017-12-21 00:30:48 +03:00
__field ( unsigned int , status )
2018-05-04 22:35:14 +03:00
__field ( u32 , vendor_err )
2017-12-21 00:30:48 +03:00
) ,
TP_fast_assign (
2019-08-20 01:41:44 +03:00
__entry - > rep = container_of ( wc - > wr_cqe , struct rpcrdma_rep ,
rr_cqe ) ;
2017-12-21 00:30:48 +03:00
__entry - > status = wc - > status ;
2018-05-04 22:35:14 +03:00
if ( wc - > status ) {
__entry - > byte_len = 0 ;
__entry - > vendor_err = wc - > vendor_err ;
} else {
__entry - > byte_len = wc - > byte_len ;
__entry - > vendor_err = 0 ;
}
2017-12-21 00:30:48 +03:00
) ,
2019-08-20 01:41:44 +03:00
TP_printk ( " rep=%p %u bytes: %s (%u/0x%x) " ,
__entry - > rep , __entry - > byte_len ,
2017-12-21 00:30:48 +03:00
rdma_show_wc_status ( __entry - > status ) ,
__entry - > status , __entry - > vendor_err
)
) ;
2017-12-21 00:30:56 +03:00
DEFINE_FRWR_DONE_EVENT ( xprtrdma_wc_fastreg ) ;
2017-12-21 00:31:12 +03:00
DEFINE_FRWR_DONE_EVENT ( xprtrdma_wc_li ) ;
DEFINE_FRWR_DONE_EVENT ( xprtrdma_wc_li_wake ) ;
2019-06-19 17:33:10 +03:00
DEFINE_FRWR_DONE_EVENT ( xprtrdma_wc_li_done ) ;
2017-12-21 00:31:12 +03:00
2018-12-19 19:00:06 +03:00
TRACE_EVENT ( xprtrdma_frwr_alloc ,
TP_PROTO (
const struct rpcrdma_mr * mr ,
int rc
) ,
TP_ARGS ( mr , rc ) ,
TP_STRUCT__entry (
2020-02-12 19:12:35 +03:00
__field ( u32 , mr_id )
2018-12-19 19:00:06 +03:00
__field ( int , rc )
) ,
TP_fast_assign (
2020-02-12 19:12:35 +03:00
__entry - > mr_id = mr - > frwr . fr_mr - > res . id ;
__entry - > rc = rc ;
2018-12-19 19:00:06 +03:00
) ,
2020-02-12 19:12:35 +03:00
TP_printk ( " mr.id=%u: rc=%d " ,
__entry - > mr_id , __entry - > rc
2018-12-19 19:00:06 +03:00
)
) ;
TRACE_EVENT ( xprtrdma_frwr_dereg ,
TP_PROTO (
const struct rpcrdma_mr * mr ,
int rc
) ,
TP_ARGS ( mr , rc ) ,
TP_STRUCT__entry (
2020-02-12 19:12:35 +03:00
__field ( u32 , mr_id )
__field ( int , nents )
2018-12-19 19:00:06 +03:00
__field ( u32 , handle )
__field ( u32 , length )
__field ( u64 , offset )
__field ( u32 , dir )
__field ( int , rc )
) ,
TP_fast_assign (
2020-02-12 19:12:35 +03:00
__entry - > mr_id = mr - > frwr . fr_mr - > res . id ;
__entry - > nents = mr - > mr_nents ;
2018-12-19 19:00:06 +03:00
__entry - > handle = mr - > mr_handle ;
__entry - > length = mr - > mr_length ;
__entry - > offset = mr - > mr_offset ;
__entry - > dir = mr - > mr_dir ;
__entry - > rc = rc ;
) ,
2020-02-12 19:12:35 +03:00
TP_printk ( " mr.id=%u nents=%d %u@0x%016llx:0x%08x (%s): rc=%d " ,
__entry - > mr_id , __entry - > nents , __entry - > length ,
2018-12-19 19:00:06 +03:00
( unsigned long long ) __entry - > offset , __entry - > handle ,
xprtrdma_show_direction ( __entry - > dir ) ,
__entry - > rc
)
) ;
TRACE_EVENT ( xprtrdma_frwr_sgerr ,
TP_PROTO (
const struct rpcrdma_mr * mr ,
int sg_nents
) ,
TP_ARGS ( mr , sg_nents ) ,
TP_STRUCT__entry (
2020-02-12 19:12:35 +03:00
__field ( u32 , mr_id )
2018-12-19 19:00:06 +03:00
__field ( u64 , addr )
__field ( u32 , dir )
__field ( int , nents )
) ,
TP_fast_assign (
2020-02-12 19:12:35 +03:00
__entry - > mr_id = mr - > frwr . fr_mr - > res . id ;
2018-12-19 19:00:06 +03:00
__entry - > addr = mr - > mr_sg - > dma_address ;
__entry - > dir = mr - > mr_dir ;
__entry - > nents = sg_nents ;
) ,
2020-02-12 19:12:35 +03:00
TP_printk ( " mr.id=%u DMA addr=0x%llx (%s) sg_nents=%d " ,
__entry - > mr_id , __entry - > addr ,
2018-12-19 19:00:06 +03:00
xprtrdma_show_direction ( __entry - > dir ) ,
__entry - > nents
)
) ;
TRACE_EVENT ( xprtrdma_frwr_maperr ,
TP_PROTO (
const struct rpcrdma_mr * mr ,
int num_mapped
) ,
TP_ARGS ( mr , num_mapped ) ,
TP_STRUCT__entry (
2020-02-12 19:12:35 +03:00
__field ( u32 , mr_id )
2018-12-19 19:00:06 +03:00
__field ( u64 , addr )
__field ( u32 , dir )
__field ( int , num_mapped )
__field ( int , nents )
) ,
TP_fast_assign (
2020-02-12 19:12:35 +03:00
__entry - > mr_id = mr - > frwr . fr_mr - > res . id ;
2018-12-19 19:00:06 +03:00
__entry - > addr = mr - > mr_sg - > dma_address ;
__entry - > dir = mr - > mr_dir ;
__entry - > num_mapped = num_mapped ;
__entry - > nents = mr - > mr_nents ;
) ,
2020-02-12 19:12:35 +03:00
TP_printk ( " mr.id=%u DMA addr=0x%llx (%s) nents=%d of %d " ,
__entry - > mr_id , __entry - > addr ,
2018-12-19 19:00:06 +03:00
xprtrdma_show_direction ( __entry - > dir ) ,
__entry - > num_mapped , __entry - > nents
)
) ;
2018-10-01 21:25:30 +03:00
DEFINE_MR_EVENT ( localinv ) ;
DEFINE_MR_EVENT ( map ) ;
DEFINE_MR_EVENT ( unmap ) ;
2020-02-12 19:12:35 +03:00
DEFINE_MR_EVENT ( reminv ) ;
2018-10-01 21:25:30 +03:00
DEFINE_MR_EVENT ( recycle ) ;
2017-12-21 00:30:56 +03:00
2018-12-19 19:00:06 +03:00
TRACE_EVENT ( xprtrdma_dma_maperr ,
TP_PROTO (
u64 addr
) ,
TP_ARGS ( addr ) ,
TP_STRUCT__entry (
__field ( u64 , addr )
) ,
TP_fast_assign (
__entry - > addr = addr ;
) ,
TP_printk ( " dma addr=0x%llx \n " , __entry - > addr )
) ;
2017-12-21 00:30:48 +03:00
/**
* * Reply events
* */
TRACE_EVENT ( xprtrdma_reply ,
TP_PROTO (
const struct rpc_task * task ,
const struct rpcrdma_rep * rep ,
const struct rpcrdma_req * req ,
unsigned int credits
) ,
TP_ARGS ( task , rep , req , credits ) ,
TP_STRUCT__entry (
__field ( unsigned int , task_id )
__field ( unsigned int , client_id )
__field ( const void * , rep )
__field ( const void * , req )
__field ( u32 , xid )
__field ( unsigned int , credits )
) ,
TP_fast_assign (
__entry - > task_id = task - > tk_pid ;
__entry - > client_id = task - > tk_client - > cl_clid ;
__entry - > rep = rep ;
__entry - > req = req ;
__entry - > xid = be32_to_cpu ( rep - > rr_xid ) ;
__entry - > credits = credits ;
) ,
TP_printk ( " task:%u@%u xid=0x%08x, %u credits, rep=%p -> req=%p " ,
__entry - > task_id , __entry - > client_id , __entry - > xid ,
__entry - > credits , __entry - > rep , __entry - > req
)
) ;
TRACE_EVENT ( xprtrdma_defer_cmp ,
TP_PROTO (
const struct rpcrdma_rep * rep
) ,
TP_ARGS ( rep ) ,
TP_STRUCT__entry (
__field ( unsigned int , task_id )
__field ( unsigned int , client_id )
__field ( const void * , rep )
__field ( u32 , xid )
) ,
TP_fast_assign (
__entry - > task_id = rep - > rr_rqst - > rq_task - > tk_pid ;
__entry - > client_id = rep - > rr_rqst - > rq_task - > tk_client - > cl_clid ;
__entry - > rep = rep ;
__entry - > xid = be32_to_cpu ( rep - > rr_xid ) ;
) ,
TP_printk ( " task:%u@%u xid=0x%08x rep=%p " ,
__entry - > task_id , __entry - > client_id , __entry - > xid ,
__entry - > rep
)
) ;
DEFINE_REPLY_EVENT ( xprtrdma_reply_vers ) ;
DEFINE_REPLY_EVENT ( xprtrdma_reply_rqst ) ;
DEFINE_REPLY_EVENT ( xprtrdma_reply_short ) ;
DEFINE_REPLY_EVENT ( xprtrdma_reply_hdr ) ;
2017-12-21 00:31:04 +03:00
TRACE_EVENT ( xprtrdma_fixup ,
TP_PROTO (
const struct rpc_rqst * rqst ,
2019-10-23 17:02:03 +03:00
unsigned long fixup
2017-12-21 00:31:04 +03:00
) ,
2019-10-23 17:02:03 +03:00
TP_ARGS ( rqst , fixup ) ,
2017-12-21 00:31:04 +03:00
TP_STRUCT__entry (
__field ( unsigned int , task_id )
__field ( unsigned int , client_id )
2019-10-23 17:02:03 +03:00
__field ( unsigned long , fixup )
__field ( size_t , headlen )
__field ( unsigned int , pagelen )
__field ( size_t , taillen )
2017-12-21 00:31:04 +03:00
) ,
TP_fast_assign (
__entry - > task_id = rqst - > rq_task - > tk_pid ;
__entry - > client_id = rqst - > rq_task - > tk_client - > cl_clid ;
2019-10-23 17:02:03 +03:00
__entry - > fixup = fixup ;
__entry - > headlen = rqst - > rq_rcv_buf . head [ 0 ] . iov_len ;
__entry - > pagelen = rqst - > rq_rcv_buf . page_len ;
__entry - > taillen = rqst - > rq_rcv_buf . tail [ 0 ] . iov_len ;
2017-12-21 00:31:04 +03:00
) ,
2019-10-23 17:02:03 +03:00
TP_printk ( " task:%u@%u fixup=%lu xdr=%zu/%u/%zu " ,
__entry - > task_id , __entry - > client_id , __entry - > fixup ,
__entry - > headlen , __entry - > pagelen , __entry - > taillen
2017-12-21 00:31:04 +03:00
)
) ;
TRACE_EVENT ( xprtrdma_decode_seg ,
TP_PROTO (
u32 handle ,
u32 length ,
u64 offset
) ,
TP_ARGS ( handle , length , offset ) ,
TP_STRUCT__entry (
__field ( u32 , handle )
__field ( u32 , length )
__field ( u64 , offset )
) ,
TP_fast_assign (
__entry - > handle = handle ;
__entry - > length = length ;
__entry - > offset = offset ;
) ,
TP_printk ( " %u@0x%016llx:0x%08x " ,
__entry - > length , ( unsigned long long ) __entry - > offset ,
__entry - > handle
)
) ;
2017-12-21 00:31:37 +03:00
/**
* * Callback events
* */
TRACE_EVENT ( xprtrdma_cb_setup ,
TP_PROTO (
const struct rpcrdma_xprt * r_xprt ,
unsigned int reqs
) ,
TP_ARGS ( r_xprt , reqs ) ,
TP_STRUCT__entry (
__field ( const void * , r_xprt )
__field ( unsigned int , reqs )
__string ( addr , rpcrdma_addrstr ( r_xprt ) )
__string ( port , rpcrdma_portstr ( r_xprt ) )
) ,
TP_fast_assign (
__entry - > r_xprt = r_xprt ;
__entry - > reqs = reqs ;
__assign_str ( addr , rpcrdma_addrstr ( r_xprt ) ) ;
__assign_str ( port , rpcrdma_portstr ( r_xprt ) ) ;
) ,
TP_printk ( " peer=[%s]:%s r_xprt=%p: %u reqs " ,
__get_str ( addr ) , __get_str ( port ) ,
__entry - > r_xprt , __entry - > reqs
)
) ;
DEFINE_CB_EVENT ( xprtrdma_cb_call ) ;
DEFINE_CB_EVENT ( xprtrdma_cb_reply ) ;
2018-12-07 19:11:44 +03:00
TRACE_EVENT ( xprtrdma_leaked_rep ,
TP_PROTO (
const struct rpc_rqst * rqst ,
const struct rpcrdma_rep * rep
) ,
TP_ARGS ( rqst , rep ) ,
TP_STRUCT__entry (
__field ( unsigned int , task_id )
__field ( unsigned int , client_id )
__field ( u32 , xid )
__field ( const void * , rep )
) ,
TP_fast_assign (
__entry - > task_id = rqst - > rq_task - > tk_pid ;
__entry - > client_id = rqst - > rq_task - > tk_client - > cl_clid ;
__entry - > xid = be32_to_cpu ( rqst - > rq_xid ) ;
__entry - > rep = rep ;
) ,
TP_printk ( " task:%u@%u xid=0x%08x rep=%p " ,
__entry - > task_id , __entry - > client_id , __entry - > xid ,
__entry - > rep
)
) ;
2018-05-07 22:27:11 +03:00
/**
* * Server - side RPC / RDMA events
* */
2020-04-30 22:25:01 +03:00
DECLARE_EVENT_CLASS ( svcrdma_accept_class ,
TP_PROTO (
const struct svcxprt_rdma * rdma ,
long status
) ,
TP_ARGS ( rdma , status ) ,
TP_STRUCT__entry (
__field ( long , status )
__string ( addr , rdma - > sc_xprt . xpt_remotebuf )
) ,
TP_fast_assign (
__entry - > status = status ;
__assign_str ( addr , rdma - > sc_xprt . xpt_remotebuf ) ;
) ,
TP_printk ( " addr=%s status=%ld " ,
__get_str ( addr ) , __entry - > status
)
) ;
# define DEFINE_ACCEPT_EVENT(name) \
DEFINE_EVENT ( svcrdma_accept_class , svcrdma_ # # name # # _err , \
TP_PROTO ( \
const struct svcxprt_rdma * rdma , \
long status \
) , \
TP_ARGS ( rdma , status ) )
DEFINE_ACCEPT_EVENT ( pd ) ;
DEFINE_ACCEPT_EVENT ( qp ) ;
DEFINE_ACCEPT_EVENT ( fabric ) ;
DEFINE_ACCEPT_EVENT ( initdepth ) ;
DEFINE_ACCEPT_EVENT ( accept ) ;
2018-05-07 22:27:11 +03:00
TRACE_DEFINE_ENUM ( RDMA_MSG ) ;
TRACE_DEFINE_ENUM ( RDMA_NOMSG ) ;
TRACE_DEFINE_ENUM ( RDMA_MSGP ) ;
TRACE_DEFINE_ENUM ( RDMA_DONE ) ;
TRACE_DEFINE_ENUM ( RDMA_ERROR ) ;
# define show_rpcrdma_proc(x) \
__print_symbolic ( x , \
{ RDMA_MSG , " RDMA_MSG " } , \
{ RDMA_NOMSG , " RDMA_NOMSG " } , \
{ RDMA_MSGP , " RDMA_MSGP " } , \
{ RDMA_DONE , " RDMA_DONE " } , \
{ RDMA_ERROR , " RDMA_ERROR " } )
TRACE_EVENT ( svcrdma_decode_rqst ,
TP_PROTO (
2020-04-30 00:16:31 +03:00
const struct svc_rdma_recv_ctxt * ctxt ,
2018-05-07 22:27:11 +03:00
__be32 * p ,
unsigned int hdrlen
) ,
2020-04-30 00:16:31 +03:00
TP_ARGS ( ctxt , p , hdrlen ) ,
2018-05-07 22:27:11 +03:00
TP_STRUCT__entry (
2020-04-30 00:16:31 +03:00
__field ( u32 , cq_id )
__field ( int , completion_id )
2018-05-07 22:27:11 +03:00
__field ( u32 , xid )
__field ( u32 , vers )
__field ( u32 , proc )
__field ( u32 , credits )
__field ( unsigned int , hdrlen )
) ,
TP_fast_assign (
2020-04-30 00:16:31 +03:00
__entry - > cq_id = ctxt - > rc_cid . ci_queue_id ;
__entry - > completion_id = ctxt - > rc_cid . ci_completion_id ;
2018-05-07 22:27:11 +03:00
__entry - > xid = be32_to_cpup ( p + + ) ;
__entry - > vers = be32_to_cpup ( p + + ) ;
__entry - > credits = be32_to_cpup ( p + + ) ;
__entry - > proc = be32_to_cpup ( p ) ;
__entry - > hdrlen = hdrlen ;
) ,
2020-04-30 00:16:31 +03:00
TP_printk ( " cq.id=%u cid=%d xid=0x%08x vers=%u credits=%u proc=%s hdrlen=%u " ,
__entry - > cq_id , __entry - > completion_id ,
2018-05-07 22:27:11 +03:00
__entry - > xid , __entry - > vers , __entry - > credits ,
show_rpcrdma_proc ( __entry - > proc ) , __entry - > hdrlen )
) ;
2020-03-23 23:33:16 +03:00
TRACE_EVENT ( svcrdma_decode_short_err ,
2018-05-07 22:27:11 +03:00
TP_PROTO (
2020-04-30 00:16:31 +03:00
const struct svc_rdma_recv_ctxt * ctxt ,
2018-05-07 22:27:11 +03:00
unsigned int hdrlen
) ,
2020-04-30 00:16:31 +03:00
TP_ARGS ( ctxt , hdrlen ) ,
2018-05-07 22:27:11 +03:00
TP_STRUCT__entry (
2020-04-30 00:16:31 +03:00
__field ( u32 , cq_id )
__field ( int , completion_id )
2018-05-07 22:27:11 +03:00
__field ( unsigned int , hdrlen )
) ,
TP_fast_assign (
2020-04-30 00:16:31 +03:00
__entry - > cq_id = ctxt - > rc_cid . ci_queue_id ;
__entry - > completion_id = ctxt - > rc_cid . ci_completion_id ;
2018-05-07 22:27:11 +03:00
__entry - > hdrlen = hdrlen ;
) ,
2020-04-30 00:16:31 +03:00
TP_printk ( " cq.id=%u cid=%d hdrlen=%u " ,
__entry - > cq_id , __entry - > completion_id ,
__entry - > hdrlen )
2018-05-07 22:27:11 +03:00
) ;
DECLARE_EVENT_CLASS ( svcrdma_badreq_event ,
TP_PROTO (
2020-04-30 00:16:31 +03:00
const struct svc_rdma_recv_ctxt * ctxt ,
2018-05-07 22:27:11 +03:00
__be32 * p
) ,
2020-04-30 00:16:31 +03:00
TP_ARGS ( ctxt , p ) ,
2018-05-07 22:27:11 +03:00
TP_STRUCT__entry (
2020-04-30 00:16:31 +03:00
__field ( u32 , cq_id )
__field ( int , completion_id )
2018-05-07 22:27:11 +03:00
__field ( u32 , xid )
__field ( u32 , vers )
__field ( u32 , proc )
__field ( u32 , credits )
) ,
TP_fast_assign (
2020-04-30 00:16:31 +03:00
__entry - > cq_id = ctxt - > rc_cid . ci_queue_id ;
__entry - > completion_id = ctxt - > rc_cid . ci_completion_id ;
2018-05-07 22:27:11 +03:00
__entry - > xid = be32_to_cpup ( p + + ) ;
__entry - > vers = be32_to_cpup ( p + + ) ;
__entry - > credits = be32_to_cpup ( p + + ) ;
__entry - > proc = be32_to_cpup ( p ) ;
) ,
2020-04-30 00:16:31 +03:00
TP_printk ( " cq.id=%u cid=%d xid=0x%08x vers=%u credits=%u proc=%u " ,
__entry - > cq_id , __entry - > completion_id ,
2018-05-07 22:27:11 +03:00
__entry - > xid , __entry - > vers , __entry - > credits , __entry - > proc )
) ;
# define DEFINE_BADREQ_EVENT(name) \
2020-03-23 23:33:16 +03:00
DEFINE_EVENT ( svcrdma_badreq_event , \
svcrdma_decode_ # # name # # _err , \
2018-05-07 22:27:11 +03:00
TP_PROTO ( \
2020-04-30 00:16:31 +03:00
const struct svc_rdma_recv_ctxt * ctxt , \
2018-05-07 22:27:11 +03:00
__be32 * p \
) , \
2020-04-30 00:16:31 +03:00
TP_ARGS ( ctxt , p ) )
2018-05-07 22:27:11 +03:00
DEFINE_BADREQ_EVENT ( badvers ) ;
DEFINE_BADREQ_EVENT ( drop ) ;
DEFINE_BADREQ_EVENT ( badproc ) ;
DEFINE_BADREQ_EVENT ( parse ) ;
DECLARE_EVENT_CLASS ( svcrdma_segment_event ,
TP_PROTO (
u32 handle ,
u32 length ,
u64 offset
) ,
TP_ARGS ( handle , length , offset ) ,
TP_STRUCT__entry (
__field ( u32 , handle )
__field ( u32 , length )
__field ( u64 , offset )
) ,
TP_fast_assign (
__entry - > handle = handle ;
__entry - > length = length ;
__entry - > offset = offset ;
) ,
TP_printk ( " %u@0x%016llx:0x%08x " ,
__entry - > length , ( unsigned long long ) __entry - > offset ,
__entry - > handle
)
) ;
# define DEFINE_SEGMENT_EVENT(name) \
2020-03-02 23:01:08 +03:00
DEFINE_EVENT ( svcrdma_segment_event , svcrdma_ # # name , \
2018-05-07 22:27:11 +03:00
TP_PROTO ( \
u32 handle , \
u32 length , \
u64 offset \
) , \
TP_ARGS ( handle , length , offset ) )
2020-03-02 23:02:20 +03:00
DEFINE_SEGMENT_EVENT ( send_rseg ) ;
DEFINE_SEGMENT_EVENT ( send_wseg ) ;
2018-05-07 22:27:11 +03:00
2020-06-17 18:50:34 +03:00
TRACE_EVENT ( svcrdma_encode_wseg ,
TP_PROTO (
const struct svc_rdma_send_ctxt * ctxt ,
u32 segno ,
u32 handle ,
u32 length ,
u64 offset
) ,
TP_ARGS ( ctxt , segno , handle , length , offset ) ,
TP_STRUCT__entry (
__field ( u32 , cq_id )
__field ( int , completion_id )
__field ( u32 , segno )
__field ( u32 , handle )
__field ( u32 , length )
__field ( u64 , offset )
) ,
TP_fast_assign (
__entry - > cq_id = ctxt - > sc_cid . ci_queue_id ;
__entry - > completion_id = ctxt - > sc_cid . ci_completion_id ;
__entry - > segno = segno ;
__entry - > handle = handle ;
__entry - > length = length ;
__entry - > offset = offset ;
) ,
TP_printk ( " cq_id=%u cid=%d segno=%u %u@0x%016llx:0x%08x " ,
__entry - > cq_id , __entry - > completion_id ,
__entry - > segno , __entry - > length ,
( unsigned long long ) __entry - > offset , __entry - > handle
)
) ;
2020-06-22 17:15:41 +03:00
TRACE_EVENT ( svcrdma_decode_rseg ,
TP_PROTO (
const struct rpc_rdma_cid * cid ,
const struct svc_rdma_chunk * chunk ,
const struct svc_rdma_segment * segment
) ,
TP_ARGS ( cid , chunk , segment ) ,
TP_STRUCT__entry (
__field ( u32 , cq_id )
__field ( int , completion_id )
__field ( u32 , segno )
__field ( u32 , position )
__field ( u32 , handle )
__field ( u32 , length )
__field ( u64 , offset )
) ,
TP_fast_assign (
__entry - > cq_id = cid - > ci_queue_id ;
__entry - > completion_id = cid - > ci_completion_id ;
__entry - > segno = chunk - > ch_segcount ;
__entry - > position = chunk - > ch_position ;
__entry - > handle = segment - > rs_handle ;
__entry - > length = segment - > rs_length ;
__entry - > offset = segment - > rs_offset ;
) ,
TP_printk ( " cq_id=%u cid=%d segno=%u position=%u %u@0x%016llx:0x%08x " ,
__entry - > cq_id , __entry - > completion_id ,
__entry - > segno , __entry - > position , __entry - > length ,
( unsigned long long ) __entry - > offset , __entry - > handle
)
) ;
TRACE_EVENT ( svcrdma_decode_wseg ,
TP_PROTO (
const struct rpc_rdma_cid * cid ,
const struct svc_rdma_chunk * chunk ,
u32 segno
) ,
TP_ARGS ( cid , chunk , segno ) ,
TP_STRUCT__entry (
__field ( u32 , cq_id )
__field ( int , completion_id )
__field ( u32 , segno )
__field ( u32 , handle )
__field ( u32 , length )
__field ( u64 , offset )
) ,
TP_fast_assign (
const struct svc_rdma_segment * segment =
& chunk - > ch_segments [ segno ] ;
__entry - > cq_id = cid - > ci_queue_id ;
__entry - > completion_id = cid - > ci_completion_id ;
__entry - > segno = segno ;
__entry - > handle = segment - > rs_handle ;
__entry - > length = segment - > rs_length ;
__entry - > offset = segment - > rs_offset ;
) ,
TP_printk ( " cq_id=%u cid=%d segno=%u %u@0x%016llx:0x%08x " ,
__entry - > cq_id , __entry - > completion_id ,
__entry - > segno , __entry - > length ,
( unsigned long long ) __entry - > offset , __entry - > handle
)
) ;
2018-05-07 22:27:11 +03:00
DECLARE_EVENT_CLASS ( svcrdma_chunk_event ,
TP_PROTO (
u32 length
) ,
TP_ARGS ( length ) ,
TP_STRUCT__entry (
__field ( u32 , length )
) ,
TP_fast_assign (
__entry - > length = length ;
) ,
TP_printk ( " length=%u " ,
__entry - > length
)
) ;
# define DEFINE_CHUNK_EVENT(name) \
2020-03-02 23:02:20 +03:00
DEFINE_EVENT ( svcrdma_chunk_event , svcrdma_ # # name , \
2018-05-07 22:27:11 +03:00
TP_PROTO ( \
u32 length \
) , \
TP_ARGS ( length ) )
2020-03-02 23:02:20 +03:00
DEFINE_CHUNK_EVENT ( send_pzr ) ;
DEFINE_CHUNK_EVENT ( encode_write_chunk ) ;
DEFINE_CHUNK_EVENT ( send_write_chunk ) ;
DEFINE_CHUNK_EVENT ( encode_read_chunk ) ;
DEFINE_CHUNK_EVENT ( send_reply_chunk ) ;
2018-05-07 22:27:11 +03:00
2020-03-02 23:02:20 +03:00
TRACE_EVENT ( svcrdma_send_read_chunk ,
2018-05-07 22:27:11 +03:00
TP_PROTO (
u32 length ,
u32 position
) ,
TP_ARGS ( length , position ) ,
TP_STRUCT__entry (
__field ( u32 , length )
__field ( u32 , position )
) ,
TP_fast_assign (
__entry - > length = length ;
__entry - > position = position ;
) ,
TP_printk ( " length=%u position=%u " ,
__entry - > length , __entry - > position
)
) ;
DECLARE_EVENT_CLASS ( svcrdma_error_event ,
TP_PROTO (
__be32 xid
) ,
TP_ARGS ( xid ) ,
TP_STRUCT__entry (
__field ( u32 , xid )
) ,
TP_fast_assign (
__entry - > xid = be32_to_cpu ( xid ) ;
) ,
TP_printk ( " xid=0x%08x " ,
__entry - > xid
)
) ;
# define DEFINE_ERROR_EVENT(name) \
DEFINE_EVENT ( svcrdma_error_event , svcrdma_err_ # # name , \
TP_PROTO ( \
__be32 xid \
) , \
TP_ARGS ( xid ) )
DEFINE_ERROR_EVENT ( vers ) ;
DEFINE_ERROR_EVENT ( chunk ) ;
2018-05-07 22:27:16 +03:00
/**
* * Server - side RDMA API events
* */
2019-10-04 16:58:20 +03:00
DECLARE_EVENT_CLASS ( svcrdma_dma_map_class ,
2018-05-07 22:27:16 +03:00
TP_PROTO (
const struct svcxprt_rdma * rdma ,
2019-10-04 16:58:20 +03:00
u64 dma_addr ,
u32 length
2018-05-07 22:27:16 +03:00
) ,
2019-10-04 16:58:20 +03:00
TP_ARGS ( rdma , dma_addr , length ) ,
2018-05-07 22:27:16 +03:00
TP_STRUCT__entry (
2019-10-04 16:58:20 +03:00
__field ( u64 , dma_addr )
__field ( u32 , length )
2018-05-07 22:27:16 +03:00
__string ( device , rdma - > sc_cm_id - > device - > name )
__string ( addr , rdma - > sc_xprt . xpt_remotebuf )
) ,
TP_fast_assign (
2019-10-04 16:58:20 +03:00
__entry - > dma_addr = dma_addr ;
__entry - > length = length ;
2018-05-07 22:27:16 +03:00
__assign_str ( device , rdma - > sc_cm_id - > device - > name ) ;
__assign_str ( addr , rdma - > sc_xprt . xpt_remotebuf ) ;
) ,
2019-10-04 16:58:20 +03:00
TP_printk ( " addr=%s device=%s dma_addr=%llu length=%u " ,
__get_str ( addr ) , __get_str ( device ) ,
__entry - > dma_addr , __entry - > length
2018-05-07 22:27:16 +03:00
)
) ;
2019-10-04 16:58:20 +03:00
# define DEFINE_SVC_DMA_EVENT(name) \
DEFINE_EVENT ( svcrdma_dma_map_class , svcrdma_ # # name , \
TP_PROTO ( \
const struct svcxprt_rdma * rdma , \
u64 dma_addr , \
u32 length \
) , \
TP_ARGS ( rdma , dma_addr , length ) )
DEFINE_SVC_DMA_EVENT ( dma_map_page ) ;
DEFINE_SVC_DMA_EVENT ( dma_unmap_page ) ;
2020-03-20 21:02:49 +03:00
TRACE_EVENT ( svcrdma_dma_map_rw_err ,
2018-05-07 22:27:16 +03:00
TP_PROTO (
const struct svcxprt_rdma * rdma ,
2020-03-20 21:02:49 +03:00
unsigned int nents ,
2018-05-07 22:27:16 +03:00
int status
) ,
2020-03-20 21:02:49 +03:00
TP_ARGS ( rdma , nents , status ) ,
2018-05-07 22:27:16 +03:00
TP_STRUCT__entry (
__field ( int , status )
2020-03-20 21:02:49 +03:00
__field ( unsigned int , nents )
2018-05-07 22:27:16 +03:00
__string ( device , rdma - > sc_cm_id - > device - > name )
__string ( addr , rdma - > sc_xprt . xpt_remotebuf )
) ,
TP_fast_assign (
__entry - > status = status ;
2020-03-20 21:02:49 +03:00
__entry - > nents = nents ;
2018-05-07 22:27:16 +03:00
__assign_str ( device , rdma - > sc_cm_id - > device - > name ) ;
__assign_str ( addr , rdma - > sc_xprt . xpt_remotebuf ) ;
) ,
2020-03-20 21:02:49 +03:00
TP_printk ( " addr=%s device=%s nents=%u status=%d " ,
__get_str ( addr ) , __get_str ( device ) , __entry - > nents ,
__entry - > status
2018-05-07 22:27:16 +03:00
)
) ;
2020-03-20 21:23:13 +03:00
TRACE_EVENT ( svcrdma_no_rwctx_err ,
TP_PROTO (
const struct svcxprt_rdma * rdma ,
unsigned int num_sges
) ,
TP_ARGS ( rdma , num_sges ) ,
TP_STRUCT__entry (
__field ( unsigned int , num_sges )
__string ( device , rdma - > sc_cm_id - > device - > name )
__string ( addr , rdma - > sc_xprt . xpt_remotebuf )
) ,
TP_fast_assign (
__entry - > num_sges = num_sges ;
__assign_str ( device , rdma - > sc_cm_id - > device - > name ) ;
__assign_str ( addr , rdma - > sc_xprt . xpt_remotebuf ) ;
) ,
TP_printk ( " addr=%s device=%s num_sges=%d " ,
__get_str ( addr ) , __get_str ( device ) , __entry - > num_sges
)
) ;
2020-03-20 21:33:05 +03:00
TRACE_EVENT ( svcrdma_page_overrun_err ,
TP_PROTO (
const struct svcxprt_rdma * rdma ,
const struct svc_rqst * rqst ,
unsigned int pageno
) ,
TP_ARGS ( rdma , rqst , pageno ) ,
TP_STRUCT__entry (
__field ( unsigned int , pageno )
__field ( u32 , xid )
__string ( device , rdma - > sc_cm_id - > device - > name )
__string ( addr , rdma - > sc_xprt . xpt_remotebuf )
) ,
TP_fast_assign (
__entry - > pageno = pageno ;
__entry - > xid = __be32_to_cpu ( rqst - > rq_xid ) ;
__assign_str ( device , rdma - > sc_cm_id - > device - > name ) ;
__assign_str ( addr , rdma - > sc_xprt . xpt_remotebuf ) ;
) ,
TP_printk ( " addr=%s device=%s xid=0x%08x pageno=%u " , __get_str ( addr ) ,
__get_str ( device ) , __entry - > xid , __entry - > pageno
)
) ;
2020-03-20 21:36:44 +03:00
TRACE_EVENT ( svcrdma_small_wrch_err ,
TP_PROTO (
const struct svcxprt_rdma * rdma ,
unsigned int remaining ,
unsigned int seg_no ,
unsigned int num_segs
) ,
TP_ARGS ( rdma , remaining , seg_no , num_segs ) ,
TP_STRUCT__entry (
__field ( unsigned int , remaining )
__field ( unsigned int , seg_no )
__field ( unsigned int , num_segs )
__string ( device , rdma - > sc_cm_id - > device - > name )
__string ( addr , rdma - > sc_xprt . xpt_remotebuf )
) ,
TP_fast_assign (
__entry - > remaining = remaining ;
__entry - > seg_no = seg_no ;
__entry - > num_segs = num_segs ;
__assign_str ( device , rdma - > sc_cm_id - > device - > name ) ;
__assign_str ( addr , rdma - > sc_xprt . xpt_remotebuf ) ;
) ,
TP_printk ( " addr=%s device=%s remaining=%u seg_no=%u num_segs=%u " ,
__get_str ( addr ) , __get_str ( device ) , __entry - > remaining ,
__entry - > seg_no , __entry - > num_segs
)
) ;
2020-03-03 21:28:14 +03:00
TRACE_EVENT ( svcrdma_send_pullup ,
TP_PROTO (
2020-03-13 17:42:11 +03:00
const struct svc_rdma_send_ctxt * ctxt ,
unsigned int msglen
2020-03-03 21:28:14 +03:00
) ,
2020-03-13 17:42:11 +03:00
TP_ARGS ( ctxt , msglen ) ,
2020-03-03 21:28:14 +03:00
TP_STRUCT__entry (
2020-03-13 17:42:11 +03:00
__field ( u32 , cq_id )
__field ( int , completion_id )
__field ( unsigned int , hdrlen )
__field ( unsigned int , msglen )
2020-03-03 21:28:14 +03:00
) ,
TP_fast_assign (
2020-03-13 17:42:11 +03:00
__entry - > cq_id = ctxt - > sc_cid . ci_queue_id ;
__entry - > completion_id = ctxt - > sc_cid . ci_completion_id ;
__entry - > hdrlen = ctxt - > sc_hdrbuf . len ,
__entry - > msglen = msglen ;
2020-03-03 21:28:14 +03:00
) ,
2020-03-13 17:42:11 +03:00
TP_printk ( " cq_id=%u cid=%d hdr=%u msg=%u (total %u) " ,
__entry - > cq_id , __entry - > completion_id ,
__entry - > hdrlen , __entry - > msglen ,
__entry - > hdrlen + __entry - > msglen )
2020-03-03 21:28:14 +03:00
) ;
2020-04-30 21:17:40 +03:00
TRACE_EVENT ( svcrdma_send_err ,
2018-05-07 22:27:16 +03:00
TP_PROTO (
const struct svc_rqst * rqst ,
int status
) ,
TP_ARGS ( rqst , status ) ,
TP_STRUCT__entry (
__field ( int , status )
__field ( u32 , xid )
__string ( addr , rqst - > rq_xprt - > xpt_remotebuf )
) ,
TP_fast_assign (
__entry - > status = status ;
__entry - > xid = __be32_to_cpu ( rqst - > rq_xid ) ;
__assign_str ( addr , rqst - > rq_xprt - > xpt_remotebuf ) ;
) ,
2020-04-30 21:17:40 +03:00
TP_printk ( " addr=%s xid=0x%08x status=%d " , __get_str ( addr ) ,
2018-05-07 22:27:16 +03:00
__entry - > xid , __entry - > status
)
) ;
TRACE_EVENT ( svcrdma_post_send ,
TP_PROTO (
2020-04-29 18:05:33 +03:00
const struct svc_rdma_send_ctxt * ctxt
2018-05-07 22:27:16 +03:00
) ,
2020-04-29 18:05:33 +03:00
TP_ARGS ( ctxt ) ,
2018-05-07 22:27:16 +03:00
TP_STRUCT__entry (
2020-04-29 18:05:33 +03:00
__field ( u32 , cq_id )
__field ( int , completion_id )
2018-05-07 22:27:16 +03:00
__field ( unsigned int , num_sge )
__field ( u32 , inv_rkey )
) ,
TP_fast_assign (
2020-04-29 18:05:33 +03:00
const struct ib_send_wr * wr = & ctxt - > sc_send_wr ;
__entry - > cq_id = ctxt - > sc_cid . ci_queue_id ;
__entry - > completion_id = ctxt - > sc_cid . ci_completion_id ;
2018-05-07 22:27:16 +03:00
__entry - > num_sge = wr - > num_sge ;
__entry - > inv_rkey = ( wr - > opcode = = IB_WR_SEND_WITH_INV ) ?
wr - > ex . invalidate_rkey : 0 ;
) ,
2020-04-29 18:05:33 +03:00
TP_printk ( " cq_id=%u cid=%d num_sge=%u inv_rkey=0x%08x " ,
__entry - > cq_id , __entry - > completion_id ,
__entry - > num_sge , __entry - > inv_rkey
2018-05-07 22:27:16 +03:00
)
) ;
2020-04-30 20:47:07 +03:00
DEFINE_COMPLETION_EVENT ( svcrdma_wc_send ) ;
2018-05-07 22:27:16 +03:00
TRACE_EVENT ( svcrdma_post_recv ,
TP_PROTO (
2020-04-29 23:22:26 +03:00
const struct svc_rdma_recv_ctxt * ctxt
2018-05-07 22:27:16 +03:00
) ,
2020-04-29 23:22:26 +03:00
TP_ARGS ( ctxt ) ,
2018-05-07 22:27:16 +03:00
TP_STRUCT__entry (
2020-04-29 23:22:26 +03:00
__field ( u32 , cq_id )
__field ( int , completion_id )
2018-05-07 22:27:16 +03:00
) ,
TP_fast_assign (
2020-04-29 23:22:26 +03:00
__entry - > cq_id = ctxt - > rc_cid . ci_queue_id ;
__entry - > completion_id = ctxt - > rc_cid . ci_completion_id ;
2018-05-07 22:27:16 +03:00
) ,
2020-04-29 23:22:26 +03:00
TP_printk ( " cq.id=%d cid=%d " ,
__entry - > cq_id , __entry - > completion_id
2018-05-07 22:27:16 +03:00
)
) ;
2020-04-29 23:22:26 +03:00
DEFINE_COMPLETION_EVENT ( svcrdma_wc_receive ) ;
TRACE_EVENT ( svcrdma_rq_post_err ,
2018-05-07 22:27:16 +03:00
TP_PROTO (
2020-04-29 23:22:26 +03:00
const struct svcxprt_rdma * rdma ,
int status
2018-05-07 22:27:16 +03:00
) ,
2020-04-29 23:22:26 +03:00
TP_ARGS ( rdma , status ) ,
2018-05-07 22:27:16 +03:00
TP_STRUCT__entry (
2020-04-29 23:22:26 +03:00
__field ( int , status )
__string ( addr , rdma - > sc_xprt . xpt_remotebuf )
2018-05-07 22:27:16 +03:00
) ,
TP_fast_assign (
2020-04-29 23:22:26 +03:00
__entry - > status = status ;
__assign_str ( addr , rdma - > sc_xprt . xpt_remotebuf ) ;
2018-05-07 22:27:16 +03:00
) ,
2020-04-29 23:22:26 +03:00
TP_printk ( " addr=%s status=%d " ,
__get_str ( addr ) , __entry - > status
2018-05-07 22:27:16 +03:00
)
) ;
2020-04-30 00:25:36 +03:00
TRACE_EVENT ( svcrdma_post_chunk ,
2018-05-07 22:27:16 +03:00
TP_PROTO (
2020-04-30 00:25:36 +03:00
const struct rpc_rdma_cid * cid ,
2020-03-30 21:27:37 +03:00
int sqecount
2018-05-07 22:27:16 +03:00
) ,
2020-04-30 00:25:36 +03:00
TP_ARGS ( cid , sqecount ) ,
2018-05-07 22:27:16 +03:00
TP_STRUCT__entry (
2020-04-30 00:25:36 +03:00
__field ( u32 , cq_id )
__field ( int , completion_id )
2018-05-07 22:27:16 +03:00
__field ( int , sqecount )
) ,
TP_fast_assign (
2020-04-30 00:25:36 +03:00
__entry - > cq_id = cid - > ci_queue_id ;
__entry - > completion_id = cid - > ci_completion_id ;
2018-05-07 22:27:16 +03:00
__entry - > sqecount = sqecount ;
) ,
2020-04-30 00:25:36 +03:00
TP_printk ( " cq.id=%u cid=%d sqecount=%d " ,
__entry - > cq_id , __entry - > completion_id ,
__entry - > sqecount
2018-05-07 22:27:16 +03:00
)
) ;
2020-04-30 00:25:36 +03:00
DEFINE_COMPLETION_EVENT ( svcrdma_wc_read ) ;
DEFINE_COMPLETION_EVENT ( svcrdma_wc_write ) ;
2018-05-07 22:27:16 +03:00
TRACE_EVENT ( svcrdma_qp_error ,
TP_PROTO (
const struct ib_event * event ,
const struct sockaddr * sap
) ,
TP_ARGS ( event , sap ) ,
TP_STRUCT__entry (
__field ( unsigned int , event )
__string ( device , event - > device - > name )
__array ( __u8 , addr , INET6_ADDRSTRLEN + 10 )
) ,
TP_fast_assign (
__entry - > event = event - > event ;
__assign_str ( device , event - > device - > name ) ;
snprintf ( __entry - > addr , sizeof ( __entry - > addr ) - 1 ,
" %pISpc " , sap ) ;
) ,
TP_printk ( " addr=%s dev=%s event=%s (%u) " ,
__entry - > addr , __get_str ( device ) ,
rdma_show_ib_event ( __entry - > event ) , __entry - > event
)
) ;
DECLARE_EVENT_CLASS ( svcrdma_sendqueue_event ,
TP_PROTO (
const struct svcxprt_rdma * rdma
) ,
TP_ARGS ( rdma ) ,
TP_STRUCT__entry (
__field ( int , avail )
__field ( int , depth )
__string ( addr , rdma - > sc_xprt . xpt_remotebuf )
) ,
TP_fast_assign (
__entry - > avail = atomic_read ( & rdma - > sc_sq_avail ) ;
__entry - > depth = rdma - > sc_sq_depth ;
__assign_str ( addr , rdma - > sc_xprt . xpt_remotebuf ) ;
) ,
TP_printk ( " addr=%s sc_sq_avail=%d/%d " ,
__get_str ( addr ) , __entry - > avail , __entry - > depth
)
) ;
# define DEFINE_SQ_EVENT(name) \
DEFINE_EVENT ( svcrdma_sendqueue_event , svcrdma_sq_ # # name , \
TP_PROTO ( \
const struct svcxprt_rdma * rdma \
) , \
TP_ARGS ( rdma ) )
DEFINE_SQ_EVENT ( full ) ;
DEFINE_SQ_EVENT ( retry ) ;
2020-03-30 21:27:37 +03:00
TRACE_EVENT ( svcrdma_sq_post_err ,
TP_PROTO (
const struct svcxprt_rdma * rdma ,
int status
) ,
TP_ARGS ( rdma , status ) ,
TP_STRUCT__entry (
__field ( int , avail )
__field ( int , depth )
__field ( int , status )
__string ( addr , rdma - > sc_xprt . xpt_remotebuf )
) ,
TP_fast_assign (
__entry - > avail = atomic_read ( & rdma - > sc_sq_avail ) ;
__entry - > depth = rdma - > sc_sq_depth ;
__entry - > status = status ;
__assign_str ( addr , rdma - > sc_xprt . xpt_remotebuf ) ;
) ,
TP_printk ( " addr=%s sc_sq_avail=%d/%d status=%d " ,
__get_str ( addr ) , __entry - > avail , __entry - > depth ,
__entry - > status
)
) ;
2018-01-20 19:16:34 +03:00
# endif /* _TRACE_RPCRDMA_H */
# include <trace/define_trace.h>