1*c6ad9482SMike Marciniszyn /* 2*c6ad9482SMike Marciniszyn * Copyright(c) 2016 Intel Corporation. 3*c6ad9482SMike Marciniszyn * 4*c6ad9482SMike Marciniszyn * This file is provided under a dual BSD/GPLv2 license. When using or 5*c6ad9482SMike Marciniszyn * redistributing this file, you may do so under either license. 6*c6ad9482SMike Marciniszyn * 7*c6ad9482SMike Marciniszyn * GPL LICENSE SUMMARY 8*c6ad9482SMike Marciniszyn * 9*c6ad9482SMike Marciniszyn * This program is free software; you can redistribute it and/or modify 10*c6ad9482SMike Marciniszyn * it under the terms of version 2 of the GNU General Public License as 11*c6ad9482SMike Marciniszyn * published by the Free Software Foundation. 12*c6ad9482SMike Marciniszyn * 13*c6ad9482SMike Marciniszyn * This program is distributed in the hope that it will be useful, but 14*c6ad9482SMike Marciniszyn * WITHOUT ANY WARRANTY; without even the implied warranty of 15*c6ad9482SMike Marciniszyn * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16*c6ad9482SMike Marciniszyn * General Public License for more details. 17*c6ad9482SMike Marciniszyn * 18*c6ad9482SMike Marciniszyn * BSD LICENSE 19*c6ad9482SMike Marciniszyn * 20*c6ad9482SMike Marciniszyn * Redistribution and use in source and binary forms, with or without 21*c6ad9482SMike Marciniszyn * modification, are permitted provided that the following conditions 22*c6ad9482SMike Marciniszyn * are met: 23*c6ad9482SMike Marciniszyn * 24*c6ad9482SMike Marciniszyn * - Redistributions of source code must retain the above copyright 25*c6ad9482SMike Marciniszyn * notice, this list of conditions and the following disclaimer. 26*c6ad9482SMike Marciniszyn * - Redistributions in binary form must reproduce the above copyright 27*c6ad9482SMike Marciniszyn * notice, this list of conditions and the following disclaimer in 28*c6ad9482SMike Marciniszyn * the documentation and/or other materials provided with the 29*c6ad9482SMike Marciniszyn * distribution. 30*c6ad9482SMike Marciniszyn * - Neither the name of Intel Corporation nor the names of its 31*c6ad9482SMike Marciniszyn * contributors may be used to endorse or promote products derived 32*c6ad9482SMike Marciniszyn * from this software without specific prior written permission. 33*c6ad9482SMike Marciniszyn * 34*c6ad9482SMike Marciniszyn * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 35*c6ad9482SMike Marciniszyn * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 36*c6ad9482SMike Marciniszyn * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 37*c6ad9482SMike Marciniszyn * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 38*c6ad9482SMike Marciniszyn * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 39*c6ad9482SMike Marciniszyn * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 40*c6ad9482SMike Marciniszyn * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 41*c6ad9482SMike Marciniszyn * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 42*c6ad9482SMike Marciniszyn * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 43*c6ad9482SMike Marciniszyn * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 44*c6ad9482SMike Marciniszyn * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 45*c6ad9482SMike Marciniszyn * 46*c6ad9482SMike Marciniszyn */ 47*c6ad9482SMike Marciniszyn #if !defined(__RVT_TRACE_CQ_H) || defined(TRACE_HEADER_MULTI_READ) 48*c6ad9482SMike Marciniszyn #define __RVT_TRACE_CQ_H 49*c6ad9482SMike Marciniszyn 50*c6ad9482SMike Marciniszyn #include <linux/tracepoint.h> 51*c6ad9482SMike Marciniszyn #include <linux/trace_seq.h> 52*c6ad9482SMike Marciniszyn 53*c6ad9482SMike Marciniszyn #include <rdma/ib_verbs.h> 54*c6ad9482SMike Marciniszyn #include <rdma/rdmavt_cq.h> 55*c6ad9482SMike Marciniszyn 56*c6ad9482SMike Marciniszyn #undef TRACE_SYSTEM 57*c6ad9482SMike Marciniszyn #define TRACE_SYSTEM rvt_cq 58*c6ad9482SMike Marciniszyn 59*c6ad9482SMike Marciniszyn #define wc_opcode_name(opcode) { IB_WC_##opcode, #opcode } 60*c6ad9482SMike Marciniszyn #define show_wc_opcode(opcode) \ 61*c6ad9482SMike Marciniszyn __print_symbolic(opcode, \ 62*c6ad9482SMike Marciniszyn wc_opcode_name(SEND), \ 63*c6ad9482SMike Marciniszyn wc_opcode_name(RDMA_WRITE), \ 64*c6ad9482SMike Marciniszyn wc_opcode_name(RDMA_READ), \ 65*c6ad9482SMike Marciniszyn wc_opcode_name(COMP_SWAP), \ 66*c6ad9482SMike Marciniszyn wc_opcode_name(FETCH_ADD), \ 67*c6ad9482SMike Marciniszyn wc_opcode_name(LSO), \ 68*c6ad9482SMike Marciniszyn wc_opcode_name(LOCAL_INV), \ 69*c6ad9482SMike Marciniszyn wc_opcode_name(REG_MR), \ 70*c6ad9482SMike Marciniszyn wc_opcode_name(MASKED_COMP_SWAP), \ 71*c6ad9482SMike Marciniszyn wc_opcode_name(RECV), \ 72*c6ad9482SMike Marciniszyn wc_opcode_name(RECV_RDMA_WITH_IMM)) 73*c6ad9482SMike Marciniszyn 74*c6ad9482SMike Marciniszyn #define CQ_PRN \ 75*c6ad9482SMike Marciniszyn "[%s] idx %u wr_id %llx status %u opcode %u,%s length %u qpn %x" 76*c6ad9482SMike Marciniszyn 77*c6ad9482SMike Marciniszyn DECLARE_EVENT_CLASS( 78*c6ad9482SMike Marciniszyn rvt_cq_entry_template, 79*c6ad9482SMike Marciniszyn TP_PROTO(struct rvt_cq *cq, struct ib_wc *wc, u32 idx), 80*c6ad9482SMike Marciniszyn TP_ARGS(cq, wc, idx), 81*c6ad9482SMike Marciniszyn TP_STRUCT__entry( 82*c6ad9482SMike Marciniszyn RDI_DEV_ENTRY(cq->rdi) 83*c6ad9482SMike Marciniszyn __field(u64, wr_id) 84*c6ad9482SMike Marciniszyn __field(u32, status) 85*c6ad9482SMike Marciniszyn __field(u32, opcode) 86*c6ad9482SMike Marciniszyn __field(u32, qpn) 87*c6ad9482SMike Marciniszyn __field(u32, length) 88*c6ad9482SMike Marciniszyn __field(u32, idx) 89*c6ad9482SMike Marciniszyn ), 90*c6ad9482SMike Marciniszyn TP_fast_assign( 91*c6ad9482SMike Marciniszyn RDI_DEV_ASSIGN(cq->rdi) 92*c6ad9482SMike Marciniszyn __entry->wr_id = wc->wr_id; 93*c6ad9482SMike Marciniszyn __entry->status = wc->status; 94*c6ad9482SMike Marciniszyn __entry->opcode = wc->opcode; 95*c6ad9482SMike Marciniszyn __entry->length = wc->byte_len; 96*c6ad9482SMike Marciniszyn __entry->qpn = wc->qp->qp_num; 97*c6ad9482SMike Marciniszyn __entry->idx = idx; 98*c6ad9482SMike Marciniszyn ), 99*c6ad9482SMike Marciniszyn TP_printk( 100*c6ad9482SMike Marciniszyn CQ_PRN, 101*c6ad9482SMike Marciniszyn __get_str(dev), 102*c6ad9482SMike Marciniszyn __entry->idx, 103*c6ad9482SMike Marciniszyn __entry->wr_id, 104*c6ad9482SMike Marciniszyn __entry->status, 105*c6ad9482SMike Marciniszyn __entry->opcode, show_wc_opcode(__entry->opcode), 106*c6ad9482SMike Marciniszyn __entry->length, 107*c6ad9482SMike Marciniszyn __entry->qpn 108*c6ad9482SMike Marciniszyn ) 109*c6ad9482SMike Marciniszyn ); 110*c6ad9482SMike Marciniszyn 111*c6ad9482SMike Marciniszyn DEFINE_EVENT( 112*c6ad9482SMike Marciniszyn rvt_cq_entry_template, rvt_cq_enter, 113*c6ad9482SMike Marciniszyn TP_PROTO(struct rvt_cq *cq, struct ib_wc *wc, u32 idx), 114*c6ad9482SMike Marciniszyn TP_ARGS(cq, wc, idx)); 115*c6ad9482SMike Marciniszyn 116*c6ad9482SMike Marciniszyn DEFINE_EVENT( 117*c6ad9482SMike Marciniszyn rvt_cq_entry_template, rvt_cq_poll, 118*c6ad9482SMike Marciniszyn TP_PROTO(struct rvt_cq *cq, struct ib_wc *wc, u32 idx), 119*c6ad9482SMike Marciniszyn TP_ARGS(cq, wc, idx)); 120*c6ad9482SMike Marciniszyn 121*c6ad9482SMike Marciniszyn #endif /* __RVT_TRACE_CQ_H */ 122*c6ad9482SMike Marciniszyn 123*c6ad9482SMike Marciniszyn #undef TRACE_INCLUDE_PATH 124*c6ad9482SMike Marciniszyn #undef TRACE_INCLUDE_FILE 125*c6ad9482SMike Marciniszyn #define TRACE_INCLUDE_PATH . 126*c6ad9482SMike Marciniszyn #define TRACE_INCLUDE_FILE trace_cq 127*c6ad9482SMike Marciniszyn #include <trace/define_trace.h> 128