Merge v5.6-rc1 into drm-misc-fixes
[linux-2.6-microblaze.git] / drivers / infiniband / core / cma_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
49 IB_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
61 DECLARE_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
96 DEFINE_CMA_FSM_EVENT(send_rtu);
97 DEFINE_CMA_FSM_EVENT(send_rej);
98 DEFINE_CMA_FSM_EVENT(send_mra);
99 DEFINE_CMA_FSM_EVENT(send_sidr_req);
100 DEFINE_CMA_FSM_EVENT(send_sidr_rep);
101 DEFINE_CMA_FSM_EVENT(disconnect);
102 DEFINE_CMA_FSM_EVENT(sent_drep);
103 DEFINE_CMA_FSM_EVENT(sent_dreq);
104 DEFINE_CMA_FSM_EVENT(id_destroy);
105
106 TRACE_EVENT(cm_id_create,
107         TP_PROTO(
108                 const struct rdma_id_private *id_priv
109         ),
110
111         TP_ARGS(id_priv),
112
113         TP_STRUCT__entry(
114                 __field(u32, cm_id)
115         ),
116
117         TP_fast_assign(
118                 __entry->cm_id = id_priv->res.id;
119         ),
120
121         TP_printk("cm.id=%u",
122                 __entry->cm_id
123         )
124 );
125
126 DECLARE_EVENT_CLASS(cma_qp_class,
127         TP_PROTO(
128                 const struct rdma_id_private *id_priv
129         ),
130
131         TP_ARGS(id_priv),
132
133         TP_STRUCT__entry(
134                 __field(u32, cm_id)
135                 __field(u32, tos)
136                 __field(u32, qp_num)
137                 __array(unsigned char, srcaddr, sizeof(struct sockaddr_in6))
138                 __array(unsigned char, dstaddr, sizeof(struct sockaddr_in6))
139         ),
140
141         TP_fast_assign(
142                 __entry->cm_id = id_priv->res.id;
143                 __entry->tos = id_priv->tos;
144                 __entry->qp_num = id_priv->qp_num;
145                 memcpy(__entry->srcaddr, &id_priv->id.route.addr.src_addr,
146                        sizeof(struct sockaddr_in6));
147                 memcpy(__entry->dstaddr, &id_priv->id.route.addr.dst_addr,
148                        sizeof(struct sockaddr_in6));
149         ),
150
151         TP_printk("cm.id=%u src=%pISpc dst=%pISpc tos=%u qp_num=%u",
152                 __entry->cm_id, __entry->srcaddr, __entry->dstaddr, __entry->tos,
153                 __entry->qp_num
154         )
155 );
156
157 #define DEFINE_CMA_QP_EVENT(name)                                               \
158                 DEFINE_EVENT(cma_qp_class, cm_##name,                           \
159                                 TP_PROTO(                                       \
160                                         const struct rdma_id_private *id_priv   \
161                                 ),                                              \
162                                 TP_ARGS(id_priv))
163
164 DEFINE_CMA_QP_EVENT(send_req);
165 DEFINE_CMA_QP_EVENT(send_rep);
166 DEFINE_CMA_QP_EVENT(qp_destroy);
167
168 /*
169  * enum ib_wp_type, from include/rdma/ib_verbs.h
170  */
171 #define IB_QP_TYPE_LIST                         \
172         ib_qp_type(SMI)                         \
173         ib_qp_type(GSI)                         \
174         ib_qp_type(RC)                          \
175         ib_qp_type(UC)                          \
176         ib_qp_type(UD)                          \
177         ib_qp_type(RAW_IPV6)                    \
178         ib_qp_type(RAW_ETHERTYPE)               \
179         ib_qp_type(RAW_PACKET)                  \
180         ib_qp_type(XRC_INI)                     \
181         ib_qp_type_end(XRC_TGT)
182
183 #undef ib_qp_type
184 #undef ib_qp_type_end
185
186 #define ib_qp_type(x)           TRACE_DEFINE_ENUM(IB_QPT_##x);
187 #define ib_qp_type_end(x)       TRACE_DEFINE_ENUM(IB_QPT_##x);
188
189 IB_QP_TYPE_LIST
190
191 #undef ib_qp_type
192 #undef ib_qp_type_end
193
194 #define ib_qp_type(x)           { IB_QPT_##x, #x },
195 #define ib_qp_type_end(x)       { IB_QPT_##x, #x }
196
197 #define rdma_show_qp_type(x) \
198                 __print_symbolic(x, IB_QP_TYPE_LIST)
199
200
201 TRACE_EVENT(cm_qp_create,
202         TP_PROTO(
203                 const struct rdma_id_private *id_priv,
204                 const struct ib_pd *pd,
205                 const struct ib_qp_init_attr *qp_init_attr,
206                 int rc
207         ),
208
209         TP_ARGS(id_priv, pd, qp_init_attr, rc),
210
211         TP_STRUCT__entry(
212                 __field(u32, cm_id)
213                 __field(u32, pd_id)
214                 __field(u32, tos)
215                 __field(u32, qp_num)
216                 __field(u32, send_wr)
217                 __field(u32, recv_wr)
218                 __field(int, rc)
219                 __field(unsigned long, qp_type)
220                 __array(unsigned char, srcaddr, sizeof(struct sockaddr_in6))
221                 __array(unsigned char, dstaddr, sizeof(struct sockaddr_in6))
222         ),
223
224         TP_fast_assign(
225                 __entry->cm_id = id_priv->res.id;
226                 __entry->pd_id = pd->res.id;
227                 __entry->tos = id_priv->tos;
228                 __entry->send_wr = qp_init_attr->cap.max_send_wr;
229                 __entry->recv_wr = qp_init_attr->cap.max_recv_wr;
230                 __entry->rc = rc;
231                 if (!rc) {
232                         __entry->qp_num = id_priv->qp_num;
233                         __entry->qp_type = id_priv->id.qp_type;
234                 } else {
235                         __entry->qp_num = 0;
236                         __entry->qp_type = 0;
237                 }
238                 memcpy(__entry->srcaddr, &id_priv->id.route.addr.src_addr,
239                        sizeof(struct sockaddr_in6));
240                 memcpy(__entry->dstaddr, &id_priv->id.route.addr.dst_addr,
241                        sizeof(struct sockaddr_in6));
242         ),
243
244         TP_printk("cm.id=%u src=%pISpc dst=%pISpc tos=%u pd.id=%u qp_type=%s"
245                 " send_wr=%u recv_wr=%u qp_num=%u rc=%d",
246                 __entry->cm_id, __entry->srcaddr, __entry->dstaddr,
247                 __entry->tos, __entry->pd_id,
248                 rdma_show_qp_type(__entry->qp_type), __entry->send_wr,
249                 __entry->recv_wr, __entry->qp_num, __entry->rc
250         )
251 );
252
253 TRACE_EVENT(cm_req_handler,
254         TP_PROTO(
255                 const struct rdma_id_private *id_priv,
256                 int event
257         ),
258
259         TP_ARGS(id_priv, event),
260
261         TP_STRUCT__entry(
262                 __field(u32, cm_id)
263                 __field(u32, tos)
264                 __field(unsigned long, event)
265                 __array(unsigned char, srcaddr, sizeof(struct sockaddr_in6))
266                 __array(unsigned char, dstaddr, sizeof(struct sockaddr_in6))
267         ),
268
269         TP_fast_assign(
270                 __entry->cm_id = id_priv->res.id;
271                 __entry->tos = id_priv->tos;
272                 __entry->event = event;
273                 memcpy(__entry->srcaddr, &id_priv->id.route.addr.src_addr,
274                        sizeof(struct sockaddr_in6));
275                 memcpy(__entry->dstaddr, &id_priv->id.route.addr.dst_addr,
276                        sizeof(struct sockaddr_in6));
277         ),
278
279         TP_printk("cm.id=%u src=%pISpc dst=%pISpc tos=%u %s (%lu)",
280                 __entry->cm_id, __entry->srcaddr, __entry->dstaddr, __entry->tos,
281                 rdma_show_ib_cm_event(__entry->event), __entry->event
282         )
283 );
284
285 TRACE_EVENT(cm_event_handler,
286         TP_PROTO(
287                 const struct rdma_id_private *id_priv,
288                 const struct rdma_cm_event *event
289         ),
290
291         TP_ARGS(id_priv, event),
292
293         TP_STRUCT__entry(
294                 __field(u32, cm_id)
295                 __field(u32, tos)
296                 __field(unsigned long, event)
297                 __field(int, status)
298                 __array(unsigned char, srcaddr, sizeof(struct sockaddr_in6))
299                 __array(unsigned char, dstaddr, sizeof(struct sockaddr_in6))
300         ),
301
302         TP_fast_assign(
303                 __entry->cm_id = id_priv->res.id;
304                 __entry->tos = id_priv->tos;
305                 __entry->event = event->event;
306                 __entry->status = event->status;
307                 memcpy(__entry->srcaddr, &id_priv->id.route.addr.src_addr,
308                        sizeof(struct sockaddr_in6));
309                 memcpy(__entry->dstaddr, &id_priv->id.route.addr.dst_addr,
310                        sizeof(struct sockaddr_in6));
311         ),
312
313         TP_printk("cm.id=%u src=%pISpc dst=%pISpc tos=%u %s (%lu/%d)",
314                 __entry->cm_id, __entry->srcaddr, __entry->dstaddr, __entry->tos,
315                 rdma_show_cm_event(__entry->event), __entry->event,
316                 __entry->status
317         )
318 );
319
320 TRACE_EVENT(cm_event_done,
321         TP_PROTO(
322                 const struct rdma_id_private *id_priv,
323                 const struct rdma_cm_event *event,
324                 int result
325         ),
326
327         TP_ARGS(id_priv, event, result),
328
329         TP_STRUCT__entry(
330                 __field(u32, cm_id)
331                 __field(u32, tos)
332                 __field(unsigned long, event)
333                 __field(int, result)
334                 __array(unsigned char, srcaddr, sizeof(struct sockaddr_in6))
335                 __array(unsigned char, dstaddr, sizeof(struct sockaddr_in6))
336         ),
337
338         TP_fast_assign(
339                 __entry->cm_id = id_priv->res.id;
340                 __entry->tos = id_priv->tos;
341                 __entry->event = event->event;
342                 __entry->result = result;
343                 memcpy(__entry->srcaddr, &id_priv->id.route.addr.src_addr,
344                        sizeof(struct sockaddr_in6));
345                 memcpy(__entry->dstaddr, &id_priv->id.route.addr.dst_addr,
346                        sizeof(struct sockaddr_in6));
347         ),
348
349         TP_printk("cm.id=%u src=%pISpc dst=%pISpc tos=%u %s consumer returns %d",
350                 __entry->cm_id, __entry->srcaddr, __entry->dstaddr, __entry->tos,
351                 rdma_show_cm_event(__entry->event), __entry->result
352         )
353 );
354
355 DECLARE_EVENT_CLASS(cma_client_class,
356         TP_PROTO(
357                 const struct ib_device *device
358         ),
359
360         TP_ARGS(device),
361
362         TP_STRUCT__entry(
363                 __string(name, device->name)
364         ),
365
366         TP_fast_assign(
367                 __assign_str(name, device->name);
368         ),
369
370         TP_printk("device name=%s",
371                 __get_str(name)
372         )
373 );
374
375 #define DEFINE_CMA_CLIENT_EVENT(name)                                           \
376                 DEFINE_EVENT(cma_client_class, cm_##name,                       \
377                                 TP_PROTO(                                       \
378                                         const struct ib_device *device          \
379                                 ),                                              \
380                                 TP_ARGS(device))
381
382 DEFINE_CMA_CLIENT_EVENT(add_one);
383 DEFINE_CMA_CLIENT_EVENT(remove_one);
384
385 #endif /* _TRACE_RDMA_CMA_H */
386
387 #undef TRACE_INCLUDE_PATH
388 #define TRACE_INCLUDE_PATH .
389 #define TRACE_INCLUDE_FILE cma_trace
390
391 #include <trace/define_trace.h>