cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

cma_trace.h (9173B)


      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) 2019, Oracle and/or its affiliates. All rights reserved.
      8 */
      9
     10#undef TRACE_SYSTEM
     11#define TRACE_SYSTEM rdma_cma
     12
     13#if !defined(_TRACE_RDMA_CMA_H) || defined(TRACE_HEADER_MULTI_READ)
     14
     15#define _TRACE_RDMA_CMA_H
     16
     17#include <linux/tracepoint.h>
     18#include <trace/events/rdma.h>
     19
     20
     21DECLARE_EVENT_CLASS(cma_fsm_class,
     22	TP_PROTO(
     23		const struct rdma_id_private *id_priv
     24	),
     25
     26	TP_ARGS(id_priv),
     27
     28	TP_STRUCT__entry(
     29		__field(u32, cm_id)
     30		__field(u32, tos)
     31		__array(unsigned char, srcaddr, sizeof(struct sockaddr_in6))
     32		__array(unsigned char, dstaddr, sizeof(struct sockaddr_in6))
     33	),
     34
     35	TP_fast_assign(
     36		__entry->cm_id = id_priv->res.id;
     37		__entry->tos = id_priv->tos;
     38		memcpy(__entry->srcaddr, &id_priv->id.route.addr.src_addr,
     39		       sizeof(struct sockaddr_in6));
     40		memcpy(__entry->dstaddr, &id_priv->id.route.addr.dst_addr,
     41		       sizeof(struct sockaddr_in6));
     42	),
     43
     44	TP_printk("cm.id=%u src=%pISpc dst=%pISpc tos=%u",
     45		__entry->cm_id, __entry->srcaddr, __entry->dstaddr, __entry->tos
     46	)
     47);
     48
     49#define DEFINE_CMA_FSM_EVENT(name)						\
     50		DEFINE_EVENT(cma_fsm_class, cm_##name,				\
     51				TP_PROTO(					\
     52					const struct rdma_id_private *id_priv	\
     53				),						\
     54				TP_ARGS(id_priv))
     55
     56DEFINE_CMA_FSM_EVENT(send_rtu);
     57DEFINE_CMA_FSM_EVENT(send_rej);
     58DEFINE_CMA_FSM_EVENT(send_mra);
     59DEFINE_CMA_FSM_EVENT(send_sidr_req);
     60DEFINE_CMA_FSM_EVENT(send_sidr_rep);
     61DEFINE_CMA_FSM_EVENT(disconnect);
     62DEFINE_CMA_FSM_EVENT(sent_drep);
     63DEFINE_CMA_FSM_EVENT(sent_dreq);
     64DEFINE_CMA_FSM_EVENT(id_destroy);
     65
     66TRACE_EVENT(cm_id_attach,
     67	TP_PROTO(
     68		const struct rdma_id_private *id_priv,
     69		const struct ib_device *device
     70	),
     71
     72	TP_ARGS(id_priv, device),
     73
     74	TP_STRUCT__entry(
     75		__field(u32, cm_id)
     76		__array(unsigned char, srcaddr, sizeof(struct sockaddr_in6))
     77		__array(unsigned char, dstaddr, sizeof(struct sockaddr_in6))
     78		__string(devname, device->name)
     79	),
     80
     81	TP_fast_assign(
     82		__entry->cm_id = id_priv->res.id;
     83		memcpy(__entry->srcaddr, &id_priv->id.route.addr.src_addr,
     84		       sizeof(struct sockaddr_in6));
     85		memcpy(__entry->dstaddr, &id_priv->id.route.addr.dst_addr,
     86		       sizeof(struct sockaddr_in6));
     87		__assign_str(devname, device->name);
     88	),
     89
     90	TP_printk("cm.id=%u src=%pISpc dst=%pISpc device=%s",
     91		__entry->cm_id, __entry->srcaddr, __entry->dstaddr,
     92		__get_str(devname)
     93	)
     94);
     95
     96DECLARE_EVENT_CLASS(cma_qp_class,
     97	TP_PROTO(
     98		const struct rdma_id_private *id_priv
     99	),
    100
    101	TP_ARGS(id_priv),
    102
    103	TP_STRUCT__entry(
    104		__field(u32, cm_id)
    105		__field(u32, tos)
    106		__field(u32, qp_num)
    107		__array(unsigned char, srcaddr, sizeof(struct sockaddr_in6))
    108		__array(unsigned char, dstaddr, sizeof(struct sockaddr_in6))
    109	),
    110
    111	TP_fast_assign(
    112		__entry->cm_id = id_priv->res.id;
    113		__entry->tos = id_priv->tos;
    114		__entry->qp_num = id_priv->qp_num;
    115		memcpy(__entry->srcaddr, &id_priv->id.route.addr.src_addr,
    116		       sizeof(struct sockaddr_in6));
    117		memcpy(__entry->dstaddr, &id_priv->id.route.addr.dst_addr,
    118		       sizeof(struct sockaddr_in6));
    119	),
    120
    121	TP_printk("cm.id=%u src=%pISpc dst=%pISpc tos=%u qp_num=%u",
    122		__entry->cm_id, __entry->srcaddr, __entry->dstaddr, __entry->tos,
    123		__entry->qp_num
    124	)
    125);
    126
    127#define DEFINE_CMA_QP_EVENT(name)						\
    128		DEFINE_EVENT(cma_qp_class, cm_##name,				\
    129				TP_PROTO(					\
    130					const struct rdma_id_private *id_priv	\
    131				),						\
    132				TP_ARGS(id_priv))
    133
    134DEFINE_CMA_QP_EVENT(send_req);
    135DEFINE_CMA_QP_EVENT(send_rep);
    136DEFINE_CMA_QP_EVENT(qp_destroy);
    137
    138/*
    139 * enum ib_wp_type, from include/rdma/ib_verbs.h
    140 */
    141#define IB_QP_TYPE_LIST				\
    142	ib_qp_type(SMI)				\
    143	ib_qp_type(GSI)				\
    144	ib_qp_type(RC)				\
    145	ib_qp_type(UC)				\
    146	ib_qp_type(UD)				\
    147	ib_qp_type(RAW_IPV6)			\
    148	ib_qp_type(RAW_ETHERTYPE)		\
    149	ib_qp_type(RAW_PACKET)			\
    150	ib_qp_type(XRC_INI)			\
    151	ib_qp_type_end(XRC_TGT)
    152
    153#undef ib_qp_type
    154#undef ib_qp_type_end
    155
    156#define ib_qp_type(x)		TRACE_DEFINE_ENUM(IB_QPT_##x);
    157#define ib_qp_type_end(x)	TRACE_DEFINE_ENUM(IB_QPT_##x);
    158
    159IB_QP_TYPE_LIST
    160
    161#undef ib_qp_type
    162#undef ib_qp_type_end
    163
    164#define ib_qp_type(x)		{ IB_QPT_##x, #x },
    165#define ib_qp_type_end(x)	{ IB_QPT_##x, #x }
    166
    167#define rdma_show_qp_type(x) \
    168		__print_symbolic(x, IB_QP_TYPE_LIST)
    169
    170
    171TRACE_EVENT(cm_qp_create,
    172	TP_PROTO(
    173		const struct rdma_id_private *id_priv,
    174		const struct ib_pd *pd,
    175		const struct ib_qp_init_attr *qp_init_attr,
    176		int rc
    177	),
    178
    179	TP_ARGS(id_priv, pd, qp_init_attr, rc),
    180
    181	TP_STRUCT__entry(
    182		__field(u32, cm_id)
    183		__field(u32, pd_id)
    184		__field(u32, tos)
    185		__field(u32, qp_num)
    186		__field(u32, send_wr)
    187		__field(u32, recv_wr)
    188		__field(int, rc)
    189		__field(unsigned long, qp_type)
    190		__array(unsigned char, srcaddr, sizeof(struct sockaddr_in6))
    191		__array(unsigned char, dstaddr, sizeof(struct sockaddr_in6))
    192	),
    193
    194	TP_fast_assign(
    195		__entry->cm_id = id_priv->res.id;
    196		__entry->pd_id = pd->res.id;
    197		__entry->tos = id_priv->tos;
    198		__entry->send_wr = qp_init_attr->cap.max_send_wr;
    199		__entry->recv_wr = qp_init_attr->cap.max_recv_wr;
    200		__entry->rc = rc;
    201		if (!rc) {
    202			__entry->qp_num = id_priv->qp_num;
    203			__entry->qp_type = id_priv->id.qp_type;
    204		} else {
    205			__entry->qp_num = 0;
    206			__entry->qp_type = 0;
    207		}
    208		memcpy(__entry->srcaddr, &id_priv->id.route.addr.src_addr,
    209		       sizeof(struct sockaddr_in6));
    210		memcpy(__entry->dstaddr, &id_priv->id.route.addr.dst_addr,
    211		       sizeof(struct sockaddr_in6));
    212	),
    213
    214	TP_printk("cm.id=%u src=%pISpc dst=%pISpc tos=%u pd.id=%u qp_type=%s"
    215		" send_wr=%u recv_wr=%u qp_num=%u rc=%d",
    216		__entry->cm_id, __entry->srcaddr, __entry->dstaddr,
    217		__entry->tos, __entry->pd_id,
    218		rdma_show_qp_type(__entry->qp_type), __entry->send_wr,
    219		__entry->recv_wr, __entry->qp_num, __entry->rc
    220	)
    221);
    222
    223TRACE_EVENT(cm_req_handler,
    224	TP_PROTO(
    225		const struct rdma_id_private *id_priv,
    226		int event
    227	),
    228
    229	TP_ARGS(id_priv, event),
    230
    231	TP_STRUCT__entry(
    232		__field(u32, cm_id)
    233		__field(u32, tos)
    234		__field(unsigned long, event)
    235		__array(unsigned char, srcaddr, sizeof(struct sockaddr_in6))
    236		__array(unsigned char, dstaddr, sizeof(struct sockaddr_in6))
    237	),
    238
    239	TP_fast_assign(
    240		__entry->cm_id = id_priv->res.id;
    241		__entry->tos = id_priv->tos;
    242		__entry->event = event;
    243		memcpy(__entry->srcaddr, &id_priv->id.route.addr.src_addr,
    244		       sizeof(struct sockaddr_in6));
    245		memcpy(__entry->dstaddr, &id_priv->id.route.addr.dst_addr,
    246		       sizeof(struct sockaddr_in6));
    247	),
    248
    249	TP_printk("cm.id=%u src=%pISpc dst=%pISpc tos=%u %s (%lu)",
    250		__entry->cm_id, __entry->srcaddr, __entry->dstaddr, __entry->tos,
    251		rdma_show_ib_cm_event(__entry->event), __entry->event
    252	)
    253);
    254
    255TRACE_EVENT(cm_event_handler,
    256	TP_PROTO(
    257		const struct rdma_id_private *id_priv,
    258		const struct rdma_cm_event *event
    259	),
    260
    261	TP_ARGS(id_priv, event),
    262
    263	TP_STRUCT__entry(
    264		__field(u32, cm_id)
    265		__field(u32, tos)
    266		__field(unsigned long, event)
    267		__field(int, status)
    268		__array(unsigned char, srcaddr, sizeof(struct sockaddr_in6))
    269		__array(unsigned char, dstaddr, sizeof(struct sockaddr_in6))
    270	),
    271
    272	TP_fast_assign(
    273		__entry->cm_id = id_priv->res.id;
    274		__entry->tos = id_priv->tos;
    275		__entry->event = event->event;
    276		__entry->status = event->status;
    277		memcpy(__entry->srcaddr, &id_priv->id.route.addr.src_addr,
    278		       sizeof(struct sockaddr_in6));
    279		memcpy(__entry->dstaddr, &id_priv->id.route.addr.dst_addr,
    280		       sizeof(struct sockaddr_in6));
    281	),
    282
    283	TP_printk("cm.id=%u src=%pISpc dst=%pISpc tos=%u %s (%lu/%d)",
    284		__entry->cm_id, __entry->srcaddr, __entry->dstaddr, __entry->tos,
    285		rdma_show_cm_event(__entry->event), __entry->event,
    286		__entry->status
    287	)
    288);
    289
    290TRACE_EVENT(cm_event_done,
    291	TP_PROTO(
    292		const struct rdma_id_private *id_priv,
    293		const struct rdma_cm_event *event,
    294		int result
    295	),
    296
    297	TP_ARGS(id_priv, event, result),
    298
    299	TP_STRUCT__entry(
    300		__field(u32, cm_id)
    301		__field(u32, tos)
    302		__field(unsigned long, event)
    303		__field(int, result)
    304		__array(unsigned char, srcaddr, sizeof(struct sockaddr_in6))
    305		__array(unsigned char, dstaddr, sizeof(struct sockaddr_in6))
    306	),
    307
    308	TP_fast_assign(
    309		__entry->cm_id = id_priv->res.id;
    310		__entry->tos = id_priv->tos;
    311		__entry->event = event->event;
    312		__entry->result = result;
    313		memcpy(__entry->srcaddr, &id_priv->id.route.addr.src_addr,
    314		       sizeof(struct sockaddr_in6));
    315		memcpy(__entry->dstaddr, &id_priv->id.route.addr.dst_addr,
    316		       sizeof(struct sockaddr_in6));
    317	),
    318
    319	TP_printk("cm.id=%u src=%pISpc dst=%pISpc tos=%u %s consumer returns %d",
    320		__entry->cm_id, __entry->srcaddr, __entry->dstaddr, __entry->tos,
    321		rdma_show_cm_event(__entry->event), __entry->result
    322	)
    323);
    324
    325DECLARE_EVENT_CLASS(cma_client_class,
    326	TP_PROTO(
    327		const struct ib_device *device
    328	),
    329
    330	TP_ARGS(device),
    331
    332	TP_STRUCT__entry(
    333		__string(name, device->name)
    334	),
    335
    336	TP_fast_assign(
    337		__assign_str(name, device->name);
    338	),
    339
    340	TP_printk("device name=%s",
    341		__get_str(name)
    342	)
    343);
    344
    345#define DEFINE_CMA_CLIENT_EVENT(name)						\
    346		DEFINE_EVENT(cma_client_class, cm_##name,			\
    347				TP_PROTO(					\
    348					const struct ib_device *device		\
    349				),						\
    350				TP_ARGS(device))
    351
    352DEFINE_CMA_CLIENT_EVENT(add_one);
    353DEFINE_CMA_CLIENT_EVENT(remove_one);
    354
    355#endif /* _TRACE_RDMA_CMA_H */
    356
    357#undef TRACE_INCLUDE_PATH
    358#define TRACE_INCLUDE_PATH .
    359#define TRACE_INCLUDE_FILE cma_trace
    360
    361#include <trace/define_trace.h>