0001
0002
0003
0004
0005 #if !defined(__RVT_TRACE_TX_H) || defined(TRACE_HEADER_MULTI_READ)
0006 #define __RVT_TRACE_TX_H
0007
0008 #include <linux/tracepoint.h>
0009 #include <linux/trace_seq.h>
0010
0011 #include <rdma/ib_verbs.h>
0012 #include <rdma/rdmavt_qp.h>
0013
0014 #undef TRACE_SYSTEM
0015 #define TRACE_SYSTEM rvt_tx
0016
0017 #define wr_opcode_name(opcode) { IB_WR_##opcode, #opcode }
0018 #define show_wr_opcode(opcode) \
0019 __print_symbolic(opcode, \
0020 wr_opcode_name(RDMA_WRITE), \
0021 wr_opcode_name(RDMA_WRITE_WITH_IMM), \
0022 wr_opcode_name(SEND), \
0023 wr_opcode_name(SEND_WITH_IMM), \
0024 wr_opcode_name(RDMA_READ), \
0025 wr_opcode_name(ATOMIC_CMP_AND_SWP), \
0026 wr_opcode_name(ATOMIC_FETCH_AND_ADD), \
0027 wr_opcode_name(LSO), \
0028 wr_opcode_name(SEND_WITH_INV), \
0029 wr_opcode_name(RDMA_READ_WITH_INV), \
0030 wr_opcode_name(LOCAL_INV), \
0031 wr_opcode_name(MASKED_ATOMIC_CMP_AND_SWP), \
0032 wr_opcode_name(MASKED_ATOMIC_FETCH_AND_ADD), \
0033 wr_opcode_name(RESERVED1), \
0034 wr_opcode_name(RESERVED2), \
0035 wr_opcode_name(RESERVED3), \
0036 wr_opcode_name(RESERVED4), \
0037 wr_opcode_name(RESERVED5), \
0038 wr_opcode_name(RESERVED6), \
0039 wr_opcode_name(RESERVED7), \
0040 wr_opcode_name(RESERVED8), \
0041 wr_opcode_name(RESERVED9), \
0042 wr_opcode_name(RESERVED10))
0043
0044 #define POS_PRN \
0045 "[%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"
0046
0047 TRACE_EVENT(
0048 rvt_post_one_wr,
0049 TP_PROTO(struct rvt_qp *qp, struct rvt_swqe *wqe, int wr_num_sge),
0050 TP_ARGS(qp, wqe, wr_num_sge),
0051 TP_STRUCT__entry(
0052 RDI_DEV_ENTRY(ib_to_rvt(qp->ibqp.device))
0053 __field(u64, wr_id)
0054 __field(struct rvt_swqe *, wqe)
0055 __field(u32, qpn)
0056 __field(u32, qpt)
0057 __field(u32, psn)
0058 __field(u32, lpsn)
0059 __field(u32, length)
0060 __field(u32, opcode)
0061 __field(u32, size)
0062 __field(u32, avail)
0063 __field(u32, head)
0064 __field(u32, last)
0065 __field(u32, ssn)
0066 __field(int, send_flags)
0067 __field(pid_t, pid)
0068 __field(int, num_sge)
0069 __field(int, wr_num_sge)
0070 ),
0071 TP_fast_assign(
0072 RDI_DEV_ASSIGN(ib_to_rvt(qp->ibqp.device));
0073 __entry->wqe = wqe;
0074 __entry->wr_id = wqe->wr.wr_id;
0075 __entry->qpn = qp->ibqp.qp_num;
0076 __entry->qpt = qp->ibqp.qp_type;
0077 __entry->psn = wqe->psn;
0078 __entry->lpsn = wqe->lpsn;
0079 __entry->length = wqe->length;
0080 __entry->opcode = wqe->wr.opcode;
0081 __entry->size = qp->s_size;
0082 __entry->avail = qp->s_avail;
0083 __entry->head = qp->s_head;
0084 __entry->last = qp->s_last;
0085 __entry->pid = qp->pid;
0086 __entry->ssn = wqe->ssn;
0087 __entry->send_flags = wqe->wr.send_flags;
0088 __entry->num_sge = wqe->wr.num_sge;
0089 __entry->wr_num_sge = wr_num_sge;
0090 ),
0091 TP_printk(
0092 POS_PRN,
0093 __get_str(dev),
0094 __entry->wqe,
0095 __entry->wr_id,
0096 __entry->send_flags,
0097 __entry->qpn,
0098 __entry->qpt,
0099 __entry->psn,
0100 __entry->lpsn,
0101 __entry->ssn,
0102 __entry->length,
0103 __entry->opcode, show_wr_opcode(__entry->opcode),
0104 __entry->size,
0105 __entry->avail,
0106 __entry->head,
0107 __entry->last,
0108 __entry->pid,
0109 __entry->num_sge,
0110 __entry->wr_num_sge
0111 )
0112 );
0113
0114 TRACE_EVENT(
0115 rvt_qp_send_completion,
0116 TP_PROTO(struct rvt_qp *qp, struct rvt_swqe *wqe, u32 idx),
0117 TP_ARGS(qp, wqe, idx),
0118 TP_STRUCT__entry(
0119 RDI_DEV_ENTRY(ib_to_rvt(qp->ibqp.device))
0120 __field(struct rvt_swqe *, wqe)
0121 __field(u64, wr_id)
0122 __field(u32, qpn)
0123 __field(u32, qpt)
0124 __field(u32, length)
0125 __field(u32, idx)
0126 __field(u32, ssn)
0127 __field(enum ib_wr_opcode, opcode)
0128 __field(int, send_flags)
0129 ),
0130 TP_fast_assign(
0131 RDI_DEV_ASSIGN(ib_to_rvt(qp->ibqp.device));
0132 __entry->wqe = wqe;
0133 __entry->wr_id = wqe->wr.wr_id;
0134 __entry->qpn = qp->ibqp.qp_num;
0135 __entry->qpt = qp->ibqp.qp_type;
0136 __entry->length = wqe->length;
0137 __entry->idx = idx;
0138 __entry->ssn = wqe->ssn;
0139 __entry->opcode = wqe->wr.opcode;
0140 __entry->send_flags = wqe->wr.send_flags;
0141 ),
0142 TP_printk(
0143 "[%s] qpn 0x%x qpt %u wqe %p idx %u wr_id %llx length %u ssn %u opcode %x send_flags %x",
0144 __get_str(dev),
0145 __entry->qpn,
0146 __entry->qpt,
0147 __entry->wqe,
0148 __entry->idx,
0149 __entry->wr_id,
0150 __entry->length,
0151 __entry->ssn,
0152 __entry->opcode,
0153 __entry->send_flags
0154 )
0155 );
0156 #endif
0157
0158 #undef TRACE_INCLUDE_PATH
0159 #undef TRACE_INCLUDE_FILE
0160 #define TRACE_INCLUDE_PATH .
0161 #define TRACE_INCLUDE_FILE trace_tx
0162 #include <trace/define_trace.h>
0163