]>
git.ipfire.org Git - people/arne_f/kernel.git/blob - include/trace/events/bpf.h
1 /* SPDX-License-Identifier: GPL-2.0 */
3 #define TRACE_SYSTEM bpf
5 #if !defined(_TRACE_BPF_H) || defined(TRACE_HEADER_MULTI_READ)
8 #include <linux/filter.h>
11 #include <linux/tracepoint.h>
13 #define __PROG_TYPE_MAP(FN) \
27 #define __MAP_TYPE_MAP(FN) \
31 FN(PERF_EVENT_ARRAY) \
40 #define __PROG_TYPE_TP_FN(x) \
41 TRACE_DEFINE_ENUM(BPF_PROG_TYPE_##x);
42 #define __PROG_TYPE_SYM_FN(x) \
43 { BPF_PROG_TYPE_##x, #x },
44 #define __PROG_TYPE_SYM_TAB \
45 __PROG_TYPE_MAP(__PROG_TYPE_SYM_FN) { -1, 0 }
46 __PROG_TYPE_MAP(__PROG_TYPE_TP_FN
)
48 #define __MAP_TYPE_TP_FN(x) \
49 TRACE_DEFINE_ENUM(BPF_MAP_TYPE_##x);
50 #define __MAP_TYPE_SYM_FN(x) \
51 { BPF_MAP_TYPE_##x, #x },
52 #define __MAP_TYPE_SYM_TAB \
53 __MAP_TYPE_MAP(__MAP_TYPE_SYM_FN) { -1, 0 }
54 __MAP_TYPE_MAP(__MAP_TYPE_TP_FN
)
56 DECLARE_EVENT_CLASS(bpf_prog_event
,
58 TP_PROTO(const struct bpf_prog
*prg
),
63 __array(u8
, prog_tag
, 8)
68 BUILD_BUG_ON(sizeof(__entry
->prog_tag
) != sizeof(prg
->tag
));
69 memcpy(__entry
->prog_tag
, prg
->tag
, sizeof(prg
->tag
));
70 __entry
->type
= prg
->type
;
73 TP_printk("prog=%s type=%s",
74 __print_hex_str(__entry
->prog_tag
, 8),
75 __print_symbolic(__entry
->type
, __PROG_TYPE_SYM_TAB
))
78 DEFINE_EVENT(bpf_prog_event
, bpf_prog_get_type
,
80 TP_PROTO(const struct bpf_prog
*prg
),
85 DEFINE_EVENT(bpf_prog_event
, bpf_prog_put_rcu
,
87 TP_PROTO(const struct bpf_prog
*prg
),
92 TRACE_EVENT(bpf_prog_load
,
94 TP_PROTO(const struct bpf_prog
*prg
, int ufd
),
99 __array(u8
, prog_tag
, 8)
105 BUILD_BUG_ON(sizeof(__entry
->prog_tag
) != sizeof(prg
->tag
));
106 memcpy(__entry
->prog_tag
, prg
->tag
, sizeof(prg
->tag
));
107 __entry
->type
= prg
->type
;
111 TP_printk("prog=%s type=%s ufd=%d",
112 __print_hex_str(__entry
->prog_tag
, 8),
113 __print_symbolic(__entry
->type
, __PROG_TYPE_SYM_TAB
),
117 TRACE_EVENT(bpf_map_create
,
119 TP_PROTO(const struct bpf_map
*map
, int ufd
),
125 __field(u32
, size_key
)
126 __field(u32
, size_value
)
127 __field(u32
, max_entries
)
133 __entry
->type
= map
->map_type
;
134 __entry
->size_key
= map
->key_size
;
135 __entry
->size_value
= map
->value_size
;
136 __entry
->max_entries
= map
->max_entries
;
137 __entry
->flags
= map
->map_flags
;
141 TP_printk("map type=%s ufd=%d key=%u val=%u max=%u flags=%x",
142 __print_symbolic(__entry
->type
, __MAP_TYPE_SYM_TAB
),
143 __entry
->ufd
, __entry
->size_key
, __entry
->size_value
,
144 __entry
->max_entries
, __entry
->flags
)
147 DECLARE_EVENT_CLASS(bpf_obj_prog
,
149 TP_PROTO(const struct bpf_prog
*prg
, int ufd
,
150 const struct filename
*pname
),
152 TP_ARGS(prg
, ufd
, pname
),
155 __array(u8
, prog_tag
, 8)
157 __string(path
, pname
->name
)
161 BUILD_BUG_ON(sizeof(__entry
->prog_tag
) != sizeof(prg
->tag
));
162 memcpy(__entry
->prog_tag
, prg
->tag
, sizeof(prg
->tag
));
163 __assign_str(path
, pname
->name
);
167 TP_printk("prog=%s path=%s ufd=%d",
168 __print_hex_str(__entry
->prog_tag
, 8),
169 __get_str(path
), __entry
->ufd
)
172 DEFINE_EVENT(bpf_obj_prog
, bpf_obj_pin_prog
,
174 TP_PROTO(const struct bpf_prog
*prg
, int ufd
,
175 const struct filename
*pname
),
177 TP_ARGS(prg
, ufd
, pname
)
180 DEFINE_EVENT(bpf_obj_prog
, bpf_obj_get_prog
,
182 TP_PROTO(const struct bpf_prog
*prg
, int ufd
,
183 const struct filename
*pname
),
185 TP_ARGS(prg
, ufd
, pname
)
188 DECLARE_EVENT_CLASS(bpf_obj_map
,
190 TP_PROTO(const struct bpf_map
*map
, int ufd
,
191 const struct filename
*pname
),
193 TP_ARGS(map
, ufd
, pname
),
198 __string(path
, pname
->name
)
202 __assign_str(path
, pname
->name
);
203 __entry
->type
= map
->map_type
;
207 TP_printk("map type=%s ufd=%d path=%s",
208 __print_symbolic(__entry
->type
, __MAP_TYPE_SYM_TAB
),
209 __entry
->ufd
, __get_str(path
))
212 DEFINE_EVENT(bpf_obj_map
, bpf_obj_pin_map
,
214 TP_PROTO(const struct bpf_map
*map
, int ufd
,
215 const struct filename
*pname
),
217 TP_ARGS(map
, ufd
, pname
)
220 DEFINE_EVENT(bpf_obj_map
, bpf_obj_get_map
,
222 TP_PROTO(const struct bpf_map
*map
, int ufd
,
223 const struct filename
*pname
),
225 TP_ARGS(map
, ufd
, pname
)
228 DECLARE_EVENT_CLASS(bpf_map_keyval
,
230 TP_PROTO(const struct bpf_map
*map
, int ufd
,
231 const void *key
, const void *val
),
233 TP_ARGS(map
, ufd
, key
, val
),
237 __field(u32
, key_len
)
238 __dynamic_array(u8
, key
, map
->key_size
)
239 __field(bool, key_trunc
)
240 __field(u32
, val_len
)
241 __dynamic_array(u8
, val
, map
->value_size
)
242 __field(bool, val_trunc
)
247 memcpy(__get_dynamic_array(key
), key
, map
->key_size
);
248 memcpy(__get_dynamic_array(val
), val
, map
->value_size
);
249 __entry
->type
= map
->map_type
;
250 __entry
->key_len
= min(map
->key_size
, 16U);
251 __entry
->key_trunc
= map
->key_size
!= __entry
->key_len
;
252 __entry
->val_len
= min(map
->value_size
, 16U);
253 __entry
->val_trunc
= map
->value_size
!= __entry
->val_len
;
257 TP_printk("map type=%s ufd=%d key=[%s%s] val=[%s%s]",
258 __print_symbolic(__entry
->type
, __MAP_TYPE_SYM_TAB
),
260 __print_hex(__get_dynamic_array(key
), __entry
->key_len
),
261 __entry
->key_trunc
? " ..." : "",
262 __print_hex(__get_dynamic_array(val
), __entry
->val_len
),
263 __entry
->val_trunc
? " ..." : "")
266 DEFINE_EVENT(bpf_map_keyval
, bpf_map_lookup_elem
,
268 TP_PROTO(const struct bpf_map
*map
, int ufd
,
269 const void *key
, const void *val
),
271 TP_ARGS(map
, ufd
, key
, val
)
274 DEFINE_EVENT(bpf_map_keyval
, bpf_map_update_elem
,
276 TP_PROTO(const struct bpf_map
*map
, int ufd
,
277 const void *key
, const void *val
),
279 TP_ARGS(map
, ufd
, key
, val
)
282 TRACE_EVENT(bpf_map_delete_elem
,
284 TP_PROTO(const struct bpf_map
*map
, int ufd
,
287 TP_ARGS(map
, ufd
, key
),
291 __field(u32
, key_len
)
292 __dynamic_array(u8
, key
, map
->key_size
)
293 __field(bool, key_trunc
)
298 memcpy(__get_dynamic_array(key
), key
, map
->key_size
);
299 __entry
->type
= map
->map_type
;
300 __entry
->key_len
= min(map
->key_size
, 16U);
301 __entry
->key_trunc
= map
->key_size
!= __entry
->key_len
;
305 TP_printk("map type=%s ufd=%d key=[%s%s]",
306 __print_symbolic(__entry
->type
, __MAP_TYPE_SYM_TAB
),
308 __print_hex(__get_dynamic_array(key
), __entry
->key_len
),
309 __entry
->key_trunc
? " ..." : "")
312 TRACE_EVENT(bpf_map_next_key
,
314 TP_PROTO(const struct bpf_map
*map
, int ufd
,
315 const void *key
, const void *key_next
),
317 TP_ARGS(map
, ufd
, key
, key_next
),
321 __field(u32
, key_len
)
322 __dynamic_array(u8
, key
, map
->key_size
)
323 __dynamic_array(u8
, nxt
, map
->key_size
)
324 __field(bool, key_trunc
)
325 __field(bool, key_null
)
331 memcpy(__get_dynamic_array(key
), key
, map
->key_size
);
332 __entry
->key_null
= !key
;
333 memcpy(__get_dynamic_array(nxt
), key_next
, map
->key_size
);
334 __entry
->type
= map
->map_type
;
335 __entry
->key_len
= min(map
->key_size
, 16U);
336 __entry
->key_trunc
= map
->key_size
!= __entry
->key_len
;
340 TP_printk("map type=%s ufd=%d key=[%s%s] next=[%s%s]",
341 __print_symbolic(__entry
->type
, __MAP_TYPE_SYM_TAB
),
343 __entry
->key_null
? "NULL" : __print_hex(__get_dynamic_array(key
),
345 __entry
->key_trunc
&& !__entry
->key_null
? " ..." : "",
346 __print_hex(__get_dynamic_array(nxt
), __entry
->key_len
),
347 __entry
->key_trunc
? " ..." : "")
350 #endif /* _TRACE_BPF_H */
352 #include <trace/define_trace.h>