// 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 */