| 1 | #include <mem/arena.h> |
| 2 | #include <mem/arena_provider.h> |
| 3 | #include <sync/rcu.h> |
| 4 | |
| 5 | struct arena_layout_desc { |
| 6 | uint8_t ; |
| 7 | int8_t offset_tag; |
| 8 | int8_t offset_depot; |
| 9 | int8_t offset_canary; |
| 10 | }; |
| 11 | |
| 12 | struct arena_desc_table { |
| 13 | struct arena_desc **descs cc_counted_by(desc_count); |
| 14 | size_t desc_count; |
| 15 | struct rcu_cb rcu_cb; |
| 16 | }; |
| 17 | |
| 18 | struct arena_globals { |
| 19 | struct arena_desc_table cc_mem_rcu *desc_table; |
| 20 | struct spinlock tbl_lock; |
| 21 | }; |
| 22 | |
| 23 | extern struct arena_globals arena_global; |
| 24 | |
| 25 | bool arena_check(struct arena *a); |
| 26 | #define arena_check_assert(a) enforce(arena_check(a)) |
| 27 | |
| 28 | static inline struct arena_seg_inmem_desc * |
| 29 | arena_get_inmem_descs(struct arena *a) { |
| 30 | return (struct arena_seg_inmem_desc *) &a->payload; |
| 31 | } |
| 32 | |
| 33 | LOG_SITE_EXTERN(arena); |
| 34 | LOG_HANDLE_EXTERN(arena); |
| 35 | |
| 36 | #define arena_log(lvl, fmt, ...) \ |
| 37 | log(LOG_SITE(arena), LOG_HANDLE(arena), lvl, fmt, ##__VA_ARGS__) |
| 38 | |
| 39 | #define arena_err(fmt, ...) arena_log(LOG_ERROR, fmt, ##__VA_ARGS__) |
| 40 | #define arena_warn(fmt, ...) arena_log(LOG_WARN, fmt, ##__VA_ARGS__) |
| 41 | #define arena_info(fmt, ...) arena_log(LOG_INFO, fmt, ##__VA_ARGS__) |
| 42 | #define arena_debug(fmt, ...) arena_log(LOG_DEBUG, fmt, ##__VA_ARGS__) |
| 43 | #define arena_trace(fmt, ...) arena_log(LOG_TRACE, fmt, ##__VA_ARGS__) |
| 44 | |
| 45 | void arena_dumpster_delete_bin(struct arena_dumpster *ad, struct arena_bin *ab); |
| 46 | |
| 47 | #ifdef TEST_ARENA |
| 48 | #include "tests/import.h" |
| 49 | #endif |
| 50 | |