Files
hakmem/core/hakmem_tiny_remote_target.c
Moe Charm (CI) 6b791b97d4 ENV Cleanup: Delete Ultra HEAP & BG Remote dead code (-1,096 LOC)
Deleted files (11):
- core/ultra/ directory (6 files: tiny_ultra_heap.*, tiny_ultra_page_arena.*)
- core/front/tiny_ultrafront.h
- core/tiny_ultra_fast.inc.h
- core/hakmem_tiny_ultra_front.inc.h
- core/hakmem_tiny_ultra_simple.inc
- core/hakmem_tiny_ultra_batch_box.inc

Edited files (10):
- core/hakmem_tiny.c: Remove Ultra HEAP #includes, move ultra_batch_for_class()
- core/hakmem_tiny_tls_state_box.inc: Delete TinyUltraFront, g_ultra_simple
- core/hakmem_tiny_phase6_wrappers_box.inc: Delete ULTRA_SIMPLE block
- core/hakmem_tiny_alloc.inc: Delete Ultra-Front code block
- core/hakmem_tiny_init.inc: Delete ULTRA_SIMPLE ENV loading
- core/hakmem_tiny_remote_target.{c,h}: Delete g_bg_remote_enable/batch
- core/tiny_refill.h: Remove BG Remote check (always break)
- core/hakmem_tiny_background.inc: Delete BG Remote drain loop

Deleted ENV variables:
- HAKMEM_TINY_ULTRA_HEAP (build flag, undefined)
- HAKMEM_TINY_ULTRA_L0
- HAKMEM_TINY_ULTRA_HEAP_DUMP
- HAKMEM_TINY_ULTRA_PAGE_DUMP
- HAKMEM_TINY_ULTRA_FRONT
- HAKMEM_TINY_BG_REMOTE (no getenv, dead code)
- HAKMEM_TINY_BG_REMOTE_BATCH (no getenv, dead code)
- HAKMEM_TINY_ULTRA_SIMPLE (references only)

Impact:
- Code reduction: -1,096 lines
- Binary size: 305KB → 304KB (-1KB)
- Build: PASS
- Sanity: 15.69M ops/s (3 runs avg)
- Larson: 1 crash observed (seed 43, likely existing instability)

Notes:
- Ultra HEAP never compiled (#if HAKMEM_TINY_ULTRA_HEAP undefined)
- BG Remote variables never initialized (g_bg_remote_enable always 0)
- Ultra SLIM (ultra_slim_alloc_box.h) preserved (active 4-layer path)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-27 04:35:47 +09:00

40 lines
1.9 KiB
C

#include "hakmem_tiny_remote_target.h"
#include "hakmem_tiny.h" // For TinySlab definition
// Global variables
// BG Remote variables REMOVED (dead code cleanup 2025-11-27)
_Atomic uintptr_t g_remote_target_head[TINY_NUM_CLASSES];
_Atomic uint32_t g_remote_target_len[TINY_NUM_CLASSES];
void remote_target_enqueue(int class_idx, TinySlab* slab) {
// Best-effort: mark as enqueued once to avoid duplicate pushes
unsigned was = atomic_exchange_explicit(&slab->remote_queued, 1u, memory_order_acq_rel);
if (was) return;
// Link into per-class Treiber stack
uintptr_t old_head;
do {
old_head = atomic_load_explicit(&g_remote_target_head[class_idx], memory_order_acquire);
slab->remote_q_next = (TinySlab*)old_head;
} while (!atomic_compare_exchange_weak_explicit(&g_remote_target_head[class_idx], &old_head,
(uintptr_t)slab,
memory_order_release, memory_order_relaxed));
atomic_fetch_add_explicit(&g_remote_target_len[class_idx], 1u, memory_order_relaxed);
}
TinySlab* remote_target_pop(int class_idx) {
uintptr_t head;
TinySlab* node;
do {
head = atomic_load_explicit(&g_remote_target_head[class_idx], memory_order_acquire);
if (head == 0) return NULL;
node = (TinySlab*)head;
} while (!atomic_compare_exchange_weak_explicit(&g_remote_target_head[class_idx], &head,
(uintptr_t)node->remote_q_next,
memory_order_acq_rel, memory_order_relaxed));
// Mark dequeued so it can be re-enqueued later if needed
atomic_store_explicit(&node->remote_queued, 0u, memory_order_release);
atomic_fetch_sub_explicit(&g_remote_target_len[class_idx], 1u, memory_order_relaxed);
node->remote_q_next = NULL;
return node;
}