1c6bde958SFlorian Lehner // SPDX-License-Identifier: GPL-2.0
2c6bde958SFlorian Lehner 
3c6bde958SFlorian Lehner #include <linux/bpf.h>
4c6bde958SFlorian Lehner #include <bpf/bpf_helpers.h>
5c6bde958SFlorian Lehner 
6c6bde958SFlorian Lehner char _license[] SEC("license") = "GPL";
7c6bde958SFlorian Lehner 
8c6bde958SFlorian Lehner struct {
9c6bde958SFlorian Lehner 	__uint(type, BPF_MAP_TYPE_HASH);
10c6bde958SFlorian Lehner 	__uint(max_entries, 2);
11c6bde958SFlorian Lehner 	__type(key, struct bigelement);
12c6bde958SFlorian Lehner 	__type(value, __u32);
13c6bde958SFlorian Lehner } hash_map SEC(".maps");
14c6bde958SFlorian Lehner 
15c6bde958SFlorian Lehner struct {
16c6bde958SFlorian Lehner 	__uint(type, BPF_MAP_TYPE_PERCPU_ARRAY);
17c6bde958SFlorian Lehner 	__uint(max_entries, 1);
18c6bde958SFlorian Lehner 	__type(key, __u32);
19c6bde958SFlorian Lehner 	__type(value, struct bigelement);
20c6bde958SFlorian Lehner } key_map SEC(".maps");
21c6bde958SFlorian Lehner 
22c6bde958SFlorian Lehner struct bigelement {
23c6bde958SFlorian Lehner 	int a;
24c6bde958SFlorian Lehner 	char b[4096];
25c6bde958SFlorian Lehner 	long long c;
26c6bde958SFlorian Lehner };
27c6bde958SFlorian Lehner 
28c6bde958SFlorian Lehner SEC("raw_tracepoint/sys_enter")
bpf_hash_large_key_test(void * ctx)29c6bde958SFlorian Lehner int bpf_hash_large_key_test(void *ctx)
30c6bde958SFlorian Lehner {
31*c8ed6685SAndrii Nakryiko 	int zero = 0, value = 42;
32c6bde958SFlorian Lehner 	struct bigelement *key;
33c6bde958SFlorian Lehner 
34c6bde958SFlorian Lehner 	key = bpf_map_lookup_elem(&key_map, &zero);
35c6bde958SFlorian Lehner 	if (!key)
36c6bde958SFlorian Lehner 		return 0;
37c6bde958SFlorian Lehner 
38c6bde958SFlorian Lehner 	key->c = 1;
39c6bde958SFlorian Lehner 	if (bpf_map_update_elem(&hash_map, key, &value, BPF_ANY))
40c6bde958SFlorian Lehner 		return 0;
41c6bde958SFlorian Lehner 
42c6bde958SFlorian Lehner 	return 0;
43c6bde958SFlorian Lehner }
44c6bde958SFlorian Lehner 
45