linux/drivers/infiniband/core/cma_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) 2019, Oracle and/or its affiliates. All rights reserved.
   8 */
   9
  10#undef TRACE_SYSTEM
  11#define TRACE_SYSTEM rdma_cma
  12
  13#if !defined(_TRACE_RDMA_CMA_H) || defined(TRACE_HEADER_MULTI_READ)
  14
  15#define _TRACE_RDMA_CMA_H
  16
  17#include <linux/tracepoint.h>
  18#include <trace/events/rdma.h>
  19
  20
  21DECLARE_EVENT_CLASS(cma_fsm_class,
  22        TP_PROTO(
  23                const struct rdma_id_private *id_priv
  24        ),
  25
  26        TP_ARGS(id_priv),
  27
  28        TP_STRUCT__entry(
  29                __field(u32, cm_id)
  30                __field(u32, tos)
  31                __array(unsigned char, srcaddr, sizeof(struct sockaddr_in6))
  32                __array(unsigned char, dstaddr, sizeof(struct sockaddr_in6))
  33        ),
  34
  35        TP_fast_assign(
  36                __entry->cm_id = id_priv->res.id;
  37                __entry->tos = id_priv->tos;
  38                memcpy(__entry->srcaddr, &id_priv->id.route.addr.src_addr,
  39                       sizeof(struct sockaddr_in6));
  40                memcpy(__entry->dstaddr, &id_priv->id.route.addr.dst_addr,
  41                       sizeof(struct sockaddr_in6));
  42        ),
  43
  44        TP_printk("cm.id=%u src=%pISpc dst=%pISpc tos=%u",
  45                __entry->cm_id, __entry->srcaddr, __entry->dstaddr, __entry->tos
  46        )
  47);
  48
  49#define DEFINE_CMA_FSM_EVENT(name)                                              \
  50                DEFINE_EVENT(cma_fsm_class, cm_##name,                          \
  51                                TP_PROTO(                                       \
  52                                        const struct rdma_id_private *id_priv   \
  53                                ),                                              \
  54                                TP_ARGS(id_priv))
  55
  56DEFINE_CMA_FSM_EVENT(send_rtu);
  57DEFINE_CMA_FSM_EVENT(send_rej);
  58DEFINE_CMA_FSM_EVENT(send_mra);
  59DEFINE_CMA_FSM_EVENT(send_sidr_req);
  60DEFINE_CMA_FSM_EVENT(send_sidr_rep);
  61DEFINE_CMA_FSM_EVENT(disconnect);
  62DEFINE_CMA_FSM_EVENT(sent_drep);
  63DEFINE_CMA_FSM_EVENT(sent_dreq);
  64DEFINE_CMA_FSM_EVENT(id_destroy);
  65
  66TRACE_EVENT(cm_id_attach,
  67        TP_PROTO(
  68                const struct rdma_id_private *id_priv,
  69                const struct ib_device *device
  70        ),
  71
  72        TP_ARGS(id_priv, device),
  73
  74        TP_STRUCT__entry(
  75                __field(u32, cm_id)
  76                __array(unsigned char, srcaddr, sizeof(struct sockaddr_in6))
  77                __array(unsigned char, dstaddr, sizeof(struct sockaddr_in6))
  78                __string(devname, device->name)
  79        ),
  80
  81        TP_fast_assign(
  82                __entry->cm_id = id_priv->res.id;
  83                memcpy(__entry->srcaddr, &id_priv->id.route.addr.src_addr,
  84                       sizeof(struct sockaddr_in6));
  85                memcpy(__entry->dstaddr, &id_priv->id.route.addr.dst_addr,
  86                       sizeof(struct sockaddr_in6));
  87                __assign_str(devname, device->name);
  88        ),
  89
  90        TP_printk("cm.id=%u src=%pISpc dst=%pISpc device=%s",
  91                __entry->cm_id, __entry->srcaddr, __entry->dstaddr,
  92                __get_str(devname)
  93        )
  94);
  95
  96DECLARE_EVENT_CLASS(cma_qp_class,
  97        TP_PROTO(
  98                const struct rdma_id_private *id_priv
  99        ),
 100
 101        TP_ARGS(id_priv),
 102
 103        TP_STRUCT__entry(
 104                __field(u32, cm_id)
 105                __field(u32, tos)
 106                __field(u32, qp_num)
 107                __array(unsigned char, srcaddr, sizeof(struct sockaddr_in6))
 108                __array(unsigned char, dstaddr, sizeof(struct sockaddr_in6))
 109        ),
 110
 111        TP_fast_assign(
 112                __entry->cm_id = id_priv->res.id;
 113                __entry->tos = id_priv->tos;
 114                __entry->qp_num = id_priv->qp_num;
 115                memcpy(__entry->srcaddr, &id_priv->id.route.addr.src_addr,
 116                       sizeof(struct sockaddr_in6));
 117                memcpy(__entry->dstaddr, &id_priv->id.route.addr.dst_addr,
 118                       sizeof(struct sockaddr_in6));
 119        ),
 120
 121        TP_printk("cm.id=%u src=%pISpc dst=%pISpc tos=%u qp_num=%u",
 122                __entry->cm_id, __entry->srcaddr, __entry->dstaddr, __entry->tos,
 123                __entry->qp_num
 124        )
 125);
 126
 127#define DEFINE_CMA_QP_EVENT(name)                                               \
 128                DEFINE_EVENT(cma_qp_class, cm_##name,                           \
 129                                TP_PROTO(                                       \
 130                                        const struct rdma_id_private *id_priv   \
 131                                ),                                              \
 132                                TP_ARGS(id_priv))
 133
 134DEFINE_CMA_QP_EVENT(send_req);
 135DEFINE_CMA_QP_EVENT(send_rep);
 136DEFINE_CMA_QP_EVENT(qp_destroy);
 137
 138/*
 139 * enum ib_wp_type, from include/rdma/ib_verbs.h
 140 */
 141#define IB_QP_TYPE_LIST                         \
 142        ib_qp_type(SMI)                         \
 143        ib_qp_type(GSI)                         \
 144        ib_qp_type(RC)                          \
 145        ib_qp_type(UC)                          \
 146        ib_qp_type(UD)                          \
 147        ib_qp_type(RAW_IPV6)                    \
 148        ib_qp_type(RAW_ETHERTYPE)               \
 149        ib_qp_type(RAW_PACKET)                  \
 150        ib_qp_type(XRC_INI)                     \
 151        ib_qp_type_end(XRC_TGT)
 152
 153#undef ib_qp_type
 154#undef ib_qp_type_end
 155
 156#define ib_qp_type(x)           TRACE_DEFINE_ENUM(IB_QPT_##x);
 157#define ib_qp_type_end(x)       TRACE_DEFINE_ENUM(IB_QPT_##x);
 158
 159IB_QP_TYPE_LIST
 160
 161#undef ib_qp_type
 162#undef ib_qp_type_end
 163
 164#define ib_qp_type(x)           { IB_QPT_##x, #x },
 165#define ib_qp_type_end(x)       { IB_QPT_##x, #x }
 166
 167#define rdma_show_qp_type(x) \
 168                __print_symbolic(x, IB_QP_TYPE_LIST)
 169
 170
 171TRACE_EVENT(cm_qp_create,
 172        TP_PROTO(
 173                const struct rdma_id_private *id_priv,
 174                const struct ib_pd *pd,
 175                const struct ib_qp_init_attr *qp_init_attr,
 176                int rc
 177        ),
 178
 179        TP_ARGS(id_priv, pd, qp_init_attr, rc),
 180
 181        TP_STRUCT__entry(
 182                __field(u32, cm_id)
 183                __field(u32, pd_id)
 184                __field(u32, tos)
 185                __field(u32, qp_num)
 186                __field(u32, send_wr)
 187                __field(u32, recv_wr)
 188                __field(int, rc)
 189                __field(unsigned long, qp_type)
 190                __array(unsigned char, srcaddr, sizeof(struct sockaddr_in6))
 191                __array(unsigned char, dstaddr, sizeof(struct sockaddr_in6))
 192        ),
 193
 194        TP_fast_assign(
 195                __entry->cm_id = id_priv->res.id;
 196                __entry->pd_id = pd->res.id;
 197                __entry->tos = id_priv->tos;
 198                __entry->send_wr = qp_init_attr->cap.max_send_wr;
 199                __entry->recv_wr = qp_init_attr->cap.max_recv_wr;
 200                __entry->rc = rc;
 201                if (!rc) {
 202                        __entry->qp_num = id_priv->qp_num;
 203                        __entry->qp_type = id_priv->id.qp_type;
 204                } else {
 205                        __entry->qp_num = 0;
 206                        __entry->qp_type = 0;
 207                }
 208                memcpy(__entry->srcaddr, &id_priv->id.route.addr.src_addr,
 209                       sizeof(struct sockaddr_in6));
 210                memcpy(__entry->dstaddr, &id_priv->id.route.addr.dst_addr,
 211                       sizeof(struct sockaddr_in6));
 212        ),
 213
 214        TP_printk("cm.id=%u src=%pISpc dst=%pISpc tos=%u pd.id=%u qp_type=%s"
 215                " send_wr=%u recv_wr=%u qp_num=%u rc=%d",
 216                __entry->cm_id, __entry->srcaddr, __entry->dstaddr,
 217                __entry->tos, __entry->pd_id,
 218                rdma_show_qp_type(__entry->qp_type), __entry->send_wr,
 219                __entry->recv_wr, __entry->qp_num, __entry->rc
 220        )
 221);
 222
 223TRACE_EVENT(cm_req_handler,
 224        TP_PROTO(
 225                const struct rdma_id_private *id_priv,
 226                int event
 227        ),
 228
 229        TP_ARGS(id_priv, event),
 230
 231        TP_STRUCT__entry(
 232                __field(u32, cm_id)
 233                __field(u32, tos)
 234                __field(unsigned long, event)
 235                __array(unsigned char, srcaddr, sizeof(struct sockaddr_in6))
 236                __array(unsigned char, dstaddr, sizeof(struct sockaddr_in6))
 237        ),
 238
 239        TP_fast_assign(
 240                __entry->cm_id = id_priv->res.id;
 241                __entry->tos = id_priv->tos;
 242                __entry->event = event;
 243                memcpy(__entry->srcaddr, &id_priv->id.route.addr.src_addr,
 244                       sizeof(struct sockaddr_in6));
 245                memcpy(__entry->dstaddr, &id_priv->id.route.addr.dst_addr,
 246                       sizeof(struct sockaddr_in6));
 247        ),
 248
 249        TP_printk("cm.id=%u src=%pISpc dst=%pISpc tos=%u %s (%lu)",
 250                __entry->cm_id, __entry->srcaddr, __entry->dstaddr, __entry->tos,
 251                rdma_show_ib_cm_event(__entry->event), __entry->event
 252        )
 253);
 254
 255TRACE_EVENT(cm_event_handler,
 256        TP_PROTO(
 257                const struct rdma_id_private *id_priv,
 258                const struct rdma_cm_event *event
 259        ),
 260
 261        TP_ARGS(id_priv, event),
 262
 263        TP_STRUCT__entry(
 264                __field(u32, cm_id)
 265                __field(u32, tos)
 266                __field(unsigned long, event)
 267                __field(int, status)
 268                __array(unsigned char, srcaddr, sizeof(struct sockaddr_in6))
 269                __array(unsigned char, dstaddr, sizeof(struct sockaddr_in6))
 270        ),
 271
 272        TP_fast_assign(
 273                __entry->cm_id = id_priv->res.id;
 274                __entry->tos = id_priv->tos;
 275                __entry->event = event->event;
 276                __entry->status = event->status;
 277                memcpy(__entry->srcaddr, &id_priv->id.route.addr.src_addr,
 278                       sizeof(struct sockaddr_in6));
 279                memcpy(__entry->dstaddr, &id_priv->id.route.addr.dst_addr,
 280                       sizeof(struct sockaddr_in6));
 281        ),
 282
 283        TP_printk("cm.id=%u src=%pISpc dst=%pISpc tos=%u %s (%lu/%d)",
 284                __entry->cm_id, __entry->srcaddr, __entry->dstaddr, __entry->tos,
 285                rdma_show_cm_event(__entry->event), __entry->event,
 286                __entry->status
 287        )
 288);
 289
 290TRACE_EVENT(cm_event_done,
 291        TP_PROTO(
 292                const struct rdma_id_private *id_priv,
 293                const struct rdma_cm_event *event,
 294                int result
 295        ),
 296
 297        TP_ARGS(id_priv, event, result),
 298
 299        TP_STRUCT__entry(
 300                __field(u32, cm_id)
 301                __field(u32, tos)
 302                __field(unsigned long, event)
 303                __field(int, result)
 304                __array(unsigned char, srcaddr, sizeof(struct sockaddr_in6))
 305                __array(unsigned char, dstaddr, sizeof(struct sockaddr_in6))
 306        ),
 307
 308        TP_fast_assign(
 309                __entry->cm_id = id_priv->res.id;
 310                __entry->tos = id_priv->tos;
 311                __entry->event = event->event;
 312                __entry->result = result;
 313                memcpy(__entry->srcaddr, &id_priv->id.route.addr.src_addr,
 314                       sizeof(struct sockaddr_in6));
 315                memcpy(__entry->dstaddr, &id_priv->id.route.addr.dst_addr,
 316                       sizeof(struct sockaddr_in6));
 317        ),
 318
 319        TP_printk("cm.id=%u src=%pISpc dst=%pISpc tos=%u %s consumer returns %d",
 320                __entry->cm_id, __entry->srcaddr, __entry->dstaddr, __entry->tos,
 321                rdma_show_cm_event(__entry->event), __entry->result
 322        )
 323);
 324
 325DECLARE_EVENT_CLASS(cma_client_class,
 326        TP_PROTO(
 327                const struct ib_device *device
 328        ),
 329
 330        TP_ARGS(device),
 331
 332        TP_STRUCT__entry(
 333                __string(name, device->name)
 334        ),
 335
 336        TP_fast_assign(
 337                __assign_str(name, device->name);
 338        ),
 339
 340        TP_printk("device name=%s",
 341                __get_str(name)
 342        )
 343);
 344
 345#define DEFINE_CMA_CLIENT_EVENT(name)                                           \
 346                DEFINE_EVENT(cma_client_class, cm_##name,                       \
 347                                TP_PROTO(                                       \
 348                                        const struct ib_device *device          \
 349                                ),                                              \
 350                                TP_ARGS(device))
 351
 352DEFINE_CMA_CLIENT_EVENT(add_one);
 353DEFINE_CMA_CLIENT_EVENT(remove_one);
 354
 355#endif /* _TRACE_RDMA_CMA_H */
 356
 357#undef TRACE_INCLUDE_PATH
 358#define TRACE_INCLUDE_PATH .
 359#define TRACE_INCLUDE_FILE cma_trace
 360
 361#include <trace/define_trace.h>
 362