diff options
| author | Alexei Starovoitov <ast@kernel.org> | 2026-10-31 21:55:43 +0000 |
|---|---|---|
| committer | Alexei Starovoitov <ast@kernel.org> | 2026-11-02 22:20:01 +0000 |
| commit | 9d8affd7b6f57c5cce7f7255db4506d0428ee4af (patch) | |
| tree | 30fae084f27301cb85f99f9cb473f703bf5c828c /scripts/basic | |
| parent | c16c6c4683cc57dd2736750da12e04f1f74a45e1 (diff) | |
| download | linux-9d8affd7b6f57c5cce7f7255db4506d0428ee4af.tar.gz linux-9d8affd7b6f57c5cce7f7255db4506d0428ee4af.zip | |
selftests/bpf: Test one may_goto time slice per prog invocation
Most tests call a function that spins until may_goto stops it, four times.
With one time slice for an invocation of the prog only the first call
spins. With a time slice for each frame all four calls spin, and the test
fails after 1 sec.
group tests
-------------- ------------------------------------------------------
the problem 9 insns, three levels of short loops, a subprog with
65534 iterations, bpf_loop() with a callback that spins
or makes 60000 iterations
ways to a loop call, call through a function without a loop, global
function, callx, bpf_loop() inlined and not,
bpf_for_each_map_elem(), bpf_user_ringbuf_drain(),
bpf_find_vma(), bpf_rbtree_add()
bpf_loop() ends when the time is up: inlined and not, in a callback
of bpf_loop(). Goes on when BPF code calls the callback
too
count a loop that is on the stack ends when the time is up,
65535 calls that make one iteration read the clock
new time slice timer, wq, task_work, call_rcu, call_rcu_tasks_trace,
each after a prog on the cpu that used up its time. Tail
call, extension prog
same one a timer callback that interrupts the prog doesn't give it
more time, the exception callback
registers may_goto takes a register that is dead: R0-RN are live,
for each N. A register that is live through the back
edge only, at the target only, behind the may_goto only.
All of that when it calls C and when the time is up.
16-byte return value
other tracing prog with frames in a private stack, may_goto in
dead code
Two tests lock up a cpu on a kernel with a time slice for each frame: the
9 insns and the three levels of short loops. All other tests give up and
fail there, or pass. The tests are for x86-64 and arm64 with the JIT only.
may_goto_far gets four subtests with the may_goto in a subprog.
The test is serial. Its progs spin for 250 ms in an RCU read-side critical
section, one after the other. Next to them in 'test_progs -j' the test
"mmap" gives up its wait for the end of a map. The test takes 10 sec.
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Link: https://patch.msgid.link/20261031215543.682284-10-alexei.starovoitov@gmail.com
Diffstat (limited to 'scripts/basic')
0 files changed, 0 insertions, 0 deletions
