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 \ 25*5e5b03d1SBen Dooks (Codethink) __XDP_ACT_MAP(__XDP_ACT_SYM_FN) { -1, NULL } 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 53e7d47989SToshiaki Makita TRACE_EVENT(xdp_bulk_tx, 54e7d47989SToshiaki Makita 55e7d47989SToshiaki Makita TP_PROTO(const struct net_device *dev, 56e7d47989SToshiaki Makita int sent, int drops, int err), 57e7d47989SToshiaki Makita 58e7d47989SToshiaki Makita TP_ARGS(dev, sent, drops, err), 59e7d47989SToshiaki Makita 60e7d47989SToshiaki Makita TP_STRUCT__entry( 61e7d47989SToshiaki Makita __field(int, ifindex) 62e7d47989SToshiaki Makita __field(u32, act) 63e7d47989SToshiaki Makita __field(int, drops) 64e7d47989SToshiaki Makita __field(int, sent) 65e7d47989SToshiaki Makita __field(int, err) 66e7d47989SToshiaki Makita ), 67e7d47989SToshiaki Makita 68e7d47989SToshiaki Makita TP_fast_assign( 69e7d47989SToshiaki Makita __entry->ifindex = dev->ifindex; 70e7d47989SToshiaki Makita __entry->act = XDP_TX; 71e7d47989SToshiaki Makita __entry->drops = drops; 72e7d47989SToshiaki Makita __entry->sent = sent; 73e7d47989SToshiaki Makita __entry->err = err; 74e7d47989SToshiaki Makita ), 75e7d47989SToshiaki Makita 76e7d47989SToshiaki Makita TP_printk("ifindex=%d action=%s sent=%d drops=%d err=%d", 77e7d47989SToshiaki Makita __entry->ifindex, 78e7d47989SToshiaki Makita __print_symbolic(__entry->act, __XDP_ACT_SYM_TAB), 79e7d47989SToshiaki Makita __entry->sent, __entry->drops, __entry->err) 80e7d47989SToshiaki Makita ); 81e7d47989SToshiaki 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) \ 1786f9d451aSToke Høiland-Jørgensen ((map->map_type == BPF_MAP_TYPE_DEVMAP || \ 1796f9d451aSToke Høiland-Jørgensen map->map_type == BPF_MAP_TYPE_DEVMAP_HASH) ? \ 18043e74c02SToke Høiland-Jørgensen ((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