1 /* AF_RXRPC tracepoints
3 * Copyright (C) 2016 Red Hat, Inc. All Rights Reserved.
4 * Written by David Howells (dhowells@redhat.com)
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public Licence
8 * as published by the Free Software Foundation; either version
9 * 2 of the Licence, or (at your option) any later version.
12 #define TRACE_SYSTEM rxrpc
14 #if !defined(_TRACE_RXRPC_H) || defined(TRACE_HEADER_MULTI_READ)
15 #define _TRACE_RXRPC_H
17 #include <linux/tracepoint.h>
19 TRACE_EVENT(rxrpc_conn
,
20 TP_PROTO(struct rxrpc_connection
*conn
, enum rxrpc_conn_trace op
,
21 int usage
, const void *where
),
23 TP_ARGS(conn
, op
, usage
, where
),
26 __field(struct rxrpc_connection
*, conn
)
29 __field(const void *, where
)
35 __entry
->usage
= usage
;
36 __entry
->where
= where
;
39 TP_printk("C=%p %s u=%d sp=%pSR",
41 rxrpc_conn_traces
[__entry
->op
],
46 TRACE_EVENT(rxrpc_client
,
47 TP_PROTO(struct rxrpc_connection
*conn
, int channel
,
48 enum rxrpc_client_trace op
),
50 TP_ARGS(conn
, channel
, op
),
53 __field(struct rxrpc_connection
*, conn
)
55 __field(int, channel
)
57 __field(enum rxrpc_client_trace
, op
)
58 __field(enum rxrpc_conn_cache_state
, cs
)
63 __entry
->channel
= channel
;
64 __entry
->usage
= atomic_read(&conn
->usage
);
66 __entry
->cid
= conn
->proto
.cid
;
67 __entry
->cs
= conn
->cache_state
;
70 TP_printk("C=%p h=%2d %s %s i=%08x u=%d",
73 rxrpc_client_traces
[__entry
->op
],
74 rxrpc_conn_cache_states
[__entry
->cs
],
79 TRACE_EVENT(rxrpc_call
,
80 TP_PROTO(struct rxrpc_call
*call
, enum rxrpc_call_trace op
,
81 int usage
, const void *where
, const void *aux
),
83 TP_ARGS(call
, op
, usage
, where
, aux
),
86 __field(struct rxrpc_call
*, call
)
89 __field(const void *, where
)
90 __field(const void *, aux
)
96 __entry
->usage
= usage
;
97 __entry
->where
= where
;
101 TP_printk("c=%p %s u=%d sp=%pSR a=%p",
103 rxrpc_call_traces
[__entry
->op
],
109 TRACE_EVENT(rxrpc_skb
,
110 TP_PROTO(struct sk_buff
*skb
, enum rxrpc_skb_trace op
,
111 int usage
, int mod_count
, const void *where
),
113 TP_ARGS(skb
, op
, usage
, mod_count
, where
),
116 __field(struct sk_buff
*, skb
)
117 __field(enum rxrpc_skb_trace
, op
)
119 __field(int, mod_count
)
120 __field(const void *, where
)
126 __entry
->usage
= usage
;
127 __entry
->mod_count
= mod_count
;
128 __entry
->where
= where
;
131 TP_printk("s=%p %s u=%d m=%d p=%pSR",
133 rxrpc_skb_traces
[__entry
->op
],
139 TRACE_EVENT(rxrpc_rx_packet
,
140 TP_PROTO(struct rxrpc_skb_priv
*sp
),
145 __field_struct(struct rxrpc_host_header
, hdr
)
149 memcpy(&__entry
->hdr
, &sp
->hdr
, sizeof(__entry
->hdr
));
152 TP_printk("%08x:%08x:%08x:%04x %08x %08x %02x %02x %s",
153 __entry
->hdr
.epoch
, __entry
->hdr
.cid
,
154 __entry
->hdr
.callNumber
, __entry
->hdr
.serviceId
,
155 __entry
->hdr
.serial
, __entry
->hdr
.seq
,
156 __entry
->hdr
.type
, __entry
->hdr
.flags
,
157 __entry
->hdr
.type
<= 15 ? rxrpc_pkts
[__entry
->hdr
.type
] : "?UNK")
160 TRACE_EVENT(rxrpc_rx_done
,
161 TP_PROTO(int result
, int abort_code
),
163 TP_ARGS(result
, abort_code
),
166 __field(int, result
)
167 __field(int, abort_code
)
171 __entry
->result
= result
;
172 __entry
->abort_code
= abort_code
;
175 TP_printk("r=%d a=%d", __entry
->result
, __entry
->abort_code
)
178 TRACE_EVENT(rxrpc_abort
,
179 TP_PROTO(const char *why
, u32 cid
, u32 call_id
, rxrpc_seq_t seq
,
180 int abort_code
, int error
),
182 TP_ARGS(why
, cid
, call_id
, seq
, abort_code
, error
),
185 __array(char, why
, 4 )
187 __field(u32
, call_id
)
188 __field(rxrpc_seq_t
, seq
)
189 __field(int, abort_code
)
194 memcpy(__entry
->why
, why
, 4);
196 __entry
->call_id
= call_id
;
197 __entry
->abort_code
= abort_code
;
198 __entry
->error
= error
;
202 TP_printk("%08x:%08x s=%u a=%d e=%d %s",
203 __entry
->cid
, __entry
->call_id
, __entry
->seq
,
204 __entry
->abort_code
, __entry
->error
, __entry
->why
)
207 TRACE_EVENT(rxrpc_transmit
,
208 TP_PROTO(struct rxrpc_call
*call
, enum rxrpc_transmit_trace why
),
213 __field(struct rxrpc_call
*, call
)
214 __field(enum rxrpc_transmit_trace
, why
)
215 __field(rxrpc_seq_t
, tx_hard_ack
)
216 __field(rxrpc_seq_t
, tx_top
)
220 __entry
->call
= call
;
222 __entry
->tx_hard_ack
= call
->tx_hard_ack
;
223 __entry
->tx_top
= call
->tx_top
;
226 TP_printk("c=%p %s f=%08x n=%u",
228 rxrpc_transmit_traces
[__entry
->why
],
229 __entry
->tx_hard_ack
+ 1,
230 __entry
->tx_top
- __entry
->tx_hard_ack
)
233 TRACE_EVENT(rxrpc_rx_ack
,
234 TP_PROTO(struct rxrpc_call
*call
, rxrpc_seq_t first
, u8 reason
, u8 n_acks
),
236 TP_ARGS(call
, first
, reason
, n_acks
),
239 __field(struct rxrpc_call
*, call
)
240 __field(rxrpc_seq_t
, first
)
246 __entry
->call
= call
;
247 __entry
->first
= first
;
248 __entry
->reason
= reason
;
249 __entry
->n_acks
= n_acks
;
252 TP_printk("c=%p %s f=%08x n=%u",
254 rxrpc_acks(__entry
->reason
),
259 TRACE_EVENT(rxrpc_tx_data
,
260 TP_PROTO(struct rxrpc_call
*call
, rxrpc_seq_t seq
,
261 rxrpc_serial_t serial
, u8 flags
, bool lose
),
263 TP_ARGS(call
, seq
, serial
, flags
, lose
),
266 __field(struct rxrpc_call
*, call
)
267 __field(rxrpc_seq_t
, seq
)
268 __field(rxrpc_serial_t
, serial
)
274 __entry
->call
= call
;
276 __entry
->serial
= serial
;
277 __entry
->flags
= flags
;
278 __entry
->lose
= lose
;
281 TP_printk("c=%p DATA %08x q=%08x fl=%02x%s",
286 __entry
->lose
? " *LOSE*" : "")
289 TRACE_EVENT(rxrpc_tx_ack
,
290 TP_PROTO(struct rxrpc_call
*call
, rxrpc_serial_t serial
,
291 rxrpc_seq_t ack_first
, rxrpc_serial_t ack_serial
,
292 u8 reason
, u8 n_acks
),
294 TP_ARGS(call
, serial
, ack_first
, ack_serial
, reason
, n_acks
),
297 __field(struct rxrpc_call
*, call
)
298 __field(rxrpc_serial_t
, serial
)
299 __field(rxrpc_seq_t
, ack_first
)
300 __field(rxrpc_serial_t
, ack_serial
)
306 __entry
->call
= call
;
307 __entry
->serial
= serial
;
308 __entry
->ack_first
= ack_first
;
309 __entry
->ack_serial
= ack_serial
;
310 __entry
->reason
= reason
;
311 __entry
->n_acks
= n_acks
;
314 TP_printk(" c=%p ACK %08x %s f=%08x r=%08x n=%u",
317 rxrpc_acks(__entry
->reason
),
323 TRACE_EVENT(rxrpc_receive
,
324 TP_PROTO(struct rxrpc_call
*call
, enum rxrpc_receive_trace why
,
325 rxrpc_serial_t serial
, rxrpc_seq_t seq
),
327 TP_ARGS(call
, why
, serial
, seq
),
330 __field(struct rxrpc_call
*, call
)
331 __field(enum rxrpc_receive_trace
, why
)
332 __field(rxrpc_serial_t
, serial
)
333 __field(rxrpc_seq_t
, seq
)
334 __field(rxrpc_seq_t
, hard_ack
)
335 __field(rxrpc_seq_t
, top
)
339 __entry
->call
= call
;
341 __entry
->serial
= serial
;
343 __entry
->hard_ack
= call
->rx_hard_ack
;
344 __entry
->top
= call
->rx_top
;
347 TP_printk("c=%p %s r=%08x q=%08x w=%08x-%08x",
349 rxrpc_receive_traces
[__entry
->why
],
356 TRACE_EVENT(rxrpc_recvmsg
,
357 TP_PROTO(struct rxrpc_call
*call
, enum rxrpc_recvmsg_trace why
,
358 rxrpc_seq_t seq
, unsigned int offset
, unsigned int len
,
361 TP_ARGS(call
, why
, seq
, offset
, len
, ret
),
364 __field(struct rxrpc_call
*, call
)
365 __field(enum rxrpc_recvmsg_trace
, why
)
366 __field(rxrpc_seq_t
, seq
)
367 __field(unsigned int, offset
)
368 __field(unsigned int, len
)
373 __entry
->call
= call
;
376 __entry
->offset
= offset
;
381 TP_printk("c=%p %s q=%08x o=%u l=%u ret=%d",
383 rxrpc_recvmsg_traces
[__entry
->why
],
390 TRACE_EVENT(rxrpc_rtt_tx
,
391 TP_PROTO(struct rxrpc_call
*call
, enum rxrpc_rtt_tx_trace why
,
392 rxrpc_serial_t send_serial
),
394 TP_ARGS(call
, why
, send_serial
),
397 __field(struct rxrpc_call
*, call
)
398 __field(enum rxrpc_rtt_tx_trace
, why
)
399 __field(rxrpc_serial_t
, send_serial
)
403 __entry
->call
= call
;
405 __entry
->send_serial
= send_serial
;
408 TP_printk("c=%p %s sr=%08x",
410 rxrpc_rtt_tx_traces
[__entry
->why
],
411 __entry
->send_serial
)
414 TRACE_EVENT(rxrpc_rtt_rx
,
415 TP_PROTO(struct rxrpc_call
*call
, enum rxrpc_rtt_rx_trace why
,
416 rxrpc_serial_t send_serial
, rxrpc_serial_t resp_serial
,
417 s64 rtt
, u8 nr
, s64 avg
),
419 TP_ARGS(call
, why
, send_serial
, resp_serial
, rtt
, nr
, avg
),
422 __field(struct rxrpc_call
*, call
)
423 __field(enum rxrpc_rtt_rx_trace
, why
)
425 __field(rxrpc_serial_t
, send_serial
)
426 __field(rxrpc_serial_t
, resp_serial
)
432 __entry
->call
= call
;
434 __entry
->send_serial
= send_serial
;
435 __entry
->resp_serial
= resp_serial
;
441 TP_printk("c=%p %s sr=%08x rr=%08x rtt=%lld nr=%u avg=%lld",
443 rxrpc_rtt_rx_traces
[__entry
->why
],
444 __entry
->send_serial
,
445 __entry
->resp_serial
,
451 TRACE_EVENT(rxrpc_timer
,
452 TP_PROTO(struct rxrpc_call
*call
, enum rxrpc_timer_trace why
,
455 TP_ARGS(call
, why
, now
),
458 __field(struct rxrpc_call
*, call
)
459 __field(enum rxrpc_timer_trace
, why
)
460 __field(unsigned long, now
)
461 __field(unsigned long, expire_at
)
462 __field(unsigned long, ack_at
)
463 __field(unsigned long, resend_at
)
464 __field(unsigned long, timer
)
468 __entry
->call
= call
;
471 __entry
->expire_at
= call
->expire_at
;
472 __entry
->ack_at
= call
->ack_at
;
473 __entry
->resend_at
= call
->resend_at
;
474 __entry
->timer
= call
->timer
.expires
;
477 TP_printk("c=%p %s now=%lx x=%ld a=%ld r=%ld t=%ld",
479 rxrpc_timer_traces
[__entry
->why
],
481 __entry
->expire_at
- __entry
->now
,
482 __entry
->ack_at
- __entry
->now
,
483 __entry
->resend_at
- __entry
->now
,
484 __entry
->timer
- __entry
->now
)
487 TRACE_EVENT(rxrpc_rx_lose
,
488 TP_PROTO(struct rxrpc_skb_priv
*sp
),
493 __field_struct(struct rxrpc_host_header
, hdr
)
497 memcpy(&__entry
->hdr
, &sp
->hdr
, sizeof(__entry
->hdr
));
500 TP_printk("%08x:%08x:%08x:%04x %08x %08x %02x %02x %s *LOSE*",
501 __entry
->hdr
.epoch
, __entry
->hdr
.cid
,
502 __entry
->hdr
.callNumber
, __entry
->hdr
.serviceId
,
503 __entry
->hdr
.serial
, __entry
->hdr
.seq
,
504 __entry
->hdr
.type
, __entry
->hdr
.flags
,
505 __entry
->hdr
.type
<= 15 ? rxrpc_pkts
[__entry
->hdr
.type
] : "?UNK")
508 #endif /* _TRACE_RXRPC_H */
510 /* This part must be outside protection */
511 #include <trace/define_trace.h>