xref: /linux/tools/testing/selftests/bpf/libarena/src/common.bpf.c (revision 14c2b770d15d5b0d814cdef114de55e01a281e00)
1 // SPDX-License-Identifier: LGPL-2.1 OR BSD-2-Clause
2 /* Copyright (c) 2026 Meta Platforms, Inc. and affiliates. */
3 #include <libarena/common.h>
4 #include <libarena/asan.h>
5 #include <libarena/buddy.h>
6 
7 struct buddy __arena buddy;
8 volatile u32 zero = 0;
9 
10 int arena_fls(__u64 word)
11 {
12 	if (!word)
13 		return 0;
14 
15 	return 64 - __builtin_clzll(word);
16 }
17 
18 SEC("syscall")
19 __weak int arena_get_info(struct arena_get_info_args *args)
20 {
21 	args->arena_base = arena_base(&arena);
22 
23 	return 0;
24 }
25 
26 SEC("syscall")
27 __weak int arena_alloc_reserve(struct arena_alloc_reserve_args *args)
28 {
29 	return bpf_arena_reserve_pages(&arena, NULL, args->nr_pages);
30 }
31 
32 SEC("syscall")
33 __weak int arena_buddy_reset(void)
34 {
35 	buddy_destroy(&buddy);
36 
37 	return buddy_init(&buddy);
38 }
39 
40 SEC("syscall")
41 __weak int arena_buddy_destroy(void)
42 {
43 	return buddy_destroy(&buddy);
44 }
45 
46 __weak void __arena *arena_malloc(size_t size)
47 {
48 	return buddy_alloc(&buddy, size);
49 }
50 
51 __weak void arena_free(void __arena *ptr)
52 {
53 	buddy_free(&buddy, ptr);
54 }
55 
56 
57 char _license[] SEC("license") = "GPL";
58