1 /* SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause) */
3 * Copyright(c) 2018 Intel Corporation.
6 #if !defined(__HFI1_TRACE_TID_H) || defined(TRACE_HEADER_MULTI_READ)
7 #define __HFI1_TRACE_TID_H
9 #include <linux/tracepoint.h>
10 #include <linux/trace_seq.h>
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)) \
22 #define TRACE_SYSTEM hfi1_tid
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
);
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 " \
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"
36 #define TID_NODE_PRN "[%s] qpn 0x%x %s idx %u grp base 0x%x map 0x%x " \
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
)
49 __field(unsigned long, va
)
50 __field(unsigned long, pa
)
51 __field(dma_addr_t
, dma
)
53 TP_fast_assign(/* assign */
55 __entry
->subctxt
= subctxt
;
57 __entry
->npages
= npages
;
62 TP_printk("[%u:%u] entry:%u, %u pages @ 0x%lx, va:0x%lx dma:0x%llx",
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
)
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
)
87 TRACE_EVENT(/* 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 */
94 __field(unsigned long, pa
);
99 TP_fast_assign(/* assign */
102 __entry
->index
= index
;
103 __entry
->type
= type
;
104 __entry
->order
= order
;
106 TP_printk("[%s] type %s pa %lx index %u order %u",
108 show_tidtype(__entry
->type
),
115 TRACE_EVENT(/* 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
)
126 __field(dma_addr_t
, dma
)
128 TP_fast_assign(/* assign */
129 __entry
->ctxt
= ctxt
;
130 __entry
->subctxt
= subctxt
;
132 __entry
->rarr
= rarr
;
133 __entry
->npages
= npages
;
136 TP_printk("[%u:%u] entry:%u, %u pages @ 0x%lx dma: 0x%llx",
146 DECLARE_EVENT_CLASS(/* opfn_state */
147 hfi1_opfn_state_template
,
148 TP_PROTO(struct rvt_qp
*qp
),
150 TP_STRUCT__entry(/* entry */
151 DD_DEV_ENTRY(dd_from_ibdev(qp
->ibqp
.device
))
153 __field(u16
, requested
)
154 __field(u16
, completed
)
157 TP_fast_assign(/* assign */
158 struct hfi1_qp_priv
*priv
= qp
->priv
;
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
;
166 TP_printk(/* print */
167 "[%s] qpn 0x%x requested 0x%x completed 0x%x curr 0x%x",
176 DEFINE_EVENT(/* event */
177 hfi1_opfn_state_template
, hfi1_opfn_state_conn_request
,
178 TP_PROTO(struct rvt_qp
*qp
),
182 DEFINE_EVENT(/* event */
183 hfi1_opfn_state_template
, hfi1_opfn_state_sched_conn_request
,
184 TP_PROTO(struct rvt_qp
*qp
),
188 DEFINE_EVENT(/* event */
189 hfi1_opfn_state_template
, hfi1_opfn_state_conn_response
,
190 TP_PROTO(struct rvt_qp
*qp
),
194 DEFINE_EVENT(/* event */
195 hfi1_opfn_state_template
, hfi1_opfn_state_conn_reply
,
196 TP_PROTO(struct rvt_qp
*qp
),
200 DEFINE_EVENT(/* event */
201 hfi1_opfn_state_template
, hfi1_opfn_state_conn_error
,
202 TP_PROTO(struct rvt_qp
*qp
),
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
))
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
;
224 TP_printk(/* printk */
225 "[%s] qpn 0x%x (state 0x%x) Capcode %u data 0x%llx",
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
)
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
)
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
)
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
))
260 __field(char, remote
)
261 __field(u32
, param_qp
)
262 __field(u32
, max_len
)
264 __field(u8
, max_read
)
265 __field(u8
, max_write
)
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
;
281 TP_printk(/* print */
285 __entry
->remote
? "remote" : "local",
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
)
303 DECLARE_EVENT_CLASS(/* msg */
305 TP_PROTO(struct rvt_qp
*qp
, const char *msg
, u64 more
),
306 TP_ARGS(qp
, msg
, more
),
307 TP_STRUCT__entry(/* entry */
312 TP_fast_assign(/* assign */
313 __entry
->qpn
= qp
? qp
->ibqp
.qp_num
: 0;
314 __assign_str(msg
, msg
);
315 __entry
->more
= more
;
317 TP_printk(/* print */
318 "qpn 0x%x %s 0x%llx",
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
)
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
)
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
)
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
))
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
;
362 __entry
->index
= index
;
363 __entry
->page
= vaddr
? (u64
)virt_to_page(vaddr
) : 0ULL;
364 __entry
->vaddr
= (u64
)vaddr
;
366 TP_printk(/* print */
367 "[%s] qpn 0x%x page[%u]: page 0x%llx %s 0x%llx",
372 __entry
->mtu8k
? (__entry
->v1
? "v1" : "v0") : "vaddr",
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
)
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
))
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
;
400 __entry
->count
= count
;
402 TP_printk(/* print */
403 "[%s] qpn 0x%x list[%u]: idx %u count %u",
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
)
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
))
427 __field(u32
, resp_ib_psn
)
428 __field(u32
, generation
)
431 __field(u32
, r_next_psn
)
432 __field(u32
, npagesets
)
433 __field(u32
, tnode_cnt
)
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
;
454 TP_printk(/* print */
460 __entry
->resp_ib_psn
,
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
)
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
))
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
;
500 __entry
->used
= used
;
503 TP_printk(/* print */
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
)
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
))
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
);
543 TP_printk(/* print */
544 "[%s] qpn 0x%x TID entry %d: idx %u len %u ctrl 0x%x",
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
)
560 #endif /* __HFI1_TRACE_TID_H */
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>