brintos

brintos / linux-shallow public Read only

0
0
Text · 2.1 KiB · 68a51dc Raw
73 lines · c
1/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */2/* Copyright (c) 2024 Meta Platforms, Inc. and affiliates. */3#pragma once4 5#ifndef WRITE_ONCE6#define WRITE_ONCE(x, val) ((*(volatile typeof(x) *) &(x)) = (val))7#endif8 9#ifndef NUMA_NO_NODE10#define	NUMA_NO_NODE	(-1)11#endif12 13#ifndef arena_container_of14#define arena_container_of(ptr, type, member)			\15	({							\16		void __arena *__mptr = (void __arena *)(ptr);	\17		((type *)(__mptr - offsetof(type, member)));	\18	})19#endif20 21#ifdef __BPF__ /* when compiled as bpf program */22 23#ifndef PAGE_SIZE24#define PAGE_SIZE __PAGE_SIZE25/*26 * for older kernels try sizeof(struct genradix_node)27 * or flexible:28 * static inline long __bpf_page_size(void) {29 *   return bpf_core_enum_value(enum page_size_enum___l, __PAGE_SIZE___l) ?: sizeof(struct genradix_node);30 * }31 * but generated code is not great.32 */33#endif34 35#if defined(__BPF_FEATURE_ADDR_SPACE_CAST) && !defined(BPF_ARENA_FORCE_ASM)36#define __arena __attribute__((address_space(1)))37#define __arena_global __attribute__((address_space(1)))38#define cast_kern(ptr) /* nop for bpf prog. emitted by LLVM */39#define cast_user(ptr) /* nop for bpf prog. emitted by LLVM */40#else41#define __arena42#define __arena_global SEC(".addr_space.1")43#define cast_kern(ptr) bpf_addr_space_cast(ptr, 0, 1)44#define cast_user(ptr) bpf_addr_space_cast(ptr, 1, 0)45#endif46 47void __arena* bpf_arena_alloc_pages(void *map, void __arena *addr, __u32 page_cnt,48				    int node_id, __u64 flags) __ksym __weak;49void bpf_arena_free_pages(void *map, void __arena *ptr, __u32 page_cnt) __ksym __weak;50 51#else /* when compiled as user space code */52 53#define __arena54#define __arg_arena55#define cast_kern(ptr) /* nop for user space */56#define cast_user(ptr) /* nop for user space */57__weak char arena[1];58 59#ifndef offsetof60#define offsetof(type, member)  ((unsigned long)&((type *)0)->member)61#endif62 63static inline void __arena* bpf_arena_alloc_pages(void *map, void *addr, __u32 page_cnt,64						  int node_id, __u64 flags)65{66	return NULL;67}68static inline void bpf_arena_free_pages(void *map, void __arena *ptr, __u32 page_cnt)69{70}71 72#endif73