cma_trace.h (9173B)
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>