1*7dd88059SDavid Vernet // SPDX-License-Identifier: GPL-2.0
2*7dd88059SDavid Vernet /* Copyright (C) 2021. Huawei Technologies Co., Ltd */
3*7dd88059SDavid Vernet #include "vmlinux.h"
4*7dd88059SDavid Vernet #include <bpf/bpf_helpers.h>
5*7dd88059SDavid Vernet #include <bpf/bpf_tracing.h>
6*7dd88059SDavid Vernet 
7*7dd88059SDavid Vernet char _license[] SEC("license") = "GPL";
8*7dd88059SDavid Vernet 
9*7dd88059SDavid Vernet SEC("struct_ops/test_1")
BPF_PROG(test_1,struct bpf_dummy_ops_state * state)10*7dd88059SDavid Vernet int BPF_PROG(test_1, struct bpf_dummy_ops_state *state)
11*7dd88059SDavid Vernet {
12*7dd88059SDavid Vernet 	int ret;
13*7dd88059SDavid Vernet 
14*7dd88059SDavid Vernet 	if (!state)
15*7dd88059SDavid Vernet 		return 0xf2f3f4f5;
16*7dd88059SDavid Vernet 
17*7dd88059SDavid Vernet 	ret = state->val;
18*7dd88059SDavid Vernet 	state->val = 0x5a;
19*7dd88059SDavid Vernet 	return ret;
20*7dd88059SDavid Vernet }
21*7dd88059SDavid Vernet 
22*7dd88059SDavid Vernet __u64 test_2_args[5];
23*7dd88059SDavid Vernet 
24*7dd88059SDavid Vernet SEC("struct_ops/test_2")
BPF_PROG(test_2,struct bpf_dummy_ops_state * state,int a1,unsigned short a2,char a3,unsigned long a4)25*7dd88059SDavid Vernet int BPF_PROG(test_2, struct bpf_dummy_ops_state *state, int a1, unsigned short a2,
26*7dd88059SDavid Vernet 	     char a3, unsigned long a4)
27*7dd88059SDavid Vernet {
28*7dd88059SDavid Vernet 	test_2_args[0] = (unsigned long)state;
29*7dd88059SDavid Vernet 	test_2_args[1] = a1;
30*7dd88059SDavid Vernet 	test_2_args[2] = a2;
31*7dd88059SDavid Vernet 	test_2_args[3] = a3;
32*7dd88059SDavid Vernet 	test_2_args[4] = a4;
33*7dd88059SDavid Vernet 	return 0;
34*7dd88059SDavid Vernet }
35*7dd88059SDavid Vernet 
36*7dd88059SDavid Vernet SEC("struct_ops.s/test_sleepable")
BPF_PROG(test_sleepable,struct bpf_dummy_ops_state * state)37*7dd88059SDavid Vernet int BPF_PROG(test_sleepable, struct bpf_dummy_ops_state *state)
38*7dd88059SDavid Vernet {
39*7dd88059SDavid Vernet 	return 0;
40*7dd88059SDavid Vernet }
41*7dd88059SDavid Vernet 
42*7dd88059SDavid Vernet SEC(".struct_ops")
43*7dd88059SDavid Vernet struct bpf_dummy_ops dummy_1 = {
44*7dd88059SDavid Vernet 	.test_1 = (void *)test_1,
45*7dd88059SDavid Vernet 	.test_2 = (void *)test_2,
46*7dd88059SDavid Vernet 	.test_sleepable = (void *)test_sleepable,
47*7dd88059SDavid Vernet };
48