summaryrefslogtreecommitdiff
path: root/scripts/basic/split-include.c
diff options
context:
space:
mode:
authorAlexei Starovoitov <ast@kernel.org>2026-10-31 21:55:43 +0000
committerAlexei Starovoitov <ast@kernel.org>2026-11-02 22:20:01 +0000
commit9d8affd7b6f57c5cce7f7255db4506d0428ee4af (patch)
tree30fae084f27301cb85f99f9cb473f703bf5c828c /scripts/basic/split-include.c
parentc16c6c4683cc57dd2736750da12e04f1f74a45e1 (diff)
downloadlinux-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/split-include.c')
0 files changed, 0 insertions, 0 deletions