0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #undef TRACE_SYSTEM
0011 #define TRACE_SYSTEM rdma_cma
0012
0013 #if !defined(_TRACE_RDMA_CMA_H) || defined(TRACE_HEADER_MULTI_READ)
0014
0015 #define _TRACE_RDMA_CMA_H
0016
0017 #include <linux/tracepoint.h>
0018 #include <trace/events/rdma.h>
0019
0020
0021 DECLARE_EVENT_CLASS(cma_fsm_class,
0022 TP_PROTO(
0023 const struct rdma_id_private *id_priv
0024 ),
0025
0026 TP_ARGS(id_priv),
0027
0028 TP_STRUCT__entry(
0029 __field(u32, cm_id)
0030 __field(u32, tos)
0031 __array(unsigned char, srcaddr, sizeof(struct sockaddr_in6))
0032 __array(unsigned char, dstaddr, sizeof(struct sockaddr_in6))
0033 ),
0034
0035 TP_fast_assign(
0036 __entry->cm_id = id_priv->res.id;
0037 __entry->tos = id_priv->tos;
0038 memcpy(__entry->srcaddr, &id_priv->id.route.addr.src_addr,
0039 sizeof(struct sockaddr_in6));
0040 memcpy(__entry->dstaddr, &id_priv->id.route.addr.dst_addr,
0041 sizeof(struct sockaddr_in6));
0042 ),
0043
0044 TP_printk("cm.id=%u src=%pISpc dst=%pISpc tos=%u",
0045 __entry->cm_id, __entry->srcaddr, __entry->dstaddr, __entry->tos
0046 )
0047 );
0048
0049 #define DEFINE_CMA_FSM_EVENT(name) \
0050 DEFINE_EVENT(cma_fsm_class, cm_##name, \
0051 TP_PROTO( \
0052 const struct rdma_id_private *id_priv \
0053 ), \
0054 TP_ARGS(id_priv))
0055
0056 DEFINE_CMA_FSM_EVENT(send_rtu);
0057 DEFINE_CMA_FSM_EVENT(send_rej);
0058 DEFINE_CMA_FSM_EVENT(send_mra);
0059 DEFINE_CMA_FSM_EVENT(send_sidr_req);
0060 DEFINE_CMA_FSM_EVENT(send_sidr_rep);
0061 DEFINE_CMA_FSM_EVENT(disconnect);
0062 DEFINE_CMA_FSM_EVENT(sent_drep);
0063 DEFINE_CMA_FSM_EVENT(sent_dreq);
0064 DEFINE_CMA_FSM_EVENT(id_destroy);
0065
0066 TRACE_EVENT(cm_id_attach,
0067 TP_PROTO(
0068 const struct rdma_id_private *id_priv,
0069 const struct ib_device *device
0070 ),
0071
0072 TP_ARGS(id_priv, device),
0073
0074 TP_STRUCT__entry(
0075 __field(u32, cm_id)
0076 __array(unsigned char, srcaddr, sizeof(struct sockaddr_in6))
0077 __array(unsigned char, dstaddr, sizeof(struct sockaddr_in6))
0078 __string(devname, device->name)
0079 ),
0080
0081 TP_fast_assign(
0082 __entry->cm_id = id_priv->res.id;
0083 memcpy(__entry->srcaddr, &id_priv->id.route.addr.src_addr,
0084 sizeof(struct sockaddr_in6));
0085 memcpy(__entry->dstaddr, &id_priv->id.route.addr.dst_addr,
0086 sizeof(struct sockaddr_in6));
0087 __assign_str(devname, device->name);
0088 ),
0089
0090 TP_printk("cm.id=%u src=%pISpc dst=%pISpc device=%s",
0091 __entry->cm_id, __entry->srcaddr, __entry->dstaddr,
0092 __get_str(devname)
0093 )
0094 );
0095
0096 DECLARE_EVENT_CLASS(cma_qp_class,
0097 TP_PROTO(
0098 const struct rdma_id_private *id_priv
0099 ),
0100
0101 TP_ARGS(id_priv),
0102
0103 TP_STRUCT__entry(
0104 __field(u32, cm_id)
0105 __field(u32, tos)
0106 __field(u32, qp_num)
0107 __array(unsigned char, srcaddr, sizeof(struct sockaddr_in6))
0108 __array(unsigned char, dstaddr, sizeof(struct sockaddr_in6))
0109 ),
0110
0111 TP_fast_assign(
0112 __entry->cm_id = id_priv->res.id;
0113 __entry->tos = id_priv->tos;
0114 __entry->qp_num = id_priv->qp_num;
0115 memcpy(__entry->srcaddr, &id_priv->id.route.addr.src_addr,
0116 sizeof(struct sockaddr_in6));
0117 memcpy(__entry->dstaddr, &id_priv->id.route.addr.dst_addr,
0118 sizeof(struct sockaddr_in6));
0119 ),
0120
0121 TP_printk("cm.id=%u src=%pISpc dst=%pISpc tos=%u qp_num=%u",
0122 __entry->cm_id, __entry->srcaddr, __entry->dstaddr, __entry->tos,
0123 __entry->qp_num
0124 )
0125 );
0126
0127 #define DEFINE_CMA_QP_EVENT(name) \
0128 DEFINE_EVENT(cma_qp_class, cm_##name, \
0129 TP_PROTO( \
0130 const struct rdma_id_private *id_priv \
0131 ), \
0132 TP_ARGS(id_priv))
0133
0134 DEFINE_CMA_QP_EVENT(send_req);
0135 DEFINE_CMA_QP_EVENT(send_rep);
0136 DEFINE_CMA_QP_EVENT(qp_destroy);
0137
0138
0139
0140
0141 #define IB_QP_TYPE_LIST \
0142 ib_qp_type(SMI) \
0143 ib_qp_type(GSI) \
0144 ib_qp_type(RC) \
0145 ib_qp_type(UC) \
0146 ib_qp_type(UD) \
0147 ib_qp_type(RAW_IPV6) \
0148 ib_qp_type(RAW_ETHERTYPE) \
0149 ib_qp_type(RAW_PACKET) \
0150 ib_qp_type(XRC_INI) \
0151 ib_qp_type_end(XRC_TGT)
0152
0153 #undef ib_qp_type
0154 #undef ib_qp_type_end
0155
0156 #define ib_qp_type(x) TRACE_DEFINE_ENUM(IB_QPT_##x);
0157 #define ib_qp_type_end(x) TRACE_DEFINE_ENUM(IB_QPT_##x);
0158
0159 IB_QP_TYPE_LIST
0160
0161 #undef ib_qp_type
0162 #undef ib_qp_type_end
0163
0164 #define ib_qp_type(x) { IB_QPT_##x, #x },
0165 #define ib_qp_type_end(x) { IB_QPT_##x, #x }
0166
0167 #define rdma_show_qp_type(x) \
0168 __print_symbolic(x, IB_QP_TYPE_LIST)
0169
0170
0171 TRACE_EVENT(cm_qp_create,
0172 TP_PROTO(
0173 const struct rdma_id_private *id_priv,
0174 const struct ib_pd *pd,
0175 const struct ib_qp_init_attr *qp_init_attr,
0176 int rc
0177 ),
0178
0179 TP_ARGS(id_priv, pd, qp_init_attr, rc),
0180
0181 TP_STRUCT__entry(
0182 __field(u32, cm_id)
0183 __field(u32, pd_id)
0184 __field(u32, tos)
0185 __field(u32, qp_num)
0186 __field(u32, send_wr)
0187 __field(u32, recv_wr)
0188 __field(int, rc)
0189 __field(unsigned long, qp_type)
0190 __array(unsigned char, srcaddr, sizeof(struct sockaddr_in6))
0191 __array(unsigned char, dstaddr, sizeof(struct sockaddr_in6))
0192 ),
0193
0194 TP_fast_assign(
0195 __entry->cm_id = id_priv->res.id;
0196 __entry->pd_id = pd->res.id;
0197 __entry->tos = id_priv->tos;
0198 __entry->send_wr = qp_init_attr->cap.max_send_wr;
0199 __entry->recv_wr = qp_init_attr->cap.max_recv_wr;
0200 __entry->rc = rc;
0201 if (!rc) {
0202 __entry->qp_num = id_priv->qp_num;
0203 __entry->qp_type = id_priv->id.qp_type;
0204 } else {
0205 __entry->qp_num = 0;
0206 __entry->qp_type = 0;
0207 }
0208 memcpy(__entry->srcaddr, &id_priv->id.route.addr.src_addr,
0209 sizeof(struct sockaddr_in6));
0210 memcpy(__entry->dstaddr, &id_priv->id.route.addr.dst_addr,
0211 sizeof(struct sockaddr_in6));
0212 ),
0213
0214 TP_printk("cm.id=%u src=%pISpc dst=%pISpc tos=%u pd.id=%u qp_type=%s"
0215 " send_wr=%u recv_wr=%u qp_num=%u rc=%d",
0216 __entry->cm_id, __entry->srcaddr, __entry->dstaddr,
0217 __entry->tos, __entry->pd_id,
0218 rdma_show_qp_type(__entry->qp_type), __entry->send_wr,
0219 __entry->recv_wr, __entry->qp_num, __entry->rc
0220 )
0221 );
0222
0223 TRACE_EVENT(cm_req_handler,
0224 TP_PROTO(
0225 const struct rdma_id_private *id_priv,
0226 int event
0227 ),
0228
0229 TP_ARGS(id_priv, event),
0230
0231 TP_STRUCT__entry(
0232 __field(u32, cm_id)
0233 __field(u32, tos)
0234 __field(unsigned long, event)
0235 __array(unsigned char, srcaddr, sizeof(struct sockaddr_in6))
0236 __array(unsigned char, dstaddr, sizeof(struct sockaddr_in6))
0237 ),
0238
0239 TP_fast_assign(
0240 __entry->cm_id = id_priv->res.id;
0241 __entry->tos = id_priv->tos;
0242 __entry->event = event;
0243 memcpy(__entry->srcaddr, &id_priv->id.route.addr.src_addr,
0244 sizeof(struct sockaddr_in6));
0245 memcpy(__entry->dstaddr, &id_priv->id.route.addr.dst_addr,
0246 sizeof(struct sockaddr_in6));
0247 ),
0248
0249 TP_printk("cm.id=%u src=%pISpc dst=%pISpc tos=%u %s (%lu)",
0250 __entry->cm_id, __entry->srcaddr, __entry->dstaddr, __entry->tos,
0251 rdma_show_ib_cm_event(__entry->event), __entry->event
0252 )
0253 );
0254
0255 TRACE_EVENT(cm_event_handler,
0256 TP_PROTO(
0257 const struct rdma_id_private *id_priv,
0258 const struct rdma_cm_event *event
0259 ),
0260
0261 TP_ARGS(id_priv, event),
0262
0263 TP_STRUCT__entry(
0264 __field(u32, cm_id)
0265 __field(u32, tos)
0266 __field(unsigned long, event)
0267 __field(int, status)
0268 __array(unsigned char, srcaddr, sizeof(struct sockaddr_in6))
0269 __array(unsigned char, dstaddr, sizeof(struct sockaddr_in6))
0270 ),
0271
0272 TP_fast_assign(
0273 __entry->cm_id = id_priv->res.id;
0274 __entry->tos = id_priv->tos;
0275 __entry->event = event->event;
0276 __entry->status = event->status;
0277 memcpy(__entry->srcaddr, &id_priv->id.route.addr.src_addr,
0278 sizeof(struct sockaddr_in6));
0279 memcpy(__entry->dstaddr, &id_priv->id.route.addr.dst_addr,
0280 sizeof(struct sockaddr_in6));
0281 ),
0282
0283 TP_printk("cm.id=%u src=%pISpc dst=%pISpc tos=%u %s (%lu/%d)",
0284 __entry->cm_id, __entry->srcaddr, __entry->dstaddr, __entry->tos,
0285 rdma_show_cm_event(__entry->event), __entry->event,
0286 __entry->status
0287 )
0288 );
0289
0290 TRACE_EVENT(cm_event_done,
0291 TP_PROTO(
0292 const struct rdma_id_private *id_priv,
0293 const struct rdma_cm_event *event,
0294 int result
0295 ),
0296
0297 TP_ARGS(id_priv, event, result),
0298
0299 TP_STRUCT__entry(
0300 __field(u32, cm_id)
0301 __field(u32, tos)
0302 __field(unsigned long, event)
0303 __field(int, result)
0304 __array(unsigned char, srcaddr, sizeof(struct sockaddr_in6))
0305 __array(unsigned char, dstaddr, sizeof(struct sockaddr_in6))
0306 ),
0307
0308 TP_fast_assign(
0309 __entry->cm_id = id_priv->res.id;
0310 __entry->tos = id_priv->tos;
0311 __entry->event = event->event;
0312 __entry->result = result;
0313 memcpy(__entry->srcaddr, &id_priv->id.route.addr.src_addr,
0314 sizeof(struct sockaddr_in6));
0315 memcpy(__entry->dstaddr, &id_priv->id.route.addr.dst_addr,
0316 sizeof(struct sockaddr_in6));
0317 ),
0318
0319 TP_printk("cm.id=%u src=%pISpc dst=%pISpc tos=%u %s consumer returns %d",
0320 __entry->cm_id, __entry->srcaddr, __entry->dstaddr, __entry->tos,
0321 rdma_show_cm_event(__entry->event), __entry->result
0322 )
0323 );
0324
0325 DECLARE_EVENT_CLASS(cma_client_class,
0326 TP_PROTO(
0327 const struct ib_device *device
0328 ),
0329
0330 TP_ARGS(device),
0331
0332 TP_STRUCT__entry(
0333 __string(name, device->name)
0334 ),
0335
0336 TP_fast_assign(
0337 __assign_str(name, device->name);
0338 ),
0339
0340 TP_printk("device name=%s",
0341 __get_str(name)
0342 )
0343 );
0344
0345 #define DEFINE_CMA_CLIENT_EVENT(name) \
0346 DEFINE_EVENT(cma_client_class, cm_##name, \
0347 TP_PROTO( \
0348 const struct ib_device *device \
0349 ), \
0350 TP_ARGS(device))
0351
0352 DEFINE_CMA_CLIENT_EVENT(add_one);
0353 DEFINE_CMA_CLIENT_EVENT(remove_one);
0354
0355 #endif
0356
0357 #undef TRACE_INCLUDE_PATH
0358 #define TRACE_INCLUDE_PATH .
0359 #define TRACE_INCLUDE_FILE cma_trace
0360
0361 #include <trace/define_trace.h>