^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) #undef TRACE_SYSTEM
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) #define TRACE_SYSTEM xdp
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) #if !defined(_TRACE_XDP_H) || defined(TRACE_HEADER_MULTI_READ)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) #define _TRACE_XDP_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) #include <linux/netdevice.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) #include <linux/filter.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) #include <linux/tracepoint.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) #include <linux/bpf.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) #define __XDP_ACT_MAP(FN) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) FN(ABORTED) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) FN(DROP) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) FN(PASS) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) FN(TX) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) FN(REDIRECT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) #define __XDP_ACT_TP_FN(x) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) TRACE_DEFINE_ENUM(XDP_##x);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) #define __XDP_ACT_SYM_FN(x) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) { XDP_##x, #x },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) #define __XDP_ACT_SYM_TAB \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) __XDP_ACT_MAP(__XDP_ACT_SYM_FN) { -1, NULL }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) __XDP_ACT_MAP(__XDP_ACT_TP_FN)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) TRACE_EVENT(xdp_exception,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) TP_PROTO(const struct net_device *dev,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) const struct bpf_prog *xdp, u32 act),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) TP_ARGS(dev, xdp, act),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) TP_STRUCT__entry(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) __field(int, prog_id)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) __field(u32, act)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) __field(int, ifindex)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) TP_fast_assign(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) __entry->prog_id = xdp->aux->id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) __entry->act = act;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) __entry->ifindex = dev->ifindex;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) TP_printk("prog_id=%d action=%s ifindex=%d",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) __entry->prog_id,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) __print_symbolic(__entry->act, __XDP_ACT_SYM_TAB),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) __entry->ifindex)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) TRACE_EVENT(xdp_bulk_tx,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) TP_PROTO(const struct net_device *dev,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) int sent, int drops, int err),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) TP_ARGS(dev, sent, drops, err),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) TP_STRUCT__entry(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) __field(int, ifindex)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) __field(u32, act)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) __field(int, drops)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) __field(int, sent)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) __field(int, err)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) TP_fast_assign(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) __entry->ifindex = dev->ifindex;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) __entry->act = XDP_TX;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) __entry->drops = drops;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) __entry->sent = sent;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) __entry->err = err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) TP_printk("ifindex=%d action=%s sent=%d drops=%d err=%d",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) __entry->ifindex,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) __print_symbolic(__entry->act, __XDP_ACT_SYM_TAB),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) __entry->sent, __entry->drops, __entry->err)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) #ifndef __DEVMAP_OBJ_TYPE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) #define __DEVMAP_OBJ_TYPE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) struct _bpf_dtab_netdev {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) struct net_device *dev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) #endif /* __DEVMAP_OBJ_TYPE */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) #define devmap_ifindex(tgt, map) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) (((map->map_type == BPF_MAP_TYPE_DEVMAP || \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) map->map_type == BPF_MAP_TYPE_DEVMAP_HASH)) ? \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) ((struct _bpf_dtab_netdev *)tgt)->dev->ifindex : 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) DECLARE_EVENT_CLASS(xdp_redirect_template,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) TP_PROTO(const struct net_device *dev,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) const struct bpf_prog *xdp,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) const void *tgt, int err,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) const struct bpf_map *map, u32 index),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) TP_ARGS(dev, xdp, tgt, err, map, index),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) TP_STRUCT__entry(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) __field(int, prog_id)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) __field(u32, act)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) __field(int, ifindex)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) __field(int, err)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) __field(int, to_ifindex)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) __field(u32, map_id)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) __field(int, map_index)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) TP_fast_assign(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) __entry->prog_id = xdp->aux->id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) __entry->act = XDP_REDIRECT;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) __entry->ifindex = dev->ifindex;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) __entry->err = err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) __entry->to_ifindex = map ? devmap_ifindex(tgt, map) :
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) index;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) __entry->map_id = map ? map->id : 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) __entry->map_index = map ? index : 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) TP_printk("prog_id=%d action=%s ifindex=%d to_ifindex=%d err=%d"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) " map_id=%d map_index=%d",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) __entry->prog_id,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) __print_symbolic(__entry->act, __XDP_ACT_SYM_TAB),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) __entry->ifindex, __entry->to_ifindex,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) __entry->err, __entry->map_id, __entry->map_index)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) DEFINE_EVENT(xdp_redirect_template, xdp_redirect,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) TP_PROTO(const struct net_device *dev,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) const struct bpf_prog *xdp,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) const void *tgt, int err,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) const struct bpf_map *map, u32 index),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) TP_ARGS(dev, xdp, tgt, err, map, index)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) DEFINE_EVENT(xdp_redirect_template, xdp_redirect_err,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) TP_PROTO(const struct net_device *dev,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) const struct bpf_prog *xdp,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) const void *tgt, int err,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) const struct bpf_map *map, u32 index),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) TP_ARGS(dev, xdp, tgt, err, map, index)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) #define _trace_xdp_redirect(dev, xdp, to) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) trace_xdp_redirect(dev, xdp, NULL, 0, NULL, to);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) #define _trace_xdp_redirect_err(dev, xdp, to, err) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) trace_xdp_redirect_err(dev, xdp, NULL, err, NULL, to);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) #define _trace_xdp_redirect_map(dev, xdp, to, map, index) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) trace_xdp_redirect(dev, xdp, to, 0, map, index);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) #define _trace_xdp_redirect_map_err(dev, xdp, to, map, index, err) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) trace_xdp_redirect_err(dev, xdp, to, err, map, index);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) /* not used anymore, but kept around so as not to break old programs */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) DEFINE_EVENT(xdp_redirect_template, xdp_redirect_map,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) TP_PROTO(const struct net_device *dev,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) const struct bpf_prog *xdp,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) const void *tgt, int err,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) const struct bpf_map *map, u32 index),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) TP_ARGS(dev, xdp, tgt, err, map, index)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) DEFINE_EVENT(xdp_redirect_template, xdp_redirect_map_err,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) TP_PROTO(const struct net_device *dev,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) const struct bpf_prog *xdp,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) const void *tgt, int err,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) const struct bpf_map *map, u32 index),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) TP_ARGS(dev, xdp, tgt, err, map, index)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) TRACE_EVENT(xdp_cpumap_kthread,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) TP_PROTO(int map_id, unsigned int processed, unsigned int drops,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) int sched, struct xdp_cpumap_stats *xdp_stats),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) TP_ARGS(map_id, processed, drops, sched, xdp_stats),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) TP_STRUCT__entry(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) __field(int, map_id)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) __field(u32, act)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) __field(int, cpu)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) __field(unsigned int, drops)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) __field(unsigned int, processed)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) __field(int, sched)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) __field(unsigned int, xdp_pass)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) __field(unsigned int, xdp_drop)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) __field(unsigned int, xdp_redirect)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) TP_fast_assign(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) __entry->map_id = map_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) __entry->act = XDP_REDIRECT;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) __entry->cpu = smp_processor_id();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) __entry->drops = drops;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) __entry->processed = processed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) __entry->sched = sched;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) __entry->xdp_pass = xdp_stats->pass;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) __entry->xdp_drop = xdp_stats->drop;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) __entry->xdp_redirect = xdp_stats->redirect;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) TP_printk("kthread"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) " cpu=%d map_id=%d action=%s"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) " processed=%u drops=%u"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) " sched=%d"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) " xdp_pass=%u xdp_drop=%u xdp_redirect=%u",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) __entry->cpu, __entry->map_id,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) __print_symbolic(__entry->act, __XDP_ACT_SYM_TAB),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) __entry->processed, __entry->drops,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) __entry->sched,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) __entry->xdp_pass, __entry->xdp_drop, __entry->xdp_redirect)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) TRACE_EVENT(xdp_cpumap_enqueue,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) TP_PROTO(int map_id, unsigned int processed, unsigned int drops,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) int to_cpu),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) TP_ARGS(map_id, processed, drops, to_cpu),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) TP_STRUCT__entry(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) __field(int, map_id)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) __field(u32, act)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) __field(int, cpu)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) __field(unsigned int, drops)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) __field(unsigned int, processed)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) __field(int, to_cpu)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) TP_fast_assign(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) __entry->map_id = map_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) __entry->act = XDP_REDIRECT;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) __entry->cpu = smp_processor_id();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) __entry->drops = drops;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) __entry->processed = processed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) __entry->to_cpu = to_cpu;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) TP_printk("enqueue"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) " cpu=%d map_id=%d action=%s"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) " processed=%u drops=%u"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) " to_cpu=%d",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) __entry->cpu, __entry->map_id,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) __print_symbolic(__entry->act, __XDP_ACT_SYM_TAB),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) __entry->processed, __entry->drops,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) __entry->to_cpu)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) TRACE_EVENT(xdp_devmap_xmit,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) TP_PROTO(const struct net_device *from_dev,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) const struct net_device *to_dev,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) int sent, int drops, int err),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) TP_ARGS(from_dev, to_dev, sent, drops, err),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) TP_STRUCT__entry(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) __field(int, from_ifindex)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) __field(u32, act)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) __field(int, to_ifindex)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) __field(int, drops)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) __field(int, sent)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) __field(int, err)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) TP_fast_assign(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) __entry->from_ifindex = from_dev->ifindex;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) __entry->act = XDP_REDIRECT;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) __entry->to_ifindex = to_dev->ifindex;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) __entry->drops = drops;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) __entry->sent = sent;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) __entry->err = err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) TP_printk("ndo_xdp_xmit"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) " from_ifindex=%d to_ifindex=%d action=%s"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) " sent=%d drops=%d"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) " err=%d",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) __entry->from_ifindex, __entry->to_ifindex,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) __print_symbolic(__entry->act, __XDP_ACT_SYM_TAB),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) __entry->sent, __entry->drops,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) __entry->err)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) /* Expect users already include <net/xdp.h>, but not xdp_priv.h */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) #include <net/xdp_priv.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) #define __MEM_TYPE_MAP(FN) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) FN(PAGE_SHARED) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) FN(PAGE_ORDER0) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) FN(PAGE_POOL) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) FN(XSK_BUFF_POOL)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300) #define __MEM_TYPE_TP_FN(x) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) TRACE_DEFINE_ENUM(MEM_TYPE_##x);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302) #define __MEM_TYPE_SYM_FN(x) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) { MEM_TYPE_##x, #x },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304) #define __MEM_TYPE_SYM_TAB \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) __MEM_TYPE_MAP(__MEM_TYPE_SYM_FN) { -1, 0 }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306) __MEM_TYPE_MAP(__MEM_TYPE_TP_FN)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308) TRACE_EVENT(mem_disconnect,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) TP_PROTO(const struct xdp_mem_allocator *xa),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312) TP_ARGS(xa),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) TP_STRUCT__entry(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315) __field(const struct xdp_mem_allocator *, xa)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316) __field(u32, mem_id)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) __field(u32, mem_type)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) __field(const void *, allocator)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321) TP_fast_assign(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) __entry->xa = xa;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323) __entry->mem_id = xa->mem.id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) __entry->mem_type = xa->mem.type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) __entry->allocator = xa->allocator;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328) TP_printk("mem_id=%d mem_type=%s allocator=%p",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) __entry->mem_id,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) __print_symbolic(__entry->mem_type, __MEM_TYPE_SYM_TAB),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331) __entry->allocator
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332) )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335) TRACE_EVENT(mem_connect,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337) TP_PROTO(const struct xdp_mem_allocator *xa,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338) const struct xdp_rxq_info *rxq),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340) TP_ARGS(xa, rxq),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342) TP_STRUCT__entry(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343) __field(const struct xdp_mem_allocator *, xa)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344) __field(u32, mem_id)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345) __field(u32, mem_type)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) __field(const void *, allocator)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347) __field(const struct xdp_rxq_info *, rxq)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348) __field(int, ifindex)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351) TP_fast_assign(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 352) __entry->xa = xa;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 353) __entry->mem_id = xa->mem.id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 354) __entry->mem_type = xa->mem.type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 355) __entry->allocator = xa->allocator;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 356) __entry->rxq = rxq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 357) __entry->ifindex = rxq->dev->ifindex;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 358) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 359)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 360) TP_printk("mem_id=%d mem_type=%s allocator=%p"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 361) " ifindex=%d",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 362) __entry->mem_id,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 363) __print_symbolic(__entry->mem_type, __MEM_TYPE_SYM_TAB),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 364) __entry->allocator,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 365) __entry->ifindex
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 366) )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 367) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 368)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 369) TRACE_EVENT(mem_return_failed,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 370)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 371) TP_PROTO(const struct xdp_mem_info *mem,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 372) const struct page *page),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 373)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 374) TP_ARGS(mem, page),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 375)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 376) TP_STRUCT__entry(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 377) __field(const struct page *, page)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 378) __field(u32, mem_id)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 379) __field(u32, mem_type)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 380) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 381)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 382) TP_fast_assign(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 383) __entry->page = page;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 384) __entry->mem_id = mem->id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 385) __entry->mem_type = mem->type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 386) ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 387)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 388) TP_printk("mem_id=%d mem_type=%s page=%p",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 389) __entry->mem_id,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 390) __print_symbolic(__entry->mem_type, __MEM_TYPE_SYM_TAB),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 391) __entry->page
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 392) )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 393) );
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 394)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 395) #endif /* _TRACE_XDP_H */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 396)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 397) #include <trace/define_trace.h>