On Thu, Nov 17, 2022 at 3:58 PM Kumar Kartikeya Dwivedi <memxor@xxxxxxxxx> wrote: > > On Fri, Nov 18, 2022 at 04:57:50AM IST, Dave Marchevsky wrote: > > On 11/17/22 6:05 PM, Alexei Starovoitov wrote: > > > On Thu, Nov 17, 2022 at 2:56 PM Kumar Kartikeya Dwivedi > > > <memxor@xxxxxxxxx> wrote: > > >> > > >> Include various tests covering the success and failure cases. Also, run > > >> the success cases at runtime to verify correctness of linked list > > >> manipulation routines, in addition to ensuring successful verification. > > >> > > >> Signed-off-by: Kumar Kartikeya Dwivedi <memxor@xxxxxxxxx> > > >> --- > > > > [...] > > > > >> diff --git a/tools/testing/selftests/bpf/progs/linked_list.h b/tools/testing/selftests/bpf/progs/linked_list.h > > >> new file mode 100644 > > >> index 000000000000..8db80ed64db1 > > >> --- /dev/null > > >> +++ b/tools/testing/selftests/bpf/progs/linked_list.h > > >> @@ -0,0 +1,56 @@ > > >> +// SPDX-License-Identifier: GPL-2.0 > > >> +#ifndef LINKED_LIST_H > > >> +#define LINKED_LIST_H > > >> + > > >> +#include <vmlinux.h> > > >> +#include <bpf/bpf_helpers.h> > > >> +#include "bpf_experimental.h" > > >> + > > >> +struct bar { > > >> + struct bpf_list_node node; > > >> + int data; > > >> +}; > > >> + > > >> +struct foo { > > >> + struct bpf_list_node node; > > >> + struct bpf_list_head head __contains(bar, node); > > >> + struct bpf_spin_lock lock; > > >> + int data; > > >> + struct bpf_list_node node2; > > >> +}; > > >> + > > >> +struct map_value { > > >> + struct bpf_spin_lock lock; > > >> + int data; > > >> + struct bpf_list_head head __contains(foo, node); > > >> +}; > > >> + > > >> +struct array_map { > > >> + __uint(type, BPF_MAP_TYPE_ARRAY); > > >> + __type(key, int); > > >> + __type(value, struct map_value); > > >> + __uint(max_entries, 1); > > >> +}; > > >> + > > >> +struct array_map array_map SEC(".maps"); > > >> +struct array_map inner_map SEC(".maps"); > > >> + > > >> +struct { > > >> + __uint(type, BPF_MAP_TYPE_ARRAY_OF_MAPS); > > >> + __uint(max_entries, 1); > > >> + __type(key, int); > > >> + __type(value, int); > > >> + __array(values, struct array_map); > > >> +} map_of_maps SEC(".maps") = { > > >> + .values = { > > >> + [0] = &inner_map, > > >> + }, > > >> +}; > > >> + > > >> +#define private(name) SEC(".data." #name) __hidden __attribute__((aligned(8))) > > >> + > > >> +private(A) struct bpf_spin_lock glock; > > >> +private(A) struct bpf_list_head ghead __contains(foo, node); > > >> +private(B) struct bpf_spin_lock glock2; > > > > > > The latest llvm crashes with a bug here: > > > > > > fatal error: error in backend: unable to write nop sequence of 4 bytes > > > > > > Please see BPF CI. > > > > > > So far I wasn't able to find a manual workaround :( > > > Please give it a shot too. > > > > > > Or disable the test for this case for now? > > > > I noticed this in an earlier version of the series. > > Will be submitting a fix to LLVM upstream today. > > > > Until that's settled, reverting commit 463da422f019 ("MC: make section classification a bit more thorough") > > in LLVM will fix the issue. > > I can confirm the revert fixes the crash. > > Let me know what to do (whether to disable the test temporarily and respin, or > whether the revert can be applied to CI)? And whether I should respin the set > adding it to DENYLIST.aarch64. Please respin with some kind of workaround (if possible) or temp disable just that test.