xref: /linux/tools/testing/selftests/bpf/libarena/src/common.bpf.c (revision 857071efc362d4641673c1fbf7e8a2d7a2408e75)
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 __weak void __arena *arena_malloc(size_t size)
41 {
42 	return buddy_alloc(&buddy, size);
43 }
44 
45 __weak void arena_free(void __arena *ptr)
46 {
47 	buddy_free(&buddy, ptr);
48 }
49 
50 
51 char _license[] SEC("license") = "GPL";
52