Source changes (dormant parity infra, retained from iterate 2.AI/2.AO): - xenia-kernel/exports.rs: nt_create_event manual_reset polarity + related event wiring - xenia-gpu/mmio_region.rs: D1MODE_VBLANK_VLINE_STATUS hardcode parity Also lands the audit-runs/ analysis notes (.md/.txt/.json digests) for the iterate 2.x VSync/0x10e8/0x1004 wedge investigation. Raw trace dumps (.jsonl/.gz/.csv/.stdout) and agent worktrees (.claude/) are gitignored as regenerable local artifacts — see memory + HANDOFF for the running findings. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
64 lines
2.9 KiB
Markdown
64 lines
2.9 KiB
Markdown
# Phase W — current ours state (Phase W.1 ground truth)
|
||
|
||
Captured 2026-05-19. `-n 500000000` cold run with `XENIA_CACHE_WIPE=1
|
||
--halt-on-deadlock --trace-handles --ctor-probe=0x825070F0`.
|
||
|
||
## Headline: wedge is STRUCTURALLY UNCHANGED from AUDIT-049/058/059/062/065
|
||
|
||
- **tid=1** (main) `state=Blocked(WaitAny { handles: [4808] })` =
|
||
handle `0x12c8` = `Thread(id=13, exit=None)`. PC `0x824ac578`
|
||
(`do_wait_single`), `r12 = 0x82173c64` = `sub_82173990+0x2D4`
|
||
(post-wait PC). Same join-on-tid=13 as AUDIT-049.
|
||
- **tid=13** (worker) `state=Blocked(WaitAny { handles: [4816] })` =
|
||
handle `0x12d0` = `Event/Auto`. PC `0x824ac578`, `r12 = 0x821cb1e0`
|
||
= `sub_821CB030+0x1B0` (post-wait PC). Same wait site as AUDIT-059.
|
||
- **`sub_825070F0` fires 0×** (no `CTOR-PROBE` line in stderr). Still
|
||
the same activation gate that has not budged across all of Phase C
|
||
+ Phase D.
|
||
|
||
## Wedge handle identity drift (AUDIT-049 era → today)
|
||
|
||
| Audit | Wedge handle | Wedge thread | Site |
|
||
|---|---|---|---|
|
||
| AUDIT-049 | `0x1288` | tid=13 | `sub_821CB030+0x1AC` |
|
||
| AUDIT-059 | `0x12AC` | tid=13 | `sub_821CB030+0x1AC` |
|
||
| AUDIT-062 | `0x12AC` | tid=13 | `sub_821CB030+0x1AC` |
|
||
| AUDIT-065 | `0x12AC` | tid=13 | `sub_821CB030+0x1AC` |
|
||
| **Phase W** | **`0x12d0`** | **tid=13** | **`sub_821CB030+0x1B0`** |
|
||
|
||
Handle ID drift is expected per dossier caveat (allocator ordinals
|
||
differ between runs); the site, thread, and "Event/Auto created by
|
||
tid=13 itself via `lr=0x824a9f6c src=NtCreateEvent`" all match.
|
||
|
||
## All `<NO_SIGNALS_DESPITE_WAITS>` handles at deadlock
|
||
|
||
```
|
||
handle=0x00001020 kind=Event/Manual waiters=1 signals=0 waits=1 wakes=0
|
||
handle=0x00001040 kind=Event/Auto waiters=0 signals=0 waits=32 wakes=0
|
||
handle=0x000010b0 kind=Event/Auto waiters=0 signals=0 waits=7 wakes=0
|
||
handle=0x000010ec kind=Event/Manual waiters=1 signals=0 waits=2 wakes=0
|
||
handle=0x000012d0 kind=Event/Auto waiters=1 signals=0 waits=1 wakes=0 ← THE WEDGE
|
||
handle=0x000012e4 kind=Event/Auto waiters=1 signals=0 waits=1 wakes=0
|
||
```
|
||
|
||
`0x12d0` SID `d5e23609d3948568` does NOT appear in any canary cold trace
|
||
(SID is per-tid per-PC and the run-to-run handle/PC numbering precludes
|
||
matching). This confirms reading-error #30: shared-global SID recipe is
|
||
NOT applicable to NtCreateEvent on a per-call basis — these are
|
||
worker-local Events, not process-global dispatchers.
|
||
|
||
## Thread / event totals: the worker-cluster gap
|
||
|
||
| canary_tid | ours_tid | matched | canary_total | ours_total | first_div |
|
||
|---|---|---|---|---|---|
|
||
| 4 | 11 | 11 | 75,287 | 11 | — |
|
||
| 6 | 1 | 105,112 | 351,340 | 108,507 | 105,112 |
|
||
| 7 | 2 | 32 | 32 | 33 | — |
|
||
| 12 | 7 | 4 | 9,264 | 5 | 4 |
|
||
| 14 | 9 | 41 | 1,904,055 | 77 | 41 |
|
||
| 15 | 10 | 16 | 995,517 | 17 | — |
|
||
|
||
**Canary tid=14 / tid=15 emit 1.9M / 995K events; ours's mapped tids
|
||
emit 77 / 17.** The worker cluster (cf. AUDIT-057 thread-gap) never
|
||
wakes up in ours, exactly as documented at every audit since.
|