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 538d3b778fSJesper Dangaard Brouer DECLARE_EVENT_CLASS(xdp_redirect_template, 545acaee0aSJohn Fastabend 55a8735855SJesper Dangaard Brouer TP_PROTO(const struct net_device *dev, 56c31e5a48SJesper Dangaard Brouer const struct bpf_prog *xdp, 578d3b778fSJesper Dangaard Brouer int to_ifindex, int err, 588d3b778fSJesper Dangaard Brouer const struct bpf_map *map, u32 map_index), 595acaee0aSJohn Fastabend 608d3b778fSJesper Dangaard Brouer TP_ARGS(dev, xdp, to_ifindex, err, map, map_index), 615acaee0aSJohn Fastabend 625acaee0aSJohn Fastabend TP_STRUCT__entry( 63b06337dfSJesper Dangaard Brouer __field(int, prog_id) 645acaee0aSJohn Fastabend __field(u32, act) 65a8735855SJesper Dangaard Brouer __field(int, ifindex) 664c03bdd7SJesper Dangaard Brouer __field(int, err) 678d3b778fSJesper Dangaard Brouer __field(int, to_ifindex) 688d3b778fSJesper Dangaard Brouer __field(u32, map_id) 698d3b778fSJesper Dangaard Brouer __field(int, map_index) 705acaee0aSJohn Fastabend ), 715acaee0aSJohn Fastabend 725acaee0aSJohn Fastabend TP_fast_assign( 73b06337dfSJesper Dangaard Brouer __entry->prog_id = xdp->aux->id; 74c31e5a48SJesper Dangaard Brouer __entry->act = XDP_REDIRECT; 75a8735855SJesper Dangaard Brouer __entry->ifindex = dev->ifindex; 764c03bdd7SJesper Dangaard Brouer __entry->err = err; 778d3b778fSJesper Dangaard Brouer __entry->to_ifindex = to_ifindex; 788d3b778fSJesper Dangaard Brouer __entry->map_id = map ? map->id : 0; 798d3b778fSJesper Dangaard Brouer __entry->map_index = map_index; 805acaee0aSJohn Fastabend ), 815acaee0aSJohn Fastabend 8259a30896SJesper Dangaard Brouer TP_printk("prog_id=%d action=%s ifindex=%d to_ifindex=%d err=%d", 83b06337dfSJesper Dangaard Brouer __entry->prog_id, 844c03bdd7SJesper Dangaard Brouer __print_symbolic(__entry->act, __XDP_ACT_SYM_TAB), 858d3b778fSJesper Dangaard Brouer __entry->ifindex, __entry->to_ifindex, 8659a30896SJesper Dangaard Brouer __entry->err) 875acaee0aSJohn Fastabend ); 888d3b778fSJesper Dangaard Brouer 898d3b778fSJesper Dangaard Brouer DEFINE_EVENT(xdp_redirect_template, xdp_redirect, 908d3b778fSJesper Dangaard Brouer TP_PROTO(const struct net_device *dev, 918d3b778fSJesper Dangaard Brouer const struct bpf_prog *xdp, 928d3b778fSJesper Dangaard Brouer int to_ifindex, int err, 938d3b778fSJesper Dangaard Brouer const struct bpf_map *map, u32 map_index), 948d3b778fSJesper Dangaard Brouer TP_ARGS(dev, xdp, to_ifindex, err, map, map_index) 958d3b778fSJesper Dangaard Brouer ); 968d3b778fSJesper Dangaard Brouer 97f5836ca5SJesper Dangaard Brouer DEFINE_EVENT(xdp_redirect_template, xdp_redirect_err, 98f5836ca5SJesper Dangaard Brouer TP_PROTO(const struct net_device *dev, 99f5836ca5SJesper Dangaard Brouer const struct bpf_prog *xdp, 100f5836ca5SJesper Dangaard Brouer int to_ifindex, int err, 101f5836ca5SJesper Dangaard Brouer const struct bpf_map *map, u32 map_index), 102f5836ca5SJesper Dangaard Brouer TP_ARGS(dev, xdp, to_ifindex, err, map, map_index) 103f5836ca5SJesper Dangaard Brouer ); 1048d3b778fSJesper Dangaard Brouer 105f5836ca5SJesper Dangaard Brouer #define _trace_xdp_redirect(dev, xdp, to) \ 106f5836ca5SJesper Dangaard Brouer trace_xdp_redirect(dev, xdp, to, 0, NULL, 0); 107f5836ca5SJesper Dangaard Brouer 108f5836ca5SJesper Dangaard Brouer #define _trace_xdp_redirect_err(dev, xdp, to, err) \ 109f5836ca5SJesper Dangaard Brouer trace_xdp_redirect_err(dev, xdp, to, err, NULL, 0); 110f5836ca5SJesper Dangaard Brouer 11159a30896SJesper Dangaard Brouer DEFINE_EVENT_PRINT(xdp_redirect_template, xdp_redirect_map, 11259a30896SJesper Dangaard Brouer TP_PROTO(const struct net_device *dev, 11359a30896SJesper Dangaard Brouer const struct bpf_prog *xdp, 11459a30896SJesper Dangaard Brouer int to_ifindex, int err, 11559a30896SJesper Dangaard Brouer const struct bpf_map *map, u32 map_index), 11659a30896SJesper Dangaard Brouer TP_ARGS(dev, xdp, to_ifindex, err, map, map_index), 11759a30896SJesper Dangaard Brouer TP_printk("prog_id=%d action=%s ifindex=%d to_ifindex=%d err=%d" 11859a30896SJesper Dangaard Brouer " map_id=%d map_index=%d", 11959a30896SJesper Dangaard Brouer __entry->prog_id, 12059a30896SJesper Dangaard Brouer __print_symbolic(__entry->act, __XDP_ACT_SYM_TAB), 12159a30896SJesper Dangaard Brouer __entry->ifindex, __entry->to_ifindex, 12259a30896SJesper Dangaard Brouer __entry->err, 12359a30896SJesper Dangaard Brouer __entry->map_id, __entry->map_index) 12459a30896SJesper Dangaard Brouer ); 125f5836ca5SJesper Dangaard Brouer 12659a30896SJesper Dangaard Brouer DEFINE_EVENT_PRINT(xdp_redirect_template, xdp_redirect_map_err, 12759a30896SJesper Dangaard Brouer TP_PROTO(const struct net_device *dev, 12859a30896SJesper Dangaard Brouer const struct bpf_prog *xdp, 12959a30896SJesper Dangaard Brouer int to_ifindex, int err, 13059a30896SJesper Dangaard Brouer const struct bpf_map *map, u32 map_index), 13159a30896SJesper Dangaard Brouer TP_ARGS(dev, xdp, to_ifindex, err, map, map_index), 13259a30896SJesper Dangaard Brouer TP_printk("prog_id=%d action=%s ifindex=%d to_ifindex=%d err=%d" 13359a30896SJesper Dangaard Brouer " map_id=%d map_index=%d", 13459a30896SJesper Dangaard Brouer __entry->prog_id, 13559a30896SJesper Dangaard Brouer __print_symbolic(__entry->act, __XDP_ACT_SYM_TAB), 13659a30896SJesper Dangaard Brouer __entry->ifindex, __entry->to_ifindex, 13759a30896SJesper Dangaard Brouer __entry->err, 13859a30896SJesper Dangaard Brouer __entry->map_id, __entry->map_index) 13959a30896SJesper Dangaard Brouer ); 14059a30896SJesper Dangaard Brouer 14167f29e07SJesper Dangaard Brouer #ifndef __DEVMAP_OBJ_TYPE 14267f29e07SJesper Dangaard Brouer #define __DEVMAP_OBJ_TYPE 14367f29e07SJesper Dangaard Brouer struct _bpf_dtab_netdev { 14467f29e07SJesper Dangaard Brouer struct net_device *dev; 14567f29e07SJesper Dangaard Brouer }; 14667f29e07SJesper Dangaard Brouer #endif /* __DEVMAP_OBJ_TYPE */ 14767f29e07SJesper Dangaard Brouer 1489c270af3SJesper Dangaard Brouer #define devmap_ifindex(fwd, map) \ 1499c270af3SJesper Dangaard Brouer (!fwd ? 0 : \ 1509c270af3SJesper Dangaard Brouer ((map->map_type == BPF_MAP_TYPE_DEVMAP) ? \ 151f6069b9aSDaniel Borkmann ((struct _bpf_dtab_netdev *)fwd)->dev->ifindex : 0)) 1529c270af3SJesper Dangaard Brouer 15359a30896SJesper Dangaard Brouer #define _trace_xdp_redirect_map(dev, xdp, fwd, map, idx) \ 1549c270af3SJesper Dangaard Brouer trace_xdp_redirect_map(dev, xdp, devmap_ifindex(fwd, map), \ 15596c5508eSJesper Dangaard Brouer 0, map, idx) 15659a30896SJesper Dangaard Brouer 15759a30896SJesper Dangaard Brouer #define _trace_xdp_redirect_map_err(dev, xdp, fwd, map, idx, err) \ 1589c270af3SJesper Dangaard Brouer trace_xdp_redirect_map_err(dev, xdp, devmap_ifindex(fwd, map), \ 15996c5508eSJesper Dangaard Brouer err, map, idx) 1608d3b778fSJesper Dangaard Brouer 161f9419f7bSJesper Dangaard Brouer TRACE_EVENT(xdp_cpumap_kthread, 162f9419f7bSJesper Dangaard Brouer 163f9419f7bSJesper Dangaard Brouer TP_PROTO(int map_id, unsigned int processed, unsigned int drops, 164f9419f7bSJesper Dangaard Brouer int sched), 165f9419f7bSJesper Dangaard Brouer 166f9419f7bSJesper Dangaard Brouer TP_ARGS(map_id, processed, drops, sched), 167f9419f7bSJesper Dangaard Brouer 168f9419f7bSJesper Dangaard Brouer TP_STRUCT__entry( 169f9419f7bSJesper Dangaard Brouer __field(int, map_id) 170f9419f7bSJesper Dangaard Brouer __field(u32, act) 171f9419f7bSJesper Dangaard Brouer __field(int, cpu) 172f9419f7bSJesper Dangaard Brouer __field(unsigned int, drops) 173f9419f7bSJesper Dangaard Brouer __field(unsigned int, processed) 174f9419f7bSJesper Dangaard Brouer __field(int, sched) 175f9419f7bSJesper Dangaard Brouer ), 176f9419f7bSJesper Dangaard Brouer 177f9419f7bSJesper Dangaard Brouer TP_fast_assign( 178f9419f7bSJesper Dangaard Brouer __entry->map_id = map_id; 179f9419f7bSJesper Dangaard Brouer __entry->act = XDP_REDIRECT; 180f9419f7bSJesper Dangaard Brouer __entry->cpu = smp_processor_id(); 181f9419f7bSJesper Dangaard Brouer __entry->drops = drops; 182f9419f7bSJesper Dangaard Brouer __entry->processed = processed; 183f9419f7bSJesper Dangaard Brouer __entry->sched = sched; 184f9419f7bSJesper Dangaard Brouer ), 185f9419f7bSJesper Dangaard Brouer 186f9419f7bSJesper Dangaard Brouer TP_printk("kthread" 187f9419f7bSJesper Dangaard Brouer " cpu=%d map_id=%d action=%s" 188f9419f7bSJesper Dangaard Brouer " processed=%u drops=%u" 189f9419f7bSJesper Dangaard Brouer " sched=%d", 190f9419f7bSJesper Dangaard Brouer __entry->cpu, __entry->map_id, 191f9419f7bSJesper Dangaard Brouer __print_symbolic(__entry->act, __XDP_ACT_SYM_TAB), 192f9419f7bSJesper Dangaard Brouer __entry->processed, __entry->drops, 193f9419f7bSJesper Dangaard Brouer __entry->sched) 194f9419f7bSJesper Dangaard Brouer ); 195f9419f7bSJesper Dangaard Brouer 196f9419f7bSJesper Dangaard Brouer TRACE_EVENT(xdp_cpumap_enqueue, 197f9419f7bSJesper Dangaard Brouer 198f9419f7bSJesper Dangaard Brouer TP_PROTO(int map_id, unsigned int processed, unsigned int drops, 199f9419f7bSJesper Dangaard Brouer int to_cpu), 200f9419f7bSJesper Dangaard Brouer 201f9419f7bSJesper Dangaard Brouer TP_ARGS(map_id, processed, drops, to_cpu), 202f9419f7bSJesper Dangaard Brouer 203f9419f7bSJesper Dangaard Brouer TP_STRUCT__entry( 204f9419f7bSJesper Dangaard Brouer __field(int, map_id) 205f9419f7bSJesper Dangaard Brouer __field(u32, act) 206f9419f7bSJesper Dangaard Brouer __field(int, cpu) 207f9419f7bSJesper Dangaard Brouer __field(unsigned int, drops) 208f9419f7bSJesper Dangaard Brouer __field(unsigned int, processed) 209f9419f7bSJesper Dangaard Brouer __field(int, to_cpu) 210f9419f7bSJesper Dangaard Brouer ), 211f9419f7bSJesper Dangaard Brouer 212f9419f7bSJesper Dangaard Brouer TP_fast_assign( 213f9419f7bSJesper Dangaard Brouer __entry->map_id = map_id; 214f9419f7bSJesper Dangaard Brouer __entry->act = XDP_REDIRECT; 215f9419f7bSJesper Dangaard Brouer __entry->cpu = smp_processor_id(); 216f9419f7bSJesper Dangaard Brouer __entry->drops = drops; 217f9419f7bSJesper Dangaard Brouer __entry->processed = processed; 218f9419f7bSJesper Dangaard Brouer __entry->to_cpu = to_cpu; 219f9419f7bSJesper Dangaard Brouer ), 220f9419f7bSJesper Dangaard Brouer 221f9419f7bSJesper Dangaard Brouer TP_printk("enqueue" 222f9419f7bSJesper Dangaard Brouer " cpu=%d map_id=%d action=%s" 223f9419f7bSJesper Dangaard Brouer " processed=%u drops=%u" 224f9419f7bSJesper Dangaard Brouer " to_cpu=%d", 225f9419f7bSJesper Dangaard Brouer __entry->cpu, __entry->map_id, 226f9419f7bSJesper Dangaard Brouer __print_symbolic(__entry->act, __XDP_ACT_SYM_TAB), 227f9419f7bSJesper Dangaard Brouer __entry->processed, __entry->drops, 228f9419f7bSJesper Dangaard Brouer __entry->to_cpu) 229f9419f7bSJesper Dangaard Brouer ); 230f9419f7bSJesper Dangaard Brouer 23138edddb8SJesper Dangaard Brouer TRACE_EVENT(xdp_devmap_xmit, 23238edddb8SJesper Dangaard Brouer 23338edddb8SJesper Dangaard Brouer TP_PROTO(const struct bpf_map *map, u32 map_index, 23438edddb8SJesper Dangaard Brouer int sent, int drops, 23538edddb8SJesper Dangaard Brouer const struct net_device *from_dev, 236e74de52eSJesper Dangaard Brouer const struct net_device *to_dev, int err), 23738edddb8SJesper Dangaard Brouer 238e74de52eSJesper Dangaard Brouer TP_ARGS(map, map_index, sent, drops, from_dev, to_dev, err), 23938edddb8SJesper Dangaard Brouer 24038edddb8SJesper Dangaard Brouer TP_STRUCT__entry( 24138edddb8SJesper Dangaard Brouer __field(int, map_id) 24238edddb8SJesper Dangaard Brouer __field(u32, act) 24338edddb8SJesper Dangaard Brouer __field(u32, map_index) 24438edddb8SJesper Dangaard Brouer __field(int, drops) 24538edddb8SJesper Dangaard Brouer __field(int, sent) 24638edddb8SJesper Dangaard Brouer __field(int, from_ifindex) 24738edddb8SJesper Dangaard Brouer __field(int, to_ifindex) 248e74de52eSJesper Dangaard Brouer __field(int, err) 24938edddb8SJesper Dangaard Brouer ), 25038edddb8SJesper Dangaard Brouer 25138edddb8SJesper Dangaard Brouer TP_fast_assign( 25238edddb8SJesper Dangaard Brouer __entry->map_id = map->id; 25338edddb8SJesper Dangaard Brouer __entry->act = XDP_REDIRECT; 25438edddb8SJesper Dangaard Brouer __entry->map_index = map_index; 25538edddb8SJesper Dangaard Brouer __entry->drops = drops; 25638edddb8SJesper Dangaard Brouer __entry->sent = sent; 25738edddb8SJesper Dangaard Brouer __entry->from_ifindex = from_dev->ifindex; 25838edddb8SJesper Dangaard Brouer __entry->to_ifindex = to_dev->ifindex; 259e74de52eSJesper Dangaard Brouer __entry->err = err; 26038edddb8SJesper Dangaard Brouer ), 26138edddb8SJesper Dangaard Brouer 26238edddb8SJesper Dangaard Brouer TP_printk("ndo_xdp_xmit" 26338edddb8SJesper Dangaard Brouer " map_id=%d map_index=%d action=%s" 26438edddb8SJesper Dangaard Brouer " sent=%d drops=%d" 265e74de52eSJesper Dangaard Brouer " from_ifindex=%d to_ifindex=%d err=%d", 26638edddb8SJesper Dangaard Brouer __entry->map_id, __entry->map_index, 26738edddb8SJesper Dangaard Brouer __print_symbolic(__entry->act, __XDP_ACT_SYM_TAB), 26838edddb8SJesper Dangaard Brouer __entry->sent, __entry->drops, 269e74de52eSJesper Dangaard Brouer __entry->from_ifindex, __entry->to_ifindex, __entry->err) 27038edddb8SJesper Dangaard Brouer ); 27138edddb8SJesper Dangaard Brouer 272*f033b688SJesper Dangaard Brouer /* Expect users already include <net/xdp.h>, but not xdp_priv.h */ 273*f033b688SJesper Dangaard Brouer #include <net/xdp_priv.h> 274*f033b688SJesper Dangaard Brouer 275*f033b688SJesper Dangaard Brouer #define __MEM_TYPE_MAP(FN) \ 276*f033b688SJesper Dangaard Brouer FN(PAGE_SHARED) \ 277*f033b688SJesper Dangaard Brouer FN(PAGE_ORDER0) \ 278*f033b688SJesper Dangaard Brouer FN(PAGE_POOL) \ 279*f033b688SJesper Dangaard Brouer FN(ZERO_COPY) 280*f033b688SJesper Dangaard Brouer 281*f033b688SJesper Dangaard Brouer #define __MEM_TYPE_TP_FN(x) \ 282*f033b688SJesper Dangaard Brouer TRACE_DEFINE_ENUM(MEM_TYPE_##x); 283*f033b688SJesper Dangaard Brouer #define __MEM_TYPE_SYM_FN(x) \ 284*f033b688SJesper Dangaard Brouer { MEM_TYPE_##x, #x }, 285*f033b688SJesper Dangaard Brouer #define __MEM_TYPE_SYM_TAB \ 286*f033b688SJesper Dangaard Brouer __MEM_TYPE_MAP(__MEM_TYPE_SYM_FN) { -1, 0 } 287*f033b688SJesper Dangaard Brouer __MEM_TYPE_MAP(__MEM_TYPE_TP_FN) 288*f033b688SJesper Dangaard Brouer 289*f033b688SJesper Dangaard Brouer TRACE_EVENT(mem_disconnect, 290*f033b688SJesper Dangaard Brouer 291*f033b688SJesper Dangaard Brouer TP_PROTO(const struct xdp_mem_allocator *xa, 292*f033b688SJesper Dangaard Brouer bool safe_to_remove, bool force), 293*f033b688SJesper Dangaard Brouer 294*f033b688SJesper Dangaard Brouer TP_ARGS(xa, safe_to_remove, force), 295*f033b688SJesper Dangaard Brouer 296*f033b688SJesper Dangaard Brouer TP_STRUCT__entry( 297*f033b688SJesper Dangaard Brouer __field(const struct xdp_mem_allocator *, xa) 298*f033b688SJesper Dangaard Brouer __field(u32, mem_id) 299*f033b688SJesper Dangaard Brouer __field(u32, mem_type) 300*f033b688SJesper Dangaard Brouer __field(const void *, allocator) 301*f033b688SJesper Dangaard Brouer __field(bool, safe_to_remove) 302*f033b688SJesper Dangaard Brouer __field(bool, force) 303*f033b688SJesper Dangaard Brouer __field(int, disconnect_cnt) 304*f033b688SJesper Dangaard Brouer ), 305*f033b688SJesper Dangaard Brouer 306*f033b688SJesper Dangaard Brouer TP_fast_assign( 307*f033b688SJesper Dangaard Brouer __entry->xa = xa; 308*f033b688SJesper Dangaard Brouer __entry->mem_id = xa->mem.id; 309*f033b688SJesper Dangaard Brouer __entry->mem_type = xa->mem.type; 310*f033b688SJesper Dangaard Brouer __entry->allocator = xa->allocator; 311*f033b688SJesper Dangaard Brouer __entry->safe_to_remove = safe_to_remove; 312*f033b688SJesper Dangaard Brouer __entry->force = force; 313*f033b688SJesper Dangaard Brouer __entry->disconnect_cnt = xa->disconnect_cnt; 314*f033b688SJesper Dangaard Brouer ), 315*f033b688SJesper Dangaard Brouer 316*f033b688SJesper Dangaard Brouer TP_printk("mem_id=%d mem_type=%s allocator=%p" 317*f033b688SJesper Dangaard Brouer " safe_to_remove=%s force=%s disconnect_cnt=%d", 318*f033b688SJesper Dangaard Brouer __entry->mem_id, 319*f033b688SJesper Dangaard Brouer __print_symbolic(__entry->mem_type, __MEM_TYPE_SYM_TAB), 320*f033b688SJesper Dangaard Brouer __entry->allocator, 321*f033b688SJesper Dangaard Brouer __entry->safe_to_remove ? "true" : "false", 322*f033b688SJesper Dangaard Brouer __entry->force ? "true" : "false", 323*f033b688SJesper Dangaard Brouer __entry->disconnect_cnt 324*f033b688SJesper Dangaard Brouer ) 325*f033b688SJesper Dangaard Brouer ); 326*f033b688SJesper Dangaard Brouer 327*f033b688SJesper Dangaard Brouer TRACE_EVENT(mem_connect, 328*f033b688SJesper Dangaard Brouer 329*f033b688SJesper Dangaard Brouer TP_PROTO(const struct xdp_mem_allocator *xa, 330*f033b688SJesper Dangaard Brouer const struct xdp_rxq_info *rxq), 331*f033b688SJesper Dangaard Brouer 332*f033b688SJesper Dangaard Brouer TP_ARGS(xa, rxq), 333*f033b688SJesper Dangaard Brouer 334*f033b688SJesper Dangaard Brouer TP_STRUCT__entry( 335*f033b688SJesper Dangaard Brouer __field(const struct xdp_mem_allocator *, xa) 336*f033b688SJesper Dangaard Brouer __field(u32, mem_id) 337*f033b688SJesper Dangaard Brouer __field(u32, mem_type) 338*f033b688SJesper Dangaard Brouer __field(const void *, allocator) 339*f033b688SJesper Dangaard Brouer __field(const struct xdp_rxq_info *, rxq) 340*f033b688SJesper Dangaard Brouer __field(int, ifindex) 341*f033b688SJesper Dangaard Brouer ), 342*f033b688SJesper Dangaard Brouer 343*f033b688SJesper Dangaard Brouer TP_fast_assign( 344*f033b688SJesper Dangaard Brouer __entry->xa = xa; 345*f033b688SJesper Dangaard Brouer __entry->mem_id = xa->mem.id; 346*f033b688SJesper Dangaard Brouer __entry->mem_type = xa->mem.type; 347*f033b688SJesper Dangaard Brouer __entry->allocator = xa->allocator; 348*f033b688SJesper Dangaard Brouer __entry->rxq = rxq; 349*f033b688SJesper Dangaard Brouer __entry->ifindex = rxq->dev->ifindex; 350*f033b688SJesper Dangaard Brouer ), 351*f033b688SJesper Dangaard Brouer 352*f033b688SJesper Dangaard Brouer TP_printk("mem_id=%d mem_type=%s allocator=%p" 353*f033b688SJesper Dangaard Brouer " ifindex=%d", 354*f033b688SJesper Dangaard Brouer __entry->mem_id, 355*f033b688SJesper Dangaard Brouer __print_symbolic(__entry->mem_type, __MEM_TYPE_SYM_TAB), 356*f033b688SJesper Dangaard Brouer __entry->allocator, 357*f033b688SJesper Dangaard Brouer __entry->ifindex 358*f033b688SJesper Dangaard Brouer ) 359*f033b688SJesper Dangaard Brouer ); 360*f033b688SJesper Dangaard Brouer 361*f033b688SJesper Dangaard Brouer TRACE_EVENT(mem_return_failed, 362*f033b688SJesper Dangaard Brouer 363*f033b688SJesper Dangaard Brouer TP_PROTO(const struct xdp_mem_info *mem, 364*f033b688SJesper Dangaard Brouer const struct page *page), 365*f033b688SJesper Dangaard Brouer 366*f033b688SJesper Dangaard Brouer TP_ARGS(mem, page), 367*f033b688SJesper Dangaard Brouer 368*f033b688SJesper Dangaard Brouer TP_STRUCT__entry( 369*f033b688SJesper Dangaard Brouer __field(const struct page *, page) 370*f033b688SJesper Dangaard Brouer __field(u32, mem_id) 371*f033b688SJesper Dangaard Brouer __field(u32, mem_type) 372*f033b688SJesper Dangaard Brouer ), 373*f033b688SJesper Dangaard Brouer 374*f033b688SJesper Dangaard Brouer TP_fast_assign( 375*f033b688SJesper Dangaard Brouer __entry->page = page; 376*f033b688SJesper Dangaard Brouer __entry->mem_id = mem->id; 377*f033b688SJesper Dangaard Brouer __entry->mem_type = mem->type; 378*f033b688SJesper Dangaard Brouer ), 379*f033b688SJesper Dangaard Brouer 380*f033b688SJesper Dangaard Brouer TP_printk("mem_id=%d mem_type=%s page=%p", 381*f033b688SJesper Dangaard Brouer __entry->mem_id, 382*f033b688SJesper Dangaard Brouer __print_symbolic(__entry->mem_type, __MEM_TYPE_SYM_TAB), 383*f033b688SJesper Dangaard Brouer __entry->page 384*f033b688SJesper Dangaard Brouer ) 385*f033b688SJesper Dangaard Brouer ); 386*f033b688SJesper Dangaard Brouer 387a67edbf4SDaniel Borkmann #endif /* _TRACE_XDP_H */ 388a67edbf4SDaniel Borkmann 389a67edbf4SDaniel Borkmann #include <trace/define_trace.h> 390