On Wed, Feb 7, 2024 at 1:12 PM Barret Rhoden <brho@xxxxxxxxxx> wrote: > > On 2/7/24 15:55, Alexei Starovoitov wrote: > >> instead of uaddr, can you change this to take an address relative to the > >> arena ("arena virtual address"?)? the caller of this is in BPF, and > >> they don't easily know the user virtual address. maybe even just pgoff > >> directly. > > I thought about it, but it doesn't quite make sense. > > bpf prog only sees user addresses. > > All load/store returns them. If it bpf_printk-s an address it will be > > user address. > > bpf_arena_alloc_pages() also returns a user address. > > Yeah, makes sense to keep them all in the same address space. > > > > > Kernel addresses are not seen by bpf prog at all. > > kern_vm_base is completely hidden. > > Only at JIT time, it's added to pointers. > > So passing uaddr to arena_alloc_pages() matches mmap style. > > > > uaddr = bpf_arena_alloc_pages(... uaddr ...) > > uaddr = mmap(uaddr, ...MAP_FIXED) > > > > Passing pgoff would be weird. > > Also note that there is no extra flag for bpf_arena_alloc_pages(). > > uaddr == full 64-bit of zeros is not a valid addr to use. > > The problem I had with uaddr was that when I'm writing a BPF program, I > don't know which address to use for a given page, e.g. the beginning of > the arena. I needed some way to tell me the user address "base" of the > arena. Though now that I can specify the user_vm_start through the > map_extra, I think I'm ok. > > Specifically, say I want to break up my arena into two, 2GB chunks, one > for each numa node, and I want to bump-allocate from each chunk. When I > want to allocate the first page from either segment, I'll need to know > what user address is offset 0 or offset 2GB. bump allocate... you mean like page_frag alloc does? I've implemented one on top of arena: https://git.kernel.org/pub/scm/linux/kernel/git/ast/bpf.git/tree/tools/testing/selftests/bpf/bpf_arena_alloc.h?h=arena&id=36d78b0f1c14c959d907d68cd7d54439b9213d0c Also I believe I addressed all issues with missing mutex and wrap around, and pushed to: https://git.kernel.org/pub/scm/linux/kernel/git/ast/bpf.git/commit/?h=arena&id=e1cb522fee661e7346e8be567eade9cf607eaf11 Please take a look. Including the wrap around test in the last commit: https://git.kernel.org/pub/scm/linux/kernel/git/ast/bpf.git/commit/?h=arena&id=01653c393a4167ccca23dc5a69aa9cf34a46eabd Will wait a bit before sending v2.