xref: /openbmc/linux/include/trace/events/rxrpc.h (revision a3868bfc8d5b0f36c784deab644ee1d2b0e6974b)
1df844fd4SDavid Howells /* AF_RXRPC tracepoints
2df844fd4SDavid Howells  *
3df844fd4SDavid Howells  * Copyright (C) 2016 Red Hat, Inc. All Rights Reserved.
4df844fd4SDavid Howells  * Written by David Howells (dhowells@redhat.com)
5df844fd4SDavid Howells  *
6df844fd4SDavid Howells  * This program is free software; you can redistribute it and/or
7df844fd4SDavid Howells  * modify it under the terms of the GNU General Public Licence
8df844fd4SDavid Howells  * as published by the Free Software Foundation; either version
9df844fd4SDavid Howells  * 2 of the Licence, or (at your option) any later version.
10df844fd4SDavid Howells  */
11df844fd4SDavid Howells #undef TRACE_SYSTEM
12df844fd4SDavid Howells #define TRACE_SYSTEM rxrpc
13df844fd4SDavid Howells 
14df844fd4SDavid Howells #if !defined(_TRACE_RXRPC_H) || defined(TRACE_HEADER_MULTI_READ)
15df844fd4SDavid Howells #define _TRACE_RXRPC_H
16df844fd4SDavid Howells 
17df844fd4SDavid Howells #include <linux/tracepoint.h>
18df844fd4SDavid Howells 
19e34d4234SDavid Howells TRACE_EVENT(rxrpc_call,
20fff72429SDavid Howells 	    TP_PROTO(struct rxrpc_call *call, enum rxrpc_call_trace op,
212ab27215SDavid Howells 		     int usage, const void *where, const void *aux),
22e34d4234SDavid Howells 
232ab27215SDavid Howells 	    TP_ARGS(call, op, usage, where, aux),
24e34d4234SDavid Howells 
25e34d4234SDavid Howells 	    TP_STRUCT__entry(
26e34d4234SDavid Howells 		    __field(struct rxrpc_call *,	call		)
27e34d4234SDavid Howells 		    __field(int,			op		)
28e34d4234SDavid Howells 		    __field(int,			usage		)
29e34d4234SDavid Howells 		    __field(const void *,		where		)
30e34d4234SDavid Howells 		    __field(const void *,		aux		)
31e34d4234SDavid Howells 			     ),
32e34d4234SDavid Howells 
33e34d4234SDavid Howells 	    TP_fast_assign(
34e34d4234SDavid Howells 		    __entry->call = call;
35e34d4234SDavid Howells 		    __entry->op = op;
36e34d4234SDavid Howells 		    __entry->usage = usage;
37e34d4234SDavid Howells 		    __entry->where = where;
38e34d4234SDavid Howells 		    __entry->aux = aux;
39e34d4234SDavid Howells 			   ),
40e34d4234SDavid Howells 
412ab27215SDavid Howells 	    TP_printk("c=%p %s u=%d sp=%pSR a=%p",
42e34d4234SDavid Howells 		      __entry->call,
43fff72429SDavid Howells 		      rxrpc_call_traces[__entry->op],
44e34d4234SDavid Howells 		      __entry->usage,
45e34d4234SDavid Howells 		      __entry->where,
46e34d4234SDavid Howells 		      __entry->aux)
47e34d4234SDavid Howells 	    );
48e34d4234SDavid Howells 
49df844fd4SDavid Howells TRACE_EVENT(rxrpc_skb,
50df844fd4SDavid Howells 	    TP_PROTO(struct sk_buff *skb, int op, int usage, int mod_count,
51df844fd4SDavid Howells 		     const void *where),
52df844fd4SDavid Howells 
53df844fd4SDavid Howells 	    TP_ARGS(skb, op, usage, mod_count, where),
54df844fd4SDavid Howells 
55df844fd4SDavid Howells 	    TP_STRUCT__entry(
56df844fd4SDavid Howells 		    __field(struct sk_buff *,		skb		)
57df844fd4SDavid Howells 		    __field(int,			op		)
58df844fd4SDavid Howells 		    __field(int,			usage		)
59df844fd4SDavid Howells 		    __field(int,			mod_count	)
60df844fd4SDavid Howells 		    __field(const void *,		where		)
61df844fd4SDavid Howells 			     ),
62df844fd4SDavid Howells 
63df844fd4SDavid Howells 	    TP_fast_assign(
64df844fd4SDavid Howells 		    __entry->skb = skb;
65df844fd4SDavid Howells 		    __entry->op = op;
66df844fd4SDavid Howells 		    __entry->usage = usage;
67df844fd4SDavid Howells 		    __entry->mod_count = mod_count;
68df844fd4SDavid Howells 		    __entry->where = where;
69df844fd4SDavid Howells 			   ),
70df844fd4SDavid Howells 
71df844fd4SDavid Howells 	    TP_printk("s=%p %s u=%d m=%d p=%pSR",
72df844fd4SDavid Howells 		      __entry->skb,
73df844fd4SDavid Howells 		      (__entry->op == 0 ? "NEW" :
74df844fd4SDavid Howells 		       __entry->op == 1 ? "SEE" :
75df844fd4SDavid Howells 		       __entry->op == 2 ? "GET" :
76df844fd4SDavid Howells 		       __entry->op == 3 ? "FRE" :
77df844fd4SDavid Howells 		       "PUR"),
78df844fd4SDavid Howells 		      __entry->usage,
79df844fd4SDavid Howells 		      __entry->mod_count,
80df844fd4SDavid Howells 		      __entry->where)
81df844fd4SDavid Howells 	    );
82df844fd4SDavid Howells 
8349e19ec7SDavid Howells TRACE_EVENT(rxrpc_rx_packet,
8449e19ec7SDavid Howells 	    TP_PROTO(struct rxrpc_skb_priv *sp),
8549e19ec7SDavid Howells 
8649e19ec7SDavid Howells 	    TP_ARGS(sp),
8749e19ec7SDavid Howells 
8849e19ec7SDavid Howells 	    TP_STRUCT__entry(
8949e19ec7SDavid Howells 		    __field_struct(struct rxrpc_host_header,	hdr		)
9049e19ec7SDavid Howells 			     ),
9149e19ec7SDavid Howells 
9249e19ec7SDavid Howells 	    TP_fast_assign(
9349e19ec7SDavid Howells 		    memcpy(&__entry->hdr, &sp->hdr, sizeof(__entry->hdr));
9449e19ec7SDavid Howells 			   ),
9549e19ec7SDavid Howells 
96*a3868bfcSDavid Howells 	    TP_printk("%08x:%08x:%08x:%04x %08x %08x %02x %02x %s",
9749e19ec7SDavid Howells 		      __entry->hdr.epoch, __entry->hdr.cid,
9849e19ec7SDavid Howells 		      __entry->hdr.callNumber, __entry->hdr.serviceId,
9949e19ec7SDavid Howells 		      __entry->hdr.serial, __entry->hdr.seq,
100*a3868bfcSDavid Howells 		      __entry->hdr.type, __entry->hdr.flags,
101*a3868bfcSDavid Howells 		      __entry->hdr.type <= 15 ? rxrpc_pkts[__entry->hdr.type] : "?UNK")
10249e19ec7SDavid Howells 	    );
10349e19ec7SDavid Howells 
10449e19ec7SDavid Howells TRACE_EVENT(rxrpc_rx_done,
10549e19ec7SDavid Howells 	    TP_PROTO(int result, int abort_code),
10649e19ec7SDavid Howells 
10749e19ec7SDavid Howells 	    TP_ARGS(result, abort_code),
10849e19ec7SDavid Howells 
10949e19ec7SDavid Howells 	    TP_STRUCT__entry(
11049e19ec7SDavid Howells 		    __field(int,			result		)
11149e19ec7SDavid Howells 		    __field(int,			abort_code	)
11249e19ec7SDavid Howells 			     ),
11349e19ec7SDavid Howells 
11449e19ec7SDavid Howells 	    TP_fast_assign(
11549e19ec7SDavid Howells 		    __entry->result = result;
11649e19ec7SDavid Howells 		    __entry->abort_code = abort_code;
11749e19ec7SDavid Howells 			   ),
11849e19ec7SDavid Howells 
11949e19ec7SDavid Howells 	    TP_printk("r=%d a=%d", __entry->result, __entry->abort_code)
12049e19ec7SDavid Howells 	    );
12149e19ec7SDavid Howells 
1225a42976dSDavid Howells TRACE_EVENT(rxrpc_abort,
1235a42976dSDavid Howells 	    TP_PROTO(const char *why, u32 cid, u32 call_id, rxrpc_seq_t seq,
1245a42976dSDavid Howells 		     int abort_code, int error),
1255a42976dSDavid Howells 
1265a42976dSDavid Howells 	    TP_ARGS(why, cid, call_id, seq, abort_code, error),
1275a42976dSDavid Howells 
1285a42976dSDavid Howells 	    TP_STRUCT__entry(
1295a42976dSDavid Howells 		    __array(char,			why, 4		)
1305a42976dSDavid Howells 		    __field(u32,			cid		)
1315a42976dSDavid Howells 		    __field(u32,			call_id		)
1325a42976dSDavid Howells 		    __field(rxrpc_seq_t,		seq		)
1335a42976dSDavid Howells 		    __field(int,			abort_code	)
1345a42976dSDavid Howells 		    __field(int,			error		)
1355a42976dSDavid Howells 			     ),
1365a42976dSDavid Howells 
1375a42976dSDavid Howells 	    TP_fast_assign(
1385a42976dSDavid Howells 		    memcpy(__entry->why, why, 4);
1395a42976dSDavid Howells 		    __entry->cid = cid;
1405a42976dSDavid Howells 		    __entry->call_id = call_id;
1415a42976dSDavid Howells 		    __entry->abort_code = abort_code;
1425a42976dSDavid Howells 		    __entry->error = error;
1435a42976dSDavid Howells 		    __entry->seq = seq;
1445a42976dSDavid Howells 			   ),
1455a42976dSDavid Howells 
1465a42976dSDavid Howells 	    TP_printk("%08x:%08x s=%u a=%d e=%d %s",
1475a42976dSDavid Howells 		      __entry->cid, __entry->call_id, __entry->seq,
1485a42976dSDavid Howells 		      __entry->abort_code, __entry->error, __entry->why)
1495a42976dSDavid Howells 	    );
1505a42976dSDavid Howells 
151df844fd4SDavid Howells #endif /* _TRACE_RXRPC_H */
152df844fd4SDavid Howells 
153df844fd4SDavid Howells /* This part must be outside protection */
154df844fd4SDavid Howells #include <trace/define_trace.h>
155