1c6ad9482SMike Marciniszyn /* 25d18ee67SSebastian Sanchez * Copyright(c) 2016 - 2018 Intel Corporation. 3c6ad9482SMike Marciniszyn * 4c6ad9482SMike Marciniszyn * This file is provided under a dual BSD/GPLv2 license. When using or 5c6ad9482SMike Marciniszyn * redistributing this file, you may do so under either license. 6c6ad9482SMike Marciniszyn * 7c6ad9482SMike Marciniszyn * GPL LICENSE SUMMARY 8c6ad9482SMike Marciniszyn * 9c6ad9482SMike Marciniszyn * This program is free software; you can redistribute it and/or modify 10c6ad9482SMike Marciniszyn * it under the terms of version 2 of the GNU General Public License as 11c6ad9482SMike Marciniszyn * published by the Free Software Foundation. 12c6ad9482SMike Marciniszyn * 13c6ad9482SMike Marciniszyn * This program is distributed in the hope that it will be useful, but 14c6ad9482SMike Marciniszyn * WITHOUT ANY WARRANTY; without even the implied warranty of 15c6ad9482SMike Marciniszyn * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16c6ad9482SMike Marciniszyn * General Public License for more details. 17c6ad9482SMike Marciniszyn * 18c6ad9482SMike Marciniszyn * BSD LICENSE 19c6ad9482SMike Marciniszyn * 20c6ad9482SMike Marciniszyn * Redistribution and use in source and binary forms, with or without 21c6ad9482SMike Marciniszyn * modification, are permitted provided that the following conditions 22c6ad9482SMike Marciniszyn * are met: 23c6ad9482SMike Marciniszyn * 24c6ad9482SMike Marciniszyn * - Redistributions of source code must retain the above copyright 25c6ad9482SMike Marciniszyn * notice, this list of conditions and the following disclaimer. 26c6ad9482SMike Marciniszyn * - Redistributions in binary form must reproduce the above copyright 27c6ad9482SMike Marciniszyn * notice, this list of conditions and the following disclaimer in 28c6ad9482SMike Marciniszyn * the documentation and/or other materials provided with the 29c6ad9482SMike Marciniszyn * distribution. 30c6ad9482SMike Marciniszyn * - Neither the name of Intel Corporation nor the names of its 31c6ad9482SMike Marciniszyn * contributors may be used to endorse or promote products derived 32c6ad9482SMike Marciniszyn * from this software without specific prior written permission. 33c6ad9482SMike Marciniszyn * 34c6ad9482SMike Marciniszyn * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 35c6ad9482SMike Marciniszyn * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 36c6ad9482SMike Marciniszyn * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 37c6ad9482SMike Marciniszyn * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 38c6ad9482SMike Marciniszyn * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 39c6ad9482SMike Marciniszyn * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 40c6ad9482SMike Marciniszyn * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 41c6ad9482SMike Marciniszyn * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 42c6ad9482SMike Marciniszyn * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 43c6ad9482SMike Marciniszyn * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 44c6ad9482SMike Marciniszyn * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 45c6ad9482SMike Marciniszyn * 46c6ad9482SMike Marciniszyn */ 47c6ad9482SMike Marciniszyn #if !defined(__RVT_TRACE_CQ_H) || defined(TRACE_HEADER_MULTI_READ) 48c6ad9482SMike Marciniszyn #define __RVT_TRACE_CQ_H 49c6ad9482SMike Marciniszyn 50c6ad9482SMike Marciniszyn #include <linux/tracepoint.h> 51c6ad9482SMike Marciniszyn #include <linux/trace_seq.h> 52c6ad9482SMike Marciniszyn 53c6ad9482SMike Marciniszyn #include <rdma/ib_verbs.h> 54c6ad9482SMike Marciniszyn #include <rdma/rdmavt_cq.h> 55c6ad9482SMike Marciniszyn 56c6ad9482SMike Marciniszyn #undef TRACE_SYSTEM 57c6ad9482SMike Marciniszyn #define TRACE_SYSTEM rvt_cq 58c6ad9482SMike Marciniszyn 59c6ad9482SMike Marciniszyn #define wc_opcode_name(opcode) { IB_WC_##opcode, #opcode } 60c6ad9482SMike Marciniszyn #define show_wc_opcode(opcode) \ 61c6ad9482SMike Marciniszyn __print_symbolic(opcode, \ 62c6ad9482SMike Marciniszyn wc_opcode_name(SEND), \ 63c6ad9482SMike Marciniszyn wc_opcode_name(RDMA_WRITE), \ 64c6ad9482SMike Marciniszyn wc_opcode_name(RDMA_READ), \ 65c6ad9482SMike Marciniszyn wc_opcode_name(COMP_SWAP), \ 66c6ad9482SMike Marciniszyn wc_opcode_name(FETCH_ADD), \ 67c6ad9482SMike Marciniszyn wc_opcode_name(LSO), \ 68c6ad9482SMike Marciniszyn wc_opcode_name(LOCAL_INV), \ 69c6ad9482SMike Marciniszyn wc_opcode_name(REG_MR), \ 70c6ad9482SMike Marciniszyn wc_opcode_name(MASKED_COMP_SWAP), \ 71c6ad9482SMike Marciniszyn wc_opcode_name(RECV), \ 72c6ad9482SMike Marciniszyn wc_opcode_name(RECV_RDMA_WITH_IMM)) 73c6ad9482SMike Marciniszyn 745d18ee67SSebastian Sanchez #define CQ_ATTR_PRINT \ 755d18ee67SSebastian Sanchez "[%s] user cq %s cqe %u comp_vector %d comp_vector_cpu %d flags %x" 765d18ee67SSebastian Sanchez 775d18ee67SSebastian Sanchez DECLARE_EVENT_CLASS(rvt_cq_template, 785d18ee67SSebastian Sanchez TP_PROTO(struct rvt_cq *cq, 795d18ee67SSebastian Sanchez const struct ib_cq_init_attr *attr), 805d18ee67SSebastian Sanchez TP_ARGS(cq, attr), 815d18ee67SSebastian Sanchez TP_STRUCT__entry(RDI_DEV_ENTRY(cq->rdi) 825d18ee67SSebastian Sanchez __field(struct rvt_mmap_info *, ip) 835d18ee67SSebastian Sanchez __field(unsigned int, cqe) 845d18ee67SSebastian Sanchez __field(int, comp_vector) 855d18ee67SSebastian Sanchez __field(int, comp_vector_cpu) 865d18ee67SSebastian Sanchez __field(u32, flags) 875d18ee67SSebastian Sanchez ), 88*78c14b38SJoe Perches TP_fast_assign(RDI_DEV_ASSIGN(cq->rdi); 895d18ee67SSebastian Sanchez __entry->ip = cq->ip; 905d18ee67SSebastian Sanchez __entry->cqe = attr->cqe; 915d18ee67SSebastian Sanchez __entry->comp_vector = attr->comp_vector; 925d18ee67SSebastian Sanchez __entry->comp_vector_cpu = 935d18ee67SSebastian Sanchez cq->comp_vector_cpu; 945d18ee67SSebastian Sanchez __entry->flags = attr->flags; 955d18ee67SSebastian Sanchez ), 965d18ee67SSebastian Sanchez TP_printk(CQ_ATTR_PRINT, __get_str(dev), 975d18ee67SSebastian Sanchez __entry->ip ? "true" : "false", __entry->cqe, 985d18ee67SSebastian Sanchez __entry->comp_vector, __entry->comp_vector_cpu, 995d18ee67SSebastian Sanchez __entry->flags 1005d18ee67SSebastian Sanchez ) 1015d18ee67SSebastian Sanchez ); 1025d18ee67SSebastian Sanchez 1035d18ee67SSebastian Sanchez DEFINE_EVENT(rvt_cq_template, rvt_create_cq, 1045d18ee67SSebastian Sanchez TP_PROTO(struct rvt_cq *cq, const struct ib_cq_init_attr *attr), 1055d18ee67SSebastian Sanchez TP_ARGS(cq, attr)); 1065d18ee67SSebastian Sanchez 107c6ad9482SMike Marciniszyn #define CQ_PRN \ 10814e517e4SMike Marciniszyn "[%s] idx %u wr_id %llx status %u opcode %u,%s length %u qpn %x flags %x imm %x" 109c6ad9482SMike Marciniszyn 110c6ad9482SMike Marciniszyn DECLARE_EVENT_CLASS( 111c6ad9482SMike Marciniszyn rvt_cq_entry_template, 112c6ad9482SMike Marciniszyn TP_PROTO(struct rvt_cq *cq, struct ib_wc *wc, u32 idx), 113c6ad9482SMike Marciniszyn TP_ARGS(cq, wc, idx), 114c6ad9482SMike Marciniszyn TP_STRUCT__entry( 115c6ad9482SMike Marciniszyn RDI_DEV_ENTRY(cq->rdi) 116c6ad9482SMike Marciniszyn __field(u64, wr_id) 117c6ad9482SMike Marciniszyn __field(u32, status) 118c6ad9482SMike Marciniszyn __field(u32, opcode) 119c6ad9482SMike Marciniszyn __field(u32, qpn) 120c6ad9482SMike Marciniszyn __field(u32, length) 121c6ad9482SMike Marciniszyn __field(u32, idx) 12214e517e4SMike Marciniszyn __field(u32, flags) 12314e517e4SMike Marciniszyn __field(u32, imm) 124c6ad9482SMike Marciniszyn ), 125c6ad9482SMike Marciniszyn TP_fast_assign( 126*78c14b38SJoe Perches RDI_DEV_ASSIGN(cq->rdi); 127c6ad9482SMike Marciniszyn __entry->wr_id = wc->wr_id; 128c6ad9482SMike Marciniszyn __entry->status = wc->status; 129c6ad9482SMike Marciniszyn __entry->opcode = wc->opcode; 130c6ad9482SMike Marciniszyn __entry->length = wc->byte_len; 131c6ad9482SMike Marciniszyn __entry->qpn = wc->qp->qp_num; 132c6ad9482SMike Marciniszyn __entry->idx = idx; 13314e517e4SMike Marciniszyn __entry->flags = wc->wc_flags; 13414e517e4SMike Marciniszyn __entry->imm = be32_to_cpu(wc->ex.imm_data); 135c6ad9482SMike Marciniszyn ), 136c6ad9482SMike Marciniszyn TP_printk( 137c6ad9482SMike Marciniszyn CQ_PRN, 138c6ad9482SMike Marciniszyn __get_str(dev), 139c6ad9482SMike Marciniszyn __entry->idx, 140c6ad9482SMike Marciniszyn __entry->wr_id, 141c6ad9482SMike Marciniszyn __entry->status, 142c6ad9482SMike Marciniszyn __entry->opcode, show_wc_opcode(__entry->opcode), 143c6ad9482SMike Marciniszyn __entry->length, 14414e517e4SMike Marciniszyn __entry->qpn, 14514e517e4SMike Marciniszyn __entry->flags, 14614e517e4SMike Marciniszyn __entry->imm 147c6ad9482SMike Marciniszyn ) 148c6ad9482SMike Marciniszyn ); 149c6ad9482SMike Marciniszyn 150c6ad9482SMike Marciniszyn DEFINE_EVENT( 151c6ad9482SMike Marciniszyn rvt_cq_entry_template, rvt_cq_enter, 152c6ad9482SMike Marciniszyn TP_PROTO(struct rvt_cq *cq, struct ib_wc *wc, u32 idx), 153c6ad9482SMike Marciniszyn TP_ARGS(cq, wc, idx)); 154c6ad9482SMike Marciniszyn 155c6ad9482SMike Marciniszyn DEFINE_EVENT( 156c6ad9482SMike Marciniszyn rvt_cq_entry_template, rvt_cq_poll, 157c6ad9482SMike Marciniszyn TP_PROTO(struct rvt_cq *cq, struct ib_wc *wc, u32 idx), 158c6ad9482SMike Marciniszyn TP_ARGS(cq, wc, idx)); 159c6ad9482SMike Marciniszyn 160c6ad9482SMike Marciniszyn #endif /* __RVT_TRACE_CQ_H */ 161c6ad9482SMike Marciniszyn 162c6ad9482SMike Marciniszyn #undef TRACE_INCLUDE_PATH 163c6ad9482SMike Marciniszyn #undef TRACE_INCLUDE_FILE 164c6ad9482SMike Marciniszyn #define TRACE_INCLUDE_PATH . 165c6ad9482SMike Marciniszyn #define TRACE_INCLUDE_FILE trace_cq 166c6ad9482SMike Marciniszyn #include <trace/define_trace.h> 167