Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags   |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1) // SPDX-License-Identifier: GPL-2.0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3)  * bpf-script-example.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4)  * Test basic LLVM building
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6) #ifndef LINUX_VERSION_CODE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7) # error Need LINUX_VERSION_CODE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8) # error Example: for 4.2 kernel, put 'clang-opt="-DLINUX_VERSION_CODE=0x40200" into llvm section of ~/.perfconfig'
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) #define BPF_ANY 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) #define BPF_MAP_TYPE_ARRAY 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) #define BPF_FUNC_map_lookup_elem 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) #define BPF_FUNC_map_update_elem 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) static void *(*bpf_map_lookup_elem)(void *map, void *key) =
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) 	(void *) BPF_FUNC_map_lookup_elem;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) static void *(*bpf_map_update_elem)(void *map, void *key, void *value, int flags) =
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) 	(void *) BPF_FUNC_map_update_elem;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) struct bpf_map_def {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) 	unsigned int type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) 	unsigned int key_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) 	unsigned int value_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) 	unsigned int max_entries;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) #define SEC(NAME) __attribute__((section(NAME), used))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) struct bpf_map_def SEC("maps") flip_table = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) 	.type = BPF_MAP_TYPE_ARRAY,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) 	.key_size = sizeof(int),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) 	.value_size = sizeof(int),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) 	.max_entries = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) SEC("func=do_epoll_wait")
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) int bpf_func__SyS_epoll_pwait(void *ctx)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) 	int ind =0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) 	int *flag = bpf_map_lookup_elem(&flip_table, &ind);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) 	int new_flag;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) 	if (!flag)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) 		return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) 	/* flip flag and store back */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) 	new_flag = !*flag;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) 	bpf_map_update_elem(&flip_table, &ind, &new_flag, BPF_ANY);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) 	return new_flag;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) char _license[] SEC("license") = "GPL";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) int _version SEC("version") = LINUX_VERSION_CODE;