* [PATCH bpf] bpf, arm64: allocate program buffer using kvcalloc instead of kcalloc
@ 2022-08-04 2:54 Aijun Sun
2022-08-08 14:50 ` patchwork-bot+netdevbpf
0 siblings, 1 reply; 2+ messages in thread
From: Aijun Sun @ 2022-08-04 2:54 UTC (permalink / raw)
To: ast, daniel, andrii, zlim.lnx; +Cc: bpf, catalin.marinas, will, Aijun Sun
It is not necessary to allocate contiguous physical memory for BPF
program buffer using kcalloc. When the BPF program is large more than
memory page size, kcalloc allocates multiple memory pages from buddy
system. If the device can not provide sufficient memory, for example
in low-end android devices[1], memory allocation for BPF program is likely
failed.
Test cases in lib/test_bpf.c all pass on ARM64 QEMU.
[1]
AndroidTestSuit: page allocation failure: order:4,
mode:0x40dc0(GFP_KERNEL|__GFP_COMP|__GFP_ZERO), nodemask=(null),cpuset=foreground,mems_allowed=0
Call trace:
dump_stack+0xa4/0x114
warn_alloc+0xf8/0x14c
__alloc_pages_slowpath+0xac8/0xb14
__alloc_pages_nodemask+0x194/0x3d0
kmalloc_order_trace+0x44/0x1e8
__kmalloc+0x29c/0x66c
bpf_int_jit_compile+0x17c/0x568
bpf_prog_select_runtime+0x4c/0x1b0
bpf_prepare_filter+0x5fc/0x6bc
bpf_prog_create_from_user+0x118/0x1c0
seccomp_set_mode_filter+0x1c4/0x7cc
__do_sys_prctl+0x380/0x1424
__arm64_sys_prctl+0x20/0x2c
el0_svc_common+0xc8/0x22c
el0_svc_handler+0x1c/0x28
el0_svc+0x8/0x100
Signed-off-by: Aijun Sun <aijun.sun@unisoc.com>
---
arch/arm64/net/bpf_jit_comp.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/arch/arm64/net/bpf_jit_comp.c b/arch/arm64/net/bpf_jit_comp.c
index 42f2e9a8616c..80918e60387b 100644
--- a/arch/arm64/net/bpf_jit_comp.c
+++ b/arch/arm64/net/bpf_jit_comp.c
@@ -1399,7 +1399,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog)
memset(&ctx, 0, sizeof(ctx));
ctx.prog = prog;
- ctx.offset = kcalloc(prog->len + 1, sizeof(int), GFP_KERNEL);
+ ctx.offset = kvcalloc(prog->len + 1, sizeof(int), GFP_KERNEL);
if (ctx.offset == NULL) {
prog = orig_prog;
goto out_off;
@@ -1499,7 +1499,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog)
ctx.offset[i] *= AARCH64_INSN_SIZE;
bpf_prog_fill_jited_linfo(prog, ctx.offset + 1);
out_off:
- kfree(ctx.offset);
+ kvfree(ctx.offset);
kfree(jit_data);
prog->aux->jit_data = NULL;
}
--
2.29.0
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH bpf] bpf, arm64: allocate program buffer using kvcalloc instead of kcalloc
2022-08-04 2:54 [PATCH bpf] bpf, arm64: allocate program buffer using kvcalloc instead of kcalloc Aijun Sun
@ 2022-08-08 14:50 ` patchwork-bot+netdevbpf
0 siblings, 0 replies; 2+ messages in thread
From: patchwork-bot+netdevbpf @ 2022-08-08 14:50 UTC (permalink / raw)
To: Aijun Sun
Cc: ast, daniel, andrii, zlim.lnx, bpf, catalin.marinas, will,
aijun.sun
Hello:
This patch was applied to bpf/bpf.git (master)
by Daniel Borkmann <daniel@iogearbox.net>:
On Thu, 4 Aug 2022 10:54:42 +0800 you wrote:
> It is not necessary to allocate contiguous physical memory for BPF
> program buffer using kcalloc. When the BPF program is large more than
> memory page size, kcalloc allocates multiple memory pages from buddy
> system. If the device can not provide sufficient memory, for example
> in low-end android devices[1], memory allocation for BPF program is likely
> failed.
>
> [...]
Here is the summary with links:
- [bpf] bpf, arm64: allocate program buffer using kvcalloc instead of kcalloc
https://git.kernel.org/bpf/bpf/c/19f68ed6dc90
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:[~2022-08-08 14:50 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-08-04 2:54 [PATCH bpf] bpf, arm64: allocate program buffer using kvcalloc instead of kcalloc Aijun Sun
2022-08-08 14:50 ` 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