1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */ 2*4882a593Smuzhiyun 3*4882a593Smuzhiyun /* 4*4882a593Smuzhiyun * Copyright (c) 2018 Intel Corporation. All rights reserved. 5*4882a593Smuzhiyun */ 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun #undef TRACE_SYSTEM 8*4882a593Smuzhiyun #define TRACE_SYSTEM ib_mad 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun #if !defined(_TRACE_IB_MAD_H) || defined(TRACE_HEADER_MULTI_READ) 11*4882a593Smuzhiyun #define _TRACE_IB_MAD_H 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun #include <linux/tracepoint.h> 14*4882a593Smuzhiyun #include <rdma/ib_mad.h> 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun #ifdef CONFIG_TRACEPOINTS 17*4882a593Smuzhiyun struct trace_event_raw_ib_mad_send_template; 18*4882a593Smuzhiyun static void create_mad_addr_info(struct ib_mad_send_wr_private *mad_send_wr, 19*4882a593Smuzhiyun struct ib_mad_qp_info *qp_info, 20*4882a593Smuzhiyun struct trace_event_raw_ib_mad_send_template *entry); 21*4882a593Smuzhiyun #endif 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun DECLARE_EVENT_CLASS(ib_mad_send_template, 24*4882a593Smuzhiyun TP_PROTO(struct ib_mad_send_wr_private *wr, 25*4882a593Smuzhiyun struct ib_mad_qp_info *qp_info), 26*4882a593Smuzhiyun TP_ARGS(wr, qp_info), 27*4882a593Smuzhiyun 28*4882a593Smuzhiyun TP_STRUCT__entry( 29*4882a593Smuzhiyun __field(u8, base_version) 30*4882a593Smuzhiyun __field(u8, mgmt_class) 31*4882a593Smuzhiyun __field(u8, class_version) 32*4882a593Smuzhiyun __field(u8, port_num) 33*4882a593Smuzhiyun __field(u32, qp_num) 34*4882a593Smuzhiyun __field(u8, method) 35*4882a593Smuzhiyun __field(u8, sl) 36*4882a593Smuzhiyun __field(u16, attr_id) 37*4882a593Smuzhiyun __field(u32, attr_mod) 38*4882a593Smuzhiyun __field(u64, wrtid) 39*4882a593Smuzhiyun __field(u64, tid) 40*4882a593Smuzhiyun __field(u16, status) 41*4882a593Smuzhiyun __field(u16, class_specific) 42*4882a593Smuzhiyun __field(u32, length) 43*4882a593Smuzhiyun __field(u32, dlid) 44*4882a593Smuzhiyun __field(u32, rqpn) 45*4882a593Smuzhiyun __field(u32, rqkey) 46*4882a593Smuzhiyun __field(u32, dev_index) 47*4882a593Smuzhiyun __field(void *, agent_priv) 48*4882a593Smuzhiyun __field(unsigned long, timeout) 49*4882a593Smuzhiyun __field(int, retries_left) 50*4882a593Smuzhiyun __field(int, max_retries) 51*4882a593Smuzhiyun __field(int, retry) 52*4882a593Smuzhiyun __field(u16, pkey) 53*4882a593Smuzhiyun ), 54*4882a593Smuzhiyun 55*4882a593Smuzhiyun TP_fast_assign( 56*4882a593Smuzhiyun __entry->dev_index = wr->mad_agent_priv->agent.device->index; 57*4882a593Smuzhiyun __entry->port_num = wr->mad_agent_priv->agent.port_num; 58*4882a593Smuzhiyun __entry->qp_num = wr->mad_agent_priv->qp_info->qp->qp_num; 59*4882a593Smuzhiyun __entry->agent_priv = wr->mad_agent_priv; 60*4882a593Smuzhiyun __entry->wrtid = wr->tid; 61*4882a593Smuzhiyun __entry->max_retries = wr->max_retries; 62*4882a593Smuzhiyun __entry->retries_left = wr->retries_left; 63*4882a593Smuzhiyun __entry->retry = wr->retry; 64*4882a593Smuzhiyun __entry->timeout = wr->timeout; 65*4882a593Smuzhiyun __entry->length = wr->send_buf.hdr_len + 66*4882a593Smuzhiyun wr->send_buf.data_len; 67*4882a593Smuzhiyun __entry->base_version = 68*4882a593Smuzhiyun ((struct ib_mad_hdr *)wr->send_buf.mad)->base_version; 69*4882a593Smuzhiyun __entry->mgmt_class = 70*4882a593Smuzhiyun ((struct ib_mad_hdr *)wr->send_buf.mad)->mgmt_class; 71*4882a593Smuzhiyun __entry->class_version = 72*4882a593Smuzhiyun ((struct ib_mad_hdr *)wr->send_buf.mad)->class_version; 73*4882a593Smuzhiyun __entry->method = 74*4882a593Smuzhiyun ((struct ib_mad_hdr *)wr->send_buf.mad)->method; 75*4882a593Smuzhiyun __entry->status = 76*4882a593Smuzhiyun ((struct ib_mad_hdr *)wr->send_buf.mad)->status; 77*4882a593Smuzhiyun __entry->class_specific = 78*4882a593Smuzhiyun ((struct ib_mad_hdr *)wr->send_buf.mad)->class_specific; 79*4882a593Smuzhiyun __entry->tid = ((struct ib_mad_hdr *)wr->send_buf.mad)->tid; 80*4882a593Smuzhiyun __entry->attr_id = 81*4882a593Smuzhiyun ((struct ib_mad_hdr *)wr->send_buf.mad)->attr_id; 82*4882a593Smuzhiyun __entry->attr_mod = 83*4882a593Smuzhiyun ((struct ib_mad_hdr *)wr->send_buf.mad)->attr_mod; 84*4882a593Smuzhiyun create_mad_addr_info(wr, qp_info, __entry); 85*4882a593Smuzhiyun ), 86*4882a593Smuzhiyun 87*4882a593Smuzhiyun TP_printk("%d:%d QP%d agent %p: " \ 88*4882a593Smuzhiyun "wrtid 0x%llx; %d/%d retries(%d); timeout %lu length %d : " \ 89*4882a593Smuzhiyun "hdr : base_ver 0x%x class 0x%x class_ver 0x%x " \ 90*4882a593Smuzhiyun "method 0x%x status 0x%x class_specific 0x%x tid 0x%llx " \ 91*4882a593Smuzhiyun "attr_id 0x%x attr_mod 0x%x => dlid 0x%08x sl %d "\ 92*4882a593Smuzhiyun "pkey 0x%x rpqn 0x%x rqpkey 0x%x", 93*4882a593Smuzhiyun __entry->dev_index, __entry->port_num, __entry->qp_num, 94*4882a593Smuzhiyun __entry->agent_priv, be64_to_cpu(__entry->wrtid), 95*4882a593Smuzhiyun __entry->retries_left, __entry->max_retries, 96*4882a593Smuzhiyun __entry->retry, __entry->timeout, __entry->length, 97*4882a593Smuzhiyun __entry->base_version, __entry->mgmt_class, 98*4882a593Smuzhiyun __entry->class_version, 99*4882a593Smuzhiyun __entry->method, be16_to_cpu(__entry->status), 100*4882a593Smuzhiyun be16_to_cpu(__entry->class_specific), 101*4882a593Smuzhiyun be64_to_cpu(__entry->tid), be16_to_cpu(__entry->attr_id), 102*4882a593Smuzhiyun be32_to_cpu(__entry->attr_mod), 103*4882a593Smuzhiyun be32_to_cpu(__entry->dlid), __entry->sl, __entry->pkey, 104*4882a593Smuzhiyun __entry->rqpn, __entry->rqkey 105*4882a593Smuzhiyun ) 106*4882a593Smuzhiyun ); 107*4882a593Smuzhiyun 108*4882a593Smuzhiyun DEFINE_EVENT(ib_mad_send_template, ib_mad_error_handler, 109*4882a593Smuzhiyun TP_PROTO(struct ib_mad_send_wr_private *wr, 110*4882a593Smuzhiyun struct ib_mad_qp_info *qp_info), 111*4882a593Smuzhiyun TP_ARGS(wr, qp_info)); 112*4882a593Smuzhiyun DEFINE_EVENT(ib_mad_send_template, ib_mad_ib_send_mad, 113*4882a593Smuzhiyun TP_PROTO(struct ib_mad_send_wr_private *wr, 114*4882a593Smuzhiyun struct ib_mad_qp_info *qp_info), 115*4882a593Smuzhiyun TP_ARGS(wr, qp_info)); 116*4882a593Smuzhiyun DEFINE_EVENT(ib_mad_send_template, ib_mad_send_done_resend, 117*4882a593Smuzhiyun TP_PROTO(struct ib_mad_send_wr_private *wr, 118*4882a593Smuzhiyun struct ib_mad_qp_info *qp_info), 119*4882a593Smuzhiyun TP_ARGS(wr, qp_info)); 120*4882a593Smuzhiyun 121*4882a593Smuzhiyun TRACE_EVENT(ib_mad_send_done_handler, 122*4882a593Smuzhiyun TP_PROTO(struct ib_mad_send_wr_private *wr, struct ib_wc *wc), 123*4882a593Smuzhiyun TP_ARGS(wr, wc), 124*4882a593Smuzhiyun 125*4882a593Smuzhiyun TP_STRUCT__entry( 126*4882a593Smuzhiyun __field(u8, port_num) 127*4882a593Smuzhiyun __field(u8, base_version) 128*4882a593Smuzhiyun __field(u8, mgmt_class) 129*4882a593Smuzhiyun __field(u8, class_version) 130*4882a593Smuzhiyun __field(u32, qp_num) 131*4882a593Smuzhiyun __field(u64, wrtid) 132*4882a593Smuzhiyun __field(u16, status) 133*4882a593Smuzhiyun __field(u16, wc_status) 134*4882a593Smuzhiyun __field(u32, length) 135*4882a593Smuzhiyun __field(void *, agent_priv) 136*4882a593Smuzhiyun __field(unsigned long, timeout) 137*4882a593Smuzhiyun __field(u32, dev_index) 138*4882a593Smuzhiyun __field(int, retries_left) 139*4882a593Smuzhiyun __field(int, max_retries) 140*4882a593Smuzhiyun __field(int, retry) 141*4882a593Smuzhiyun __field(u8, method) 142*4882a593Smuzhiyun ), 143*4882a593Smuzhiyun 144*4882a593Smuzhiyun TP_fast_assign( 145*4882a593Smuzhiyun __entry->dev_index = wr->mad_agent_priv->agent.device->index; 146*4882a593Smuzhiyun __entry->port_num = wr->mad_agent_priv->agent.port_num; 147*4882a593Smuzhiyun __entry->qp_num = wr->mad_agent_priv->qp_info->qp->qp_num; 148*4882a593Smuzhiyun __entry->agent_priv = wr->mad_agent_priv; 149*4882a593Smuzhiyun __entry->wrtid = wr->tid; 150*4882a593Smuzhiyun __entry->max_retries = wr->max_retries; 151*4882a593Smuzhiyun __entry->retries_left = wr->retries_left; 152*4882a593Smuzhiyun __entry->retry = wr->retry; 153*4882a593Smuzhiyun __entry->timeout = wr->timeout; 154*4882a593Smuzhiyun __entry->base_version = 155*4882a593Smuzhiyun ((struct ib_mad_hdr *)wr->send_buf.mad)->base_version; 156*4882a593Smuzhiyun __entry->mgmt_class = 157*4882a593Smuzhiyun ((struct ib_mad_hdr *)wr->send_buf.mad)->mgmt_class; 158*4882a593Smuzhiyun __entry->class_version = 159*4882a593Smuzhiyun ((struct ib_mad_hdr *)wr->send_buf.mad)->class_version; 160*4882a593Smuzhiyun __entry->method = 161*4882a593Smuzhiyun ((struct ib_mad_hdr *)wr->send_buf.mad)->method; 162*4882a593Smuzhiyun __entry->status = 163*4882a593Smuzhiyun ((struct ib_mad_hdr *)wr->send_buf.mad)->status; 164*4882a593Smuzhiyun __entry->wc_status = wc->status; 165*4882a593Smuzhiyun __entry->length = wc->byte_len; 166*4882a593Smuzhiyun ), 167*4882a593Smuzhiyun 168*4882a593Smuzhiyun TP_printk("%d:%d QP%d : SEND WC Status %d : agent %p: " \ 169*4882a593Smuzhiyun "wrtid 0x%llx %d/%d retries(%d) timeout %lu length %d: " \ 170*4882a593Smuzhiyun "hdr : base_ver 0x%x class 0x%x class_ver 0x%x " \ 171*4882a593Smuzhiyun "method 0x%x status 0x%x", 172*4882a593Smuzhiyun __entry->dev_index, __entry->port_num, __entry->qp_num, 173*4882a593Smuzhiyun __entry->wc_status, 174*4882a593Smuzhiyun __entry->agent_priv, be64_to_cpu(__entry->wrtid), 175*4882a593Smuzhiyun __entry->retries_left, __entry->max_retries, 176*4882a593Smuzhiyun __entry->retry, __entry->timeout, 177*4882a593Smuzhiyun __entry->length, 178*4882a593Smuzhiyun __entry->base_version, __entry->mgmt_class, 179*4882a593Smuzhiyun __entry->class_version, __entry->method, 180*4882a593Smuzhiyun be16_to_cpu(__entry->status) 181*4882a593Smuzhiyun ) 182*4882a593Smuzhiyun ); 183*4882a593Smuzhiyun 184*4882a593Smuzhiyun TRACE_EVENT(ib_mad_recv_done_handler, 185*4882a593Smuzhiyun TP_PROTO(struct ib_mad_qp_info *qp_info, struct ib_wc *wc, 186*4882a593Smuzhiyun struct ib_mad_hdr *mad_hdr), 187*4882a593Smuzhiyun TP_ARGS(qp_info, wc, mad_hdr), 188*4882a593Smuzhiyun 189*4882a593Smuzhiyun TP_STRUCT__entry( 190*4882a593Smuzhiyun __field(u8, base_version) 191*4882a593Smuzhiyun __field(u8, mgmt_class) 192*4882a593Smuzhiyun __field(u8, class_version) 193*4882a593Smuzhiyun __field(u8, port_num) 194*4882a593Smuzhiyun __field(u32, qp_num) 195*4882a593Smuzhiyun __field(u16, status) 196*4882a593Smuzhiyun __field(u16, class_specific) 197*4882a593Smuzhiyun __field(u32, length) 198*4882a593Smuzhiyun __field(u64, tid) 199*4882a593Smuzhiyun __field(u8, method) 200*4882a593Smuzhiyun __field(u8, sl) 201*4882a593Smuzhiyun __field(u16, attr_id) 202*4882a593Smuzhiyun __field(u32, attr_mod) 203*4882a593Smuzhiyun __field(u16, src_qp) 204*4882a593Smuzhiyun __field(u16, wc_status) 205*4882a593Smuzhiyun __field(u32, slid) 206*4882a593Smuzhiyun __field(u32, dev_index) 207*4882a593Smuzhiyun __field(u16, pkey) 208*4882a593Smuzhiyun ), 209*4882a593Smuzhiyun 210*4882a593Smuzhiyun TP_fast_assign( 211*4882a593Smuzhiyun __entry->dev_index = qp_info->port_priv->device->index; 212*4882a593Smuzhiyun __entry->port_num = qp_info->port_priv->port_num; 213*4882a593Smuzhiyun __entry->qp_num = qp_info->qp->qp_num; 214*4882a593Smuzhiyun __entry->length = wc->byte_len; 215*4882a593Smuzhiyun __entry->base_version = mad_hdr->base_version; 216*4882a593Smuzhiyun __entry->mgmt_class = mad_hdr->mgmt_class; 217*4882a593Smuzhiyun __entry->class_version = mad_hdr->class_version; 218*4882a593Smuzhiyun __entry->method = mad_hdr->method; 219*4882a593Smuzhiyun __entry->status = mad_hdr->status; 220*4882a593Smuzhiyun __entry->class_specific = mad_hdr->class_specific; 221*4882a593Smuzhiyun __entry->tid = mad_hdr->tid; 222*4882a593Smuzhiyun __entry->attr_id = mad_hdr->attr_id; 223*4882a593Smuzhiyun __entry->attr_mod = mad_hdr->attr_mod; 224*4882a593Smuzhiyun __entry->slid = wc->slid; 225*4882a593Smuzhiyun __entry->src_qp = wc->src_qp; 226*4882a593Smuzhiyun __entry->sl = wc->sl; 227*4882a593Smuzhiyun ib_query_pkey(qp_info->port_priv->device, 228*4882a593Smuzhiyun qp_info->port_priv->port_num, 229*4882a593Smuzhiyun wc->pkey_index, &__entry->pkey); 230*4882a593Smuzhiyun __entry->wc_status = wc->status; 231*4882a593Smuzhiyun ), 232*4882a593Smuzhiyun 233*4882a593Smuzhiyun TP_printk("%d:%d QP%d : RECV WC Status %d : length %d : hdr : " \ 234*4882a593Smuzhiyun "base_ver 0x%02x class 0x%02x class_ver 0x%02x " \ 235*4882a593Smuzhiyun "method 0x%02x status 0x%04x class_specific 0x%04x " \ 236*4882a593Smuzhiyun "tid 0x%016llx attr_id 0x%04x attr_mod 0x%08x " \ 237*4882a593Smuzhiyun "slid 0x%08x src QP%d, sl %d pkey 0x%04x", 238*4882a593Smuzhiyun __entry->dev_index, __entry->port_num, __entry->qp_num, 239*4882a593Smuzhiyun __entry->wc_status, 240*4882a593Smuzhiyun __entry->length, 241*4882a593Smuzhiyun __entry->base_version, __entry->mgmt_class, 242*4882a593Smuzhiyun __entry->class_version, __entry->method, 243*4882a593Smuzhiyun be16_to_cpu(__entry->status), 244*4882a593Smuzhiyun be16_to_cpu(__entry->class_specific), 245*4882a593Smuzhiyun be64_to_cpu(__entry->tid), be16_to_cpu(__entry->attr_id), 246*4882a593Smuzhiyun be32_to_cpu(__entry->attr_mod), 247*4882a593Smuzhiyun __entry->slid, __entry->src_qp, __entry->sl, __entry->pkey 248*4882a593Smuzhiyun ) 249*4882a593Smuzhiyun ); 250*4882a593Smuzhiyun 251*4882a593Smuzhiyun DECLARE_EVENT_CLASS(ib_mad_agent_template, 252*4882a593Smuzhiyun TP_PROTO(struct ib_mad_agent_private *agent), 253*4882a593Smuzhiyun TP_ARGS(agent), 254*4882a593Smuzhiyun 255*4882a593Smuzhiyun TP_STRUCT__entry( 256*4882a593Smuzhiyun __field(u32, dev_index) 257*4882a593Smuzhiyun __field(u32, hi_tid) 258*4882a593Smuzhiyun __field(u8, port_num) 259*4882a593Smuzhiyun __field(u8, mgmt_class) 260*4882a593Smuzhiyun __field(u8, mgmt_class_version) 261*4882a593Smuzhiyun ), 262*4882a593Smuzhiyun 263*4882a593Smuzhiyun TP_fast_assign( 264*4882a593Smuzhiyun __entry->dev_index = agent->agent.device->index; 265*4882a593Smuzhiyun __entry->port_num = agent->agent.port_num; 266*4882a593Smuzhiyun __entry->hi_tid = agent->agent.hi_tid; 267*4882a593Smuzhiyun 268*4882a593Smuzhiyun if (agent->reg_req) { 269*4882a593Smuzhiyun __entry->mgmt_class = agent->reg_req->mgmt_class; 270*4882a593Smuzhiyun __entry->mgmt_class_version = 271*4882a593Smuzhiyun agent->reg_req->mgmt_class_version; 272*4882a593Smuzhiyun } else { 273*4882a593Smuzhiyun __entry->mgmt_class = 0; 274*4882a593Smuzhiyun __entry->mgmt_class_version = 0; 275*4882a593Smuzhiyun } 276*4882a593Smuzhiyun ), 277*4882a593Smuzhiyun 278*4882a593Smuzhiyun TP_printk("%d:%d mad agent : hi_tid 0x%08x class 0x%02x class_ver 0x%02x", 279*4882a593Smuzhiyun __entry->dev_index, __entry->port_num, 280*4882a593Smuzhiyun __entry->hi_tid, __entry->mgmt_class, 281*4882a593Smuzhiyun __entry->mgmt_class_version 282*4882a593Smuzhiyun ) 283*4882a593Smuzhiyun ); 284*4882a593Smuzhiyun DEFINE_EVENT(ib_mad_agent_template, ib_mad_recv_done_agent, 285*4882a593Smuzhiyun TP_PROTO(struct ib_mad_agent_private *agent), 286*4882a593Smuzhiyun TP_ARGS(agent)); 287*4882a593Smuzhiyun DEFINE_EVENT(ib_mad_agent_template, ib_mad_send_done_agent, 288*4882a593Smuzhiyun TP_PROTO(struct ib_mad_agent_private *agent), 289*4882a593Smuzhiyun TP_ARGS(agent)); 290*4882a593Smuzhiyun DEFINE_EVENT(ib_mad_agent_template, ib_mad_create_agent, 291*4882a593Smuzhiyun TP_PROTO(struct ib_mad_agent_private *agent), 292*4882a593Smuzhiyun TP_ARGS(agent)); 293*4882a593Smuzhiyun DEFINE_EVENT(ib_mad_agent_template, ib_mad_unregister_agent, 294*4882a593Smuzhiyun TP_PROTO(struct ib_mad_agent_private *agent), 295*4882a593Smuzhiyun TP_ARGS(agent)); 296*4882a593Smuzhiyun 297*4882a593Smuzhiyun 298*4882a593Smuzhiyun 299*4882a593Smuzhiyun DECLARE_EVENT_CLASS(ib_mad_opa_smi_template, 300*4882a593Smuzhiyun TP_PROTO(struct opa_smp *smp), 301*4882a593Smuzhiyun TP_ARGS(smp), 302*4882a593Smuzhiyun 303*4882a593Smuzhiyun TP_STRUCT__entry( 304*4882a593Smuzhiyun __field(u64, mkey) 305*4882a593Smuzhiyun __field(u32, dr_slid) 306*4882a593Smuzhiyun __field(u32, dr_dlid) 307*4882a593Smuzhiyun __field(u8, hop_ptr) 308*4882a593Smuzhiyun __field(u8, hop_cnt) 309*4882a593Smuzhiyun __array(u8, initial_path, OPA_SMP_MAX_PATH_HOPS) 310*4882a593Smuzhiyun __array(u8, return_path, OPA_SMP_MAX_PATH_HOPS) 311*4882a593Smuzhiyun ), 312*4882a593Smuzhiyun 313*4882a593Smuzhiyun TP_fast_assign( 314*4882a593Smuzhiyun __entry->hop_ptr = smp->hop_ptr; 315*4882a593Smuzhiyun __entry->hop_cnt = smp->hop_cnt; 316*4882a593Smuzhiyun __entry->mkey = smp->mkey; 317*4882a593Smuzhiyun __entry->dr_slid = smp->route.dr.dr_slid; 318*4882a593Smuzhiyun __entry->dr_dlid = smp->route.dr.dr_dlid; 319*4882a593Smuzhiyun memcpy(__entry->initial_path, smp->route.dr.initial_path, 320*4882a593Smuzhiyun OPA_SMP_MAX_PATH_HOPS); 321*4882a593Smuzhiyun memcpy(__entry->return_path, smp->route.dr.return_path, 322*4882a593Smuzhiyun OPA_SMP_MAX_PATH_HOPS); 323*4882a593Smuzhiyun ), 324*4882a593Smuzhiyun 325*4882a593Smuzhiyun TP_printk("OPA SMP: hop_ptr %d hop_cnt %d " \ 326*4882a593Smuzhiyun "mkey 0x%016llx dr_slid 0x%08x dr_dlid 0x%08x " \ 327*4882a593Smuzhiyun "initial_path %*ph return_path %*ph ", 328*4882a593Smuzhiyun __entry->hop_ptr, __entry->hop_cnt, 329*4882a593Smuzhiyun be64_to_cpu(__entry->mkey), be32_to_cpu(__entry->dr_slid), 330*4882a593Smuzhiyun be32_to_cpu(__entry->dr_dlid), 331*4882a593Smuzhiyun OPA_SMP_MAX_PATH_HOPS, __entry->initial_path, 332*4882a593Smuzhiyun OPA_SMP_MAX_PATH_HOPS, __entry->return_path 333*4882a593Smuzhiyun ) 334*4882a593Smuzhiyun ); 335*4882a593Smuzhiyun 336*4882a593Smuzhiyun DEFINE_EVENT(ib_mad_opa_smi_template, ib_mad_handle_opa_smi, 337*4882a593Smuzhiyun TP_PROTO(struct opa_smp *smp), 338*4882a593Smuzhiyun TP_ARGS(smp)); 339*4882a593Smuzhiyun DEFINE_EVENT(ib_mad_opa_smi_template, ib_mad_handle_out_opa_smi, 340*4882a593Smuzhiyun TP_PROTO(struct opa_smp *smp), 341*4882a593Smuzhiyun TP_ARGS(smp)); 342*4882a593Smuzhiyun 343*4882a593Smuzhiyun 344*4882a593Smuzhiyun DECLARE_EVENT_CLASS(ib_mad_opa_ib_template, 345*4882a593Smuzhiyun TP_PROTO(struct ib_smp *smp), 346*4882a593Smuzhiyun TP_ARGS(smp), 347*4882a593Smuzhiyun 348*4882a593Smuzhiyun TP_STRUCT__entry( 349*4882a593Smuzhiyun __field(u64, mkey) 350*4882a593Smuzhiyun __field(u32, dr_slid) 351*4882a593Smuzhiyun __field(u32, dr_dlid) 352*4882a593Smuzhiyun __field(u8, hop_ptr) 353*4882a593Smuzhiyun __field(u8, hop_cnt) 354*4882a593Smuzhiyun __array(u8, initial_path, IB_SMP_MAX_PATH_HOPS) 355*4882a593Smuzhiyun __array(u8, return_path, IB_SMP_MAX_PATH_HOPS) 356*4882a593Smuzhiyun ), 357*4882a593Smuzhiyun 358*4882a593Smuzhiyun TP_fast_assign( 359*4882a593Smuzhiyun __entry->hop_ptr = smp->hop_ptr; 360*4882a593Smuzhiyun __entry->hop_cnt = smp->hop_cnt; 361*4882a593Smuzhiyun __entry->mkey = smp->mkey; 362*4882a593Smuzhiyun __entry->dr_slid = smp->dr_slid; 363*4882a593Smuzhiyun __entry->dr_dlid = smp->dr_dlid; 364*4882a593Smuzhiyun memcpy(__entry->initial_path, smp->initial_path, 365*4882a593Smuzhiyun IB_SMP_MAX_PATH_HOPS); 366*4882a593Smuzhiyun memcpy(__entry->return_path, smp->return_path, 367*4882a593Smuzhiyun IB_SMP_MAX_PATH_HOPS); 368*4882a593Smuzhiyun ), 369*4882a593Smuzhiyun 370*4882a593Smuzhiyun TP_printk("OPA SMP: hop_ptr %d hop_cnt %d " \ 371*4882a593Smuzhiyun "mkey 0x%016llx dr_slid 0x%04x dr_dlid 0x%04x " \ 372*4882a593Smuzhiyun "initial_path %*ph return_path %*ph ", 373*4882a593Smuzhiyun __entry->hop_ptr, __entry->hop_cnt, 374*4882a593Smuzhiyun be64_to_cpu(__entry->mkey), be16_to_cpu(__entry->dr_slid), 375*4882a593Smuzhiyun be16_to_cpu(__entry->dr_dlid), 376*4882a593Smuzhiyun IB_SMP_MAX_PATH_HOPS, __entry->initial_path, 377*4882a593Smuzhiyun IB_SMP_MAX_PATH_HOPS, __entry->return_path 378*4882a593Smuzhiyun ) 379*4882a593Smuzhiyun ); 380*4882a593Smuzhiyun 381*4882a593Smuzhiyun DEFINE_EVENT(ib_mad_opa_ib_template, ib_mad_handle_ib_smi, 382*4882a593Smuzhiyun TP_PROTO(struct ib_smp *smp), 383*4882a593Smuzhiyun TP_ARGS(smp)); 384*4882a593Smuzhiyun DEFINE_EVENT(ib_mad_opa_ib_template, ib_mad_handle_out_ib_smi, 385*4882a593Smuzhiyun TP_PROTO(struct ib_smp *smp), 386*4882a593Smuzhiyun TP_ARGS(smp)); 387*4882a593Smuzhiyun 388*4882a593Smuzhiyun #endif /* _TRACE_IB_MAD_H */ 389*4882a593Smuzhiyun 390*4882a593Smuzhiyun #include <trace/define_trace.h> 391