162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 or BSD-3-Clause */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright(c) 2016 - 2018 Intel Corporation. 462306a36Sopenharmony_ci */ 562306a36Sopenharmony_ci#if !defined(__RVT_TRACE_CQ_H) || defined(TRACE_HEADER_MULTI_READ) 662306a36Sopenharmony_ci#define __RVT_TRACE_CQ_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_cq.h> 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci#undef TRACE_SYSTEM 1562306a36Sopenharmony_ci#define TRACE_SYSTEM rvt_cq 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ci#define wc_opcode_name(opcode) { IB_WC_##opcode, #opcode } 1862306a36Sopenharmony_ci#define show_wc_opcode(opcode) \ 1962306a36Sopenharmony_ci__print_symbolic(opcode, \ 2062306a36Sopenharmony_ci wc_opcode_name(SEND), \ 2162306a36Sopenharmony_ci wc_opcode_name(RDMA_WRITE), \ 2262306a36Sopenharmony_ci wc_opcode_name(RDMA_READ), \ 2362306a36Sopenharmony_ci wc_opcode_name(COMP_SWAP), \ 2462306a36Sopenharmony_ci wc_opcode_name(FETCH_ADD), \ 2562306a36Sopenharmony_ci wc_opcode_name(LSO), \ 2662306a36Sopenharmony_ci wc_opcode_name(LOCAL_INV), \ 2762306a36Sopenharmony_ci wc_opcode_name(REG_MR), \ 2862306a36Sopenharmony_ci wc_opcode_name(MASKED_COMP_SWAP), \ 2962306a36Sopenharmony_ci wc_opcode_name(RECV), \ 3062306a36Sopenharmony_ci wc_opcode_name(RECV_RDMA_WITH_IMM)) 3162306a36Sopenharmony_ci 3262306a36Sopenharmony_ci#define CQ_ATTR_PRINT \ 3362306a36Sopenharmony_ci"[%s] user cq %s cqe %u comp_vector %d comp_vector_cpu %d flags %x" 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_ciDECLARE_EVENT_CLASS(rvt_cq_template, 3662306a36Sopenharmony_ci TP_PROTO(struct rvt_cq *cq, 3762306a36Sopenharmony_ci const struct ib_cq_init_attr *attr), 3862306a36Sopenharmony_ci TP_ARGS(cq, attr), 3962306a36Sopenharmony_ci TP_STRUCT__entry(RDI_DEV_ENTRY(cq->rdi) 4062306a36Sopenharmony_ci __field(struct rvt_mmap_info *, ip) 4162306a36Sopenharmony_ci __field(unsigned int, cqe) 4262306a36Sopenharmony_ci __field(int, comp_vector) 4362306a36Sopenharmony_ci __field(int, comp_vector_cpu) 4462306a36Sopenharmony_ci __field(u32, flags) 4562306a36Sopenharmony_ci ), 4662306a36Sopenharmony_ci TP_fast_assign(RDI_DEV_ASSIGN(cq->rdi); 4762306a36Sopenharmony_ci __entry->ip = cq->ip; 4862306a36Sopenharmony_ci __entry->cqe = attr->cqe; 4962306a36Sopenharmony_ci __entry->comp_vector = attr->comp_vector; 5062306a36Sopenharmony_ci __entry->comp_vector_cpu = 5162306a36Sopenharmony_ci cq->comp_vector_cpu; 5262306a36Sopenharmony_ci __entry->flags = attr->flags; 5362306a36Sopenharmony_ci ), 5462306a36Sopenharmony_ci TP_printk(CQ_ATTR_PRINT, __get_str(dev), 5562306a36Sopenharmony_ci __entry->ip ? "true" : "false", __entry->cqe, 5662306a36Sopenharmony_ci __entry->comp_vector, __entry->comp_vector_cpu, 5762306a36Sopenharmony_ci __entry->flags 5862306a36Sopenharmony_ci ) 5962306a36Sopenharmony_ci); 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_ciDEFINE_EVENT(rvt_cq_template, rvt_create_cq, 6262306a36Sopenharmony_ci TP_PROTO(struct rvt_cq *cq, const struct ib_cq_init_attr *attr), 6362306a36Sopenharmony_ci TP_ARGS(cq, attr)); 6462306a36Sopenharmony_ci 6562306a36Sopenharmony_ci#define CQ_PRN \ 6662306a36Sopenharmony_ci"[%s] idx %u wr_id %llx status %u opcode %u,%s length %u qpn %x flags %x imm %x" 6762306a36Sopenharmony_ci 6862306a36Sopenharmony_ciDECLARE_EVENT_CLASS( 6962306a36Sopenharmony_ci rvt_cq_entry_template, 7062306a36Sopenharmony_ci TP_PROTO(struct rvt_cq *cq, struct ib_wc *wc, u32 idx), 7162306a36Sopenharmony_ci TP_ARGS(cq, wc, idx), 7262306a36Sopenharmony_ci TP_STRUCT__entry( 7362306a36Sopenharmony_ci RDI_DEV_ENTRY(cq->rdi) 7462306a36Sopenharmony_ci __field(u64, wr_id) 7562306a36Sopenharmony_ci __field(u32, status) 7662306a36Sopenharmony_ci __field(u32, opcode) 7762306a36Sopenharmony_ci __field(u32, qpn) 7862306a36Sopenharmony_ci __field(u32, length) 7962306a36Sopenharmony_ci __field(u32, idx) 8062306a36Sopenharmony_ci __field(u32, flags) 8162306a36Sopenharmony_ci __field(u32, imm) 8262306a36Sopenharmony_ci ), 8362306a36Sopenharmony_ci TP_fast_assign( 8462306a36Sopenharmony_ci RDI_DEV_ASSIGN(cq->rdi); 8562306a36Sopenharmony_ci __entry->wr_id = wc->wr_id; 8662306a36Sopenharmony_ci __entry->status = wc->status; 8762306a36Sopenharmony_ci __entry->opcode = wc->opcode; 8862306a36Sopenharmony_ci __entry->length = wc->byte_len; 8962306a36Sopenharmony_ci __entry->qpn = wc->qp->qp_num; 9062306a36Sopenharmony_ci __entry->idx = idx; 9162306a36Sopenharmony_ci __entry->flags = wc->wc_flags; 9262306a36Sopenharmony_ci __entry->imm = be32_to_cpu(wc->ex.imm_data); 9362306a36Sopenharmony_ci ), 9462306a36Sopenharmony_ci TP_printk( 9562306a36Sopenharmony_ci CQ_PRN, 9662306a36Sopenharmony_ci __get_str(dev), 9762306a36Sopenharmony_ci __entry->idx, 9862306a36Sopenharmony_ci __entry->wr_id, 9962306a36Sopenharmony_ci __entry->status, 10062306a36Sopenharmony_ci __entry->opcode, show_wc_opcode(__entry->opcode), 10162306a36Sopenharmony_ci __entry->length, 10262306a36Sopenharmony_ci __entry->qpn, 10362306a36Sopenharmony_ci __entry->flags, 10462306a36Sopenharmony_ci __entry->imm 10562306a36Sopenharmony_ci ) 10662306a36Sopenharmony_ci); 10762306a36Sopenharmony_ci 10862306a36Sopenharmony_ciDEFINE_EVENT( 10962306a36Sopenharmony_ci rvt_cq_entry_template, rvt_cq_enter, 11062306a36Sopenharmony_ci TP_PROTO(struct rvt_cq *cq, struct ib_wc *wc, u32 idx), 11162306a36Sopenharmony_ci TP_ARGS(cq, wc, idx)); 11262306a36Sopenharmony_ci 11362306a36Sopenharmony_ciDEFINE_EVENT( 11462306a36Sopenharmony_ci rvt_cq_entry_template, rvt_cq_poll, 11562306a36Sopenharmony_ci TP_PROTO(struct rvt_cq *cq, struct ib_wc *wc, u32 idx), 11662306a36Sopenharmony_ci TP_ARGS(cq, wc, idx)); 11762306a36Sopenharmony_ci 11862306a36Sopenharmony_ci#endif /* __RVT_TRACE_CQ_H */ 11962306a36Sopenharmony_ci 12062306a36Sopenharmony_ci#undef TRACE_INCLUDE_PATH 12162306a36Sopenharmony_ci#undef TRACE_INCLUDE_FILE 12262306a36Sopenharmony_ci#define TRACE_INCLUDE_PATH . 12362306a36Sopenharmony_ci#define TRACE_INCLUDE_FILE trace_cq 12462306a36Sopenharmony_ci#include <trace/define_trace.h> 125