2024-05-07 06:32:15

by Wang, Haiyue

[permalink] [raw]
Subject: [PATCH bpf-next v1] bpf,arena: Remove redundant page mask of vmf->address

As the comment described in "struct vm_fault":
".address" : 'Faulting virtual address - masked'
".real_address" : 'Faulting virtual address - unmasked'

The link [1] said: "Whatever the routes, all architectures end up to the
invocation of handle_mm_fault() which, in turn, (likely) ends up calling
__handle_mm_fault() to carry out the actual work of allocating the page
tables."

__handle_mm_fault() does address assignment:
.address = address & PAGE_MASK,
.real_address = address,

This is debug dump by running `./test_progs -a "*arena*"`:

[ 69.767494] arena fault: vmf->address = 10000001d000, vmf->real_address = 10000001d008
[ 69.767496] arena fault: vmf->address = 10000001c000, vmf->real_address = 10000001c008
[ 69.767499] arena fault: vmf->address = 10000001b000, vmf->real_address = 10000001b008
[ 69.767501] arena fault: vmf->address = 10000001a000, vmf->real_address = 10000001a008
[ 69.767504] arena fault: vmf->address = 100000019000, vmf->real_address = 100000019008
[ 69.769388] arena fault: vmf->address = 10000001e000, vmf->real_address = 10000001e1e8

So we can use the value of 'vmf->address' to do BPF arena kernel address
space cast directly.

[1] https://docs.kernel.org/mm/page_tables.html

Signed-off-by: Haiyue Wang <[email protected]>
---
kernel/bpf/arena.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/kernel/bpf/arena.c b/kernel/bpf/arena.c
index 343c3456c8dd..1876dc7ebb57 100644
--- a/kernel/bpf/arena.c
+++ b/kernel/bpf/arena.c
@@ -251,7 +251,7 @@ static vm_fault_t arena_vm_fault(struct vm_fault *vmf)
int ret;

kbase = bpf_arena_get_kern_vm_start(arena);
- kaddr = kbase + (u32)(vmf->address & PAGE_MASK);
+ kaddr = kbase + (u32)(vmf->address);

guard(mutex)(&arena->lock);
page = vmalloc_to_page((void *)kaddr);
--
2.43.2



2024-05-07 21:20:36

by patchwork-bot+netdevbpf

[permalink] [raw]
Subject: Re: [PATCH bpf-next v1] bpf,arena: Remove redundant page mask of vmf->address

Hello:

This patch was applied to bpf/bpf-next.git (master)
by Alexei Starovoitov <[email protected]>:

On Tue, 7 May 2024 14:33:39 +0800 you wrote:
> As the comment described in "struct vm_fault":
> ".address" : 'Faulting virtual address - masked'
> ".real_address" : 'Faulting virtual address - unmasked'
>
> The link [1] said: "Whatever the routes, all architectures end up to the
> invocation of handle_mm_fault() which, in turn, (likely) ends up calling
> __handle_mm_fault() to carry out the actual work of allocating the page
> tables."
>
> [...]

Here is the summary with links:
- [bpf-next,v1] bpf,arena: Remove redundant page mask of vmf->address
https://git.kernel.org/bpf/bpf-next/c/75b0fbf15d84

You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html