diff options
| author | Tejun Heo <tj@kernel.org> | 2026-05-22 07:06:01 -1000 |
|---|---|---|
| committer | Tejun Heo <tj@kernel.org> | 2026-05-25 09:44:07 -1000 |
| commit | 9eca087deb0b35f3170109a9630a6c5c06c2e222 (patch) | |
| tree | dece077b0c0019b694398950a5566eb98e1b645d /include/linux/zstd_errors.h | |
| parent | 0e2819cba977f910c7eeaf77c705e28787c3385d (diff) | |
sched_ext: Sub-allocator over kernel-claimed BPF arena pages
Build a per-scheduler sub-allocator on top of pages claimed from the BPF
arena registered in the previous patch. Subsequent kernel-managed
arena-resident structures (e.g. per-CPU set_cmask cmask) carve their storage
from this pool.
scx_arena_pool_init() creates a gen_pool. scx_arena_alloc() returns the
kernel VA. On exhaustion, the pool grows by claiming more pages via
bpf_arena_alloc_pages_sleepable(). Chunks are added at the kernel-side
mapping address. Callers translate to the BPF-arena form themselves if
needed.
Allocations sleep (GFP_KERNEL) - they may grow the pool through vzalloc and
arena page allocation. All current consumers run from the enable path (after
ops.init() and the kernel-side arena auto-discovery, before validate_ops()),
where sleeping is fine.
scx_arena_pool_destroy() walks each chunk, returns outstanding ranges to the
gen_pool with gen_pool_free() and then calls gen_pool_destroy(). The
underlying arena pages are released when the arena map itself is torn down,
so the pool destroy doesn't free them explicitly.
v2: Switch scx_arena_alloc() to a loop. (Andrea)
Signed-off-by: Tejun Heo <tj@kernel.org>
Reviewed-by: Andrea Righi <arighi@nvidia.com>
Diffstat (limited to 'include/linux/zstd_errors.h')
0 files changed, 0 insertions, 0 deletions
