]> git.ipfire.org Git - thirdparty/kernel/stable.git/blob - drivers/infiniband/hw/hfi1/trace_tid.h
IB/hfi1: Add static trace for flow and TID management functions
[thirdparty/kernel/stable.git] / drivers / infiniband / hw / hfi1 / trace_tid.h
1 /* SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause) */
2 /*
3 * Copyright(c) 2018 Intel Corporation.
4 *
5 */
6 #if !defined(__HFI1_TRACE_TID_H) || defined(TRACE_HEADER_MULTI_READ)
7 #define __HFI1_TRACE_TID_H
8
9 #include <linux/tracepoint.h>
10 #include <linux/trace_seq.h>
11
12 #include "hfi.h"
13
14 #define tidtype_name(type) { PT_##type, #type }
15 #define show_tidtype(type) \
16 __print_symbolic(type, \
17 tidtype_name(EXPECTED), \
18 tidtype_name(EAGER), \
19 tidtype_name(INVALID)) \
20
21 #undef TRACE_SYSTEM
22 #define TRACE_SYSTEM hfi1_tid
23
24 u8 hfi1_trace_get_tid_ctrl(u32 ent);
25 u16 hfi1_trace_get_tid_len(u32 ent);
26 u16 hfi1_trace_get_tid_idx(u32 ent);
27
28 #define OPFN_PARAM_PRN "[%s] qpn 0x%x %s OPFN: qp 0x%x, max read %u, " \
29 "max write %u, max length %u, jkey 0x%x timeout %u " \
30 "urg %u"
31
32 #define TID_FLOW_PRN "[%s] qpn 0x%x flow %d: idx %d resp_ib_psn 0x%x " \
33 "generation 0x%x fpsn 0x%x-%x r_next_psn 0x%x " \
34 "npagesets %u tnode_cnt %u tidcnt %u length %u"
35
36 #define TID_NODE_PRN "[%s] qpn 0x%x %s idx %u grp base 0x%x map 0x%x " \
37 "used %u cnt %u"
38
39 DECLARE_EVENT_CLASS(/* class */
40 hfi1_exp_tid_reg_unreg,
41 TP_PROTO(unsigned int ctxt, u16 subctxt, u32 rarr, u32 npages,
42 unsigned long va, unsigned long pa, dma_addr_t dma),
43 TP_ARGS(ctxt, subctxt, rarr, npages, va, pa, dma),
44 TP_STRUCT__entry(/* entry */
45 __field(unsigned int, ctxt)
46 __field(u16, subctxt)
47 __field(u32, rarr)
48 __field(u32, npages)
49 __field(unsigned long, va)
50 __field(unsigned long, pa)
51 __field(dma_addr_t, dma)
52 ),
53 TP_fast_assign(/* assign */
54 __entry->ctxt = ctxt;
55 __entry->subctxt = subctxt;
56 __entry->rarr = rarr;
57 __entry->npages = npages;
58 __entry->va = va;
59 __entry->pa = pa;
60 __entry->dma = dma;
61 ),
62 TP_printk("[%u:%u] entry:%u, %u pages @ 0x%lx, va:0x%lx dma:0x%llx",
63 __entry->ctxt,
64 __entry->subctxt,
65 __entry->rarr,
66 __entry->npages,
67 __entry->pa,
68 __entry->va,
69 __entry->dma
70 )
71 );
72
73 DEFINE_EVENT(/* exp_tid_unreg */
74 hfi1_exp_tid_reg_unreg, hfi1_exp_tid_unreg,
75 TP_PROTO(unsigned int ctxt, u16 subctxt, u32 rarr, u32 npages,
76 unsigned long va, unsigned long pa, dma_addr_t dma),
77 TP_ARGS(ctxt, subctxt, rarr, npages, va, pa, dma)
78 );
79
80 DEFINE_EVENT(/* exp_tid_reg */
81 hfi1_exp_tid_reg_unreg, hfi1_exp_tid_reg,
82 TP_PROTO(unsigned int ctxt, u16 subctxt, u32 rarr, u32 npages,
83 unsigned long va, unsigned long pa, dma_addr_t dma),
84 TP_ARGS(ctxt, subctxt, rarr, npages, va, pa, dma)
85 );
86
87 TRACE_EVENT(/* put_tid */
88 hfi1_put_tid,
89 TP_PROTO(struct hfi1_devdata *dd,
90 u32 index, u32 type, unsigned long pa, u16 order),
91 TP_ARGS(dd, index, type, pa, order),
92 TP_STRUCT__entry(/* entry */
93 DD_DEV_ENTRY(dd)
94 __field(unsigned long, pa);
95 __field(u32, index);
96 __field(u32, type);
97 __field(u16, order);
98 ),
99 TP_fast_assign(/* assign */
100 DD_DEV_ASSIGN(dd);
101 __entry->pa = pa;
102 __entry->index = index;
103 __entry->type = type;
104 __entry->order = order;
105 ),
106 TP_printk("[%s] type %s pa %lx index %u order %u",
107 __get_str(dev),
108 show_tidtype(__entry->type),
109 __entry->pa,
110 __entry->index,
111 __entry->order
112 )
113 );
114
115 TRACE_EVENT(/* exp_tid_inval */
116 hfi1_exp_tid_inval,
117 TP_PROTO(unsigned int ctxt, u16 subctxt, unsigned long va, u32 rarr,
118 u32 npages, dma_addr_t dma),
119 TP_ARGS(ctxt, subctxt, va, rarr, npages, dma),
120 TP_STRUCT__entry(/* entry */
121 __field(unsigned int, ctxt)
122 __field(u16, subctxt)
123 __field(unsigned long, va)
124 __field(u32, rarr)
125 __field(u32, npages)
126 __field(dma_addr_t, dma)
127 ),
128 TP_fast_assign(/* assign */
129 __entry->ctxt = ctxt;
130 __entry->subctxt = subctxt;
131 __entry->va = va;
132 __entry->rarr = rarr;
133 __entry->npages = npages;
134 __entry->dma = dma;
135 ),
136 TP_printk("[%u:%u] entry:%u, %u pages @ 0x%lx dma: 0x%llx",
137 __entry->ctxt,
138 __entry->subctxt,
139 __entry->rarr,
140 __entry->npages,
141 __entry->va,
142 __entry->dma
143 )
144 );
145
146 DECLARE_EVENT_CLASS(/* opfn_state */
147 hfi1_opfn_state_template,
148 TP_PROTO(struct rvt_qp *qp),
149 TP_ARGS(qp),
150 TP_STRUCT__entry(/* entry */
151 DD_DEV_ENTRY(dd_from_ibdev(qp->ibqp.device))
152 __field(u32, qpn)
153 __field(u16, requested)
154 __field(u16, completed)
155 __field(u8, curr)
156 ),
157 TP_fast_assign(/* assign */
158 struct hfi1_qp_priv *priv = qp->priv;
159
160 DD_DEV_ASSIGN(dd_from_ibdev(qp->ibqp.device));
161 __entry->qpn = qp->ibqp.qp_num;
162 __entry->requested = priv->opfn.requested;
163 __entry->completed = priv->opfn.completed;
164 __entry->curr = priv->opfn.curr;
165 ),
166 TP_printk(/* print */
167 "[%s] qpn 0x%x requested 0x%x completed 0x%x curr 0x%x",
168 __get_str(dev),
169 __entry->qpn,
170 __entry->requested,
171 __entry->completed,
172 __entry->curr
173 )
174 );
175
176 DEFINE_EVENT(/* event */
177 hfi1_opfn_state_template, hfi1_opfn_state_conn_request,
178 TP_PROTO(struct rvt_qp *qp),
179 TP_ARGS(qp)
180 );
181
182 DEFINE_EVENT(/* event */
183 hfi1_opfn_state_template, hfi1_opfn_state_sched_conn_request,
184 TP_PROTO(struct rvt_qp *qp),
185 TP_ARGS(qp)
186 );
187
188 DEFINE_EVENT(/* event */
189 hfi1_opfn_state_template, hfi1_opfn_state_conn_response,
190 TP_PROTO(struct rvt_qp *qp),
191 TP_ARGS(qp)
192 );
193
194 DEFINE_EVENT(/* event */
195 hfi1_opfn_state_template, hfi1_opfn_state_conn_reply,
196 TP_PROTO(struct rvt_qp *qp),
197 TP_ARGS(qp)
198 );
199
200 DEFINE_EVENT(/* event */
201 hfi1_opfn_state_template, hfi1_opfn_state_conn_error,
202 TP_PROTO(struct rvt_qp *qp),
203 TP_ARGS(qp)
204 );
205
206 DECLARE_EVENT_CLASS(/* opfn_data */
207 hfi1_opfn_data_template,
208 TP_PROTO(struct rvt_qp *qp, u8 capcode, u64 data),
209 TP_ARGS(qp, capcode, data),
210 TP_STRUCT__entry(/* entry */
211 DD_DEV_ENTRY(dd_from_ibdev(qp->ibqp.device))
212 __field(u32, qpn)
213 __field(u32, state)
214 __field(u8, capcode)
215 __field(u64, data)
216 ),
217 TP_fast_assign(/* assign */
218 DD_DEV_ASSIGN(dd_from_ibdev(qp->ibqp.device));
219 __entry->qpn = qp->ibqp.qp_num;
220 __entry->state = qp->state;
221 __entry->capcode = capcode;
222 __entry->data = data;
223 ),
224 TP_printk(/* printk */
225 "[%s] qpn 0x%x (state 0x%x) Capcode %u data 0x%llx",
226 __get_str(dev),
227 __entry->qpn,
228 __entry->state,
229 __entry->capcode,
230 __entry->data
231 )
232 );
233
234 DEFINE_EVENT(/* event */
235 hfi1_opfn_data_template, hfi1_opfn_data_conn_request,
236 TP_PROTO(struct rvt_qp *qp, u8 capcode, u64 data),
237 TP_ARGS(qp, capcode, data)
238 );
239
240 DEFINE_EVENT(/* event */
241 hfi1_opfn_data_template, hfi1_opfn_data_conn_response,
242 TP_PROTO(struct rvt_qp *qp, u8 capcode, u64 data),
243 TP_ARGS(qp, capcode, data)
244 );
245
246 DEFINE_EVENT(/* event */
247 hfi1_opfn_data_template, hfi1_opfn_data_conn_reply,
248 TP_PROTO(struct rvt_qp *qp, u8 capcode, u64 data),
249 TP_ARGS(qp, capcode, data)
250 );
251
252 DECLARE_EVENT_CLASS(/* opfn_param */
253 hfi1_opfn_param_template,
254 TP_PROTO(struct rvt_qp *qp, char remote,
255 struct tid_rdma_params *param),
256 TP_ARGS(qp, remote, param),
257 TP_STRUCT__entry(/* entry */
258 DD_DEV_ENTRY(dd_from_ibdev(qp->ibqp.device))
259 __field(u32, qpn)
260 __field(char, remote)
261 __field(u32, param_qp)
262 __field(u32, max_len)
263 __field(u16, jkey)
264 __field(u8, max_read)
265 __field(u8, max_write)
266 __field(u8, timeout)
267 __field(u8, urg)
268 ),
269 TP_fast_assign(/* assign */
270 DD_DEV_ASSIGN(dd_from_ibdev(qp->ibqp.device));
271 __entry->qpn = qp->ibqp.qp_num;
272 __entry->remote = remote;
273 __entry->param_qp = param->qp;
274 __entry->max_len = param->max_len;
275 __entry->jkey = param->jkey;
276 __entry->max_read = param->max_read;
277 __entry->max_write = param->max_write;
278 __entry->timeout = param->timeout;
279 __entry->urg = param->urg;
280 ),
281 TP_printk(/* print */
282 OPFN_PARAM_PRN,
283 __get_str(dev),
284 __entry->qpn,
285 __entry->remote ? "remote" : "local",
286 __entry->param_qp,
287 __entry->max_read,
288 __entry->max_write,
289 __entry->max_len,
290 __entry->jkey,
291 __entry->timeout,
292 __entry->urg
293 )
294 );
295
296 DEFINE_EVENT(/* event */
297 hfi1_opfn_param_template, hfi1_opfn_param,
298 TP_PROTO(struct rvt_qp *qp, char remote,
299 struct tid_rdma_params *param),
300 TP_ARGS(qp, remote, param)
301 );
302
303 DECLARE_EVENT_CLASS(/* msg */
304 hfi1_msg_template,
305 TP_PROTO(struct rvt_qp *qp, const char *msg, u64 more),
306 TP_ARGS(qp, msg, more),
307 TP_STRUCT__entry(/* entry */
308 __field(u32, qpn)
309 __string(msg, msg)
310 __field(u64, more)
311 ),
312 TP_fast_assign(/* assign */
313 __entry->qpn = qp ? qp->ibqp.qp_num : 0;
314 __assign_str(msg, msg);
315 __entry->more = more;
316 ),
317 TP_printk(/* print */
318 "qpn 0x%x %s 0x%llx",
319 __entry->qpn,
320 __get_str(msg),
321 __entry->more
322 )
323 );
324
325 DEFINE_EVENT(/* event */
326 hfi1_msg_template, hfi1_msg_opfn_conn_request,
327 TP_PROTO(struct rvt_qp *qp, const char *msg, u64 more),
328 TP_ARGS(qp, msg, more)
329 );
330
331 DEFINE_EVENT(/* event */
332 hfi1_msg_template, hfi1_msg_opfn_conn_error,
333 TP_PROTO(struct rvt_qp *qp, const char *msg, u64 more),
334 TP_ARGS(qp, msg, more)
335 );
336
337 DEFINE_EVENT(/* event */
338 hfi1_msg_template, hfi1_msg_alloc_tids,
339 TP_PROTO(struct rvt_qp *qp, const char *msg, u64 more),
340 TP_ARGS(qp, msg, more)
341 );
342
343 DECLARE_EVENT_CLASS(/* tid_flow_page */
344 hfi1_tid_flow_page_template,
345 TP_PROTO(struct rvt_qp *qp, struct tid_rdma_flow *flow, u32 index,
346 char mtu8k, char v1, void *vaddr),
347 TP_ARGS(qp, flow, index, mtu8k, v1, vaddr),
348 TP_STRUCT__entry(/* entry */
349 DD_DEV_ENTRY(dd_from_ibdev(qp->ibqp.device))
350 __field(u32, qpn)
351 __field(char, mtu8k)
352 __field(char, v1)
353 __field(u32, index)
354 __field(u64, page)
355 __field(u64, vaddr)
356 ),
357 TP_fast_assign(/* assign */
358 DD_DEV_ASSIGN(dd_from_ibdev(qp->ibqp.device));
359 __entry->qpn = qp->ibqp.qp_num;
360 __entry->mtu8k = mtu8k;
361 __entry->v1 = v1;
362 __entry->index = index;
363 __entry->page = vaddr ? (u64)virt_to_page(vaddr) : 0ULL;
364 __entry->vaddr = (u64)vaddr;
365 ),
366 TP_printk(/* print */
367 "[%s] qpn 0x%x page[%u]: page 0x%llx %s 0x%llx",
368 __get_str(dev),
369 __entry->qpn,
370 __entry->index,
371 __entry->page,
372 __entry->mtu8k ? (__entry->v1 ? "v1" : "v0") : "vaddr",
373 __entry->vaddr
374 )
375 );
376
377 DEFINE_EVENT(/* event */
378 hfi1_tid_flow_page_template, hfi1_tid_flow_page,
379 TP_PROTO(struct rvt_qp *qp, struct tid_rdma_flow *flow, u32 index,
380 char mtu8k, char v1, void *vaddr),
381 TP_ARGS(qp, flow, index, mtu8k, v1, vaddr)
382 );
383
384 DECLARE_EVENT_CLASS(/* tid_pageset */
385 hfi1_tid_pageset_template,
386 TP_PROTO(struct rvt_qp *qp, u32 index, u16 idx, u16 count),
387 TP_ARGS(qp, index, idx, count),
388 TP_STRUCT__entry(/* entry */
389 DD_DEV_ENTRY(dd_from_ibdev(qp->ibqp.device))
390 __field(u32, qpn)
391 __field(u32, index)
392 __field(u16, idx)
393 __field(u16, count)
394 ),
395 TP_fast_assign(/* assign */
396 DD_DEV_ASSIGN(dd_from_ibdev(qp->ibqp.device));
397 __entry->qpn = qp->ibqp.qp_num;
398 __entry->index = index;
399 __entry->idx = idx;
400 __entry->count = count;
401 ),
402 TP_printk(/* print */
403 "[%s] qpn 0x%x list[%u]: idx %u count %u",
404 __get_str(dev),
405 __entry->qpn,
406 __entry->index,
407 __entry->idx,
408 __entry->count
409 )
410 );
411
412 DEFINE_EVENT(/* event */
413 hfi1_tid_pageset_template, hfi1_tid_pageset,
414 TP_PROTO(struct rvt_qp *qp, u32 index, u16 idx, u16 count),
415 TP_ARGS(qp, index, idx, count)
416 );
417
418 DECLARE_EVENT_CLASS(/* tid_fow */
419 hfi1_tid_flow_template,
420 TP_PROTO(struct rvt_qp *qp, int index, struct tid_rdma_flow *flow),
421 TP_ARGS(qp, index, flow),
422 TP_STRUCT__entry(/* entry */
423 DD_DEV_ENTRY(dd_from_ibdev(qp->ibqp.device))
424 __field(u32, qpn)
425 __field(int, index)
426 __field(int, idx)
427 __field(u32, resp_ib_psn)
428 __field(u32, generation)
429 __field(u32, fspsn)
430 __field(u32, flpsn)
431 __field(u32, r_next_psn)
432 __field(u32, npagesets)
433 __field(u32, tnode_cnt)
434 __field(u32, tidcnt)
435 __field(u32, length)
436 ),
437 TP_fast_assign(/* assign */
438 DD_DEV_ASSIGN(dd_from_ibdev(qp->ibqp.device));
439 __entry->qpn = qp->ibqp.qp_num;
440 __entry->index = index;
441 __entry->idx = flow->idx;
442 __entry->resp_ib_psn = flow->flow_state.resp_ib_psn;
443 __entry->generation = flow->flow_state.generation;
444 __entry->fspsn = full_flow_psn(flow,
445 flow->flow_state.spsn);
446 __entry->flpsn = full_flow_psn(flow,
447 flow->flow_state.lpsn);
448 __entry->r_next_psn = flow->flow_state.r_next_psn;
449 __entry->npagesets = flow->npagesets;
450 __entry->tnode_cnt = flow->tnode_cnt;
451 __entry->tidcnt = flow->tidcnt;
452 __entry->length = flow->length;
453 ),
454 TP_printk(/* print */
455 TID_FLOW_PRN,
456 __get_str(dev),
457 __entry->qpn,
458 __entry->index,
459 __entry->idx,
460 __entry->resp_ib_psn,
461 __entry->generation,
462 __entry->fspsn,
463 __entry->flpsn,
464 __entry->r_next_psn,
465 __entry->npagesets,
466 __entry->tnode_cnt,
467 __entry->tidcnt,
468 __entry->length
469 )
470 );
471
472 DEFINE_EVENT(/* event */
473 hfi1_tid_flow_template, hfi1_tid_flow_alloc,
474 TP_PROTO(struct rvt_qp *qp, int index, struct tid_rdma_flow *flow),
475 TP_ARGS(qp, index, flow)
476 );
477
478 DECLARE_EVENT_CLASS(/* tid_node */
479 hfi1_tid_node_template,
480 TP_PROTO(struct rvt_qp *qp, const char *msg, u32 index, u32 base,
481 u8 map, u8 used, u8 cnt),
482 TP_ARGS(qp, msg, index, base, map, used, cnt),
483 TP_STRUCT__entry(/* entry */
484 DD_DEV_ENTRY(dd_from_ibdev(qp->ibqp.device))
485 __field(u32, qpn)
486 __string(msg, msg)
487 __field(u32, index)
488 __field(u32, base)
489 __field(u8, map)
490 __field(u8, used)
491 __field(u8, cnt)
492 ),
493 TP_fast_assign(/* assign */
494 DD_DEV_ASSIGN(dd_from_ibdev(qp->ibqp.device));
495 __entry->qpn = qp->ibqp.qp_num;
496 __assign_str(msg, msg);
497 __entry->index = index;
498 __entry->base = base;
499 __entry->map = map;
500 __entry->used = used;
501 __entry->cnt = cnt;
502 ),
503 TP_printk(/* print */
504 TID_NODE_PRN,
505 __get_str(dev),
506 __entry->qpn,
507 __get_str(msg),
508 __entry->index,
509 __entry->base,
510 __entry->map,
511 __entry->used,
512 __entry->cnt
513 )
514 );
515
516 DEFINE_EVENT(/* event */
517 hfi1_tid_node_template, hfi1_tid_node_add,
518 TP_PROTO(struct rvt_qp *qp, const char *msg, u32 index, u32 base,
519 u8 map, u8 used, u8 cnt),
520 TP_ARGS(qp, msg, index, base, map, used, cnt)
521 );
522
523 DECLARE_EVENT_CLASS(/* tid_entry */
524 hfi1_tid_entry_template,
525 TP_PROTO(struct rvt_qp *qp, int index, u32 ent),
526 TP_ARGS(qp, index, ent),
527 TP_STRUCT__entry(/* entry */
528 DD_DEV_ENTRY(dd_from_ibdev(qp->ibqp.device))
529 __field(u32, qpn)
530 __field(int, index)
531 __field(u8, ctrl)
532 __field(u16, idx)
533 __field(u16, len)
534 ),
535 TP_fast_assign(/* assign */
536 DD_DEV_ASSIGN(dd_from_ibdev(qp->ibqp.device));
537 __entry->qpn = qp->ibqp.qp_num;
538 __entry->index = index;
539 __entry->ctrl = hfi1_trace_get_tid_ctrl(ent);
540 __entry->idx = hfi1_trace_get_tid_idx(ent);
541 __entry->len = hfi1_trace_get_tid_len(ent);
542 ),
543 TP_printk(/* print */
544 "[%s] qpn 0x%x TID entry %d: idx %u len %u ctrl 0x%x",
545 __get_str(dev),
546 __entry->qpn,
547 __entry->index,
548 __entry->idx,
549 __entry->len,
550 __entry->ctrl
551 )
552 );
553
554 DEFINE_EVENT(/* event */
555 hfi1_tid_entry_template, hfi1_tid_entry_alloc,
556 TP_PROTO(struct rvt_qp *qp, int index, u32 entry),
557 TP_ARGS(qp, index, entry)
558 );
559
560 #endif /* __HFI1_TRACE_TID_H */
561
562 #undef TRACE_INCLUDE_PATH
563 #undef TRACE_INCLUDE_FILE
564 #define TRACE_INCLUDE_PATH .
565 #define TRACE_INCLUDE_FILE trace_tid
566 #include <trace/define_trace.h>