diff --git a/FABRIC-3.md b/FABRIC-3.md index b4f88a8b..aa7f796f 100644 --- a/FABRIC-3.md +++ b/FABRIC-3.md @@ -1656,13 +1656,21 @@ amd64/aarch64/riscv64 (one aarch64 attempt hit an unrelated, already-documented hiccup — empty log, boot never left firmware — and passed cleanly on immediate retry with no rebuild). -**Not addressed by this fix, still open:** the free list `kmalloc.c` provides is coalescing but -still first-fit without block *splitting* — a different, smaller-grained fragmentation lever -than the one that was actually hit here. Per-VM dictionary sizing (shrinking what each -`WIREBIND` user VM's word set actually needs — it currently carries the full set, including -things like `TTF-TEXT`/`SCROLL-BACK`/`KBD-SCAN` a non-console user session may not need) remains -a separate, unexplored lever, not required by this fix but still worth revisiting if identity -count grows large enough for it to matter again. +**Correction, 2026-09-07 (same day):** an earlier draft of this section claimed `kmalloc.c`'s +free list "coalesces but doesn't split." That was wrong — never actually verified before being +written, just carried over from `alloc_kernel.c`'s own doc comment about *itself* lacking +splitting, mis-applied to `kmalloc.c` too. Re-read on request: `allocate_from_block()` already +implements real, unconditional block splitting (`can_split()`/`min_splittable_payload()`) — a +free block larger than a request needs, with enough leftover to be worth it, gets its remainder +carved off and threaded back onto the free list as its own block. Combined with +`coalesce_neighbors()` on every `kfree()`, this allocator already has both halves of real +fragmentation resistance. Nothing to fix here. + +**Not addressed, still open:** per-VM dictionary sizing (shrinking what each `WIREBIND` user +VM's word set actually needs — it currently carries the full set, including things like +`TTF-TEXT`/`SCROLL-BACK`/`KBD-SCAN` a non-console user session may not need) remains a separate, +unexplored lever, not required by anything above but still worth revisiting if identity count +grows large enough for it to matter again. **Also flagged, not touched (not asked):** `Makefile.starkernel`'s `printf '$(KERNEL_ARGS)\n' > starforth.cfg` breaks when `KERNEL_ARGS` starts with `--` (dash's