BPF List
 help / color / mirror / Atom feed
* Generic Data Structure Iterators
@ 2024-02-12 20:48 Matt Bobrowski
  2024-02-12 23:20 ` Song Liu
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Matt Bobrowski @ 2024-02-12 20:48 UTC (permalink / raw)
  To: bpf; +Cc: ast, andrii, yonghong.song, daniel

In numerous BPF programs, I've found myself needing to iterate over
some in-kernel generic data structure i.e. list_head, hlist_head,
rbtree, etc. The approach that I generally use to do this consists of
using bpf_loop(), container_of(), and BPF_CORE_READ(). The end result
of this approach is always rather messy as it's mostly implementation
specific and bound to a specific in-kernel type i.e. mount, dentry,
inode, etc.

Recently, I came across the newly added bpf_for_each() open-coded
iterator, which could possibly help out a little with trivially
performing such iterations within BPF programs. However, looking into
the usage of this helper a little more, I realized that this too needs
to be backed by the new kfunc iterator framework
i.e. bpf_iter_##type##_new(), bpf_iter_##type##_destroy(),
bpf_iter_##type##_next(). So, in practice it seems like adopting this
approach to solve this specific iterator problem would lead us into a
situation where we'd be having to define iterator kfuncs for each
in-kernel type and respective field.

Now having said this, I'm wondering whether anyone here has considered
possibly solving this iterator based problem a little more
generically? That is, by exposing a set of kfuncs that allow you to
iterate over a list_head, hlist_head, rbtree, etc, independent of an
underlying in-kernel type and similar to your *list_for_each*() based
helpers that you'd typically find for each of these in-kernel generic
data structures. If so, what were your findings when exploring this
problem space?

/M

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2024-02-13 20:48 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-02-12 20:48 Generic Data Structure Iterators Matt Bobrowski
2024-02-12 23:20 ` Song Liu
2024-02-13 20:37 ` Alexei Starovoitov
2024-02-13 20:47 ` Kumar Kartikeya Dwivedi

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox