362 lines · c
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_SYSTEM11#define TRACE_SYSTEM rdma_cma12 13#if !defined(_TRACE_RDMA_CMA_H) || defined(TRACE_HEADER_MULTI_READ)14 15#define _TRACE_RDMA_CMA_H16 17#include <linux/tracepoint.h>18#include <trace/misc/rdma.h>19 20 21DECLARE_EVENT_CLASS(cma_fsm_class,22 TP_PROTO(23 const struct rdma_id_private *id_priv24 ),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->tos46 )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 *device70 ),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);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_priv99 ),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_num124 )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.h140 */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_type154#undef ib_qp_type_end155 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_LIST160 161#undef ib_qp_type162#undef ib_qp_type_end163 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 rc177 ),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->rc220 )221);222 223TRACE_EVENT(cm_req_handler,224 TP_PROTO(225 const struct rdma_id_private *id_priv,226 int event227 ),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->event252 )253);254 255TRACE_EVENT(cm_event_handler,256 TP_PROTO(257 const struct rdma_id_private *id_priv,258 const struct rdma_cm_event *event259 ),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->status287 )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 result295 ),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->result322 )323);324 325DECLARE_EVENT_CLASS(cma_client_class,326 TP_PROTO(327 const struct ib_device *device328 ),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);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_PATH358#define TRACE_INCLUDE_PATH .359#define TRACE_INCLUDE_FILE cma_trace360 361#include <trace/define_trace.h>362