mirror of
https://github.com/torvalds/linux.git
synced 2026-04-18 14:53:58 -04:00
Update selftests to use the new non-_impl kfuncs marked with KF_IMPLICIT_ARGS by removing redundant declarations and macros from bpf_experimental.h (the new kfuncs are present in the vmlinux.h) and updating relevant callsites. Fix spin_lock verifier-log matching for lock_id_kptr_preserve by accepting variable instruction numbers. The calls to kfuncs with implicit arguments do not have register moves (e.g. r5 = 0) corresponding to dummy arguments anymore, so the order of instructions has shifted. Acked-by: Mykyta Yatsenko <yatsenko@meta.com> Signed-off-by: Ihor Solodrai <ihor.solodrai@linux.dev> Acked-by: Jiri Olsa <jolsa@kernel.org> Link: https://lore.kernel.org/r/20260327203241.3365046-2-ihor.solodrai@linux.dev Signed-off-by: Alexei Starovoitov <ast@kernel.org>
49 lines
1004 B
C
49 lines
1004 B
C
// SPDX-License-Identifier: GPL-2.0
|
|
/* Copyright (C) 2023. Huawei Technologies Co., Ltd */
|
|
#include <linux/types.h>
|
|
#include <bpf/bpf_helpers.h>
|
|
|
|
#include "bpf_experimental.h"
|
|
#include "bpf_misc.h"
|
|
|
|
char _license[] SEC("license") = "GPL";
|
|
|
|
struct bin_data {
|
|
char blob[32];
|
|
};
|
|
|
|
#define private(name) SEC(".bss." #name) __hidden __attribute__((aligned(8)))
|
|
private(kptr) struct bin_data __kptr * ptr;
|
|
|
|
SEC("tc")
|
|
__naked int kptr_xchg_inline(void)
|
|
{
|
|
asm volatile (
|
|
"r1 = %[ptr] ll;"
|
|
"r2 = 0;"
|
|
"call %[bpf_kptr_xchg];"
|
|
"if r0 == 0 goto 1f;"
|
|
"r1 = r0;"
|
|
"r2 = 0;"
|
|
"call %[bpf_obj_drop];"
|
|
"1:"
|
|
"r0 = 0;"
|
|
"exit;"
|
|
:
|
|
: __imm_addr(ptr),
|
|
__imm(bpf_kptr_xchg),
|
|
__imm(bpf_obj_drop)
|
|
: __clobber_all
|
|
);
|
|
}
|
|
|
|
/* BTF FUNC records are not generated for kfuncs referenced
|
|
* from inline assembly. These records are necessary for
|
|
* libbpf to link the program. The function below is a hack
|
|
* to ensure that BTF FUNC records are generated.
|
|
*/
|
|
void __btf_root(void)
|
|
{
|
|
bpf_obj_drop(NULL);
|
|
}
|