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) 2019, Oracle and/or its affiliates. All rights reserved.
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  * enum ib_wp_type, from include/rdma/ib_verbs.h
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 /* _TRACE_RDMA_CMA_H */
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>