0001
0002
0003
0004
0005
0006
0007 #undef TRACE_SYSTEM
0008 #define TRACE_SYSTEM ib_mad
0009
0010 #if !defined(_TRACE_IB_MAD_H) || defined(TRACE_HEADER_MULTI_READ)
0011 #define _TRACE_IB_MAD_H
0012
0013 #include <linux/tracepoint.h>
0014 #include <rdma/ib_mad.h>
0015
0016 #ifdef CONFIG_TRACEPOINTS
0017 struct trace_event_raw_ib_mad_send_template;
0018 static void create_mad_addr_info(struct ib_mad_send_wr_private *mad_send_wr,
0019 struct ib_mad_qp_info *qp_info,
0020 struct trace_event_raw_ib_mad_send_template *entry);
0021 #endif
0022
0023 DECLARE_EVENT_CLASS(ib_mad_send_template,
0024 TP_PROTO(struct ib_mad_send_wr_private *wr,
0025 struct ib_mad_qp_info *qp_info),
0026 TP_ARGS(wr, qp_info),
0027
0028 TP_STRUCT__entry(
0029 __field(u8, base_version)
0030 __field(u8, mgmt_class)
0031 __field(u8, class_version)
0032 __field(u8, port_num)
0033 __field(u32, qp_num)
0034 __field(u8, method)
0035 __field(u8, sl)
0036 __field(u16, attr_id)
0037 __field(u32, attr_mod)
0038 __field(u64, wrtid)
0039 __field(u64, tid)
0040 __field(u16, status)
0041 __field(u16, class_specific)
0042 __field(u32, length)
0043 __field(u32, dlid)
0044 __field(u32, rqpn)
0045 __field(u32, rqkey)
0046 __field(u32, dev_index)
0047 __field(void *, agent_priv)
0048 __field(unsigned long, timeout)
0049 __field(int, retries_left)
0050 __field(int, max_retries)
0051 __field(int, retry)
0052 __field(u16, pkey)
0053 ),
0054
0055 TP_fast_assign(
0056 __entry->dev_index = wr->mad_agent_priv->agent.device->index;
0057 __entry->port_num = wr->mad_agent_priv->agent.port_num;
0058 __entry->qp_num = wr->mad_agent_priv->qp_info->qp->qp_num;
0059 __entry->agent_priv = wr->mad_agent_priv;
0060 __entry->wrtid = wr->tid;
0061 __entry->max_retries = wr->max_retries;
0062 __entry->retries_left = wr->retries_left;
0063 __entry->retry = wr->retry;
0064 __entry->timeout = wr->timeout;
0065 __entry->length = wr->send_buf.hdr_len +
0066 wr->send_buf.data_len;
0067 __entry->base_version =
0068 ((struct ib_mad_hdr *)wr->send_buf.mad)->base_version;
0069 __entry->mgmt_class =
0070 ((struct ib_mad_hdr *)wr->send_buf.mad)->mgmt_class;
0071 __entry->class_version =
0072 ((struct ib_mad_hdr *)wr->send_buf.mad)->class_version;
0073 __entry->method =
0074 ((struct ib_mad_hdr *)wr->send_buf.mad)->method;
0075 __entry->status =
0076 ((struct ib_mad_hdr *)wr->send_buf.mad)->status;
0077 __entry->class_specific =
0078 ((struct ib_mad_hdr *)wr->send_buf.mad)->class_specific;
0079 __entry->tid = ((struct ib_mad_hdr *)wr->send_buf.mad)->tid;
0080 __entry->attr_id =
0081 ((struct ib_mad_hdr *)wr->send_buf.mad)->attr_id;
0082 __entry->attr_mod =
0083 ((struct ib_mad_hdr *)wr->send_buf.mad)->attr_mod;
0084 create_mad_addr_info(wr, qp_info, __entry);
0085 ),
0086
0087 TP_printk("%d:%d QP%d agent %p: " \
0088 "wrtid 0x%llx; %d/%d retries(%d); timeout %lu length %d : " \
0089 "hdr : base_ver 0x%x class 0x%x class_ver 0x%x " \
0090 "method 0x%x status 0x%x class_specific 0x%x tid 0x%llx " \
0091 "attr_id 0x%x attr_mod 0x%x => dlid 0x%08x sl %d "\
0092 "pkey 0x%x rpqn 0x%x rqpkey 0x%x",
0093 __entry->dev_index, __entry->port_num, __entry->qp_num,
0094 __entry->agent_priv, be64_to_cpu(__entry->wrtid),
0095 __entry->retries_left, __entry->max_retries,
0096 __entry->retry, __entry->timeout, __entry->length,
0097 __entry->base_version, __entry->mgmt_class,
0098 __entry->class_version,
0099 __entry->method, be16_to_cpu(__entry->status),
0100 be16_to_cpu(__entry->class_specific),
0101 be64_to_cpu(__entry->tid), be16_to_cpu(__entry->attr_id),
0102 be32_to_cpu(__entry->attr_mod),
0103 be32_to_cpu(__entry->dlid), __entry->sl, __entry->pkey,
0104 __entry->rqpn, __entry->rqkey
0105 )
0106 );
0107
0108 DEFINE_EVENT(ib_mad_send_template, ib_mad_error_handler,
0109 TP_PROTO(struct ib_mad_send_wr_private *wr,
0110 struct ib_mad_qp_info *qp_info),
0111 TP_ARGS(wr, qp_info));
0112 DEFINE_EVENT(ib_mad_send_template, ib_mad_ib_send_mad,
0113 TP_PROTO(struct ib_mad_send_wr_private *wr,
0114 struct ib_mad_qp_info *qp_info),
0115 TP_ARGS(wr, qp_info));
0116 DEFINE_EVENT(ib_mad_send_template, ib_mad_send_done_resend,
0117 TP_PROTO(struct ib_mad_send_wr_private *wr,
0118 struct ib_mad_qp_info *qp_info),
0119 TP_ARGS(wr, qp_info));
0120
0121 TRACE_EVENT(ib_mad_send_done_handler,
0122 TP_PROTO(struct ib_mad_send_wr_private *wr, struct ib_wc *wc),
0123 TP_ARGS(wr, wc),
0124
0125 TP_STRUCT__entry(
0126 __field(u8, port_num)
0127 __field(u8, base_version)
0128 __field(u8, mgmt_class)
0129 __field(u8, class_version)
0130 __field(u32, qp_num)
0131 __field(u64, wrtid)
0132 __field(u16, status)
0133 __field(u16, wc_status)
0134 __field(u32, length)
0135 __field(void *, agent_priv)
0136 __field(unsigned long, timeout)
0137 __field(u32, dev_index)
0138 __field(int, retries_left)
0139 __field(int, max_retries)
0140 __field(int, retry)
0141 __field(u8, method)
0142 ),
0143
0144 TP_fast_assign(
0145 __entry->dev_index = wr->mad_agent_priv->agent.device->index;
0146 __entry->port_num = wr->mad_agent_priv->agent.port_num;
0147 __entry->qp_num = wr->mad_agent_priv->qp_info->qp->qp_num;
0148 __entry->agent_priv = wr->mad_agent_priv;
0149 __entry->wrtid = wr->tid;
0150 __entry->max_retries = wr->max_retries;
0151 __entry->retries_left = wr->retries_left;
0152 __entry->retry = wr->retry;
0153 __entry->timeout = wr->timeout;
0154 __entry->base_version =
0155 ((struct ib_mad_hdr *)wr->send_buf.mad)->base_version;
0156 __entry->mgmt_class =
0157 ((struct ib_mad_hdr *)wr->send_buf.mad)->mgmt_class;
0158 __entry->class_version =
0159 ((struct ib_mad_hdr *)wr->send_buf.mad)->class_version;
0160 __entry->method =
0161 ((struct ib_mad_hdr *)wr->send_buf.mad)->method;
0162 __entry->status =
0163 ((struct ib_mad_hdr *)wr->send_buf.mad)->status;
0164 __entry->wc_status = wc->status;
0165 __entry->length = wc->byte_len;
0166 ),
0167
0168 TP_printk("%d:%d QP%d : SEND WC Status %d : agent %p: " \
0169 "wrtid 0x%llx %d/%d retries(%d) timeout %lu length %d: " \
0170 "hdr : base_ver 0x%x class 0x%x class_ver 0x%x " \
0171 "method 0x%x status 0x%x",
0172 __entry->dev_index, __entry->port_num, __entry->qp_num,
0173 __entry->wc_status,
0174 __entry->agent_priv, be64_to_cpu(__entry->wrtid),
0175 __entry->retries_left, __entry->max_retries,
0176 __entry->retry, __entry->timeout,
0177 __entry->length,
0178 __entry->base_version, __entry->mgmt_class,
0179 __entry->class_version, __entry->method,
0180 be16_to_cpu(__entry->status)
0181 )
0182 );
0183
0184 TRACE_EVENT(ib_mad_recv_done_handler,
0185 TP_PROTO(struct ib_mad_qp_info *qp_info, struct ib_wc *wc,
0186 struct ib_mad_hdr *mad_hdr),
0187 TP_ARGS(qp_info, wc, mad_hdr),
0188
0189 TP_STRUCT__entry(
0190 __field(u8, base_version)
0191 __field(u8, mgmt_class)
0192 __field(u8, class_version)
0193 __field(u8, port_num)
0194 __field(u32, qp_num)
0195 __field(u16, status)
0196 __field(u16, class_specific)
0197 __field(u32, length)
0198 __field(u64, tid)
0199 __field(u8, method)
0200 __field(u8, sl)
0201 __field(u16, attr_id)
0202 __field(u32, attr_mod)
0203 __field(u16, src_qp)
0204 __field(u16, wc_status)
0205 __field(u32, slid)
0206 __field(u32, dev_index)
0207 __field(u16, pkey)
0208 ),
0209
0210 TP_fast_assign(
0211 __entry->dev_index = qp_info->port_priv->device->index;
0212 __entry->port_num = qp_info->port_priv->port_num;
0213 __entry->qp_num = qp_info->qp->qp_num;
0214 __entry->length = wc->byte_len;
0215 __entry->base_version = mad_hdr->base_version;
0216 __entry->mgmt_class = mad_hdr->mgmt_class;
0217 __entry->class_version = mad_hdr->class_version;
0218 __entry->method = mad_hdr->method;
0219 __entry->status = mad_hdr->status;
0220 __entry->class_specific = mad_hdr->class_specific;
0221 __entry->tid = mad_hdr->tid;
0222 __entry->attr_id = mad_hdr->attr_id;
0223 __entry->attr_mod = mad_hdr->attr_mod;
0224 __entry->slid = wc->slid;
0225 __entry->src_qp = wc->src_qp;
0226 __entry->sl = wc->sl;
0227 ib_query_pkey(qp_info->port_priv->device,
0228 qp_info->port_priv->port_num,
0229 wc->pkey_index, &__entry->pkey);
0230 __entry->wc_status = wc->status;
0231 ),
0232
0233 TP_printk("%d:%d QP%d : RECV WC Status %d : length %d : hdr : " \
0234 "base_ver 0x%02x class 0x%02x class_ver 0x%02x " \
0235 "method 0x%02x status 0x%04x class_specific 0x%04x " \
0236 "tid 0x%016llx attr_id 0x%04x attr_mod 0x%08x " \
0237 "slid 0x%08x src QP%d, sl %d pkey 0x%04x",
0238 __entry->dev_index, __entry->port_num, __entry->qp_num,
0239 __entry->wc_status,
0240 __entry->length,
0241 __entry->base_version, __entry->mgmt_class,
0242 __entry->class_version, __entry->method,
0243 be16_to_cpu(__entry->status),
0244 be16_to_cpu(__entry->class_specific),
0245 be64_to_cpu(__entry->tid), be16_to_cpu(__entry->attr_id),
0246 be32_to_cpu(__entry->attr_mod),
0247 __entry->slid, __entry->src_qp, __entry->sl, __entry->pkey
0248 )
0249 );
0250
0251 DECLARE_EVENT_CLASS(ib_mad_agent_template,
0252 TP_PROTO(struct ib_mad_agent_private *agent),
0253 TP_ARGS(agent),
0254
0255 TP_STRUCT__entry(
0256 __field(u32, dev_index)
0257 __field(u32, hi_tid)
0258 __field(u8, port_num)
0259 __field(u8, mgmt_class)
0260 __field(u8, mgmt_class_version)
0261 ),
0262
0263 TP_fast_assign(
0264 __entry->dev_index = agent->agent.device->index;
0265 __entry->port_num = agent->agent.port_num;
0266 __entry->hi_tid = agent->agent.hi_tid;
0267
0268 if (agent->reg_req) {
0269 __entry->mgmt_class = agent->reg_req->mgmt_class;
0270 __entry->mgmt_class_version =
0271 agent->reg_req->mgmt_class_version;
0272 } else {
0273 __entry->mgmt_class = 0;
0274 __entry->mgmt_class_version = 0;
0275 }
0276 ),
0277
0278 TP_printk("%d:%d mad agent : hi_tid 0x%08x class 0x%02x class_ver 0x%02x",
0279 __entry->dev_index, __entry->port_num,
0280 __entry->hi_tid, __entry->mgmt_class,
0281 __entry->mgmt_class_version
0282 )
0283 );
0284 DEFINE_EVENT(ib_mad_agent_template, ib_mad_recv_done_agent,
0285 TP_PROTO(struct ib_mad_agent_private *agent),
0286 TP_ARGS(agent));
0287 DEFINE_EVENT(ib_mad_agent_template, ib_mad_send_done_agent,
0288 TP_PROTO(struct ib_mad_agent_private *agent),
0289 TP_ARGS(agent));
0290 DEFINE_EVENT(ib_mad_agent_template, ib_mad_create_agent,
0291 TP_PROTO(struct ib_mad_agent_private *agent),
0292 TP_ARGS(agent));
0293 DEFINE_EVENT(ib_mad_agent_template, ib_mad_unregister_agent,
0294 TP_PROTO(struct ib_mad_agent_private *agent),
0295 TP_ARGS(agent));
0296
0297
0298
0299 DECLARE_EVENT_CLASS(ib_mad_opa_smi_template,
0300 TP_PROTO(struct opa_smp *smp),
0301 TP_ARGS(smp),
0302
0303 TP_STRUCT__entry(
0304 __field(u64, mkey)
0305 __field(u32, dr_slid)
0306 __field(u32, dr_dlid)
0307 __field(u8, hop_ptr)
0308 __field(u8, hop_cnt)
0309 __array(u8, initial_path, OPA_SMP_MAX_PATH_HOPS)
0310 __array(u8, return_path, OPA_SMP_MAX_PATH_HOPS)
0311 ),
0312
0313 TP_fast_assign(
0314 __entry->hop_ptr = smp->hop_ptr;
0315 __entry->hop_cnt = smp->hop_cnt;
0316 __entry->mkey = smp->mkey;
0317 __entry->dr_slid = smp->route.dr.dr_slid;
0318 __entry->dr_dlid = smp->route.dr.dr_dlid;
0319 memcpy(__entry->initial_path, smp->route.dr.initial_path,
0320 OPA_SMP_MAX_PATH_HOPS);
0321 memcpy(__entry->return_path, smp->route.dr.return_path,
0322 OPA_SMP_MAX_PATH_HOPS);
0323 ),
0324
0325 TP_printk("OPA SMP: hop_ptr %d hop_cnt %d " \
0326 "mkey 0x%016llx dr_slid 0x%08x dr_dlid 0x%08x " \
0327 "initial_path %*ph return_path %*ph ",
0328 __entry->hop_ptr, __entry->hop_cnt,
0329 be64_to_cpu(__entry->mkey), be32_to_cpu(__entry->dr_slid),
0330 be32_to_cpu(__entry->dr_dlid),
0331 OPA_SMP_MAX_PATH_HOPS, __entry->initial_path,
0332 OPA_SMP_MAX_PATH_HOPS, __entry->return_path
0333 )
0334 );
0335
0336 DEFINE_EVENT(ib_mad_opa_smi_template, ib_mad_handle_opa_smi,
0337 TP_PROTO(struct opa_smp *smp),
0338 TP_ARGS(smp));
0339 DEFINE_EVENT(ib_mad_opa_smi_template, ib_mad_handle_out_opa_smi,
0340 TP_PROTO(struct opa_smp *smp),
0341 TP_ARGS(smp));
0342
0343
0344 DECLARE_EVENT_CLASS(ib_mad_opa_ib_template,
0345 TP_PROTO(struct ib_smp *smp),
0346 TP_ARGS(smp),
0347
0348 TP_STRUCT__entry(
0349 __field(u64, mkey)
0350 __field(u32, dr_slid)
0351 __field(u32, dr_dlid)
0352 __field(u8, hop_ptr)
0353 __field(u8, hop_cnt)
0354 __array(u8, initial_path, IB_SMP_MAX_PATH_HOPS)
0355 __array(u8, return_path, IB_SMP_MAX_PATH_HOPS)
0356 ),
0357
0358 TP_fast_assign(
0359 __entry->hop_ptr = smp->hop_ptr;
0360 __entry->hop_cnt = smp->hop_cnt;
0361 __entry->mkey = smp->mkey;
0362 __entry->dr_slid = smp->dr_slid;
0363 __entry->dr_dlid = smp->dr_dlid;
0364 memcpy(__entry->initial_path, smp->initial_path,
0365 IB_SMP_MAX_PATH_HOPS);
0366 memcpy(__entry->return_path, smp->return_path,
0367 IB_SMP_MAX_PATH_HOPS);
0368 ),
0369
0370 TP_printk("OPA SMP: hop_ptr %d hop_cnt %d " \
0371 "mkey 0x%016llx dr_slid 0x%04x dr_dlid 0x%04x " \
0372 "initial_path %*ph return_path %*ph ",
0373 __entry->hop_ptr, __entry->hop_cnt,
0374 be64_to_cpu(__entry->mkey), be16_to_cpu(__entry->dr_slid),
0375 be16_to_cpu(__entry->dr_dlid),
0376 IB_SMP_MAX_PATH_HOPS, __entry->initial_path,
0377 IB_SMP_MAX_PATH_HOPS, __entry->return_path
0378 )
0379 );
0380
0381 DEFINE_EVENT(ib_mad_opa_ib_template, ib_mad_handle_ib_smi,
0382 TP_PROTO(struct ib_smp *smp),
0383 TP_ARGS(smp));
0384 DEFINE_EVENT(ib_mad_opa_ib_template, ib_mad_handle_out_ib_smi,
0385 TP_PROTO(struct ib_smp *smp),
0386 TP_ARGS(smp));
0387
0388 #endif
0389
0390 #include <trace/define_trace.h>