device-dax: Avoid an unnecessary check in alloc_dev_dax_range()
[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 DECLARE_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
56 DEFINE_CMA_FSM_EVENT(send_rtu);
57 DEFINE_CMA_FSM_EVENT(send_rej);
58 DEFINE_CMA_FSM_EVENT(send_mra);
59 DEFINE_CMA_FSM_EVENT(send_sidr_req);
60 DEFINE_CMA_FSM_EVENT(send_sidr_rep);
61 DEFINE_CMA_FSM_EVENT(disconnect);
62 DEFINE_CMA_FSM_EVENT(sent_drep);
63 DEFINE_CMA_FSM_EVENT(sent_dreq);
64 DEFINE_CMA_FSM_EVENT(id_destroy);
65
66 TRACE_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
96 DECLARE_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
134 DEFINE_CMA_QP_EVENT(send_req);
135 DEFINE_CMA_QP_EVENT(send_rep);
136 DEFINE_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
159 IB_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
171 TRACE_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
223 TRACE_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
255 TRACE_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
290 TRACE_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
325 DECLARE_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
352 DEFINE_CMA_CLIENT_EVENT(add_one);
353 DEFINE_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>