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

cm_trace.h (9905B)


      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) 2020 Oracle and/or its affiliates.
      8 */
      9
     10#undef TRACE_SYSTEM
     11#define TRACE_SYSTEM ib_cma
     12
     13#if !defined(_TRACE_IB_CMA_H) || defined(TRACE_HEADER_MULTI_READ)
     14
     15#define _TRACE_IB_CMA_H
     16
     17#include <linux/tracepoint.h>
     18#include <rdma/ib_cm.h>
     19#include <trace/events/rdma.h>
     20
     21/*
     22 * enum ib_cm_state, from include/rdma/ib_cm.h
     23 */
     24#define IB_CM_STATE_LIST					\
     25	ib_cm_state(IDLE)					\
     26	ib_cm_state(LISTEN)					\
     27	ib_cm_state(REQ_SENT)					\
     28	ib_cm_state(REQ_RCVD)					\
     29	ib_cm_state(MRA_REQ_SENT)				\
     30	ib_cm_state(MRA_REQ_RCVD)				\
     31	ib_cm_state(REP_SENT)					\
     32	ib_cm_state(REP_RCVD)					\
     33	ib_cm_state(MRA_REP_SENT)				\
     34	ib_cm_state(MRA_REP_RCVD)				\
     35	ib_cm_state(ESTABLISHED)				\
     36	ib_cm_state(DREQ_SENT)					\
     37	ib_cm_state(DREQ_RCVD)					\
     38	ib_cm_state(TIMEWAIT)					\
     39	ib_cm_state(SIDR_REQ_SENT)				\
     40	ib_cm_state_end(SIDR_REQ_RCVD)
     41
     42#undef  ib_cm_state
     43#undef  ib_cm_state_end
     44#define ib_cm_state(x)		TRACE_DEFINE_ENUM(IB_CM_##x);
     45#define ib_cm_state_end(x)	TRACE_DEFINE_ENUM(IB_CM_##x);
     46
     47IB_CM_STATE_LIST
     48
     49#undef  ib_cm_state
     50#undef  ib_cm_state_end
     51#define ib_cm_state(x)		{ IB_CM_##x, #x },
     52#define ib_cm_state_end(x)	{ IB_CM_##x, #x }
     53
     54#define show_ib_cm_state(x) \
     55		__print_symbolic(x, IB_CM_STATE_LIST)
     56
     57/*
     58 * enum ib_cm_lap_state, from include/rdma/ib_cm.h
     59 */
     60#define IB_CM_LAP_STATE_LIST					\
     61	ib_cm_lap_state(LAP_UNINIT)				\
     62	ib_cm_lap_state(LAP_IDLE)				\
     63	ib_cm_lap_state(LAP_SENT)				\
     64	ib_cm_lap_state(LAP_RCVD)				\
     65	ib_cm_lap_state(MRA_LAP_SENT)				\
     66	ib_cm_lap_state_end(MRA_LAP_RCVD)
     67
     68#undef  ib_cm_lap_state
     69#undef  ib_cm_lap_state_end
     70#define ib_cm_lap_state(x)	TRACE_DEFINE_ENUM(IB_CM_##x);
     71#define ib_cm_lap_state_end(x)	TRACE_DEFINE_ENUM(IB_CM_##x);
     72
     73IB_CM_LAP_STATE_LIST
     74
     75#undef  ib_cm_lap_state
     76#undef  ib_cm_lap_state_end
     77#define ib_cm_lap_state(x)	{ IB_CM_##x, #x },
     78#define ib_cm_lap_state_end(x)	{ IB_CM_##x, #x }
     79
     80#define show_ib_cm_lap_state(x) \
     81		__print_symbolic(x, IB_CM_LAP_STATE_LIST)
     82
     83/*
     84 * enum ib_cm_rej_reason, from include/rdma/ib_cm.h
     85 */
     86#define IB_CM_REJ_REASON_LIST					\
     87	ib_cm_rej_reason(REJ_NO_QP)				\
     88	ib_cm_rej_reason(REJ_NO_EEC)				\
     89	ib_cm_rej_reason(REJ_NO_RESOURCES)			\
     90	ib_cm_rej_reason(REJ_TIMEOUT)				\
     91	ib_cm_rej_reason(REJ_UNSUPPORTED)			\
     92	ib_cm_rej_reason(REJ_INVALID_COMM_ID)			\
     93	ib_cm_rej_reason(REJ_INVALID_COMM_INSTANCE)		\
     94	ib_cm_rej_reason(REJ_INVALID_SERVICE_ID)		\
     95	ib_cm_rej_reason(REJ_INVALID_TRANSPORT_TYPE)		\
     96	ib_cm_rej_reason(REJ_STALE_CONN)			\
     97	ib_cm_rej_reason(REJ_RDC_NOT_EXIST)			\
     98	ib_cm_rej_reason(REJ_INVALID_GID)			\
     99	ib_cm_rej_reason(REJ_INVALID_LID)			\
    100	ib_cm_rej_reason(REJ_INVALID_SL)			\
    101	ib_cm_rej_reason(REJ_INVALID_TRAFFIC_CLASS)		\
    102	ib_cm_rej_reason(REJ_INVALID_HOP_LIMIT)			\
    103	ib_cm_rej_reason(REJ_INVALID_PACKET_RATE)		\
    104	ib_cm_rej_reason(REJ_INVALID_ALT_GID)			\
    105	ib_cm_rej_reason(REJ_INVALID_ALT_LID)			\
    106	ib_cm_rej_reason(REJ_INVALID_ALT_SL)			\
    107	ib_cm_rej_reason(REJ_INVALID_ALT_TRAFFIC_CLASS)		\
    108	ib_cm_rej_reason(REJ_INVALID_ALT_HOP_LIMIT)		\
    109	ib_cm_rej_reason(REJ_INVALID_ALT_PACKET_RATE)		\
    110	ib_cm_rej_reason(REJ_PORT_CM_REDIRECT)			\
    111	ib_cm_rej_reason(REJ_PORT_REDIRECT)			\
    112	ib_cm_rej_reason(REJ_INVALID_MTU)			\
    113	ib_cm_rej_reason(REJ_INSUFFICIENT_RESP_RESOURCES)	\
    114	ib_cm_rej_reason(REJ_CONSUMER_DEFINED)			\
    115	ib_cm_rej_reason(REJ_INVALID_RNR_RETRY)			\
    116	ib_cm_rej_reason(REJ_DUPLICATE_LOCAL_COMM_ID)		\
    117	ib_cm_rej_reason(REJ_INVALID_CLASS_VERSION)		\
    118	ib_cm_rej_reason(REJ_INVALID_FLOW_LABEL)		\
    119	ib_cm_rej_reason(REJ_INVALID_ALT_FLOW_LABEL)		\
    120	ib_cm_rej_reason_end(REJ_VENDOR_OPTION_NOT_SUPPORTED)
    121
    122#undef  ib_cm_rej_reason
    123#undef  ib_cm_rej_reason_end
    124#define ib_cm_rej_reason(x)	TRACE_DEFINE_ENUM(IB_CM_##x);
    125#define ib_cm_rej_reason_end(x)	TRACE_DEFINE_ENUM(IB_CM_##x);
    126
    127IB_CM_REJ_REASON_LIST
    128
    129#undef  ib_cm_rej_reason
    130#undef  ib_cm_rej_reason_end
    131#define ib_cm_rej_reason(x)	{ IB_CM_##x, #x },
    132#define ib_cm_rej_reason_end(x)	{ IB_CM_##x, #x }
    133
    134#define show_ib_cm_rej_reason(x) \
    135		__print_symbolic(x, IB_CM_REJ_REASON_LIST)
    136
    137DECLARE_EVENT_CLASS(icm_id_class,
    138	TP_PROTO(
    139		const struct ib_cm_id *cm_id
    140	),
    141
    142	TP_ARGS(cm_id),
    143
    144	TP_STRUCT__entry(
    145		__field(const void *, cm_id)	/* for eBPF scripts */
    146		__field(unsigned int, local_id)
    147		__field(unsigned int, remote_id)
    148		__field(unsigned long, state)
    149		__field(unsigned long, lap_state)
    150	),
    151
    152	TP_fast_assign(
    153		__entry->cm_id = cm_id;
    154		__entry->local_id = be32_to_cpu(cm_id->local_id);
    155		__entry->remote_id = be32_to_cpu(cm_id->remote_id);
    156		__entry->state = cm_id->state;
    157		__entry->lap_state = cm_id->lap_state;
    158	),
    159
    160	TP_printk("local_id=%u remote_id=%u state=%s lap_state=%s",
    161		__entry->local_id, __entry->remote_id,
    162		show_ib_cm_state(__entry->state),
    163		show_ib_cm_lap_state(__entry->lap_state)
    164	)
    165);
    166
    167#define DEFINE_CM_SEND_EVENT(name)					\
    168		DEFINE_EVENT(icm_id_class,				\
    169				icm_send_##name,				\
    170				TP_PROTO(				\
    171					const struct ib_cm_id *cm_id	\
    172				),					\
    173				TP_ARGS(cm_id))
    174
    175DEFINE_CM_SEND_EVENT(req);
    176DEFINE_CM_SEND_EVENT(rep);
    177DEFINE_CM_SEND_EVENT(dup_req);
    178DEFINE_CM_SEND_EVENT(dup_rep);
    179DEFINE_CM_SEND_EVENT(rtu);
    180DEFINE_CM_SEND_EVENT(mra);
    181DEFINE_CM_SEND_EVENT(sidr_req);
    182DEFINE_CM_SEND_EVENT(sidr_rep);
    183DEFINE_CM_SEND_EVENT(dreq);
    184DEFINE_CM_SEND_EVENT(drep);
    185
    186TRACE_EVENT(icm_send_rej,
    187	TP_PROTO(
    188		const struct ib_cm_id *cm_id,
    189		enum ib_cm_rej_reason reason
    190	),
    191
    192	TP_ARGS(cm_id, reason),
    193
    194	TP_STRUCT__entry(
    195		__field(const void *, cm_id)
    196		__field(u32, local_id)
    197		__field(u32, remote_id)
    198		__field(unsigned long, state)
    199		__field(unsigned long, reason)
    200	),
    201
    202	TP_fast_assign(
    203		__entry->cm_id = cm_id;
    204		__entry->local_id = be32_to_cpu(cm_id->local_id);
    205		__entry->remote_id = be32_to_cpu(cm_id->remote_id);
    206		__entry->state = cm_id->state;
    207		__entry->reason = reason;
    208	),
    209
    210	TP_printk("local_id=%u remote_id=%u state=%s reason=%s",
    211		__entry->local_id, __entry->remote_id,
    212		show_ib_cm_state(__entry->state),
    213		show_ib_cm_rej_reason(__entry->reason)
    214	)
    215);
    216
    217#define DEFINE_CM_ERR_EVENT(name)					\
    218		DEFINE_EVENT(icm_id_class,				\
    219				icm_##name##_err,			\
    220				TP_PROTO(				\
    221					const struct ib_cm_id *cm_id	\
    222				),					\
    223				TP_ARGS(cm_id))
    224
    225DEFINE_CM_ERR_EVENT(send_cm_rtu);
    226DEFINE_CM_ERR_EVENT(establish);
    227DEFINE_CM_ERR_EVENT(no_listener);
    228DEFINE_CM_ERR_EVENT(send_drep);
    229DEFINE_CM_ERR_EVENT(dreq_unknown);
    230DEFINE_CM_ERR_EVENT(send_unknown_rej);
    231DEFINE_CM_ERR_EVENT(rej_unknown);
    232DEFINE_CM_ERR_EVENT(send_mra_unknown);
    233DEFINE_CM_ERR_EVENT(mra_unknown);
    234DEFINE_CM_ERR_EVENT(qp_init);
    235DEFINE_CM_ERR_EVENT(qp_rtr);
    236DEFINE_CM_ERR_EVENT(qp_rts);
    237
    238DEFINE_EVENT(icm_id_class,						\
    239	icm_dreq_skipped,						\
    240	TP_PROTO(							\
    241		const struct ib_cm_id *cm_id				\
    242	),								\
    243	TP_ARGS(cm_id)							\
    244);
    245
    246DECLARE_EVENT_CLASS(icm_local_class,
    247	TP_PROTO(
    248		unsigned int local_id,
    249		unsigned int remote_id
    250	),
    251
    252	TP_ARGS(local_id, remote_id),
    253
    254	TP_STRUCT__entry(
    255		__field(unsigned int, local_id)
    256		__field(unsigned int, remote_id)
    257	),
    258
    259	TP_fast_assign(
    260		__entry->local_id = local_id;
    261		__entry->remote_id = remote_id;
    262	),
    263
    264	TP_printk("local_id=%u remote_id=%u",
    265		__entry->local_id, __entry->remote_id
    266	)
    267);
    268
    269#define DEFINE_CM_LOCAL_EVENT(name)					\
    270		DEFINE_EVENT(icm_local_class,				\
    271				icm_##name,				\
    272				TP_PROTO(				\
    273					unsigned int local_id,			\
    274					unsigned int remote_id			\
    275				),					\
    276				TP_ARGS(local_id, remote_id))
    277
    278DEFINE_CM_LOCAL_EVENT(issue_rej);
    279DEFINE_CM_LOCAL_EVENT(issue_drep);
    280DEFINE_CM_LOCAL_EVENT(staleconn_err);
    281DEFINE_CM_LOCAL_EVENT(no_priv_err);
    282
    283DECLARE_EVENT_CLASS(icm_remote_class,
    284	TP_PROTO(
    285		u32 remote_id
    286	),
    287
    288	TP_ARGS(remote_id),
    289
    290	TP_STRUCT__entry(
    291		__field(u32, remote_id)
    292	),
    293
    294	TP_fast_assign(
    295		__entry->remote_id = remote_id;
    296	),
    297
    298	TP_printk("remote_id=%u",
    299		__entry->remote_id
    300	)
    301);
    302
    303#define DEFINE_CM_REMOTE_EVENT(name)					\
    304		DEFINE_EVENT(icm_remote_class,				\
    305				icm_##name,				\
    306				TP_PROTO(				\
    307					u32 remote_id			\
    308				),					\
    309				TP_ARGS(remote_id))
    310
    311DEFINE_CM_REMOTE_EVENT(remote_no_priv_err);
    312DEFINE_CM_REMOTE_EVENT(insert_failed_err);
    313
    314TRACE_EVENT(icm_send_rep_err,
    315	TP_PROTO(
    316		__be32 local_id,
    317		enum ib_cm_state state
    318	),
    319
    320	TP_ARGS(local_id, state),
    321
    322	TP_STRUCT__entry(
    323		__field(unsigned int, local_id)
    324		__field(unsigned long, state)
    325	),
    326
    327	TP_fast_assign(
    328		__entry->local_id = be32_to_cpu(local_id);
    329		__entry->state = state;
    330	),
    331
    332	TP_printk("local_id=%u state=%s",
    333		__entry->local_id, show_ib_cm_state(__entry->state)
    334	)
    335);
    336
    337TRACE_EVENT(icm_rep_unknown_err,
    338	TP_PROTO(
    339		unsigned int local_id,
    340		unsigned int remote_id,
    341		enum ib_cm_state state
    342	),
    343
    344	TP_ARGS(local_id, remote_id, state),
    345
    346	TP_STRUCT__entry(
    347		__field(unsigned int, local_id)
    348		__field(unsigned int, remote_id)
    349		__field(unsigned long, state)
    350	),
    351
    352	TP_fast_assign(
    353		__entry->local_id = local_id;
    354		__entry->remote_id = remote_id;
    355		__entry->state = state;
    356	),
    357
    358	TP_printk("local_id=%u remote_id=%u state=%s",
    359		__entry->local_id, __entry->remote_id,
    360		show_ib_cm_state(__entry->state)
    361	)
    362);
    363
    364TRACE_EVENT(icm_handler_err,
    365	TP_PROTO(
    366		enum ib_cm_event_type event
    367	),
    368
    369	TP_ARGS(event),
    370
    371	TP_STRUCT__entry(
    372		__field(unsigned long, event)
    373	),
    374
    375	TP_fast_assign(
    376		__entry->event = event;
    377	),
    378
    379	TP_printk("unhandled event=%s",
    380		rdma_show_ib_cm_event(__entry->event)
    381	)
    382);
    383
    384TRACE_EVENT(icm_mad_send_err,
    385	TP_PROTO(
    386		enum ib_cm_state state,
    387		enum ib_wc_status wc_status
    388	),
    389
    390	TP_ARGS(state, wc_status),
    391
    392	TP_STRUCT__entry(
    393		__field(unsigned long, state)
    394		__field(unsigned long, wc_status)
    395	),
    396
    397	TP_fast_assign(
    398		__entry->state = state;
    399		__entry->wc_status = wc_status;
    400	),
    401
    402	TP_printk("state=%s completion status=%s",
    403		show_ib_cm_state(__entry->state),
    404		rdma_show_wc_status(__entry->wc_status)
    405	)
    406);
    407
    408#endif /* _TRACE_IB_CMA_H */
    409
    410#undef TRACE_INCLUDE_PATH
    411#define TRACE_INCLUDE_PATH ../../drivers/infiniband/core
    412#define TRACE_INCLUDE_FILE cm_trace
    413
    414#include <trace/define_trace.h>