On Fri, Sep 9, 2022 at 3:50 PM Kumar Kartikeya Dwivedi <memxor@xxxxxxxxx> wrote: > > So compared to the example above, user will just do: > struct bpf_spin_lock lock1; > struct bpf_spin_lock lock2; > struct bpf_list_head head __contains(...) __guarded_by(lock1); > struct bpf_list_head head2 __contains(...) __guarded_by(lock2); > struct bpf_rb_root root __contains(...) __guarded_by(lock2); > > It looks much cleaner to me from a user perspective. Just define what > protects what, which also doubles as great documentation. Unfortunately that doesn't work. We cannot magically exclude the locks from global data because of skel/mmap requirements. We cannot move the locks automatically, because it involves massive analysis of the code and fixing all offsets in libbpf. So users have to use a different section when using global locks, rb_root, list_head. Since a different section is needed anyway, it's better to keep one-lock-per-map-value for now.