0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #undef TRACE_SYSTEM
0011 #define TRACE_SYSTEM ib_cma
0012
0013 #if !defined(_TRACE_IB_CMA_H) || defined(TRACE_HEADER_MULTI_READ)
0014
0015 #define _TRACE_IB_CMA_H
0016
0017 #include <linux/tracepoint.h>
0018 #include <rdma/ib_cm.h>
0019 #include <trace/events/rdma.h>
0020
0021
0022
0023
0024 #define IB_CM_STATE_LIST \
0025 ib_cm_state(IDLE) \
0026 ib_cm_state(LISTEN) \
0027 ib_cm_state(REQ_SENT) \
0028 ib_cm_state(REQ_RCVD) \
0029 ib_cm_state(MRA_REQ_SENT) \
0030 ib_cm_state(MRA_REQ_RCVD) \
0031 ib_cm_state(REP_SENT) \
0032 ib_cm_state(REP_RCVD) \
0033 ib_cm_state(MRA_REP_SENT) \
0034 ib_cm_state(MRA_REP_RCVD) \
0035 ib_cm_state(ESTABLISHED) \
0036 ib_cm_state(DREQ_SENT) \
0037 ib_cm_state(DREQ_RCVD) \
0038 ib_cm_state(TIMEWAIT) \
0039 ib_cm_state(SIDR_REQ_SENT) \
0040 ib_cm_state_end(SIDR_REQ_RCVD)
0041
0042 #undef ib_cm_state
0043 #undef ib_cm_state_end
0044 #define ib_cm_state(x) TRACE_DEFINE_ENUM(IB_CM_##x);
0045 #define ib_cm_state_end(x) TRACE_DEFINE_ENUM(IB_CM_##x);
0046
0047 IB_CM_STATE_LIST
0048
0049 #undef ib_cm_state
0050 #undef ib_cm_state_end
0051 #define ib_cm_state(x) { IB_CM_##x, #x },
0052 #define ib_cm_state_end(x) { IB_CM_##x, #x }
0053
0054 #define show_ib_cm_state(x) \
0055 __print_symbolic(x, IB_CM_STATE_LIST)
0056
0057
0058
0059
0060 #define IB_CM_LAP_STATE_LIST \
0061 ib_cm_lap_state(LAP_UNINIT) \
0062 ib_cm_lap_state(LAP_IDLE) \
0063 ib_cm_lap_state(LAP_SENT) \
0064 ib_cm_lap_state(LAP_RCVD) \
0065 ib_cm_lap_state(MRA_LAP_SENT) \
0066 ib_cm_lap_state_end(MRA_LAP_RCVD)
0067
0068 #undef ib_cm_lap_state
0069 #undef ib_cm_lap_state_end
0070 #define ib_cm_lap_state(x) TRACE_DEFINE_ENUM(IB_CM_##x);
0071 #define ib_cm_lap_state_end(x) TRACE_DEFINE_ENUM(IB_CM_##x);
0072
0073 IB_CM_LAP_STATE_LIST
0074
0075 #undef ib_cm_lap_state
0076 #undef ib_cm_lap_state_end
0077 #define ib_cm_lap_state(x) { IB_CM_##x, #x },
0078 #define ib_cm_lap_state_end(x) { IB_CM_##x, #x }
0079
0080 #define show_ib_cm_lap_state(x) \
0081 __print_symbolic(x, IB_CM_LAP_STATE_LIST)
0082
0083
0084
0085
0086 #define IB_CM_REJ_REASON_LIST \
0087 ib_cm_rej_reason(REJ_NO_QP) \
0088 ib_cm_rej_reason(REJ_NO_EEC) \
0089 ib_cm_rej_reason(REJ_NO_RESOURCES) \
0090 ib_cm_rej_reason(REJ_TIMEOUT) \
0091 ib_cm_rej_reason(REJ_UNSUPPORTED) \
0092 ib_cm_rej_reason(REJ_INVALID_COMM_ID) \
0093 ib_cm_rej_reason(REJ_INVALID_COMM_INSTANCE) \
0094 ib_cm_rej_reason(REJ_INVALID_SERVICE_ID) \
0095 ib_cm_rej_reason(REJ_INVALID_TRANSPORT_TYPE) \
0096 ib_cm_rej_reason(REJ_STALE_CONN) \
0097 ib_cm_rej_reason(REJ_RDC_NOT_EXIST) \
0098 ib_cm_rej_reason(REJ_INVALID_GID) \
0099 ib_cm_rej_reason(REJ_INVALID_LID) \
0100 ib_cm_rej_reason(REJ_INVALID_SL) \
0101 ib_cm_rej_reason(REJ_INVALID_TRAFFIC_CLASS) \
0102 ib_cm_rej_reason(REJ_INVALID_HOP_LIMIT) \
0103 ib_cm_rej_reason(REJ_INVALID_PACKET_RATE) \
0104 ib_cm_rej_reason(REJ_INVALID_ALT_GID) \
0105 ib_cm_rej_reason(REJ_INVALID_ALT_LID) \
0106 ib_cm_rej_reason(REJ_INVALID_ALT_SL) \
0107 ib_cm_rej_reason(REJ_INVALID_ALT_TRAFFIC_CLASS) \
0108 ib_cm_rej_reason(REJ_INVALID_ALT_HOP_LIMIT) \
0109 ib_cm_rej_reason(REJ_INVALID_ALT_PACKET_RATE) \
0110 ib_cm_rej_reason(REJ_PORT_CM_REDIRECT) \
0111 ib_cm_rej_reason(REJ_PORT_REDIRECT) \
0112 ib_cm_rej_reason(REJ_INVALID_MTU) \
0113 ib_cm_rej_reason(REJ_INSUFFICIENT_RESP_RESOURCES) \
0114 ib_cm_rej_reason(REJ_CONSUMER_DEFINED) \
0115 ib_cm_rej_reason(REJ_INVALID_RNR_RETRY) \
0116 ib_cm_rej_reason(REJ_DUPLICATE_LOCAL_COMM_ID) \
0117 ib_cm_rej_reason(REJ_INVALID_CLASS_VERSION) \
0118 ib_cm_rej_reason(REJ_INVALID_FLOW_LABEL) \
0119 ib_cm_rej_reason(REJ_INVALID_ALT_FLOW_LABEL) \
0120 ib_cm_rej_reason_end(REJ_VENDOR_OPTION_NOT_SUPPORTED)
0121
0122 #undef ib_cm_rej_reason
0123 #undef ib_cm_rej_reason_end
0124 #define ib_cm_rej_reason(x) TRACE_DEFINE_ENUM(IB_CM_##x);
0125 #define ib_cm_rej_reason_end(x) TRACE_DEFINE_ENUM(IB_CM_##x);
0126
0127 IB_CM_REJ_REASON_LIST
0128
0129 #undef ib_cm_rej_reason
0130 #undef ib_cm_rej_reason_end
0131 #define ib_cm_rej_reason(x) { IB_CM_##x, #x },
0132 #define ib_cm_rej_reason_end(x) { IB_CM_##x, #x }
0133
0134 #define show_ib_cm_rej_reason(x) \
0135 __print_symbolic(x, IB_CM_REJ_REASON_LIST)
0136
0137 DECLARE_EVENT_CLASS(icm_id_class,
0138 TP_PROTO(
0139 const struct ib_cm_id *cm_id
0140 ),
0141
0142 TP_ARGS(cm_id),
0143
0144 TP_STRUCT__entry(
0145 __field(const void *, cm_id)
0146 __field(unsigned int, local_id)
0147 __field(unsigned int, remote_id)
0148 __field(unsigned long, state)
0149 __field(unsigned long, lap_state)
0150 ),
0151
0152 TP_fast_assign(
0153 __entry->cm_id = cm_id;
0154 __entry->local_id = be32_to_cpu(cm_id->local_id);
0155 __entry->remote_id = be32_to_cpu(cm_id->remote_id);
0156 __entry->state = cm_id->state;
0157 __entry->lap_state = cm_id->lap_state;
0158 ),
0159
0160 TP_printk("local_id=%u remote_id=%u state=%s lap_state=%s",
0161 __entry->local_id, __entry->remote_id,
0162 show_ib_cm_state(__entry->state),
0163 show_ib_cm_lap_state(__entry->lap_state)
0164 )
0165 );
0166
0167 #define DEFINE_CM_SEND_EVENT(name) \
0168 DEFINE_EVENT(icm_id_class, \
0169 icm_send_##name, \
0170 TP_PROTO( \
0171 const struct ib_cm_id *cm_id \
0172 ), \
0173 TP_ARGS(cm_id))
0174
0175 DEFINE_CM_SEND_EVENT(req);
0176 DEFINE_CM_SEND_EVENT(rep);
0177 DEFINE_CM_SEND_EVENT(dup_req);
0178 DEFINE_CM_SEND_EVENT(dup_rep);
0179 DEFINE_CM_SEND_EVENT(rtu);
0180 DEFINE_CM_SEND_EVENT(mra);
0181 DEFINE_CM_SEND_EVENT(sidr_req);
0182 DEFINE_CM_SEND_EVENT(sidr_rep);
0183 DEFINE_CM_SEND_EVENT(dreq);
0184 DEFINE_CM_SEND_EVENT(drep);
0185
0186 TRACE_EVENT(icm_send_rej,
0187 TP_PROTO(
0188 const struct ib_cm_id *cm_id,
0189 enum ib_cm_rej_reason reason
0190 ),
0191
0192 TP_ARGS(cm_id, reason),
0193
0194 TP_STRUCT__entry(
0195 __field(const void *, cm_id)
0196 __field(u32, local_id)
0197 __field(u32, remote_id)
0198 __field(unsigned long, state)
0199 __field(unsigned long, reason)
0200 ),
0201
0202 TP_fast_assign(
0203 __entry->cm_id = cm_id;
0204 __entry->local_id = be32_to_cpu(cm_id->local_id);
0205 __entry->remote_id = be32_to_cpu(cm_id->remote_id);
0206 __entry->state = cm_id->state;
0207 __entry->reason = reason;
0208 ),
0209
0210 TP_printk("local_id=%u remote_id=%u state=%s reason=%s",
0211 __entry->local_id, __entry->remote_id,
0212 show_ib_cm_state(__entry->state),
0213 show_ib_cm_rej_reason(__entry->reason)
0214 )
0215 );
0216
0217 #define DEFINE_CM_ERR_EVENT(name) \
0218 DEFINE_EVENT(icm_id_class, \
0219 icm_##name##_err, \
0220 TP_PROTO( \
0221 const struct ib_cm_id *cm_id \
0222 ), \
0223 TP_ARGS(cm_id))
0224
0225 DEFINE_CM_ERR_EVENT(send_cm_rtu);
0226 DEFINE_CM_ERR_EVENT(establish);
0227 DEFINE_CM_ERR_EVENT(no_listener);
0228 DEFINE_CM_ERR_EVENT(send_drep);
0229 DEFINE_CM_ERR_EVENT(dreq_unknown);
0230 DEFINE_CM_ERR_EVENT(send_unknown_rej);
0231 DEFINE_CM_ERR_EVENT(rej_unknown);
0232 DEFINE_CM_ERR_EVENT(send_mra_unknown);
0233 DEFINE_CM_ERR_EVENT(mra_unknown);
0234 DEFINE_CM_ERR_EVENT(qp_init);
0235 DEFINE_CM_ERR_EVENT(qp_rtr);
0236 DEFINE_CM_ERR_EVENT(qp_rts);
0237
0238 DEFINE_EVENT(icm_id_class, \
0239 icm_dreq_skipped, \
0240 TP_PROTO( \
0241 const struct ib_cm_id *cm_id \
0242 ), \
0243 TP_ARGS(cm_id) \
0244 );
0245
0246 DECLARE_EVENT_CLASS(icm_local_class,
0247 TP_PROTO(
0248 unsigned int local_id,
0249 unsigned int remote_id
0250 ),
0251
0252 TP_ARGS(local_id, remote_id),
0253
0254 TP_STRUCT__entry(
0255 __field(unsigned int, local_id)
0256 __field(unsigned int, remote_id)
0257 ),
0258
0259 TP_fast_assign(
0260 __entry->local_id = local_id;
0261 __entry->remote_id = remote_id;
0262 ),
0263
0264 TP_printk("local_id=%u remote_id=%u",
0265 __entry->local_id, __entry->remote_id
0266 )
0267 );
0268
0269 #define DEFINE_CM_LOCAL_EVENT(name) \
0270 DEFINE_EVENT(icm_local_class, \
0271 icm_##name, \
0272 TP_PROTO( \
0273 unsigned int local_id, \
0274 unsigned int remote_id \
0275 ), \
0276 TP_ARGS(local_id, remote_id))
0277
0278 DEFINE_CM_LOCAL_EVENT(issue_rej);
0279 DEFINE_CM_LOCAL_EVENT(issue_drep);
0280 DEFINE_CM_LOCAL_EVENT(staleconn_err);
0281 DEFINE_CM_LOCAL_EVENT(no_priv_err);
0282
0283 DECLARE_EVENT_CLASS(icm_remote_class,
0284 TP_PROTO(
0285 u32 remote_id
0286 ),
0287
0288 TP_ARGS(remote_id),
0289
0290 TP_STRUCT__entry(
0291 __field(u32, remote_id)
0292 ),
0293
0294 TP_fast_assign(
0295 __entry->remote_id = remote_id;
0296 ),
0297
0298 TP_printk("remote_id=%u",
0299 __entry->remote_id
0300 )
0301 );
0302
0303 #define DEFINE_CM_REMOTE_EVENT(name) \
0304 DEFINE_EVENT(icm_remote_class, \
0305 icm_##name, \
0306 TP_PROTO( \
0307 u32 remote_id \
0308 ), \
0309 TP_ARGS(remote_id))
0310
0311 DEFINE_CM_REMOTE_EVENT(remote_no_priv_err);
0312 DEFINE_CM_REMOTE_EVENT(insert_failed_err);
0313
0314 TRACE_EVENT(icm_send_rep_err,
0315 TP_PROTO(
0316 __be32 local_id,
0317 enum ib_cm_state state
0318 ),
0319
0320 TP_ARGS(local_id, state),
0321
0322 TP_STRUCT__entry(
0323 __field(unsigned int, local_id)
0324 __field(unsigned long, state)
0325 ),
0326
0327 TP_fast_assign(
0328 __entry->local_id = be32_to_cpu(local_id);
0329 __entry->state = state;
0330 ),
0331
0332 TP_printk("local_id=%u state=%s",
0333 __entry->local_id, show_ib_cm_state(__entry->state)
0334 )
0335 );
0336
0337 TRACE_EVENT(icm_rep_unknown_err,
0338 TP_PROTO(
0339 unsigned int local_id,
0340 unsigned int remote_id,
0341 enum ib_cm_state state
0342 ),
0343
0344 TP_ARGS(local_id, remote_id, state),
0345
0346 TP_STRUCT__entry(
0347 __field(unsigned int, local_id)
0348 __field(unsigned int, remote_id)
0349 __field(unsigned long, state)
0350 ),
0351
0352 TP_fast_assign(
0353 __entry->local_id = local_id;
0354 __entry->remote_id = remote_id;
0355 __entry->state = state;
0356 ),
0357
0358 TP_printk("local_id=%u remote_id=%u state=%s",
0359 __entry->local_id, __entry->remote_id,
0360 show_ib_cm_state(__entry->state)
0361 )
0362 );
0363
0364 TRACE_EVENT(icm_handler_err,
0365 TP_PROTO(
0366 enum ib_cm_event_type event
0367 ),
0368
0369 TP_ARGS(event),
0370
0371 TP_STRUCT__entry(
0372 __field(unsigned long, event)
0373 ),
0374
0375 TP_fast_assign(
0376 __entry->event = event;
0377 ),
0378
0379 TP_printk("unhandled event=%s",
0380 rdma_show_ib_cm_event(__entry->event)
0381 )
0382 );
0383
0384 TRACE_EVENT(icm_mad_send_err,
0385 TP_PROTO(
0386 enum ib_cm_state state,
0387 enum ib_wc_status wc_status
0388 ),
0389
0390 TP_ARGS(state, wc_status),
0391
0392 TP_STRUCT__entry(
0393 __field(unsigned long, state)
0394 __field(unsigned long, wc_status)
0395 ),
0396
0397 TP_fast_assign(
0398 __entry->state = state;
0399 __entry->wc_status = wc_status;
0400 ),
0401
0402 TP_printk("state=%s completion status=%s",
0403 show_ib_cm_state(__entry->state),
0404 rdma_show_wc_status(__entry->wc_status)
0405 )
0406 );
0407
0408 #endif
0409
0410 #undef TRACE_INCLUDE_PATH
0411 #define TRACE_INCLUDE_PATH ../../drivers/infiniband/core
0412 #define TRACE_INCLUDE_FILE cm_trace
0413
0414 #include <trace/define_trace.h>