1*7dd88059SDavid Vernet // SPDX-License-Identifier: GPL-2.0
2*7dd88059SDavid Vernet /* Copyright (c) 2023 Meta Platforms, Inc. and affiliates. */
3*7dd88059SDavid Vernet 
4*7dd88059SDavid Vernet #include "vmlinux.h"
5*7dd88059SDavid Vernet #include <bpf/bpf_helpers.h>
6*7dd88059SDavid Vernet #include <bpf/bpf_tracing.h>
7*7dd88059SDavid Vernet 
8*7dd88059SDavid Vernet #include "bpf_misc.h"
9*7dd88059SDavid Vernet 
10*7dd88059SDavid Vernet char _license[] SEC("license") = "GPL";
11*7dd88059SDavid Vernet 
12*7dd88059SDavid Vernet SEC("struct_ops.s/test_2")
13*7dd88059SDavid Vernet __failure __msg("attach to unsupported member test_2 of struct bpf_dummy_ops")
BPF_PROG(test_unsupported_field_sleepable,struct bpf_dummy_ops_state * state,int a1,unsigned short a2,char a3,unsigned long a4)14*7dd88059SDavid Vernet int BPF_PROG(test_unsupported_field_sleepable,
15*7dd88059SDavid Vernet 	     struct bpf_dummy_ops_state *state, int a1, unsigned short a2,
16*7dd88059SDavid Vernet 	     char a3, unsigned long a4)
17*7dd88059SDavid Vernet {
18*7dd88059SDavid Vernet 	/* Tries to mark an unsleepable field in struct bpf_dummy_ops as sleepable. */
19*7dd88059SDavid Vernet 	return 0;
20*7dd88059SDavid Vernet }
21*7dd88059SDavid Vernet 
22*7dd88059SDavid Vernet SEC(".struct_ops")
23*7dd88059SDavid Vernet struct bpf_dummy_ops dummy_1 = {
24*7dd88059SDavid Vernet 	.test_1 = NULL,
25*7dd88059SDavid Vernet 	.test_2 = (void *)test_unsupported_field_sleepable,
26*7dd88059SDavid Vernet 	.test_sleepable = (void *)NULL,
27*7dd88059SDavid Vernet };
28