| // SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) | 
 | // Copyright (c) 2020 Anton Protopopov | 
 | #ifndef __MAPS_BPF_H | 
 | #define __MAPS_BPF_H | 
 |  | 
 | #include <bpf/bpf_helpers.h> | 
 | #include <asm-generic/errno.h> | 
 |  | 
 | static __always_inline void * | 
 | bpf_map_lookup_or_try_init(void *map, const void *key, const void *init) | 
 | { | 
 | 	void *val; | 
 | 	long err; | 
 |  | 
 | 	val = bpf_map_lookup_elem(map, key); | 
 | 	if (val) | 
 | 		return val; | 
 |  | 
 | 	err = bpf_map_update_elem(map, key, init, BPF_NOEXIST); | 
 | 	if (err && err != -EEXIST) | 
 | 		return 0; | 
 |  | 
 | 	return bpf_map_lookup_elem(map, key); | 
 | } | 
 |  | 
 | #endif /* __MAPS_BPF_H */ |