155714Skris// SPDX-License-Identifier: GPL-2.0 255714Skris/* Copyright (c) 2024 Meta Platforms, Inc. and affiliates. */ 3194206Ssimon#include <vmlinux.h> 455714Skris#include <bpf/bpf_helpers.h> 555714Skris#include <bpf/bpf_tracing.h> 655714Skris#include <bpf/bpf_core_read.h> 755714Skris#include "bpf_experimental.h" 855714Skris 955714Skrisstruct { 10280304Sjkim __uint(type, BPF_MAP_TYPE_ARENA); 1155714Skris __uint(map_flags, BPF_F_MMAPABLE); 1255714Skris __uint(max_entries, 100); /* number of pages */ 1355714Skris} arena SEC(".maps"); 1455714Skris 1555714Skris#include "bpf_arena_htab.h" 1655714Skris 1755714Skrisvoid __arena *htab_for_user; 1855714Skrisbool skip = false; 1955714Skris 2055714Skrisint zero = 0; 2155714Skris 2255714SkrisSEC("syscall") 2355714Skrisint arena_htab_llvm(void *ctx) 2455714Skris{ 2555714Skris#if defined(__BPF_FEATURE_ADDR_SPACE_CAST) || defined(BPF_ARENA_FORCE_ASM) 2655714Skris struct htab __arena *htab; 2755714Skris __u64 i; 2855714Skris 2955714Skris htab = bpf_alloc(sizeof(*htab)); 3055714Skris cast_kern(htab); 3155714Skris htab_init(htab); 3255714Skris 3355714Skris /* first run. No old elems in the table */ 3455714Skris for (i = zero; i < 1000; i++) 3555714Skris htab_update_elem(htab, i, i); 3655714Skris 3755714Skris /* should replace all elems with new ones */ 3855714Skris for (i = zero; i < 1000; i++) 3955714Skris htab_update_elem(htab, i, i); 4055714Skris cast_user(htab); 4155714Skris htab_for_user = htab; 4255714Skris#else 4355714Skris skip = true; 4455714Skris#endif 4555714Skris return 0; 4655714Skris} 4755714Skris 4855714Skrischar _license[] SEC("license") = "GPL"; 4955714Skris