415 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) 2020 Oracle and/or its affiliates.8 */9 10#undef TRACE_SYSTEM11#define TRACE_SYSTEM ib_cma12 13#if !defined(_TRACE_IB_CMA_H) || defined(TRACE_HEADER_MULTI_READ)14 15#define _TRACE_IB_CMA_H16 17#include <linux/tracepoint.h>18#include <rdma/ib_cm.h>19#include <trace/misc/rdma.h>20 21/*22 * enum ib_cm_state, from include/rdma/ib_cm.h23 */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_state43#undef ib_cm_state_end44#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_LIST48 49#undef ib_cm_state50#undef ib_cm_state_end51#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.h59 */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_state69#undef ib_cm_lap_state_end70#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_LIST74 75#undef ib_cm_lap_state76#undef ib_cm_lap_state_end77#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.h85 */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_reason123#undef ib_cm_rej_reason_end124#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_LIST128 129#undef ib_cm_rej_reason130#undef ib_cm_rej_reason_end131#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_id140 ),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 reason190 ),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_id250 ),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_id266 )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_id286 ),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_id300 )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 state318 ),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 state342 ),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 event367 ),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_status388 ),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_PATH411#define TRACE_INCLUDE_PATH ../../drivers/infiniband/core412#define TRACE_INCLUDE_FILE cm_trace413 414#include <trace/define_trace.h>415