Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-only */
0002 /*
0003  * Trace point definitions for the RDMA Connect Manager.
0004  *
0005  * Author: Chuck Lever <chuck.lever@oracle.com>
0006  *
0007  * Copyright (c) 2020 Oracle and/or its affiliates.
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  * enum ib_cm_state, from include/rdma/ib_cm.h
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  * enum ib_cm_lap_state, from include/rdma/ib_cm.h
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  * enum ib_cm_rej_reason, from include/rdma/ib_cm.h
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)    /* for eBPF scripts */
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 /* _TRACE_IB_CMA_H */
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>