// tiny_refill.h - Refill Boundary box (inline helpers) #pragma once #include #include "hakmem_tiny_superslab.h" #include "hakmem_trace_master.h" // Phase 4c: Master trace control #include "slab_handle.h" #include "tiny_sticky.h" #include "tiny_ready.h" #include "box/mailbox_box.h" #include "tiny_remote_bg.h" // Background remote-drain step (best-effort) #include "tiny_ready_bg.h" // Ready aggregator (mailbox→ready hint) #include "tiny_route.h" // Route Fingerprint (Box boundary tracing) #include #include // External helpers from main TU static inline uint32_t tiny_self_u32(void); static inline void tiny_tls_bind_slab(TinyTLSSlab* tls, SuperSlab* ss, int slab_idx); // Forward decls in main TU static inline uintptr_t hot_slot_pop(int class_idx); static inline uintptr_t bench_pub_pop(int class_idx); static inline SuperSlab* slab_entry_ss(uintptr_t ent); static inline int slab_entry_idx(uintptr_t ent); // Mailbox/Ready consumption always allowed (ENV gate removed) static inline int tiny_mail_ready_allowed(void) { return 1; } // Registry scan window (ENV: HAKMEM_TINY_REG_SCAN_MAX, default 256) static inline int tiny_reg_scan_max(void) { static int v = -1; if (__builtin_expect(v == -1, 0)) { const char* s = getenv("HAKMEM_TINY_REG_SCAN_MAX"); int defv = 256; // conservative default if (s && *s) { int parsed = atoi(s); v = (parsed > 0) ? parsed : defv; } else { v = defv; } } return v; } // Opportunistic background remote-drain knobs (ENV removed; fixed defaults) static inline int tiny_bg_remote_tryrate(void) { return 16; } static inline int tiny_bg_remote_budget_default(void) { return 2; } // Mid-size simple refill (ENV: HAKMEM_TINY_MID_REFILL_SIMPLE) static inline int tiny_mid_refill_simple_enabled(void) { static int v = -1; if (__builtin_expect(v == -1, 0)) { const char* s = getenv("HAKMEM_TINY_MID_REFILL_SIMPLE"); v = (s && *s && *s != '0') ? 1 : 0; } return v; } #include "box/tiny_adopt_refill_box.h" // adopt/refill 境界の集約(Step 5) // Try a quick adopt from sticky/hot/bench/mailbox (single pass) static inline SuperSlab* tiny_refill_try_fast(int class_idx, TinyTLSSlab* tls) { return tiny_adopt_refill_box(class_idx, tls); }