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 \ 255e5b03d1SBen 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 821d233886SToke Høiland-Jørgensen #ifndef __DEVMAP_OBJ_TYPE 831d233886SToke Høiland-Jørgensen #define __DEVMAP_OBJ_TYPE 841d233886SToke Høiland-Jørgensen struct _bpf_dtab_netdev { 851d233886SToke Høiland-Jørgensen struct net_device *dev; 861d233886SToke Høiland-Jørgensen }; 871d233886SToke Høiland-Jørgensen #endif /* __DEVMAP_OBJ_TYPE */ 881d233886SToke Høiland-Jørgensen 891d233886SToke Høiland-Jørgensen #define devmap_ifindex(tgt, map) \ 901d233886SToke Høiland-Jørgensen (((map->map_type == BPF_MAP_TYPE_DEVMAP || \ 911d233886SToke Høiland-Jørgensen map->map_type == BPF_MAP_TYPE_DEVMAP_HASH)) ? \ 921d233886SToke Høiland-Jørgensen ((struct _bpf_dtab_netdev *)tgt)->dev->ifindex : 0) 931d233886SToke Høiland-Jørgensen 948d3b778fSJesper Dangaard Brouer DECLARE_EVENT_CLASS(xdp_redirect_template, 955acaee0aSJohn Fastabend 96a8735855SJesper Dangaard Brouer TP_PROTO(const struct net_device *dev, 97c31e5a48SJesper Dangaard Brouer const struct bpf_prog *xdp, 981d233886SToke Høiland-Jørgensen const void *tgt, int err, 991d233886SToke Høiland-Jørgensen const struct bpf_map *map, u32 index), 1005acaee0aSJohn Fastabend 1011d233886SToke Høiland-Jørgensen TP_ARGS(dev, xdp, tgt, err, map, index), 1025acaee0aSJohn Fastabend 1035acaee0aSJohn Fastabend TP_STRUCT__entry( 104b06337dfSJesper Dangaard Brouer __field(int, prog_id) 1055acaee0aSJohn Fastabend __field(u32, act) 106a8735855SJesper Dangaard Brouer __field(int, ifindex) 1074c03bdd7SJesper Dangaard Brouer __field(int, err) 1088d3b778fSJesper Dangaard Brouer __field(int, to_ifindex) 1098d3b778fSJesper Dangaard Brouer __field(u32, map_id) 1108d3b778fSJesper Dangaard Brouer __field(int, map_index) 1115acaee0aSJohn Fastabend ), 1125acaee0aSJohn Fastabend 1135acaee0aSJohn Fastabend TP_fast_assign( 114b06337dfSJesper Dangaard Brouer __entry->prog_id = xdp->aux->id; 115c31e5a48SJesper Dangaard Brouer __entry->act = XDP_REDIRECT; 116a8735855SJesper Dangaard Brouer __entry->ifindex = dev->ifindex; 1174c03bdd7SJesper Dangaard Brouer __entry->err = err; 1181d233886SToke Høiland-Jørgensen __entry->to_ifindex = map ? devmap_ifindex(tgt, map) : 1191d233886SToke Høiland-Jørgensen index; 1208d3b778fSJesper Dangaard Brouer __entry->map_id = map ? map->id : 0; 1211d233886SToke Høiland-Jørgensen __entry->map_index = map ? index : 0; 1225acaee0aSJohn Fastabend ), 1235acaee0aSJohn Fastabend 1241d233886SToke Høiland-Jørgensen TP_printk("prog_id=%d action=%s ifindex=%d to_ifindex=%d err=%d" 1251d233886SToke Høiland-Jørgensen " map_id=%d map_index=%d", 126b06337dfSJesper Dangaard Brouer __entry->prog_id, 1274c03bdd7SJesper Dangaard Brouer __print_symbolic(__entry->act, __XDP_ACT_SYM_TAB), 1288d3b778fSJesper Dangaard Brouer __entry->ifindex, __entry->to_ifindex, 1291d233886SToke Høiland-Jørgensen __entry->err, __entry->map_id, __entry->map_index) 1305acaee0aSJohn Fastabend ); 1318d3b778fSJesper Dangaard Brouer 1328d3b778fSJesper Dangaard Brouer DEFINE_EVENT(xdp_redirect_template, xdp_redirect, 1338d3b778fSJesper Dangaard Brouer TP_PROTO(const struct net_device *dev, 1348d3b778fSJesper Dangaard Brouer const struct bpf_prog *xdp, 1351d233886SToke Høiland-Jørgensen const void *tgt, int err, 1361d233886SToke Høiland-Jørgensen const struct bpf_map *map, u32 index), 1371d233886SToke Høiland-Jørgensen TP_ARGS(dev, xdp, tgt, err, map, index) 1388d3b778fSJesper Dangaard Brouer ); 1398d3b778fSJesper Dangaard Brouer 140f5836ca5SJesper Dangaard Brouer DEFINE_EVENT(xdp_redirect_template, xdp_redirect_err, 141f5836ca5SJesper Dangaard Brouer TP_PROTO(const struct net_device *dev, 142f5836ca5SJesper Dangaard Brouer const struct bpf_prog *xdp, 1431d233886SToke Høiland-Jørgensen const void *tgt, int err, 1441d233886SToke Høiland-Jørgensen const struct bpf_map *map, u32 index), 1451d233886SToke Høiland-Jørgensen TP_ARGS(dev, xdp, tgt, err, map, index) 146f5836ca5SJesper Dangaard Brouer ); 1478d3b778fSJesper Dangaard Brouer 148f5836ca5SJesper Dangaard Brouer #define _trace_xdp_redirect(dev, xdp, to) \ 1491d233886SToke Høiland-Jørgensen trace_xdp_redirect(dev, xdp, NULL, 0, NULL, to); 150f5836ca5SJesper Dangaard Brouer 151f5836ca5SJesper Dangaard Brouer #define _trace_xdp_redirect_err(dev, xdp, to, err) \ 1521d233886SToke Høiland-Jørgensen trace_xdp_redirect_err(dev, xdp, NULL, err, NULL, to); 153f5836ca5SJesper Dangaard Brouer 1541d233886SToke Høiland-Jørgensen #define _trace_xdp_redirect_map(dev, xdp, to, map, index) \ 1551d233886SToke Høiland-Jørgensen trace_xdp_redirect(dev, xdp, to, 0, map, index); 1561d233886SToke Høiland-Jørgensen 1571d233886SToke Høiland-Jørgensen #define _trace_xdp_redirect_map_err(dev, xdp, to, map, index, err) \ 1581d233886SToke Høiland-Jørgensen trace_xdp_redirect_err(dev, xdp, to, err, map, index); 1591d233886SToke Høiland-Jørgensen 1601d233886SToke Høiland-Jørgensen /* not used anymore, but kept around so as not to break old programs */ 1611d233886SToke Høiland-Jørgensen DEFINE_EVENT(xdp_redirect_template, xdp_redirect_map, 16259a30896SJesper Dangaard Brouer TP_PROTO(const struct net_device *dev, 16359a30896SJesper Dangaard Brouer const struct bpf_prog *xdp, 1641d233886SToke Høiland-Jørgensen const void *tgt, int err, 1651d233886SToke Høiland-Jørgensen const struct bpf_map *map, u32 index), 1661d233886SToke Høiland-Jørgensen TP_ARGS(dev, xdp, tgt, err, map, index) 16759a30896SJesper Dangaard Brouer ); 168f5836ca5SJesper Dangaard Brouer 1691d233886SToke Høiland-Jørgensen DEFINE_EVENT(xdp_redirect_template, xdp_redirect_map_err, 17059a30896SJesper Dangaard Brouer TP_PROTO(const struct net_device *dev, 17159a30896SJesper Dangaard Brouer const struct bpf_prog *xdp, 1721d233886SToke Høiland-Jørgensen const void *tgt, int err, 1731d233886SToke Høiland-Jørgensen const struct bpf_map *map, u32 index), 1741d233886SToke Høiland-Jørgensen TP_ARGS(dev, xdp, tgt, err, map, index) 17559a30896SJesper Dangaard Brouer ); 17659a30896SJesper Dangaard Brouer 177f9419f7bSJesper Dangaard Brouer TRACE_EVENT(xdp_cpumap_kthread, 178f9419f7bSJesper Dangaard Brouer 179f9419f7bSJesper Dangaard Brouer TP_PROTO(int map_id, unsigned int processed, unsigned int drops, 18092164774SLorenzo Bianconi int sched, struct xdp_cpumap_stats *xdp_stats), 181f9419f7bSJesper Dangaard Brouer 18292164774SLorenzo Bianconi TP_ARGS(map_id, processed, drops, sched, xdp_stats), 183f9419f7bSJesper Dangaard Brouer 184f9419f7bSJesper Dangaard Brouer TP_STRUCT__entry( 185f9419f7bSJesper Dangaard Brouer __field(int, map_id) 186f9419f7bSJesper Dangaard Brouer __field(u32, act) 187f9419f7bSJesper Dangaard Brouer __field(int, cpu) 188f9419f7bSJesper Dangaard Brouer __field(unsigned int, drops) 189f9419f7bSJesper Dangaard Brouer __field(unsigned int, processed) 190f9419f7bSJesper Dangaard Brouer __field(int, sched) 19192164774SLorenzo Bianconi __field(unsigned int, xdp_pass) 19292164774SLorenzo Bianconi __field(unsigned int, xdp_drop) 193*28b1520eSLorenzo Bianconi __field(unsigned int, xdp_redirect) 194f9419f7bSJesper Dangaard Brouer ), 195f9419f7bSJesper Dangaard Brouer 196f9419f7bSJesper Dangaard Brouer TP_fast_assign( 197f9419f7bSJesper Dangaard Brouer __entry->map_id = map_id; 198f9419f7bSJesper Dangaard Brouer __entry->act = XDP_REDIRECT; 199f9419f7bSJesper Dangaard Brouer __entry->cpu = smp_processor_id(); 200f9419f7bSJesper Dangaard Brouer __entry->drops = drops; 201f9419f7bSJesper Dangaard Brouer __entry->processed = processed; 202f9419f7bSJesper Dangaard Brouer __entry->sched = sched; 20392164774SLorenzo Bianconi __entry->xdp_pass = xdp_stats->pass; 20492164774SLorenzo Bianconi __entry->xdp_drop = xdp_stats->drop; 205*28b1520eSLorenzo Bianconi __entry->xdp_redirect = xdp_stats->redirect; 206f9419f7bSJesper Dangaard Brouer ), 207f9419f7bSJesper Dangaard Brouer 208f9419f7bSJesper Dangaard Brouer TP_printk("kthread" 209f9419f7bSJesper Dangaard Brouer " cpu=%d map_id=%d action=%s" 210f9419f7bSJesper Dangaard Brouer " processed=%u drops=%u" 21192164774SLorenzo Bianconi " sched=%d" 212*28b1520eSLorenzo Bianconi " xdp_pass=%u xdp_drop=%u xdp_redirect=%u", 213f9419f7bSJesper Dangaard Brouer __entry->cpu, __entry->map_id, 214f9419f7bSJesper Dangaard Brouer __print_symbolic(__entry->act, __XDP_ACT_SYM_TAB), 215f9419f7bSJesper Dangaard Brouer __entry->processed, __entry->drops, 21692164774SLorenzo Bianconi __entry->sched, 217*28b1520eSLorenzo Bianconi __entry->xdp_pass, __entry->xdp_drop, __entry->xdp_redirect) 218f9419f7bSJesper Dangaard Brouer ); 219f9419f7bSJesper Dangaard Brouer 220f9419f7bSJesper Dangaard Brouer TRACE_EVENT(xdp_cpumap_enqueue, 221f9419f7bSJesper Dangaard Brouer 222f9419f7bSJesper Dangaard Brouer TP_PROTO(int map_id, unsigned int processed, unsigned int drops, 223f9419f7bSJesper Dangaard Brouer int to_cpu), 224f9419f7bSJesper Dangaard Brouer 225f9419f7bSJesper Dangaard Brouer TP_ARGS(map_id, processed, drops, to_cpu), 226f9419f7bSJesper Dangaard Brouer 227f9419f7bSJesper Dangaard Brouer TP_STRUCT__entry( 228f9419f7bSJesper Dangaard Brouer __field(int, map_id) 229f9419f7bSJesper Dangaard Brouer __field(u32, act) 230f9419f7bSJesper Dangaard Brouer __field(int, cpu) 231f9419f7bSJesper Dangaard Brouer __field(unsigned int, drops) 232f9419f7bSJesper Dangaard Brouer __field(unsigned int, processed) 233f9419f7bSJesper Dangaard Brouer __field(int, to_cpu) 234f9419f7bSJesper Dangaard Brouer ), 235f9419f7bSJesper Dangaard Brouer 236f9419f7bSJesper Dangaard Brouer TP_fast_assign( 237f9419f7bSJesper Dangaard Brouer __entry->map_id = map_id; 238f9419f7bSJesper Dangaard Brouer __entry->act = XDP_REDIRECT; 239f9419f7bSJesper Dangaard Brouer __entry->cpu = smp_processor_id(); 240f9419f7bSJesper Dangaard Brouer __entry->drops = drops; 241f9419f7bSJesper Dangaard Brouer __entry->processed = processed; 242f9419f7bSJesper Dangaard Brouer __entry->to_cpu = to_cpu; 243f9419f7bSJesper Dangaard Brouer ), 244f9419f7bSJesper Dangaard Brouer 245f9419f7bSJesper Dangaard Brouer TP_printk("enqueue" 246f9419f7bSJesper Dangaard Brouer " cpu=%d map_id=%d action=%s" 247f9419f7bSJesper Dangaard Brouer " processed=%u drops=%u" 248f9419f7bSJesper Dangaard Brouer " to_cpu=%d", 249f9419f7bSJesper Dangaard Brouer __entry->cpu, __entry->map_id, 250f9419f7bSJesper Dangaard Brouer __print_symbolic(__entry->act, __XDP_ACT_SYM_TAB), 251f9419f7bSJesper Dangaard Brouer __entry->processed, __entry->drops, 252f9419f7bSJesper Dangaard Brouer __entry->to_cpu) 253f9419f7bSJesper Dangaard Brouer ); 254f9419f7bSJesper Dangaard Brouer 25538edddb8SJesper Dangaard Brouer TRACE_EVENT(xdp_devmap_xmit, 25638edddb8SJesper Dangaard Brouer 25758aa94f9SJesper Dangaard Brouer TP_PROTO(const struct net_device *from_dev, 25858aa94f9SJesper Dangaard Brouer const struct net_device *to_dev, 25958aa94f9SJesper Dangaard Brouer int sent, int drops, int err), 26038edddb8SJesper Dangaard Brouer 26158aa94f9SJesper Dangaard Brouer TP_ARGS(from_dev, to_dev, sent, drops, err), 26238edddb8SJesper Dangaard Brouer 26338edddb8SJesper Dangaard Brouer TP_STRUCT__entry( 26458aa94f9SJesper Dangaard Brouer __field(int, from_ifindex) 26538edddb8SJesper Dangaard Brouer __field(u32, act) 26658aa94f9SJesper Dangaard Brouer __field(int, to_ifindex) 26738edddb8SJesper Dangaard Brouer __field(int, drops) 26838edddb8SJesper Dangaard Brouer __field(int, sent) 269e74de52eSJesper Dangaard Brouer __field(int, err) 27038edddb8SJesper Dangaard Brouer ), 27138edddb8SJesper Dangaard Brouer 27238edddb8SJesper Dangaard Brouer TP_fast_assign( 27358aa94f9SJesper Dangaard Brouer __entry->from_ifindex = from_dev->ifindex; 27438edddb8SJesper Dangaard Brouer __entry->act = XDP_REDIRECT; 27558aa94f9SJesper Dangaard Brouer __entry->to_ifindex = to_dev->ifindex; 27638edddb8SJesper Dangaard Brouer __entry->drops = drops; 27738edddb8SJesper Dangaard Brouer __entry->sent = sent; 278e74de52eSJesper Dangaard Brouer __entry->err = err; 27938edddb8SJesper Dangaard Brouer ), 28038edddb8SJesper Dangaard Brouer 28138edddb8SJesper Dangaard Brouer TP_printk("ndo_xdp_xmit" 28258aa94f9SJesper Dangaard Brouer " from_ifindex=%d to_ifindex=%d action=%s" 28338edddb8SJesper Dangaard Brouer " sent=%d drops=%d" 28458aa94f9SJesper Dangaard Brouer " err=%d", 28558aa94f9SJesper Dangaard Brouer __entry->from_ifindex, __entry->to_ifindex, 28638edddb8SJesper Dangaard Brouer __print_symbolic(__entry->act, __XDP_ACT_SYM_TAB), 28738edddb8SJesper Dangaard Brouer __entry->sent, __entry->drops, 28858aa94f9SJesper Dangaard Brouer __entry->err) 28938edddb8SJesper Dangaard Brouer ); 29038edddb8SJesper Dangaard Brouer 291f033b688SJesper Dangaard Brouer /* Expect users already include <net/xdp.h>, but not xdp_priv.h */ 292f033b688SJesper Dangaard Brouer #include <net/xdp_priv.h> 293f033b688SJesper Dangaard Brouer 294f033b688SJesper Dangaard Brouer #define __MEM_TYPE_MAP(FN) \ 295f033b688SJesper Dangaard Brouer FN(PAGE_SHARED) \ 296f033b688SJesper Dangaard Brouer FN(PAGE_ORDER0) \ 297f033b688SJesper Dangaard Brouer FN(PAGE_POOL) \ 2982b43470aSBjörn Töpel FN(XSK_BUFF_POOL) 299f033b688SJesper Dangaard Brouer 300f033b688SJesper Dangaard Brouer #define __MEM_TYPE_TP_FN(x) \ 301f033b688SJesper Dangaard Brouer TRACE_DEFINE_ENUM(MEM_TYPE_##x); 302f033b688SJesper Dangaard Brouer #define __MEM_TYPE_SYM_FN(x) \ 303f033b688SJesper Dangaard Brouer { MEM_TYPE_##x, #x }, 304f033b688SJesper Dangaard Brouer #define __MEM_TYPE_SYM_TAB \ 305f033b688SJesper Dangaard Brouer __MEM_TYPE_MAP(__MEM_TYPE_SYM_FN) { -1, 0 } 306f033b688SJesper Dangaard Brouer __MEM_TYPE_MAP(__MEM_TYPE_TP_FN) 307f033b688SJesper Dangaard Brouer 308f033b688SJesper Dangaard Brouer TRACE_EVENT(mem_disconnect, 309f033b688SJesper Dangaard Brouer 310c3f812ceSJonathan Lemon TP_PROTO(const struct xdp_mem_allocator *xa), 311f033b688SJesper Dangaard Brouer 312c3f812ceSJonathan Lemon TP_ARGS(xa), 313f033b688SJesper Dangaard Brouer 314f033b688SJesper Dangaard Brouer TP_STRUCT__entry( 315f033b688SJesper Dangaard Brouer __field(const struct xdp_mem_allocator *, xa) 316f033b688SJesper Dangaard Brouer __field(u32, mem_id) 317f033b688SJesper Dangaard Brouer __field(u32, mem_type) 318f033b688SJesper Dangaard Brouer __field(const void *, allocator) 319f033b688SJesper Dangaard Brouer ), 320f033b688SJesper Dangaard Brouer 321f033b688SJesper Dangaard Brouer TP_fast_assign( 322f033b688SJesper Dangaard Brouer __entry->xa = xa; 323f033b688SJesper Dangaard Brouer __entry->mem_id = xa->mem.id; 324f033b688SJesper Dangaard Brouer __entry->mem_type = xa->mem.type; 325f033b688SJesper Dangaard Brouer __entry->allocator = xa->allocator; 326f033b688SJesper Dangaard Brouer ), 327f033b688SJesper Dangaard Brouer 328c3f812ceSJonathan Lemon TP_printk("mem_id=%d mem_type=%s allocator=%p", 329f033b688SJesper Dangaard Brouer __entry->mem_id, 330f033b688SJesper Dangaard Brouer __print_symbolic(__entry->mem_type, __MEM_TYPE_SYM_TAB), 331c3f812ceSJonathan Lemon __entry->allocator 332f033b688SJesper Dangaard Brouer ) 333f033b688SJesper Dangaard Brouer ); 334f033b688SJesper Dangaard Brouer 335f033b688SJesper Dangaard Brouer TRACE_EVENT(mem_connect, 336f033b688SJesper Dangaard Brouer 337f033b688SJesper Dangaard Brouer TP_PROTO(const struct xdp_mem_allocator *xa, 338f033b688SJesper Dangaard Brouer const struct xdp_rxq_info *rxq), 339f033b688SJesper Dangaard Brouer 340f033b688SJesper Dangaard Brouer TP_ARGS(xa, rxq), 341f033b688SJesper Dangaard Brouer 342f033b688SJesper Dangaard Brouer TP_STRUCT__entry( 343f033b688SJesper Dangaard Brouer __field(const struct xdp_mem_allocator *, xa) 344f033b688SJesper Dangaard Brouer __field(u32, mem_id) 345f033b688SJesper Dangaard Brouer __field(u32, mem_type) 346f033b688SJesper Dangaard Brouer __field(const void *, allocator) 347f033b688SJesper Dangaard Brouer __field(const struct xdp_rxq_info *, rxq) 348f033b688SJesper Dangaard Brouer __field(int, ifindex) 349f033b688SJesper Dangaard Brouer ), 350f033b688SJesper Dangaard Brouer 351f033b688SJesper Dangaard Brouer TP_fast_assign( 352f033b688SJesper Dangaard Brouer __entry->xa = xa; 353f033b688SJesper Dangaard Brouer __entry->mem_id = xa->mem.id; 354f033b688SJesper Dangaard Brouer __entry->mem_type = xa->mem.type; 355f033b688SJesper Dangaard Brouer __entry->allocator = xa->allocator; 356f033b688SJesper Dangaard Brouer __entry->rxq = rxq; 357f033b688SJesper Dangaard Brouer __entry->ifindex = rxq->dev->ifindex; 358f033b688SJesper Dangaard Brouer ), 359f033b688SJesper Dangaard Brouer 360f033b688SJesper Dangaard Brouer TP_printk("mem_id=%d mem_type=%s allocator=%p" 361f033b688SJesper Dangaard Brouer " ifindex=%d", 362f033b688SJesper Dangaard Brouer __entry->mem_id, 363f033b688SJesper Dangaard Brouer __print_symbolic(__entry->mem_type, __MEM_TYPE_SYM_TAB), 364f033b688SJesper Dangaard Brouer __entry->allocator, 365f033b688SJesper Dangaard Brouer __entry->ifindex 366f033b688SJesper Dangaard Brouer ) 367f033b688SJesper Dangaard Brouer ); 368f033b688SJesper Dangaard Brouer 369f033b688SJesper Dangaard Brouer TRACE_EVENT(mem_return_failed, 370f033b688SJesper Dangaard Brouer 371f033b688SJesper Dangaard Brouer TP_PROTO(const struct xdp_mem_info *mem, 372f033b688SJesper Dangaard Brouer const struct page *page), 373f033b688SJesper Dangaard Brouer 374f033b688SJesper Dangaard Brouer TP_ARGS(mem, page), 375f033b688SJesper Dangaard Brouer 376f033b688SJesper Dangaard Brouer TP_STRUCT__entry( 377f033b688SJesper Dangaard Brouer __field(const struct page *, page) 378f033b688SJesper Dangaard Brouer __field(u32, mem_id) 379f033b688SJesper Dangaard Brouer __field(u32, mem_type) 380f033b688SJesper Dangaard Brouer ), 381f033b688SJesper Dangaard Brouer 382f033b688SJesper Dangaard Brouer TP_fast_assign( 383f033b688SJesper Dangaard Brouer __entry->page = page; 384f033b688SJesper Dangaard Brouer __entry->mem_id = mem->id; 385f033b688SJesper Dangaard Brouer __entry->mem_type = mem->type; 386f033b688SJesper Dangaard Brouer ), 387f033b688SJesper Dangaard Brouer 388f033b688SJesper Dangaard Brouer TP_printk("mem_id=%d mem_type=%s page=%p", 389f033b688SJesper Dangaard Brouer __entry->mem_id, 390f033b688SJesper Dangaard Brouer __print_symbolic(__entry->mem_type, __MEM_TYPE_SYM_TAB), 391f033b688SJesper Dangaard Brouer __entry->page 392f033b688SJesper Dangaard Brouer ) 393f033b688SJesper Dangaard Brouer ); 394f033b688SJesper Dangaard Brouer 395a67edbf4SDaniel Borkmann #endif /* _TRACE_XDP_H */ 396a67edbf4SDaniel Borkmann 397a67edbf4SDaniel Borkmann #include <trace/define_trace.h> 398