1 /* 2 * Copyright(c) 2015, 2016, 2017 Intel Corporation. 3 * 4 * This file is provided under a dual BSD/GPLv2 license. When using or 5 * redistributing this file, you may do so under either license. 6 * 7 * GPL LICENSE SUMMARY 8 * 9 * This program is free software; you can redistribute it and/or modify 10 * it under the terms of version 2 of the GNU General Public License as 11 * published by the Free Software Foundation. 12 * 13 * This program is distributed in the hope that it will be useful, but 14 * WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 * General Public License for more details. 17 * 18 * BSD LICENSE 19 * 20 * Redistribution and use in source and binary forms, with or without 21 * modification, are permitted provided that the following conditions 22 * are met: 23 * 24 * - Redistributions of source code must retain the above copyright 25 * notice, this list of conditions and the following disclaimer. 26 * - Redistributions in binary form must reproduce the above copyright 27 * notice, this list of conditions and the following disclaimer in 28 * the documentation and/or other materials provided with the 29 * distribution. 30 * - Neither the name of Intel Corporation nor the names of its 31 * contributors may be used to endorse or promote products derived 32 * from this software without specific prior written permission. 33 * 34 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 35 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 36 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 37 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 38 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 39 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 40 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 41 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 42 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 43 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 44 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 45 * 46 */ 47 #if !defined(__HFI1_TRACE_RC_H) || defined(TRACE_HEADER_MULTI_READ) 48 #define __HFI1_TRACE_RC_H 49 50 #include <linux/tracepoint.h> 51 #include <linux/trace_seq.h> 52 53 #include "hfi.h" 54 55 #undef TRACE_SYSTEM 56 #define TRACE_SYSTEM hfi1_rc 57 58 DECLARE_EVENT_CLASS(hfi1_rc_template, 59 TP_PROTO(struct rvt_qp *qp, u32 psn), 60 TP_ARGS(qp, psn), 61 TP_STRUCT__entry( 62 DD_DEV_ENTRY(dd_from_ibdev(qp->ibqp.device)) 63 __field(u32, qpn) 64 __field(u32, s_flags) 65 __field(u32, psn) 66 __field(u32, s_psn) 67 __field(u32, s_next_psn) 68 __field(u32, s_sending_psn) 69 __field(u32, s_sending_hpsn) 70 __field(u32, r_psn) 71 ), 72 TP_fast_assign( 73 DD_DEV_ASSIGN(dd_from_ibdev(qp->ibqp.device)) 74 __entry->qpn = qp->ibqp.qp_num; 75 __entry->s_flags = qp->s_flags; 76 __entry->psn = psn; 77 __entry->s_psn = qp->s_psn; 78 __entry->s_next_psn = qp->s_next_psn; 79 __entry->s_sending_psn = qp->s_sending_psn; 80 __entry->s_sending_hpsn = qp->s_sending_hpsn; 81 __entry->r_psn = qp->r_psn; 82 ), 83 TP_printk( 84 "[%s] qpn 0x%x s_flags 0x%x psn 0x%x s_psn 0x%x s_next_psn 0x%x s_sending_psn 0x%x sending_hpsn 0x%x r_psn 0x%x", 85 __get_str(dev), 86 __entry->qpn, 87 __entry->s_flags, 88 __entry->psn, 89 __entry->s_psn, 90 __entry->s_next_psn, 91 __entry->s_sending_psn, 92 __entry->s_sending_hpsn, 93 __entry->r_psn 94 ) 95 ); 96 97 DEFINE_EVENT(hfi1_rc_template, hfi1_sendcomplete, 98 TP_PROTO(struct rvt_qp *qp, u32 psn), 99 TP_ARGS(qp, psn) 100 ); 101 102 DEFINE_EVENT(hfi1_rc_template, hfi1_ack, 103 TP_PROTO(struct rvt_qp *qp, u32 psn), 104 TP_ARGS(qp, psn) 105 ); 106 107 DEFINE_EVENT(hfi1_rc_template, hfi1_rcv_error, 108 TP_PROTO(struct rvt_qp *qp, u32 psn), 109 TP_ARGS(qp, psn) 110 ); 111 112 DEFINE_EVENT(/* event */ 113 hfi1_rc_template, hfi1_rc_completion, 114 TP_PROTO(struct rvt_qp *qp, u32 psn), 115 TP_ARGS(qp, psn) 116 ); 117 118 DECLARE_EVENT_CLASS(/* rc_ack */ 119 hfi1_rc_ack_template, 120 TP_PROTO(struct rvt_qp *qp, u32 aeth, u32 psn, 121 struct rvt_swqe *wqe), 122 TP_ARGS(qp, aeth, psn, wqe), 123 TP_STRUCT__entry(/* entry */ 124 DD_DEV_ENTRY(dd_from_ibdev(qp->ibqp.device)) 125 __field(u32, qpn) 126 __field(u32, aeth) 127 __field(u32, psn) 128 __field(u8, opcode) 129 __field(u32, spsn) 130 __field(u32, lpsn) 131 ), 132 TP_fast_assign(/* assign */ 133 DD_DEV_ASSIGN(dd_from_ibdev(qp->ibqp.device)) 134 __entry->qpn = qp->ibqp.qp_num; 135 __entry->aeth = aeth; 136 __entry->psn = psn; 137 __entry->opcode = wqe->wr.opcode; 138 __entry->spsn = wqe->psn; 139 __entry->lpsn = wqe->lpsn; 140 ), 141 TP_printk(/* print */ 142 "[%s] qpn 0x%x aeth 0x%x psn 0x%x opcode 0x%x spsn 0x%x lpsn 0x%x", 143 __get_str(dev), 144 __entry->qpn, 145 __entry->aeth, 146 __entry->psn, 147 __entry->opcode, 148 __entry->spsn, 149 __entry->lpsn 150 ) 151 ); 152 153 DEFINE_EVENT(/* do_rc_ack */ 154 hfi1_rc_ack_template, hfi1_rc_ack_do, 155 TP_PROTO(struct rvt_qp *qp, u32 aeth, u32 psn, 156 struct rvt_swqe *wqe), 157 TP_ARGS(qp, aeth, psn, wqe) 158 ); 159 160 #endif /* __HFI1_TRACE_RC_H */ 161 162 #undef TRACE_INCLUDE_PATH 163 #undef TRACE_INCLUDE_FILE 164 #define TRACE_INCLUDE_PATH . 165 #define TRACE_INCLUDE_FILE trace_rc 166 #include <trace/define_trace.h> 167