Linux-libre 5.3.12-gnu
[librecmc/linux-libre.git] / include / trace / events / ib_mad.h
1 /* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */
2
3 /*
4  * Copyright (c) 2018 Intel Corporation.  All rights reserved.
5  */
6
7 #undef TRACE_SYSTEM
8 #define TRACE_SYSTEM ib_mad
9
10 #if !defined(_TRACE_IB_MAD_H) || defined(TRACE_HEADER_MULTI_READ)
11 #define _TRACE_IB_MAD_H
12
13 #include <linux/tracepoint.h>
14 #include <rdma/ib_mad.h>
15
16 #ifdef CONFIG_TRACEPOINTS
17 struct trace_event_raw_ib_mad_send_template;
18 static void create_mad_addr_info(struct ib_mad_send_wr_private *mad_send_wr,
19                           struct ib_mad_qp_info *qp_info,
20                           struct trace_event_raw_ib_mad_send_template *entry);
21 #endif
22
23 DECLARE_EVENT_CLASS(ib_mad_send_template,
24         TP_PROTO(struct ib_mad_send_wr_private *wr,
25                  struct ib_mad_qp_info *qp_info),
26         TP_ARGS(wr, qp_info),
27
28         TP_STRUCT__entry(
29                 __field(u8,             base_version)
30                 __field(u8,             mgmt_class)
31                 __field(u8,             class_version)
32                 __field(u8,             port_num)
33                 __field(u32,            qp_num)
34                 __field(u8,             method)
35                 __field(u8,             sl)
36                 __field(u16,            attr_id)
37                 __field(u32,            attr_mod)
38                 __field(u64,            wrtid)
39                 __field(u64,            tid)
40                 __field(u16,            status)
41                 __field(u16,            class_specific)
42                 __field(u32,            length)
43                 __field(u32,            dlid)
44                 __field(u32,            rqpn)
45                 __field(u32,            rqkey)
46                 __field(u32,            dev_index)
47                 __field(void *,         agent_priv)
48                 __field(unsigned long,  timeout)
49                 __field(int,            retries_left)
50                 __field(int,            max_retries)
51                 __field(int,            retry)
52                 __field(u16,            pkey)
53         ),
54
55         TP_fast_assign(
56                 __entry->dev_index = wr->mad_agent_priv->agent.device->index;
57                 __entry->port_num = wr->mad_agent_priv->agent.port_num;
58                 __entry->qp_num = wr->mad_agent_priv->qp_info->qp->qp_num;
59                 __entry->agent_priv = wr->mad_agent_priv;
60                 __entry->wrtid = wr->tid;
61                 __entry->max_retries = wr->max_retries;
62                 __entry->retries_left = wr->retries_left;
63                 __entry->retry = wr->retry;
64                 __entry->timeout = wr->timeout;
65                 __entry->length = wr->send_buf.hdr_len +
66                                   wr->send_buf.data_len;
67                 __entry->base_version =
68                         ((struct ib_mad_hdr *)wr->send_buf.mad)->base_version;
69                 __entry->mgmt_class =
70                         ((struct ib_mad_hdr *)wr->send_buf.mad)->mgmt_class;
71                 __entry->class_version =
72                         ((struct ib_mad_hdr *)wr->send_buf.mad)->class_version;
73                 __entry->method =
74                         ((struct ib_mad_hdr *)wr->send_buf.mad)->method;
75                 __entry->status =
76                         ((struct ib_mad_hdr *)wr->send_buf.mad)->status;
77                 __entry->class_specific =
78                         ((struct ib_mad_hdr *)wr->send_buf.mad)->class_specific;
79                 __entry->tid = ((struct ib_mad_hdr *)wr->send_buf.mad)->tid;
80                 __entry->attr_id =
81                         ((struct ib_mad_hdr *)wr->send_buf.mad)->attr_id;
82                 __entry->attr_mod =
83                         ((struct ib_mad_hdr *)wr->send_buf.mad)->attr_mod;
84                 create_mad_addr_info(wr, qp_info, __entry);
85         ),
86
87         TP_printk("%d:%d QP%d agent %p: " \
88                   "wrtid 0x%llx; %d/%d retries(%d); timeout %lu length %d : " \
89                   "hdr : base_ver 0x%x class 0x%x class_ver 0x%x " \
90                   "method 0x%x status 0x%x class_specific 0x%x tid 0x%llx " \
91                   "attr_id 0x%x attr_mod 0x%x  => dlid 0x%08x sl %d "\
92                   "pkey 0x%x rpqn 0x%x rqpkey 0x%x",
93                 __entry->dev_index, __entry->port_num, __entry->qp_num,
94                 __entry->agent_priv, be64_to_cpu(__entry->wrtid),
95                 __entry->retries_left, __entry->max_retries,
96                 __entry->retry, __entry->timeout, __entry->length,
97                 __entry->base_version, __entry->mgmt_class,
98                 __entry->class_version,
99                 __entry->method, be16_to_cpu(__entry->status),
100                 be16_to_cpu(__entry->class_specific),
101                 be64_to_cpu(__entry->tid), be16_to_cpu(__entry->attr_id),
102                 be32_to_cpu(__entry->attr_mod),
103                 be32_to_cpu(__entry->dlid), __entry->sl, __entry->pkey,
104                 __entry->rqpn, __entry->rqkey
105         )
106 );
107
108 DEFINE_EVENT(ib_mad_send_template, ib_mad_error_handler,
109         TP_PROTO(struct ib_mad_send_wr_private *wr,
110                  struct ib_mad_qp_info *qp_info),
111         TP_ARGS(wr, qp_info));
112 DEFINE_EVENT(ib_mad_send_template, ib_mad_ib_send_mad,
113         TP_PROTO(struct ib_mad_send_wr_private *wr,
114                  struct ib_mad_qp_info *qp_info),
115         TP_ARGS(wr, qp_info));
116 DEFINE_EVENT(ib_mad_send_template, ib_mad_send_done_resend,
117         TP_PROTO(struct ib_mad_send_wr_private *wr,
118                  struct ib_mad_qp_info *qp_info),
119         TP_ARGS(wr, qp_info));
120
121 TRACE_EVENT(ib_mad_send_done_handler,
122         TP_PROTO(struct ib_mad_send_wr_private *wr, struct ib_wc *wc),
123         TP_ARGS(wr, wc),
124
125         TP_STRUCT__entry(
126                 __field(u8,             port_num)
127                 __field(u8,             base_version)
128                 __field(u8,             mgmt_class)
129                 __field(u8,             class_version)
130                 __field(u32,            qp_num)
131                 __field(u64,            wrtid)
132                 __field(u16,            status)
133                 __field(u16,            wc_status)
134                 __field(u32,            length)
135                 __field(void *,         agent_priv)
136                 __field(unsigned long,  timeout)
137                 __field(u32,            dev_index)
138                 __field(int,            retries_left)
139                 __field(int,            max_retries)
140                 __field(int,            retry)
141                 __field(u8,             method)
142         ),
143
144         TP_fast_assign(
145                 __entry->dev_index = wr->mad_agent_priv->agent.device->index;
146                 __entry->port_num = wr->mad_agent_priv->agent.port_num;
147                 __entry->qp_num = wr->mad_agent_priv->qp_info->qp->qp_num;
148                 __entry->agent_priv = wr->mad_agent_priv;
149                 __entry->wrtid = wr->tid;
150                 __entry->max_retries = wr->max_retries;
151                 __entry->retries_left = wr->retries_left;
152                 __entry->retry = wr->retry;
153                 __entry->timeout = wr->timeout;
154                 __entry->base_version =
155                         ((struct ib_mad_hdr *)wr->send_buf.mad)->base_version;
156                 __entry->mgmt_class =
157                         ((struct ib_mad_hdr *)wr->send_buf.mad)->mgmt_class;
158                 __entry->class_version =
159                         ((struct ib_mad_hdr *)wr->send_buf.mad)->class_version;
160                 __entry->method =
161                         ((struct ib_mad_hdr *)wr->send_buf.mad)->method;
162                 __entry->status =
163                         ((struct ib_mad_hdr *)wr->send_buf.mad)->status;
164                 __entry->wc_status = wc->status;
165                 __entry->length = wc->byte_len;
166         ),
167
168         TP_printk("%d:%d QP%d : SEND WC Status %d : agent %p: " \
169                   "wrtid 0x%llx %d/%d retries(%d) timeout %lu length %d: " \
170                   "hdr : base_ver 0x%x class 0x%x class_ver 0x%x " \
171                   "method 0x%x status 0x%x",
172                 __entry->dev_index, __entry->port_num, __entry->qp_num,
173                 __entry->wc_status,
174                 __entry->agent_priv, be64_to_cpu(__entry->wrtid),
175                 __entry->retries_left, __entry->max_retries,
176                 __entry->retry, __entry->timeout,
177                 __entry->length,
178                 __entry->base_version, __entry->mgmt_class,
179                 __entry->class_version, __entry->method,
180                 be16_to_cpu(__entry->status)
181         )
182 );
183
184 TRACE_EVENT(ib_mad_recv_done_handler,
185         TP_PROTO(struct ib_mad_qp_info *qp_info, struct ib_wc *wc,
186                  struct ib_mad_hdr *mad_hdr),
187         TP_ARGS(qp_info, wc, mad_hdr),
188
189         TP_STRUCT__entry(
190                 __field(u8,             base_version)
191                 __field(u8,             mgmt_class)
192                 __field(u8,             class_version)
193                 __field(u8,             port_num)
194                 __field(u32,            qp_num)
195                 __field(u16,            status)
196                 __field(u16,            class_specific)
197                 __field(u32,            length)
198                 __field(u64,            tid)
199                 __field(u8,             method)
200                 __field(u8,             sl)
201                 __field(u16,            attr_id)
202                 __field(u32,            attr_mod)
203                 __field(u16,            src_qp)
204                 __field(u16,            wc_status)
205                 __field(u32,            slid)
206                 __field(u32,            dev_index)
207                 __field(u16,            pkey)
208         ),
209
210         TP_fast_assign(
211                 __entry->dev_index = qp_info->port_priv->device->index;
212                 __entry->port_num = qp_info->port_priv->port_num;
213                 __entry->qp_num = qp_info->qp->qp_num;
214                 __entry->length = wc->byte_len;
215                 __entry->base_version = mad_hdr->base_version;
216                 __entry->mgmt_class = mad_hdr->mgmt_class;
217                 __entry->class_version = mad_hdr->class_version;
218                 __entry->method = mad_hdr->method;
219                 __entry->status = mad_hdr->status;
220                 __entry->class_specific = mad_hdr->class_specific;
221                 __entry->tid = mad_hdr->tid;
222                 __entry->attr_id = mad_hdr->attr_id;
223                 __entry->attr_mod = mad_hdr->attr_mod;
224                 __entry->slid = wc->slid;
225                 __entry->src_qp = wc->src_qp;
226                 __entry->sl = wc->sl;
227                 ib_query_pkey(qp_info->port_priv->device,
228                               qp_info->port_priv->port_num,
229                               wc->pkey_index, &__entry->pkey);
230                 __entry->wc_status = wc->status;
231         ),
232
233         TP_printk("%d:%d QP%d : RECV WC Status %d : length %d : hdr : " \
234                   "base_ver 0x%02x class 0x%02x class_ver 0x%02x " \
235                   "method 0x%02x status 0x%04x class_specific 0x%04x " \
236                   "tid 0x%016llx attr_id 0x%04x attr_mod 0x%08x " \
237                   "slid 0x%08x src QP%d, sl %d pkey 0x%04x",
238                 __entry->dev_index, __entry->port_num, __entry->qp_num,
239                 __entry->wc_status,
240                 __entry->length,
241                 __entry->base_version, __entry->mgmt_class,
242                 __entry->class_version, __entry->method,
243                 be16_to_cpu(__entry->status),
244                 be16_to_cpu(__entry->class_specific),
245                 be64_to_cpu(__entry->tid), be16_to_cpu(__entry->attr_id),
246                 be32_to_cpu(__entry->attr_mod),
247                 __entry->slid, __entry->src_qp, __entry->sl, __entry->pkey
248         )
249 );
250
251 DECLARE_EVENT_CLASS(ib_mad_agent_template,
252         TP_PROTO(struct ib_mad_agent_private *agent),
253         TP_ARGS(agent),
254
255         TP_STRUCT__entry(
256                 __field(u32,            dev_index)
257                 __field(u32,            hi_tid)
258                 __field(u8,             port_num)
259                 __field(u8,             mgmt_class)
260                 __field(u8,             mgmt_class_version)
261         ),
262
263         TP_fast_assign(
264                 __entry->dev_index = agent->agent.device->index;
265                 __entry->port_num = agent->agent.port_num;
266                 __entry->hi_tid = agent->agent.hi_tid;
267
268                 if (agent->reg_req) {
269                         __entry->mgmt_class = agent->reg_req->mgmt_class;
270                         __entry->mgmt_class_version =
271                                 agent->reg_req->mgmt_class_version;
272                 } else {
273                         __entry->mgmt_class = 0;
274                         __entry->mgmt_class_version = 0;
275                 }
276         ),
277
278         TP_printk("%d:%d mad agent : hi_tid 0x%08x class 0x%02x class_ver 0x%02x",
279                 __entry->dev_index, __entry->port_num,
280                 __entry->hi_tid, __entry->mgmt_class,
281                 __entry->mgmt_class_version
282         )
283 );
284 DEFINE_EVENT(ib_mad_agent_template, ib_mad_recv_done_agent,
285         TP_PROTO(struct ib_mad_agent_private *agent),
286         TP_ARGS(agent));
287 DEFINE_EVENT(ib_mad_agent_template, ib_mad_send_done_agent,
288         TP_PROTO(struct ib_mad_agent_private *agent),
289         TP_ARGS(agent));
290 DEFINE_EVENT(ib_mad_agent_template, ib_mad_create_agent,
291         TP_PROTO(struct ib_mad_agent_private *agent),
292         TP_ARGS(agent));
293 DEFINE_EVENT(ib_mad_agent_template, ib_mad_unregister_agent,
294         TP_PROTO(struct ib_mad_agent_private *agent),
295         TP_ARGS(agent));
296
297
298
299 DECLARE_EVENT_CLASS(ib_mad_opa_smi_template,
300         TP_PROTO(struct opa_smp *smp),
301         TP_ARGS(smp),
302
303         TP_STRUCT__entry(
304                 __field(u64,            mkey)
305                 __field(u32,            dr_slid)
306                 __field(u32,            dr_dlid)
307                 __field(u8,             hop_ptr)
308                 __field(u8,             hop_cnt)
309                 __array(u8,             initial_path, OPA_SMP_MAX_PATH_HOPS)
310                 __array(u8,             return_path, OPA_SMP_MAX_PATH_HOPS)
311         ),
312
313         TP_fast_assign(
314                 __entry->hop_ptr = smp->hop_ptr;
315                 __entry->hop_cnt = smp->hop_cnt;
316                 __entry->mkey = smp->mkey;
317                 __entry->dr_slid = smp->route.dr.dr_slid;
318                 __entry->dr_dlid = smp->route.dr.dr_dlid;
319                 memcpy(__entry->initial_path, smp->route.dr.initial_path,
320                         OPA_SMP_MAX_PATH_HOPS);
321                 memcpy(__entry->return_path, smp->route.dr.return_path,
322                         OPA_SMP_MAX_PATH_HOPS);
323         ),
324
325         TP_printk("OPA SMP: hop_ptr %d hop_cnt %d " \
326                   "mkey 0x%016llx dr_slid 0x%08x dr_dlid 0x%08x " \
327                   "initial_path %*ph return_path %*ph ",
328                 __entry->hop_ptr, __entry->hop_cnt,
329                 be64_to_cpu(__entry->mkey), be32_to_cpu(__entry->dr_slid),
330                 be32_to_cpu(__entry->dr_dlid),
331                 OPA_SMP_MAX_PATH_HOPS, __entry->initial_path,
332                 OPA_SMP_MAX_PATH_HOPS, __entry->return_path
333         )
334 );
335
336 DEFINE_EVENT(ib_mad_opa_smi_template, ib_mad_handle_opa_smi,
337         TP_PROTO(struct opa_smp *smp),
338         TP_ARGS(smp));
339 DEFINE_EVENT(ib_mad_opa_smi_template, ib_mad_handle_out_opa_smi,
340         TP_PROTO(struct opa_smp *smp),
341         TP_ARGS(smp));
342
343
344 DECLARE_EVENT_CLASS(ib_mad_opa_ib_template,
345         TP_PROTO(struct ib_smp *smp),
346         TP_ARGS(smp),
347
348         TP_STRUCT__entry(
349                 __field(u64,            mkey)
350                 __field(u32,            dr_slid)
351                 __field(u32,            dr_dlid)
352                 __field(u8,             hop_ptr)
353                 __field(u8,             hop_cnt)
354                 __array(u8,             initial_path, IB_SMP_MAX_PATH_HOPS)
355                 __array(u8,             return_path, IB_SMP_MAX_PATH_HOPS)
356         ),
357
358         TP_fast_assign(
359                 __entry->hop_ptr = smp->hop_ptr;
360                 __entry->hop_cnt = smp->hop_cnt;
361                 __entry->mkey = smp->mkey;
362                 __entry->dr_slid = smp->dr_slid;
363                 __entry->dr_dlid = smp->dr_dlid;
364                 memcpy(__entry->initial_path, smp->initial_path,
365                         IB_SMP_MAX_PATH_HOPS);
366                 memcpy(__entry->return_path, smp->return_path,
367                         IB_SMP_MAX_PATH_HOPS);
368         ),
369
370         TP_printk("OPA SMP: hop_ptr %d hop_cnt %d " \
371                   "mkey 0x%016llx dr_slid 0x%04x dr_dlid 0x%04x " \
372                   "initial_path %*ph return_path %*ph ",
373                 __entry->hop_ptr, __entry->hop_cnt,
374                 be64_to_cpu(__entry->mkey), be16_to_cpu(__entry->dr_slid),
375                 be16_to_cpu(__entry->dr_dlid),
376                 IB_SMP_MAX_PATH_HOPS, __entry->initial_path,
377                 IB_SMP_MAX_PATH_HOPS, __entry->return_path
378         )
379 );
380
381 DEFINE_EVENT(ib_mad_opa_ib_template, ib_mad_handle_ib_smi,
382         TP_PROTO(struct ib_smp *smp),
383         TP_ARGS(smp));
384 DEFINE_EVENT(ib_mad_opa_ib_template, ib_mad_handle_out_ib_smi,
385         TP_PROTO(struct ib_smp *smp),
386         TP_ARGS(smp));
387
388 #endif /* _TRACE_IB_MAD_H */
389
390 #include <trace/define_trace.h>