Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */
0002 
0003 /*
0004  * Copyright (c) 2018 Intel Corporation.  All rights reserved.
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 /* _TRACE_IB_MAD_H */
0389 
0390 #include <trace/define_trace.h>