1*d164bf64SCai Huoqing /* SPDX-License-Identifier: GPL-2.0 or BSD-3-Clause */ 2c6ad9482SMike Marciniszyn /* 35d18ee67SSebastian Sanchez * Copyright(c) 2016 - 2018 Intel Corporation. 4c6ad9482SMike Marciniszyn */ 5c6ad9482SMike Marciniszyn #if !defined(__RVT_TRACE_CQ_H) || defined(TRACE_HEADER_MULTI_READ) 6c6ad9482SMike Marciniszyn #define __RVT_TRACE_CQ_H 7c6ad9482SMike Marciniszyn 8c6ad9482SMike Marciniszyn #include <linux/tracepoint.h> 9c6ad9482SMike Marciniszyn #include <linux/trace_seq.h> 10c6ad9482SMike Marciniszyn 11c6ad9482SMike Marciniszyn #include <rdma/ib_verbs.h> 12c6ad9482SMike Marciniszyn #include <rdma/rdmavt_cq.h> 13c6ad9482SMike Marciniszyn 14c6ad9482SMike Marciniszyn #undef TRACE_SYSTEM 15c6ad9482SMike Marciniszyn #define TRACE_SYSTEM rvt_cq 16c6ad9482SMike Marciniszyn 17c6ad9482SMike Marciniszyn #define wc_opcode_name(opcode) { IB_WC_##opcode, #opcode } 18c6ad9482SMike Marciniszyn #define show_wc_opcode(opcode) \ 19c6ad9482SMike Marciniszyn __print_symbolic(opcode, \ 20c6ad9482SMike Marciniszyn wc_opcode_name(SEND), \ 21c6ad9482SMike Marciniszyn wc_opcode_name(RDMA_WRITE), \ 22c6ad9482SMike Marciniszyn wc_opcode_name(RDMA_READ), \ 23c6ad9482SMike Marciniszyn wc_opcode_name(COMP_SWAP), \ 24c6ad9482SMike Marciniszyn wc_opcode_name(FETCH_ADD), \ 25c6ad9482SMike Marciniszyn wc_opcode_name(LSO), \ 26c6ad9482SMike Marciniszyn wc_opcode_name(LOCAL_INV), \ 27c6ad9482SMike Marciniszyn wc_opcode_name(REG_MR), \ 28c6ad9482SMike Marciniszyn wc_opcode_name(MASKED_COMP_SWAP), \ 29c6ad9482SMike Marciniszyn wc_opcode_name(RECV), \ 30c6ad9482SMike Marciniszyn wc_opcode_name(RECV_RDMA_WITH_IMM)) 31c6ad9482SMike Marciniszyn 325d18ee67SSebastian Sanchez #define CQ_ATTR_PRINT \ 335d18ee67SSebastian Sanchez "[%s] user cq %s cqe %u comp_vector %d comp_vector_cpu %d flags %x" 345d18ee67SSebastian Sanchez 355d18ee67SSebastian Sanchez DECLARE_EVENT_CLASS(rvt_cq_template, 365d18ee67SSebastian Sanchez TP_PROTO(struct rvt_cq *cq, 375d18ee67SSebastian Sanchez const struct ib_cq_init_attr *attr), 385d18ee67SSebastian Sanchez TP_ARGS(cq, attr), 395d18ee67SSebastian Sanchez TP_STRUCT__entry(RDI_DEV_ENTRY(cq->rdi) 405d18ee67SSebastian Sanchez __field(struct rvt_mmap_info *, ip) 415d18ee67SSebastian Sanchez __field(unsigned int, cqe) 425d18ee67SSebastian Sanchez __field(int, comp_vector) 435d18ee67SSebastian Sanchez __field(int, comp_vector_cpu) 445d18ee67SSebastian Sanchez __field(u32, flags) 455d18ee67SSebastian Sanchez ), 4678c14b38SJoe Perches TP_fast_assign(RDI_DEV_ASSIGN(cq->rdi); 475d18ee67SSebastian Sanchez __entry->ip = cq->ip; 485d18ee67SSebastian Sanchez __entry->cqe = attr->cqe; 495d18ee67SSebastian Sanchez __entry->comp_vector = attr->comp_vector; 505d18ee67SSebastian Sanchez __entry->comp_vector_cpu = 515d18ee67SSebastian Sanchez cq->comp_vector_cpu; 525d18ee67SSebastian Sanchez __entry->flags = attr->flags; 535d18ee67SSebastian Sanchez ), 545d18ee67SSebastian Sanchez TP_printk(CQ_ATTR_PRINT, __get_str(dev), 555d18ee67SSebastian Sanchez __entry->ip ? "true" : "false", __entry->cqe, 565d18ee67SSebastian Sanchez __entry->comp_vector, __entry->comp_vector_cpu, 575d18ee67SSebastian Sanchez __entry->flags 585d18ee67SSebastian Sanchez ) 595d18ee67SSebastian Sanchez ); 605d18ee67SSebastian Sanchez 615d18ee67SSebastian Sanchez DEFINE_EVENT(rvt_cq_template, rvt_create_cq, 625d18ee67SSebastian Sanchez TP_PROTO(struct rvt_cq *cq, const struct ib_cq_init_attr *attr), 635d18ee67SSebastian Sanchez TP_ARGS(cq, attr)); 645d18ee67SSebastian Sanchez 65c6ad9482SMike Marciniszyn #define CQ_PRN \ 6614e517e4SMike Marciniszyn "[%s] idx %u wr_id %llx status %u opcode %u,%s length %u qpn %x flags %x imm %x" 67c6ad9482SMike Marciniszyn 68c6ad9482SMike Marciniszyn DECLARE_EVENT_CLASS( 69c6ad9482SMike Marciniszyn rvt_cq_entry_template, 70c6ad9482SMike Marciniszyn TP_PROTO(struct rvt_cq *cq, struct ib_wc *wc, u32 idx), 71c6ad9482SMike Marciniszyn TP_ARGS(cq, wc, idx), 72c6ad9482SMike Marciniszyn TP_STRUCT__entry( 73c6ad9482SMike Marciniszyn RDI_DEV_ENTRY(cq->rdi) 74c6ad9482SMike Marciniszyn __field(u64, wr_id) 75c6ad9482SMike Marciniszyn __field(u32, status) 76c6ad9482SMike Marciniszyn __field(u32, opcode) 77c6ad9482SMike Marciniszyn __field(u32, qpn) 78c6ad9482SMike Marciniszyn __field(u32, length) 79c6ad9482SMike Marciniszyn __field(u32, idx) 8014e517e4SMike Marciniszyn __field(u32, flags) 8114e517e4SMike Marciniszyn __field(u32, imm) 82c6ad9482SMike Marciniszyn ), 83c6ad9482SMike Marciniszyn TP_fast_assign( 8478c14b38SJoe Perches RDI_DEV_ASSIGN(cq->rdi); 85c6ad9482SMike Marciniszyn __entry->wr_id = wc->wr_id; 86c6ad9482SMike Marciniszyn __entry->status = wc->status; 87c6ad9482SMike Marciniszyn __entry->opcode = wc->opcode; 88c6ad9482SMike Marciniszyn __entry->length = wc->byte_len; 89c6ad9482SMike Marciniszyn __entry->qpn = wc->qp->qp_num; 90c6ad9482SMike Marciniszyn __entry->idx = idx; 9114e517e4SMike Marciniszyn __entry->flags = wc->wc_flags; 9214e517e4SMike Marciniszyn __entry->imm = be32_to_cpu(wc->ex.imm_data); 93c6ad9482SMike Marciniszyn ), 94c6ad9482SMike Marciniszyn TP_printk( 95c6ad9482SMike Marciniszyn CQ_PRN, 96c6ad9482SMike Marciniszyn __get_str(dev), 97c6ad9482SMike Marciniszyn __entry->idx, 98c6ad9482SMike Marciniszyn __entry->wr_id, 99c6ad9482SMike Marciniszyn __entry->status, 100c6ad9482SMike Marciniszyn __entry->opcode, show_wc_opcode(__entry->opcode), 101c6ad9482SMike Marciniszyn __entry->length, 10214e517e4SMike Marciniszyn __entry->qpn, 10314e517e4SMike Marciniszyn __entry->flags, 10414e517e4SMike Marciniszyn __entry->imm 105c6ad9482SMike Marciniszyn ) 106c6ad9482SMike Marciniszyn ); 107c6ad9482SMike Marciniszyn 108c6ad9482SMike Marciniszyn DEFINE_EVENT( 109c6ad9482SMike Marciniszyn rvt_cq_entry_template, rvt_cq_enter, 110c6ad9482SMike Marciniszyn TP_PROTO(struct rvt_cq *cq, struct ib_wc *wc, u32 idx), 111c6ad9482SMike Marciniszyn TP_ARGS(cq, wc, idx)); 112c6ad9482SMike Marciniszyn 113c6ad9482SMike Marciniszyn DEFINE_EVENT( 114c6ad9482SMike Marciniszyn rvt_cq_entry_template, rvt_cq_poll, 115c6ad9482SMike Marciniszyn TP_PROTO(struct rvt_cq *cq, struct ib_wc *wc, u32 idx), 116c6ad9482SMike Marciniszyn TP_ARGS(cq, wc, idx)); 117c6ad9482SMike Marciniszyn 118c6ad9482SMike Marciniszyn #endif /* __RVT_TRACE_CQ_H */ 119c6ad9482SMike Marciniszyn 120c6ad9482SMike Marciniszyn #undef TRACE_INCLUDE_PATH 121c6ad9482SMike Marciniszyn #undef TRACE_INCLUDE_FILE 122c6ad9482SMike Marciniszyn #define TRACE_INCLUDE_PATH . 123c6ad9482SMike Marciniszyn #define TRACE_INCLUDE_FILE trace_cq 124c6ad9482SMike Marciniszyn #include <trace/define_trace.h> 125