Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at nocache-cleanup 58 lines 1.3 kB view raw
1// SPDX-License-Identifier: GPL-2.0 2/* Copyright (c) 2024 Meta Platforms, Inc. and affiliates. */ 3 4#include <vmlinux.h> 5#include <bpf/bpf_tracing.h> 6#include "bpf_misc.h" 7#include "../test_kmods/bpf_testmod.h" 8#include "../test_kmods/bpf_testmod_kfunc.h" 9 10char _license[] SEC("license") = "GPL"; 11 12static __noinline __used int subprog(struct st_ops_args *args) 13{ 14 args->a += 1; 15 return args->a; 16} 17 18SEC("struct_ops/test_epilogue_subprog") 19int BPF_PROG(test_epilogue_subprog, struct st_ops_args *args) 20{ 21 subprog(args); 22 return args->a; 23} 24 25struct { 26 __uint(type, BPF_MAP_TYPE_PROG_ARRAY); 27 __uint(max_entries, 1); 28 __uint(key_size, sizeof(__u32)); 29 __uint(value_size, sizeof(__u32)); 30 __array(values, void (void)); 31} epilogue_map SEC(".maps") = { 32 .values = { 33 [0] = (void *)&test_epilogue_subprog, 34 } 35}; 36 37SEC("struct_ops/test_epilogue_tailcall") 38int test_epilogue_tailcall(unsigned long long *ctx) 39{ 40 bpf_tail_call(ctx, &epilogue_map, 0); 41 return 0; 42} 43 44SEC(".struct_ops.link") 45struct bpf_testmod_st_ops epilogue_tailcall = { 46 .test_epilogue = (void *)test_epilogue_tailcall, 47}; 48 49SEC(".struct_ops.link") 50struct bpf_testmod_st_ops epilogue_subprog = { 51 .test_epilogue = (void *)test_epilogue_subprog, 52}; 53 54SEC("syscall") 55int syscall_epilogue_tailcall(struct st_ops_args *args) 56{ 57 return bpf_kfunc_st_ops_test_epilogue(args); 58}