Files
xenia-rs/audit-runs/phase-w-wedge-reattack/current-state.md
MechaCat02 ef93a4fa14 handoff: VSync/event-wedge fixes + iterate 2.A–2.BC research notes
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>
2026-06-05 07:19:08 +02:00

2.9 KiB
Raw Blame History

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.