1*4d60cad5SIra Weiny /* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */ 2*4d60cad5SIra Weiny 3*4d60cad5SIra Weiny /* 4*4d60cad5SIra Weiny * Copyright (c) 2018 Intel Corporation. All rights reserved. 5*4d60cad5SIra Weiny */ 6*4d60cad5SIra Weiny 7*4d60cad5SIra Weiny #undef TRACE_SYSTEM 8*4d60cad5SIra Weiny #define TRACE_SYSTEM ib_mad 9*4d60cad5SIra Weiny 10*4d60cad5SIra Weiny #if !defined(_TRACE_IB_MAD_H) || defined(TRACE_HEADER_MULTI_READ) 11*4d60cad5SIra Weiny #define _TRACE_IB_MAD_H 12*4d60cad5SIra Weiny 13*4d60cad5SIra Weiny #include <linux/tracepoint.h> 14*4d60cad5SIra Weiny #include <rdma/ib_mad.h> 15*4d60cad5SIra Weiny 16*4d60cad5SIra Weiny #ifdef CONFIG_TRACEPOINTS 17*4d60cad5SIra Weiny struct trace_event_raw_ib_mad_send_template; 18*4d60cad5SIra Weiny static void create_mad_addr_info(struct ib_mad_send_wr_private *mad_send_wr, 19*4d60cad5SIra Weiny struct ib_mad_qp_info *qp_info, 20*4d60cad5SIra Weiny struct trace_event_raw_ib_mad_send_template *entry); 21*4d60cad5SIra Weiny #endif 22*4d60cad5SIra Weiny 23*4d60cad5SIra Weiny DECLARE_EVENT_CLASS(ib_mad_send_template, 24*4d60cad5SIra Weiny TP_PROTO(struct ib_mad_send_wr_private *wr, 25*4d60cad5SIra Weiny struct ib_mad_qp_info *qp_info), 26*4d60cad5SIra Weiny TP_ARGS(wr, qp_info), 27*4d60cad5SIra Weiny 28*4d60cad5SIra Weiny TP_STRUCT__entry( 29*4d60cad5SIra Weiny __field(u8, base_version) 30*4d60cad5SIra Weiny __field(u8, mgmt_class) 31*4d60cad5SIra Weiny __field(u8, class_version) 32*4d60cad5SIra Weiny __field(u8, port_num) 33*4d60cad5SIra Weiny __field(u32, qp_num) 34*4d60cad5SIra Weiny __field(u8, method) 35*4d60cad5SIra Weiny __field(u8, sl) 36*4d60cad5SIra Weiny __field(u16, attr_id) 37*4d60cad5SIra Weiny __field(u32, attr_mod) 38*4d60cad5SIra Weiny __field(u64, wrtid) 39*4d60cad5SIra Weiny __field(u64, tid) 40*4d60cad5SIra Weiny __field(u16, status) 41*4d60cad5SIra Weiny __field(u16, class_specific) 42*4d60cad5SIra Weiny __field(u32, length) 43*4d60cad5SIra Weiny __field(u32, dlid) 44*4d60cad5SIra Weiny __field(u32, rqpn) 45*4d60cad5SIra Weiny __field(u32, rqkey) 46*4d60cad5SIra Weiny __field(u32, dev_index) 47*4d60cad5SIra Weiny __field(void *, agent_priv) 48*4d60cad5SIra Weiny __field(unsigned long, timeout) 49*4d60cad5SIra Weiny __field(int, retries_left) 50*4d60cad5SIra Weiny __field(int, max_retries) 51*4d60cad5SIra Weiny __field(int, retry) 52*4d60cad5SIra Weiny __field(u16, pkey) 53*4d60cad5SIra Weiny ), 54*4d60cad5SIra Weiny 55*4d60cad5SIra Weiny TP_fast_assign( 56*4d60cad5SIra Weiny __entry->dev_index = wr->mad_agent_priv->agent.device->index; 57*4d60cad5SIra Weiny __entry->port_num = wr->mad_agent_priv->agent.port_num; 58*4d60cad5SIra Weiny __entry->qp_num = wr->mad_agent_priv->qp_info->qp->qp_num; 59*4d60cad5SIra Weiny __entry->agent_priv = wr->mad_agent_priv; 60*4d60cad5SIra Weiny __entry->wrtid = wr->tid; 61*4d60cad5SIra Weiny __entry->max_retries = wr->max_retries; 62*4d60cad5SIra Weiny __entry->retries_left = wr->retries_left; 63*4d60cad5SIra Weiny __entry->retry = wr->retry; 64*4d60cad5SIra Weiny __entry->timeout = wr->timeout; 65*4d60cad5SIra Weiny __entry->length = wr->send_buf.hdr_len + 66*4d60cad5SIra Weiny wr->send_buf.data_len; 67*4d60cad5SIra Weiny __entry->base_version = 68*4d60cad5SIra Weiny ((struct ib_mad_hdr *)wr->send_buf.mad)->base_version; 69*4d60cad5SIra Weiny __entry->mgmt_class = 70*4d60cad5SIra Weiny ((struct ib_mad_hdr *)wr->send_buf.mad)->mgmt_class; 71*4d60cad5SIra Weiny __entry->class_version = 72*4d60cad5SIra Weiny ((struct ib_mad_hdr *)wr->send_buf.mad)->class_version; 73*4d60cad5SIra Weiny __entry->method = 74*4d60cad5SIra Weiny ((struct ib_mad_hdr *)wr->send_buf.mad)->method; 75*4d60cad5SIra Weiny __entry->status = 76*4d60cad5SIra Weiny ((struct ib_mad_hdr *)wr->send_buf.mad)->status; 77*4d60cad5SIra Weiny __entry->class_specific = 78*4d60cad5SIra Weiny ((struct ib_mad_hdr *)wr->send_buf.mad)->class_specific; 79*4d60cad5SIra Weiny __entry->tid = ((struct ib_mad_hdr *)wr->send_buf.mad)->tid; 80*4d60cad5SIra Weiny __entry->attr_id = 81*4d60cad5SIra Weiny ((struct ib_mad_hdr *)wr->send_buf.mad)->attr_id; 82*4d60cad5SIra Weiny __entry->attr_mod = 83*4d60cad5SIra Weiny ((struct ib_mad_hdr *)wr->send_buf.mad)->attr_mod; 84*4d60cad5SIra Weiny create_mad_addr_info(wr, qp_info, __entry); 85*4d60cad5SIra Weiny ), 86*4d60cad5SIra Weiny 87*4d60cad5SIra Weiny TP_printk("%d:%d QP%d agent %p: " \ 88*4d60cad5SIra Weiny "wrtid 0x%llx; %d/%d retries(%d); timeout %lu length %d : " \ 89*4d60cad5SIra Weiny "hdr : base_ver 0x%x class 0x%x class_ver 0x%x " \ 90*4d60cad5SIra Weiny "method 0x%x status 0x%x class_specific 0x%x tid 0x%llx " \ 91*4d60cad5SIra Weiny "attr_id 0x%x attr_mod 0x%x => dlid 0x%08x sl %d "\ 92*4d60cad5SIra Weiny "pkey 0x%x rpqn 0x%x rqpkey 0x%x", 93*4d60cad5SIra Weiny __entry->dev_index, __entry->port_num, __entry->qp_num, 94*4d60cad5SIra Weiny __entry->agent_priv, be64_to_cpu(__entry->wrtid), 95*4d60cad5SIra Weiny __entry->retries_left, __entry->max_retries, 96*4d60cad5SIra Weiny __entry->retry, __entry->timeout, __entry->length, 97*4d60cad5SIra Weiny __entry->base_version, __entry->mgmt_class, 98*4d60cad5SIra Weiny __entry->class_version, 99*4d60cad5SIra Weiny __entry->method, be16_to_cpu(__entry->status), 100*4d60cad5SIra Weiny be16_to_cpu(__entry->class_specific), 101*4d60cad5SIra Weiny be64_to_cpu(__entry->tid), be16_to_cpu(__entry->attr_id), 102*4d60cad5SIra Weiny be32_to_cpu(__entry->attr_mod), 103*4d60cad5SIra Weiny be32_to_cpu(__entry->dlid), __entry->sl, __entry->pkey, 104*4d60cad5SIra Weiny __entry->rqpn, __entry->rqkey 105*4d60cad5SIra Weiny ) 106*4d60cad5SIra Weiny ); 107*4d60cad5SIra Weiny 108*4d60cad5SIra Weiny DEFINE_EVENT(ib_mad_send_template, ib_mad_error_handler, 109*4d60cad5SIra Weiny TP_PROTO(struct ib_mad_send_wr_private *wr, 110*4d60cad5SIra Weiny struct ib_mad_qp_info *qp_info), 111*4d60cad5SIra Weiny TP_ARGS(wr, qp_info)); 112*4d60cad5SIra Weiny DEFINE_EVENT(ib_mad_send_template, ib_mad_ib_send_mad, 113*4d60cad5SIra Weiny TP_PROTO(struct ib_mad_send_wr_private *wr, 114*4d60cad5SIra Weiny struct ib_mad_qp_info *qp_info), 115*4d60cad5SIra Weiny TP_ARGS(wr, qp_info)); 116*4d60cad5SIra Weiny DEFINE_EVENT(ib_mad_send_template, ib_mad_send_done_resend, 117*4d60cad5SIra Weiny TP_PROTO(struct ib_mad_send_wr_private *wr, 118*4d60cad5SIra Weiny struct ib_mad_qp_info *qp_info), 119*4d60cad5SIra Weiny TP_ARGS(wr, qp_info)); 120*4d60cad5SIra Weiny 121*4d60cad5SIra Weiny TRACE_EVENT(ib_mad_send_done_handler, 122*4d60cad5SIra Weiny TP_PROTO(struct ib_mad_send_wr_private *wr, struct ib_wc *wc), 123*4d60cad5SIra Weiny TP_ARGS(wr, wc), 124*4d60cad5SIra Weiny 125*4d60cad5SIra Weiny TP_STRUCT__entry( 126*4d60cad5SIra Weiny __field(u8, port_num) 127*4d60cad5SIra Weiny __field(u8, base_version) 128*4d60cad5SIra Weiny __field(u8, mgmt_class) 129*4d60cad5SIra Weiny __field(u8, class_version) 130*4d60cad5SIra Weiny __field(u32, qp_num) 131*4d60cad5SIra Weiny __field(u64, wrtid) 132*4d60cad5SIra Weiny __field(u16, status) 133*4d60cad5SIra Weiny __field(u16, wc_status) 134*4d60cad5SIra Weiny __field(u32, length) 135*4d60cad5SIra Weiny __field(void *, agent_priv) 136*4d60cad5SIra Weiny __field(unsigned long, timeout) 137*4d60cad5SIra Weiny __field(u32, dev_index) 138*4d60cad5SIra Weiny __field(int, retries_left) 139*4d60cad5SIra Weiny __field(int, max_retries) 140*4d60cad5SIra Weiny __field(int, retry) 141*4d60cad5SIra Weiny __field(u8, method) 142*4d60cad5SIra Weiny ), 143*4d60cad5SIra Weiny 144*4d60cad5SIra Weiny TP_fast_assign( 145*4d60cad5SIra Weiny __entry->dev_index = wr->mad_agent_priv->agent.device->index; 146*4d60cad5SIra Weiny __entry->port_num = wr->mad_agent_priv->agent.port_num; 147*4d60cad5SIra Weiny __entry->qp_num = wr->mad_agent_priv->qp_info->qp->qp_num; 148*4d60cad5SIra Weiny __entry->agent_priv = wr->mad_agent_priv; 149*4d60cad5SIra Weiny __entry->wrtid = wr->tid; 150*4d60cad5SIra Weiny __entry->max_retries = wr->max_retries; 151*4d60cad5SIra Weiny __entry->retries_left = wr->retries_left; 152*4d60cad5SIra Weiny __entry->retry = wr->retry; 153*4d60cad5SIra Weiny __entry->timeout = wr->timeout; 154*4d60cad5SIra Weiny __entry->base_version = 155*4d60cad5SIra Weiny ((struct ib_mad_hdr *)wr->send_buf.mad)->base_version; 156*4d60cad5SIra Weiny __entry->mgmt_class = 157*4d60cad5SIra Weiny ((struct ib_mad_hdr *)wr->send_buf.mad)->mgmt_class; 158*4d60cad5SIra Weiny __entry->class_version = 159*4d60cad5SIra Weiny ((struct ib_mad_hdr *)wr->send_buf.mad)->class_version; 160*4d60cad5SIra Weiny __entry->method = 161*4d60cad5SIra Weiny ((struct ib_mad_hdr *)wr->send_buf.mad)->method; 162*4d60cad5SIra Weiny __entry->status = 163*4d60cad5SIra Weiny ((struct ib_mad_hdr *)wr->send_buf.mad)->status; 164*4d60cad5SIra Weiny __entry->wc_status = wc->status; 165*4d60cad5SIra Weiny __entry->length = wc->byte_len; 166*4d60cad5SIra Weiny ), 167*4d60cad5SIra Weiny 168*4d60cad5SIra Weiny TP_printk("%d:%d QP%d : SEND WC Status %d : agent %p: " \ 169*4d60cad5SIra Weiny "wrtid 0x%llx %d/%d retries(%d) timeout %lu length %d: " \ 170*4d60cad5SIra Weiny "hdr : base_ver 0x%x class 0x%x class_ver 0x%x " \ 171*4d60cad5SIra Weiny "method 0x%x status 0x%x", 172*4d60cad5SIra Weiny __entry->dev_index, __entry->port_num, __entry->qp_num, 173*4d60cad5SIra Weiny __entry->wc_status, 174*4d60cad5SIra Weiny __entry->agent_priv, be64_to_cpu(__entry->wrtid), 175*4d60cad5SIra Weiny __entry->retries_left, __entry->max_retries, 176*4d60cad5SIra Weiny __entry->retry, __entry->timeout, 177*4d60cad5SIra Weiny __entry->length, 178*4d60cad5SIra Weiny __entry->base_version, __entry->mgmt_class, 179*4d60cad5SIra Weiny __entry->class_version, __entry->method, 180*4d60cad5SIra Weiny be16_to_cpu(__entry->status) 181*4d60cad5SIra Weiny ) 182*4d60cad5SIra Weiny ); 183*4d60cad5SIra Weiny 184*4d60cad5SIra Weiny 185*4d60cad5SIra Weiny #endif /* _TRACE_IB_MAD_H */ 186*4d60cad5SIra Weiny 187*4d60cad5SIra Weiny #include <trace/define_trace.h> 188