Linux Audio

Check our new training course

Loading...
Note: File does not exist in v5.4.
  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/misc/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>