1/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
2/*
3 * Copyright(c) 2016 Intel Corporation.
4 */
5#if !defined(__RVT_TRACE_TX_H) || defined(TRACE_HEADER_MULTI_READ)
6#define __RVT_TRACE_TX_H
7
8#include <linux/tracepoint.h>
9#include <linux/trace_seq.h>
10
11#include <rdma/ib_verbs.h>
12#include <rdma/rdmavt_qp.h>
13
14#undef TRACE_SYSTEM
15#define TRACE_SYSTEM rvt_tx
16
17#define wr_opcode_name(opcode) { IB_WR_##opcode, #opcode }
18#define show_wr_opcode(opcode) \
19__print_symbolic(opcode, \
20 wr_opcode_name(RDMA_WRITE), \
21 wr_opcode_name(RDMA_WRITE_WITH_IMM), \
22 wr_opcode_name(SEND), \
23 wr_opcode_name(SEND_WITH_IMM), \
24 wr_opcode_name(RDMA_READ), \
25 wr_opcode_name(ATOMIC_CMP_AND_SWP), \
26 wr_opcode_name(ATOMIC_FETCH_AND_ADD), \
27 wr_opcode_name(LSO), \
28 wr_opcode_name(SEND_WITH_INV), \
29 wr_opcode_name(RDMA_READ_WITH_INV), \
30 wr_opcode_name(LOCAL_INV), \
31 wr_opcode_name(MASKED_ATOMIC_CMP_AND_SWP), \
32 wr_opcode_name(MASKED_ATOMIC_FETCH_AND_ADD), \
33 wr_opcode_name(RESERVED1), \
34 wr_opcode_name(RESERVED2), \
35 wr_opcode_name(RESERVED3), \
36 wr_opcode_name(RESERVED4), \
37 wr_opcode_name(RESERVED5), \
38 wr_opcode_name(RESERVED6), \
39 wr_opcode_name(RESERVED7), \
40 wr_opcode_name(RESERVED8), \
41 wr_opcode_name(RESERVED9), \
42 wr_opcode_name(RESERVED10))
43
44#define POS_PRN \
45"[%s] wqe %p wr_id %llx send_flags %x qpn %x qpt %u psn %x lpsn %x ssn %x length %u opcode 0x%.2x,%s size %u avail %u head %u last %u pid %u num_sge %u wr_num_sge %u"
46
47TRACE_EVENT(
48 rvt_post_one_wr,
49 TP_PROTO(struct rvt_qp *qp, struct rvt_swqe *wqe, int wr_num_sge),
50 TP_ARGS(qp, wqe, wr_num_sge),
51 TP_STRUCT__entry(
52 RDI_DEV_ENTRY(ib_to_rvt(qp->ibqp.device))
53 __field(u64, wr_id)
54 __field(struct rvt_swqe *, wqe)
55 __field(u32, qpn)
56 __field(u32, qpt)
57 __field(u32, psn)
58 __field(u32, lpsn)
59 __field(u32, length)
60 __field(u32, opcode)
61 __field(u32, size)
62 __field(u32, avail)
63 __field(u32, head)
64 __field(u32, last)
65 __field(u32, ssn)
66 __field(int, send_flags)
67 __field(pid_t, pid)
68 __field(int, num_sge)
69 __field(int, wr_num_sge)
70 ),
71 TP_fast_assign(
72 RDI_DEV_ASSIGN(ib_to_rvt(qp->ibqp.device));
73 __entry->wqe = wqe;
74 __entry->wr_id = wqe->wr.wr_id;
75 __entry->qpn = qp->ibqp.qp_num;
76 __entry->qpt = qp->ibqp.qp_type;
77 __entry->psn = wqe->psn;
78 __entry->lpsn = wqe->lpsn;
79 __entry->length = wqe->length;
80 __entry->opcode = wqe->wr.opcode;
81 __entry->size = qp->s_size;
82 __entry->avail = qp->s_avail;
83 __entry->head = qp->s_head;
84 __entry->last = qp->s_last;
85 __entry->pid = qp->pid;
86 __entry->ssn = wqe->ssn;
87 __entry->send_flags = wqe->wr.send_flags;
88 __entry->num_sge = wqe->wr.num_sge;
89 __entry->wr_num_sge = wr_num_sge;
90 ),
91 TP_printk(
92 POS_PRN,
93 __get_str(dev),
94 __entry->wqe,
95 __entry->wr_id,
96 __entry->send_flags,
97 __entry->qpn,
98 __entry->qpt,
99 __entry->psn,
100 __entry->lpsn,
101 __entry->ssn,
102 __entry->length,
103 __entry->opcode, show_wr_opcode(__entry->opcode),
104 __entry->size,
105 __entry->avail,
106 __entry->head,
107 __entry->last,
108 __entry->pid,
109 __entry->num_sge,
110 __entry->wr_num_sge
111 )
112);
113
114TRACE_EVENT(
115 rvt_qp_send_completion,
116 TP_PROTO(struct rvt_qp *qp, struct rvt_swqe *wqe, u32 idx),
117 TP_ARGS(qp, wqe, idx),
118 TP_STRUCT__entry(
119 RDI_DEV_ENTRY(ib_to_rvt(qp->ibqp.device))
120 __field(struct rvt_swqe *, wqe)
121 __field(u64, wr_id)
122 __field(u32, qpn)
123 __field(u32, qpt)
124 __field(u32, length)
125 __field(u32, idx)
126 __field(u32, ssn)
127 __field(enum ib_wr_opcode, opcode)
128 __field(int, send_flags)
129 ),
130 TP_fast_assign(
131 RDI_DEV_ASSIGN(ib_to_rvt(qp->ibqp.device));
132 __entry->wqe = wqe;
133 __entry->wr_id = wqe->wr.wr_id;
134 __entry->qpn = qp->ibqp.qp_num;
135 __entry->qpt = qp->ibqp.qp_type;
136 __entry->length = wqe->length;
137 __entry->idx = idx;
138 __entry->ssn = wqe->ssn;
139 __entry->opcode = wqe->wr.opcode;
140 __entry->send_flags = wqe->wr.send_flags;
141 ),
142 TP_printk(
143 "[%s] qpn 0x%x qpt %u wqe %p idx %u wr_id %llx length %u ssn %u opcode %x send_flags %x",
144 __get_str(dev),
145 __entry->qpn,
146 __entry->qpt,
147 __entry->wqe,
148 __entry->idx,
149 __entry->wr_id,
150 __entry->length,
151 __entry->ssn,
152 __entry->opcode,
153 __entry->send_flags
154 )
155);
156#endif /* __RVT_TRACE_TX_H */
157
158#undef TRACE_INCLUDE_PATH
159#undef TRACE_INCLUDE_FILE
160#define TRACE_INCLUDE_PATH .
161#define TRACE_INCLUDE_FILE trace_tx
162#include <trace/define_trace.h>
163
164

source code of linux/drivers/infiniband/sw/rdmavt/trace_tx.h