bpf: selftest: Trigger a DCE on the whole subprog
authorMartin KaFai Lau <kafai@fb.com>
Sat, 6 Nov 2021 01:40:20 +0000 (18:40 -0700)
committerAlexei Starovoitov <ast@kernel.org>
Sat, 6 Nov 2021 19:54:12 +0000 (12:54 -0700)
This patch adds a test to trigger the DCE to remove
the whole subprog to ensure the verifier  does not
depend on a stable subprog index.  The DCE is done
by testing a global const.

Signed-off-by: Martin KaFai Lau <kafai@fb.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Link: https://lore.kernel.org/bpf/20211106014020.651638-1-kafai@fb.com
tools/testing/selftests/bpf/progs/for_each_array_map_elem.c

index df918b2469da04b6acc45624e9ac063f1923d039..52f6995ff29c6c0d19072e808ee41f66bea3c8b2 100644 (file)
@@ -23,6 +23,16 @@ struct callback_ctx {
        int output;
 };
 
+const volatile int bypass_unused = 1;
+
+static __u64
+unused_subprog(struct bpf_map *map, __u32 *key, __u64 *val,
+              struct callback_ctx *data)
+{
+       data->output = 0;
+       return 1;
+}
+
 static __u64
 check_array_elem(struct bpf_map *map, __u32 *key, __u64 *val,
                 struct callback_ctx *data)
@@ -54,6 +64,8 @@ int test_pkt_access(struct __sk_buff *skb)
 
        data.output = 0;
        bpf_for_each_map_elem(&arraymap, check_array_elem, &data, 0);
+       if (!bypass_unused)
+               bpf_for_each_map_elem(&arraymap, unused_subprog, &data, 0);
        arraymap_output = data.output;
 
        bpf_for_each_map_elem(&percpu_map, check_percpu_elem, (void *)0, 0);