xref: /openbmc/linux/drivers/infiniband/sw/rdmavt/trace_cq.h (revision c6ad9482fcb85178c44f0368c39f1324a78b8fc2)
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