xref: /OK3568_Linux_fs/kernel/include/trace/events/ib_mad.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */
2*4882a593Smuzhiyun 
3*4882a593Smuzhiyun /*
4*4882a593Smuzhiyun  * Copyright (c) 2018 Intel Corporation.  All rights reserved.
5*4882a593Smuzhiyun  */
6*4882a593Smuzhiyun 
7*4882a593Smuzhiyun #undef TRACE_SYSTEM
8*4882a593Smuzhiyun #define TRACE_SYSTEM ib_mad
9*4882a593Smuzhiyun 
10*4882a593Smuzhiyun #if !defined(_TRACE_IB_MAD_H) || defined(TRACE_HEADER_MULTI_READ)
11*4882a593Smuzhiyun #define _TRACE_IB_MAD_H
12*4882a593Smuzhiyun 
13*4882a593Smuzhiyun #include <linux/tracepoint.h>
14*4882a593Smuzhiyun #include <rdma/ib_mad.h>
15*4882a593Smuzhiyun 
16*4882a593Smuzhiyun #ifdef CONFIG_TRACEPOINTS
17*4882a593Smuzhiyun struct trace_event_raw_ib_mad_send_template;
18*4882a593Smuzhiyun static void create_mad_addr_info(struct ib_mad_send_wr_private *mad_send_wr,
19*4882a593Smuzhiyun 			  struct ib_mad_qp_info *qp_info,
20*4882a593Smuzhiyun 			  struct trace_event_raw_ib_mad_send_template *entry);
21*4882a593Smuzhiyun #endif
22*4882a593Smuzhiyun 
23*4882a593Smuzhiyun DECLARE_EVENT_CLASS(ib_mad_send_template,
24*4882a593Smuzhiyun 	TP_PROTO(struct ib_mad_send_wr_private *wr,
25*4882a593Smuzhiyun 		 struct ib_mad_qp_info *qp_info),
26*4882a593Smuzhiyun 	TP_ARGS(wr, qp_info),
27*4882a593Smuzhiyun 
28*4882a593Smuzhiyun 	TP_STRUCT__entry(
29*4882a593Smuzhiyun 		__field(u8,             base_version)
30*4882a593Smuzhiyun 		__field(u8,             mgmt_class)
31*4882a593Smuzhiyun 		__field(u8,             class_version)
32*4882a593Smuzhiyun 		__field(u8,             port_num)
33*4882a593Smuzhiyun 		__field(u32,            qp_num)
34*4882a593Smuzhiyun 		__field(u8,             method)
35*4882a593Smuzhiyun 		__field(u8,             sl)
36*4882a593Smuzhiyun 		__field(u16,            attr_id)
37*4882a593Smuzhiyun 		__field(u32,            attr_mod)
38*4882a593Smuzhiyun 		__field(u64,            wrtid)
39*4882a593Smuzhiyun 		__field(u64,            tid)
40*4882a593Smuzhiyun 		__field(u16,            status)
41*4882a593Smuzhiyun 		__field(u16,            class_specific)
42*4882a593Smuzhiyun 		__field(u32,            length)
43*4882a593Smuzhiyun 		__field(u32,            dlid)
44*4882a593Smuzhiyun 		__field(u32,            rqpn)
45*4882a593Smuzhiyun 		__field(u32,            rqkey)
46*4882a593Smuzhiyun 		__field(u32,            dev_index)
47*4882a593Smuzhiyun 		__field(void *,         agent_priv)
48*4882a593Smuzhiyun 		__field(unsigned long,  timeout)
49*4882a593Smuzhiyun 		__field(int,            retries_left)
50*4882a593Smuzhiyun 		__field(int,            max_retries)
51*4882a593Smuzhiyun 		__field(int,            retry)
52*4882a593Smuzhiyun 		__field(u16,            pkey)
53*4882a593Smuzhiyun 	),
54*4882a593Smuzhiyun 
55*4882a593Smuzhiyun 	TP_fast_assign(
56*4882a593Smuzhiyun 		__entry->dev_index = wr->mad_agent_priv->agent.device->index;
57*4882a593Smuzhiyun 		__entry->port_num = wr->mad_agent_priv->agent.port_num;
58*4882a593Smuzhiyun 		__entry->qp_num = wr->mad_agent_priv->qp_info->qp->qp_num;
59*4882a593Smuzhiyun 		__entry->agent_priv = wr->mad_agent_priv;
60*4882a593Smuzhiyun 		__entry->wrtid = wr->tid;
61*4882a593Smuzhiyun 		__entry->max_retries = wr->max_retries;
62*4882a593Smuzhiyun 		__entry->retries_left = wr->retries_left;
63*4882a593Smuzhiyun 		__entry->retry = wr->retry;
64*4882a593Smuzhiyun 		__entry->timeout = wr->timeout;
65*4882a593Smuzhiyun 		__entry->length = wr->send_buf.hdr_len +
66*4882a593Smuzhiyun 				  wr->send_buf.data_len;
67*4882a593Smuzhiyun 		__entry->base_version =
68*4882a593Smuzhiyun 			((struct ib_mad_hdr *)wr->send_buf.mad)->base_version;
69*4882a593Smuzhiyun 		__entry->mgmt_class =
70*4882a593Smuzhiyun 			((struct ib_mad_hdr *)wr->send_buf.mad)->mgmt_class;
71*4882a593Smuzhiyun 		__entry->class_version =
72*4882a593Smuzhiyun 			((struct ib_mad_hdr *)wr->send_buf.mad)->class_version;
73*4882a593Smuzhiyun 		__entry->method =
74*4882a593Smuzhiyun 			((struct ib_mad_hdr *)wr->send_buf.mad)->method;
75*4882a593Smuzhiyun 		__entry->status =
76*4882a593Smuzhiyun 			((struct ib_mad_hdr *)wr->send_buf.mad)->status;
77*4882a593Smuzhiyun 		__entry->class_specific =
78*4882a593Smuzhiyun 			((struct ib_mad_hdr *)wr->send_buf.mad)->class_specific;
79*4882a593Smuzhiyun 		__entry->tid = ((struct ib_mad_hdr *)wr->send_buf.mad)->tid;
80*4882a593Smuzhiyun 		__entry->attr_id =
81*4882a593Smuzhiyun 			((struct ib_mad_hdr *)wr->send_buf.mad)->attr_id;
82*4882a593Smuzhiyun 		__entry->attr_mod =
83*4882a593Smuzhiyun 			((struct ib_mad_hdr *)wr->send_buf.mad)->attr_mod;
84*4882a593Smuzhiyun 		create_mad_addr_info(wr, qp_info, __entry);
85*4882a593Smuzhiyun 	),
86*4882a593Smuzhiyun 
87*4882a593Smuzhiyun 	TP_printk("%d:%d QP%d agent %p: " \
88*4882a593Smuzhiyun 		  "wrtid 0x%llx; %d/%d retries(%d); timeout %lu length %d : " \
89*4882a593Smuzhiyun 		  "hdr : base_ver 0x%x class 0x%x class_ver 0x%x " \
90*4882a593Smuzhiyun 		  "method 0x%x status 0x%x class_specific 0x%x tid 0x%llx " \
91*4882a593Smuzhiyun 		  "attr_id 0x%x attr_mod 0x%x  => dlid 0x%08x sl %d "\
92*4882a593Smuzhiyun 		  "pkey 0x%x rpqn 0x%x rqpkey 0x%x",
93*4882a593Smuzhiyun 		__entry->dev_index, __entry->port_num, __entry->qp_num,
94*4882a593Smuzhiyun 		__entry->agent_priv, be64_to_cpu(__entry->wrtid),
95*4882a593Smuzhiyun 		__entry->retries_left, __entry->max_retries,
96*4882a593Smuzhiyun 		__entry->retry, __entry->timeout, __entry->length,
97*4882a593Smuzhiyun 		__entry->base_version, __entry->mgmt_class,
98*4882a593Smuzhiyun 		__entry->class_version,
99*4882a593Smuzhiyun 		__entry->method, be16_to_cpu(__entry->status),
100*4882a593Smuzhiyun 		be16_to_cpu(__entry->class_specific),
101*4882a593Smuzhiyun 		be64_to_cpu(__entry->tid), be16_to_cpu(__entry->attr_id),
102*4882a593Smuzhiyun 		be32_to_cpu(__entry->attr_mod),
103*4882a593Smuzhiyun 		be32_to_cpu(__entry->dlid), __entry->sl, __entry->pkey,
104*4882a593Smuzhiyun 		__entry->rqpn, __entry->rqkey
105*4882a593Smuzhiyun 	)
106*4882a593Smuzhiyun );
107*4882a593Smuzhiyun 
108*4882a593Smuzhiyun DEFINE_EVENT(ib_mad_send_template, ib_mad_error_handler,
109*4882a593Smuzhiyun 	TP_PROTO(struct ib_mad_send_wr_private *wr,
110*4882a593Smuzhiyun 		 struct ib_mad_qp_info *qp_info),
111*4882a593Smuzhiyun 	TP_ARGS(wr, qp_info));
112*4882a593Smuzhiyun DEFINE_EVENT(ib_mad_send_template, ib_mad_ib_send_mad,
113*4882a593Smuzhiyun 	TP_PROTO(struct ib_mad_send_wr_private *wr,
114*4882a593Smuzhiyun 		 struct ib_mad_qp_info *qp_info),
115*4882a593Smuzhiyun 	TP_ARGS(wr, qp_info));
116*4882a593Smuzhiyun DEFINE_EVENT(ib_mad_send_template, ib_mad_send_done_resend,
117*4882a593Smuzhiyun 	TP_PROTO(struct ib_mad_send_wr_private *wr,
118*4882a593Smuzhiyun 		 struct ib_mad_qp_info *qp_info),
119*4882a593Smuzhiyun 	TP_ARGS(wr, qp_info));
120*4882a593Smuzhiyun 
121*4882a593Smuzhiyun TRACE_EVENT(ib_mad_send_done_handler,
122*4882a593Smuzhiyun 	TP_PROTO(struct ib_mad_send_wr_private *wr, struct ib_wc *wc),
123*4882a593Smuzhiyun 	TP_ARGS(wr, wc),
124*4882a593Smuzhiyun 
125*4882a593Smuzhiyun 	TP_STRUCT__entry(
126*4882a593Smuzhiyun 		__field(u8,             port_num)
127*4882a593Smuzhiyun 		__field(u8,             base_version)
128*4882a593Smuzhiyun 		__field(u8,             mgmt_class)
129*4882a593Smuzhiyun 		__field(u8,             class_version)
130*4882a593Smuzhiyun 		__field(u32,            qp_num)
131*4882a593Smuzhiyun 		__field(u64,            wrtid)
132*4882a593Smuzhiyun 		__field(u16,            status)
133*4882a593Smuzhiyun 		__field(u16,            wc_status)
134*4882a593Smuzhiyun 		__field(u32,            length)
135*4882a593Smuzhiyun 		__field(void *,         agent_priv)
136*4882a593Smuzhiyun 		__field(unsigned long,  timeout)
137*4882a593Smuzhiyun 		__field(u32,            dev_index)
138*4882a593Smuzhiyun 		__field(int,            retries_left)
139*4882a593Smuzhiyun 		__field(int,            max_retries)
140*4882a593Smuzhiyun 		__field(int,            retry)
141*4882a593Smuzhiyun 		__field(u8,             method)
142*4882a593Smuzhiyun 	),
143*4882a593Smuzhiyun 
144*4882a593Smuzhiyun 	TP_fast_assign(
145*4882a593Smuzhiyun 		__entry->dev_index = wr->mad_agent_priv->agent.device->index;
146*4882a593Smuzhiyun 		__entry->port_num = wr->mad_agent_priv->agent.port_num;
147*4882a593Smuzhiyun 		__entry->qp_num = wr->mad_agent_priv->qp_info->qp->qp_num;
148*4882a593Smuzhiyun 		__entry->agent_priv = wr->mad_agent_priv;
149*4882a593Smuzhiyun 		__entry->wrtid = wr->tid;
150*4882a593Smuzhiyun 		__entry->max_retries = wr->max_retries;
151*4882a593Smuzhiyun 		__entry->retries_left = wr->retries_left;
152*4882a593Smuzhiyun 		__entry->retry = wr->retry;
153*4882a593Smuzhiyun 		__entry->timeout = wr->timeout;
154*4882a593Smuzhiyun 		__entry->base_version =
155*4882a593Smuzhiyun 			((struct ib_mad_hdr *)wr->send_buf.mad)->base_version;
156*4882a593Smuzhiyun 		__entry->mgmt_class =
157*4882a593Smuzhiyun 			((struct ib_mad_hdr *)wr->send_buf.mad)->mgmt_class;
158*4882a593Smuzhiyun 		__entry->class_version =
159*4882a593Smuzhiyun 			((struct ib_mad_hdr *)wr->send_buf.mad)->class_version;
160*4882a593Smuzhiyun 		__entry->method =
161*4882a593Smuzhiyun 			((struct ib_mad_hdr *)wr->send_buf.mad)->method;
162*4882a593Smuzhiyun 		__entry->status =
163*4882a593Smuzhiyun 			((struct ib_mad_hdr *)wr->send_buf.mad)->status;
164*4882a593Smuzhiyun 		__entry->wc_status = wc->status;
165*4882a593Smuzhiyun 		__entry->length = wc->byte_len;
166*4882a593Smuzhiyun 	),
167*4882a593Smuzhiyun 
168*4882a593Smuzhiyun 	TP_printk("%d:%d QP%d : SEND WC Status %d : agent %p: " \
169*4882a593Smuzhiyun 		  "wrtid 0x%llx %d/%d retries(%d) timeout %lu length %d: " \
170*4882a593Smuzhiyun 		  "hdr : base_ver 0x%x class 0x%x class_ver 0x%x " \
171*4882a593Smuzhiyun 		  "method 0x%x status 0x%x",
172*4882a593Smuzhiyun 		__entry->dev_index, __entry->port_num, __entry->qp_num,
173*4882a593Smuzhiyun 		__entry->wc_status,
174*4882a593Smuzhiyun 		__entry->agent_priv, be64_to_cpu(__entry->wrtid),
175*4882a593Smuzhiyun 		__entry->retries_left, __entry->max_retries,
176*4882a593Smuzhiyun 		__entry->retry, __entry->timeout,
177*4882a593Smuzhiyun 		__entry->length,
178*4882a593Smuzhiyun 		__entry->base_version, __entry->mgmt_class,
179*4882a593Smuzhiyun 		__entry->class_version, __entry->method,
180*4882a593Smuzhiyun 		be16_to_cpu(__entry->status)
181*4882a593Smuzhiyun 	)
182*4882a593Smuzhiyun );
183*4882a593Smuzhiyun 
184*4882a593Smuzhiyun TRACE_EVENT(ib_mad_recv_done_handler,
185*4882a593Smuzhiyun 	TP_PROTO(struct ib_mad_qp_info *qp_info, struct ib_wc *wc,
186*4882a593Smuzhiyun 		 struct ib_mad_hdr *mad_hdr),
187*4882a593Smuzhiyun 	TP_ARGS(qp_info, wc, mad_hdr),
188*4882a593Smuzhiyun 
189*4882a593Smuzhiyun 	TP_STRUCT__entry(
190*4882a593Smuzhiyun 		__field(u8,             base_version)
191*4882a593Smuzhiyun 		__field(u8,             mgmt_class)
192*4882a593Smuzhiyun 		__field(u8,             class_version)
193*4882a593Smuzhiyun 		__field(u8,             port_num)
194*4882a593Smuzhiyun 		__field(u32,            qp_num)
195*4882a593Smuzhiyun 		__field(u16,            status)
196*4882a593Smuzhiyun 		__field(u16,            class_specific)
197*4882a593Smuzhiyun 		__field(u32,            length)
198*4882a593Smuzhiyun 		__field(u64,            tid)
199*4882a593Smuzhiyun 		__field(u8,             method)
200*4882a593Smuzhiyun 		__field(u8,             sl)
201*4882a593Smuzhiyun 		__field(u16,            attr_id)
202*4882a593Smuzhiyun 		__field(u32,            attr_mod)
203*4882a593Smuzhiyun 		__field(u16,            src_qp)
204*4882a593Smuzhiyun 		__field(u16,            wc_status)
205*4882a593Smuzhiyun 		__field(u32,            slid)
206*4882a593Smuzhiyun 		__field(u32,            dev_index)
207*4882a593Smuzhiyun 		__field(u16,            pkey)
208*4882a593Smuzhiyun 	),
209*4882a593Smuzhiyun 
210*4882a593Smuzhiyun 	TP_fast_assign(
211*4882a593Smuzhiyun 		__entry->dev_index = qp_info->port_priv->device->index;
212*4882a593Smuzhiyun 		__entry->port_num = qp_info->port_priv->port_num;
213*4882a593Smuzhiyun 		__entry->qp_num = qp_info->qp->qp_num;
214*4882a593Smuzhiyun 		__entry->length = wc->byte_len;
215*4882a593Smuzhiyun 		__entry->base_version = mad_hdr->base_version;
216*4882a593Smuzhiyun 		__entry->mgmt_class = mad_hdr->mgmt_class;
217*4882a593Smuzhiyun 		__entry->class_version = mad_hdr->class_version;
218*4882a593Smuzhiyun 		__entry->method = mad_hdr->method;
219*4882a593Smuzhiyun 		__entry->status = mad_hdr->status;
220*4882a593Smuzhiyun 		__entry->class_specific = mad_hdr->class_specific;
221*4882a593Smuzhiyun 		__entry->tid = mad_hdr->tid;
222*4882a593Smuzhiyun 		__entry->attr_id = mad_hdr->attr_id;
223*4882a593Smuzhiyun 		__entry->attr_mod = mad_hdr->attr_mod;
224*4882a593Smuzhiyun 		__entry->slid = wc->slid;
225*4882a593Smuzhiyun 		__entry->src_qp = wc->src_qp;
226*4882a593Smuzhiyun 		__entry->sl = wc->sl;
227*4882a593Smuzhiyun 		ib_query_pkey(qp_info->port_priv->device,
228*4882a593Smuzhiyun 			      qp_info->port_priv->port_num,
229*4882a593Smuzhiyun 			      wc->pkey_index, &__entry->pkey);
230*4882a593Smuzhiyun 		__entry->wc_status = wc->status;
231*4882a593Smuzhiyun 	),
232*4882a593Smuzhiyun 
233*4882a593Smuzhiyun 	TP_printk("%d:%d QP%d : RECV WC Status %d : length %d : hdr : " \
234*4882a593Smuzhiyun 		  "base_ver 0x%02x class 0x%02x class_ver 0x%02x " \
235*4882a593Smuzhiyun 		  "method 0x%02x status 0x%04x class_specific 0x%04x " \
236*4882a593Smuzhiyun 		  "tid 0x%016llx attr_id 0x%04x attr_mod 0x%08x " \
237*4882a593Smuzhiyun 		  "slid 0x%08x src QP%d, sl %d pkey 0x%04x",
238*4882a593Smuzhiyun 		__entry->dev_index, __entry->port_num, __entry->qp_num,
239*4882a593Smuzhiyun 		__entry->wc_status,
240*4882a593Smuzhiyun 		__entry->length,
241*4882a593Smuzhiyun 		__entry->base_version, __entry->mgmt_class,
242*4882a593Smuzhiyun 		__entry->class_version, __entry->method,
243*4882a593Smuzhiyun 		be16_to_cpu(__entry->status),
244*4882a593Smuzhiyun 		be16_to_cpu(__entry->class_specific),
245*4882a593Smuzhiyun 		be64_to_cpu(__entry->tid), be16_to_cpu(__entry->attr_id),
246*4882a593Smuzhiyun 		be32_to_cpu(__entry->attr_mod),
247*4882a593Smuzhiyun 		__entry->slid, __entry->src_qp, __entry->sl, __entry->pkey
248*4882a593Smuzhiyun 	)
249*4882a593Smuzhiyun );
250*4882a593Smuzhiyun 
251*4882a593Smuzhiyun DECLARE_EVENT_CLASS(ib_mad_agent_template,
252*4882a593Smuzhiyun 	TP_PROTO(struct ib_mad_agent_private *agent),
253*4882a593Smuzhiyun 	TP_ARGS(agent),
254*4882a593Smuzhiyun 
255*4882a593Smuzhiyun 	TP_STRUCT__entry(
256*4882a593Smuzhiyun 		__field(u32,            dev_index)
257*4882a593Smuzhiyun 		__field(u32,            hi_tid)
258*4882a593Smuzhiyun 		__field(u8,             port_num)
259*4882a593Smuzhiyun 		__field(u8,             mgmt_class)
260*4882a593Smuzhiyun 		__field(u8,             mgmt_class_version)
261*4882a593Smuzhiyun 	),
262*4882a593Smuzhiyun 
263*4882a593Smuzhiyun 	TP_fast_assign(
264*4882a593Smuzhiyun 		__entry->dev_index = agent->agent.device->index;
265*4882a593Smuzhiyun 		__entry->port_num = agent->agent.port_num;
266*4882a593Smuzhiyun 		__entry->hi_tid = agent->agent.hi_tid;
267*4882a593Smuzhiyun 
268*4882a593Smuzhiyun 		if (agent->reg_req) {
269*4882a593Smuzhiyun 			__entry->mgmt_class = agent->reg_req->mgmt_class;
270*4882a593Smuzhiyun 			__entry->mgmt_class_version =
271*4882a593Smuzhiyun 				agent->reg_req->mgmt_class_version;
272*4882a593Smuzhiyun 		} else {
273*4882a593Smuzhiyun 			__entry->mgmt_class = 0;
274*4882a593Smuzhiyun 			__entry->mgmt_class_version = 0;
275*4882a593Smuzhiyun 		}
276*4882a593Smuzhiyun 	),
277*4882a593Smuzhiyun 
278*4882a593Smuzhiyun 	TP_printk("%d:%d mad agent : hi_tid 0x%08x class 0x%02x class_ver 0x%02x",
279*4882a593Smuzhiyun 		__entry->dev_index, __entry->port_num,
280*4882a593Smuzhiyun 		__entry->hi_tid, __entry->mgmt_class,
281*4882a593Smuzhiyun 		__entry->mgmt_class_version
282*4882a593Smuzhiyun 	)
283*4882a593Smuzhiyun );
284*4882a593Smuzhiyun DEFINE_EVENT(ib_mad_agent_template, ib_mad_recv_done_agent,
285*4882a593Smuzhiyun 	TP_PROTO(struct ib_mad_agent_private *agent),
286*4882a593Smuzhiyun 	TP_ARGS(agent));
287*4882a593Smuzhiyun DEFINE_EVENT(ib_mad_agent_template, ib_mad_send_done_agent,
288*4882a593Smuzhiyun 	TP_PROTO(struct ib_mad_agent_private *agent),
289*4882a593Smuzhiyun 	TP_ARGS(agent));
290*4882a593Smuzhiyun DEFINE_EVENT(ib_mad_agent_template, ib_mad_create_agent,
291*4882a593Smuzhiyun 	TP_PROTO(struct ib_mad_agent_private *agent),
292*4882a593Smuzhiyun 	TP_ARGS(agent));
293*4882a593Smuzhiyun DEFINE_EVENT(ib_mad_agent_template, ib_mad_unregister_agent,
294*4882a593Smuzhiyun 	TP_PROTO(struct ib_mad_agent_private *agent),
295*4882a593Smuzhiyun 	TP_ARGS(agent));
296*4882a593Smuzhiyun 
297*4882a593Smuzhiyun 
298*4882a593Smuzhiyun 
299*4882a593Smuzhiyun DECLARE_EVENT_CLASS(ib_mad_opa_smi_template,
300*4882a593Smuzhiyun 	TP_PROTO(struct opa_smp *smp),
301*4882a593Smuzhiyun 	TP_ARGS(smp),
302*4882a593Smuzhiyun 
303*4882a593Smuzhiyun 	TP_STRUCT__entry(
304*4882a593Smuzhiyun 		__field(u64,            mkey)
305*4882a593Smuzhiyun 		__field(u32,            dr_slid)
306*4882a593Smuzhiyun 		__field(u32,            dr_dlid)
307*4882a593Smuzhiyun 		__field(u8,             hop_ptr)
308*4882a593Smuzhiyun 		__field(u8,             hop_cnt)
309*4882a593Smuzhiyun 		__array(u8,             initial_path, OPA_SMP_MAX_PATH_HOPS)
310*4882a593Smuzhiyun 		__array(u8,             return_path, OPA_SMP_MAX_PATH_HOPS)
311*4882a593Smuzhiyun 	),
312*4882a593Smuzhiyun 
313*4882a593Smuzhiyun 	TP_fast_assign(
314*4882a593Smuzhiyun 		__entry->hop_ptr = smp->hop_ptr;
315*4882a593Smuzhiyun 		__entry->hop_cnt = smp->hop_cnt;
316*4882a593Smuzhiyun 		__entry->mkey = smp->mkey;
317*4882a593Smuzhiyun 		__entry->dr_slid = smp->route.dr.dr_slid;
318*4882a593Smuzhiyun 		__entry->dr_dlid = smp->route.dr.dr_dlid;
319*4882a593Smuzhiyun 		memcpy(__entry->initial_path, smp->route.dr.initial_path,
320*4882a593Smuzhiyun 			OPA_SMP_MAX_PATH_HOPS);
321*4882a593Smuzhiyun 		memcpy(__entry->return_path, smp->route.dr.return_path,
322*4882a593Smuzhiyun 			OPA_SMP_MAX_PATH_HOPS);
323*4882a593Smuzhiyun 	),
324*4882a593Smuzhiyun 
325*4882a593Smuzhiyun 	TP_printk("OPA SMP: hop_ptr %d hop_cnt %d " \
326*4882a593Smuzhiyun 		  "mkey 0x%016llx dr_slid 0x%08x dr_dlid 0x%08x " \
327*4882a593Smuzhiyun 		  "initial_path %*ph return_path %*ph ",
328*4882a593Smuzhiyun 		__entry->hop_ptr, __entry->hop_cnt,
329*4882a593Smuzhiyun 		be64_to_cpu(__entry->mkey), be32_to_cpu(__entry->dr_slid),
330*4882a593Smuzhiyun 		be32_to_cpu(__entry->dr_dlid),
331*4882a593Smuzhiyun 		OPA_SMP_MAX_PATH_HOPS, __entry->initial_path,
332*4882a593Smuzhiyun 		OPA_SMP_MAX_PATH_HOPS, __entry->return_path
333*4882a593Smuzhiyun 	)
334*4882a593Smuzhiyun );
335*4882a593Smuzhiyun 
336*4882a593Smuzhiyun DEFINE_EVENT(ib_mad_opa_smi_template, ib_mad_handle_opa_smi,
337*4882a593Smuzhiyun 	TP_PROTO(struct opa_smp *smp),
338*4882a593Smuzhiyun 	TP_ARGS(smp));
339*4882a593Smuzhiyun DEFINE_EVENT(ib_mad_opa_smi_template, ib_mad_handle_out_opa_smi,
340*4882a593Smuzhiyun 	TP_PROTO(struct opa_smp *smp),
341*4882a593Smuzhiyun 	TP_ARGS(smp));
342*4882a593Smuzhiyun 
343*4882a593Smuzhiyun 
344*4882a593Smuzhiyun DECLARE_EVENT_CLASS(ib_mad_opa_ib_template,
345*4882a593Smuzhiyun 	TP_PROTO(struct ib_smp *smp),
346*4882a593Smuzhiyun 	TP_ARGS(smp),
347*4882a593Smuzhiyun 
348*4882a593Smuzhiyun 	TP_STRUCT__entry(
349*4882a593Smuzhiyun 		__field(u64,            mkey)
350*4882a593Smuzhiyun 		__field(u32,            dr_slid)
351*4882a593Smuzhiyun 		__field(u32,            dr_dlid)
352*4882a593Smuzhiyun 		__field(u8,             hop_ptr)
353*4882a593Smuzhiyun 		__field(u8,             hop_cnt)
354*4882a593Smuzhiyun 		__array(u8,             initial_path, IB_SMP_MAX_PATH_HOPS)
355*4882a593Smuzhiyun 		__array(u8,             return_path, IB_SMP_MAX_PATH_HOPS)
356*4882a593Smuzhiyun 	),
357*4882a593Smuzhiyun 
358*4882a593Smuzhiyun 	TP_fast_assign(
359*4882a593Smuzhiyun 		__entry->hop_ptr = smp->hop_ptr;
360*4882a593Smuzhiyun 		__entry->hop_cnt = smp->hop_cnt;
361*4882a593Smuzhiyun 		__entry->mkey = smp->mkey;
362*4882a593Smuzhiyun 		__entry->dr_slid = smp->dr_slid;
363*4882a593Smuzhiyun 		__entry->dr_dlid = smp->dr_dlid;
364*4882a593Smuzhiyun 		memcpy(__entry->initial_path, smp->initial_path,
365*4882a593Smuzhiyun 			IB_SMP_MAX_PATH_HOPS);
366*4882a593Smuzhiyun 		memcpy(__entry->return_path, smp->return_path,
367*4882a593Smuzhiyun 			IB_SMP_MAX_PATH_HOPS);
368*4882a593Smuzhiyun 	),
369*4882a593Smuzhiyun 
370*4882a593Smuzhiyun 	TP_printk("OPA SMP: hop_ptr %d hop_cnt %d " \
371*4882a593Smuzhiyun 		  "mkey 0x%016llx dr_slid 0x%04x dr_dlid 0x%04x " \
372*4882a593Smuzhiyun 		  "initial_path %*ph return_path %*ph ",
373*4882a593Smuzhiyun 		__entry->hop_ptr, __entry->hop_cnt,
374*4882a593Smuzhiyun 		be64_to_cpu(__entry->mkey), be16_to_cpu(__entry->dr_slid),
375*4882a593Smuzhiyun 		be16_to_cpu(__entry->dr_dlid),
376*4882a593Smuzhiyun 		IB_SMP_MAX_PATH_HOPS, __entry->initial_path,
377*4882a593Smuzhiyun 		IB_SMP_MAX_PATH_HOPS, __entry->return_path
378*4882a593Smuzhiyun 	)
379*4882a593Smuzhiyun );
380*4882a593Smuzhiyun 
381*4882a593Smuzhiyun DEFINE_EVENT(ib_mad_opa_ib_template, ib_mad_handle_ib_smi,
382*4882a593Smuzhiyun 	TP_PROTO(struct ib_smp *smp),
383*4882a593Smuzhiyun 	TP_ARGS(smp));
384*4882a593Smuzhiyun DEFINE_EVENT(ib_mad_opa_ib_template, ib_mad_handle_out_ib_smi,
385*4882a593Smuzhiyun 	TP_PROTO(struct ib_smp *smp),
386*4882a593Smuzhiyun 	TP_ARGS(smp));
387*4882a593Smuzhiyun 
388*4882a593Smuzhiyun #endif /* _TRACE_IB_MAD_H */
389*4882a593Smuzhiyun 
390*4882a593Smuzhiyun #include <trace/define_trace.h>
391