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