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>
This commit is contained in:
@@ -0,0 +1,94 @@
|
||||
# Phase C+22 — Cold-vs-cold verification
|
||||
|
||||
**Date:** 2026-05-26
|
||||
**Mode:** Diff-tool only (engine unchanged).
|
||||
|
||||
## Methodology
|
||||
|
||||
- ours-cold jsonl: `/tmp/ours-boot-cold.jsonl` (pre-existing, 28.7 MB,
|
||||
108,507 events on tid=1, 102,196 main-thread + worker noise). Captured
|
||||
fresh before this session per the boot-state remediation harness.
|
||||
Engine source unchanged — re-running ours-cold under this session's
|
||||
diff_events.py would produce a byte-identical jsonl.
|
||||
- canary jitter set: 3 archived cold runs `canary-jitter-{1,2,3}.jsonl`
|
||||
(4.4 / 3.5 / 3.7 GB) from
|
||||
`xenia-canary/build-cross/bin/Windows/Debug/`. These are the same
|
||||
reference jitter set used in C+20, C+21, Phase D Stage 0..4 — known
|
||||
to converge on the same logical boot up to the divergence-of-interest.
|
||||
- tid map: `--tid-map 6=1` (canary main thread → ours main thread,
|
||||
established in C+15-α auto_tid_map heuristic).
|
||||
|
||||
## Pre-C+22 baseline (run before changes)
|
||||
|
||||
```
|
||||
canary-jitter-1.jsonl → matched=105,128
|
||||
first divergence: payload.ctx_ptr
|
||||
canary='0xbe56bb3c' ours='0x42453b3c'
|
||||
at idx 105,128 (thread.create entry_pc=0x824cd458)
|
||||
```
|
||||
|
||||
## Post-C+22 (3-jitter table)
|
||||
|
||||
| jitter | matched | first divergence at | first-divergence kind / payload |
|
||||
|---|---|---|---|
|
||||
| 1 | **105,138** | 105,138 | `kernel.return VdQueryVideoFlags`: canary=3 ours=0 |
|
||||
| 2 | **105,138** | 105,138 | (same) |
|
||||
| 3 | **105,138** | 105,138 | (same) |
|
||||
|
||||
Delta vs baseline: **+10 events** in main matched-prefix, on all three
|
||||
jitters. The new first divergence (`VdQueryVideoFlags`) is genuine and
|
||||
identical across all three jitters — confirming C+22 collapses the
|
||||
ctx_ptr noise without over-suppressing.
|
||||
|
||||
## Absorber counters (sanity)
|
||||
|
||||
| jitter | floating_create (c/o) | floating_wait (c/o) |
|
||||
|---|---|---|
|
||||
| 1 | 0 / 0 | 1 / 0 |
|
||||
| 2 | 0 / 0 | 0 / 0 |
|
||||
| 3 | 1 / 0 | 3 / 0 |
|
||||
|
||||
Jitter-to-jitter variance in absorber counts is expected (scheduling-
|
||||
jitter window). Matched-prefix is stable at 105,138 across all three,
|
||||
confirming the canonicalization is robust to canary-side
|
||||
shared-global event reordering.
|
||||
|
||||
## Sister chains
|
||||
|
||||
No sister chains exercised in the 105,128–105,138 range. The 10
|
||||
absorbed events are all on the main `tid=6 → tid=1` chain:
|
||||
|
||||
```
|
||||
[105135] handle.create (sid different — already skipped)
|
||||
[105135] thread.create (ctx_ptr CANONICALIZED v1.7)
|
||||
[105136] kernel.return ExCreateThread
|
||||
[105137] kernel.return KiApcNormalRoutineNop
|
||||
[105137] import.call VdQueryVideoMode
|
||||
[105138] kernel.call VdQueryVideoMode
|
||||
[105138] kernel.return VdQueryVideoMode
|
||||
[105139] import.call VdQueryVideoFlags
|
||||
[105140] kernel.call VdQueryVideoFlags
|
||||
[105141] kernel.return VdQueryVideoFlags ← NEW first divergence
|
||||
```
|
||||
|
||||
(Per-jitter canary indices drift slightly; ours indices stable.)
|
||||
|
||||
## Digest reproducibility
|
||||
|
||||
ours engine source UNCHANGED — no rebuild needed. The pre-existing
|
||||
ours-cold jsonl (md5 `ecbd5046dbc73113144c8583592359e7`) is the input
|
||||
to the diff in all three jitter runs. Diff-tool output is purely
|
||||
derivative; running the diff multiple times against the same inputs
|
||||
produces byte-identical reports (modulo `host_ns` and dictionary
|
||||
ordering in pre-context lists — both already accounted for by the
|
||||
diff's stable sort).
|
||||
|
||||
## Conclusion
|
||||
|
||||
Phase C+22 advances main matched-prefix from 105,128 → 105,138 across
|
||||
all three canary jitter cold runs (+10 events, +0.0095 % of canary
|
||||
total). The next divergence is a real Vd-subsystem return-value
|
||||
mismatch unrelated to host-heap allocator drift.
|
||||
|
||||
Engine UNCHANGED. Phase B `image_loaded_sha256` ε boundary UNCHANGED.
|
||||
Tripstones 1, 2, 3, 4, 5, 6 honored.
|
||||
Reference in New Issue
Block a user