xref: /openbmc/linux/include/trace/events/ib_mad.h (revision 4d60cad5db7fb450e64532afbbaba85af235fa5d)
1*4d60cad5SIra Weiny /* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */
2*4d60cad5SIra Weiny 
3*4d60cad5SIra Weiny /*
4*4d60cad5SIra Weiny  * Copyright (c) 2018 Intel Corporation.  All rights reserved.
5*4d60cad5SIra Weiny  */
6*4d60cad5SIra Weiny 
7*4d60cad5SIra Weiny #undef TRACE_SYSTEM
8*4d60cad5SIra Weiny #define TRACE_SYSTEM ib_mad
9*4d60cad5SIra Weiny 
10*4d60cad5SIra Weiny #if !defined(_TRACE_IB_MAD_H) || defined(TRACE_HEADER_MULTI_READ)
11*4d60cad5SIra Weiny #define _TRACE_IB_MAD_H
12*4d60cad5SIra Weiny 
13*4d60cad5SIra Weiny #include <linux/tracepoint.h>
14*4d60cad5SIra Weiny #include <rdma/ib_mad.h>
15*4d60cad5SIra Weiny 
16*4d60cad5SIra Weiny #ifdef CONFIG_TRACEPOINTS
17*4d60cad5SIra Weiny struct trace_event_raw_ib_mad_send_template;
18*4d60cad5SIra Weiny static void create_mad_addr_info(struct ib_mad_send_wr_private *mad_send_wr,
19*4d60cad5SIra Weiny 			  struct ib_mad_qp_info *qp_info,
20*4d60cad5SIra Weiny 			  struct trace_event_raw_ib_mad_send_template *entry);
21*4d60cad5SIra Weiny #endif
22*4d60cad5SIra Weiny 
23*4d60cad5SIra Weiny DECLARE_EVENT_CLASS(ib_mad_send_template,
24*4d60cad5SIra Weiny 	TP_PROTO(struct ib_mad_send_wr_private *wr,
25*4d60cad5SIra Weiny 		 struct ib_mad_qp_info *qp_info),
26*4d60cad5SIra Weiny 	TP_ARGS(wr, qp_info),
27*4d60cad5SIra Weiny 
28*4d60cad5SIra Weiny 	TP_STRUCT__entry(
29*4d60cad5SIra Weiny 		__field(u8,             base_version)
30*4d60cad5SIra Weiny 		__field(u8,             mgmt_class)
31*4d60cad5SIra Weiny 		__field(u8,             class_version)
32*4d60cad5SIra Weiny 		__field(u8,             port_num)
33*4d60cad5SIra Weiny 		__field(u32,            qp_num)
34*4d60cad5SIra Weiny 		__field(u8,             method)
35*4d60cad5SIra Weiny 		__field(u8,             sl)
36*4d60cad5SIra Weiny 		__field(u16,            attr_id)
37*4d60cad5SIra Weiny 		__field(u32,            attr_mod)
38*4d60cad5SIra Weiny 		__field(u64,            wrtid)
39*4d60cad5SIra Weiny 		__field(u64,            tid)
40*4d60cad5SIra Weiny 		__field(u16,            status)
41*4d60cad5SIra Weiny 		__field(u16,            class_specific)
42*4d60cad5SIra Weiny 		__field(u32,            length)
43*4d60cad5SIra Weiny 		__field(u32,            dlid)
44*4d60cad5SIra Weiny 		__field(u32,            rqpn)
45*4d60cad5SIra Weiny 		__field(u32,            rqkey)
46*4d60cad5SIra Weiny 		__field(u32,            dev_index)
47*4d60cad5SIra Weiny 		__field(void *,         agent_priv)
48*4d60cad5SIra Weiny 		__field(unsigned long,  timeout)
49*4d60cad5SIra Weiny 		__field(int,            retries_left)
50*4d60cad5SIra Weiny 		__field(int,            max_retries)
51*4d60cad5SIra Weiny 		__field(int,            retry)
52*4d60cad5SIra Weiny 		__field(u16,            pkey)
53*4d60cad5SIra Weiny 	),
54*4d60cad5SIra Weiny 
55*4d60cad5SIra Weiny 	TP_fast_assign(
56*4d60cad5SIra Weiny 		__entry->dev_index = wr->mad_agent_priv->agent.device->index;
57*4d60cad5SIra Weiny 		__entry->port_num = wr->mad_agent_priv->agent.port_num;
58*4d60cad5SIra Weiny 		__entry->qp_num = wr->mad_agent_priv->qp_info->qp->qp_num;
59*4d60cad5SIra Weiny 		__entry->agent_priv = wr->mad_agent_priv;
60*4d60cad5SIra Weiny 		__entry->wrtid = wr->tid;
61*4d60cad5SIra Weiny 		__entry->max_retries = wr->max_retries;
62*4d60cad5SIra Weiny 		__entry->retries_left = wr->retries_left;
63*4d60cad5SIra Weiny 		__entry->retry = wr->retry;
64*4d60cad5SIra Weiny 		__entry->timeout = wr->timeout;
65*4d60cad5SIra Weiny 		__entry->length = wr->send_buf.hdr_len +
66*4d60cad5SIra Weiny 				  wr->send_buf.data_len;
67*4d60cad5SIra Weiny 		__entry->base_version =
68*4d60cad5SIra Weiny 			((struct ib_mad_hdr *)wr->send_buf.mad)->base_version;
69*4d60cad5SIra Weiny 		__entry->mgmt_class =
70*4d60cad5SIra Weiny 			((struct ib_mad_hdr *)wr->send_buf.mad)->mgmt_class;
71*4d60cad5SIra Weiny 		__entry->class_version =
72*4d60cad5SIra Weiny 			((struct ib_mad_hdr *)wr->send_buf.mad)->class_version;
73*4d60cad5SIra Weiny 		__entry->method =
74*4d60cad5SIra Weiny 			((struct ib_mad_hdr *)wr->send_buf.mad)->method;
75*4d60cad5SIra Weiny 		__entry->status =
76*4d60cad5SIra Weiny 			((struct ib_mad_hdr *)wr->send_buf.mad)->status;
77*4d60cad5SIra Weiny 		__entry->class_specific =
78*4d60cad5SIra Weiny 			((struct ib_mad_hdr *)wr->send_buf.mad)->class_specific;
79*4d60cad5SIra Weiny 		__entry->tid = ((struct ib_mad_hdr *)wr->send_buf.mad)->tid;
80*4d60cad5SIra Weiny 		__entry->attr_id =
81*4d60cad5SIra Weiny 			((struct ib_mad_hdr *)wr->send_buf.mad)->attr_id;
82*4d60cad5SIra Weiny 		__entry->attr_mod =
83*4d60cad5SIra Weiny 			((struct ib_mad_hdr *)wr->send_buf.mad)->attr_mod;
84*4d60cad5SIra Weiny 		create_mad_addr_info(wr, qp_info, __entry);
85*4d60cad5SIra Weiny 	),
86*4d60cad5SIra Weiny 
87*4d60cad5SIra Weiny 	TP_printk("%d:%d QP%d agent %p: " \
88*4d60cad5SIra Weiny 		  "wrtid 0x%llx; %d/%d retries(%d); timeout %lu length %d : " \
89*4d60cad5SIra Weiny 		  "hdr : base_ver 0x%x class 0x%x class_ver 0x%x " \
90*4d60cad5SIra Weiny 		  "method 0x%x status 0x%x class_specific 0x%x tid 0x%llx " \
91*4d60cad5SIra Weiny 		  "attr_id 0x%x attr_mod 0x%x  => dlid 0x%08x sl %d "\
92*4d60cad5SIra Weiny 		  "pkey 0x%x rpqn 0x%x rqpkey 0x%x",
93*4d60cad5SIra Weiny 		__entry->dev_index, __entry->port_num, __entry->qp_num,
94*4d60cad5SIra Weiny 		__entry->agent_priv, be64_to_cpu(__entry->wrtid),
95*4d60cad5SIra Weiny 		__entry->retries_left, __entry->max_retries,
96*4d60cad5SIra Weiny 		__entry->retry, __entry->timeout, __entry->length,
97*4d60cad5SIra Weiny 		__entry->base_version, __entry->mgmt_class,
98*4d60cad5SIra Weiny 		__entry->class_version,
99*4d60cad5SIra Weiny 		__entry->method, be16_to_cpu(__entry->status),
100*4d60cad5SIra Weiny 		be16_to_cpu(__entry->class_specific),
101*4d60cad5SIra Weiny 		be64_to_cpu(__entry->tid), be16_to_cpu(__entry->attr_id),
102*4d60cad5SIra Weiny 		be32_to_cpu(__entry->attr_mod),
103*4d60cad5SIra Weiny 		be32_to_cpu(__entry->dlid), __entry->sl, __entry->pkey,
104*4d60cad5SIra Weiny 		__entry->rqpn, __entry->rqkey
105*4d60cad5SIra Weiny 	)
106*4d60cad5SIra Weiny );
107*4d60cad5SIra Weiny 
108*4d60cad5SIra Weiny DEFINE_EVENT(ib_mad_send_template, ib_mad_error_handler,
109*4d60cad5SIra Weiny 	TP_PROTO(struct ib_mad_send_wr_private *wr,
110*4d60cad5SIra Weiny 		 struct ib_mad_qp_info *qp_info),
111*4d60cad5SIra Weiny 	TP_ARGS(wr, qp_info));
112*4d60cad5SIra Weiny DEFINE_EVENT(ib_mad_send_template, ib_mad_ib_send_mad,
113*4d60cad5SIra Weiny 	TP_PROTO(struct ib_mad_send_wr_private *wr,
114*4d60cad5SIra Weiny 		 struct ib_mad_qp_info *qp_info),
115*4d60cad5SIra Weiny 	TP_ARGS(wr, qp_info));
116*4d60cad5SIra Weiny DEFINE_EVENT(ib_mad_send_template, ib_mad_send_done_resend,
117*4d60cad5SIra Weiny 	TP_PROTO(struct ib_mad_send_wr_private *wr,
118*4d60cad5SIra Weiny 		 struct ib_mad_qp_info *qp_info),
119*4d60cad5SIra Weiny 	TP_ARGS(wr, qp_info));
120*4d60cad5SIra Weiny 
121*4d60cad5SIra Weiny TRACE_EVENT(ib_mad_send_done_handler,
122*4d60cad5SIra Weiny 	TP_PROTO(struct ib_mad_send_wr_private *wr, struct ib_wc *wc),
123*4d60cad5SIra Weiny 	TP_ARGS(wr, wc),
124*4d60cad5SIra Weiny 
125*4d60cad5SIra Weiny 	TP_STRUCT__entry(
126*4d60cad5SIra Weiny 		__field(u8,             port_num)
127*4d60cad5SIra Weiny 		__field(u8,             base_version)
128*4d60cad5SIra Weiny 		__field(u8,             mgmt_class)
129*4d60cad5SIra Weiny 		__field(u8,             class_version)
130*4d60cad5SIra Weiny 		__field(u32,            qp_num)
131*4d60cad5SIra Weiny 		__field(u64,            wrtid)
132*4d60cad5SIra Weiny 		__field(u16,            status)
133*4d60cad5SIra Weiny 		__field(u16,            wc_status)
134*4d60cad5SIra Weiny 		__field(u32,            length)
135*4d60cad5SIra Weiny 		__field(void *,         agent_priv)
136*4d60cad5SIra Weiny 		__field(unsigned long,  timeout)
137*4d60cad5SIra Weiny 		__field(u32,            dev_index)
138*4d60cad5SIra Weiny 		__field(int,            retries_left)
139*4d60cad5SIra Weiny 		__field(int,            max_retries)
140*4d60cad5SIra Weiny 		__field(int,            retry)
141*4d60cad5SIra Weiny 		__field(u8,             method)
142*4d60cad5SIra Weiny 	),
143*4d60cad5SIra Weiny 
144*4d60cad5SIra Weiny 	TP_fast_assign(
145*4d60cad5SIra Weiny 		__entry->dev_index = wr->mad_agent_priv->agent.device->index;
146*4d60cad5SIra Weiny 		__entry->port_num = wr->mad_agent_priv->agent.port_num;
147*4d60cad5SIra Weiny 		__entry->qp_num = wr->mad_agent_priv->qp_info->qp->qp_num;
148*4d60cad5SIra Weiny 		__entry->agent_priv = wr->mad_agent_priv;
149*4d60cad5SIra Weiny 		__entry->wrtid = wr->tid;
150*4d60cad5SIra Weiny 		__entry->max_retries = wr->max_retries;
151*4d60cad5SIra Weiny 		__entry->retries_left = wr->retries_left;
152*4d60cad5SIra Weiny 		__entry->retry = wr->retry;
153*4d60cad5SIra Weiny 		__entry->timeout = wr->timeout;
154*4d60cad5SIra Weiny 		__entry->base_version =
155*4d60cad5SIra Weiny 			((struct ib_mad_hdr *)wr->send_buf.mad)->base_version;
156*4d60cad5SIra Weiny 		__entry->mgmt_class =
157*4d60cad5SIra Weiny 			((struct ib_mad_hdr *)wr->send_buf.mad)->mgmt_class;
158*4d60cad5SIra Weiny 		__entry->class_version =
159*4d60cad5SIra Weiny 			((struct ib_mad_hdr *)wr->send_buf.mad)->class_version;
160*4d60cad5SIra Weiny 		__entry->method =
161*4d60cad5SIra Weiny 			((struct ib_mad_hdr *)wr->send_buf.mad)->method;
162*4d60cad5SIra Weiny 		__entry->status =
163*4d60cad5SIra Weiny 			((struct ib_mad_hdr *)wr->send_buf.mad)->status;
164*4d60cad5SIra Weiny 		__entry->wc_status = wc->status;
165*4d60cad5SIra Weiny 		__entry->length = wc->byte_len;
166*4d60cad5SIra Weiny 	),
167*4d60cad5SIra Weiny 
168*4d60cad5SIra Weiny 	TP_printk("%d:%d QP%d : SEND WC Status %d : agent %p: " \
169*4d60cad5SIra Weiny 		  "wrtid 0x%llx %d/%d retries(%d) timeout %lu length %d: " \
170*4d60cad5SIra Weiny 		  "hdr : base_ver 0x%x class 0x%x class_ver 0x%x " \
171*4d60cad5SIra Weiny 		  "method 0x%x status 0x%x",
172*4d60cad5SIra Weiny 		__entry->dev_index, __entry->port_num, __entry->qp_num,
173*4d60cad5SIra Weiny 		__entry->wc_status,
174*4d60cad5SIra Weiny 		__entry->agent_priv, be64_to_cpu(__entry->wrtid),
175*4d60cad5SIra Weiny 		__entry->retries_left, __entry->max_retries,
176*4d60cad5SIra Weiny 		__entry->retry, __entry->timeout,
177*4d60cad5SIra Weiny 		__entry->length,
178*4d60cad5SIra Weiny 		__entry->base_version, __entry->mgmt_class,
179*4d60cad5SIra Weiny 		__entry->class_version, __entry->method,
180*4d60cad5SIra Weiny 		be16_to_cpu(__entry->status)
181*4d60cad5SIra Weiny 	)
182*4d60cad5SIra Weiny );
183*4d60cad5SIra Weiny 
184*4d60cad5SIra Weiny 
185*4d60cad5SIra Weiny #endif /* _TRACE_IB_MAD_H */
186*4d60cad5SIra Weiny 
187*4d60cad5SIra Weiny #include <trace/define_trace.h>
188