1 /* SPDX-License-Identifier: GPL-2.0 or BSD-3-Clause */
3 * Copyright(c) 2016 Intel Corporation.
5 #if !defined(__RVT_TRACE_TX_H) || defined(TRACE_HEADER_MULTI_READ)
6 #define __RVT_TRACE_TX_H
8 #include <linux/tracepoint.h>
9 #include <linux/trace_seq.h>
11 #include <rdma/ib_verbs.h>
12 #include <rdma/rdmavt_qp.h>
15 #define TRACE_SYSTEM rvt_tx
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))
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"
49 TP_PROTO(struct rvt_qp *qp, struct rvt_swqe *wqe, int wr_num_sge),
50 TP_ARGS(qp, wqe, wr_num_sge),
52 RDI_DEV_ENTRY(ib_to_rvt(qp->ibqp.device))
54 __field(struct rvt_swqe *, wqe)
66 __field(int, send_flags)
69 __field(int, wr_num_sge)
72 RDI_DEV_ASSIGN(ib_to_rvt(qp->ibqp.device));
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;
103 __entry->opcode, show_wr_opcode(__entry->opcode),
115 rvt_qp_send_completion,
116 TP_PROTO(struct rvt_qp *qp, struct rvt_swqe *wqe, u32 idx),
117 TP_ARGS(qp, wqe, idx),
119 RDI_DEV_ENTRY(ib_to_rvt(qp->ibqp.device))
120 __field(struct rvt_swqe *, wqe)
127 __field(enum ib_wr_opcode, opcode)
128 __field(int, send_flags)
131 RDI_DEV_ASSIGN(ib_to_rvt(qp->ibqp.device));
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;
138 __entry->ssn = wqe->ssn;
139 __entry->opcode = wqe->wr.opcode;
140 __entry->send_flags = wqe->wr.send_flags;
143 "[%s] qpn 0x%x qpt %u wqe %p idx %u wr_id %llx length %u ssn %u opcode %x send_flags %x",
156 #endif /* __RVT_TRACE_TX_H */
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>