xref: /openbmc/linux/include/trace/events/xdp.h (revision e7d4798960b3ebcd243ae6a59e04d4fe6518c96c)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
2a67edbf4SDaniel Borkmann #undef TRACE_SYSTEM
3a67edbf4SDaniel Borkmann #define TRACE_SYSTEM xdp
4a67edbf4SDaniel Borkmann 
5a67edbf4SDaniel Borkmann #if !defined(_TRACE_XDP_H) || defined(TRACE_HEADER_MULTI_READ)
6a67edbf4SDaniel Borkmann #define _TRACE_XDP_H
7a67edbf4SDaniel Borkmann 
8a67edbf4SDaniel Borkmann #include <linux/netdevice.h>
9a67edbf4SDaniel Borkmann #include <linux/filter.h>
10a67edbf4SDaniel Borkmann #include <linux/tracepoint.h>
1123721a75SXie XiuQi #include <linux/bpf.h>
12a67edbf4SDaniel Borkmann 
13a67edbf4SDaniel Borkmann #define __XDP_ACT_MAP(FN)	\
14a67edbf4SDaniel Borkmann 	FN(ABORTED)		\
15a67edbf4SDaniel Borkmann 	FN(DROP)		\
16a67edbf4SDaniel Borkmann 	FN(PASS)		\
175acaee0aSJohn Fastabend 	FN(TX)			\
185acaee0aSJohn Fastabend 	FN(REDIRECT)
19a67edbf4SDaniel Borkmann 
20a67edbf4SDaniel Borkmann #define __XDP_ACT_TP_FN(x)	\
21a67edbf4SDaniel Borkmann 	TRACE_DEFINE_ENUM(XDP_##x);
22a67edbf4SDaniel Borkmann #define __XDP_ACT_SYM_FN(x)	\
23a67edbf4SDaniel Borkmann 	{ XDP_##x, #x },
24a67edbf4SDaniel Borkmann #define __XDP_ACT_SYM_TAB	\
25a67edbf4SDaniel Borkmann 	__XDP_ACT_MAP(__XDP_ACT_SYM_FN) { -1, 0 }
26a67edbf4SDaniel Borkmann __XDP_ACT_MAP(__XDP_ACT_TP_FN)
27a67edbf4SDaniel Borkmann 
28a67edbf4SDaniel Borkmann TRACE_EVENT(xdp_exception,
29a67edbf4SDaniel Borkmann 
30a67edbf4SDaniel Borkmann 	TP_PROTO(const struct net_device *dev,
31a67edbf4SDaniel Borkmann 		 const struct bpf_prog *xdp, u32 act),
32a67edbf4SDaniel Borkmann 
33a67edbf4SDaniel Borkmann 	TP_ARGS(dev, xdp, act),
34a67edbf4SDaniel Borkmann 
35a67edbf4SDaniel Borkmann 	TP_STRUCT__entry(
36b06337dfSJesper Dangaard Brouer 		__field(int, prog_id)
37a67edbf4SDaniel Borkmann 		__field(u32, act)
38315ec399SJesper Dangaard Brouer 		__field(int, ifindex)
39a67edbf4SDaniel Borkmann 	),
40a67edbf4SDaniel Borkmann 
41a67edbf4SDaniel Borkmann 	TP_fast_assign(
42b06337dfSJesper Dangaard Brouer 		__entry->prog_id	= xdp->aux->id;
43a67edbf4SDaniel Borkmann 		__entry->act		= act;
44315ec399SJesper Dangaard Brouer 		__entry->ifindex	= dev->ifindex;
45a67edbf4SDaniel Borkmann 	),
46a67edbf4SDaniel Borkmann 
47b06337dfSJesper Dangaard Brouer 	TP_printk("prog_id=%d action=%s ifindex=%d",
48b06337dfSJesper Dangaard Brouer 		  __entry->prog_id,
49315ec399SJesper Dangaard Brouer 		  __print_symbolic(__entry->act, __XDP_ACT_SYM_TAB),
50315ec399SJesper Dangaard Brouer 		  __entry->ifindex)
51a67edbf4SDaniel Borkmann );
52a67edbf4SDaniel Borkmann 
53*e7d47989SToshiaki Makita TRACE_EVENT(xdp_bulk_tx,
54*e7d47989SToshiaki Makita 
55*e7d47989SToshiaki Makita 	TP_PROTO(const struct net_device *dev,
56*e7d47989SToshiaki Makita 		 int sent, int drops, int err),
57*e7d47989SToshiaki Makita 
58*e7d47989SToshiaki Makita 	TP_ARGS(dev, sent, drops, err),
59*e7d47989SToshiaki Makita 
60*e7d47989SToshiaki Makita 	TP_STRUCT__entry(
61*e7d47989SToshiaki Makita 		__field(int, ifindex)
62*e7d47989SToshiaki Makita 		__field(u32, act)
63*e7d47989SToshiaki Makita 		__field(int, drops)
64*e7d47989SToshiaki Makita 		__field(int, sent)
65*e7d47989SToshiaki Makita 		__field(int, err)
66*e7d47989SToshiaki Makita 	),
67*e7d47989SToshiaki Makita 
68*e7d47989SToshiaki Makita 	TP_fast_assign(
69*e7d47989SToshiaki Makita 		__entry->ifindex	= dev->ifindex;
70*e7d47989SToshiaki Makita 		__entry->act		= XDP_TX;
71*e7d47989SToshiaki Makita 		__entry->drops		= drops;
72*e7d47989SToshiaki Makita 		__entry->sent		= sent;
73*e7d47989SToshiaki Makita 		__entry->err		= err;
74*e7d47989SToshiaki Makita 	),
75*e7d47989SToshiaki Makita 
76*e7d47989SToshiaki Makita 	TP_printk("ifindex=%d action=%s sent=%d drops=%d err=%d",
77*e7d47989SToshiaki Makita 		  __entry->ifindex,
78*e7d47989SToshiaki Makita 		  __print_symbolic(__entry->act, __XDP_ACT_SYM_TAB),
79*e7d47989SToshiaki Makita 		  __entry->sent, __entry->drops, __entry->err)
80*e7d47989SToshiaki Makita );
81*e7d47989SToshiaki Makita 
828d3b778fSJesper Dangaard Brouer DECLARE_EVENT_CLASS(xdp_redirect_template,
835acaee0aSJohn Fastabend 
84a8735855SJesper Dangaard Brouer 	TP_PROTO(const struct net_device *dev,
85c31e5a48SJesper Dangaard Brouer 		 const struct bpf_prog *xdp,
868d3b778fSJesper Dangaard Brouer 		 int to_ifindex, int err,
878d3b778fSJesper Dangaard Brouer 		 const struct bpf_map *map, u32 map_index),
885acaee0aSJohn Fastabend 
898d3b778fSJesper Dangaard Brouer 	TP_ARGS(dev, xdp, to_ifindex, err, map, map_index),
905acaee0aSJohn Fastabend 
915acaee0aSJohn Fastabend 	TP_STRUCT__entry(
92b06337dfSJesper Dangaard Brouer 		__field(int, prog_id)
935acaee0aSJohn Fastabend 		__field(u32, act)
94a8735855SJesper Dangaard Brouer 		__field(int, ifindex)
954c03bdd7SJesper Dangaard Brouer 		__field(int, err)
968d3b778fSJesper Dangaard Brouer 		__field(int, to_ifindex)
978d3b778fSJesper Dangaard Brouer 		__field(u32, map_id)
988d3b778fSJesper Dangaard Brouer 		__field(int, map_index)
995acaee0aSJohn Fastabend 	),
1005acaee0aSJohn Fastabend 
1015acaee0aSJohn Fastabend 	TP_fast_assign(
102b06337dfSJesper Dangaard Brouer 		__entry->prog_id	= xdp->aux->id;
103c31e5a48SJesper Dangaard Brouer 		__entry->act		= XDP_REDIRECT;
104a8735855SJesper Dangaard Brouer 		__entry->ifindex	= dev->ifindex;
1054c03bdd7SJesper Dangaard Brouer 		__entry->err		= err;
1068d3b778fSJesper Dangaard Brouer 		__entry->to_ifindex	= to_ifindex;
1078d3b778fSJesper Dangaard Brouer 		__entry->map_id		= map ? map->id : 0;
1088d3b778fSJesper Dangaard Brouer 		__entry->map_index	= map_index;
1095acaee0aSJohn Fastabend 	),
1105acaee0aSJohn Fastabend 
11159a30896SJesper Dangaard Brouer 	TP_printk("prog_id=%d action=%s ifindex=%d to_ifindex=%d err=%d",
112b06337dfSJesper Dangaard Brouer 		  __entry->prog_id,
1134c03bdd7SJesper Dangaard Brouer 		  __print_symbolic(__entry->act, __XDP_ACT_SYM_TAB),
1148d3b778fSJesper Dangaard Brouer 		  __entry->ifindex, __entry->to_ifindex,
11559a30896SJesper Dangaard Brouer 		  __entry->err)
1165acaee0aSJohn Fastabend );
1178d3b778fSJesper Dangaard Brouer 
1188d3b778fSJesper Dangaard Brouer DEFINE_EVENT(xdp_redirect_template, xdp_redirect,
1198d3b778fSJesper Dangaard Brouer 	TP_PROTO(const struct net_device *dev,
1208d3b778fSJesper Dangaard Brouer 		 const struct bpf_prog *xdp,
1218d3b778fSJesper Dangaard Brouer 		 int to_ifindex, int err,
1228d3b778fSJesper Dangaard Brouer 		 const struct bpf_map *map, u32 map_index),
1238d3b778fSJesper Dangaard Brouer 	TP_ARGS(dev, xdp, to_ifindex, err, map, map_index)
1248d3b778fSJesper Dangaard Brouer );
1258d3b778fSJesper Dangaard Brouer 
126f5836ca5SJesper Dangaard Brouer DEFINE_EVENT(xdp_redirect_template, xdp_redirect_err,
127f5836ca5SJesper Dangaard Brouer 	TP_PROTO(const struct net_device *dev,
128f5836ca5SJesper Dangaard Brouer 		 const struct bpf_prog *xdp,
129f5836ca5SJesper Dangaard Brouer 		 int to_ifindex, int err,
130f5836ca5SJesper Dangaard Brouer 		 const struct bpf_map *map, u32 map_index),
131f5836ca5SJesper Dangaard Brouer 	TP_ARGS(dev, xdp, to_ifindex, err, map, map_index)
132f5836ca5SJesper Dangaard Brouer );
1338d3b778fSJesper Dangaard Brouer 
134f5836ca5SJesper Dangaard Brouer #define _trace_xdp_redirect(dev, xdp, to)		\
135f5836ca5SJesper Dangaard Brouer 	 trace_xdp_redirect(dev, xdp, to, 0, NULL, 0);
136f5836ca5SJesper Dangaard Brouer 
137f5836ca5SJesper Dangaard Brouer #define _trace_xdp_redirect_err(dev, xdp, to, err)	\
138f5836ca5SJesper Dangaard Brouer 	 trace_xdp_redirect_err(dev, xdp, to, err, NULL, 0);
139f5836ca5SJesper Dangaard Brouer 
14059a30896SJesper Dangaard Brouer DEFINE_EVENT_PRINT(xdp_redirect_template, xdp_redirect_map,
14159a30896SJesper Dangaard Brouer 	TP_PROTO(const struct net_device *dev,
14259a30896SJesper Dangaard Brouer 		 const struct bpf_prog *xdp,
14359a30896SJesper Dangaard Brouer 		 int to_ifindex, int err,
14459a30896SJesper Dangaard Brouer 		 const struct bpf_map *map, u32 map_index),
14559a30896SJesper Dangaard Brouer 	TP_ARGS(dev, xdp, to_ifindex, err, map, map_index),
14659a30896SJesper Dangaard Brouer 	TP_printk("prog_id=%d action=%s ifindex=%d to_ifindex=%d err=%d"
14759a30896SJesper Dangaard Brouer 		  " map_id=%d map_index=%d",
14859a30896SJesper Dangaard Brouer 		  __entry->prog_id,
14959a30896SJesper Dangaard Brouer 		  __print_symbolic(__entry->act, __XDP_ACT_SYM_TAB),
15059a30896SJesper Dangaard Brouer 		  __entry->ifindex, __entry->to_ifindex,
15159a30896SJesper Dangaard Brouer 		  __entry->err,
15259a30896SJesper Dangaard Brouer 		  __entry->map_id, __entry->map_index)
15359a30896SJesper Dangaard Brouer );
154f5836ca5SJesper Dangaard Brouer 
15559a30896SJesper Dangaard Brouer DEFINE_EVENT_PRINT(xdp_redirect_template, xdp_redirect_map_err,
15659a30896SJesper Dangaard Brouer 	TP_PROTO(const struct net_device *dev,
15759a30896SJesper Dangaard Brouer 		 const struct bpf_prog *xdp,
15859a30896SJesper Dangaard Brouer 		 int to_ifindex, int err,
15959a30896SJesper Dangaard Brouer 		 const struct bpf_map *map, u32 map_index),
16059a30896SJesper Dangaard Brouer 	TP_ARGS(dev, xdp, to_ifindex, err, map, map_index),
16159a30896SJesper Dangaard Brouer 	TP_printk("prog_id=%d action=%s ifindex=%d to_ifindex=%d err=%d"
16259a30896SJesper Dangaard Brouer 		  " map_id=%d map_index=%d",
16359a30896SJesper Dangaard Brouer 		  __entry->prog_id,
16459a30896SJesper Dangaard Brouer 		  __print_symbolic(__entry->act, __XDP_ACT_SYM_TAB),
16559a30896SJesper Dangaard Brouer 		  __entry->ifindex, __entry->to_ifindex,
16659a30896SJesper Dangaard Brouer 		  __entry->err,
16759a30896SJesper Dangaard Brouer 		  __entry->map_id, __entry->map_index)
16859a30896SJesper Dangaard Brouer );
16959a30896SJesper Dangaard Brouer 
17067f29e07SJesper Dangaard Brouer #ifndef __DEVMAP_OBJ_TYPE
17167f29e07SJesper Dangaard Brouer #define __DEVMAP_OBJ_TYPE
17267f29e07SJesper Dangaard Brouer struct _bpf_dtab_netdev {
17367f29e07SJesper Dangaard Brouer 	struct net_device *dev;
17467f29e07SJesper Dangaard Brouer };
17567f29e07SJesper Dangaard Brouer #endif /* __DEVMAP_OBJ_TYPE */
17667f29e07SJesper Dangaard Brouer 
1779c270af3SJesper Dangaard Brouer #define devmap_ifindex(fwd, map)				\
1789c270af3SJesper Dangaard Brouer 	(!fwd ? 0 :						\
1799c270af3SJesper Dangaard Brouer 	 ((map->map_type == BPF_MAP_TYPE_DEVMAP) ?		\
180f6069b9aSDaniel Borkmann 	  ((struct _bpf_dtab_netdev *)fwd)->dev->ifindex : 0))
1819c270af3SJesper Dangaard Brouer 
18259a30896SJesper Dangaard Brouer #define _trace_xdp_redirect_map(dev, xdp, fwd, map, idx)		\
1839c270af3SJesper Dangaard Brouer 	 trace_xdp_redirect_map(dev, xdp, devmap_ifindex(fwd, map),	\
18496c5508eSJesper Dangaard Brouer 				0, map, idx)
18559a30896SJesper Dangaard Brouer 
18659a30896SJesper Dangaard Brouer #define _trace_xdp_redirect_map_err(dev, xdp, fwd, map, idx, err)	\
1879c270af3SJesper Dangaard Brouer 	 trace_xdp_redirect_map_err(dev, xdp, devmap_ifindex(fwd, map),	\
18896c5508eSJesper Dangaard Brouer 				    err, map, idx)
1898d3b778fSJesper Dangaard Brouer 
190f9419f7bSJesper Dangaard Brouer TRACE_EVENT(xdp_cpumap_kthread,
191f9419f7bSJesper Dangaard Brouer 
192f9419f7bSJesper Dangaard Brouer 	TP_PROTO(int map_id, unsigned int processed,  unsigned int drops,
193f9419f7bSJesper Dangaard Brouer 		 int sched),
194f9419f7bSJesper Dangaard Brouer 
195f9419f7bSJesper Dangaard Brouer 	TP_ARGS(map_id, processed, drops, sched),
196f9419f7bSJesper Dangaard Brouer 
197f9419f7bSJesper Dangaard Brouer 	TP_STRUCT__entry(
198f9419f7bSJesper Dangaard Brouer 		__field(int, map_id)
199f9419f7bSJesper Dangaard Brouer 		__field(u32, act)
200f9419f7bSJesper Dangaard Brouer 		__field(int, cpu)
201f9419f7bSJesper Dangaard Brouer 		__field(unsigned int, drops)
202f9419f7bSJesper Dangaard Brouer 		__field(unsigned int, processed)
203f9419f7bSJesper Dangaard Brouer 		__field(int, sched)
204f9419f7bSJesper Dangaard Brouer 	),
205f9419f7bSJesper Dangaard Brouer 
206f9419f7bSJesper Dangaard Brouer 	TP_fast_assign(
207f9419f7bSJesper Dangaard Brouer 		__entry->map_id		= map_id;
208f9419f7bSJesper Dangaard Brouer 		__entry->act		= XDP_REDIRECT;
209f9419f7bSJesper Dangaard Brouer 		__entry->cpu		= smp_processor_id();
210f9419f7bSJesper Dangaard Brouer 		__entry->drops		= drops;
211f9419f7bSJesper Dangaard Brouer 		__entry->processed	= processed;
212f9419f7bSJesper Dangaard Brouer 		__entry->sched	= sched;
213f9419f7bSJesper Dangaard Brouer 	),
214f9419f7bSJesper Dangaard Brouer 
215f9419f7bSJesper Dangaard Brouer 	TP_printk("kthread"
216f9419f7bSJesper Dangaard Brouer 		  " cpu=%d map_id=%d action=%s"
217f9419f7bSJesper Dangaard Brouer 		  " processed=%u drops=%u"
218f9419f7bSJesper Dangaard Brouer 		  " sched=%d",
219f9419f7bSJesper Dangaard Brouer 		  __entry->cpu, __entry->map_id,
220f9419f7bSJesper Dangaard Brouer 		  __print_symbolic(__entry->act, __XDP_ACT_SYM_TAB),
221f9419f7bSJesper Dangaard Brouer 		  __entry->processed, __entry->drops,
222f9419f7bSJesper Dangaard Brouer 		  __entry->sched)
223f9419f7bSJesper Dangaard Brouer );
224f9419f7bSJesper Dangaard Brouer 
225f9419f7bSJesper Dangaard Brouer TRACE_EVENT(xdp_cpumap_enqueue,
226f9419f7bSJesper Dangaard Brouer 
227f9419f7bSJesper Dangaard Brouer 	TP_PROTO(int map_id, unsigned int processed,  unsigned int drops,
228f9419f7bSJesper Dangaard Brouer 		 int to_cpu),
229f9419f7bSJesper Dangaard Brouer 
230f9419f7bSJesper Dangaard Brouer 	TP_ARGS(map_id, processed, drops, to_cpu),
231f9419f7bSJesper Dangaard Brouer 
232f9419f7bSJesper Dangaard Brouer 	TP_STRUCT__entry(
233f9419f7bSJesper Dangaard Brouer 		__field(int, map_id)
234f9419f7bSJesper Dangaard Brouer 		__field(u32, act)
235f9419f7bSJesper Dangaard Brouer 		__field(int, cpu)
236f9419f7bSJesper Dangaard Brouer 		__field(unsigned int, drops)
237f9419f7bSJesper Dangaard Brouer 		__field(unsigned int, processed)
238f9419f7bSJesper Dangaard Brouer 		__field(int, to_cpu)
239f9419f7bSJesper Dangaard Brouer 	),
240f9419f7bSJesper Dangaard Brouer 
241f9419f7bSJesper Dangaard Brouer 	TP_fast_assign(
242f9419f7bSJesper Dangaard Brouer 		__entry->map_id		= map_id;
243f9419f7bSJesper Dangaard Brouer 		__entry->act		= XDP_REDIRECT;
244f9419f7bSJesper Dangaard Brouer 		__entry->cpu		= smp_processor_id();
245f9419f7bSJesper Dangaard Brouer 		__entry->drops		= drops;
246f9419f7bSJesper Dangaard Brouer 		__entry->processed	= processed;
247f9419f7bSJesper Dangaard Brouer 		__entry->to_cpu		= to_cpu;
248f9419f7bSJesper Dangaard Brouer 	),
249f9419f7bSJesper Dangaard Brouer 
250f9419f7bSJesper Dangaard Brouer 	TP_printk("enqueue"
251f9419f7bSJesper Dangaard Brouer 		  " cpu=%d map_id=%d action=%s"
252f9419f7bSJesper Dangaard Brouer 		  " processed=%u drops=%u"
253f9419f7bSJesper Dangaard Brouer 		  " to_cpu=%d",
254f9419f7bSJesper Dangaard Brouer 		  __entry->cpu, __entry->map_id,
255f9419f7bSJesper Dangaard Brouer 		  __print_symbolic(__entry->act, __XDP_ACT_SYM_TAB),
256f9419f7bSJesper Dangaard Brouer 		  __entry->processed, __entry->drops,
257f9419f7bSJesper Dangaard Brouer 		  __entry->to_cpu)
258f9419f7bSJesper Dangaard Brouer );
259f9419f7bSJesper Dangaard Brouer 
26038edddb8SJesper Dangaard Brouer TRACE_EVENT(xdp_devmap_xmit,
26138edddb8SJesper Dangaard Brouer 
26238edddb8SJesper Dangaard Brouer 	TP_PROTO(const struct bpf_map *map, u32 map_index,
26338edddb8SJesper Dangaard Brouer 		 int sent, int drops,
26438edddb8SJesper Dangaard Brouer 		 const struct net_device *from_dev,
265e74de52eSJesper Dangaard Brouer 		 const struct net_device *to_dev, int err),
26638edddb8SJesper Dangaard Brouer 
267e74de52eSJesper Dangaard Brouer 	TP_ARGS(map, map_index, sent, drops, from_dev, to_dev, err),
26838edddb8SJesper Dangaard Brouer 
26938edddb8SJesper Dangaard Brouer 	TP_STRUCT__entry(
27038edddb8SJesper Dangaard Brouer 		__field(int, map_id)
27138edddb8SJesper Dangaard Brouer 		__field(u32, act)
27238edddb8SJesper Dangaard Brouer 		__field(u32, map_index)
27338edddb8SJesper Dangaard Brouer 		__field(int, drops)
27438edddb8SJesper Dangaard Brouer 		__field(int, sent)
27538edddb8SJesper Dangaard Brouer 		__field(int, from_ifindex)
27638edddb8SJesper Dangaard Brouer 		__field(int, to_ifindex)
277e74de52eSJesper Dangaard Brouer 		__field(int, err)
27838edddb8SJesper Dangaard Brouer 	),
27938edddb8SJesper Dangaard Brouer 
28038edddb8SJesper Dangaard Brouer 	TP_fast_assign(
28138edddb8SJesper Dangaard Brouer 		__entry->map_id		= map->id;
28238edddb8SJesper Dangaard Brouer 		__entry->act		= XDP_REDIRECT;
28338edddb8SJesper Dangaard Brouer 		__entry->map_index	= map_index;
28438edddb8SJesper Dangaard Brouer 		__entry->drops		= drops;
28538edddb8SJesper Dangaard Brouer 		__entry->sent		= sent;
28638edddb8SJesper Dangaard Brouer 		__entry->from_ifindex	= from_dev->ifindex;
28738edddb8SJesper Dangaard Brouer 		__entry->to_ifindex	= to_dev->ifindex;
288e74de52eSJesper Dangaard Brouer 		__entry->err		= err;
28938edddb8SJesper Dangaard Brouer 	),
29038edddb8SJesper Dangaard Brouer 
29138edddb8SJesper Dangaard Brouer 	TP_printk("ndo_xdp_xmit"
29238edddb8SJesper Dangaard Brouer 		  " map_id=%d map_index=%d action=%s"
29338edddb8SJesper Dangaard Brouer 		  " sent=%d drops=%d"
294e74de52eSJesper Dangaard Brouer 		  " from_ifindex=%d to_ifindex=%d err=%d",
29538edddb8SJesper Dangaard Brouer 		  __entry->map_id, __entry->map_index,
29638edddb8SJesper Dangaard Brouer 		  __print_symbolic(__entry->act, __XDP_ACT_SYM_TAB),
29738edddb8SJesper Dangaard Brouer 		  __entry->sent, __entry->drops,
298e74de52eSJesper Dangaard Brouer 		  __entry->from_ifindex, __entry->to_ifindex, __entry->err)
29938edddb8SJesper Dangaard Brouer );
30038edddb8SJesper Dangaard Brouer 
301f033b688SJesper Dangaard Brouer /* Expect users already include <net/xdp.h>, but not xdp_priv.h */
302f033b688SJesper Dangaard Brouer #include <net/xdp_priv.h>
303f033b688SJesper Dangaard Brouer 
304f033b688SJesper Dangaard Brouer #define __MEM_TYPE_MAP(FN)	\
305f033b688SJesper Dangaard Brouer 	FN(PAGE_SHARED)		\
306f033b688SJesper Dangaard Brouer 	FN(PAGE_ORDER0)		\
307f033b688SJesper Dangaard Brouer 	FN(PAGE_POOL)		\
308f033b688SJesper Dangaard Brouer 	FN(ZERO_COPY)
309f033b688SJesper Dangaard Brouer 
310f033b688SJesper Dangaard Brouer #define __MEM_TYPE_TP_FN(x)	\
311f033b688SJesper Dangaard Brouer 	TRACE_DEFINE_ENUM(MEM_TYPE_##x);
312f033b688SJesper Dangaard Brouer #define __MEM_TYPE_SYM_FN(x)	\
313f033b688SJesper Dangaard Brouer 	{ MEM_TYPE_##x, #x },
314f033b688SJesper Dangaard Brouer #define __MEM_TYPE_SYM_TAB	\
315f033b688SJesper Dangaard Brouer 	__MEM_TYPE_MAP(__MEM_TYPE_SYM_FN) { -1, 0 }
316f033b688SJesper Dangaard Brouer __MEM_TYPE_MAP(__MEM_TYPE_TP_FN)
317f033b688SJesper Dangaard Brouer 
318f033b688SJesper Dangaard Brouer TRACE_EVENT(mem_disconnect,
319f033b688SJesper Dangaard Brouer 
320f033b688SJesper Dangaard Brouer 	TP_PROTO(const struct xdp_mem_allocator *xa,
321f033b688SJesper Dangaard Brouer 		 bool safe_to_remove, bool force),
322f033b688SJesper Dangaard Brouer 
323f033b688SJesper Dangaard Brouer 	TP_ARGS(xa, safe_to_remove, force),
324f033b688SJesper Dangaard Brouer 
325f033b688SJesper Dangaard Brouer 	TP_STRUCT__entry(
326f033b688SJesper Dangaard Brouer 		__field(const struct xdp_mem_allocator *,	xa)
327f033b688SJesper Dangaard Brouer 		__field(u32,		mem_id)
328f033b688SJesper Dangaard Brouer 		__field(u32,		mem_type)
329f033b688SJesper Dangaard Brouer 		__field(const void *,	allocator)
330f033b688SJesper Dangaard Brouer 		__field(bool,		safe_to_remove)
331f033b688SJesper Dangaard Brouer 		__field(bool,		force)
332f033b688SJesper Dangaard Brouer 		__field(int,		disconnect_cnt)
333f033b688SJesper Dangaard Brouer 	),
334f033b688SJesper Dangaard Brouer 
335f033b688SJesper Dangaard Brouer 	TP_fast_assign(
336f033b688SJesper Dangaard Brouer 		__entry->xa		= xa;
337f033b688SJesper Dangaard Brouer 		__entry->mem_id		= xa->mem.id;
338f033b688SJesper Dangaard Brouer 		__entry->mem_type	= xa->mem.type;
339f033b688SJesper Dangaard Brouer 		__entry->allocator	= xa->allocator;
340f033b688SJesper Dangaard Brouer 		__entry->safe_to_remove	= safe_to_remove;
341f033b688SJesper Dangaard Brouer 		__entry->force		= force;
342f033b688SJesper Dangaard Brouer 		__entry->disconnect_cnt	= xa->disconnect_cnt;
343f033b688SJesper Dangaard Brouer 	),
344f033b688SJesper Dangaard Brouer 
345f033b688SJesper Dangaard Brouer 	TP_printk("mem_id=%d mem_type=%s allocator=%p"
346f033b688SJesper Dangaard Brouer 		  " safe_to_remove=%s force=%s disconnect_cnt=%d",
347f033b688SJesper Dangaard Brouer 		  __entry->mem_id,
348f033b688SJesper Dangaard Brouer 		  __print_symbolic(__entry->mem_type, __MEM_TYPE_SYM_TAB),
349f033b688SJesper Dangaard Brouer 		  __entry->allocator,
350f033b688SJesper Dangaard Brouer 		  __entry->safe_to_remove ? "true" : "false",
351f033b688SJesper Dangaard Brouer 		  __entry->force ? "true" : "false",
352f033b688SJesper Dangaard Brouer 		  __entry->disconnect_cnt
353f033b688SJesper Dangaard Brouer 	)
354f033b688SJesper Dangaard Brouer );
355f033b688SJesper Dangaard Brouer 
356f033b688SJesper Dangaard Brouer TRACE_EVENT(mem_connect,
357f033b688SJesper Dangaard Brouer 
358f033b688SJesper Dangaard Brouer 	TP_PROTO(const struct xdp_mem_allocator *xa,
359f033b688SJesper Dangaard Brouer 		 const struct xdp_rxq_info *rxq),
360f033b688SJesper Dangaard Brouer 
361f033b688SJesper Dangaard Brouer 	TP_ARGS(xa, rxq),
362f033b688SJesper Dangaard Brouer 
363f033b688SJesper Dangaard Brouer 	TP_STRUCT__entry(
364f033b688SJesper Dangaard Brouer 		__field(const struct xdp_mem_allocator *,	xa)
365f033b688SJesper Dangaard Brouer 		__field(u32,		mem_id)
366f033b688SJesper Dangaard Brouer 		__field(u32,		mem_type)
367f033b688SJesper Dangaard Brouer 		__field(const void *,	allocator)
368f033b688SJesper Dangaard Brouer 		__field(const struct xdp_rxq_info *,		rxq)
369f033b688SJesper Dangaard Brouer 		__field(int,		ifindex)
370f033b688SJesper Dangaard Brouer 	),
371f033b688SJesper Dangaard Brouer 
372f033b688SJesper Dangaard Brouer 	TP_fast_assign(
373f033b688SJesper Dangaard Brouer 		__entry->xa		= xa;
374f033b688SJesper Dangaard Brouer 		__entry->mem_id		= xa->mem.id;
375f033b688SJesper Dangaard Brouer 		__entry->mem_type	= xa->mem.type;
376f033b688SJesper Dangaard Brouer 		__entry->allocator	= xa->allocator;
377f033b688SJesper Dangaard Brouer 		__entry->rxq		= rxq;
378f033b688SJesper Dangaard Brouer 		__entry->ifindex	= rxq->dev->ifindex;
379f033b688SJesper Dangaard Brouer 	),
380f033b688SJesper Dangaard Brouer 
381f033b688SJesper Dangaard Brouer 	TP_printk("mem_id=%d mem_type=%s allocator=%p"
382f033b688SJesper Dangaard Brouer 		  " ifindex=%d",
383f033b688SJesper Dangaard Brouer 		  __entry->mem_id,
384f033b688SJesper Dangaard Brouer 		  __print_symbolic(__entry->mem_type, __MEM_TYPE_SYM_TAB),
385f033b688SJesper Dangaard Brouer 		  __entry->allocator,
386f033b688SJesper Dangaard Brouer 		  __entry->ifindex
387f033b688SJesper Dangaard Brouer 	)
388f033b688SJesper Dangaard Brouer );
389f033b688SJesper Dangaard Brouer 
390f033b688SJesper Dangaard Brouer TRACE_EVENT(mem_return_failed,
391f033b688SJesper Dangaard Brouer 
392f033b688SJesper Dangaard Brouer 	TP_PROTO(const struct xdp_mem_info *mem,
393f033b688SJesper Dangaard Brouer 		 const struct page *page),
394f033b688SJesper Dangaard Brouer 
395f033b688SJesper Dangaard Brouer 	TP_ARGS(mem, page),
396f033b688SJesper Dangaard Brouer 
397f033b688SJesper Dangaard Brouer 	TP_STRUCT__entry(
398f033b688SJesper Dangaard Brouer 		__field(const struct page *,	page)
399f033b688SJesper Dangaard Brouer 		__field(u32,		mem_id)
400f033b688SJesper Dangaard Brouer 		__field(u32,		mem_type)
401f033b688SJesper Dangaard Brouer 	),
402f033b688SJesper Dangaard Brouer 
403f033b688SJesper Dangaard Brouer 	TP_fast_assign(
404f033b688SJesper Dangaard Brouer 		__entry->page		= page;
405f033b688SJesper Dangaard Brouer 		__entry->mem_id		= mem->id;
406f033b688SJesper Dangaard Brouer 		__entry->mem_type	= mem->type;
407f033b688SJesper Dangaard Brouer 	),
408f033b688SJesper Dangaard Brouer 
409f033b688SJesper Dangaard Brouer 	TP_printk("mem_id=%d mem_type=%s page=%p",
410f033b688SJesper Dangaard Brouer 		  __entry->mem_id,
411f033b688SJesper Dangaard Brouer 		  __print_symbolic(__entry->mem_type, __MEM_TYPE_SYM_TAB),
412f033b688SJesper Dangaard Brouer 		  __entry->page
413f033b688SJesper Dangaard Brouer 	)
414f033b688SJesper Dangaard Brouer );
415f033b688SJesper Dangaard Brouer 
416a67edbf4SDaniel Borkmann #endif /* _TRACE_XDP_H */
417a67edbf4SDaniel Borkmann 
418a67edbf4SDaniel Borkmann #include <trace/define_trace.h>
419