On Sun, Aug 04, 2019 at 05:45:23AM +0000, Yonghong Song wrote: > > > On 8/2/19 4:33 PM, Alexei Starovoitov wrote: > > Add a test with multiple exit conditions. > > It's not an infinite loop only when the verifier can properly track > > all math on variable 'i' through all possible ways of executing this loop. > > Agreed with motivation of this test. > > > > > barrier()s are needed to disable llvm optimization that combines multiple > > branches into fewer branches. > > > > Signed-off-by: Alexei Starovoitov <ast@xxxxxxxxxx> > > --- > > .../bpf/prog_tests/bpf_verif_scale.c | 1 + > > tools/testing/selftests/bpf/progs/loop5.c | 37 +++++++++++++++++++ > > 2 files changed, 38 insertions(+) > > create mode 100644 tools/testing/selftests/bpf/progs/loop5.c > > > > diff --git a/tools/testing/selftests/bpf/prog_tests/bpf_verif_scale.c b/tools/testing/selftests/bpf/prog_tests/bpf_verif_scale.c > > index 757e39540eda..29615a4a9362 100644 > > --- a/tools/testing/selftests/bpf/prog_tests/bpf_verif_scale.c > > +++ b/tools/testing/selftests/bpf/prog_tests/bpf_verif_scale.c > > @@ -72,6 +72,7 @@ void test_bpf_verif_scale(void) > > { "loop1.o", BPF_PROG_TYPE_RAW_TRACEPOINT }, > > { "loop2.o", BPF_PROG_TYPE_RAW_TRACEPOINT }, > > { "loop4.o", BPF_PROG_TYPE_RAW_TRACEPOINT }, > + { "loop5.o", BPF_PROG_TYPE_RAW_TRACEPOINT }, > > More like a BPF_PROG_TYPE_SCHED_CLS type although probably it does not > matter as we did not attach it to anywhere? right. will fix. > > > > /* partial unroll. 19k insn in a loop. > > * Total program size 20.8k insn. > > diff --git a/tools/testing/selftests/bpf/progs/loop5.c b/tools/testing/selftests/bpf/progs/loop5.c > > new file mode 100644 > > index 000000000000..9d9817efe208 > > --- /dev/null > > +++ b/tools/testing/selftests/bpf/progs/loop5.c > > @@ -0,0 +1,37 @@ > > +// SPDX-License-Identifier: GPL-2.0 > > +// Copyright (c) 2019 Facebook > > +#include <linux/sched.h> > > +#include <linux/ptrace.h> > > The above headers probably not needed. will fix