1 /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */ 2 /* 3 * Copyright(c) 2016 - 2018 Intel Corporation. 4 */ 5 #if !defined(__RVT_TRACE_CQ_H) || defined(TRACE_HEADER_MULTI_READ) 6 #define __RVT_TRACE_CQ_H 7 8 #include <linux/tracepoint.h> 9 #include <linux/trace_seq.h> 10 11 #include <rdma/ib_verbs.h> 12 #include <rdma/rdmavt_cq.h> 13 14 #undef TRACE_SYSTEM 15 #define TRACE_SYSTEM rvt_cq 16 17 #define wc_opcode_name(opcode) { IB_WC_##opcode, #opcode } 18 #define show_wc_opcode(opcode) \ 19 __print_symbolic(opcode, \ 20 wc_opcode_name(SEND), \ 21 wc_opcode_name(RDMA_WRITE), \ 22 wc_opcode_name(RDMA_READ), \ 23 wc_opcode_name(COMP_SWAP), \ 24 wc_opcode_name(FETCH_ADD), \ 25 wc_opcode_name(LSO), \ 26 wc_opcode_name(LOCAL_INV), \ 27 wc_opcode_name(REG_MR), \ 28 wc_opcode_name(MASKED_COMP_SWAP), \ 29 wc_opcode_name(RECV), \ 30 wc_opcode_name(RECV_RDMA_WITH_IMM)) 31 32 #define CQ_ATTR_PRINT \ 33 "[%s] user cq %s cqe %u comp_vector %d comp_vector_cpu %d flags %x" 34 35 DECLARE_EVENT_CLASS(rvt_cq_template, 36 TP_PROTO(struct rvt_cq *cq, 37 const struct ib_cq_init_attr *attr), 38 TP_ARGS(cq, attr), 39 TP_STRUCT__entry(RDI_DEV_ENTRY(cq->rdi) 40 __field(struct rvt_mmap_info *, ip) 41 __field(unsigned int, cqe) 42 __field(int, comp_vector) 43 __field(int, comp_vector_cpu) 44 __field(u32, flags) 45 ), 46 TP_fast_assign(RDI_DEV_ASSIGN(cq->rdi); 47 __entry->ip = cq->ip; 48 __entry->cqe = attr->cqe; 49 __entry->comp_vector = attr->comp_vector; 50 __entry->comp_vector_cpu = 51 cq->comp_vector_cpu; 52 __entry->flags = attr->flags; 53 ), 54 TP_printk(CQ_ATTR_PRINT, __get_str(dev), 55 __entry->ip ? "true" : "false", __entry->cqe, 56 __entry->comp_vector, __entry->comp_vector_cpu, 57 __entry->flags 58 ) 59 ); 60 61 DEFINE_EVENT(rvt_cq_template, rvt_create_cq, 62 TP_PROTO(struct rvt_cq *cq, const struct ib_cq_init_attr *attr), 63 TP_ARGS(cq, attr)); 64 65 #define CQ_PRN \ 66 "[%s] idx %u wr_id %llx status %u opcode %u,%s length %u qpn %x flags %x imm %x" 67 68 DECLARE_EVENT_CLASS( 69 rvt_cq_entry_template, 70 TP_PROTO(struct rvt_cq *cq, struct ib_wc *wc, u32 idx), 71 TP_ARGS(cq, wc, idx), 72 TP_STRUCT__entry( 73 RDI_DEV_ENTRY(cq->rdi) 74 __field(u64, wr_id) 75 __field(u32, status) 76 __field(u32, opcode) 77 __field(u32, qpn) 78 __field(u32, length) 79 __field(u32, idx) 80 __field(u32, flags) 81 __field(u32, imm) 82 ), 83 TP_fast_assign( 84 RDI_DEV_ASSIGN(cq->rdi); 85 __entry->wr_id = wc->wr_id; 86 __entry->status = wc->status; 87 __entry->opcode = wc->opcode; 88 __entry->length = wc->byte_len; 89 __entry->qpn = wc->qp->qp_num; 90 __entry->idx = idx; 91 __entry->flags = wc->wc_flags; 92 __entry->imm = be32_to_cpu(wc->ex.imm_data); 93 ), 94 TP_printk( 95 CQ_PRN, 96 __get_str(dev), 97 __entry->idx, 98 __entry->wr_id, 99 __entry->status, 100 __entry->opcode, show_wc_opcode(__entry->opcode), 101 __entry->length, 102 __entry->qpn, 103 __entry->flags, 104 __entry->imm 105 ) 106 ); 107 108 DEFINE_EVENT( 109 rvt_cq_entry_template, rvt_cq_enter, 110 TP_PROTO(struct rvt_cq *cq, struct ib_wc *wc, u32 idx), 111 TP_ARGS(cq, wc, idx)); 112 113 DEFINE_EVENT( 114 rvt_cq_entry_template, rvt_cq_poll, 115 TP_PROTO(struct rvt_cq *cq, struct ib_wc *wc, u32 idx), 116 TP_ARGS(cq, wc, idx)); 117 118 #endif /* __RVT_TRACE_CQ_H */ 119 120 #undef TRACE_INCLUDE_PATH 121 #undef TRACE_INCLUDE_FILE 122 #define TRACE_INCLUDE_PATH . 123 #define TRACE_INCLUDE_FILE trace_cq 124 #include <trace/define_trace.h> 125