* [PATCH bpf-next v2] bpf: Add necessary migrate_{disable,enable} in range_tree
@ 2024-11-15 6:03 Yonghong Song
2024-11-15 16:20 ` patchwork-bot+netdevbpf
0 siblings, 1 reply; 2+ messages in thread
From: Yonghong Song @ 2024-11-15 6:03 UTC (permalink / raw)
To: bpf
Cc: Alexei Starovoitov, Andrii Nakryiko, Daniel Borkmann, kernel-team,
Martin KaFai Lau
When running bpf selftest (./test_progs -j), the following warnings
showed up:
$ ./test_progs -t arena_atomics
...
BUG: using smp_processor_id() in preemptible [00000000] code: kworker/u19:0/12501
caller is bpf_mem_free+0x128/0x330
...
Call Trace:
<TASK>
dump_stack_lvl
check_preemption_disabled
bpf_mem_free
range_tree_destroy
arena_map_free
bpf_map_free_deferred
process_scheduled_works
...
For selftests arena_htab and arena_list, similar smp_process_id() BUGs are
dumped, and the following are two stack trace:
<TASK>
dump_stack_lvl
check_preemption_disabled
bpf_mem_alloc
range_tree_set
arena_map_alloc
map_create
...
<TASK>
dump_stack_lvl
check_preemption_disabled
bpf_mem_alloc
range_tree_clear
arena_vm_fault
do_pte_missing
handle_mm_fault
do_user_addr_fault
...
Adding migrate_{disable,enable}() around related bpf_mem_{alloc,free}()
calls can fix the issue.
Fixes: b795379757eb ("bpf: Introduce range_tree data structure and use it in bpf arena")
Signed-off-by: Yonghong Song <yonghong.song@linux.dev>
---
kernel/bpf/range_tree.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/kernel/bpf/range_tree.c b/kernel/bpf/range_tree.c
index f7915ab0a6d3..5bdf9aadca3a 100644
--- a/kernel/bpf/range_tree.c
+++ b/kernel/bpf/range_tree.c
@@ -150,7 +150,9 @@ int range_tree_clear(struct range_tree *rt, u32 start, u32 len)
range_it_insert(rn, rt);
/* Add a range */
+ migrate_disable();
new_rn = bpf_mem_alloc(&bpf_global_ma, sizeof(struct range_node));
+ migrate_enable();
if (!new_rn)
return -ENOMEM;
new_rn->rn_start = last + 1;
@@ -170,7 +172,9 @@ int range_tree_clear(struct range_tree *rt, u32 start, u32 len)
} else {
/* in the middle of the clearing range */
range_it_remove(rn, rt);
+ migrate_disable();
bpf_mem_free(&bpf_global_ma, rn);
+ migrate_enable();
}
}
return 0;
@@ -223,7 +227,9 @@ int range_tree_set(struct range_tree *rt, u32 start, u32 len)
range_it_remove(right, rt);
left->rn_last = right->rn_last;
range_it_insert(left, rt);
+ migrate_disable();
bpf_mem_free(&bpf_global_ma, right);
+ migrate_enable();
} else if (left) {
/* Combine with the left range */
range_it_remove(left, rt);
@@ -235,7 +241,9 @@ int range_tree_set(struct range_tree *rt, u32 start, u32 len)
right->rn_start = start;
range_it_insert(right, rt);
} else {
+ migrate_disable();
left = bpf_mem_alloc(&bpf_global_ma, sizeof(struct range_node));
+ migrate_enable();
if (!left)
return -ENOMEM;
left->rn_start = start;
@@ -251,7 +259,9 @@ void range_tree_destroy(struct range_tree *rt)
while ((rn = range_it_iter_first(rt, 0, -1U))) {
range_it_remove(rn, rt);
+ migrate_disable();
bpf_mem_free(&bpf_global_ma, rn);
+ migrate_enable();
}
}
--
2.43.5
^ permalink raw reply related [flat|nested] 2+ messages in thread* Re: [PATCH bpf-next v2] bpf: Add necessary migrate_{disable,enable} in range_tree
2024-11-15 6:03 [PATCH bpf-next v2] bpf: Add necessary migrate_{disable,enable} in range_tree Yonghong Song
@ 2024-11-15 16:20 ` patchwork-bot+netdevbpf
0 siblings, 0 replies; 2+ messages in thread
From: patchwork-bot+netdevbpf @ 2024-11-15 16:20 UTC (permalink / raw)
To: Yonghong Song; +Cc: bpf, ast, andrii, daniel, kernel-team, martin.lau
Hello:
This patch was applied to bpf/bpf-next.git (master)
by Alexei Starovoitov <ast@kernel.org>:
On Thu, 14 Nov 2024 22:03:54 -0800 you wrote:
> When running bpf selftest (./test_progs -j), the following warnings
> showed up:
>
> $ ./test_progs -t arena_atomics
> ...
> BUG: using smp_processor_id() in preemptible [00000000] code: kworker/u19:0/12501
> caller is bpf_mem_free+0x128/0x330
> ...
> Call Trace:
> <TASK>
> dump_stack_lvl
> check_preemption_disabled
> bpf_mem_free
> range_tree_destroy
> arena_map_free
> bpf_map_free_deferred
> process_scheduled_works
> ...
>
> [...]
Here is the summary with links:
- [bpf-next,v2] bpf: Add necessary migrate_{disable,enable} in range_tree
https://git.kernel.org/bpf/bpf-next/c/4ff04abf9d5b
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2024-11-15 16:20 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-11-15 6:03 [PATCH bpf-next v2] bpf: Add necessary migrate_{disable,enable} in range_tree Yonghong Song
2024-11-15 16:20 ` patchwork-bot+netdevbpf
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox