xref: /OK3568_Linux_fs/kernel/include/trace/events/rxrpc.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */
2*4882a593Smuzhiyun /* AF_RXRPC tracepoints
3*4882a593Smuzhiyun  *
4*4882a593Smuzhiyun  * Copyright (C) 2016 Red Hat, Inc. All Rights Reserved.
5*4882a593Smuzhiyun  * Written by David Howells (dhowells@redhat.com)
6*4882a593Smuzhiyun  */
7*4882a593Smuzhiyun #undef TRACE_SYSTEM
8*4882a593Smuzhiyun #define TRACE_SYSTEM rxrpc
9*4882a593Smuzhiyun 
10*4882a593Smuzhiyun #if !defined(_TRACE_RXRPC_H) || defined(TRACE_HEADER_MULTI_READ)
11*4882a593Smuzhiyun #define _TRACE_RXRPC_H
12*4882a593Smuzhiyun 
13*4882a593Smuzhiyun #include <linux/tracepoint.h>
14*4882a593Smuzhiyun #include <linux/errqueue.h>
15*4882a593Smuzhiyun 
16*4882a593Smuzhiyun /*
17*4882a593Smuzhiyun  * Define enums for tracing information.
18*4882a593Smuzhiyun  *
19*4882a593Smuzhiyun  * These should all be kept sorted, making it easier to match the string
20*4882a593Smuzhiyun  * mapping tables further on.
21*4882a593Smuzhiyun  */
22*4882a593Smuzhiyun #ifndef __RXRPC_DECLARE_TRACE_ENUMS_ONCE_ONLY
23*4882a593Smuzhiyun #define __RXRPC_DECLARE_TRACE_ENUMS_ONCE_ONLY
24*4882a593Smuzhiyun 
25*4882a593Smuzhiyun enum rxrpc_skb_trace {
26*4882a593Smuzhiyun 	rxrpc_skb_cleaned,
27*4882a593Smuzhiyun 	rxrpc_skb_freed,
28*4882a593Smuzhiyun 	rxrpc_skb_got,
29*4882a593Smuzhiyun 	rxrpc_skb_lost,
30*4882a593Smuzhiyun 	rxrpc_skb_new,
31*4882a593Smuzhiyun 	rxrpc_skb_purged,
32*4882a593Smuzhiyun 	rxrpc_skb_received,
33*4882a593Smuzhiyun 	rxrpc_skb_rotated,
34*4882a593Smuzhiyun 	rxrpc_skb_seen,
35*4882a593Smuzhiyun 	rxrpc_skb_unshared,
36*4882a593Smuzhiyun 	rxrpc_skb_unshared_nomem,
37*4882a593Smuzhiyun };
38*4882a593Smuzhiyun 
39*4882a593Smuzhiyun enum rxrpc_local_trace {
40*4882a593Smuzhiyun 	rxrpc_local_got,
41*4882a593Smuzhiyun 	rxrpc_local_new,
42*4882a593Smuzhiyun 	rxrpc_local_processing,
43*4882a593Smuzhiyun 	rxrpc_local_put,
44*4882a593Smuzhiyun 	rxrpc_local_queued,
45*4882a593Smuzhiyun };
46*4882a593Smuzhiyun 
47*4882a593Smuzhiyun enum rxrpc_peer_trace {
48*4882a593Smuzhiyun 	rxrpc_peer_got,
49*4882a593Smuzhiyun 	rxrpc_peer_new,
50*4882a593Smuzhiyun 	rxrpc_peer_processing,
51*4882a593Smuzhiyun 	rxrpc_peer_put,
52*4882a593Smuzhiyun };
53*4882a593Smuzhiyun 
54*4882a593Smuzhiyun enum rxrpc_conn_trace {
55*4882a593Smuzhiyun 	rxrpc_conn_got,
56*4882a593Smuzhiyun 	rxrpc_conn_new_client,
57*4882a593Smuzhiyun 	rxrpc_conn_new_service,
58*4882a593Smuzhiyun 	rxrpc_conn_put_client,
59*4882a593Smuzhiyun 	rxrpc_conn_put_service,
60*4882a593Smuzhiyun 	rxrpc_conn_queued,
61*4882a593Smuzhiyun 	rxrpc_conn_reap_service,
62*4882a593Smuzhiyun 	rxrpc_conn_seen,
63*4882a593Smuzhiyun };
64*4882a593Smuzhiyun 
65*4882a593Smuzhiyun enum rxrpc_client_trace {
66*4882a593Smuzhiyun 	rxrpc_client_activate_chans,
67*4882a593Smuzhiyun 	rxrpc_client_alloc,
68*4882a593Smuzhiyun 	rxrpc_client_chan_activate,
69*4882a593Smuzhiyun 	rxrpc_client_chan_disconnect,
70*4882a593Smuzhiyun 	rxrpc_client_chan_pass,
71*4882a593Smuzhiyun 	rxrpc_client_chan_wait_failed,
72*4882a593Smuzhiyun 	rxrpc_client_cleanup,
73*4882a593Smuzhiyun 	rxrpc_client_discard,
74*4882a593Smuzhiyun 	rxrpc_client_duplicate,
75*4882a593Smuzhiyun 	rxrpc_client_exposed,
76*4882a593Smuzhiyun 	rxrpc_client_replace,
77*4882a593Smuzhiyun 	rxrpc_client_to_active,
78*4882a593Smuzhiyun 	rxrpc_client_to_idle,
79*4882a593Smuzhiyun };
80*4882a593Smuzhiyun 
81*4882a593Smuzhiyun enum rxrpc_call_trace {
82*4882a593Smuzhiyun 	rxrpc_call_connected,
83*4882a593Smuzhiyun 	rxrpc_call_error,
84*4882a593Smuzhiyun 	rxrpc_call_got,
85*4882a593Smuzhiyun 	rxrpc_call_got_kernel,
86*4882a593Smuzhiyun 	rxrpc_call_got_timer,
87*4882a593Smuzhiyun 	rxrpc_call_got_userid,
88*4882a593Smuzhiyun 	rxrpc_call_new_client,
89*4882a593Smuzhiyun 	rxrpc_call_new_service,
90*4882a593Smuzhiyun 	rxrpc_call_put,
91*4882a593Smuzhiyun 	rxrpc_call_put_kernel,
92*4882a593Smuzhiyun 	rxrpc_call_put_noqueue,
93*4882a593Smuzhiyun 	rxrpc_call_put_notimer,
94*4882a593Smuzhiyun 	rxrpc_call_put_timer,
95*4882a593Smuzhiyun 	rxrpc_call_put_userid,
96*4882a593Smuzhiyun 	rxrpc_call_queued,
97*4882a593Smuzhiyun 	rxrpc_call_queued_ref,
98*4882a593Smuzhiyun 	rxrpc_call_release,
99*4882a593Smuzhiyun 	rxrpc_call_seen,
100*4882a593Smuzhiyun };
101*4882a593Smuzhiyun 
102*4882a593Smuzhiyun enum rxrpc_transmit_trace {
103*4882a593Smuzhiyun 	rxrpc_transmit_await_reply,
104*4882a593Smuzhiyun 	rxrpc_transmit_end,
105*4882a593Smuzhiyun 	rxrpc_transmit_queue,
106*4882a593Smuzhiyun 	rxrpc_transmit_queue_last,
107*4882a593Smuzhiyun 	rxrpc_transmit_rotate,
108*4882a593Smuzhiyun 	rxrpc_transmit_rotate_last,
109*4882a593Smuzhiyun 	rxrpc_transmit_wait,
110*4882a593Smuzhiyun };
111*4882a593Smuzhiyun 
112*4882a593Smuzhiyun enum rxrpc_receive_trace {
113*4882a593Smuzhiyun 	rxrpc_receive_end,
114*4882a593Smuzhiyun 	rxrpc_receive_front,
115*4882a593Smuzhiyun 	rxrpc_receive_incoming,
116*4882a593Smuzhiyun 	rxrpc_receive_queue,
117*4882a593Smuzhiyun 	rxrpc_receive_queue_last,
118*4882a593Smuzhiyun 	rxrpc_receive_rotate,
119*4882a593Smuzhiyun };
120*4882a593Smuzhiyun 
121*4882a593Smuzhiyun enum rxrpc_recvmsg_trace {
122*4882a593Smuzhiyun 	rxrpc_recvmsg_cont,
123*4882a593Smuzhiyun 	rxrpc_recvmsg_data_return,
124*4882a593Smuzhiyun 	rxrpc_recvmsg_dequeue,
125*4882a593Smuzhiyun 	rxrpc_recvmsg_enter,
126*4882a593Smuzhiyun 	rxrpc_recvmsg_full,
127*4882a593Smuzhiyun 	rxrpc_recvmsg_hole,
128*4882a593Smuzhiyun 	rxrpc_recvmsg_next,
129*4882a593Smuzhiyun 	rxrpc_recvmsg_requeue,
130*4882a593Smuzhiyun 	rxrpc_recvmsg_return,
131*4882a593Smuzhiyun 	rxrpc_recvmsg_terminal,
132*4882a593Smuzhiyun 	rxrpc_recvmsg_to_be_accepted,
133*4882a593Smuzhiyun 	rxrpc_recvmsg_wait,
134*4882a593Smuzhiyun };
135*4882a593Smuzhiyun 
136*4882a593Smuzhiyun enum rxrpc_rtt_tx_trace {
137*4882a593Smuzhiyun 	rxrpc_rtt_tx_cancel,
138*4882a593Smuzhiyun 	rxrpc_rtt_tx_data,
139*4882a593Smuzhiyun 	rxrpc_rtt_tx_no_slot,
140*4882a593Smuzhiyun 	rxrpc_rtt_tx_ping,
141*4882a593Smuzhiyun };
142*4882a593Smuzhiyun 
143*4882a593Smuzhiyun enum rxrpc_rtt_rx_trace {
144*4882a593Smuzhiyun 	rxrpc_rtt_rx_cancel,
145*4882a593Smuzhiyun 	rxrpc_rtt_rx_lost,
146*4882a593Smuzhiyun 	rxrpc_rtt_rx_obsolete,
147*4882a593Smuzhiyun 	rxrpc_rtt_rx_ping_response,
148*4882a593Smuzhiyun 	rxrpc_rtt_rx_requested_ack,
149*4882a593Smuzhiyun };
150*4882a593Smuzhiyun 
151*4882a593Smuzhiyun enum rxrpc_timer_trace {
152*4882a593Smuzhiyun 	rxrpc_timer_begin,
153*4882a593Smuzhiyun 	rxrpc_timer_exp_ack,
154*4882a593Smuzhiyun 	rxrpc_timer_exp_hard,
155*4882a593Smuzhiyun 	rxrpc_timer_exp_idle,
156*4882a593Smuzhiyun 	rxrpc_timer_exp_keepalive,
157*4882a593Smuzhiyun 	rxrpc_timer_exp_lost_ack,
158*4882a593Smuzhiyun 	rxrpc_timer_exp_normal,
159*4882a593Smuzhiyun 	rxrpc_timer_exp_ping,
160*4882a593Smuzhiyun 	rxrpc_timer_exp_resend,
161*4882a593Smuzhiyun 	rxrpc_timer_expired,
162*4882a593Smuzhiyun 	rxrpc_timer_init_for_reply,
163*4882a593Smuzhiyun 	rxrpc_timer_init_for_send_reply,
164*4882a593Smuzhiyun 	rxrpc_timer_restart,
165*4882a593Smuzhiyun 	rxrpc_timer_set_for_ack,
166*4882a593Smuzhiyun 	rxrpc_timer_set_for_hard,
167*4882a593Smuzhiyun 	rxrpc_timer_set_for_idle,
168*4882a593Smuzhiyun 	rxrpc_timer_set_for_keepalive,
169*4882a593Smuzhiyun 	rxrpc_timer_set_for_lost_ack,
170*4882a593Smuzhiyun 	rxrpc_timer_set_for_normal,
171*4882a593Smuzhiyun 	rxrpc_timer_set_for_ping,
172*4882a593Smuzhiyun 	rxrpc_timer_set_for_resend,
173*4882a593Smuzhiyun 	rxrpc_timer_set_for_send,
174*4882a593Smuzhiyun };
175*4882a593Smuzhiyun 
176*4882a593Smuzhiyun enum rxrpc_propose_ack_trace {
177*4882a593Smuzhiyun 	rxrpc_propose_ack_client_tx_end,
178*4882a593Smuzhiyun 	rxrpc_propose_ack_input_data,
179*4882a593Smuzhiyun 	rxrpc_propose_ack_ping_for_check_life,
180*4882a593Smuzhiyun 	rxrpc_propose_ack_ping_for_keepalive,
181*4882a593Smuzhiyun 	rxrpc_propose_ack_ping_for_lost_ack,
182*4882a593Smuzhiyun 	rxrpc_propose_ack_ping_for_lost_reply,
183*4882a593Smuzhiyun 	rxrpc_propose_ack_ping_for_params,
184*4882a593Smuzhiyun 	rxrpc_propose_ack_processing_op,
185*4882a593Smuzhiyun 	rxrpc_propose_ack_respond_to_ack,
186*4882a593Smuzhiyun 	rxrpc_propose_ack_respond_to_ping,
187*4882a593Smuzhiyun 	rxrpc_propose_ack_retry_tx,
188*4882a593Smuzhiyun 	rxrpc_propose_ack_rotate_rx,
189*4882a593Smuzhiyun 	rxrpc_propose_ack_terminal_ack,
190*4882a593Smuzhiyun };
191*4882a593Smuzhiyun 
192*4882a593Smuzhiyun enum rxrpc_propose_ack_outcome {
193*4882a593Smuzhiyun 	rxrpc_propose_ack_subsume,
194*4882a593Smuzhiyun 	rxrpc_propose_ack_update,
195*4882a593Smuzhiyun 	rxrpc_propose_ack_use,
196*4882a593Smuzhiyun };
197*4882a593Smuzhiyun 
198*4882a593Smuzhiyun enum rxrpc_congest_change {
199*4882a593Smuzhiyun 	rxrpc_cong_begin_retransmission,
200*4882a593Smuzhiyun 	rxrpc_cong_cleared_nacks,
201*4882a593Smuzhiyun 	rxrpc_cong_new_low_nack,
202*4882a593Smuzhiyun 	rxrpc_cong_no_change,
203*4882a593Smuzhiyun 	rxrpc_cong_progress,
204*4882a593Smuzhiyun 	rxrpc_cong_retransmit_again,
205*4882a593Smuzhiyun 	rxrpc_cong_rtt_window_end,
206*4882a593Smuzhiyun 	rxrpc_cong_saw_nack,
207*4882a593Smuzhiyun };
208*4882a593Smuzhiyun 
209*4882a593Smuzhiyun enum rxrpc_tx_point {
210*4882a593Smuzhiyun 	rxrpc_tx_point_call_abort,
211*4882a593Smuzhiyun 	rxrpc_tx_point_call_ack,
212*4882a593Smuzhiyun 	rxrpc_tx_point_call_data_frag,
213*4882a593Smuzhiyun 	rxrpc_tx_point_call_data_nofrag,
214*4882a593Smuzhiyun 	rxrpc_tx_point_call_final_resend,
215*4882a593Smuzhiyun 	rxrpc_tx_point_conn_abort,
216*4882a593Smuzhiyun 	rxrpc_tx_point_rxkad_challenge,
217*4882a593Smuzhiyun 	rxrpc_tx_point_rxkad_response,
218*4882a593Smuzhiyun 	rxrpc_tx_point_reject,
219*4882a593Smuzhiyun 	rxrpc_tx_point_version_keepalive,
220*4882a593Smuzhiyun 	rxrpc_tx_point_version_reply,
221*4882a593Smuzhiyun };
222*4882a593Smuzhiyun 
223*4882a593Smuzhiyun #endif /* end __RXRPC_DECLARE_TRACE_ENUMS_ONCE_ONLY */
224*4882a593Smuzhiyun 
225*4882a593Smuzhiyun /*
226*4882a593Smuzhiyun  * Declare tracing information enums and their string mappings for display.
227*4882a593Smuzhiyun  */
228*4882a593Smuzhiyun #define rxrpc_skb_traces \
229*4882a593Smuzhiyun 	EM(rxrpc_skb_cleaned,			"CLN") \
230*4882a593Smuzhiyun 	EM(rxrpc_skb_freed,			"FRE") \
231*4882a593Smuzhiyun 	EM(rxrpc_skb_got,			"GOT") \
232*4882a593Smuzhiyun 	EM(rxrpc_skb_lost,			"*L*") \
233*4882a593Smuzhiyun 	EM(rxrpc_skb_new,			"NEW") \
234*4882a593Smuzhiyun 	EM(rxrpc_skb_purged,			"PUR") \
235*4882a593Smuzhiyun 	EM(rxrpc_skb_received,			"RCV") \
236*4882a593Smuzhiyun 	EM(rxrpc_skb_rotated,			"ROT") \
237*4882a593Smuzhiyun 	EM(rxrpc_skb_seen,			"SEE") \
238*4882a593Smuzhiyun 	EM(rxrpc_skb_unshared,			"UNS") \
239*4882a593Smuzhiyun 	E_(rxrpc_skb_unshared_nomem,		"US0")
240*4882a593Smuzhiyun 
241*4882a593Smuzhiyun #define rxrpc_local_traces \
242*4882a593Smuzhiyun 	EM(rxrpc_local_got,			"GOT") \
243*4882a593Smuzhiyun 	EM(rxrpc_local_new,			"NEW") \
244*4882a593Smuzhiyun 	EM(rxrpc_local_processing,		"PRO") \
245*4882a593Smuzhiyun 	EM(rxrpc_local_put,			"PUT") \
246*4882a593Smuzhiyun 	E_(rxrpc_local_queued,			"QUE")
247*4882a593Smuzhiyun 
248*4882a593Smuzhiyun #define rxrpc_peer_traces \
249*4882a593Smuzhiyun 	EM(rxrpc_peer_got,			"GOT") \
250*4882a593Smuzhiyun 	EM(rxrpc_peer_new,			"NEW") \
251*4882a593Smuzhiyun 	EM(rxrpc_peer_processing,		"PRO") \
252*4882a593Smuzhiyun 	E_(rxrpc_peer_put,			"PUT")
253*4882a593Smuzhiyun 
254*4882a593Smuzhiyun #define rxrpc_conn_traces \
255*4882a593Smuzhiyun 	EM(rxrpc_conn_got,			"GOT") \
256*4882a593Smuzhiyun 	EM(rxrpc_conn_new_client,		"NWc") \
257*4882a593Smuzhiyun 	EM(rxrpc_conn_new_service,		"NWs") \
258*4882a593Smuzhiyun 	EM(rxrpc_conn_put_client,		"PTc") \
259*4882a593Smuzhiyun 	EM(rxrpc_conn_put_service,		"PTs") \
260*4882a593Smuzhiyun 	EM(rxrpc_conn_queued,			"QUE") \
261*4882a593Smuzhiyun 	EM(rxrpc_conn_reap_service,		"RPs") \
262*4882a593Smuzhiyun 	E_(rxrpc_conn_seen,			"SEE")
263*4882a593Smuzhiyun 
264*4882a593Smuzhiyun #define rxrpc_client_traces \
265*4882a593Smuzhiyun 	EM(rxrpc_client_activate_chans,		"Activa") \
266*4882a593Smuzhiyun 	EM(rxrpc_client_alloc,			"Alloc ") \
267*4882a593Smuzhiyun 	EM(rxrpc_client_chan_activate,		"ChActv") \
268*4882a593Smuzhiyun 	EM(rxrpc_client_chan_disconnect,	"ChDisc") \
269*4882a593Smuzhiyun 	EM(rxrpc_client_chan_pass,		"ChPass") \
270*4882a593Smuzhiyun 	EM(rxrpc_client_chan_wait_failed,	"ChWtFl") \
271*4882a593Smuzhiyun 	EM(rxrpc_client_cleanup,		"Clean ") \
272*4882a593Smuzhiyun 	EM(rxrpc_client_discard,		"Discar") \
273*4882a593Smuzhiyun 	EM(rxrpc_client_duplicate,		"Duplic") \
274*4882a593Smuzhiyun 	EM(rxrpc_client_exposed,		"Expose") \
275*4882a593Smuzhiyun 	EM(rxrpc_client_replace,		"Replac") \
276*4882a593Smuzhiyun 	EM(rxrpc_client_to_active,		"->Actv") \
277*4882a593Smuzhiyun 	E_(rxrpc_client_to_idle,		"->Idle")
278*4882a593Smuzhiyun 
279*4882a593Smuzhiyun #define rxrpc_call_traces \
280*4882a593Smuzhiyun 	EM(rxrpc_call_connected,		"CON") \
281*4882a593Smuzhiyun 	EM(rxrpc_call_error,			"*E*") \
282*4882a593Smuzhiyun 	EM(rxrpc_call_got,			"GOT") \
283*4882a593Smuzhiyun 	EM(rxrpc_call_got_kernel,		"Gke") \
284*4882a593Smuzhiyun 	EM(rxrpc_call_got_timer,		"GTM") \
285*4882a593Smuzhiyun 	EM(rxrpc_call_got_userid,		"Gus") \
286*4882a593Smuzhiyun 	EM(rxrpc_call_new_client,		"NWc") \
287*4882a593Smuzhiyun 	EM(rxrpc_call_new_service,		"NWs") \
288*4882a593Smuzhiyun 	EM(rxrpc_call_put,			"PUT") \
289*4882a593Smuzhiyun 	EM(rxrpc_call_put_kernel,		"Pke") \
290*4882a593Smuzhiyun 	EM(rxrpc_call_put_noqueue,		"PnQ") \
291*4882a593Smuzhiyun 	EM(rxrpc_call_put_notimer,		"PnT") \
292*4882a593Smuzhiyun 	EM(rxrpc_call_put_timer,		"PTM") \
293*4882a593Smuzhiyun 	EM(rxrpc_call_put_userid,		"Pus") \
294*4882a593Smuzhiyun 	EM(rxrpc_call_queued,			"QUE") \
295*4882a593Smuzhiyun 	EM(rxrpc_call_queued_ref,		"QUR") \
296*4882a593Smuzhiyun 	EM(rxrpc_call_release,			"RLS") \
297*4882a593Smuzhiyun 	E_(rxrpc_call_seen,			"SEE")
298*4882a593Smuzhiyun 
299*4882a593Smuzhiyun #define rxrpc_transmit_traces \
300*4882a593Smuzhiyun 	EM(rxrpc_transmit_await_reply,		"AWR") \
301*4882a593Smuzhiyun 	EM(rxrpc_transmit_end,			"END") \
302*4882a593Smuzhiyun 	EM(rxrpc_transmit_queue,		"QUE") \
303*4882a593Smuzhiyun 	EM(rxrpc_transmit_queue_last,		"QLS") \
304*4882a593Smuzhiyun 	EM(rxrpc_transmit_rotate,		"ROT") \
305*4882a593Smuzhiyun 	EM(rxrpc_transmit_rotate_last,		"RLS") \
306*4882a593Smuzhiyun 	E_(rxrpc_transmit_wait,			"WAI")
307*4882a593Smuzhiyun 
308*4882a593Smuzhiyun #define rxrpc_receive_traces \
309*4882a593Smuzhiyun 	EM(rxrpc_receive_end,			"END") \
310*4882a593Smuzhiyun 	EM(rxrpc_receive_front,			"FRN") \
311*4882a593Smuzhiyun 	EM(rxrpc_receive_incoming,		"INC") \
312*4882a593Smuzhiyun 	EM(rxrpc_receive_queue,			"QUE") \
313*4882a593Smuzhiyun 	EM(rxrpc_receive_queue_last,		"QLS") \
314*4882a593Smuzhiyun 	E_(rxrpc_receive_rotate,		"ROT")
315*4882a593Smuzhiyun 
316*4882a593Smuzhiyun #define rxrpc_recvmsg_traces \
317*4882a593Smuzhiyun 	EM(rxrpc_recvmsg_cont,			"CONT") \
318*4882a593Smuzhiyun 	EM(rxrpc_recvmsg_data_return,		"DATA") \
319*4882a593Smuzhiyun 	EM(rxrpc_recvmsg_dequeue,		"DEQU") \
320*4882a593Smuzhiyun 	EM(rxrpc_recvmsg_enter,			"ENTR") \
321*4882a593Smuzhiyun 	EM(rxrpc_recvmsg_full,			"FULL") \
322*4882a593Smuzhiyun 	EM(rxrpc_recvmsg_hole,			"HOLE") \
323*4882a593Smuzhiyun 	EM(rxrpc_recvmsg_next,			"NEXT") \
324*4882a593Smuzhiyun 	EM(rxrpc_recvmsg_requeue,		"REQU") \
325*4882a593Smuzhiyun 	EM(rxrpc_recvmsg_return,		"RETN") \
326*4882a593Smuzhiyun 	EM(rxrpc_recvmsg_terminal,		"TERM") \
327*4882a593Smuzhiyun 	EM(rxrpc_recvmsg_to_be_accepted,	"TBAC") \
328*4882a593Smuzhiyun 	E_(rxrpc_recvmsg_wait,			"WAIT")
329*4882a593Smuzhiyun 
330*4882a593Smuzhiyun #define rxrpc_rtt_tx_traces \
331*4882a593Smuzhiyun 	EM(rxrpc_rtt_tx_cancel,			"CNCE") \
332*4882a593Smuzhiyun 	EM(rxrpc_rtt_tx_data,			"DATA") \
333*4882a593Smuzhiyun 	EM(rxrpc_rtt_tx_no_slot,		"FULL") \
334*4882a593Smuzhiyun 	E_(rxrpc_rtt_tx_ping,			"PING")
335*4882a593Smuzhiyun 
336*4882a593Smuzhiyun #define rxrpc_rtt_rx_traces \
337*4882a593Smuzhiyun 	EM(rxrpc_rtt_rx_cancel,			"CNCL") \
338*4882a593Smuzhiyun 	EM(rxrpc_rtt_rx_obsolete,		"OBSL") \
339*4882a593Smuzhiyun 	EM(rxrpc_rtt_rx_lost,			"LOST") \
340*4882a593Smuzhiyun 	EM(rxrpc_rtt_rx_ping_response,		"PONG") \
341*4882a593Smuzhiyun 	E_(rxrpc_rtt_rx_requested_ack,		"RACK")
342*4882a593Smuzhiyun 
343*4882a593Smuzhiyun #define rxrpc_timer_traces \
344*4882a593Smuzhiyun 	EM(rxrpc_timer_begin,			"Begin ") \
345*4882a593Smuzhiyun 	EM(rxrpc_timer_expired,			"*EXPR*") \
346*4882a593Smuzhiyun 	EM(rxrpc_timer_exp_ack,			"ExpAck") \
347*4882a593Smuzhiyun 	EM(rxrpc_timer_exp_hard,		"ExpHrd") \
348*4882a593Smuzhiyun 	EM(rxrpc_timer_exp_idle,		"ExpIdl") \
349*4882a593Smuzhiyun 	EM(rxrpc_timer_exp_keepalive,		"ExpKA ") \
350*4882a593Smuzhiyun 	EM(rxrpc_timer_exp_lost_ack,		"ExpLoA") \
351*4882a593Smuzhiyun 	EM(rxrpc_timer_exp_normal,		"ExpNml") \
352*4882a593Smuzhiyun 	EM(rxrpc_timer_exp_ping,		"ExpPng") \
353*4882a593Smuzhiyun 	EM(rxrpc_timer_exp_resend,		"ExpRsn") \
354*4882a593Smuzhiyun 	EM(rxrpc_timer_init_for_reply,		"IniRpl") \
355*4882a593Smuzhiyun 	EM(rxrpc_timer_init_for_send_reply,	"SndRpl") \
356*4882a593Smuzhiyun 	EM(rxrpc_timer_restart,			"Restrt") \
357*4882a593Smuzhiyun 	EM(rxrpc_timer_set_for_ack,		"SetAck") \
358*4882a593Smuzhiyun 	EM(rxrpc_timer_set_for_hard,		"SetHrd") \
359*4882a593Smuzhiyun 	EM(rxrpc_timer_set_for_idle,		"SetIdl") \
360*4882a593Smuzhiyun 	EM(rxrpc_timer_set_for_keepalive,	"KeepAl") \
361*4882a593Smuzhiyun 	EM(rxrpc_timer_set_for_lost_ack,	"SetLoA") \
362*4882a593Smuzhiyun 	EM(rxrpc_timer_set_for_normal,		"SetNml") \
363*4882a593Smuzhiyun 	EM(rxrpc_timer_set_for_ping,		"SetPng") \
364*4882a593Smuzhiyun 	EM(rxrpc_timer_set_for_resend,		"SetRTx") \
365*4882a593Smuzhiyun 	E_(rxrpc_timer_set_for_send,		"SetSnd")
366*4882a593Smuzhiyun 
367*4882a593Smuzhiyun #define rxrpc_propose_ack_traces \
368*4882a593Smuzhiyun 	EM(rxrpc_propose_ack_client_tx_end,	"ClTxEnd") \
369*4882a593Smuzhiyun 	EM(rxrpc_propose_ack_input_data,	"DataIn ") \
370*4882a593Smuzhiyun 	EM(rxrpc_propose_ack_ping_for_check_life, "ChkLife") \
371*4882a593Smuzhiyun 	EM(rxrpc_propose_ack_ping_for_keepalive, "KeepAlv") \
372*4882a593Smuzhiyun 	EM(rxrpc_propose_ack_ping_for_lost_ack,	"LostAck") \
373*4882a593Smuzhiyun 	EM(rxrpc_propose_ack_ping_for_lost_reply, "LostRpl") \
374*4882a593Smuzhiyun 	EM(rxrpc_propose_ack_ping_for_params,	"Params ") \
375*4882a593Smuzhiyun 	EM(rxrpc_propose_ack_processing_op,	"ProcOp ") \
376*4882a593Smuzhiyun 	EM(rxrpc_propose_ack_respond_to_ack,	"Rsp2Ack") \
377*4882a593Smuzhiyun 	EM(rxrpc_propose_ack_respond_to_ping,	"Rsp2Png") \
378*4882a593Smuzhiyun 	EM(rxrpc_propose_ack_retry_tx,		"RetryTx") \
379*4882a593Smuzhiyun 	EM(rxrpc_propose_ack_rotate_rx,		"RxAck  ") \
380*4882a593Smuzhiyun 	E_(rxrpc_propose_ack_terminal_ack,	"ClTerm ")
381*4882a593Smuzhiyun 
382*4882a593Smuzhiyun #define rxrpc_propose_ack_outcomes \
383*4882a593Smuzhiyun 	EM(rxrpc_propose_ack_subsume,		" Subsume") \
384*4882a593Smuzhiyun 	EM(rxrpc_propose_ack_update,		" Update") \
385*4882a593Smuzhiyun 	E_(rxrpc_propose_ack_use,		" New")
386*4882a593Smuzhiyun 
387*4882a593Smuzhiyun #define rxrpc_congest_modes \
388*4882a593Smuzhiyun 	EM(RXRPC_CALL_CONGEST_AVOIDANCE,	"CongAvoid") \
389*4882a593Smuzhiyun 	EM(RXRPC_CALL_FAST_RETRANSMIT,		"FastReTx ") \
390*4882a593Smuzhiyun 	EM(RXRPC_CALL_PACKET_LOSS,		"PktLoss  ") \
391*4882a593Smuzhiyun 	E_(RXRPC_CALL_SLOW_START,		"SlowStart")
392*4882a593Smuzhiyun 
393*4882a593Smuzhiyun #define rxrpc_congest_changes \
394*4882a593Smuzhiyun 	EM(rxrpc_cong_begin_retransmission,	" Retrans") \
395*4882a593Smuzhiyun 	EM(rxrpc_cong_cleared_nacks,		" Cleared") \
396*4882a593Smuzhiyun 	EM(rxrpc_cong_new_low_nack,		" NewLowN") \
397*4882a593Smuzhiyun 	EM(rxrpc_cong_no_change,		" -") \
398*4882a593Smuzhiyun 	EM(rxrpc_cong_progress,			" Progres") \
399*4882a593Smuzhiyun 	EM(rxrpc_cong_retransmit_again,		" ReTxAgn") \
400*4882a593Smuzhiyun 	EM(rxrpc_cong_rtt_window_end,		" RttWinE") \
401*4882a593Smuzhiyun 	E_(rxrpc_cong_saw_nack,			" SawNack")
402*4882a593Smuzhiyun 
403*4882a593Smuzhiyun #define rxrpc_pkts \
404*4882a593Smuzhiyun 	EM(0,					"?00") \
405*4882a593Smuzhiyun 	EM(RXRPC_PACKET_TYPE_DATA,		"DATA") \
406*4882a593Smuzhiyun 	EM(RXRPC_PACKET_TYPE_ACK,		"ACK") \
407*4882a593Smuzhiyun 	EM(RXRPC_PACKET_TYPE_BUSY,		"BUSY") \
408*4882a593Smuzhiyun 	EM(RXRPC_PACKET_TYPE_ABORT,		"ABORT") \
409*4882a593Smuzhiyun 	EM(RXRPC_PACKET_TYPE_ACKALL,		"ACKALL") \
410*4882a593Smuzhiyun 	EM(RXRPC_PACKET_TYPE_CHALLENGE,		"CHALL") \
411*4882a593Smuzhiyun 	EM(RXRPC_PACKET_TYPE_RESPONSE,		"RESP") \
412*4882a593Smuzhiyun 	EM(RXRPC_PACKET_TYPE_DEBUG,		"DEBUG") \
413*4882a593Smuzhiyun 	EM(9,					"?09") \
414*4882a593Smuzhiyun 	EM(10,					"?10") \
415*4882a593Smuzhiyun 	EM(11,					"?11") \
416*4882a593Smuzhiyun 	EM(12,					"?12") \
417*4882a593Smuzhiyun 	EM(RXRPC_PACKET_TYPE_VERSION,		"VERSION") \
418*4882a593Smuzhiyun 	EM(14,					"?14") \
419*4882a593Smuzhiyun 	E_(15,					"?15")
420*4882a593Smuzhiyun 
421*4882a593Smuzhiyun #define rxrpc_ack_names \
422*4882a593Smuzhiyun 	EM(0,					"-0-") \
423*4882a593Smuzhiyun 	EM(RXRPC_ACK_REQUESTED,			"REQ") \
424*4882a593Smuzhiyun 	EM(RXRPC_ACK_DUPLICATE,			"DUP") \
425*4882a593Smuzhiyun 	EM(RXRPC_ACK_OUT_OF_SEQUENCE,		"OOS") \
426*4882a593Smuzhiyun 	EM(RXRPC_ACK_EXCEEDS_WINDOW,		"WIN") \
427*4882a593Smuzhiyun 	EM(RXRPC_ACK_NOSPACE,			"MEM") \
428*4882a593Smuzhiyun 	EM(RXRPC_ACK_PING,			"PNG") \
429*4882a593Smuzhiyun 	EM(RXRPC_ACK_PING_RESPONSE,		"PNR") \
430*4882a593Smuzhiyun 	EM(RXRPC_ACK_DELAY,			"DLY") \
431*4882a593Smuzhiyun 	EM(RXRPC_ACK_IDLE,			"IDL") \
432*4882a593Smuzhiyun 	E_(RXRPC_ACK__INVALID,			"-?-")
433*4882a593Smuzhiyun 
434*4882a593Smuzhiyun #define rxrpc_completions \
435*4882a593Smuzhiyun 	EM(RXRPC_CALL_SUCCEEDED,		"Succeeded") \
436*4882a593Smuzhiyun 	EM(RXRPC_CALL_REMOTELY_ABORTED,		"RemoteAbort") \
437*4882a593Smuzhiyun 	EM(RXRPC_CALL_LOCALLY_ABORTED,		"LocalAbort") \
438*4882a593Smuzhiyun 	EM(RXRPC_CALL_LOCAL_ERROR,		"LocalError") \
439*4882a593Smuzhiyun 	E_(RXRPC_CALL_NETWORK_ERROR,		"NetError")
440*4882a593Smuzhiyun 
441*4882a593Smuzhiyun #define rxrpc_tx_points \
442*4882a593Smuzhiyun 	EM(rxrpc_tx_point_call_abort,		"CallAbort") \
443*4882a593Smuzhiyun 	EM(rxrpc_tx_point_call_ack,		"CallAck") \
444*4882a593Smuzhiyun 	EM(rxrpc_tx_point_call_data_frag,	"CallDataFrag") \
445*4882a593Smuzhiyun 	EM(rxrpc_tx_point_call_data_nofrag,	"CallDataNofrag") \
446*4882a593Smuzhiyun 	EM(rxrpc_tx_point_call_final_resend,	"CallFinalResend") \
447*4882a593Smuzhiyun 	EM(rxrpc_tx_point_conn_abort,		"ConnAbort") \
448*4882a593Smuzhiyun 	EM(rxrpc_tx_point_reject,		"Reject") \
449*4882a593Smuzhiyun 	EM(rxrpc_tx_point_rxkad_challenge,	"RxkadChall") \
450*4882a593Smuzhiyun 	EM(rxrpc_tx_point_rxkad_response,	"RxkadResp") \
451*4882a593Smuzhiyun 	EM(rxrpc_tx_point_version_keepalive,	"VerKeepalive") \
452*4882a593Smuzhiyun 	E_(rxrpc_tx_point_version_reply,	"VerReply")
453*4882a593Smuzhiyun 
454*4882a593Smuzhiyun /*
455*4882a593Smuzhiyun  * Export enum symbols via userspace.
456*4882a593Smuzhiyun  */
457*4882a593Smuzhiyun #undef EM
458*4882a593Smuzhiyun #undef E_
459*4882a593Smuzhiyun #define EM(a, b) TRACE_DEFINE_ENUM(a);
460*4882a593Smuzhiyun #define E_(a, b) TRACE_DEFINE_ENUM(a);
461*4882a593Smuzhiyun 
462*4882a593Smuzhiyun rxrpc_skb_traces;
463*4882a593Smuzhiyun rxrpc_local_traces;
464*4882a593Smuzhiyun rxrpc_conn_traces;
465*4882a593Smuzhiyun rxrpc_client_traces;
466*4882a593Smuzhiyun rxrpc_call_traces;
467*4882a593Smuzhiyun rxrpc_transmit_traces;
468*4882a593Smuzhiyun rxrpc_receive_traces;
469*4882a593Smuzhiyun rxrpc_recvmsg_traces;
470*4882a593Smuzhiyun rxrpc_rtt_tx_traces;
471*4882a593Smuzhiyun rxrpc_rtt_rx_traces;
472*4882a593Smuzhiyun rxrpc_timer_traces;
473*4882a593Smuzhiyun rxrpc_propose_ack_traces;
474*4882a593Smuzhiyun rxrpc_propose_ack_outcomes;
475*4882a593Smuzhiyun rxrpc_congest_modes;
476*4882a593Smuzhiyun rxrpc_congest_changes;
477*4882a593Smuzhiyun rxrpc_tx_points;
478*4882a593Smuzhiyun 
479*4882a593Smuzhiyun /*
480*4882a593Smuzhiyun  * Now redefine the EM() and E_() macros to map the enums to the strings that
481*4882a593Smuzhiyun  * will be printed in the output.
482*4882a593Smuzhiyun  */
483*4882a593Smuzhiyun #undef EM
484*4882a593Smuzhiyun #undef E_
485*4882a593Smuzhiyun #define EM(a, b)	{ a, b },
486*4882a593Smuzhiyun #define E_(a, b)	{ a, b }
487*4882a593Smuzhiyun 
488*4882a593Smuzhiyun TRACE_EVENT(rxrpc_local,
489*4882a593Smuzhiyun 	    TP_PROTO(unsigned int local_debug_id, enum rxrpc_local_trace op,
490*4882a593Smuzhiyun 		     int usage, const void *where),
491*4882a593Smuzhiyun 
492*4882a593Smuzhiyun 	    TP_ARGS(local_debug_id, op, usage, where),
493*4882a593Smuzhiyun 
494*4882a593Smuzhiyun 	    TP_STRUCT__entry(
495*4882a593Smuzhiyun 		    __field(unsigned int,	local		)
496*4882a593Smuzhiyun 		    __field(int,		op		)
497*4882a593Smuzhiyun 		    __field(int,		usage		)
498*4882a593Smuzhiyun 		    __field(const void *,	where		)
499*4882a593Smuzhiyun 			     ),
500*4882a593Smuzhiyun 
501*4882a593Smuzhiyun 	    TP_fast_assign(
502*4882a593Smuzhiyun 		    __entry->local = local_debug_id;
503*4882a593Smuzhiyun 		    __entry->op = op;
504*4882a593Smuzhiyun 		    __entry->usage = usage;
505*4882a593Smuzhiyun 		    __entry->where = where;
506*4882a593Smuzhiyun 			   ),
507*4882a593Smuzhiyun 
508*4882a593Smuzhiyun 	    TP_printk("L=%08x %s u=%d sp=%pSR",
509*4882a593Smuzhiyun 		      __entry->local,
510*4882a593Smuzhiyun 		      __print_symbolic(__entry->op, rxrpc_local_traces),
511*4882a593Smuzhiyun 		      __entry->usage,
512*4882a593Smuzhiyun 		      __entry->where)
513*4882a593Smuzhiyun 	    );
514*4882a593Smuzhiyun 
515*4882a593Smuzhiyun TRACE_EVENT(rxrpc_peer,
516*4882a593Smuzhiyun 	    TP_PROTO(unsigned int peer_debug_id, enum rxrpc_peer_trace op,
517*4882a593Smuzhiyun 		     int usage, const void *where),
518*4882a593Smuzhiyun 
519*4882a593Smuzhiyun 	    TP_ARGS(peer_debug_id, op, usage, where),
520*4882a593Smuzhiyun 
521*4882a593Smuzhiyun 	    TP_STRUCT__entry(
522*4882a593Smuzhiyun 		    __field(unsigned int,	peer		)
523*4882a593Smuzhiyun 		    __field(int,		op		)
524*4882a593Smuzhiyun 		    __field(int,		usage		)
525*4882a593Smuzhiyun 		    __field(const void *,	where		)
526*4882a593Smuzhiyun 			     ),
527*4882a593Smuzhiyun 
528*4882a593Smuzhiyun 	    TP_fast_assign(
529*4882a593Smuzhiyun 		    __entry->peer = peer_debug_id;
530*4882a593Smuzhiyun 		    __entry->op = op;
531*4882a593Smuzhiyun 		    __entry->usage = usage;
532*4882a593Smuzhiyun 		    __entry->where = where;
533*4882a593Smuzhiyun 			   ),
534*4882a593Smuzhiyun 
535*4882a593Smuzhiyun 	    TP_printk("P=%08x %s u=%d sp=%pSR",
536*4882a593Smuzhiyun 		      __entry->peer,
537*4882a593Smuzhiyun 		      __print_symbolic(__entry->op, rxrpc_peer_traces),
538*4882a593Smuzhiyun 		      __entry->usage,
539*4882a593Smuzhiyun 		      __entry->where)
540*4882a593Smuzhiyun 	    );
541*4882a593Smuzhiyun 
542*4882a593Smuzhiyun TRACE_EVENT(rxrpc_conn,
543*4882a593Smuzhiyun 	    TP_PROTO(unsigned int conn_debug_id, enum rxrpc_conn_trace op,
544*4882a593Smuzhiyun 		     int usage, const void *where),
545*4882a593Smuzhiyun 
546*4882a593Smuzhiyun 	    TP_ARGS(conn_debug_id, op, usage, where),
547*4882a593Smuzhiyun 
548*4882a593Smuzhiyun 	    TP_STRUCT__entry(
549*4882a593Smuzhiyun 		    __field(unsigned int,	conn		)
550*4882a593Smuzhiyun 		    __field(int,		op		)
551*4882a593Smuzhiyun 		    __field(int,		usage		)
552*4882a593Smuzhiyun 		    __field(const void *,	where		)
553*4882a593Smuzhiyun 			     ),
554*4882a593Smuzhiyun 
555*4882a593Smuzhiyun 	    TP_fast_assign(
556*4882a593Smuzhiyun 		    __entry->conn = conn_debug_id;
557*4882a593Smuzhiyun 		    __entry->op = op;
558*4882a593Smuzhiyun 		    __entry->usage = usage;
559*4882a593Smuzhiyun 		    __entry->where = where;
560*4882a593Smuzhiyun 			   ),
561*4882a593Smuzhiyun 
562*4882a593Smuzhiyun 	    TP_printk("C=%08x %s u=%d sp=%pSR",
563*4882a593Smuzhiyun 		      __entry->conn,
564*4882a593Smuzhiyun 		      __print_symbolic(__entry->op, rxrpc_conn_traces),
565*4882a593Smuzhiyun 		      __entry->usage,
566*4882a593Smuzhiyun 		      __entry->where)
567*4882a593Smuzhiyun 	    );
568*4882a593Smuzhiyun 
569*4882a593Smuzhiyun TRACE_EVENT(rxrpc_client,
570*4882a593Smuzhiyun 	    TP_PROTO(struct rxrpc_connection *conn, int channel,
571*4882a593Smuzhiyun 		     enum rxrpc_client_trace op),
572*4882a593Smuzhiyun 
573*4882a593Smuzhiyun 	    TP_ARGS(conn, channel, op),
574*4882a593Smuzhiyun 
575*4882a593Smuzhiyun 	    TP_STRUCT__entry(
576*4882a593Smuzhiyun 		    __field(unsigned int,		conn		)
577*4882a593Smuzhiyun 		    __field(u32,			cid		)
578*4882a593Smuzhiyun 		    __field(int,			channel		)
579*4882a593Smuzhiyun 		    __field(int,			usage		)
580*4882a593Smuzhiyun 		    __field(enum rxrpc_client_trace,	op		)
581*4882a593Smuzhiyun 			     ),
582*4882a593Smuzhiyun 
583*4882a593Smuzhiyun 	    TP_fast_assign(
584*4882a593Smuzhiyun 		    __entry->conn = conn ? conn->debug_id : 0;
585*4882a593Smuzhiyun 		    __entry->channel = channel;
586*4882a593Smuzhiyun 		    __entry->usage = conn ? refcount_read(&conn->ref) : -2;
587*4882a593Smuzhiyun 		    __entry->op = op;
588*4882a593Smuzhiyun 		    __entry->cid = conn ? conn->proto.cid : 0;
589*4882a593Smuzhiyun 			   ),
590*4882a593Smuzhiyun 
591*4882a593Smuzhiyun 	    TP_printk("C=%08x h=%2d %s i=%08x u=%d",
592*4882a593Smuzhiyun 		      __entry->conn,
593*4882a593Smuzhiyun 		      __entry->channel,
594*4882a593Smuzhiyun 		      __print_symbolic(__entry->op, rxrpc_client_traces),
595*4882a593Smuzhiyun 		      __entry->cid,
596*4882a593Smuzhiyun 		      __entry->usage)
597*4882a593Smuzhiyun 	    );
598*4882a593Smuzhiyun 
599*4882a593Smuzhiyun TRACE_EVENT(rxrpc_call,
600*4882a593Smuzhiyun 	    TP_PROTO(unsigned int call_debug_id, enum rxrpc_call_trace op,
601*4882a593Smuzhiyun 		     int usage, const void *where, const void *aux),
602*4882a593Smuzhiyun 
603*4882a593Smuzhiyun 	    TP_ARGS(call_debug_id, op, usage, where, aux),
604*4882a593Smuzhiyun 
605*4882a593Smuzhiyun 	    TP_STRUCT__entry(
606*4882a593Smuzhiyun 		    __field(unsigned int,		call		)
607*4882a593Smuzhiyun 		    __field(int,			op		)
608*4882a593Smuzhiyun 		    __field(int,			usage		)
609*4882a593Smuzhiyun 		    __field(const void *,		where		)
610*4882a593Smuzhiyun 		    __field(const void *,		aux		)
611*4882a593Smuzhiyun 			     ),
612*4882a593Smuzhiyun 
613*4882a593Smuzhiyun 	    TP_fast_assign(
614*4882a593Smuzhiyun 		    __entry->call = call_debug_id;
615*4882a593Smuzhiyun 		    __entry->op = op;
616*4882a593Smuzhiyun 		    __entry->usage = usage;
617*4882a593Smuzhiyun 		    __entry->where = where;
618*4882a593Smuzhiyun 		    __entry->aux = aux;
619*4882a593Smuzhiyun 			   ),
620*4882a593Smuzhiyun 
621*4882a593Smuzhiyun 	    TP_printk("c=%08x %s u=%d sp=%pSR a=%p",
622*4882a593Smuzhiyun 		      __entry->call,
623*4882a593Smuzhiyun 		      __print_symbolic(__entry->op, rxrpc_call_traces),
624*4882a593Smuzhiyun 		      __entry->usage,
625*4882a593Smuzhiyun 		      __entry->where,
626*4882a593Smuzhiyun 		      __entry->aux)
627*4882a593Smuzhiyun 	    );
628*4882a593Smuzhiyun 
629*4882a593Smuzhiyun TRACE_EVENT(rxrpc_skb,
630*4882a593Smuzhiyun 	    TP_PROTO(struct sk_buff *skb, enum rxrpc_skb_trace op,
631*4882a593Smuzhiyun 		     int usage, int mod_count, u8 flags,    const void *where),
632*4882a593Smuzhiyun 
633*4882a593Smuzhiyun 	    TP_ARGS(skb, op, usage, mod_count, flags, where),
634*4882a593Smuzhiyun 
635*4882a593Smuzhiyun 	    TP_STRUCT__entry(
636*4882a593Smuzhiyun 		    __field(struct sk_buff *,		skb		)
637*4882a593Smuzhiyun 		    __field(enum rxrpc_skb_trace,	op		)
638*4882a593Smuzhiyun 		    __field(u8,				flags		)
639*4882a593Smuzhiyun 		    __field(int,			usage		)
640*4882a593Smuzhiyun 		    __field(int,			mod_count	)
641*4882a593Smuzhiyun 		    __field(const void *,		where		)
642*4882a593Smuzhiyun 			     ),
643*4882a593Smuzhiyun 
644*4882a593Smuzhiyun 	    TP_fast_assign(
645*4882a593Smuzhiyun 		    __entry->skb = skb;
646*4882a593Smuzhiyun 		    __entry->flags = flags;
647*4882a593Smuzhiyun 		    __entry->op = op;
648*4882a593Smuzhiyun 		    __entry->usage = usage;
649*4882a593Smuzhiyun 		    __entry->mod_count = mod_count;
650*4882a593Smuzhiyun 		    __entry->where = where;
651*4882a593Smuzhiyun 			   ),
652*4882a593Smuzhiyun 
653*4882a593Smuzhiyun 	    TP_printk("s=%p %cx %s u=%d m=%d p=%pSR",
654*4882a593Smuzhiyun 		      __entry->skb,
655*4882a593Smuzhiyun 		      __entry->flags & RXRPC_SKB_TX_BUFFER ? 'T' : 'R',
656*4882a593Smuzhiyun 		      __print_symbolic(__entry->op, rxrpc_skb_traces),
657*4882a593Smuzhiyun 		      __entry->usage,
658*4882a593Smuzhiyun 		      __entry->mod_count,
659*4882a593Smuzhiyun 		      __entry->where)
660*4882a593Smuzhiyun 	    );
661*4882a593Smuzhiyun 
662*4882a593Smuzhiyun TRACE_EVENT(rxrpc_rx_packet,
663*4882a593Smuzhiyun 	    TP_PROTO(struct rxrpc_skb_priv *sp),
664*4882a593Smuzhiyun 
665*4882a593Smuzhiyun 	    TP_ARGS(sp),
666*4882a593Smuzhiyun 
667*4882a593Smuzhiyun 	    TP_STRUCT__entry(
668*4882a593Smuzhiyun 		    __field_struct(struct rxrpc_host_header,	hdr		)
669*4882a593Smuzhiyun 			     ),
670*4882a593Smuzhiyun 
671*4882a593Smuzhiyun 	    TP_fast_assign(
672*4882a593Smuzhiyun 		    memcpy(&__entry->hdr, &sp->hdr, sizeof(__entry->hdr));
673*4882a593Smuzhiyun 			   ),
674*4882a593Smuzhiyun 
675*4882a593Smuzhiyun 	    TP_printk("%08x:%08x:%08x:%04x %08x %08x %02x %02x %s",
676*4882a593Smuzhiyun 		      __entry->hdr.epoch, __entry->hdr.cid,
677*4882a593Smuzhiyun 		      __entry->hdr.callNumber, __entry->hdr.serviceId,
678*4882a593Smuzhiyun 		      __entry->hdr.serial, __entry->hdr.seq,
679*4882a593Smuzhiyun 		      __entry->hdr.type, __entry->hdr.flags,
680*4882a593Smuzhiyun 		      __entry->hdr.type <= 15 ?
681*4882a593Smuzhiyun 		      __print_symbolic(__entry->hdr.type, rxrpc_pkts) : "?UNK")
682*4882a593Smuzhiyun 	    );
683*4882a593Smuzhiyun 
684*4882a593Smuzhiyun TRACE_EVENT(rxrpc_rx_done,
685*4882a593Smuzhiyun 	    TP_PROTO(int result, int abort_code),
686*4882a593Smuzhiyun 
687*4882a593Smuzhiyun 	    TP_ARGS(result, abort_code),
688*4882a593Smuzhiyun 
689*4882a593Smuzhiyun 	    TP_STRUCT__entry(
690*4882a593Smuzhiyun 		    __field(int,			result		)
691*4882a593Smuzhiyun 		    __field(int,			abort_code	)
692*4882a593Smuzhiyun 			     ),
693*4882a593Smuzhiyun 
694*4882a593Smuzhiyun 	    TP_fast_assign(
695*4882a593Smuzhiyun 		    __entry->result = result;
696*4882a593Smuzhiyun 		    __entry->abort_code = abort_code;
697*4882a593Smuzhiyun 			   ),
698*4882a593Smuzhiyun 
699*4882a593Smuzhiyun 	    TP_printk("r=%d a=%d", __entry->result, __entry->abort_code)
700*4882a593Smuzhiyun 	    );
701*4882a593Smuzhiyun 
702*4882a593Smuzhiyun TRACE_EVENT(rxrpc_abort,
703*4882a593Smuzhiyun 	    TP_PROTO(unsigned int call_nr, const char *why, u32 cid, u32 call_id,
704*4882a593Smuzhiyun 		     rxrpc_seq_t seq, int abort_code, int error),
705*4882a593Smuzhiyun 
706*4882a593Smuzhiyun 	    TP_ARGS(call_nr, why, cid, call_id, seq, abort_code, error),
707*4882a593Smuzhiyun 
708*4882a593Smuzhiyun 	    TP_STRUCT__entry(
709*4882a593Smuzhiyun 		    __field(unsigned int,		call_nr		)
710*4882a593Smuzhiyun 		    __array(char,			why, 4		)
711*4882a593Smuzhiyun 		    __field(u32,			cid		)
712*4882a593Smuzhiyun 		    __field(u32,			call_id		)
713*4882a593Smuzhiyun 		    __field(rxrpc_seq_t,		seq		)
714*4882a593Smuzhiyun 		    __field(int,			abort_code	)
715*4882a593Smuzhiyun 		    __field(int,			error		)
716*4882a593Smuzhiyun 			     ),
717*4882a593Smuzhiyun 
718*4882a593Smuzhiyun 	    TP_fast_assign(
719*4882a593Smuzhiyun 		    memcpy(__entry->why, why, 4);
720*4882a593Smuzhiyun 		    __entry->call_nr = call_nr;
721*4882a593Smuzhiyun 		    __entry->cid = cid;
722*4882a593Smuzhiyun 		    __entry->call_id = call_id;
723*4882a593Smuzhiyun 		    __entry->abort_code = abort_code;
724*4882a593Smuzhiyun 		    __entry->error = error;
725*4882a593Smuzhiyun 		    __entry->seq = seq;
726*4882a593Smuzhiyun 			   ),
727*4882a593Smuzhiyun 
728*4882a593Smuzhiyun 	    TP_printk("c=%08x %08x:%08x s=%u a=%d e=%d %s",
729*4882a593Smuzhiyun 		      __entry->call_nr,
730*4882a593Smuzhiyun 		      __entry->cid, __entry->call_id, __entry->seq,
731*4882a593Smuzhiyun 		      __entry->abort_code, __entry->error, __entry->why)
732*4882a593Smuzhiyun 	    );
733*4882a593Smuzhiyun 
734*4882a593Smuzhiyun TRACE_EVENT(rxrpc_call_complete,
735*4882a593Smuzhiyun 	    TP_PROTO(struct rxrpc_call *call),
736*4882a593Smuzhiyun 
737*4882a593Smuzhiyun 	    TP_ARGS(call),
738*4882a593Smuzhiyun 
739*4882a593Smuzhiyun 	    TP_STRUCT__entry(
740*4882a593Smuzhiyun 		    __field(unsigned int,		call		)
741*4882a593Smuzhiyun 		    __field(enum rxrpc_call_completion,	compl		)
742*4882a593Smuzhiyun 		    __field(int,			error		)
743*4882a593Smuzhiyun 		    __field(u32,			abort_code	)
744*4882a593Smuzhiyun 			     ),
745*4882a593Smuzhiyun 
746*4882a593Smuzhiyun 	    TP_fast_assign(
747*4882a593Smuzhiyun 		    __entry->call = call->debug_id;
748*4882a593Smuzhiyun 		    __entry->compl = call->completion;
749*4882a593Smuzhiyun 		    __entry->error = call->error;
750*4882a593Smuzhiyun 		    __entry->abort_code = call->abort_code;
751*4882a593Smuzhiyun 			   ),
752*4882a593Smuzhiyun 
753*4882a593Smuzhiyun 	    TP_printk("c=%08x %s r=%d ac=%d",
754*4882a593Smuzhiyun 		      __entry->call,
755*4882a593Smuzhiyun 		      __print_symbolic(__entry->compl, rxrpc_completions),
756*4882a593Smuzhiyun 		      __entry->error,
757*4882a593Smuzhiyun 		      __entry->abort_code)
758*4882a593Smuzhiyun 	    );
759*4882a593Smuzhiyun 
760*4882a593Smuzhiyun TRACE_EVENT(rxrpc_transmit,
761*4882a593Smuzhiyun 	    TP_PROTO(struct rxrpc_call *call, enum rxrpc_transmit_trace why),
762*4882a593Smuzhiyun 
763*4882a593Smuzhiyun 	    TP_ARGS(call, why),
764*4882a593Smuzhiyun 
765*4882a593Smuzhiyun 	    TP_STRUCT__entry(
766*4882a593Smuzhiyun 		    __field(unsigned int,		call		)
767*4882a593Smuzhiyun 		    __field(enum rxrpc_transmit_trace,	why		)
768*4882a593Smuzhiyun 		    __field(rxrpc_seq_t,		tx_hard_ack	)
769*4882a593Smuzhiyun 		    __field(rxrpc_seq_t,		tx_top		)
770*4882a593Smuzhiyun 		    __field(int,			tx_winsize	)
771*4882a593Smuzhiyun 			     ),
772*4882a593Smuzhiyun 
773*4882a593Smuzhiyun 	    TP_fast_assign(
774*4882a593Smuzhiyun 		    __entry->call = call->debug_id;
775*4882a593Smuzhiyun 		    __entry->why = why;
776*4882a593Smuzhiyun 		    __entry->tx_hard_ack = call->tx_hard_ack;
777*4882a593Smuzhiyun 		    __entry->tx_top = call->tx_top;
778*4882a593Smuzhiyun 		    __entry->tx_winsize = call->tx_winsize;
779*4882a593Smuzhiyun 			   ),
780*4882a593Smuzhiyun 
781*4882a593Smuzhiyun 	    TP_printk("c=%08x %s f=%08x n=%u/%u",
782*4882a593Smuzhiyun 		      __entry->call,
783*4882a593Smuzhiyun 		      __print_symbolic(__entry->why, rxrpc_transmit_traces),
784*4882a593Smuzhiyun 		      __entry->tx_hard_ack + 1,
785*4882a593Smuzhiyun 		      __entry->tx_top - __entry->tx_hard_ack,
786*4882a593Smuzhiyun 		      __entry->tx_winsize)
787*4882a593Smuzhiyun 	    );
788*4882a593Smuzhiyun 
789*4882a593Smuzhiyun TRACE_EVENT(rxrpc_rx_data,
790*4882a593Smuzhiyun 	    TP_PROTO(unsigned int call, rxrpc_seq_t seq,
791*4882a593Smuzhiyun 		     rxrpc_serial_t serial, u8 flags, u8 anno),
792*4882a593Smuzhiyun 
793*4882a593Smuzhiyun 	    TP_ARGS(call, seq, serial, flags, anno),
794*4882a593Smuzhiyun 
795*4882a593Smuzhiyun 	    TP_STRUCT__entry(
796*4882a593Smuzhiyun 		    __field(unsigned int,		call		)
797*4882a593Smuzhiyun 		    __field(rxrpc_seq_t,		seq		)
798*4882a593Smuzhiyun 		    __field(rxrpc_serial_t,		serial		)
799*4882a593Smuzhiyun 		    __field(u8,				flags		)
800*4882a593Smuzhiyun 		    __field(u8,				anno		)
801*4882a593Smuzhiyun 			     ),
802*4882a593Smuzhiyun 
803*4882a593Smuzhiyun 	    TP_fast_assign(
804*4882a593Smuzhiyun 		    __entry->call = call;
805*4882a593Smuzhiyun 		    __entry->seq = seq;
806*4882a593Smuzhiyun 		    __entry->serial = serial;
807*4882a593Smuzhiyun 		    __entry->flags = flags;
808*4882a593Smuzhiyun 		    __entry->anno = anno;
809*4882a593Smuzhiyun 			   ),
810*4882a593Smuzhiyun 
811*4882a593Smuzhiyun 	    TP_printk("c=%08x DATA %08x q=%08x fl=%02x a=%02x",
812*4882a593Smuzhiyun 		      __entry->call,
813*4882a593Smuzhiyun 		      __entry->serial,
814*4882a593Smuzhiyun 		      __entry->seq,
815*4882a593Smuzhiyun 		      __entry->flags,
816*4882a593Smuzhiyun 		      __entry->anno)
817*4882a593Smuzhiyun 	    );
818*4882a593Smuzhiyun 
819*4882a593Smuzhiyun TRACE_EVENT(rxrpc_rx_ack,
820*4882a593Smuzhiyun 	    TP_PROTO(struct rxrpc_call *call,
821*4882a593Smuzhiyun 		     rxrpc_serial_t serial, rxrpc_serial_t ack_serial,
822*4882a593Smuzhiyun 		     rxrpc_seq_t first, rxrpc_seq_t prev, u8 reason, u8 n_acks),
823*4882a593Smuzhiyun 
824*4882a593Smuzhiyun 	    TP_ARGS(call, serial, ack_serial, first, prev, reason, n_acks),
825*4882a593Smuzhiyun 
826*4882a593Smuzhiyun 	    TP_STRUCT__entry(
827*4882a593Smuzhiyun 		    __field(unsigned int,		call		)
828*4882a593Smuzhiyun 		    __field(rxrpc_serial_t,		serial		)
829*4882a593Smuzhiyun 		    __field(rxrpc_serial_t,		ack_serial	)
830*4882a593Smuzhiyun 		    __field(rxrpc_seq_t,		first		)
831*4882a593Smuzhiyun 		    __field(rxrpc_seq_t,		prev		)
832*4882a593Smuzhiyun 		    __field(u8,				reason		)
833*4882a593Smuzhiyun 		    __field(u8,				n_acks		)
834*4882a593Smuzhiyun 			     ),
835*4882a593Smuzhiyun 
836*4882a593Smuzhiyun 	    TP_fast_assign(
837*4882a593Smuzhiyun 		    __entry->call = call->debug_id;
838*4882a593Smuzhiyun 		    __entry->serial = serial;
839*4882a593Smuzhiyun 		    __entry->ack_serial = ack_serial;
840*4882a593Smuzhiyun 		    __entry->first = first;
841*4882a593Smuzhiyun 		    __entry->prev = prev;
842*4882a593Smuzhiyun 		    __entry->reason = reason;
843*4882a593Smuzhiyun 		    __entry->n_acks = n_acks;
844*4882a593Smuzhiyun 			   ),
845*4882a593Smuzhiyun 
846*4882a593Smuzhiyun 	    TP_printk("c=%08x %08x %s r=%08x f=%08x p=%08x n=%u",
847*4882a593Smuzhiyun 		      __entry->call,
848*4882a593Smuzhiyun 		      __entry->serial,
849*4882a593Smuzhiyun 		      __print_symbolic(__entry->reason, rxrpc_ack_names),
850*4882a593Smuzhiyun 		      __entry->ack_serial,
851*4882a593Smuzhiyun 		      __entry->first,
852*4882a593Smuzhiyun 		      __entry->prev,
853*4882a593Smuzhiyun 		      __entry->n_acks)
854*4882a593Smuzhiyun 	    );
855*4882a593Smuzhiyun 
856*4882a593Smuzhiyun TRACE_EVENT(rxrpc_rx_abort,
857*4882a593Smuzhiyun 	    TP_PROTO(struct rxrpc_call *call, rxrpc_serial_t serial,
858*4882a593Smuzhiyun 		     u32 abort_code),
859*4882a593Smuzhiyun 
860*4882a593Smuzhiyun 	    TP_ARGS(call, serial, abort_code),
861*4882a593Smuzhiyun 
862*4882a593Smuzhiyun 	    TP_STRUCT__entry(
863*4882a593Smuzhiyun 		    __field(unsigned int,		call		)
864*4882a593Smuzhiyun 		    __field(rxrpc_serial_t,		serial		)
865*4882a593Smuzhiyun 		    __field(u32,			abort_code	)
866*4882a593Smuzhiyun 			     ),
867*4882a593Smuzhiyun 
868*4882a593Smuzhiyun 	    TP_fast_assign(
869*4882a593Smuzhiyun 		    __entry->call = call->debug_id;
870*4882a593Smuzhiyun 		    __entry->serial = serial;
871*4882a593Smuzhiyun 		    __entry->abort_code = abort_code;
872*4882a593Smuzhiyun 			   ),
873*4882a593Smuzhiyun 
874*4882a593Smuzhiyun 	    TP_printk("c=%08x ABORT %08x ac=%d",
875*4882a593Smuzhiyun 		      __entry->call,
876*4882a593Smuzhiyun 		      __entry->serial,
877*4882a593Smuzhiyun 		      __entry->abort_code)
878*4882a593Smuzhiyun 	    );
879*4882a593Smuzhiyun 
880*4882a593Smuzhiyun TRACE_EVENT(rxrpc_rx_rwind_change,
881*4882a593Smuzhiyun 	    TP_PROTO(struct rxrpc_call *call, rxrpc_serial_t serial,
882*4882a593Smuzhiyun 		     u32 rwind, bool wake),
883*4882a593Smuzhiyun 
884*4882a593Smuzhiyun 	    TP_ARGS(call, serial, rwind, wake),
885*4882a593Smuzhiyun 
886*4882a593Smuzhiyun 	    TP_STRUCT__entry(
887*4882a593Smuzhiyun 		    __field(unsigned int,		call		)
888*4882a593Smuzhiyun 		    __field(rxrpc_serial_t,		serial		)
889*4882a593Smuzhiyun 		    __field(u32,			rwind		)
890*4882a593Smuzhiyun 		    __field(bool,			wake		)
891*4882a593Smuzhiyun 			     ),
892*4882a593Smuzhiyun 
893*4882a593Smuzhiyun 	    TP_fast_assign(
894*4882a593Smuzhiyun 		    __entry->call = call->debug_id;
895*4882a593Smuzhiyun 		    __entry->serial = serial;
896*4882a593Smuzhiyun 		    __entry->rwind = rwind;
897*4882a593Smuzhiyun 		    __entry->wake = wake;
898*4882a593Smuzhiyun 			   ),
899*4882a593Smuzhiyun 
900*4882a593Smuzhiyun 	    TP_printk("c=%08x %08x rw=%u%s",
901*4882a593Smuzhiyun 		      __entry->call,
902*4882a593Smuzhiyun 		      __entry->serial,
903*4882a593Smuzhiyun 		      __entry->rwind,
904*4882a593Smuzhiyun 		      __entry->wake ? " wake" : "")
905*4882a593Smuzhiyun 	    );
906*4882a593Smuzhiyun 
907*4882a593Smuzhiyun TRACE_EVENT(rxrpc_tx_packet,
908*4882a593Smuzhiyun 	    TP_PROTO(unsigned int call_id, struct rxrpc_wire_header *whdr,
909*4882a593Smuzhiyun 		     enum rxrpc_tx_point where),
910*4882a593Smuzhiyun 
911*4882a593Smuzhiyun 	    TP_ARGS(call_id, whdr, where),
912*4882a593Smuzhiyun 
913*4882a593Smuzhiyun 	    TP_STRUCT__entry(
914*4882a593Smuzhiyun 		    __field(unsigned int,			call	)
915*4882a593Smuzhiyun 		    __field(enum rxrpc_tx_point,		where	)
916*4882a593Smuzhiyun 		    __field_struct(struct rxrpc_wire_header,	whdr	)
917*4882a593Smuzhiyun 			     ),
918*4882a593Smuzhiyun 
919*4882a593Smuzhiyun 	    TP_fast_assign(
920*4882a593Smuzhiyun 		    __entry->call = call_id;
921*4882a593Smuzhiyun 		    memcpy(&__entry->whdr, whdr, sizeof(__entry->whdr));
922*4882a593Smuzhiyun 		    __entry->where = where;
923*4882a593Smuzhiyun 			   ),
924*4882a593Smuzhiyun 
925*4882a593Smuzhiyun 	    TP_printk("c=%08x %08x:%08x:%08x:%04x %08x %08x %02x %02x %s %s",
926*4882a593Smuzhiyun 		      __entry->call,
927*4882a593Smuzhiyun 		      ntohl(__entry->whdr.epoch),
928*4882a593Smuzhiyun 		      ntohl(__entry->whdr.cid),
929*4882a593Smuzhiyun 		      ntohl(__entry->whdr.callNumber),
930*4882a593Smuzhiyun 		      ntohs(__entry->whdr.serviceId),
931*4882a593Smuzhiyun 		      ntohl(__entry->whdr.serial),
932*4882a593Smuzhiyun 		      ntohl(__entry->whdr.seq),
933*4882a593Smuzhiyun 		      __entry->whdr.type, __entry->whdr.flags,
934*4882a593Smuzhiyun 		      __entry->whdr.type <= 15 ?
935*4882a593Smuzhiyun 		      __print_symbolic(__entry->whdr.type, rxrpc_pkts) : "?UNK",
936*4882a593Smuzhiyun 		      __print_symbolic(__entry->where, rxrpc_tx_points))
937*4882a593Smuzhiyun 	    );
938*4882a593Smuzhiyun 
939*4882a593Smuzhiyun TRACE_EVENT(rxrpc_tx_data,
940*4882a593Smuzhiyun 	    TP_PROTO(struct rxrpc_call *call, rxrpc_seq_t seq,
941*4882a593Smuzhiyun 		     rxrpc_serial_t serial, u8 flags, bool retrans, bool lose),
942*4882a593Smuzhiyun 
943*4882a593Smuzhiyun 	    TP_ARGS(call, seq, serial, flags, retrans, lose),
944*4882a593Smuzhiyun 
945*4882a593Smuzhiyun 	    TP_STRUCT__entry(
946*4882a593Smuzhiyun 		    __field(unsigned int,		call		)
947*4882a593Smuzhiyun 		    __field(rxrpc_seq_t,		seq		)
948*4882a593Smuzhiyun 		    __field(rxrpc_serial_t,		serial		)
949*4882a593Smuzhiyun 		    __field(u32,			cid		)
950*4882a593Smuzhiyun 		    __field(u32,			call_id		)
951*4882a593Smuzhiyun 		    __field(u8,				flags		)
952*4882a593Smuzhiyun 		    __field(bool,			retrans		)
953*4882a593Smuzhiyun 		    __field(bool,			lose		)
954*4882a593Smuzhiyun 			     ),
955*4882a593Smuzhiyun 
956*4882a593Smuzhiyun 	    TP_fast_assign(
957*4882a593Smuzhiyun 		    __entry->call = call->debug_id;
958*4882a593Smuzhiyun 		    __entry->cid = call->cid;
959*4882a593Smuzhiyun 		    __entry->call_id = call->call_id;
960*4882a593Smuzhiyun 		    __entry->seq = seq;
961*4882a593Smuzhiyun 		    __entry->serial = serial;
962*4882a593Smuzhiyun 		    __entry->flags = flags;
963*4882a593Smuzhiyun 		    __entry->retrans = retrans;
964*4882a593Smuzhiyun 		    __entry->lose = lose;
965*4882a593Smuzhiyun 			   ),
966*4882a593Smuzhiyun 
967*4882a593Smuzhiyun 	    TP_printk("c=%08x DATA %08x:%08x %08x q=%08x fl=%02x%s%s",
968*4882a593Smuzhiyun 		      __entry->call,
969*4882a593Smuzhiyun 		      __entry->cid,
970*4882a593Smuzhiyun 		      __entry->call_id,
971*4882a593Smuzhiyun 		      __entry->serial,
972*4882a593Smuzhiyun 		      __entry->seq,
973*4882a593Smuzhiyun 		      __entry->flags,
974*4882a593Smuzhiyun 		      __entry->retrans ? " *RETRANS*" : "",
975*4882a593Smuzhiyun 		      __entry->lose ? " *LOSE*" : "")
976*4882a593Smuzhiyun 	    );
977*4882a593Smuzhiyun 
978*4882a593Smuzhiyun TRACE_EVENT(rxrpc_tx_ack,
979*4882a593Smuzhiyun 	    TP_PROTO(unsigned int call, rxrpc_serial_t serial,
980*4882a593Smuzhiyun 		     rxrpc_seq_t ack_first, rxrpc_serial_t ack_serial,
981*4882a593Smuzhiyun 		     u8 reason, u8 n_acks),
982*4882a593Smuzhiyun 
983*4882a593Smuzhiyun 	    TP_ARGS(call, serial, ack_first, ack_serial, reason, n_acks),
984*4882a593Smuzhiyun 
985*4882a593Smuzhiyun 	    TP_STRUCT__entry(
986*4882a593Smuzhiyun 		    __field(unsigned int,		call		)
987*4882a593Smuzhiyun 		    __field(rxrpc_serial_t,		serial		)
988*4882a593Smuzhiyun 		    __field(rxrpc_seq_t,		ack_first	)
989*4882a593Smuzhiyun 		    __field(rxrpc_serial_t,		ack_serial	)
990*4882a593Smuzhiyun 		    __field(u8,				reason		)
991*4882a593Smuzhiyun 		    __field(u8,				n_acks		)
992*4882a593Smuzhiyun 			     ),
993*4882a593Smuzhiyun 
994*4882a593Smuzhiyun 	    TP_fast_assign(
995*4882a593Smuzhiyun 		    __entry->call = call;
996*4882a593Smuzhiyun 		    __entry->serial = serial;
997*4882a593Smuzhiyun 		    __entry->ack_first = ack_first;
998*4882a593Smuzhiyun 		    __entry->ack_serial = ack_serial;
999*4882a593Smuzhiyun 		    __entry->reason = reason;
1000*4882a593Smuzhiyun 		    __entry->n_acks = n_acks;
1001*4882a593Smuzhiyun 			   ),
1002*4882a593Smuzhiyun 
1003*4882a593Smuzhiyun 	    TP_printk(" c=%08x ACK  %08x %s f=%08x r=%08x n=%u",
1004*4882a593Smuzhiyun 		      __entry->call,
1005*4882a593Smuzhiyun 		      __entry->serial,
1006*4882a593Smuzhiyun 		      __print_symbolic(__entry->reason, rxrpc_ack_names),
1007*4882a593Smuzhiyun 		      __entry->ack_first,
1008*4882a593Smuzhiyun 		      __entry->ack_serial,
1009*4882a593Smuzhiyun 		      __entry->n_acks)
1010*4882a593Smuzhiyun 	    );
1011*4882a593Smuzhiyun 
1012*4882a593Smuzhiyun TRACE_EVENT(rxrpc_receive,
1013*4882a593Smuzhiyun 	    TP_PROTO(struct rxrpc_call *call, enum rxrpc_receive_trace why,
1014*4882a593Smuzhiyun 		     rxrpc_serial_t serial, rxrpc_seq_t seq),
1015*4882a593Smuzhiyun 
1016*4882a593Smuzhiyun 	    TP_ARGS(call, why, serial, seq),
1017*4882a593Smuzhiyun 
1018*4882a593Smuzhiyun 	    TP_STRUCT__entry(
1019*4882a593Smuzhiyun 		    __field(unsigned int,		call		)
1020*4882a593Smuzhiyun 		    __field(enum rxrpc_receive_trace,	why		)
1021*4882a593Smuzhiyun 		    __field(rxrpc_serial_t,		serial		)
1022*4882a593Smuzhiyun 		    __field(rxrpc_seq_t,		seq		)
1023*4882a593Smuzhiyun 		    __field(rxrpc_seq_t,		hard_ack	)
1024*4882a593Smuzhiyun 		    __field(rxrpc_seq_t,		top		)
1025*4882a593Smuzhiyun 			     ),
1026*4882a593Smuzhiyun 
1027*4882a593Smuzhiyun 	    TP_fast_assign(
1028*4882a593Smuzhiyun 		    __entry->call = call->debug_id;
1029*4882a593Smuzhiyun 		    __entry->why = why;
1030*4882a593Smuzhiyun 		    __entry->serial = serial;
1031*4882a593Smuzhiyun 		    __entry->seq = seq;
1032*4882a593Smuzhiyun 		    __entry->hard_ack = call->rx_hard_ack;
1033*4882a593Smuzhiyun 		    __entry->top = call->rx_top;
1034*4882a593Smuzhiyun 			   ),
1035*4882a593Smuzhiyun 
1036*4882a593Smuzhiyun 	    TP_printk("c=%08x %s r=%08x q=%08x w=%08x-%08x",
1037*4882a593Smuzhiyun 		      __entry->call,
1038*4882a593Smuzhiyun 		      __print_symbolic(__entry->why, rxrpc_receive_traces),
1039*4882a593Smuzhiyun 		      __entry->serial,
1040*4882a593Smuzhiyun 		      __entry->seq,
1041*4882a593Smuzhiyun 		      __entry->hard_ack,
1042*4882a593Smuzhiyun 		      __entry->top)
1043*4882a593Smuzhiyun 	    );
1044*4882a593Smuzhiyun 
1045*4882a593Smuzhiyun TRACE_EVENT(rxrpc_recvmsg,
1046*4882a593Smuzhiyun 	    TP_PROTO(struct rxrpc_call *call, enum rxrpc_recvmsg_trace why,
1047*4882a593Smuzhiyun 		     rxrpc_seq_t seq, unsigned int offset, unsigned int len,
1048*4882a593Smuzhiyun 		     int ret),
1049*4882a593Smuzhiyun 
1050*4882a593Smuzhiyun 	    TP_ARGS(call, why, seq, offset, len, ret),
1051*4882a593Smuzhiyun 
1052*4882a593Smuzhiyun 	    TP_STRUCT__entry(
1053*4882a593Smuzhiyun 		    __field(unsigned int,		call		)
1054*4882a593Smuzhiyun 		    __field(enum rxrpc_recvmsg_trace,	why		)
1055*4882a593Smuzhiyun 		    __field(rxrpc_seq_t,		seq		)
1056*4882a593Smuzhiyun 		    __field(unsigned int,		offset		)
1057*4882a593Smuzhiyun 		    __field(unsigned int,		len		)
1058*4882a593Smuzhiyun 		    __field(int,			ret		)
1059*4882a593Smuzhiyun 			     ),
1060*4882a593Smuzhiyun 
1061*4882a593Smuzhiyun 	    TP_fast_assign(
1062*4882a593Smuzhiyun 		    __entry->call = call ? call->debug_id : 0;
1063*4882a593Smuzhiyun 		    __entry->why = why;
1064*4882a593Smuzhiyun 		    __entry->seq = seq;
1065*4882a593Smuzhiyun 		    __entry->offset = offset;
1066*4882a593Smuzhiyun 		    __entry->len = len;
1067*4882a593Smuzhiyun 		    __entry->ret = ret;
1068*4882a593Smuzhiyun 			   ),
1069*4882a593Smuzhiyun 
1070*4882a593Smuzhiyun 	    TP_printk("c=%08x %s q=%08x o=%u l=%u ret=%d",
1071*4882a593Smuzhiyun 		      __entry->call,
1072*4882a593Smuzhiyun 		      __print_symbolic(__entry->why, rxrpc_recvmsg_traces),
1073*4882a593Smuzhiyun 		      __entry->seq,
1074*4882a593Smuzhiyun 		      __entry->offset,
1075*4882a593Smuzhiyun 		      __entry->len,
1076*4882a593Smuzhiyun 		      __entry->ret)
1077*4882a593Smuzhiyun 	    );
1078*4882a593Smuzhiyun 
1079*4882a593Smuzhiyun TRACE_EVENT(rxrpc_rtt_tx,
1080*4882a593Smuzhiyun 	    TP_PROTO(struct rxrpc_call *call, enum rxrpc_rtt_tx_trace why,
1081*4882a593Smuzhiyun 		     int slot, rxrpc_serial_t send_serial),
1082*4882a593Smuzhiyun 
1083*4882a593Smuzhiyun 	    TP_ARGS(call, why, slot, send_serial),
1084*4882a593Smuzhiyun 
1085*4882a593Smuzhiyun 	    TP_STRUCT__entry(
1086*4882a593Smuzhiyun 		    __field(unsigned int,		call		)
1087*4882a593Smuzhiyun 		    __field(enum rxrpc_rtt_tx_trace,	why		)
1088*4882a593Smuzhiyun 		    __field(int,			slot		)
1089*4882a593Smuzhiyun 		    __field(rxrpc_serial_t,		send_serial	)
1090*4882a593Smuzhiyun 			     ),
1091*4882a593Smuzhiyun 
1092*4882a593Smuzhiyun 	    TP_fast_assign(
1093*4882a593Smuzhiyun 		    __entry->call = call->debug_id;
1094*4882a593Smuzhiyun 		    __entry->why = why;
1095*4882a593Smuzhiyun 		    __entry->slot = slot;
1096*4882a593Smuzhiyun 		    __entry->send_serial = send_serial;
1097*4882a593Smuzhiyun 			   ),
1098*4882a593Smuzhiyun 
1099*4882a593Smuzhiyun 	    TP_printk("c=%08x [%d] %s sr=%08x",
1100*4882a593Smuzhiyun 		      __entry->call,
1101*4882a593Smuzhiyun 		      __entry->slot,
1102*4882a593Smuzhiyun 		      __print_symbolic(__entry->why, rxrpc_rtt_tx_traces),
1103*4882a593Smuzhiyun 		      __entry->send_serial)
1104*4882a593Smuzhiyun 	    );
1105*4882a593Smuzhiyun 
1106*4882a593Smuzhiyun TRACE_EVENT(rxrpc_rtt_rx,
1107*4882a593Smuzhiyun 	    TP_PROTO(struct rxrpc_call *call, enum rxrpc_rtt_rx_trace why,
1108*4882a593Smuzhiyun 		     int slot,
1109*4882a593Smuzhiyun 		     rxrpc_serial_t send_serial, rxrpc_serial_t resp_serial,
1110*4882a593Smuzhiyun 		     u32 rtt, u32 rto),
1111*4882a593Smuzhiyun 
1112*4882a593Smuzhiyun 	    TP_ARGS(call, why, slot, send_serial, resp_serial, rtt, rto),
1113*4882a593Smuzhiyun 
1114*4882a593Smuzhiyun 	    TP_STRUCT__entry(
1115*4882a593Smuzhiyun 		    __field(unsigned int,		call		)
1116*4882a593Smuzhiyun 		    __field(enum rxrpc_rtt_rx_trace,	why		)
1117*4882a593Smuzhiyun 		    __field(int,			slot		)
1118*4882a593Smuzhiyun 		    __field(rxrpc_serial_t,		send_serial	)
1119*4882a593Smuzhiyun 		    __field(rxrpc_serial_t,		resp_serial	)
1120*4882a593Smuzhiyun 		    __field(u32,			rtt		)
1121*4882a593Smuzhiyun 		    __field(u32,			rto		)
1122*4882a593Smuzhiyun 			     ),
1123*4882a593Smuzhiyun 
1124*4882a593Smuzhiyun 	    TP_fast_assign(
1125*4882a593Smuzhiyun 		    __entry->call = call->debug_id;
1126*4882a593Smuzhiyun 		    __entry->why = why;
1127*4882a593Smuzhiyun 		    __entry->slot = slot;
1128*4882a593Smuzhiyun 		    __entry->send_serial = send_serial;
1129*4882a593Smuzhiyun 		    __entry->resp_serial = resp_serial;
1130*4882a593Smuzhiyun 		    __entry->rtt = rtt;
1131*4882a593Smuzhiyun 		    __entry->rto = rto;
1132*4882a593Smuzhiyun 			   ),
1133*4882a593Smuzhiyun 
1134*4882a593Smuzhiyun 	    TP_printk("c=%08x [%d] %s sr=%08x rr=%08x rtt=%u rto=%u",
1135*4882a593Smuzhiyun 		      __entry->call,
1136*4882a593Smuzhiyun 		      __entry->slot,
1137*4882a593Smuzhiyun 		      __print_symbolic(__entry->why, rxrpc_rtt_rx_traces),
1138*4882a593Smuzhiyun 		      __entry->send_serial,
1139*4882a593Smuzhiyun 		      __entry->resp_serial,
1140*4882a593Smuzhiyun 		      __entry->rtt,
1141*4882a593Smuzhiyun 		      __entry->rto)
1142*4882a593Smuzhiyun 	    );
1143*4882a593Smuzhiyun 
1144*4882a593Smuzhiyun TRACE_EVENT(rxrpc_timer,
1145*4882a593Smuzhiyun 	    TP_PROTO(struct rxrpc_call *call, enum rxrpc_timer_trace why,
1146*4882a593Smuzhiyun 		     unsigned long now),
1147*4882a593Smuzhiyun 
1148*4882a593Smuzhiyun 	    TP_ARGS(call, why, now),
1149*4882a593Smuzhiyun 
1150*4882a593Smuzhiyun 	    TP_STRUCT__entry(
1151*4882a593Smuzhiyun 		    __field(unsigned int,			call		)
1152*4882a593Smuzhiyun 		    __field(enum rxrpc_timer_trace,		why		)
1153*4882a593Smuzhiyun 		    __field(long,				now		)
1154*4882a593Smuzhiyun 		    __field(long,				ack_at		)
1155*4882a593Smuzhiyun 		    __field(long,				ack_lost_at	)
1156*4882a593Smuzhiyun 		    __field(long,				resend_at	)
1157*4882a593Smuzhiyun 		    __field(long,				ping_at		)
1158*4882a593Smuzhiyun 		    __field(long,				expect_rx_by	)
1159*4882a593Smuzhiyun 		    __field(long,				expect_req_by	)
1160*4882a593Smuzhiyun 		    __field(long,				expect_term_by	)
1161*4882a593Smuzhiyun 		    __field(long,				timer		)
1162*4882a593Smuzhiyun 			     ),
1163*4882a593Smuzhiyun 
1164*4882a593Smuzhiyun 	    TP_fast_assign(
1165*4882a593Smuzhiyun 		    __entry->call		= call->debug_id;
1166*4882a593Smuzhiyun 		    __entry->why		= why;
1167*4882a593Smuzhiyun 		    __entry->now		= now;
1168*4882a593Smuzhiyun 		    __entry->ack_at		= call->ack_at;
1169*4882a593Smuzhiyun 		    __entry->ack_lost_at	= call->ack_lost_at;
1170*4882a593Smuzhiyun 		    __entry->resend_at		= call->resend_at;
1171*4882a593Smuzhiyun 		    __entry->expect_rx_by	= call->expect_rx_by;
1172*4882a593Smuzhiyun 		    __entry->expect_req_by	= call->expect_req_by;
1173*4882a593Smuzhiyun 		    __entry->expect_term_by	= call->expect_term_by;
1174*4882a593Smuzhiyun 		    __entry->timer		= call->timer.expires;
1175*4882a593Smuzhiyun 			   ),
1176*4882a593Smuzhiyun 
1177*4882a593Smuzhiyun 	    TP_printk("c=%08x %s a=%ld la=%ld r=%ld xr=%ld xq=%ld xt=%ld t=%ld",
1178*4882a593Smuzhiyun 		      __entry->call,
1179*4882a593Smuzhiyun 		      __print_symbolic(__entry->why, rxrpc_timer_traces),
1180*4882a593Smuzhiyun 		      __entry->ack_at - __entry->now,
1181*4882a593Smuzhiyun 		      __entry->ack_lost_at - __entry->now,
1182*4882a593Smuzhiyun 		      __entry->resend_at - __entry->now,
1183*4882a593Smuzhiyun 		      __entry->expect_rx_by - __entry->now,
1184*4882a593Smuzhiyun 		      __entry->expect_req_by - __entry->now,
1185*4882a593Smuzhiyun 		      __entry->expect_term_by - __entry->now,
1186*4882a593Smuzhiyun 		      __entry->timer - __entry->now)
1187*4882a593Smuzhiyun 	    );
1188*4882a593Smuzhiyun 
1189*4882a593Smuzhiyun TRACE_EVENT(rxrpc_rx_lose,
1190*4882a593Smuzhiyun 	    TP_PROTO(struct rxrpc_skb_priv *sp),
1191*4882a593Smuzhiyun 
1192*4882a593Smuzhiyun 	    TP_ARGS(sp),
1193*4882a593Smuzhiyun 
1194*4882a593Smuzhiyun 	    TP_STRUCT__entry(
1195*4882a593Smuzhiyun 		    __field_struct(struct rxrpc_host_header,	hdr		)
1196*4882a593Smuzhiyun 			     ),
1197*4882a593Smuzhiyun 
1198*4882a593Smuzhiyun 	    TP_fast_assign(
1199*4882a593Smuzhiyun 		    memcpy(&__entry->hdr, &sp->hdr, sizeof(__entry->hdr));
1200*4882a593Smuzhiyun 			   ),
1201*4882a593Smuzhiyun 
1202*4882a593Smuzhiyun 	    TP_printk("%08x:%08x:%08x:%04x %08x %08x %02x %02x %s *LOSE*",
1203*4882a593Smuzhiyun 		      __entry->hdr.epoch, __entry->hdr.cid,
1204*4882a593Smuzhiyun 		      __entry->hdr.callNumber, __entry->hdr.serviceId,
1205*4882a593Smuzhiyun 		      __entry->hdr.serial, __entry->hdr.seq,
1206*4882a593Smuzhiyun 		      __entry->hdr.type, __entry->hdr.flags,
1207*4882a593Smuzhiyun 		      __entry->hdr.type <= 15 ?
1208*4882a593Smuzhiyun 		      __print_symbolic(__entry->hdr.type, rxrpc_pkts) : "?UNK")
1209*4882a593Smuzhiyun 	    );
1210*4882a593Smuzhiyun 
1211*4882a593Smuzhiyun TRACE_EVENT(rxrpc_propose_ack,
1212*4882a593Smuzhiyun 	    TP_PROTO(struct rxrpc_call *call, enum rxrpc_propose_ack_trace why,
1213*4882a593Smuzhiyun 		     u8 ack_reason, rxrpc_serial_t serial, bool immediate,
1214*4882a593Smuzhiyun 		     bool background, enum rxrpc_propose_ack_outcome outcome),
1215*4882a593Smuzhiyun 
1216*4882a593Smuzhiyun 	    TP_ARGS(call, why, ack_reason, serial, immediate, background,
1217*4882a593Smuzhiyun 		    outcome),
1218*4882a593Smuzhiyun 
1219*4882a593Smuzhiyun 	    TP_STRUCT__entry(
1220*4882a593Smuzhiyun 		    __field(unsigned int,			call		)
1221*4882a593Smuzhiyun 		    __field(enum rxrpc_propose_ack_trace,	why		)
1222*4882a593Smuzhiyun 		    __field(rxrpc_serial_t,			serial		)
1223*4882a593Smuzhiyun 		    __field(u8,					ack_reason	)
1224*4882a593Smuzhiyun 		    __field(bool,				immediate	)
1225*4882a593Smuzhiyun 		    __field(bool,				background	)
1226*4882a593Smuzhiyun 		    __field(enum rxrpc_propose_ack_outcome,	outcome		)
1227*4882a593Smuzhiyun 			     ),
1228*4882a593Smuzhiyun 
1229*4882a593Smuzhiyun 	    TP_fast_assign(
1230*4882a593Smuzhiyun 		    __entry->call	= call->debug_id;
1231*4882a593Smuzhiyun 		    __entry->why	= why;
1232*4882a593Smuzhiyun 		    __entry->serial	= serial;
1233*4882a593Smuzhiyun 		    __entry->ack_reason	= ack_reason;
1234*4882a593Smuzhiyun 		    __entry->immediate	= immediate;
1235*4882a593Smuzhiyun 		    __entry->background	= background;
1236*4882a593Smuzhiyun 		    __entry->outcome	= outcome;
1237*4882a593Smuzhiyun 			   ),
1238*4882a593Smuzhiyun 
1239*4882a593Smuzhiyun 	    TP_printk("c=%08x %s %s r=%08x i=%u b=%u%s",
1240*4882a593Smuzhiyun 		      __entry->call,
1241*4882a593Smuzhiyun 		      __print_symbolic(__entry->why, rxrpc_propose_ack_traces),
1242*4882a593Smuzhiyun 		      __print_symbolic(__entry->ack_reason, rxrpc_ack_names),
1243*4882a593Smuzhiyun 		      __entry->serial,
1244*4882a593Smuzhiyun 		      __entry->immediate,
1245*4882a593Smuzhiyun 		      __entry->background,
1246*4882a593Smuzhiyun 		      __print_symbolic(__entry->outcome, rxrpc_propose_ack_outcomes))
1247*4882a593Smuzhiyun 	    );
1248*4882a593Smuzhiyun 
1249*4882a593Smuzhiyun TRACE_EVENT(rxrpc_retransmit,
1250*4882a593Smuzhiyun 	    TP_PROTO(struct rxrpc_call *call, rxrpc_seq_t seq, u8 annotation,
1251*4882a593Smuzhiyun 		     s64 expiry),
1252*4882a593Smuzhiyun 
1253*4882a593Smuzhiyun 	    TP_ARGS(call, seq, annotation, expiry),
1254*4882a593Smuzhiyun 
1255*4882a593Smuzhiyun 	    TP_STRUCT__entry(
1256*4882a593Smuzhiyun 		    __field(unsigned int,		call		)
1257*4882a593Smuzhiyun 		    __field(rxrpc_seq_t,		seq		)
1258*4882a593Smuzhiyun 		    __field(u8,				annotation	)
1259*4882a593Smuzhiyun 		    __field(s64,			expiry		)
1260*4882a593Smuzhiyun 			     ),
1261*4882a593Smuzhiyun 
1262*4882a593Smuzhiyun 	    TP_fast_assign(
1263*4882a593Smuzhiyun 		    __entry->call = call->debug_id;
1264*4882a593Smuzhiyun 		    __entry->seq = seq;
1265*4882a593Smuzhiyun 		    __entry->annotation = annotation;
1266*4882a593Smuzhiyun 		    __entry->expiry = expiry;
1267*4882a593Smuzhiyun 			   ),
1268*4882a593Smuzhiyun 
1269*4882a593Smuzhiyun 	    TP_printk("c=%08x q=%x a=%02x xp=%lld",
1270*4882a593Smuzhiyun 		      __entry->call,
1271*4882a593Smuzhiyun 		      __entry->seq,
1272*4882a593Smuzhiyun 		      __entry->annotation,
1273*4882a593Smuzhiyun 		      __entry->expiry)
1274*4882a593Smuzhiyun 	    );
1275*4882a593Smuzhiyun 
1276*4882a593Smuzhiyun TRACE_EVENT(rxrpc_congest,
1277*4882a593Smuzhiyun 	    TP_PROTO(struct rxrpc_call *call, struct rxrpc_ack_summary *summary,
1278*4882a593Smuzhiyun 		     rxrpc_serial_t ack_serial, enum rxrpc_congest_change change),
1279*4882a593Smuzhiyun 
1280*4882a593Smuzhiyun 	    TP_ARGS(call, summary, ack_serial, change),
1281*4882a593Smuzhiyun 
1282*4882a593Smuzhiyun 	    TP_STRUCT__entry(
1283*4882a593Smuzhiyun 		    __field(unsigned int,			call		)
1284*4882a593Smuzhiyun 		    __field(enum rxrpc_congest_change,		change		)
1285*4882a593Smuzhiyun 		    __field(rxrpc_seq_t,			hard_ack	)
1286*4882a593Smuzhiyun 		    __field(rxrpc_seq_t,			top		)
1287*4882a593Smuzhiyun 		    __field(rxrpc_seq_t,			lowest_nak	)
1288*4882a593Smuzhiyun 		    __field(rxrpc_serial_t,			ack_serial	)
1289*4882a593Smuzhiyun 		    __field_struct(struct rxrpc_ack_summary,	sum		)
1290*4882a593Smuzhiyun 			     ),
1291*4882a593Smuzhiyun 
1292*4882a593Smuzhiyun 	    TP_fast_assign(
1293*4882a593Smuzhiyun 		    __entry->call	= call->debug_id;
1294*4882a593Smuzhiyun 		    __entry->change	= change;
1295*4882a593Smuzhiyun 		    __entry->hard_ack	= call->tx_hard_ack;
1296*4882a593Smuzhiyun 		    __entry->top	= call->tx_top;
1297*4882a593Smuzhiyun 		    __entry->lowest_nak	= call->acks_lowest_nak;
1298*4882a593Smuzhiyun 		    __entry->ack_serial	= ack_serial;
1299*4882a593Smuzhiyun 		    memcpy(&__entry->sum, summary, sizeof(__entry->sum));
1300*4882a593Smuzhiyun 			   ),
1301*4882a593Smuzhiyun 
1302*4882a593Smuzhiyun 	    TP_printk("c=%08x r=%08x %s q=%08x %s cw=%u ss=%u nr=%u,%u nw=%u,%u r=%u b=%u u=%u d=%u l=%x%s%s%s",
1303*4882a593Smuzhiyun 		      __entry->call,
1304*4882a593Smuzhiyun 		      __entry->ack_serial,
1305*4882a593Smuzhiyun 		      __print_symbolic(__entry->sum.ack_reason, rxrpc_ack_names),
1306*4882a593Smuzhiyun 		      __entry->hard_ack,
1307*4882a593Smuzhiyun 		      __print_symbolic(__entry->sum.mode, rxrpc_congest_modes),
1308*4882a593Smuzhiyun 		      __entry->sum.cwnd,
1309*4882a593Smuzhiyun 		      __entry->sum.ssthresh,
1310*4882a593Smuzhiyun 		      __entry->sum.nr_acks, __entry->sum.nr_nacks,
1311*4882a593Smuzhiyun 		      __entry->sum.nr_new_acks, __entry->sum.nr_new_nacks,
1312*4882a593Smuzhiyun 		      __entry->sum.nr_rot_new_acks,
1313*4882a593Smuzhiyun 		      __entry->top - __entry->hard_ack,
1314*4882a593Smuzhiyun 		      __entry->sum.cumulative_acks,
1315*4882a593Smuzhiyun 		      __entry->sum.dup_acks,
1316*4882a593Smuzhiyun 		      __entry->lowest_nak, __entry->sum.new_low_nack ? "!" : "",
1317*4882a593Smuzhiyun 		      __print_symbolic(__entry->change, rxrpc_congest_changes),
1318*4882a593Smuzhiyun 		      __entry->sum.retrans_timeo ? " rTxTo" : "")
1319*4882a593Smuzhiyun 	    );
1320*4882a593Smuzhiyun 
1321*4882a593Smuzhiyun TRACE_EVENT(rxrpc_disconnect_call,
1322*4882a593Smuzhiyun 	    TP_PROTO(struct rxrpc_call *call),
1323*4882a593Smuzhiyun 
1324*4882a593Smuzhiyun 	    TP_ARGS(call),
1325*4882a593Smuzhiyun 
1326*4882a593Smuzhiyun 	    TP_STRUCT__entry(
1327*4882a593Smuzhiyun 		    __field(unsigned int,		call		)
1328*4882a593Smuzhiyun 		    __field(u32,			abort_code	)
1329*4882a593Smuzhiyun 			     ),
1330*4882a593Smuzhiyun 
1331*4882a593Smuzhiyun 	    TP_fast_assign(
1332*4882a593Smuzhiyun 		    __entry->call = call->debug_id;
1333*4882a593Smuzhiyun 		    __entry->abort_code = call->abort_code;
1334*4882a593Smuzhiyun 			   ),
1335*4882a593Smuzhiyun 
1336*4882a593Smuzhiyun 	    TP_printk("c=%08x ab=%08x",
1337*4882a593Smuzhiyun 		      __entry->call,
1338*4882a593Smuzhiyun 		      __entry->abort_code)
1339*4882a593Smuzhiyun 	    );
1340*4882a593Smuzhiyun 
1341*4882a593Smuzhiyun TRACE_EVENT(rxrpc_improper_term,
1342*4882a593Smuzhiyun 	    TP_PROTO(struct rxrpc_call *call),
1343*4882a593Smuzhiyun 
1344*4882a593Smuzhiyun 	    TP_ARGS(call),
1345*4882a593Smuzhiyun 
1346*4882a593Smuzhiyun 	    TP_STRUCT__entry(
1347*4882a593Smuzhiyun 		    __field(unsigned int,		call		)
1348*4882a593Smuzhiyun 		    __field(u32,			abort_code	)
1349*4882a593Smuzhiyun 			     ),
1350*4882a593Smuzhiyun 
1351*4882a593Smuzhiyun 	    TP_fast_assign(
1352*4882a593Smuzhiyun 		    __entry->call = call->debug_id;
1353*4882a593Smuzhiyun 		    __entry->abort_code = call->abort_code;
1354*4882a593Smuzhiyun 			   ),
1355*4882a593Smuzhiyun 
1356*4882a593Smuzhiyun 	    TP_printk("c=%08x ab=%08x",
1357*4882a593Smuzhiyun 		      __entry->call,
1358*4882a593Smuzhiyun 		      __entry->abort_code)
1359*4882a593Smuzhiyun 	    );
1360*4882a593Smuzhiyun 
1361*4882a593Smuzhiyun TRACE_EVENT(rxrpc_rx_eproto,
1362*4882a593Smuzhiyun 	    TP_PROTO(struct rxrpc_call *call, rxrpc_serial_t serial,
1363*4882a593Smuzhiyun 		     const char *why),
1364*4882a593Smuzhiyun 
1365*4882a593Smuzhiyun 	    TP_ARGS(call, serial, why),
1366*4882a593Smuzhiyun 
1367*4882a593Smuzhiyun 	    TP_STRUCT__entry(
1368*4882a593Smuzhiyun 		    __field(unsigned int,		call		)
1369*4882a593Smuzhiyun 		    __field(rxrpc_serial_t,		serial		)
1370*4882a593Smuzhiyun 		    __field(const char *,		why		)
1371*4882a593Smuzhiyun 			     ),
1372*4882a593Smuzhiyun 
1373*4882a593Smuzhiyun 	    TP_fast_assign(
1374*4882a593Smuzhiyun 		    __entry->call = call ? call->debug_id : 0;
1375*4882a593Smuzhiyun 		    __entry->serial = serial;
1376*4882a593Smuzhiyun 		    __entry->why = why;
1377*4882a593Smuzhiyun 			   ),
1378*4882a593Smuzhiyun 
1379*4882a593Smuzhiyun 	    TP_printk("c=%08x EPROTO %08x %s",
1380*4882a593Smuzhiyun 		      __entry->call,
1381*4882a593Smuzhiyun 		      __entry->serial,
1382*4882a593Smuzhiyun 		      __entry->why)
1383*4882a593Smuzhiyun 	    );
1384*4882a593Smuzhiyun 
1385*4882a593Smuzhiyun TRACE_EVENT(rxrpc_connect_call,
1386*4882a593Smuzhiyun 	    TP_PROTO(struct rxrpc_call *call),
1387*4882a593Smuzhiyun 
1388*4882a593Smuzhiyun 	    TP_ARGS(call),
1389*4882a593Smuzhiyun 
1390*4882a593Smuzhiyun 	    TP_STRUCT__entry(
1391*4882a593Smuzhiyun 		    __field(unsigned int,		call		)
1392*4882a593Smuzhiyun 		    __field(unsigned long,		user_call_ID	)
1393*4882a593Smuzhiyun 		    __field(u32,			cid		)
1394*4882a593Smuzhiyun 		    __field(u32,			call_id		)
1395*4882a593Smuzhiyun 			     ),
1396*4882a593Smuzhiyun 
1397*4882a593Smuzhiyun 	    TP_fast_assign(
1398*4882a593Smuzhiyun 		    __entry->call = call->debug_id;
1399*4882a593Smuzhiyun 		    __entry->user_call_ID = call->user_call_ID;
1400*4882a593Smuzhiyun 		    __entry->cid = call->cid;
1401*4882a593Smuzhiyun 		    __entry->call_id = call->call_id;
1402*4882a593Smuzhiyun 			   ),
1403*4882a593Smuzhiyun 
1404*4882a593Smuzhiyun 	    TP_printk("c=%08x u=%p %08x:%08x",
1405*4882a593Smuzhiyun 		      __entry->call,
1406*4882a593Smuzhiyun 		      (void *)__entry->user_call_ID,
1407*4882a593Smuzhiyun 		      __entry->cid,
1408*4882a593Smuzhiyun 		      __entry->call_id)
1409*4882a593Smuzhiyun 	    );
1410*4882a593Smuzhiyun 
1411*4882a593Smuzhiyun TRACE_EVENT(rxrpc_resend,
1412*4882a593Smuzhiyun 	    TP_PROTO(struct rxrpc_call *call, int ix),
1413*4882a593Smuzhiyun 
1414*4882a593Smuzhiyun 	    TP_ARGS(call, ix),
1415*4882a593Smuzhiyun 
1416*4882a593Smuzhiyun 	    TP_STRUCT__entry(
1417*4882a593Smuzhiyun 		    __field(unsigned int,		call		)
1418*4882a593Smuzhiyun 		    __field(int,			ix		)
1419*4882a593Smuzhiyun 		    __array(u8,				anno, 64	)
1420*4882a593Smuzhiyun 			     ),
1421*4882a593Smuzhiyun 
1422*4882a593Smuzhiyun 	    TP_fast_assign(
1423*4882a593Smuzhiyun 		    __entry->call = call->debug_id;
1424*4882a593Smuzhiyun 		    __entry->ix = ix;
1425*4882a593Smuzhiyun 		    memcpy(__entry->anno, call->rxtx_annotations, 64);
1426*4882a593Smuzhiyun 			   ),
1427*4882a593Smuzhiyun 
1428*4882a593Smuzhiyun 	    TP_printk("c=%08x ix=%u a=%64phN",
1429*4882a593Smuzhiyun 		      __entry->call,
1430*4882a593Smuzhiyun 		      __entry->ix,
1431*4882a593Smuzhiyun 		      __entry->anno)
1432*4882a593Smuzhiyun 	    );
1433*4882a593Smuzhiyun 
1434*4882a593Smuzhiyun TRACE_EVENT(rxrpc_rx_icmp,
1435*4882a593Smuzhiyun 	    TP_PROTO(struct rxrpc_peer *peer, struct sock_extended_err *ee,
1436*4882a593Smuzhiyun 		     struct sockaddr_rxrpc *srx),
1437*4882a593Smuzhiyun 
1438*4882a593Smuzhiyun 	    TP_ARGS(peer, ee, srx),
1439*4882a593Smuzhiyun 
1440*4882a593Smuzhiyun 	    TP_STRUCT__entry(
1441*4882a593Smuzhiyun 		    __field(unsigned int,			peer	)
1442*4882a593Smuzhiyun 		    __field_struct(struct sock_extended_err,	ee	)
1443*4882a593Smuzhiyun 		    __field_struct(struct sockaddr_rxrpc,	srx	)
1444*4882a593Smuzhiyun 			     ),
1445*4882a593Smuzhiyun 
1446*4882a593Smuzhiyun 	    TP_fast_assign(
1447*4882a593Smuzhiyun 		    __entry->peer = peer->debug_id;
1448*4882a593Smuzhiyun 		    memcpy(&__entry->ee, ee, sizeof(__entry->ee));
1449*4882a593Smuzhiyun 		    memcpy(&__entry->srx, srx, sizeof(__entry->srx));
1450*4882a593Smuzhiyun 			   ),
1451*4882a593Smuzhiyun 
1452*4882a593Smuzhiyun 	    TP_printk("P=%08x o=%u t=%u c=%u i=%u d=%u e=%d %pISp",
1453*4882a593Smuzhiyun 		      __entry->peer,
1454*4882a593Smuzhiyun 		      __entry->ee.ee_origin,
1455*4882a593Smuzhiyun 		      __entry->ee.ee_type,
1456*4882a593Smuzhiyun 		      __entry->ee.ee_code,
1457*4882a593Smuzhiyun 		      __entry->ee.ee_info,
1458*4882a593Smuzhiyun 		      __entry->ee.ee_data,
1459*4882a593Smuzhiyun 		      __entry->ee.ee_errno,
1460*4882a593Smuzhiyun 		      &__entry->srx.transport)
1461*4882a593Smuzhiyun 	    );
1462*4882a593Smuzhiyun 
1463*4882a593Smuzhiyun TRACE_EVENT(rxrpc_tx_fail,
1464*4882a593Smuzhiyun 	    TP_PROTO(unsigned int debug_id, rxrpc_serial_t serial, int ret,
1465*4882a593Smuzhiyun 		     enum rxrpc_tx_point where),
1466*4882a593Smuzhiyun 
1467*4882a593Smuzhiyun 	    TP_ARGS(debug_id, serial, ret, where),
1468*4882a593Smuzhiyun 
1469*4882a593Smuzhiyun 	    TP_STRUCT__entry(
1470*4882a593Smuzhiyun 		    __field(unsigned int,		debug_id	)
1471*4882a593Smuzhiyun 		    __field(rxrpc_serial_t,		serial		)
1472*4882a593Smuzhiyun 		    __field(int,			ret		)
1473*4882a593Smuzhiyun 		    __field(enum rxrpc_tx_point,	where		)
1474*4882a593Smuzhiyun 			     ),
1475*4882a593Smuzhiyun 
1476*4882a593Smuzhiyun 	    TP_fast_assign(
1477*4882a593Smuzhiyun 		    __entry->debug_id = debug_id;
1478*4882a593Smuzhiyun 		    __entry->serial = serial;
1479*4882a593Smuzhiyun 		    __entry->ret = ret;
1480*4882a593Smuzhiyun 		    __entry->where = where;
1481*4882a593Smuzhiyun 			   ),
1482*4882a593Smuzhiyun 
1483*4882a593Smuzhiyun 	    TP_printk("c=%08x r=%x ret=%d %s",
1484*4882a593Smuzhiyun 		      __entry->debug_id,
1485*4882a593Smuzhiyun 		      __entry->serial,
1486*4882a593Smuzhiyun 		      __entry->ret,
1487*4882a593Smuzhiyun 		      __print_symbolic(__entry->where, rxrpc_tx_points))
1488*4882a593Smuzhiyun 	    );
1489*4882a593Smuzhiyun 
1490*4882a593Smuzhiyun TRACE_EVENT(rxrpc_call_reset,
1491*4882a593Smuzhiyun 	    TP_PROTO(struct rxrpc_call *call),
1492*4882a593Smuzhiyun 
1493*4882a593Smuzhiyun 	    TP_ARGS(call),
1494*4882a593Smuzhiyun 
1495*4882a593Smuzhiyun 	    TP_STRUCT__entry(
1496*4882a593Smuzhiyun 		    __field(unsigned int,		debug_id	)
1497*4882a593Smuzhiyun 		    __field(u32,			cid		)
1498*4882a593Smuzhiyun 		    __field(u32,			call_id		)
1499*4882a593Smuzhiyun 		    __field(rxrpc_serial_t,		call_serial	)
1500*4882a593Smuzhiyun 		    __field(rxrpc_serial_t,		conn_serial	)
1501*4882a593Smuzhiyun 		    __field(rxrpc_seq_t,		tx_seq		)
1502*4882a593Smuzhiyun 		    __field(rxrpc_seq_t,		rx_seq		)
1503*4882a593Smuzhiyun 			     ),
1504*4882a593Smuzhiyun 
1505*4882a593Smuzhiyun 	    TP_fast_assign(
1506*4882a593Smuzhiyun 		    __entry->debug_id = call->debug_id;
1507*4882a593Smuzhiyun 		    __entry->cid = call->cid;
1508*4882a593Smuzhiyun 		    __entry->call_id = call->call_id;
1509*4882a593Smuzhiyun 		    __entry->call_serial = call->rx_serial;
1510*4882a593Smuzhiyun 		    __entry->conn_serial = call->conn->hi_serial;
1511*4882a593Smuzhiyun 		    __entry->tx_seq = call->tx_hard_ack;
1512*4882a593Smuzhiyun 		    __entry->rx_seq = call->rx_hard_ack;
1513*4882a593Smuzhiyun 			   ),
1514*4882a593Smuzhiyun 
1515*4882a593Smuzhiyun 	    TP_printk("c=%08x %08x:%08x r=%08x/%08x tx=%08x rx=%08x",
1516*4882a593Smuzhiyun 		      __entry->debug_id,
1517*4882a593Smuzhiyun 		      __entry->cid, __entry->call_id,
1518*4882a593Smuzhiyun 		      __entry->call_serial, __entry->conn_serial,
1519*4882a593Smuzhiyun 		      __entry->tx_seq, __entry->rx_seq)
1520*4882a593Smuzhiyun 	    );
1521*4882a593Smuzhiyun 
1522*4882a593Smuzhiyun TRACE_EVENT(rxrpc_notify_socket,
1523*4882a593Smuzhiyun 	    TP_PROTO(unsigned int debug_id, rxrpc_serial_t serial),
1524*4882a593Smuzhiyun 
1525*4882a593Smuzhiyun 	    TP_ARGS(debug_id, serial),
1526*4882a593Smuzhiyun 
1527*4882a593Smuzhiyun 	    TP_STRUCT__entry(
1528*4882a593Smuzhiyun 		    __field(unsigned int,		debug_id	)
1529*4882a593Smuzhiyun 		    __field(rxrpc_serial_t,		serial		)
1530*4882a593Smuzhiyun 			     ),
1531*4882a593Smuzhiyun 
1532*4882a593Smuzhiyun 	    TP_fast_assign(
1533*4882a593Smuzhiyun 		    __entry->debug_id = debug_id;
1534*4882a593Smuzhiyun 		    __entry->serial = serial;
1535*4882a593Smuzhiyun 			   ),
1536*4882a593Smuzhiyun 
1537*4882a593Smuzhiyun 	    TP_printk("c=%08x r=%08x",
1538*4882a593Smuzhiyun 		      __entry->debug_id,
1539*4882a593Smuzhiyun 		      __entry->serial)
1540*4882a593Smuzhiyun 	    );
1541*4882a593Smuzhiyun 
1542*4882a593Smuzhiyun TRACE_EVENT(rxrpc_rx_discard_ack,
1543*4882a593Smuzhiyun 	    TP_PROTO(unsigned int debug_id, rxrpc_serial_t serial,
1544*4882a593Smuzhiyun 		     rxrpc_seq_t first_soft_ack, rxrpc_seq_t call_ackr_first,
1545*4882a593Smuzhiyun 		     rxrpc_seq_t prev_pkt, rxrpc_seq_t call_ackr_prev),
1546*4882a593Smuzhiyun 
1547*4882a593Smuzhiyun 	    TP_ARGS(debug_id, serial, first_soft_ack, call_ackr_first,
1548*4882a593Smuzhiyun 		    prev_pkt, call_ackr_prev),
1549*4882a593Smuzhiyun 
1550*4882a593Smuzhiyun 	    TP_STRUCT__entry(
1551*4882a593Smuzhiyun 		    __field(unsigned int,	debug_id	)
1552*4882a593Smuzhiyun 		    __field(rxrpc_serial_t,	serial		)
1553*4882a593Smuzhiyun 		    __field(rxrpc_seq_t,	first_soft_ack)
1554*4882a593Smuzhiyun 		    __field(rxrpc_seq_t,	call_ackr_first)
1555*4882a593Smuzhiyun 		    __field(rxrpc_seq_t,	prev_pkt)
1556*4882a593Smuzhiyun 		    __field(rxrpc_seq_t,	call_ackr_prev)
1557*4882a593Smuzhiyun 			     ),
1558*4882a593Smuzhiyun 
1559*4882a593Smuzhiyun 	    TP_fast_assign(
1560*4882a593Smuzhiyun 		    __entry->debug_id		= debug_id;
1561*4882a593Smuzhiyun 		    __entry->serial		= serial;
1562*4882a593Smuzhiyun 		    __entry->first_soft_ack	= first_soft_ack;
1563*4882a593Smuzhiyun 		    __entry->call_ackr_first	= call_ackr_first;
1564*4882a593Smuzhiyun 		    __entry->prev_pkt		= prev_pkt;
1565*4882a593Smuzhiyun 		    __entry->call_ackr_prev	= call_ackr_prev;
1566*4882a593Smuzhiyun 			   ),
1567*4882a593Smuzhiyun 
1568*4882a593Smuzhiyun 	    TP_printk("c=%08x r=%08x %08x<%08x %08x<%08x",
1569*4882a593Smuzhiyun 		      __entry->debug_id,
1570*4882a593Smuzhiyun 		      __entry->serial,
1571*4882a593Smuzhiyun 		      __entry->first_soft_ack,
1572*4882a593Smuzhiyun 		      __entry->call_ackr_first,
1573*4882a593Smuzhiyun 		      __entry->prev_pkt,
1574*4882a593Smuzhiyun 		      __entry->call_ackr_prev)
1575*4882a593Smuzhiyun 	    );
1576*4882a593Smuzhiyun 
1577*4882a593Smuzhiyun #endif /* _TRACE_RXRPC_H */
1578*4882a593Smuzhiyun 
1579*4882a593Smuzhiyun /* This part must be outside protection */
1580*4882a593Smuzhiyun #include <trace/define_trace.h>
1581