diff --git a/FABRIC-3.10.8.md b/FABRIC-3.10.8.md index 4eca4a3d..a71ca42c 100644 --- a/FABRIC-3.10.8.md +++ b/FABRIC-3.10.8.md @@ -948,3 +948,19 @@ The boot hart HSM chose (0) is the one OpenSBI names as `Boot HART ID`. **Before MC-2 (observers get core-0 affinity) and MC-3 (worker cores claim), open findings:** - Core 0's idle loop polls at about 64% of a host CPU (§5.2). - In MC-1 the parked cores run no timer, take no interrupts, and have no GIC/PLIC/LAPIC setup of their own. MC-3's wake-by-IPI needs each core's interrupt controller initialised: the LAPIC on amd64, the GIC CPU interface on aarch64, and the SIE/SSIP path on riscv64. + +## 6. MC-2 — observers stay on core 0 (plan, 2026-09-26) + +**Go:** Captain Bob, 2026-09-26, *"keep going"*. + +**Change** (MC-R1: all three observers on core 0, the system core). +- **The decision** (`sk_vm_switch_decide()`) considers observers only when the deciding core is core 0. On any other core only participants are candidates. +- **The switch** (`sk_vm_context_switch()`) refuses to enter an observer on any core but core 0, and counts the refusal (`sk_vm_switch_observer_refusals()`). The idle point logs the count when it changes. It is a guard: MC-3 must never trip it. +- Nothing changes on core 0, which is the only core that runs anything until MC-3. + +**Evidence (named in advance):** +- **Standard sequence unchanged** on all three ISAs: the K-10 dict_hash set, G byte-identical, all ok `3`, 0 B idle growth, **0 observer refusals**. +- **Probe** (temporary word, amd64): on core 0, with Hestia holding a pending message, it sets its own `core_id` to 1 for the duration of one call each. + - `sk_vm_switch_decide()` returns no observer; it returns a participant or nothing. + - `sk_vm_context_switch()` to Hestia is refused, and the refusal count goes from 0 to 1. + - With `core_id` back at 0, the same decision returns Hestia.