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