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