at v6.19 83 lines 2.5 kB view raw
1/* SPDX-License-Identifier: GPL-2.0 */ 2/* 3 * Copyright (c) 2023 Meta Platforms, Inc. and affiliates. 4 * Copyright (c) 2023 Tejun Heo <tj@kernel.org> 5 * Copyright (c) 2023 David Vernet <dvernet@meta.com> 6 */ 7#ifndef __SCHED_EXT_COMMON_H 8#define __SCHED_EXT_COMMON_H 9 10#ifdef __KERNEL__ 11#error "Should not be included by BPF programs" 12#endif 13 14#include <stdarg.h> 15#include <stdio.h> 16#include <stdlib.h> 17#include <stdint.h> 18#include <errno.h> 19#include "enum_defs.autogen.h" 20 21typedef uint8_t u8; 22typedef uint16_t u16; 23typedef uint32_t u32; 24typedef uint64_t u64; 25typedef int8_t s8; 26typedef int16_t s16; 27typedef int32_t s32; 28typedef int64_t s64; 29 30#define SCX_BUG(__fmt, ...) \ 31 do { \ 32 fprintf(stderr, "[SCX_BUG] %s:%d", __FILE__, __LINE__); \ 33 if (errno) \ 34 fprintf(stderr, " (%s)\n", strerror(errno)); \ 35 else \ 36 fprintf(stderr, "\n"); \ 37 fprintf(stderr, __fmt __VA_OPT__(,) __VA_ARGS__); \ 38 fprintf(stderr, "\n"); \ 39 \ 40 exit(EXIT_FAILURE); \ 41 } while (0) 42 43#define SCX_BUG_ON(__cond, __fmt, ...) \ 44 do { \ 45 if (__cond) \ 46 SCX_BUG((__fmt) __VA_OPT__(,) __VA_ARGS__); \ 47 } while (0) 48 49/** 50 * RESIZE_ARRAY - Convenience macro for resizing a BPF array 51 * @__skel: the skeleton containing the array 52 * @elfsec: the data section of the BPF program in which the array exists 53 * @arr: the name of the array 54 * @n: the desired array element count 55 * 56 * For BPF arrays declared with RESIZABLE_ARRAY(), this macro performs two 57 * operations. It resizes the map which corresponds to the custom data 58 * section that contains the target array. As a side effect, the BTF info for 59 * the array is adjusted so that the array length is sized to cover the new 60 * data section size. The second operation is reassigning the skeleton pointer 61 * for that custom data section so that it points to the newly memory mapped 62 * region. 63 */ 64#define RESIZE_ARRAY(__skel, elfsec, arr, n) \ 65 do { \ 66 size_t __sz; \ 67 bpf_map__set_value_size((__skel)->maps.elfsec##_##arr, \ 68 sizeof((__skel)->elfsec##_##arr->arr[0]) * (n)); \ 69 (__skel)->elfsec##_##arr = \ 70 bpf_map__initial_value((__skel)->maps.elfsec##_##arr, &__sz); \ 71 } while (0) 72 73#include "user_exit_info.h" 74#include "compat.h" 75#include "enums.h" 76 77/* not available when building kernel tools/sched_ext */ 78#if __has_include(<lib/sdt_task_defs.h>) 79#include "bpf_arena_common.h" 80#include <lib/sdt_task_defs.h> 81#endif 82 83#endif /* __SCHED_EXT_COMMON_H */