linux/drivers/infiniband/core/cm_trace.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0-only */
   2/*
   3 * Trace point definitions for the RDMA Connect Manager.
   4 *
   5 * Author: Chuck Lever <chuck.lever@oracle.com>
   6 *
   7 * Copyright (c) 2020 Oracle and/or its affiliates.
   8 */
   9
  10#undef TRACE_SYSTEM
  11#define TRACE_SYSTEM ib_cma
  12
  13#if !defined(_TRACE_IB_CMA_H) || defined(TRACE_HEADER_MULTI_READ)
  14
  15#define _TRACE_IB_CMA_H
  16
  17#include <linux/tracepoint.h>
  18#include <rdma/ib_cm.h>
  19#include <trace/events/rdma.h>
  20
  21/*
  22 * enum ib_cm_state, from include/rdma/ib_cm.h
  23 */
  24#define IB_CM_STATE_LIST                                        \
  25        ib_cm_state(IDLE)                                       \
  26        ib_cm_state(LISTEN)                                     \
  27        ib_cm_state(REQ_SENT)                                   \
  28        ib_cm_state(REQ_RCVD)                                   \
  29        ib_cm_state(MRA_REQ_SENT)                               \
  30        ib_cm_state(MRA_REQ_RCVD)                               \
  31        ib_cm_state(REP_SENT)                                   \
  32        ib_cm_state(REP_RCVD)                                   \
  33        ib_cm_state(MRA_REP_SENT)                               \
  34        ib_cm_state(MRA_REP_RCVD)                               \
  35        ib_cm_state(ESTABLISHED)                                \
  36        ib_cm_state(DREQ_SENT)                                  \
  37        ib_cm_state(DREQ_RCVD)                                  \
  38        ib_cm_state(TIMEWAIT)                                   \
  39        ib_cm_state(SIDR_REQ_SENT)                              \
  40        ib_cm_state_end(SIDR_REQ_RCVD)
  41
  42#undef  ib_cm_state
  43#undef  ib_cm_state_end
  44#define ib_cm_state(x)          TRACE_DEFINE_ENUM(IB_CM_##x);
  45#define ib_cm_state_end(x)      TRACE_DEFINE_ENUM(IB_CM_##x);
  46
  47IB_CM_STATE_LIST
  48
  49#undef  ib_cm_state
  50#undef  ib_cm_state_end
  51#define ib_cm_state(x)          { IB_CM_##x, #x },
  52#define ib_cm_state_end(x)      { IB_CM_##x, #x }
  53
  54#define show_ib_cm_state(x) \
  55                __print_symbolic(x, IB_CM_STATE_LIST)
  56
  57/*
  58 * enum ib_cm_lap_state, from include/rdma/ib_cm.h
  59 */
  60#define IB_CM_LAP_STATE_LIST                                    \
  61        ib_cm_lap_state(LAP_UNINIT)                             \
  62        ib_cm_lap_state(LAP_IDLE)                               \
  63        ib_cm_lap_state(LAP_SENT)                               \
  64        ib_cm_lap_state(LAP_RCVD)                               \
  65        ib_cm_lap_state(MRA_LAP_SENT)                           \
  66        ib_cm_lap_state_end(MRA_LAP_RCVD)
  67
  68#undef  ib_cm_lap_state
  69#undef  ib_cm_lap_state_end
  70#define ib_cm_lap_state(x)      TRACE_DEFINE_ENUM(IB_CM_##x);
  71#define ib_cm_lap_state_end(x)  TRACE_DEFINE_ENUM(IB_CM_##x);
  72
  73IB_CM_LAP_STATE_LIST
  74
  75#undef  ib_cm_lap_state
  76#undef  ib_cm_lap_state_end
  77#define ib_cm_lap_state(x)      { IB_CM_##x, #x },
  78#define ib_cm_lap_state_end(x)  { IB_CM_##x, #x }
  79
  80#define show_ib_cm_lap_state(x) \
  81                __print_symbolic(x, IB_CM_LAP_STATE_LIST)
  82
  83/*
  84 * enum ib_cm_rej_reason, from include/rdma/ib_cm.h
  85 */
  86#define IB_CM_REJ_REASON_LIST                                   \
  87        ib_cm_rej_reason(REJ_NO_QP)                             \
  88        ib_cm_rej_reason(REJ_NO_EEC)                            \
  89        ib_cm_rej_reason(REJ_NO_RESOURCES)                      \
  90        ib_cm_rej_reason(REJ_TIMEOUT)                           \
  91        ib_cm_rej_reason(REJ_UNSUPPORTED)                       \
  92        ib_cm_rej_reason(REJ_INVALID_COMM_ID)                   \
  93        ib_cm_rej_reason(REJ_INVALID_COMM_INSTANCE)             \
  94        ib_cm_rej_reason(REJ_INVALID_SERVICE_ID)                \
  95        ib_cm_rej_reason(REJ_INVALID_TRANSPORT_TYPE)            \
  96        ib_cm_rej_reason(REJ_STALE_CONN)                        \
  97        ib_cm_rej_reason(REJ_RDC_NOT_EXIST)                     \
  98        ib_cm_rej_reason(REJ_INVALID_GID)                       \
  99        ib_cm_rej_reason(REJ_INVALID_LID)                       \
 100        ib_cm_rej_reason(REJ_INVALID_SL)                        \
 101        ib_cm_rej_reason(REJ_INVALID_TRAFFIC_CLASS)             \
 102        ib_cm_rej_reason(REJ_INVALID_HOP_LIMIT)                 \
 103        ib_cm_rej_reason(REJ_INVALID_PACKET_RATE)               \
 104        ib_cm_rej_reason(REJ_INVALID_ALT_GID)                   \
 105        ib_cm_rej_reason(REJ_INVALID_ALT_LID)                   \
 106        ib_cm_rej_reason(REJ_INVALID_ALT_SL)                    \
 107        ib_cm_rej_reason(REJ_INVALID_ALT_TRAFFIC_CLASS)         \
 108        ib_cm_rej_reason(REJ_INVALID_ALT_HOP_LIMIT)             \
 109        ib_cm_rej_reason(REJ_INVALID_ALT_PACKET_RATE)           \
 110        ib_cm_rej_reason(REJ_PORT_CM_REDIRECT)                  \
 111        ib_cm_rej_reason(REJ_PORT_REDIRECT)                     \
 112        ib_cm_rej_reason(REJ_INVALID_MTU)                       \
 113        ib_cm_rej_reason(REJ_INSUFFICIENT_RESP_RESOURCES)       \
 114        ib_cm_rej_reason(REJ_CONSUMER_DEFINED)                  \
 115        ib_cm_rej_reason(REJ_INVALID_RNR_RETRY)                 \
 116        ib_cm_rej_reason(REJ_DUPLICATE_LOCAL_COMM_ID)           \
 117        ib_cm_rej_reason(REJ_INVALID_CLASS_VERSION)             \
 118        ib_cm_rej_reason(REJ_INVALID_FLOW_LABEL)                \
 119        ib_cm_rej_reason(REJ_INVALID_ALT_FLOW_LABEL)            \
 120        ib_cm_rej_reason_end(REJ_VENDOR_OPTION_NOT_SUPPORTED)
 121
 122#undef  ib_cm_rej_reason
 123#undef  ib_cm_rej_reason_end
 124#define ib_cm_rej_reason(x)     TRACE_DEFINE_ENUM(IB_CM_##x);
 125#define ib_cm_rej_reason_end(x) TRACE_DEFINE_ENUM(IB_CM_##x);
 126
 127IB_CM_REJ_REASON_LIST
 128
 129#undef  ib_cm_rej_reason
 130#undef  ib_cm_rej_reason_end
 131#define ib_cm_rej_reason(x)     { IB_CM_##x, #x },
 132#define ib_cm_rej_reason_end(x) { IB_CM_##x, #x }
 133
 134#define show_ib_cm_rej_reason(x) \
 135                __print_symbolic(x, IB_CM_REJ_REASON_LIST)
 136
 137DECLARE_EVENT_CLASS(icm_id_class,
 138        TP_PROTO(
 139                const struct ib_cm_id *cm_id
 140        ),
 141
 142        TP_ARGS(cm_id),
 143
 144        TP_STRUCT__entry(
 145                __field(const void *, cm_id)    /* for eBPF scripts */
 146                __field(unsigned int, local_id)
 147                __field(unsigned int, remote_id)
 148                __field(unsigned long, state)
 149                __field(unsigned long, lap_state)
 150        ),
 151
 152        TP_fast_assign(
 153                __entry->cm_id = cm_id;
 154                __entry->local_id = be32_to_cpu(cm_id->local_id);
 155                __entry->remote_id = be32_to_cpu(cm_id->remote_id);
 156                __entry->state = cm_id->state;
 157                __entry->lap_state = cm_id->lap_state;
 158        ),
 159
 160        TP_printk("local_id=%u remote_id=%u state=%s lap_state=%s",
 161                __entry->local_id, __entry->remote_id,
 162                show_ib_cm_state(__entry->state),
 163                show_ib_cm_lap_state(__entry->lap_state)
 164        )
 165);
 166
 167#define DEFINE_CM_SEND_EVENT(name)                                      \
 168                DEFINE_EVENT(icm_id_class,                              \
 169                                icm_send_##name,                                \
 170                                TP_PROTO(                               \
 171                                        const struct ib_cm_id *cm_id    \
 172                                ),                                      \
 173                                TP_ARGS(cm_id))
 174
 175DEFINE_CM_SEND_EVENT(req);
 176DEFINE_CM_SEND_EVENT(rep);
 177DEFINE_CM_SEND_EVENT(dup_req);
 178DEFINE_CM_SEND_EVENT(dup_rep);
 179DEFINE_CM_SEND_EVENT(rtu);
 180DEFINE_CM_SEND_EVENT(mra);
 181DEFINE_CM_SEND_EVENT(sidr_req);
 182DEFINE_CM_SEND_EVENT(sidr_rep);
 183DEFINE_CM_SEND_EVENT(dreq);
 184DEFINE_CM_SEND_EVENT(drep);
 185
 186TRACE_EVENT(icm_send_rej,
 187        TP_PROTO(
 188                const struct ib_cm_id *cm_id,
 189                enum ib_cm_rej_reason reason
 190        ),
 191
 192        TP_ARGS(cm_id, reason),
 193
 194        TP_STRUCT__entry(
 195                __field(const void *, cm_id)
 196                __field(u32, local_id)
 197                __field(u32, remote_id)
 198                __field(unsigned long, state)
 199                __field(unsigned long, reason)
 200        ),
 201
 202        TP_fast_assign(
 203                __entry->cm_id = cm_id;
 204                __entry->local_id = be32_to_cpu(cm_id->local_id);
 205                __entry->remote_id = be32_to_cpu(cm_id->remote_id);
 206                __entry->state = cm_id->state;
 207                __entry->reason = reason;
 208        ),
 209
 210        TP_printk("local_id=%u remote_id=%u state=%s reason=%s",
 211                __entry->local_id, __entry->remote_id,
 212                show_ib_cm_state(__entry->state),
 213                show_ib_cm_rej_reason(__entry->reason)
 214        )
 215);
 216
 217#define DEFINE_CM_ERR_EVENT(name)                                       \
 218                DEFINE_EVENT(icm_id_class,                              \
 219                                icm_##name##_err,                       \
 220                                TP_PROTO(                               \
 221                                        const struct ib_cm_id *cm_id    \
 222                                ),                                      \
 223                                TP_ARGS(cm_id))
 224
 225DEFINE_CM_ERR_EVENT(send_cm_rtu);
 226DEFINE_CM_ERR_EVENT(establish);
 227DEFINE_CM_ERR_EVENT(no_listener);
 228DEFINE_CM_ERR_EVENT(send_drep);
 229DEFINE_CM_ERR_EVENT(dreq_unknown);
 230DEFINE_CM_ERR_EVENT(send_unknown_rej);
 231DEFINE_CM_ERR_EVENT(rej_unknown);
 232DEFINE_CM_ERR_EVENT(send_mra_unknown);
 233DEFINE_CM_ERR_EVENT(mra_unknown);
 234DEFINE_CM_ERR_EVENT(qp_init);
 235DEFINE_CM_ERR_EVENT(qp_rtr);
 236DEFINE_CM_ERR_EVENT(qp_rts);
 237
 238DEFINE_EVENT(icm_id_class,                                              \
 239        icm_dreq_skipped,                                               \
 240        TP_PROTO(                                                       \
 241                const struct ib_cm_id *cm_id                            \
 242        ),                                                              \
 243        TP_ARGS(cm_id)                                                  \
 244);
 245
 246DECLARE_EVENT_CLASS(icm_local_class,
 247        TP_PROTO(
 248                unsigned int local_id,
 249                unsigned int remote_id
 250        ),
 251
 252        TP_ARGS(local_id, remote_id),
 253
 254        TP_STRUCT__entry(
 255                __field(unsigned int, local_id)
 256                __field(unsigned int, remote_id)
 257        ),
 258
 259        TP_fast_assign(
 260                __entry->local_id = local_id;
 261                __entry->remote_id = remote_id;
 262        ),
 263
 264        TP_printk("local_id=%u remote_id=%u",
 265                __entry->local_id, __entry->remote_id
 266        )
 267);
 268
 269#define DEFINE_CM_LOCAL_EVENT(name)                                     \
 270                DEFINE_EVENT(icm_local_class,                           \
 271                                icm_##name,                             \
 272                                TP_PROTO(                               \
 273                                        unsigned int local_id,                  \
 274                                        unsigned int remote_id                  \
 275                                ),                                      \
 276                                TP_ARGS(local_id, remote_id))
 277
 278DEFINE_CM_LOCAL_EVENT(issue_rej);
 279DEFINE_CM_LOCAL_EVENT(issue_drep);
 280DEFINE_CM_LOCAL_EVENT(staleconn_err);
 281DEFINE_CM_LOCAL_EVENT(no_priv_err);
 282
 283DECLARE_EVENT_CLASS(icm_remote_class,
 284        TP_PROTO(
 285                u32 remote_id
 286        ),
 287
 288        TP_ARGS(remote_id),
 289
 290        TP_STRUCT__entry(
 291                __field(u32, remote_id)
 292        ),
 293
 294        TP_fast_assign(
 295                __entry->remote_id = remote_id;
 296        ),
 297
 298        TP_printk("remote_id=%u",
 299                __entry->remote_id
 300        )
 301);
 302
 303#define DEFINE_CM_REMOTE_EVENT(name)                                    \
 304                DEFINE_EVENT(icm_remote_class,                          \
 305                                icm_##name,                             \
 306                                TP_PROTO(                               \
 307                                        u32 remote_id                   \
 308                                ),                                      \
 309                                TP_ARGS(remote_id))
 310
 311DEFINE_CM_REMOTE_EVENT(remote_no_priv_err);
 312DEFINE_CM_REMOTE_EVENT(insert_failed_err);
 313
 314TRACE_EVENT(icm_send_rep_err,
 315        TP_PROTO(
 316                __be32 local_id,
 317                enum ib_cm_state state
 318        ),
 319
 320        TP_ARGS(local_id, state),
 321
 322        TP_STRUCT__entry(
 323                __field(unsigned int, local_id)
 324                __field(unsigned long, state)
 325        ),
 326
 327        TP_fast_assign(
 328                __entry->local_id = be32_to_cpu(local_id);
 329                __entry->state = state;
 330        ),
 331
 332        TP_printk("local_id=%u state=%s",
 333                __entry->local_id, show_ib_cm_state(__entry->state)
 334        )
 335);
 336
 337TRACE_EVENT(icm_rep_unknown_err,
 338        TP_PROTO(
 339                unsigned int local_id,
 340                unsigned int remote_id,
 341                enum ib_cm_state state
 342        ),
 343
 344        TP_ARGS(local_id, remote_id, state),
 345
 346        TP_STRUCT__entry(
 347                __field(unsigned int, local_id)
 348                __field(unsigned int, remote_id)
 349                __field(unsigned long, state)
 350        ),
 351
 352        TP_fast_assign(
 353                __entry->local_id = local_id;
 354                __entry->remote_id = remote_id;
 355                __entry->state = state;
 356        ),
 357
 358        TP_printk("local_id=%u remote_id=%u state=%s",
 359                __entry->local_id, __entry->remote_id,
 360                show_ib_cm_state(__entry->state)
 361        )
 362);
 363
 364TRACE_EVENT(icm_handler_err,
 365        TP_PROTO(
 366                enum ib_cm_event_type event
 367        ),
 368
 369        TP_ARGS(event),
 370
 371        TP_STRUCT__entry(
 372                __field(unsigned long, event)
 373        ),
 374
 375        TP_fast_assign(
 376                __entry->event = event;
 377        ),
 378
 379        TP_printk("unhandled event=%s",
 380                rdma_show_ib_cm_event(__entry->event)
 381        )
 382);
 383
 384TRACE_EVENT(icm_mad_send_err,
 385        TP_PROTO(
 386                enum ib_cm_state state,
 387                enum ib_wc_status wc_status
 388        ),
 389
 390        TP_ARGS(state, wc_status),
 391
 392        TP_STRUCT__entry(
 393                __field(unsigned long, state)
 394                __field(unsigned long, wc_status)
 395        ),
 396
 397        TP_fast_assign(
 398                __entry->state = state;
 399                __entry->wc_status = wc_status;
 400        ),
 401
 402        TP_printk("state=%s completion status=%s",
 403                show_ib_cm_state(__entry->state),
 404                rdma_show_wc_status(__entry->wc_status)
 405        )
 406);
 407
 408#endif /* _TRACE_IB_CMA_H */
 409
 410#undef TRACE_INCLUDE_PATH
 411#define TRACE_INCLUDE_PATH ../../drivers/infiniband/core
 412#define TRACE_INCLUDE_FILE cm_trace
 413
 414#include <trace/define_trace.h>
 415