root/include/trace/events/ib_mad.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   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
  17 struct trace_event_raw_ib_mad_send_template;
  18 static 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 
  23 DECLARE_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 
 108 DEFINE_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));
 112 DEFINE_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));
 116 DEFINE_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 
 121 TRACE_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 
 184 TRACE_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 
 251 DECLARE_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 );
 284 DEFINE_EVENT(ib_mad_agent_template, ib_mad_recv_done_agent,
 285         TP_PROTO(struct ib_mad_agent_private *agent),
 286         TP_ARGS(agent));
 287 DEFINE_EVENT(ib_mad_agent_template, ib_mad_send_done_agent,
 288         TP_PROTO(struct ib_mad_agent_private *agent),
 289         TP_ARGS(agent));
 290 DEFINE_EVENT(ib_mad_agent_template, ib_mad_create_agent,
 291         TP_PROTO(struct ib_mad_agent_private *agent),
 292         TP_ARGS(agent));
 293 DEFINE_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 
 299 DECLARE_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 
 336 DEFINE_EVENT(ib_mad_opa_smi_template, ib_mad_handle_opa_smi,
 337         TP_PROTO(struct opa_smp *smp),
 338         TP_ARGS(smp));
 339 DEFINE_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 
 344 DECLARE_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 
 381 DEFINE_EVENT(ib_mad_opa_ib_template, ib_mad_handle_ib_smi,
 382         TP_PROTO(struct ib_smp *smp),
 383         TP_ARGS(smp));
 384 DEFINE_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>

/* [<][>][^][v][top][bottom][index][help] */