When selftests are built with a new enough clang, the arena selftests
opt-in to use LLVM address_space attribute annotations for arena
pointers.
These annotations are not emitted by kfunc prototype generation. This
causes compilation errors when clang sees conflicting prototypes.
Fix by opting arena selftests out of using generated kfunc prototypes.
Fixes: 770abbb5a2
("bpftool: Support dumping kfunc prototypes from BTF")
Reported-by: kernel test robot <lkp@intel.com>
Closes: https://lore.kernel.org/r/202406131810.c1B8hTm8-lkp@intel.com/
Signed-off-by: Daniel Xu <dxu@dxuuu.xyz>
Link: https://lore.kernel.org/r/fc59a617439ceea9ad8dfbb4786843c2169496ae.1718295425.git.dxu@dxuuu.xyz
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
88 lines
1.7 KiB
C
88 lines
1.7 KiB
C
// SPDX-License-Identifier: GPL-2.0
|
|
/* Copyright (c) 2024 Meta Platforms, Inc. and affiliates. */
|
|
#define BPF_NO_KFUNC_PROTOTYPES
|
|
#include <vmlinux.h>
|
|
#include <bpf/bpf_helpers.h>
|
|
#include <bpf/bpf_tracing.h>
|
|
#include <bpf/bpf_core_read.h>
|
|
#include "bpf_experimental.h"
|
|
|
|
struct {
|
|
__uint(type, BPF_MAP_TYPE_ARENA);
|
|
__uint(map_flags, BPF_F_MMAPABLE);
|
|
__uint(max_entries, 100); /* number of pages */
|
|
#ifdef __TARGET_ARCH_arm64
|
|
__ulong(map_extra, 0x1ull << 32); /* start of mmap() region */
|
|
#else
|
|
__ulong(map_extra, 0x1ull << 44); /* start of mmap() region */
|
|
#endif
|
|
} arena SEC(".maps");
|
|
|
|
#include "bpf_arena_alloc.h"
|
|
#include "bpf_arena_list.h"
|
|
|
|
struct elem {
|
|
struct arena_list_node node;
|
|
__u64 value;
|
|
};
|
|
|
|
struct arena_list_head __arena *list_head;
|
|
int list_sum;
|
|
int cnt;
|
|
bool skip = false;
|
|
|
|
#ifdef __BPF_FEATURE_ADDR_SPACE_CAST
|
|
long __arena arena_sum;
|
|
int __arena test_val = 1;
|
|
struct arena_list_head __arena global_head;
|
|
#else
|
|
long arena_sum SEC(".addr_space.1");
|
|
int test_val SEC(".addr_space.1");
|
|
#endif
|
|
|
|
int zero;
|
|
|
|
SEC("syscall")
|
|
int arena_list_add(void *ctx)
|
|
{
|
|
#ifdef __BPF_FEATURE_ADDR_SPACE_CAST
|
|
__u64 i;
|
|
|
|
list_head = &global_head;
|
|
|
|
for (i = zero; i < cnt && can_loop; i++) {
|
|
struct elem __arena *n = bpf_alloc(sizeof(*n));
|
|
|
|
test_val++;
|
|
n->value = i;
|
|
arena_sum += i;
|
|
list_add_head(&n->node, list_head);
|
|
}
|
|
#else
|
|
skip = true;
|
|
#endif
|
|
return 0;
|
|
}
|
|
|
|
SEC("syscall")
|
|
int arena_list_del(void *ctx)
|
|
{
|
|
#ifdef __BPF_FEATURE_ADDR_SPACE_CAST
|
|
struct elem __arena *n;
|
|
int sum = 0;
|
|
|
|
arena_sum = 0;
|
|
list_for_each_entry(n, list_head, node) {
|
|
sum += n->value;
|
|
arena_sum += n->value;
|
|
list_del(&n->node);
|
|
bpf_free(n);
|
|
}
|
|
list_sum = sum;
|
|
#else
|
|
skip = true;
|
|
#endif
|
|
return 0;
|
|
}
|
|
|
|
char _license[] SEC("license") = "GPL";
|