Hi, When adding test case for BPF STRUCT OPS, I got the following error during test: libbpf: load bpf program failed: Permission denied libbpf: -- BEGIN DUMP LOG --- libbpf: R1 type=ctx expected=fp ; int BPF_PROG(test_1, struct bpf_dummy_ops_state *state) 0: (b4) w0 = -218893067 ; int BPF_PROG(test_1, struct bpf_dummy_ops_state *state) 1: (79) r1 = *(u64 *)(r1 +0) func 'test_1' arg0 type FWD is not a struct invalid bpf_context access off=0 size=8 The error is reported from btf_ctx_access(). And the cause is the definition of struct bpf_dummy_ops_state is separated from the definition of test_1 function: test_1 is defined in include/linux/bpf.h struct bpf_dummy_ops_state; struct bpf_dummy_ops { int (*test_1)(struct bpf_dummy_ops_state *cb); } bpf_dummy_ops_state is defined in net/bpf/bpf_dummy_struct_ops.c struct bpf_dummy_ops_state { }; So arg0 has BTF_KIND_FWD type, and the check in btf_ctx_access() fails. The problem can be fixed by moving the definition of bpf_dummy_ops_state into include/linux/bpf.h or using a void * instead of struct bpf_dummy_ops_state *. But forward declaration is possible under STRUCT_OPS scenario, so my question is whether or not it is a known issue and is there somebody working on this ? Regards, Tao