xref: /linux/tools/testing/selftests/bpf/libarena/src/common.bpf.c (revision 367e6e4a8173d47b4c57181cdd9dcbfc291755f0)
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 const volatile u32 zero = 0;
8 
9 struct buddy __arena buddy;
10 
11 int arena_fls(__u64 word)
12 {
13 	if (!word)
14 		return 0;
15 
16 	return 64 - __builtin_clzll(word);
17 }
18 
19 SEC("syscall")
20 __weak int arena_get_info(struct arena_get_info_args *args)
21 {
22 	args->arena_base = arena_base(&arena);
23 
24 	return 0;
25 }
26 
27 SEC("syscall")
28 __weak int arena_alloc_reserve(struct arena_alloc_reserve_args *args)
29 {
30 	return bpf_arena_reserve_pages(&arena, NULL, args->nr_pages);
31 }
32 
33 SEC("syscall")
34 __weak int arena_buddy_reset(void)
35 {
36 	buddy_destroy(&buddy);
37 
38 	return buddy_init(&buddy);
39 }
40 
41 __weak void __arena *arena_malloc(size_t size)
42 {
43 	return buddy_alloc(&buddy, size);
44 }
45 
46 __weak void arena_free(void __arena *ptr)
47 {
48 	buddy_free(&buddy, ptr);
49 }
50 
51 
52 char _license[] SEC("license") = "GPL";
53