cm_trace.h (9905B)
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>