162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 or BSD-3-Clause */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright(c) 2016 Intel Corporation. 462306a36Sopenharmony_ci */ 562306a36Sopenharmony_ci#if !defined(__RVT_TRACE_TX_H) || defined(TRACE_HEADER_MULTI_READ) 662306a36Sopenharmony_ci#define __RVT_TRACE_TX_H 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci#include <linux/tracepoint.h> 962306a36Sopenharmony_ci#include <linux/trace_seq.h> 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci#include <rdma/ib_verbs.h> 1262306a36Sopenharmony_ci#include <rdma/rdmavt_qp.h> 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci#undef TRACE_SYSTEM 1562306a36Sopenharmony_ci#define TRACE_SYSTEM rvt_tx 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ci#define wr_opcode_name(opcode) { IB_WR_##opcode, #opcode } 1862306a36Sopenharmony_ci#define show_wr_opcode(opcode) \ 1962306a36Sopenharmony_ci__print_symbolic(opcode, \ 2062306a36Sopenharmony_ci wr_opcode_name(RDMA_WRITE), \ 2162306a36Sopenharmony_ci wr_opcode_name(RDMA_WRITE_WITH_IMM), \ 2262306a36Sopenharmony_ci wr_opcode_name(SEND), \ 2362306a36Sopenharmony_ci wr_opcode_name(SEND_WITH_IMM), \ 2462306a36Sopenharmony_ci wr_opcode_name(RDMA_READ), \ 2562306a36Sopenharmony_ci wr_opcode_name(ATOMIC_CMP_AND_SWP), \ 2662306a36Sopenharmony_ci wr_opcode_name(ATOMIC_FETCH_AND_ADD), \ 2762306a36Sopenharmony_ci wr_opcode_name(LSO), \ 2862306a36Sopenharmony_ci wr_opcode_name(SEND_WITH_INV), \ 2962306a36Sopenharmony_ci wr_opcode_name(RDMA_READ_WITH_INV), \ 3062306a36Sopenharmony_ci wr_opcode_name(LOCAL_INV), \ 3162306a36Sopenharmony_ci wr_opcode_name(MASKED_ATOMIC_CMP_AND_SWP), \ 3262306a36Sopenharmony_ci wr_opcode_name(MASKED_ATOMIC_FETCH_AND_ADD), \ 3362306a36Sopenharmony_ci wr_opcode_name(RESERVED1), \ 3462306a36Sopenharmony_ci wr_opcode_name(RESERVED2), \ 3562306a36Sopenharmony_ci wr_opcode_name(RESERVED3), \ 3662306a36Sopenharmony_ci wr_opcode_name(RESERVED4), \ 3762306a36Sopenharmony_ci wr_opcode_name(RESERVED5), \ 3862306a36Sopenharmony_ci wr_opcode_name(RESERVED6), \ 3962306a36Sopenharmony_ci wr_opcode_name(RESERVED7), \ 4062306a36Sopenharmony_ci wr_opcode_name(RESERVED8), \ 4162306a36Sopenharmony_ci wr_opcode_name(RESERVED9), \ 4262306a36Sopenharmony_ci wr_opcode_name(RESERVED10)) 4362306a36Sopenharmony_ci 4462306a36Sopenharmony_ci#define POS_PRN \ 4562306a36Sopenharmony_ci"[%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" 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_ciTRACE_EVENT( 4862306a36Sopenharmony_ci rvt_post_one_wr, 4962306a36Sopenharmony_ci TP_PROTO(struct rvt_qp *qp, struct rvt_swqe *wqe, int wr_num_sge), 5062306a36Sopenharmony_ci TP_ARGS(qp, wqe, wr_num_sge), 5162306a36Sopenharmony_ci TP_STRUCT__entry( 5262306a36Sopenharmony_ci RDI_DEV_ENTRY(ib_to_rvt(qp->ibqp.device)) 5362306a36Sopenharmony_ci __field(u64, wr_id) 5462306a36Sopenharmony_ci __field(struct rvt_swqe *, wqe) 5562306a36Sopenharmony_ci __field(u32, qpn) 5662306a36Sopenharmony_ci __field(u32, qpt) 5762306a36Sopenharmony_ci __field(u32, psn) 5862306a36Sopenharmony_ci __field(u32, lpsn) 5962306a36Sopenharmony_ci __field(u32, length) 6062306a36Sopenharmony_ci __field(u32, opcode) 6162306a36Sopenharmony_ci __field(u32, size) 6262306a36Sopenharmony_ci __field(u32, avail) 6362306a36Sopenharmony_ci __field(u32, head) 6462306a36Sopenharmony_ci __field(u32, last) 6562306a36Sopenharmony_ci __field(u32, ssn) 6662306a36Sopenharmony_ci __field(int, send_flags) 6762306a36Sopenharmony_ci __field(pid_t, pid) 6862306a36Sopenharmony_ci __field(int, num_sge) 6962306a36Sopenharmony_ci __field(int, wr_num_sge) 7062306a36Sopenharmony_ci ), 7162306a36Sopenharmony_ci TP_fast_assign( 7262306a36Sopenharmony_ci RDI_DEV_ASSIGN(ib_to_rvt(qp->ibqp.device)); 7362306a36Sopenharmony_ci __entry->wqe = wqe; 7462306a36Sopenharmony_ci __entry->wr_id = wqe->wr.wr_id; 7562306a36Sopenharmony_ci __entry->qpn = qp->ibqp.qp_num; 7662306a36Sopenharmony_ci __entry->qpt = qp->ibqp.qp_type; 7762306a36Sopenharmony_ci __entry->psn = wqe->psn; 7862306a36Sopenharmony_ci __entry->lpsn = wqe->lpsn; 7962306a36Sopenharmony_ci __entry->length = wqe->length; 8062306a36Sopenharmony_ci __entry->opcode = wqe->wr.opcode; 8162306a36Sopenharmony_ci __entry->size = qp->s_size; 8262306a36Sopenharmony_ci __entry->avail = qp->s_avail; 8362306a36Sopenharmony_ci __entry->head = qp->s_head; 8462306a36Sopenharmony_ci __entry->last = qp->s_last; 8562306a36Sopenharmony_ci __entry->pid = qp->pid; 8662306a36Sopenharmony_ci __entry->ssn = wqe->ssn; 8762306a36Sopenharmony_ci __entry->send_flags = wqe->wr.send_flags; 8862306a36Sopenharmony_ci __entry->num_sge = wqe->wr.num_sge; 8962306a36Sopenharmony_ci __entry->wr_num_sge = wr_num_sge; 9062306a36Sopenharmony_ci ), 9162306a36Sopenharmony_ci TP_printk( 9262306a36Sopenharmony_ci POS_PRN, 9362306a36Sopenharmony_ci __get_str(dev), 9462306a36Sopenharmony_ci __entry->wqe, 9562306a36Sopenharmony_ci __entry->wr_id, 9662306a36Sopenharmony_ci __entry->send_flags, 9762306a36Sopenharmony_ci __entry->qpn, 9862306a36Sopenharmony_ci __entry->qpt, 9962306a36Sopenharmony_ci __entry->psn, 10062306a36Sopenharmony_ci __entry->lpsn, 10162306a36Sopenharmony_ci __entry->ssn, 10262306a36Sopenharmony_ci __entry->length, 10362306a36Sopenharmony_ci __entry->opcode, show_wr_opcode(__entry->opcode), 10462306a36Sopenharmony_ci __entry->size, 10562306a36Sopenharmony_ci __entry->avail, 10662306a36Sopenharmony_ci __entry->head, 10762306a36Sopenharmony_ci __entry->last, 10862306a36Sopenharmony_ci __entry->pid, 10962306a36Sopenharmony_ci __entry->num_sge, 11062306a36Sopenharmony_ci __entry->wr_num_sge 11162306a36Sopenharmony_ci ) 11262306a36Sopenharmony_ci); 11362306a36Sopenharmony_ci 11462306a36Sopenharmony_ciTRACE_EVENT( 11562306a36Sopenharmony_ci rvt_qp_send_completion, 11662306a36Sopenharmony_ci TP_PROTO(struct rvt_qp *qp, struct rvt_swqe *wqe, u32 idx), 11762306a36Sopenharmony_ci TP_ARGS(qp, wqe, idx), 11862306a36Sopenharmony_ci TP_STRUCT__entry( 11962306a36Sopenharmony_ci RDI_DEV_ENTRY(ib_to_rvt(qp->ibqp.device)) 12062306a36Sopenharmony_ci __field(struct rvt_swqe *, wqe) 12162306a36Sopenharmony_ci __field(u64, wr_id) 12262306a36Sopenharmony_ci __field(u32, qpn) 12362306a36Sopenharmony_ci __field(u32, qpt) 12462306a36Sopenharmony_ci __field(u32, length) 12562306a36Sopenharmony_ci __field(u32, idx) 12662306a36Sopenharmony_ci __field(u32, ssn) 12762306a36Sopenharmony_ci __field(enum ib_wr_opcode, opcode) 12862306a36Sopenharmony_ci __field(int, send_flags) 12962306a36Sopenharmony_ci ), 13062306a36Sopenharmony_ci TP_fast_assign( 13162306a36Sopenharmony_ci RDI_DEV_ASSIGN(ib_to_rvt(qp->ibqp.device)); 13262306a36Sopenharmony_ci __entry->wqe = wqe; 13362306a36Sopenharmony_ci __entry->wr_id = wqe->wr.wr_id; 13462306a36Sopenharmony_ci __entry->qpn = qp->ibqp.qp_num; 13562306a36Sopenharmony_ci __entry->qpt = qp->ibqp.qp_type; 13662306a36Sopenharmony_ci __entry->length = wqe->length; 13762306a36Sopenharmony_ci __entry->idx = idx; 13862306a36Sopenharmony_ci __entry->ssn = wqe->ssn; 13962306a36Sopenharmony_ci __entry->opcode = wqe->wr.opcode; 14062306a36Sopenharmony_ci __entry->send_flags = wqe->wr.send_flags; 14162306a36Sopenharmony_ci ), 14262306a36Sopenharmony_ci TP_printk( 14362306a36Sopenharmony_ci "[%s] qpn 0x%x qpt %u wqe %p idx %u wr_id %llx length %u ssn %u opcode %x send_flags %x", 14462306a36Sopenharmony_ci __get_str(dev), 14562306a36Sopenharmony_ci __entry->qpn, 14662306a36Sopenharmony_ci __entry->qpt, 14762306a36Sopenharmony_ci __entry->wqe, 14862306a36Sopenharmony_ci __entry->idx, 14962306a36Sopenharmony_ci __entry->wr_id, 15062306a36Sopenharmony_ci __entry->length, 15162306a36Sopenharmony_ci __entry->ssn, 15262306a36Sopenharmony_ci __entry->opcode, 15362306a36Sopenharmony_ci __entry->send_flags 15462306a36Sopenharmony_ci ) 15562306a36Sopenharmony_ci); 15662306a36Sopenharmony_ci#endif /* __RVT_TRACE_TX_H */ 15762306a36Sopenharmony_ci 15862306a36Sopenharmony_ci#undef TRACE_INCLUDE_PATH 15962306a36Sopenharmony_ci#undef TRACE_INCLUDE_FILE 16062306a36Sopenharmony_ci#define TRACE_INCLUDE_PATH . 16162306a36Sopenharmony_ci#define TRACE_INCLUDE_FILE trace_tx 16262306a36Sopenharmony_ci#include <trace/define_trace.h> 16362306a36Sopenharmony_ci 164