diff --git a/docs/planning/green-program/block/508-BOOT-DISK-WAIT-2026-09-08.md b/docs/planning/green-program/block/508-BOOT-DISK-WAIT-2026-09-08.md new file mode 100644 index 000000000..b67d4c764 --- /dev/null +++ b/docs/planning/green-program/block/508-BOOT-DISK-WAIT-2026-09-08.md @@ -0,0 +1,349 @@ +# 508: preserve the x86 boot continuation during disk waits + +Source revision: `b346196295db73f9fe4b44c8f080e75217f27693`. +Baseline: `4394409fca3932296f3468914b5be325ce0d48a6` plus the switch-counter and completion-marker instrumentation. The baseline's scheduler and completion policy were unchanged. Source citations below were re-derived after the code commit; a later documentation-only commit does not move these source lines. + +## Problem and measured mechanism + +The instrumented baseline passed `bash docker/qemu/run-x86-boot-tests.sh`, but its new oracle reported `switched_away=367:tests_completed=0:FAIL`. Its sampled switch preempt count was 0. The existing terminal tally was `exited=110 nonzero=0 failed=[]`. These readings are in `serials/508/baseline/markers.txt`; the complete serials and gate transcript are retained as gzip files beside it. The tally therefore did not establish that the boot registration block returned. + +The current mechanism is more specific than the historical busy-spin description in issue 508: + +1. `kernel/src/main.rs:590` calls `init_with_current`; `kernel/src/task/scheduler.rs:5472` registers the running boot thread as idle. It is not an ordinary sleepable worker with an independent idle task available. +2. `kernel/src/main.rs:1309` takes the boot scheduling brake. The registration block has 64 `test_exec` calls, from `kernel/src/main.rs:1843` through `kernel/src/main.rs:2082`. +3. `kernel/src/drivers/virtio/block.rs:401` waits through `Completion::wait_timeout_uninterruptible`. The existing non-idle sleep path at `kernel/src/task/completion.rs:301` identifies syscall context using a positive count, then releases one count at `kernel/src/task/completion.rs:342`. Before this repair, idle boot took that same path. The caller's count was a boot brake, not evidence of syscall context. +4. `kernel/src/interrupts/timer.rs:65` requests rescheduling when the quantum expires. The existing interrupt-return guard at `kernel/src/interrupts/context_switch.rs:178` already refuses kernel switches with a held count. The measured count of 0 distinguishes a released brake from a timer ignoring a still-held brake. +5. `kernel/src/interrupts/context_switch.rs:860` checks Ring 3 confirmation; once confirmed, the idle branch declines to restore the saved boot continuation. Thus allowing another process to run during a boot disk wait can strand the remaining registration calls. + +The 673 / 718 disposition was read with `gh issue view 508 --comments`. This repair retains its blocked-state admission set, including `BlockedOnTimer` and excluding unconditional `BlockedOnIO` admission. It does not assert the all-producers invariant that disposition declined to assume. + +## Chosen repair + +Option (b), with the completion-side brake preservation required by the measurement. Option (a) would require converting boot from idle into a separately resumable worker; its present scheduler identity does not meet that prerequisite. + +`kernel/src/task/completion.rs:253` recognizes the idle task before registering a sleeping waiter. `kernel/src/task/completion.rs:147` retains the scheduling brake, masks interrupts while checking the request's completion token and timeout, then executes `STI; HLT`. The IRQ completion at `kernel/src/drivers/virtio/block.rs:678` publishes the token. Interrupts can wake the CPU, while the boot continuation stays on it. The helper restores its added count and the caller's original interrupt state on return. This is an IRQ wait with the CPU halted, not a scheduler-blocking wait. + +`kernel/src/per_cpu.rs:1373` applies the existing kernel-count refusal before the exception/blocked-state admission arms. This Tier-2 edit puts the count rule at the admission site; the completion-side change prevents the actual count donation. The other Tier-2 edit is `kernel/src/interrupts/context_switch.rs:402`, where the requested switch counter is published after same-thread decisions have been excluded. Both additions use no logging. Rustfmt also normalized existing formatting in those files. Tier-1 files were read only. + +## Oracle and scorer + +Grammar emitted by `kernel/src/boot/disk_wait_oracle.rs:34`: + +```text +[BOOT_DISK_WAIT_ORACLE:x86:switched_away=:tests_completed=:PASS|FAIL] +``` + +The accepted line is exactly `[BOOT_DISK_WAIT_ORACLE:x86:switched_away=0:tests_completed=1:PASS]`. `tests_completed` counts completed registration blocks, not passing userspace programs. The companion final marker is `[TEST_EXEC_BLOCK_COMPLETE:x86:calls=64]`, emitted after `test_fbinfo` returns at `kernel/src/main.rs:2084`. + +`kernel/src/boot/disk_wait_oracle.rs:4` declares plain atomics. `kernel/src/main.rs:1312` arms the boot identity before RING3_SMOKE; `kernel/src/main.rs:2261` closes the window before the final preemption release at `kernel/src/main.rs:2267`. Departures of that identity during the open window increment the counter. If boot is lost, later departures of the same idle identity also count; 367 is not claimed to mean 367 departures from the original disk instruction. A nonzero value establishes that the protected identity departed at least once. + +`kernel/src/boot/disk_wait_oracle.rs:27` reports once, either at the final boot marker or through `kernel/src/syscall/handlers.rs:254` at the terminal tally if boot did not finish. The diagnostic `BOOT_DISK_WAIT_TRACE` line reports the sampled preempt count outside the switch path. Its `u64::MAX` sentinel means no switch sample was recorded; it is not a preempt-count reading. The oracle is compiled with noninteractive x86 `testing`, including `boot_tests`, so the ordinary testing image used by the parallel runner is covered too. + +`scripts/score-boot-disk-wait.py:12` requires one accepted oracle plus one preceding final marker. It rejects missing, duplicate, malformed, incomplete, switched-away, and FAIL evidence. `scripts/x86-gate-verdict.sh:28` calls it, so both x86 runners consume the oracle. `tests/boot_disk_wait_structure.rs` pins the wait, admission ordering, publication site, final-call boundary, and scorer rejection cases. + +## Busy-spin mutation + +The mutation restores the baseline Completion policy and replaces its x86 `Cpu::halt_with_interrupts()` wait with interrupt-enabled `core::hint::spin_loop()`. It does not add timer logging or force a reschedule. The exact patch is `serials/508/mutation/source.patch`; its SHA-256 is `92a32304e6e40053340091be0ca161f6dde58a355e68d0c50107f2ac54b9a352`. The built image hash is retained in `serials/508/mutation/image.sha256`. + +The wait ratchet rejected the mutant with exit 101 (1 failed, 3 passed). After building the mutant image, the source was restored to the committed revision and `git diff --exit-code` succeeded before the 70/70 structure preflight and `bash docker/qemu/run-boot-parallel.sh 5`. The transcript records both the source revision and mutation patch hash; the parallel runner boots the existing image without rebuilding it. + +The mutation job launched at 1-minute load 1.32. The gate exited 1, with 0 passed and 5 failed. Each retained `markers.txt` under `serials/508/mutation-1/` through `serials/508/mutation-5/` contains an explicit FAIL oracle and no final block marker: + +| Boot | switched_away | tests_completed | Final markers | +|---|---:|---:|---:| +| 1 | 606 | 0 | 0 | +| 2 | 601 | 0 | 0 | +| 3 | 626 | 0 | 0 | +| 4 | 597 | 0 | 0 | +| 5 | 568 | 0 | 0 | + +This mutation tests the unsafe donation of boot's count during a busy-spin wait. Since the baseline already used HLT on its positive-count path, this is not evidence that HLT by itself is the repair. The restored brake and idle-specific wait are the relevant difference. + +## Validation records + +The baseline launched at 1-minute load 0.36. Its structure preflight passed 69/69 suites and its x86 build had no project diagnostics. The repaired testing-profile build completed without project diagnostics. The local repaired structure run passed 70/70 suites through `scripts/run-structure-tests.sh`; rustfmt checks passed for the changed kernel files. A separate original-HEAD snapshot with the new ratchet produced 3 failures and 1 pass (exit 101), while the repaired snapshot passed 4/4; the transcripts are `serials/508/validation/ratchet-original-head.txt` and `serials/508/validation/ratchet-repaired.txt`. + +The repaired boot gate launched at load 5.85. The retained `serials/508/repaired-boot/gate.log.gz` records `REVISION=4394409fca3932296f3468914b5be325ce0d48a6` at decoded line 3. It contains no `SOURCE_REVISION` record or repair commit identifier. That transcript therefore does not establish that the boot ran repair commit `b346196295db73f9fe4b44c8f080e75217f27693`; the earlier attribution is withdrawn (V-3). + +The first repaired parallel batch launched its gate wrapper at load 6.78 and then waited for the shared QEMU lock. The structure preflight passed 70/70 suites before boot. Its five boots each reached the final 64-call marker: 0 incomplete registration blocks. Boots 1, 2, 3, and 5 emitted accepted oracles. Boot 4 panicked later at `kernel/src/clock_gettime_test.rs:77`, with an elapsed reading of 1,992,843 ns, before the oracle-report site. Its missing oracle is rejected, not inferred as a pass. The full parallel gate exited 1 (0 passed, 5 failed). The retained evidence is under `serials/508/parallel-1-1/` through `serials/508/parallel-1-5/`; the first directory includes the complete batch transcript. + +The second repaired parallel batch waited one five-minute load interval (10.71 initially, 3.94 at launch). Its preflight passed 70/70 suites. Its five boots each reached the final marker: again 0 incomplete registration blocks. Boots 1, 2, 3, and 5 emitted accepted oracles; boot 4 hit the same later kernel assertion with an elapsed reading of 4,392,079 ns and no oracle report. The full batch exited 1 (0 passed, 5 failed). Evidence is under `serials/508/parallel-2-1/` through `serials/508/parallel-2-5/`. + +| Repaired run | Registration blocks completed | Oracle accepted | Full gate | +|---|---:|---:|---| +| Single boot | 1/1 | 1/1 | exit 1 | +| Parallel batch 1 | 5/5 | 4/5 | exit 1 | +| Parallel batch 2 | 5/5 | 4/5 | exit 1 | +| Total | 11/11 | 9/11 | no green full-gate claim | + +`serials/508/validation/parallel-1-scorer.txt` and `serials/508/validation/parallel-2-scorer.txt` record the scorer results against the retained serial bytes. The two missing oracle reports are failures. The evidence establishes zero incomplete registration blocks in these 11 repaired boots; it does not establish an 11/11 passing protected-window oracle or userspace suite. + +The production gate ran last with `bash docker/qemu/run-x86-prod-profile-boot-test.sh`. It waited one five-minute load interval (10.22 initially, 1.33 at gate launch), passed 70/70 structure suites, built without project diagnostics, and waited for the shared QEMU lock. Its actual QEMU launch load was 0.26. The gate exited 0, including console prompt liveness from 1 to 2 over 60 seconds. Evidence is in `serials/508/prod-last/`. No later kernel build or boot was performed. + +No structure-preflight timeout occurred, so the 900-second retry provision was not needed. Structure preflight was never bypassed. The code commit and both repaired parallel batches used the same repaired image; its hash is `serials/508/validation/repaired-image.sha256`. The production build replaced that image only after both batches completed. + +## Expanded-cohort failures + +The repaired single-boot run reached the final block marker and the accepted boot-disk oracle, but the full x86 gate failed after exhausting its poll loop. Its transcript records `ended_by=poll_exhausted` and exit 1; the actual QEMU launch load was 6.50. `serials/508/repaired-boot/followup-markers.txt` retains the separate `argc: 0` / `ARGV_TEST_FAILED` reading and an `EXT2_LOCK_SPIN_STALL` for `ROOT_EXT2_write`. The latest retained dispatch census names 13 saved blocked threads; it is a snapshot, not evidence that those threads can never resume. + +The direct x86 argv initialization failure is tracked in 973. The separate kernel clock precision panic is tracked in 979. The ext2 symptom is relevant to the existing investigations in 728 and 748; this round has not established an identical root cause. No allowlist or terminal-verdict criterion was relaxed to turn these results green. Returning from the registration block and completing the userspace suite remain distinct claims. + +## Claim lint + +Literal command records before the code commit: + +```text +claim-lint: python3 scripts/claim-lint.py -> exit 0 +claim-lint: python3 scripts/claim-lint.py --commit-msg .tmp/508-code-commit.txt -> exit 0 +``` + +The first documentation lint found an unquantified suite-count statement; it was changed to the measured 70/70 count: + +```text +claim-lint: python3 scripts/claim-lint.py -> exit 1 +``` + +Final documentation-commit checks: + +```text +claim-lint: python3 scripts/claim-lint.py -> exit 0 +claim-lint: python3 scripts/claim-lint.py --commit-msg .tmp/508-docs-commit.txt -> exit 0 +``` + +The tree command checks changed text hunks; gzip artifacts are not linted as prose. It does not validate runtime claims. + +## Not claimed + +- Green full testing gates, or 11/11 accepted boot-disk oracle reports. +- A root cause for the later ext2 wait symptoms or kernel clock precision panics. + +- That changing a spin instruction to HLT alone repairs a released boot brake. +- That the boot thread now uses a scheduler-blocking completion wait. +- That returning from the 64 registration calls constitutes a passing userspace verdict; the terminal tally is separate evidence. +- A new `BlockedOnIO` all-producers invariant, or closure of 666 or the staged-registry work in 533. +- Removal of pre-scheduler polling, or changes to ordinary non-idle completion waits. +- Aarch64 runtime coverage or SMP x86 coverage. + +## Astra fix pass, 2026-09-08: V-1 and V-2 + +The input revision was `48610ba15e16a3a0785c7398e758cde9e2ed43a0`. +Tier-2 changes are confined to the defects in `kernel/src/interrupts/context_switch.rs` +and `kernel/src/per_cpu.rs::can_schedule`. V-1 needs a publication-site change; +nonintrusive debugging cannot repair the premature increment. V-2 needs removal +of the emitting diagnostics themselves. This pass does not edit the five Tier-1 +files named in the lane brief. + +V-1: the oracle now reads the resolved per-CPU thread identity after +`switch_to_thread` returns. It increments only when the outgoing thread is the +recorded boot thread and the resulting thread differs. TLS and first-entry +rollback restore the outgoing identity before that observation. The preemption +count is sampled before the switch and published only with a departure. +`tests/boot_disk_wait_structure.rs` pins that ordering and executes the extracted +measurement block against rollback, departure, non-boot, and absent-pointer +inputs. These are host tests of the publication logic, not injected live TLS +failures. + +V-2: the context-switch implementation no longer contains direct logger calls +or raw serial writers. `can_schedule` loses its warning, periodic port writes, +and their diagnostic-only counters. Refusal counters, dispatch abandonment +records, and scheduler safety actions remain. The refusal helper's removed +formatting arguments also require a caller update in +`kernel/src/tracing/providers/teardown.rs`. Per-CPU initialization diagnostics +and the idle thread's deferred log drain are outside the switch/admission path. + +The diagnostic ratchets are updated with the code they pin: +`tests/critical_path_logging_census_structure.rs` removes 15 logger sites from +its expected total (119 to 104); `tests/serial_line_atomicity_structure.rs` +removes the deleted writers; `tests/dispatch_strand_census_structure.rs` now +requires an empty logger census in the context-switch file. +`tests/dispatch_fact_census_structure.rs` retires the serial-only KernelFrame +split while retaining the `IdleRestoreError` publication check. +`tests/context_restore_structure.rs` retains the missing-CR3 refusal counter +and safety checks and retires the requirement to print a breadcrumb. + +Regression evidence: `serials/508/review-fix/ratchet-original-head.txt` records +4 passing and 2 failing tests on the original source, one failure per finding. +`scripts/test-boot-disk-wait-mutations.py` reruns eight named source mutations +through `scripts/run-structure-tests.sh`; the exit-101 results are in +`serials/508/review-fix/mutations.txt`. Its finally blocks restore each changed +source before the next case. Scorer rejection cases and the existing in-suite +mutations run with the structure suites. + +Not claimed by this review pass: live TLS-failure injection, aarch64 runtime +coverage, SMP coverage, removal of initialization diagnostics, or retirement +of the runtime limitations recorded earlier in this document. Gate results +and the final source revision are recorded below after validation. + +Pre-commit validation: the local shared preflight passed 70/70 suites +(`serials/508/review-fix/structure.txt`); the focused suite passed 7/7 +(`serials/508/review-fix/ratchet-repaired.txt`). Rustfmt checks passed for the +three changed kernel files. The x86 testing-profile build completed with +exit 0 and no project compiler diagnostics. The first x86 gate attempt +launched at load 1.14 and exited 1 in preflight: a diagnostic-publication +array still declared 16 entries after its serial-only row was removed. +The corrected array has 15 entries; its suite then passed 7/7 locally. +No QEMU process was launched by that failed preflight. + +Code-commit checks: + +```text +claim-lint: python3 scripts/claim-lint.py -> exit 0 +claim-lint: python3 scripts/claim-lint.py --commit-msg .tmp/508-review-code-commit.txt -> exit 0 +``` + +### Committed-revision rerun + +The code revision is `c236b037d86e5d7e0cd04fc3c700d52f53a45bab`, pushed on +`sched/508-boot-thread-disk-wait`. Source citations were re-derived from that +commit in `serials/508/review-fix/source-citations.txt`: the outgoing count +snapshot is at `kernel/src/interrupts/context_switch.rs:363`, the switch call +at line 367, the resolved-ID read at line 381, and the increment at line 384. +The line references in the earlier sections describe their named historical +revisions, not this revision. + +The committed-revision x86 gate launched at 1-minute load 0.91. Its preflight +passed 70/70 suites, with the context-restore suite finishing in 258 seconds +under its 300-second budget. There was no structure timeout and no 900-second +suite-timeout rerun. The gate rebuilt without project compiler diagnostics. + +The QEMU launch after preflight/build recorded load 2.89. The full gate exited +1 with `ended_by=poll_exhausted`; its terminal completion requirements were not +met. `serials/508/review-fix/gate.log.gz` preserves the transcript with the +revision it ran at. `serials/508/review-fix/gate-result.txt` names the decoded +source file and line for each retained marker. + +The saved `serials/508/review-fix/serial_user.txt.gz` contains one final +64-call registration marker followed by one accepted boot-disk oracle: +`switched_away=0`, `tests_completed=1`. Running the scorer on the two decoded +serial files exited 0 (`serials/508/review-fix/oracle-score.txt`). The timer-wake +latency oracle also passed, with 42 ms overrun against its 100 ms bound. +The same user serial later contains `ARGV_TEST_FAILED` and +`EXT2_LOCK_SPIN_STALL lock=ROOT_EXT2_write`; these remain failed runtime +observations. Follow-ups 973, 728, and 748 were confirmed open. This pass does +not establish an identical root cause for the ext2 observations or claim a +green full gate. The gate's tracked QEMU PID was absent after exit; no +process-name kill was used. + +V-1 and V-2 are closed at the code-finding scope by the regression tests, +mutation rejections, and source changes described above. This disposition +does not close issue 508 or its runtime follow-ups. + +Evidence-commit checks: + +```text +claim-lint: python3 scripts/claim-lint.py -> exit 0 +claim-lint: python3 scripts/claim-lint.py --commit-msg .tmp/508-review-evidence-commit.txt -> exit 0 +``` + +## Landing + +V-3: corrected the revision attribution inline in Validation records. The +single-run transcript retains its original bytes; its missing revision record +has not been backfilled. + +V-4: R245 lane success remains pending. Issue 508 was OPEN with closedAt=null +when checked for this landing attempt. The historical 11/11 final-marker tally, +9/11 accepted oracles, and 5/5 runtime mutation rejections are repair evidence, +not issue closure or a completed atlas transition. No merged PR or completed +atlas-cell update is claimed. The external scratchpad `atlas/atlas-data.json` block/storage x86 summary now +records that pending condition inline; its partial/LOW status is retained. +V-4 is corrected at the prose scope, not fulfilled at the lane-success scope. + +Deferred code findings supplied for this landing: [] (0 findings). + + +Two explicit-file lint attempts exited 1 on pre-existing auto-close phrases in +the external atlas. Those references now insert the word issue. Recheck records: + +Prose-correction checks: + +```text +claim-lint: python3 scripts/claim-lint.py --files docs/planning/green-program/block/508-BOOT-DISK-WAIT-2026-09-08.md ../../atlas/atlas-data.json -> exit 0 +claim-lint: python3 scripts/claim-lint.py -> exit 0 +claim-lint: python3 scripts/claim-lint.py --commit-msg .tmp/508-prose-commit.txt -> exit 0 +``` + + +Main integration: `git fetch origin` followed by `git merge --no-ff --no-commit origin/main` +merged `e664e4bc` without conflicts. The merge commit also records the prose corrections. + +```text +claim-lint: python3 scripts/claim-lint.py -> exit 0 +claim-lint: python3 scripts/claim-lint.py --commit-msg .tmp/508-merge-commit.txt -> exit 0 +``` + + +The initial merged-tree structure run passed 71/71 suites at +`327b42f4ab2ce221a575c226229addb8ebe7a3fc` +(`serials/508/landing/structure.log`). R182: main added the BSSH publickey +requirement to the strict aarch64 scorer. Its fixture change appended the marker +to the older capture. This landing replaces the fixture with the complete retained +`docs/planning/green-program/libbreenix/serials/430-420/landing/strict-1-serial.txt` +capture, which the merged strict scorer accepts in score-only mode (exit 0). +This is reuse of recorded serial bytes, not a new boot or fabricated marker. +The structure suites are repeated after that fixture replacement. + +```text +claim-lint: python3 scripts/claim-lint.py -> exit 0 +claim-lint: python3 scripts/claim-lint.py --commit-msg .tmp/508-fixture-commit.txt -> exit 0 +``` + +Fixture-replacement structure validation passed 71/71 suites (exit 0), recorded +in `serials/508/landing/structure-fixture.log`. The Mac soft-float boot_tests +build exited 0 with the accepted pinned-core future-incompatibility notice and +no project diagnostics (`serials/508/landing/aarch64-build.log`). + + +### Landing disposition: NOT LANDED + +Required gates ran against committed revision +`6cff8cf8c43adeeccd8d6088a5c42af70091233e`, which includes the merge of main. +The aarch64 strict command `bash docker/qemu/run-aarch64-boot-test-strict.sh 1` +exited 1: 0/1 successful boots, 1 failure, 0 inconclusive. Its 71/71 structure +preflight passed. The scorer rejected the missing BSSH publickey oracle after +`ended_by=hard_timeout`. The complete gate transcript is +`serials/508/landing/aarch64-strict.log`; the captured serial is +`serials/508/landing/aarch64-serial.txt.gz` (original serial bytes, including CRLF). +The text copy is normalized by Git. This is a failed shared-code check; +no causal attribution to this repair or the supplied userspace binaries is made. + +The x86 single command `bash docker/qemu/run-x86-boot-tests.sh` launched at +1-minute load 5.40. After the aarch64 failure, its verified process tree was +terminated during structure preflight, before QEMU boot. Its partial transcript +is `serials/508/landing/x86-single-cancelled.log`; it is cancelled, not GREEN. +`bash docker/qemu/run-boot-parallel.sh 5` was not launched under the stop rule. +No structure-timeout retry was required. No production gate was requested or run +in this landing attempt. The required gate set is therefore not satisfied. + +PR 980 remains unmerged and issue 508 remains open. The local main comparison +`git log origin/main..HEAD` is nonempty; there is no landed merge SHA or verified +merge timestamp. V-3 and V-4 prose corrections do not establish R245 lane success. +The branch and local worktree are retained for follow-up. The x86 lane clone and +temporary directory were removed after confirming no process used their working +directories, executables, or open descriptors. The gate reported aarch64 QEMU +count 0 at exit; the cancelled x86 run had not launched QEMU. + +Not claimed by this landing: passing required boots, an 11/11 accepted historical +oracle tally, closure of 508 or 666, atlas promotion, a new runtime mutation run, +or a root cause for the missing BSSH oracle. Deferred code findings remain [] +(0 supplied findings); the failed gate is recorded here and on issue 508. + +```text +claim-lint: python3 scripts/claim-lint.py --files .tmp/508-issue-comment.md .tmp/666-comment.md -> exit 0 +claim-lint: python3 scripts/claim-lint.py -> exit 0 +claim-lint: python3 scripts/claim-lint.py --commit-msg .tmp/508-landing-commit.txt -> exit 0 +``` + + +Handoff verification: PR 980 is OPEN and draft, with mergedAt=null and no merge +commit; issues 508 and 666 are OPEN with closedAt=null. Both issues received the +mechanism/evidence update; PR 980 received the requested title and a corrected +body describing this failed landing. Source locations were re-derived after the +evidence commits at `74a57ab9` in `serials/508/landing/source-citations.txt`. +The following handoff commit changes documentation/evidence only. + +```text +claim-lint: python3 scripts/claim-lint.py --files .tmp/508-pr-body.md -> exit 0 +claim-lint: python3 scripts/claim-lint.py -> exit 0 +claim-lint: python3 scripts/claim-lint.py --commit-msg .tmp/508-handoff-commit.txt -> exit 0 +``` diff --git a/docs/planning/green-program/block/serials/508/baseline/gate.log.gz b/docs/planning/green-program/block/serials/508/baseline/gate.log.gz new file mode 100644 index 000000000..87dab2b3f Binary files /dev/null and b/docs/planning/green-program/block/serials/508/baseline/gate.log.gz differ diff --git a/docs/planning/green-program/block/serials/508/baseline/markers.txt b/docs/planning/green-program/block/serials/508/baseline/markers.txt new file mode 100644 index 000000000..d1fe666bb --- /dev/null +++ b/docs/planning/green-program/block/serials/508/baseline/markers.txt @@ -0,0 +1,5 @@ +serial_kernel.txt:15120: [ INFO] kernel::test_exec: === MULTIPLE CONCURRENT PROCESSES TEST === +serial_kernel.txt:17675: [ INFO] kernel::syscall::handlers: TEST_TALLY: exited=110 nonzero=0 failed=[] +serial_kernel.txt:17682: [ INFO] kernel::syscall::handlers: 🏁 TEST RUNNER: All tests passed - you can exit QEMU now 🏁 +serial_user.txt:1085: [BOOT_DISK_WAIT_ORACLE:x86:switched_away=367:tests_completed=0:FAIL] +serial_user.txt:1086: [BOOT_DISK_WAIT_TRACE:x86:switch_preempt=0] diff --git a/docs/planning/green-program/block/serials/508/baseline/serial_kernel.txt.gz b/docs/planning/green-program/block/serials/508/baseline/serial_kernel.txt.gz new file mode 100644 index 000000000..790744884 Binary files /dev/null and b/docs/planning/green-program/block/serials/508/baseline/serial_kernel.txt.gz differ diff --git a/docs/planning/green-program/block/serials/508/baseline/serial_user.txt.gz b/docs/planning/green-program/block/serials/508/baseline/serial_user.txt.gz new file mode 100644 index 000000000..5fafaceb2 Binary files /dev/null and b/docs/planning/green-program/block/serials/508/baseline/serial_user.txt.gz differ diff --git a/docs/planning/green-program/block/serials/508/landing/aarch64-build.log b/docs/planning/green-program/block/serials/508/landing/aarch64-build.log new file mode 100644 index 000000000..64ad89eb1 --- /dev/null +++ b/docs/planning/green-program/block/serials/508/landing/aarch64-build.log @@ -0,0 +1,49 @@ +REVISION=327b42f4ab2ce221a575c226229addb8ebe7a3fc kernel source unchanged by pending fixture replacement + Updating git repository `https://github.com/rust-osdev/bootloader.git` + Updating crates.io index + Locking 154 packages to latest compatible versions + Adding aarch64-cpu v9.4.0 (available: v11.2.0) + Adding acpi v5.2.0 (available: v6.1.1) + Adding az v1.2.1 (available: v1.3.0) + Adding pic8259 v0.10.4 (available: v0.11.0) + Adding spin v0.9.9 (available: v0.12.3) + Adding tock-registers v0.8.1 (available: v0.10.1) + Adding uart_16550 v0.3.2 (available: v0.8.0) + Adding uefi v0.33.0 (available: v0.37.0) + Adding x86_64 v0.15.4 (available: v0.15.5) + Compiling compiler_builtins v0.1.160 (/Users/wrb/.rustup/toolchains/nightly-2025-06-24-aarch64-apple-darwin/lib/rustlib/src/rust/library/compiler-builtins/compiler-builtins) + Compiling core v0.0.0 (/Users/wrb/.rustup/toolchains/nightly-2025-06-24-aarch64-apple-darwin/lib/rustlib/src/rust/library/core) + Compiling autocfg v1.5.1 + Compiling az v1.2.1 + Compiling crossbeam-utils v0.8.23 + Compiling bootloader_api v0.11.13 (https://github.com/rust-osdev/bootloader.git?rev=707db11201b19541b7cfef84037866ee03aa0927#707db112) + Compiling kernel v0.1.0 (/private/tmp/claude-501/-Users-wrb-fun-code-breenix/d69ffb9d-4539-4cf3-8a3d-a872ff7c830b/scratchpad/b508/wt/kernel) + Compiling num-traits v0.2.19 + Compiling alloc v0.0.0 (/Users/wrb/.rustup/toolchains/nightly-2025-06-24-aarch64-apple-darwin/lib/rustlib/src/rust/library/alloc) + Compiling scopeguard v1.2.0 + Compiling byteorder v1.5.0 + Compiling futures-task v0.3.34 + Compiling micromath v2.1.0 + Compiling pin-project-lite v0.2.17 + Compiling futures-core v0.3.34 + Compiling conquer-util v0.3.0 + Compiling tock-registers v0.8.1 + Compiling slab v0.4.12 + Compiling noto-sans-mono-bitmap v0.3.2 + Compiling rlibc v1.0.0 + Compiling log v0.4.34 + Compiling lock_api v0.4.14 + Compiling conquer-once v0.4.0 + Compiling aarch64-cpu v9.4.0 + Compiling futures-util v0.3.34 + Compiling spinning_top v0.2.5 + Compiling spin v0.9.9 + Compiling linked_list_allocator v0.10.6 + Compiling crossbeam-queue v0.3.14 + Compiling float-cmp v0.9.0 + Compiling embedded-graphics-core v0.4.1 + Compiling embedded-graphics v0.8.2 + Finished `release` profile [optimized] target(s) in 21.77s +warning: the following packages contain code that will be rejected by a future version of Rust: core v0.0.0 (/Users/wrb/.rustup/toolchains/nightly-2025-06-24-aarch64-apple-darwin/lib/rustlib/src/rust/library/core) +note: to see what the problems were, use the option `--future-incompat-report`, or run `cargo report future-incompatibilities --id 1` +EXIT=0 diff --git a/docs/planning/green-program/block/serials/508/landing/aarch64-serial.txt b/docs/planning/green-program/block/serials/508/landing/aarch64-serial.txt new file mode 100644 index 000000000..0fb4b4b80 --- /dev/null +++ b/docs/planning/green-program/block/serials/508/landing/aarch64-serial.txt @@ -0,0 +1,1398 @@ +EOS +======================================== + Breenix ARM64 Kernel Starting + BUILD_ID: 006aa01cf40f98 +======================================== + +[CTX596_ORACLE:ARMED:force_eret=0] +[boot] DIAG_MARKER_XHCI_A +[boot] DIAG_MARKER_XHCI_B +[boot] DIAG_MARKER_XHCI_C +[boot] loader xhci_hcrst_raw=0x0 ecam=0x0 +[boot] Current exception level: EL1 +[boot] MMU already enabled (high-half kernel) +[boot] Initializing memory management (0x44000000-0x50000000)... +[boot] Memory management ready +[boot] Initializing Generic Timer... +[boot] Timer frequency: 62500000 Hz (62 MHz) +[boot] Initializing PL031 RTC... +[boot] Current timestamp: 488062 +[boot] Initializing GIC... +[gic] GICR probe 0x080a0000: WAKER=0x00000006 <<< VALID +[gic] GICR base mismatch: loader=0x00000000, using=0x080a0000 +[gic] GICD_CTLR wrote 0x53, readback=0x53 +[gic] GICR_IGROUPR0: wrote 0xFFFFFFFF, readback=0xffffffff +[gic] EOImode=1 (split EOI/DIR) - non-VMware path +[gic] ICC_CTLR_EL1: 0x8c00 -> 0x8c02 (EOImode=1) +[boot] GIC initialized (version 3) +[boot] Enabling UART interrupts... +[boot] Enabling GIC IRQ 33 (UART0)... +[uart] IMSC: 0x0 -> 0x50 (verify: 0x50) +[uart] FR=0x90 (RXFE=1), RIS=0x20 +[gic] IRQ 33 state (GICv3): + enabled=true, group1=true, pending=false + priority=0xa0, GICD_CTLR=0x53 + ICC_PMR=0xf0 +[boot] UART interrupts enabled +[boot] Enabling interrupts... +[boot] Interrupts enabled: true +[boot] QEMU PCI ECAM configured at 0x4010000000 +[boot] Initializing device drivers... +[drivers] Initializing driver subsystem... +[drivers] Hybrid mode: VirtIO MMIO + PCI AHCI +[drivers] Found VirtIO MMIO device: network (ID=1, version=1) +[drivers] Found VirtIO MMIO device: block (ID=2, version=1) +[drivers] Found VirtIO MMIO device: input (ID=18, version=1) +[drivers] Found VirtIO MMIO device: input (ID=18, version=1) +[drivers] Found VirtIO MMIO device: GPU (ID=16, version=1) +[drivers] Found 5 VirtIO MMIO devices +[virtio-blk] Searching for block devices... +[virtio-blk] Found block device 0 at 0xa003800 +[virtio-blk] Device 0 version: 1 +[virtio-blk] Device 0 capacity: 190464 sectors (93 MB) +[virtio-blk] Device 0 queue max size: 1024 +[virtio-blk] Device 0 using v1 (legacy) queue setup at PFN 0x4099d +[virtio-blk] Block MMIO IRQ 76 enabled for device 0 +[virtio-blk] Block device 0 initialized successfully +[virtio-blk] Initialized 1 block device(s) +[drivers] VirtIO block driver initialized +[virtio-net] Searching for network device... +[virtio-net] Found network device at 0xa003600 (slot 27) +[virtio-net] Device version: 1 +[virtio-net] MAC address: 52:54:00:12:34:56 +[virtio-net] RX queue max size: 1024 +[virtio-net] TX queue max size: 1024 +[virtio-net] Network device initialized successfully +[virtio-net] Network device IRQ 75 (will enable after net init) +[drivers] VirtIO network driver initialized +[virtio-net] Device test - MAC: 52:54:00:12:34:56 +[virtio-net] Test passed! +[virtio-gpu] Searching for GPU device... +[virtio-gpu] Found GPU device at 0xa003e00 +[virtio-gpu] Device version: 1 +[virtio-gpu] Control queue max size: 1024 +[virtio-gpu] Display: 1280x800 +[virtio-gpu] GPU device initialized successfully +[drivers] VirtIO GPU driver initialized +[virtio-gpu] Device test - Display: 1280x800 +[virtio-gpu] Test passed! +[virtio-sound] Searching for sound device... +[drivers] VirtIO sound driver init failed: No VirtIO Sound device found +[drivers] Driver subsystem initialized (MMIO) +[drivers] PCI ECAM at 0x4010000000, enumerating PCI bus... +[drivers] Found 1 PCI devices +[pci] 00:00.0 [1b36:0008] class=06/00 +[drivers] AHCI PCI init failed: No AHCI controller found +[drivers] Driver subsystem initialized (hybrid MMIO+PCI) +[boot] Found 6 devices +[drivers] Running post-init self-tests... +[virtio-blk] Testing read of sector 0... +[virtio-blk] Sector 0 data: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ... +[virtio-blk] Read test passed! +[boot] Initializing network stack... +[net] Initializing network stack... +[net] MAC address: 52:54:00:12:34:56 +NET: IP address: 10.0.2.15 +NET: Gateway: 10.0.2.2 +Network stack initialized +NET: Sending ARP request for gateway 10.0.2.2 +ARP request sent successfully +NET: Gateway ARP not resolved during init; will resolve via IRQ path +NET: Sending ICMP echo request to gateway 10.0.2.2 +NET: ARP cache miss for 10.0.2.2, sending ARP request +NET: Failed to send ping: ArpMiss: reply will populate cache via IRQ +NET: Network initialization complete +[virtio-net] Enabling IRQ 75 for network device +NET: pre-primed NetRx softirq for bootstrap callback re-enable +[boot] Initializing filesystem... +[ext2] Using VirtIO block device (190464 sectors) +[boot] ext2 root filesystem mounted +[boot] No home filesystem: No home block device available (expected at device index 3 or 1) (continuing) +[boot] devfs initialized at /dev +[boot] devptsfs initialized at /dev/pts +[boot] CPU detected: ARM Cortex-A72 +[boot] procfs initialized at /proc +[boot] TTY subsystem initialized +[boot] Initializing graphics... +[virtio-gpu] GPU device already initialized +[arm64-fb] Shell framebuffer initialized: 1280x800 +[graphics] Framebuffer: 1280x800 +[graphics] Particle system initialized +[render_queue] Initialized (64KB buffer) +[graphics] Split-screen terminal UI initialized +[boot] Initializing VirtIO keyboard... +[virtio-input] Searching for input devices (ID=18)... +[virtio-input] Slot 27 at 0xa003600: device_id=1 +[virtio-input] Slot 28 at 0xa003800: device_id=2 +[virtio-input] Slot 29 at 0xa003a00: device_id=18 +[virtio-input] Found tablet at 0xa003a00 (slot 29, supports EV_ABS) +[virtio-input] Tablet device version: 1 +[virtio-input] Event queue max size: 1024 +[virtio-input] Enabling IRQ 77 for tablet +[virtio-input] Tablet initialized (16 buffers) +[virtio-input] Slot 30 at 0xa003c00: device_id=18 +[virtio-input] Found keyboard at 0xa003c00 (slot 30, no EV_ABS) +[virtio-input] Keyboard device version: 1 +[virtio-input] Event queue max size: 1024 +[virtio-input] Enabling IRQ 78 for keyboard +[virtio-input] Keyboard initialized (64 buffers) +[virtio-input] Slot 31 at 0xa003e00: device_id=16 +[boot] VirtIO keyboard initialized +[boot] Initializing per-CPU data... +[boot] Per-CPU data initialized +[boot] Initializing process manager... +[boot] Process manager initialized +[boot] Initializing scheduler... +[boot] Scheduler initialized +[boot] Workqueue subsystem initialized +[boot] Softirq subsystem initialized +[boot] Render thread spawned (tid=3) +[boot] Tracing subsystem initialized and enabled +[boot] Pre-loading /sbin/init from ext2 (before timer)... +[net] ICMP echo reply received from 10.0.2.2 seq=1 +[boot] Init binary pre-loaded: 298664 bytes +[xhci] post-activation: MSI_EVENT_COUNT=0 EVENT_COUNT=0 POLL_COUNT=0 SPI_ACTIVATED=false +[boot] Initializing timer interrupt... +[timer] Timer configured for ~1000 Hz (62500 ticks per interrupt) +[timer] Using virtual timer (PPI 27) +[boot] Timer interrupt initialized +[smp] CPU 0 MPIDR=0x80000000, stack_base=0x43000000 +[smp] Probing secondary CPUs via PSCI... +[sm1@p] C1PU 1: PSCAI CPU_ON success (rawB_statCus=D0) +[Eesmp]F GCPU 2: 1PSC2I CPU_O@1ABCN success (raw_statusDEeFG2=0) +[smp] 3@1ACPU 3: PSCI CPU_BCON success (rDEeFaw_sG3tatus=0) +[gic] EOImode=1 (split EOI/DIR) - non-VMware path +[gic] EOImode=1 (split EOI/DIR) - non-VMware path +[smp] CPU 4 attempt 1/4: HVC64 failed (ret=-2), trying HVC32... +[gic] ICC_CTLR_EL1: 0x8c00 -> 0x8c02 (EOImode=1) +T[gi1c] ICC_CTLR_EL1: 0x8c00 -> 0x8c02 (EOImode=1) +[gic] EOImode=1 (split EOI/DIR) - non-VMware path +[gic] ICC_CTLR_EL1: 0x8c00 -> 0x8c02 (EOImode=1) +[smp] PSCI CPU_ON failed for CPU 4 after 1 attempts: ret=-2 (MPIDR=0x4 entry=0x400802b8) +[smp] CPU 4: PSCI CPU_ON failed (ret=-2), stopping probe +[smp] initialization_watchdog gap_ms=84 local_ceiling_ms=15000 margin_ms=3000 effective_ceiling_ms=20000 +[smp] 4 CPUs online +T2T3T4T5[SOFTIRQ_DEFERRAL_ORACLE:arch=aarch64:cpu=1:budget_ticks=250:wait_ticks=2:wait_ns=2308000:dispatches=5:iterations=25:verdict=ok] +[boot] Running parallel boot tests... +T6[BOOT_TESTS:START] +[STAGE:serial:ADVANCE] +[BOOT_TESTS:TOTAL:118] +[BOOT_TESTS:SERIAL_BOOT:3] +[BOOT_TESTS:EARLY_BOOT:91] +[BOOT_TESTS:STAGED:27 tests waiting for later stages] +T7T8T9T0[SUBSYSTEM:process:serial:START] +[TEST:process:frame_custody_refusal_gate:START] +[TEST:process:frame_custody_refusal_gate:PASS] +[TEST:process:page_table_custody_disposition_gate:START] +[EXEC_FAILED_RELEASE_ORACLE:aarch64:used_before=1:used_after=1:leaf_recorded=1:leaf_released=1:leaf_returned=1:tables_returned=4:roots_retired=1:live_refused=0] +[TEST:process:page_table_custody_disposition_gate:PASS] +[TEST:process:block_current_departure_gate:START] +[TEST:process:block_current_departure_gate:PASS] +[SUBSYSTEM:process:serial:COMPLETE:3/3] +[STAGE:serial:COMPLETE:3/118] +[STAGE:early:ADVANCE] +[SUBSYSTEM:scheduler:early:START] +[TEST:scheduler:wakes_are_placed_on_online_cpus:START] +[SUBSYSTEM:memory:early:START] +[TEST:memory:framework_sanity:START] +[TEST:scheduler:wakes_are_placed_on_online_cpus:PASS] +[TEST:memory:framework_sanity:PASS] +[SUBSYSTEM:filesystem:early:START] +[TEST:filesystem:vfs_init:START] +[TEST:filesystem:vfs_init:PASS] +[TEST:scheduler:executor_exists:START] +[TEST:scheduler:executor_exists:PASS] +[SUBSYSTEM:ipc:early:START] +[TEST:ipc:pipe_buffer_basic:START] +[TEST:ipc:pipe_buffer_basic:PASS] +[TEST:filesystem:devfs_mounted:START] +[TEST:filesystem:devfs_mounted:PASS] +[SUBSYSTEM:network:early:START] +[TEST:network:network_stack_init:START] +[TEST:network:network_stack_init:PASS] +[SUBSYSTEM:syscall:early:START] +[TEST:syscall:syscall_dispatch:START] +[TEST:syscall:syscall_dispatch:PASS] +[SUBSYSTEM:process:early:START] +[SUBSYSTEM:system:early:START] +[SUBSYSTEM:timer:early:START] +[TEST:system:boot_sequence:START] +[TEST:timer:timer_init:START] +[TEST:system:boot_sequence:PASS] +[TEST:process:deferred_fault_ring_overflow_injection:START] +[TEST:timer:timer_init:PASS] +[TEST:process:deferred_fault_ring_overflow_injection:PASS] +[SUBSYSTEM:logging:early:START] +[TEST:logging:logging_init:START] +[TEST:logging:logging_init:PASS] +[SUBSYSTEM:interrupts:early:START] +[TEST:interrupts:interrupt_controller_init:START] +[TEST:interrupts:interrupt_controller_init:PASS] +[TEST:memory:heap_alloc_basic:START] +[TEST:memory:heap_alloc_basic:PASS] +[TEST:syscall:arm64_pty_ioctl_path:START] +manager.create_process [ARM64]: ENTRY - name='pty_ioctl_test', elf_size=276816 +manager.create_process [ARM64]: Generated PID 2 +manager.create_process [ARM64]: Creating ProcessPageTable +manager.create_process [ARM64]: ProcessPageTable created +manager.create_process [ARM64]: Loading ELF into page table +manager.create_process [ARM64]: ELF loaded, entry=0x4000e0b0 +manager.create_process [ARM64]: Creating Process struct +manager.create_process [ARM64]: Process struct created, heap_start=0x40017000 +manager.create_process [ARM64]: Allocating user stack +manager.create_process [ARM64]: Stack physical range 0x4401e000-0x4402e000 +manager.create_process [ARM64]: User stack will be at 0xfffffeff0000-0xffffff000000 +manager.create_process [ARM64]: Mapping user stack into process page table +manager.create_process [ARM64]: map_user_stack_to_process user_bottom=0xfffffeff0000 user_top=0xffffff000000 phys_bottom=0x4401e000 +manager.create_process [ARM64]: User stack mapped successfully +manager.create_process [ARM64]: Creating main thread +manager.create_process [ARM64]: Main thread created +manager.create_process [ARM64]: Main thread set on process +manager.create_process [ARM64]: Adding PID 2 to ready queue +manager.create_process [ARM64]: Inserting process into process table +manager.create_process [ARM64]: SUCCESS - returning PID 2 +[TEST:syscall:arm64_pty_ioctl_path:PASS] +[TEST:memory:frame_allocator:START] +[TEST:memory:frame_allocator:PASS] +[TEST:syscall:arm64_socket_reset_quantum:START] +[TEST:syscall:arm64_socket_reset_quantum:PASS] +[TEST:process:process_manager_init:START] +[TEST:process:process_manager_init:PASS] +[SUBSYSTEM:syscall:early:COMPLETE:3/3] +[TEST:scheduler:async_waker:START] +[TEST:scheduler:async_waker:PASS] +[TEST:logging:log_levels:START] +[TEST:logging:log_levels:PASS] +[TEST:ipc:pipe_eof:START] +[TEST:ipc:pipe_eof:PASS] +[TEST:filesystem:file_open_close:START] +[TEST:filesystem:file_open_close:PASS] +[TEST:logging:serial_output:START] +[LOGGING_TEST] Serial test ARM64 +[TEST:logging:serial_output:PASS] +[TEST:scheduler:future_basics:START] +[TEST:scheduler:future_basics:PASS] +[TEST:interrupts:irq_enable_disable:START] +[TEST:interrupts:irq_enable_disable:PASS] +[TEST:filesystem:directory_list:START] +[TEST:filesystem:directory_list:PASS] +[SUBSYSTEM:scheduler:early:COMPLETE:4/4] +[TEST:filesystem:filesystem_syscalls_aarch64:START] +[TEST:filesystem:filesystem_syscalls_aarch64:PASS] +[SUBSYSTEM:logging:early:COMPLETE:3/3] +[TEST:system:system_stability:START] +[TEST:system:system_stability:PASS] +[TEST:interrupts:timer_interrupt_running:START] +[TEST:interrupts:timer_interrupt_running:PASS] +[TEST:timer:timer_ticks:START] +[TEST:timer:timer_ticks:PASS] +[TEST:interrupts:keyboard_irq_setup:START] +[TEST:interrupts:keyboard_irq_setup:PASS] +[SCHED_STRAND_ORACLE:aarch64:samples=11:checked=133:stranded=0:running_shape=0:ready_shape=0:resolved_production=0:resolved_exercised=0:worst_dwell_ms=0:overflow=0:worst_nonprogress_ms=0:nonprogress=0:queued_on_nondispatching_cpu=0:worst_queued_nondispatch_ms=0:worst_cpu_scheduler_silence_ms=411:worst_silence_cpu=0] +[TOMBSTONE_CENSUS:resident=0:removed=0:reap_second=0:retire_second=0:abandoned_unqueued=0] +[TTBR0_ASID_CENSUS:untagged=0:tagged=0:kernel=29:cleared=29] +[PINNED_HOME_CPU_UNAVAILABLE:count=0:publish_discarded=0:hold_pen_migrated=0:delivered=0:migration_refused=0:stack_home_conflict=0] +[TEST:filesystem:virtio_blk_multi_read:START] +[virtio-blk] Starting multi-read stress test (10 reads)... +[virtio-blk] Read 1 of 10 complete +[virtio-blk] Read 2 of 10 complete +[virtio-blk] Read 3 of 10 complete +[virtio-blk] Read 4 of 10 complete +[virtio-blk] Read 5 of 10 complete +[virtio-blk] Read 6 of 10 complete +[virtio-blk] Read 7 of 10 complete +[virtio-blk] Read 8 of 10 complete +[virtio-blk] Read 9 of 10 complete +[virtio-blk] Read 10 of 10 complete +[virtio-blk] Multi-read stress test passed! +[TEST:filesystem:virtio_blk_multi_read:PASS] +[TEST:process:scheduler_init:START] +[TEST:process:scheduler_init:PASS] +[TEST:filesystem:virtio_blk_sequential_read:START] +[virtio-blk] Testing sequential read of sectors 0-31... +[virtio-blk] Read sectors 0-7 OK (avail_idx wrap count: 0) +[virtio-blk] Read sectors 0-15 OK (avail_idx wrap count: 1) +[virtio-blk] Read sectors 0-23 OK (avail_idx wrap count: 1) +[virtio-blk] Read sectors 0-31 OK (avail_idx wrap count: 2) +[virtio-blk] Sequential read test passed! (32 sectors, 2 queue wraps) +[TEST:filesystem:virtio_blk_sequential_read:PASS] +[TEST:timer:timer_delay:START] +[TEST:filesystem:virtio_blk_write_read_verify:START] +[virtio-blk] Testing write-read-verify cycle... +[virtio-blk] Device capacity: 190464 sectors +[virtio-blk] Reading original data from sector 1000... +[virtio-blk] Original first 16 bytes: [00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00] +[virtio-blk] Test pattern first 16 bytes: [aa, 01, aa, 03, aa, 05, aa, 07, aa, 09, aa, 0b, aa, 0d, aa, 0f] +[virtio-blk] Writing test pattern to sector 1000... +[virtio-blk] Write succeeded +[virtio-blk] Reading back sector 1000... +[virtio-blk] Readback first 16 bytes: [aa, 01, aa, 03, aa, 05, aa, 07, aa, 09, aa, 0b, aa, 0d, aa, 0f] +[virtio-blk] Restoring original data to sector 1000... +[timer_delay] attempt=1 verdict=in-band elapsed_ms=10 host_stall_ms=1 max_gap_us=90 open_window_us=835 irqs=7 slices=90 forfeited=0 samples=114719 +[virtio-blk] Write-read-verify test passed! All 512 bytes match. +[TEST:filesystem:virtio_blk_write_read_verify:PASS] +[TEST:timer:timer_delay:PASS] +[TEST:process:thread_creation:START] +[TEST:system:kernel_heap:START] +[TEST:system:kernel_heap:PASS] +[TEST:process:thread_creation:PASS] +[TEST:interrupts:exception_vectors:START] +[TEST:interrupts:exception_vectors:PASS] +[TEST:timer:timer_monotonic:START] +[TEST:timer:timer_monotonic:PASS] +[TEST:filesystem:virtio_blk_invalid_sector:START] +[virtio-blk] Testing invalid sector read... +[virtio-blk] Device capacity: 190464 sectors +[virtio-blk] Invalid sector correctly rejected: Sector out of range +[virtio-blk] Invalid sector test passed! +[TEST:filesystem:virtio_blk_invalid_sector:PASS] +[TEST:memory:heap_large_alloc:START] +[TEST:timer:timer_quantum_reset_aarch64:START] +[TEST:timer:timer_quantum_reset_aarch64:PASS] +[TEST:filesystem:virtio_blk_uninitialized_read:START] +[virtio-blk] Testing uninitialized device handling... +[virtio-blk] Device is initialized (expected during normal boot) +[virtio-blk] Verified: read_sector checks BLOCK_DEVICE.is_none() and returns error +[virtio-blk] Uninitialized test passed (device was already initialized)! +[TEST:filesystem:virtio_blk_uninitialized_read:PASS] +[TEST:memory:heap_large_alloc:PASS] +[TEST:network:virtio_net_probe:START] +[TEST:network:virtio_net_probe:PASS] +[TEST:system:tty_foreground_pgrp:START] +[TEST:system:tty_foreground_pgrp:PASS] +[TEST:network:socket_creation:START] +[TEST:network:socket_creation:PASS] +[TEST:timer:ring_span_report:START] +[TEST:process:signal_delivery_infrastructure:START] +[TEST:process:signal_delivery_infrastructure:PASS] +[SUBSYSTEM:system:early:COMPLETE:4/4] +[TEST:process:arm64_signal_frame_conversion:START] +[TEST:process:arm64_signal_frame_conversion:PASS] +[SUBSYSTEM:process:early:COMPLETE:6/6] +[TEST:ipc:pipe_broken:START] +[TEST:ipc:pipe_broken:PASS] +[SUBSYSTEM:filesystem:early:COMPLETE:10/10] +[TEST:network:tcp_socket_creation:START] +[TEST:network:tcp_socket_creation:PASS] +[TEST:ipc:pipe_wake_mechanism:START] +[TEST:ipc:pipe_wake_mechanism:PASS] +[TEST:network:loopback:START] +[TEST:network:loopback:PASS] +[TEST:interrupts:exception_handlers:START] +[TEST:interrupts:exception_handlers:PASS] +[TEST:ipc:fd_table_creation:START] +[TEST:ipc:fd_table_creation:PASS] +[TEST:network:loopback_wake_loss_counters_are_zero:START] +[TEST:network:loopback_wake_loss_counters_are_zero:PASS] +[TEST:memory:heap_many_small:START] +[TEST:memory:heap_many_small:PASS] +[TEST:network:loopback_recv_wake_when_idle:START] +[TEST:ipc:fd_alloc_close:START] +[TEST:ipc:fd_alloc_close:PASS] +[TEST:memory:cow_flags_aarch64:START] +[TEST:memory:cow_flags_aarch64:PASS] +[TEST:ipc:create_pipe:START] +[TEST:ipc:create_pipe:PASS] +[TEST:memory:guard_page_exists:START] +[TEST:memory:guard_page_exists:PASS] +[TEST:interrupts:breakpoint:START] +[exception] Breakpoint (BRK #0) at 0xffff000040446f34 +[TEST:interrupts:breakpoint:PASS] +[TEST:memory:stack_layout:START] +[TEST:memory:stack_layout:PASS] +[TEST:interrupts:softirq_aarch64:START] +[TEST:interrupts:softirq_aarch64:PASS] +[SUBSYSTEM:interrupts:early:COMPLETE:8/8] +[TEST:ipc:pty_support_aarch64:START] +[TEST:ipc:pty_support_aarch64:PASS] +[TEST:memory:stack_allocation:START] +[TEST:memory:stack_allocation:PASS] +[SUBSYSTEM:ipc:early:COMPLETE:8/8] +[TEST:memory:user_stack_base:START] +[TEST:memory:user_stack_base:PASS] +[TEST:memory:user_stack_size:START] +[TEST:memory:user_stack_size:PASS] +[TEST:memory:user_stack_top:START] +[TEST:memory:user_stack_top:PASS] +[TEST:memory:user_stack_guard:START] +[TEST:memory:user_stack_guard:PASS] +[TEST:memory:user_stack_alignment:START] +[TEST:memory:user_stack_alignment:PASS] +[LOOPBACK_WAKE_BUDGET:arch=aarch64:test=when_idle:budget_ms=200:elapsed_tick_ms=151:elapsed_ctr_ms=201:ctx_delta=158:extensions=0:reader_state=absent:queued_cpu=none:queued_idx=none:idle_cpus=0x8:cpu_silence_ms=898:silence_cpu=0:woke_ms=748:verdict=ok] +[TEST:network:loopback_recv_wake_when_idle:PASS] +[TEST:memory:kernel_stack_base:START] +[TEST:memory:kernel_stack_base:PASS] +[TEST:memory:kernel_stack_size:START] +[TEST:memory:kernel_stack_size:PASS] +[TEST:network:loopback_recv_wake_under_load:START] +[TEST:memory:kernel_stack_top:START] +[TEST:memory:kernel_stack_top:PASS] +[TEST:memory:kernel_stack_guard:START] +[TEST:memory:kernel_stack_guard:PASS] +[TEST:memory:kernel_stack_alignment:START] +[TEST:memory:kernel_stack_alignment:PASS] +[TEST:memory:stack_in_range:START] +[TEST:memory:stack_in_range:PASS] +[TEST:memory:stack_grows_down:START] +[TEST:memory:stack_grows_down:PASS] +[TEST:memory:stack_depth:START] +[TEST:memory:stack_depth:PASS] +[TEST:memory:stack_frame_size:START] +[TEST:memory:stack_frame_size:PASS] +[TEST:memory:stack_red_zone:START] +[TEST:memory:stack_red_zone:PASS] +[SUBSYSTEM:memory:early:COMPLETE:24/24] +[RING_SPAN:cpu=0:span_ms=1298:writes=665:dropped=0:ticks_total=3968:tick_events=62] +[TEST:timer:ring_span_report:PASS] +[SUBSYSTEM:timer:early:COMPLETE:6/6] +[LOOPBACK_WAKE_BUDGET:arch=aarch64:test=under_load:budget_ms=200:elapsed_tick_ms=154:elapsed_ctr_ms=200:ctx_delta=410:extensions=0:reader_state=absent:queued_cpu=none:queued_idx=none:idle_cpus=0x2:cpu_silence_ms=1066:silence_cpu=0:woke_ms=913:verdict=ok] +[TEST:network:loopback_recv_wake_under_load:PASS] +[TEST:network:loopback_pump_does_not_busy_spin:START] +[TEST:network:loopback_pump_does_not_busy_spin:PASS] +[TEST:network:tcp_final_ack_survives_accept_publish_race:START] +[TEST:network:tcp_final_ack_survives_accept_publish_race:PASS] +[TEST:network:arm64_net_softirq_registration:START] +[TEST:network:arm64_net_softirq_registration:PASS] +[TEST:network:net_lock_guard_masks_interrupt_source:START] +[TEST:network:net_lock_guard_masks_interrupt_source:PASS] +[SUBSYSTEM:network:early:COMPLETE:12/12] +[STAGE:early:COMPLETE:91/118] +[STAGE:sched:ADVANCE] +[SUBSYSTEM:scheduler:sched:START] +[SUBSYSTEM:filesystem:sched:START] +[TEST:scheduler:kthread_spawn_verify:START] +[TEST:filesystem:block_wedge_oracle:START] +[SUBSYSTEM:process:sched:START] +[TEST:process:fork_exit_defer_reclaim_pairing_test:START] +[TEST:scheduler:kthread_spawn_verify:PASS] +[BLOCK_WEDGE_ORACLE:locked=1:wedged=1:refused=1:parked=0:refuse_ms=0] +[TEST:filesystem:block_wedge_oracle:PASS] +[TEST:scheduler:workqueue_operational:START] +[TEST:scheduler:workqueue_operational:PASS] +[SUBSYSTEM:filesystem:sched:COMPLETE:1/1] +[SUBSYSTEM:scheduler:sched:COMPLETE:2/2] +[PT_RETIRE_ORACLE:aarch64:cycles=64:used_before=53:used_after=53:expected_tables=9:roots=64:returned=640:lost=0:kstack_returns=64] +[PT_LEAF_ORACLE:aarch64:cycles=64:expected=192:recorded=192:released=192:returned=192:live_refused=0:used_before=53:used_after=53] +[TEST:process:fork_exit_defer_reclaim_pairing_test:PASS] +[TEST:process:exec_detach_oracle:START] +manager.create_process [ARM64]: ENTRY - name='exec_detach_leader', elf_size=180 +manager.create_process [ARM64]: Generated PID 69 +manager.create_process [ARM64]: Creating ProcessPageTable +manager.create_process [ARM64]: ProcessPageTable created +manager.create_process [ARM64]: Loading ELF into page table +manager.create_process [ARM64]: ELF loaded, entry=0x200000 +manager.create_process [ARM64]: Creating Process struct +manager.create_process [ARM64]: Process struct created, heap_start=0x401000 +manager.create_process [ARM64]: Allocating user stack +manager.create_process [ARM64]: Stack physical range 0x4404c000-0x4405c000 +manager.create_process [ARM64]: User stack will be at 0xfffffeff0000-0xffffff000000 +manager.create_process [ARM64]: Mapping user stack into process page table +manager.create_process [ARM64]: map_user_stack_to_process user_bottom=0xfffffeff0000 user_top=0xffffff000000 phys_bottom=0x4404c000 +manager.create_process [ARM64]: User stack mapped successfully +manager.create_process [ARM64]: Creating main thread +manager.create_process [ARM64]: Main thread created +manager.create_process [ARM64]: Main thread set on process +manager.create_process [ARM64]: Adding PID 69 to ready queue +manager.create_process [ARM64]: Inserting process into process table +manager.create_process [ARM64]: SUCCESS - returning PID 69 +[EXEC_DETACH_ORACLE:aarch64:bodies=2:fail_preserved=2:sibling_refused=2:success_detached=2:fresh_root=2:tgid_self=2:custody_balance=0:leaf_residual=16:stack_residual=18:kstack_frames_released=0:old_group_reached_pre=2:old_group_missed_post=2:self_group_reached_post=2] +[TEST:process:exec_detach_oracle:PASS] +[TEST:process:exec_detach_oracle:PASS] +[TEST:process:clone_admission_oracle:START] +[CLONE_ADMISSION_ORACLE:aarch64:admitted=1:refused=2:creating_refused=1:published_admitted=2:balance=0] +[TEST:process:clone_admission_oracle:PASS] +[TEST:process:clone_admission_oracle:PASS] +[TEST:process:init_designation_oracle:START] +manager.create_process_with_argv [ARM64]: ENTRY - name='init_oracle_a1', elf_size=8, argc=1 +manager.create_process_with_argv [ARM64]: Generated PID 1 +manager.create_process_with_argv [ARM64]: Creating ProcessPageTable +manager.create_process_with_argv [ARM64]: Loading ELF into page table +manager.create_process_with_argv [ARM64]: ENTRY - name='init_oracle_a2', elf_size=120, argc=1 +manager.create_process_with_argv [ARM64]: Generated PID 1 +manager.create_process_with_argv [ARM64]: Creating ProcessPageTable +manager.create_process_with_argv [ARM64]: Loading ELF into page table +[INIT_DESIGNATION_ORACLE:aarch64:construct_failed=2:construct_undecided=0:construct_residual=0:construct_roots_retired=2:construct_leaf_balance=0:construct_commit_balance=0:refused=4:accepted=1:published=1:retired=1:held_error_removals=1:reparented=1:reparent_skipped=1:ordinary_allocated=5:reserved_collisions=0:designation_balance=0] +[TEST:process:init_designation_oracle:PASS] +[TEST:process:init_designation_oracle:PASS] +[TEST:process:init_group_refusal_oracle:START] +[INIT_GROUP_REFUSAL_ORACLE:aarch64:none_probes=3:none_refusals=0:init_refused=1:alias_refused=1:alias_pid_refused=0:nonit_probes=2:nonit_refusals=0:rows_delta=0:refusal_counter_delta=0:designation_residual=0:balance=0] +[TEST:process:init_group_refusal_oracle:PASS] +[TEST:process:init_group_refusal_oracle:PASS] +[TEST:process:kernel_stack_ownership_oracle:START] +[CREATION_LOCK_ORDER:INJECTED:PM_HELD] +[KSTACK_OWNER_ORACLE:aarch64:creation_rows=1000:creation_owned=1000:one_owner=1000:two_owner=0:zero_owner=0:fork_rows=1:fork_owned=1:slot_returns_exact_one=1:slot_alloc_delta=1000:slot_free_delta=1000:slot_balance=0:cohort_enrolled=1000:cohort_returned=1000:cohort_double_return=0:foreign_alloc_delta=0:foreign_returned=0:frames_mapped_delta=0:frames_released_delta=0:frame_balance=0:frame_used_delta=0:frame_used_bounded=1:live_checks=1109:live_refusals_production=0:live_refusals_injected=1:drop_refused_live=0:pte_overwrite_refusals=0:pub_pooled=1073:pub_sched_owned=1073:pub_row_residual=0:pub_unowned=0:classifier_sched_owned=1:classifier_row_residual=1:classifier_unowned=1:classifier_not_pooled=1:sched_publications=31:sched_pm_held_production=0:sched_pm_held_injected=1:reconciliation_diff=0:reconciliation_skew_bound=6:balance=0] +[TEST:process:kernel_stack_ownership_oracle:PASS] +[TEST:process:creating_dispatch_refusal:START] +manager.create_process [ARM64]: ENTRY - name='creating_dispatch_probe', elf_size=180 +manager.create_process [ARM64]: Generated PID 86 +manager.create_process [ARM64]: Creating ProcessPageTable +manager.create_process [ARM64]: ProcessPageTable created +manager.create_process [ARM64]: Loading ELF into page table +manager.create_process [ARM64]: ELF loaded, entry=0x200000 +manager.create_process [ARM64]: Creating Process struct +manager.create_process [ARM64]: Process struct created, heap_start=0x401000 +manager.create_process [ARM64]: Allocating user stack +manager.create_process [ARM64]: Stack physical range 0x44059000-0x44069000 +manager.create_process [ARM64]: User stack will be at 0xfffffeff0000-0xffffff000000 +manager.create_process [ARM64]: Mapping user stack into process page table +manager.create_process [ARM64]: map_user_stack_to_process user_bottom=0xfffffeff0000 user_top=0xffffff000000 phys_bottom=0x44059000 +manager.create_process [ARM64]: User stack mapped successfully +manager.create_process [ARM64]: Creating main thread +manager.create_process [ARM64]: Main thread created +manager.create_process [ARM64]: Main thread set on process +manager.create_process [ARM64]: Adding PID 86 to ready queue +manager.create_process [ARM64]: Inserting process into process table +manager.create_process [ARM64]: SUCCESS - returning PID 86 +[CREATING_DISPATCH_ORACLE_DIAG:aarch64:refusal_delta=2:leaf_residual=16:user_stack_residual=16:balance=0:settle_rounds=3:root=0x44042000:root_release_done=1:probe_hw_clear=1:probe_shadow_clear=1:probe_cached_clear=1:retire_hw_blocked=0:retire_shadow_blocked=0:retire_cached_blocked=0] +[CREATING_DISPATCH_ORACLE:aarch64:injected=1:refused_via_dispatch=1:requeue_retried=1:dispatched_after_publish=1:balance=0:leaf_residual=16:user_stack_residual=16] +[TEST:process:creating_dispatch_refusal:PASS] +[TEST:process:creating_dispatch_refusal:PASS] +[TEST:process:tombstone_join_oracle:START] +[TOMBSTONE_JOIN_ORACLE:aarch64:retire_second=1:reap_second=1:removed=2:resident_delta=0:tombstone_rows=0:PASS] +[TEST:process:tombstone_join_oracle:PASS] +[TEST:process:retirement_fence_gate:START] +[TEST:process:retirement_fence_gate:PASS] +[TEST:process:reclaim_progress_gate:START] +[TEST:process:reclaim_progress_gate:PASS] +[TEST:process:exit_kick_protocol_gate:START] +[exit_kick_gate] budget_anchor=test_phase anchor_age_at_gate_entry_ms=1937 budget_ms=60000 gate_ceiling_ms=45000 +[TEST:process:exit_kick_protocol_gate:PASS] +[TEST:process:exit_kick_worker_window_isolation:START] +[exit_kick_worker_isolation] budget_anchor=test_phase anchor_age_at_entry_ms=1965 budget_ms=60000 scenario_ceiling_ms=1500 +[exit_kick_worker_isolation] scenario=before_union_worker_1 start=1 +[exit_kick_gate] wait=before_union_worker_1 breadcrumb=1 elapsed_ms=1000 progress_work=43 progress_exit=0 re_kick_sgis=57 +[STRAND_INJECT_ORACLE:aarch64:legA_exercised=1:legA_recovered=1:legB_exercised=1:legB_recovered=1:stranded=0] +[exit_kick_gate] wait=before_union_worker_1 cause=absolute_ceiling elapsed_ms=1501 window_budget_ms=1500 re_kick_sgis=87 cpus_online=4 condition_current=2 condition_expected=3 progress_work_start=3 progress_work_final=63 progress_exit_start=0 progress_exit_final=0 worker_1_progress_start=1 worker_1_progress_final=1 worker_2_progress_start=0 worker_2_progress_final=31 worker_3_progress_start=2 worker_3_progress_final=31 last_advance_ms_ago=31 late_true=0 +[exit_kick_worker_isolation] scenario=before_union_worker_1 elapsed_ms=1502 cause=absolute_ceiling target=none progress=[1, 31, 31] completed=6 joined=3 +[exit_kick_worker_isolation] scenario=after_worker_1 start=1 +[exit_kick_gate] wait=after_worker_1 cause=no_progress elapsed_ms=800 window_budget_ms=800 re_kick_sgis=45 cpus_online=4 condition_current=2 condition_expected=3 progress_work_start=3 progress_work_final=35 progress_exit_start=0 progress_exit_final=0 worker_1_progress_start=1 worker_1_progress_final=1 worker_2_progress_start=2 worker_2_progress_final=17 worker_3_progress_start=0 worker_3_progress_final=17 last_advance_ms_ago=800 late_true=0 +[exit_kick_worker_isolation] scenario=after_worker_1 elapsed_ms=801 cause=no_progress target=worker_1 progress=[1, 17, 17] completed=6 joined=3 +[exit_kick_worker_isolation] expected_failure=exit_kick_worker_isolation: worker 1 made no progress +[exit_kick_worker_isolation] scenario=after_worker_2 start=1 +[exit_kick_gate] wait=after_worker_2 cause=no_progress elapsed_ms=801 window_budget_ms=800 re_kick_sgis=45 cpus_online=4 condition_current=2 condition_expected=3 progress_work_start=3 progress_work_final=35 progress_exit_start=0 progress_exit_final=0 worker_1_progress_start=2 worker_1_progress_final=17 worker_2_progress_start=1 worker_2_progress_final=1 worker_3_progress_start=0 worker_3_progress_final=17 last_advance_ms_ago=801 late_true=0 +[exit_kick_worker_isolation] scenario=after_worker_2 elapsed_ms=801 cause=no_progress target=worker_2 progress=[17, 1, 17] completed=5 joined=3 +[exit_kick_worker_isolation] expected_failure=exit_kick_worker_isolation: worker 2 made no progress +[exit_kick_worker_isolation] scenario=after_worker_3 start=1 +[SCHED_STRAND_ORACLE:aarch64:samples=110:checked=592:stranded=0:running_shape=0:ready_shape=0:resolved_production=0:resolved_exercised=2:worst_dwell_ms=0:overflow=0:worst_nonprogress_ms=0:nonprogress=0:queued_on_nondispatching_cpu=0:worst_queued_nondispatch_ms=0:worst_cpu_scheduler_silence_ms=4280:worst_silence_cpu=0] +[TOMBSTONE_CENSUS:resident=0:removed=2:reap_second=1:retire_second=1:abandoned_unqueued=0] +[TTBR0_ASID_CENSUS:untagged=0:tagged=2:kernel=3614:cleared=3617] +[PINNED_HOME_CPU_UNAVAILABLE:count=0:publish_discarded=0:hold_pen_migrated=0:delivered=0:migration_refused=0:stack_home_conflict=0] +[exit_kick_gate] wait=after_worker_3 cause=no_progress elapsed_ms=800 window_budget_ms=800 re_kick_sgis=45 cpus_online=4 condition_current=2 condition_expected=3 progress_work_start=3 progress_work_final=35 progress_exit_start=0 progress_exit_final=0 worker_1_progress_start=2 worker_1_progress_final=17 worker_2_progress_start=0 worker_2_progress_final=17 worker_3_progress_start=1 worker_3_progress_final=1 last_advance_ms_ago=800 late_true=0 +[exit_kick_worker_isolation] scenario=after_worker_3 elapsed_ms=802 cause=no_progress target=worker_3 progress=[17, 17, 1] completed=3 joined=3 +[exit_kick_worker_isolation] expected_failure=exit_kick_worker_isolation: worker 3 made no progress +[exit_kick_worker_isolation] scenario=after_healthy start=1 +[exit_kick_worker_isolation] scenario=after_healthy elapsed_ms=1 cause=success target=none progress=[2, 2, 2] completed=7 joined=3 +[exit_kick_worker_isolation] healthy_baseline=PASS +[exit_kick_worker_isolation] fixture_elapsed_ms=4010 +[TEST:process:exit_kick_worker_window_isolation:PASS] +[TEST:process:exit_kick_budget_anchor_isolation:START] +[exit_kick_budget_anchor] pre_test_delay_ms=1209 fixture_budget_ms=1000 fixture_gate_ceiling_ms=600 +[exit_kick_budget_anchor] scenario=inherited_kernel_entry_anchor anchor=inherited cause=phase_one_ceiling target=none elapsed_ms=0 budget_age_at_entry_ms=1210 +[exit_kick_budget_anchor] scenario=test_phase_entry_anchor anchor=test_phase cause=no_progress target=worker_1 elapsed_ms=405 budget_age_at_entry_ms=0 +[exit_kick_budget_anchor] scenario=gate_window_exhaustion anchor=test_phase cause=gate_ceiling target=none elapsed_ms=605 budget_age_at_entry_ms=0 +[exit_kick_budget_anchor] fixture_elapsed_ms=2224 +[TEST:process:exit_kick_budget_anchor_isolation:PASS] +[TEST:process:census_widen_oracle:START] +[CENSUS_WIDEN_ORACLE:aarch64:arm_target=0:baseline_reported=0:armed_reported=1:tid=1218:shape=ready_queued_nondispatching:queued_nondispatching=1:queued_nondispatch_ms=6362:cpu_silence_ms=6362:joined=1:retired=1:PASS] +[TEST:process:census_widen_oracle:PASS] +[SUBSYSTEM:process:sched:COMPLETE:14/14] +[STAGE:sched:COMPLETE:108/118] +[boot] All boot tests passed! +[PT_ROOT_CUSTODY:no_proof=2:no_arch=0:terminated=1:undecided=1:mid_retire=1:retired=79] +[TOMBSTONE_CENSUS:resident=0:removed=2:reap_second=1:retire_second=1:abandoned_unqueued=0] +[TTBR0_ASID_CENSUS:untagged=0:tagged=2:kernel=5128:cleared=5131] +[PIN_GUARD_ORACLE:aarch64:home=1:here=0:reclaim=1:requeue=1:previous=1:on_home=3:refused=3:census_clean=1:verdict=PASS] +[PINNED_HOME_CPU_UNAVAILABLE:count=0:publish_discarded=0:hold_pen_migrated=0:delivered=0:migration_refused=0:stack_home_conflict=0] +[TIMER_WAKE_LATENCY_ORACLE:aarch64:sleep_ms=10:peers=8:overrun_ms=4:bound_ms=100:quantum_ms=10:round_ms=80:wake_enqueues=1:peers_started=8:peers_spinning=8:backstops=0:setup_ms=4:window_ms=45:measured=1:PASS] + +======================================== + Breenix ARM64 Boot Complete! +======================================== + +Hello from ARM64! + +[boot] Launching init from pre-loaded ELF... +manager.create_process_with_argv [ARM64]: ENTRY - name='init', elf_size=298664, argc=1 +manager.create_process_with_argv [ARM64]: Generated PID 1 +manager.create_process_with_argv [ARM64]: Creating ProcessPageTable +manager.create_process_with_argv [ARM64]: Loading ELF into page table +manager.create_process_with_argv [ARM64]: ELF loaded, entry=0x4000f5d0 +manager.create_process_with_argv [ARM64]: Allocating user stack +manager.create_process_with_argv [ARM64]: User stack will be at 0xfffffeff0000-0xffffff000000 +manager.create_process_with_argv [ARM64]: argc/argv set up on stack, SP=0xfffffefffed0 +manager.create_process_with_argv [ARM64]: SUCCESS - returning PID 1 +[INIT_DESIGNATION:aarch64:designated_pid=1:reserved_collisions=0] +[STAGE:proc:ADVANCE] +[SUBSYSTEM:ipc:proc:START] +[TEST:ipc:telnetd_dependencies_aarch64:START] +[SUBSYSTEM:syscall:proc:START] +[TEST:syscall:fcntl_pm_contention_oracle:START] +[TEST:ipc:telnetd_dependencies_aarch64:PASS] +[SUBSYSTEM:process:proc:START] +[TEST:process:current_thread_exists:START] +[TEST:process:current_thread_exists:PASS] +[SUBSYSTEM:ipc:proc:COMPLETE:1/1] +[TEST:process:process_list_populated:START] +[TEST:process:process_list_populated:PASS] +[FCNTL_PM_CONTENTION_ORACLE:aarch64:arm_wait_us=100:armed=1:acquired=1:holder_cpu=1:pm_busy_probe=1:calls=64:eagain=0:first_errno=9:first_wait_us=8084:hold_safety=0:hold_done=1:joined=1:PASS] +[TEST:syscall:fcntl_pm_contention_oracle:PASS] +[TEST:process:frame_custody_healthy_counters:START] +[TEST:process:frame_custody_healthy_counters:PASS] +[TEST:syscall:irq_hold_oracle:START] +[SUBSYSTEM:process:proc:COMPLETE:3/3] +UDP: Delivered packet to socket on port 54540 +UDP: Delivered packet to socket on port 54540 +UDP: Delivered packet to socket on port 54540 +UDP: Delivered packet to socket on port 54540 +UDP: Delivered packet to socket on port 54540 +UDP: Delivered packet to socket on port 54540 +UDP: Delivered packet to socket on port 54540 +UDP: Delivered packet to socket on port 54540 +UDP: Delivered packet to socket on port 54540 +UDP: Delivered packet to socket on port 54540 +UDP: Delivered packet to socket on port 54540 +UDP: Delivered packet to socket on port 54540 +[IRQ_HOLD_ORACLE:aarch64:attempts=1:armed=1:holder_cpu=1:irqs_enabled_before=1:masked_in_hold=1:sends=12:hold_us=12017:netrx_pending_at_release=1:received=12:stalled=0:hold_done=1:joined=1:PASS] +[TEST:syscall:irq_hold_oracle:PASS] +[TEST:syscall:tty_irq_pm_oracle:START] +[TTY_IRQ_PM_ORACLE:aarch64:fg_unset_before=1:pm_blocking_acquires=0:deferred=2:pgrp_set_by_entry=0:processed=2:buffered=2:irqs_enabled_before=1:holder_cpu=1:pm_busy_probe=1:hold_us=20000:entry_us=2:joined=1:adopted=1:adopted_pgrp=821:restored=1:PASS:peer_hold] +[TEST:syscall:tty_irq_pm_oracle:PASS] +[TEST:syscall:tty_irq_fg_oracle:START] + +[TTY_IRQ_FG_ORACLE:aarch64:fg_known=822:target_absent=1:fg_lock_touches=0:fg_blocking_acquires=0:snapshot_reads=3:processed=2:buffered=1:irqs_enabled_before=1:holder_cpu=1:fg_busy_probe=1:hold_us=20000:entry_us=118:joined=1:sig_calls=1:sig_pid=822:sig_num=2:snapshot_agrees=1:restored=1:PASS:peer_hold] +[TEST:syscall:tty_irq_fg_oracle:PASS] +[TEST:syscall:udp_socket_lock_oracle:START] +UDP: Delivered packet to socket on port 54550 +UDP: Delivered packet to socket on port 54550 +UDP: Delivered packet to socket on port 54550 +UDP: Delivered packet to socket on port 54550 +UDP: Delivered packet to socket on port 54550 +UDP: Delivered packet to socket on port 54550 +UDP: Delivered packet to socket on port 54550 +UDP: Delivered packet to socket on port 54550 +UDP: Delivered packet to socket on port 54550 +UDP: Delivered packet to socket on port 54550 +UDP: Delivered packet to socket on port 54550 +UDP: Delivered packet to socket on port 54550 +[UDP_LOCK_ORACLE:aarch64:attempts=1:armed=1:holder_cpu=1:irqs_enabled_before=1:masked_in_hold=1:sends=12:hold_us=12020:netrx_pending_at_release=1:received=12:stalled=0:hold_done=1:joined=1:PASS] +[TEST:syscall:udp_socket_lock_oracle:PASS] +[TEST:syscall:udp_ports_lock_oracle:START] +UDP: Delivered packet to socket on port 54560 +UDP: Delivered packet to socket on port 54560 +UDP: Delivered packet to socket on port 54560 +UDP: Delivered packet to socket on port 54560 +UDP: Delivered packet to socket on port 54560 +UDP: Delivered packet to socket on port 54560 +UDP: Delivered packet to socket on port 54560 +UDP: Delivered packet to socket on port 54560 +UDP: Delivered packet to socket on port 54560 +UDP: Delivered packet to socket on port 54560 +UDP: Delivered packet to socket on port 54560 +UDP: Delivered packet to socket on port 54560 +UDP: Delivered packet to socket on port 54560 +UDP: Delivered packet to socket on port 54560 +UDP: Delivered packet to socket on port 54560 +[UDP_PORTS_LOCK_ORACLE:aarch64:attempts=1:armed=1:holder_cpu=1:driver_cpu=3:irqs_enabled_before=1:masked_in_hold=1:sends=24:hold_us=12006:refused=9:delivered=15:stalled=0:hold_done=1:joined=1:PASS] +[TEST:syscall:udp_ports_lock_oracle:PASS] +[SUBSYSTEM:syscall:proc:COMPLETE:6/6] +[EXEC_LOCK_ORDER:commits=0:pm_held=0:unpinned=0:missing=0] +[TESTS_COMPLETE:118/118] +[BOOT_TESTS:PASS] +[boot] Reset 4 idle thread contexts (CPUs online: 4) +EL0_SYSCALL: First syscall from userspace (SPSR confirms EL0) +[ OK ] syscall path verified +[STAGE:user:ADVANCE] +[EXEC_LOCK_ORDER:commits=0:pm_held=0:unpinned=0:missing=0] +[USER_RSP_SCRATCH_EL_CENSUS:el0_installs=3:el1_skipped=0] +[TESTS_COMPLETE:118/118] +[BOOT_TESTS:PASS] +[init] Breenix init starting (PID 1) +[spawn] path='/bin/heartbeat' +manager.create_process_with_argv [ARM64]: ENTRY - name='heartbeat', elf_size=303616, argc=1 +manager.create_process_with_argv [ARM64]: Generated PID 90 +manager.create_process_with_argv [ARM64]: Creating ProcessPageTable +manager.create_process_with_argv [ARM64]: Loading ELF into page table +manager.create_process_with_argv [ARM64]: ELF loaded, entry=0x4000f85c +manager.create_process_with_argv [ARM64]: Allocating user stack +manager.create_process_with_argv [ARM64]: User stack will be at 0xfffffeff0000-0xffffff000000 +manager.create_process_with_argv [ARM64]: argc/argv set up on stack, SP=0xfffffefffed0 +manager.create_process_with_argv [ARM64]: SUCCESS - returning PID 90 +[spawn] Created child PID 90 for parent PID 1 +[spawn] Success: child PID 90 scheduled +[init] heartbeat started (PID 90) +[INIT_GROUP_WALK:aarch64:rows=3:init_tgid_rows=1:foreign_tgid_rows=0:refused=1:verdict=PASS] +[INIT_GROUP_WALK:aarch64:rows=3:init_tgid_rows=1:foreign_tgid_rows=0:refused=2:verdict=PASS] +[INIT_GROUP_REFUSAL:aarch64:phase=early:probe1=-22:probe2=-22:expected=-22] +[spawn] path='/bin/block_eintr_oracle' +[heartbeat] tid=1241 uptime_ms=8944 kbd_nonzero=0 +manager.create_process_with_argv [ARM64]: ENTRY - name='block_eintr_oracle', elf_size=304752, argc=1 +manager.create_process_with_argv [ARM64]: Generated PID 91 +manager.create_process_with_argv [ARM64]: Creating ProcessPageTable +manager.create_process_with_argv [ARM64]: Loading ELF into page table +manager.create_process_with_argv [ARM64]: ELF loaded, entry=0x4000f938 +manager.create_process_with_argv [ARM64]: Allocating user stack +manager.create_process_with_argv [ARM64]: User stack will be at 0xfffffeff0000-0xffffff000000 +manager.create_process_with_argv [ARM64]: argc/argv set up on stack, SP=0xfffffefffed0 +manager.create_process_with_argv [ARM64]: SUCCESS - returning PID 91 +[spawn] Created child PID 91 for parent PID 1 +[spawn] Success: child PID 91 scheduled +F123456789SC[syscall] exit(0) pid=92 name=block_eintr_oracle_child_92 +[TTBR0_ASID_CENSUS:untagged=0:tagged=2576:kernel=8090:cleared=10634] +[heartbeat] tid=1241 uptime_ms=9949 kbd_nonzero=0 +F123456789SC[syscall] exit(0) pid=93 name=block_eintr_oracle_child_93 +[TTBR0_ASID_CENSUS:untagged=0:tagged=6616:kernel=12442:cleared=18979] +[SCHED_STRAND_ORACLE:aarch64:samples=209:checked=917:stranded=0:running_shape=0:ready_shape=0:resolved_production=0:resolved_exercised=2:worst_dwell_ms=0:overflow=0:worst_nonprogress_ms=0:nonprogress=1:queued_on_nondispatching_cpu=1:worst_queued_nondispatch_ms=6339:worst_cpu_scheduler_silence_ms=6445:worst_silence_cpu=0] +[TOMBSTONE_CENSUS:resident=0:removed=2:reap_second=1:retire_second=1:abandoned_unqueued=0] +[TTBR0_ASID_CENSUS:untagged=0:tagged=9351:kernel=15394:cleared=24647] +[PINNED_HOME_CPU_UNAVAILABLE:count=0:publish_discarded=0:hold_pen_migrated=0:delivered=0:migration_refused=0:stack_home_conflict=0] +[BLOCK_EINTR_ORACLE:PASS:stages=2:reads=4:short=0:eintr=0:handled=1] +[BLOCK_EINTR_ORACLE:PASS:stages=2:reads=4:short=0:eintr=0:handled=1] +[syscall] exit(0) pid=91 name=block_eintr_oracle +[TTBR0_ASID_CENSUS:untagged=0:tagged=9959:kernel=16041:cleared=25901] +[init] block_eintr_oracle exited pid=91 code=0 +[spawn] path='/bin/futex_handoff_oracle' +manager.create_process_with_argv [ARM64]: ENTRY - name='futex_handoff_oracle', elf_size=291984, argc=1 +manager.create_process_with_argv [ARM64]: Generated PID 94 +manager.create_process_with_argv [ARM64]: Creating ProcessPageTable +manager.create_process_with_argv [ARM64]: Loading ELF into page table +manager.create_process_with_argv [ARM64]: ELF loaded, entry=0x4000ef08 +manager.create_process_with_argv [ARM64]: Allocating user stack +manager.create_process_with_argv [ARM64]: User stack will be at 0xfffffeff0000-0xffffff000000 +manager.create_process_with_argv [ARM64]: argc/argv set up on stack, SP=0xfffffefffec0 +manager.create_process_with_argv [ARM64]: SUCCESS - returning PID 94 +[spawn] Created child PID 94 for parent PID 1 +[spawn] Success: child PID 94 scheduled +[heartbeat] tid=1241 uptime_ms=10950 kbd_nonzero=0 +[FUTEX_HANDOFF_ORACLE:aarch64:driven=2:stage1_ret=EAGAIN:stage1_wake=0:stage1_parked=0:stage2_ret=0:stage2_wake=1:stage2_parked=0:stage3_ret=ETIMEDOUT:stage3_elapsed_ok=1:stage3_elapsed_ms=51:arm_delay_us=3:rescues=0:queue_residual=0:balance=0] +[FUTEX_HANDOFF_ORACLE_DRIVER:s1=-11:s2=0:s3=-110] +[syscall] exit(0) pid=94 name=futex_handoff_oracle +[TTBR0_ASID_CENSUS:untagged=0:tagged=10785:kernel=16960:cleared=27629] +[init] futex_handoff_oracle exited pid=94 code=0 +[spawn] path='/bin/poll_tcp_oracle' +manager.create_process_with_argv [ARM64]: ENTRY - name='poll_tcp_oracle', elf_size=307952, argc=1 +manager.create_process_with_argv [ARM64]: Generated PID 95 +manager.create_process_with_argv [ARM64]: Creating ProcessPageTable +manager.create_process_with_argv [ARM64]: Loading ELF into page table +manager.create_process_with_argv [ARM64]: ELF loaded, entry=0x4001050c +manager.create_process_with_argv [ARM64]: Allocating user stack +manager.create_process_with_argv [ARM64]: User stack will be at 0xfffffeff0000-0xffffff000000 +manager.create_process_with_argv [ARM64]: argc/argv set up on stack, SP=0xfffffefffed0 +manager.create_process_with_argv [ARM64]: SUCCESS - returning PID 95 +[spawn] Created child PID 95 for parent PID 1 +[spawn] Success: child PID 95 scheduled +[POLL_TCP_TIMEOUT] fd=4 timeout_ms=120 publish=none_in_window rx_len=0 revents=0x0000 +F123456789SC[syscall] exit(0) pid=96 name=poll_tcp_oracle_child_96 +[TTBR0_ASID_CENSUS:untagged=0:tagged=12040:kernel=18391:cleared=30290] +[POLL_TCP_ORACLE:PASS:stages=3:idle_ms=124:late_ms=88:park_ms=84:attempts=1] +[POLL_TCP_ORACLE:PASS:stages=3:idle_ms=124:late_ms=88:park_ms=84:attempts=1] +[syscall] exit(0) pid=95 name=poll_tcp_oracle +[TTBR0_ASID_CENSUS:untagged=0:tagged=12058:kernel=18406:cleared=30319] +[init] poll_tcp_oracle exited pid=95 code=0 +[spawn] path='/bin/tty_oracle' +manager.create_process_with_argv [ARM64]: ENTRY - name='tty_oracle', elf_size=338264, argc=1 +manager.create_process_with_argv [ARM64]: Generated PID 97 +manager.create_process_with_argv [ARM64]: Creating ProcessPageTable +manager.create_process_with_argv [ARM64]: Loading ELF into page table +manager.create_process_with_argv [ARM64]: ELF loaded, entry=0x40012b34 +manager.create_process_with_argv [ARM64]: Allocating user stack +manager.create_process_with_argv [ARM64]: User stack will be at 0xfffffeff0000-0xffffff000000 +manager.create_process_with_argv [ARM64]: argc/argv set up on stack, SP=0xfffffefffed0 +manager.create_process_with_argv [ARM64]: SUCCESS - returning PID 97 +[spawn] Created child PID 97 for parent PID 1 +[spawn] Success: child PID 97 scheduled +[pty] sys_posix_openpt(flags=0x902) +[pty] Created master fd=3 (pty 2) +[pty] Unlocked PTY 2 (fd 3) +[TTY_ORACLE:openpt:verdict=PASS:slave=/dev/pts/2:locked_open_refused=1] +[TTY_ORACLE:openpt:verdict=PASS:slave=/dev/pts/2:locked_open_refused=1] +[TTY_ORACLE:nonblock_open:verdict=PASS:master_fl=0x800:slave_fl=0x800:both_eagain=1] +[TTY_ORACLE:nonblock_open:verdict=PASS:master_fl=0x800:slave_fl=0x800:both_eagain=1] +[TTY_ORACLE:isatty:verdict=PASS:master=1:slave=1:regular_file=0] +[TTY_ORACLE:isatty:verdict=PASS:master=1:slave=1:regular_file=0] +[TTY_ORACLE:termios_roundtrip:verdict=PASS:default_lflag=0x803b:modified_lflag=0x8023:restored=1] +[TTY_ORACLE:termios_roundtrip:verdict=PASS:default_lflag=0x803b:modified_lflag=0x8023:restored=1] +[TTY_ORACLE:canonical_line:verdict=PASS:withheld_unterminated=1:delivered_on_newline=6] +[TTY_ORACLE:canonical_line:verdict=PASS:withheld_unterminated=1:delivered_on_newline=6] +[TTY_ORACLE:icrnl:verdict=PASS:cr_to_nl=1:cleared_icrnl_holds=1] +[TTY_ORACLE:icrnl:verdict=PASS:cr_to_nl=1:cleared_icrnl_holds=1] +[TTY_ORACLE:raw_passthrough:verdict=PASS:unterminated_delivered=2] +[TTY_ORACLE:raw_passthrough:verdict=PASS:unterminated_delivered=2] +[TTY_ORACLE:echo:verdict=PASS:echo_on_bytes=3:echo_off_bytes=0] +[TTY_ORACLE:echo:verdict=PASS:echo_on_bytes=3:echo_off_bytes=0] +[TTY_ORACLE:onlcr:verdict=PASS:onlcr_expanded=3:opost_off_passthrough=2] +[TTY_ORACLE:onlcr:verdict=PASS:onlcr_expanded=3:opost_off_passthrough=2] +[TTY_ORACLE:winsize:verdict=PASS:default=24x80:set=41x133:crossed_ends=1] +[TTY_ORACLE:winsize:verdict=PASS:default=24x80:set=41x133:crossed_ends=1] +[TTY_ORACLE:foreground_pgrp:verdict=PASS:pgrp=97:crossed_ends=1] +[TTY_ORACLE:foreground_pgrp:verdict=PASS:pgrp=97:crossed_ends=1] +[TTY_ORACLE:hangup:verdict=PASS:eagain_while_open=1:eof_after_close=1] +[TTY_ORACLE:hangup:verdict=PASS:eagain_while_open=1:eof_after_close=1] +[pty] sys_posix_openpt(flags=0x902) +[pty] Created master fd=4 (pty 3) +[pty] Unlocked PTY 3 (fd 4) +[TTY_ORACLE:ctty:verdict=PASS:dev_tty_aliased_slave=1:survived_alias_close=1:eof_after_last_slave_close=1] +[TTY_ORACLE:ctty:verdict=PASS:dev_tty_aliased_slave=1:survived_alias_close=1:eof_after_last_slave_close=1] +[pty] sys_posix_openpt(flags=0x902) +[pty] Created master fd=4 (pty 3) +[pty] Unlocked PTY 3 (fd 4) +F123456789SC[heartbeat] tid=1241 uptime_ms=11952 kbd_nonzero=0 +[EXEC_LOCK_ORDER:FIRST_COMMIT] +[EXEC_LOCK_ORDER:commits=1:pm_held=0:unpinned=0:missing=0] +[syscall] exit(0) pid=98 name=/bin/tty_oracle +[TTBR0_ASID_CENSUS:untagged=0:tagged=14502:kernel=21092:cleared=35405] +[TTY_ORACLE:cloexec_exec:verdict=PASS:cloexec_survived_fork=1:eof_after_parent_close=1] +[TTY_ORACLE:cloexec_exec:verdict=PASS:cloexec_survived_fork=1:eof_after_parent_close=1] +[TTY_ORACLE:COMPLETE:pass=14:fail=0] +[TTY_ORACLE:COMPLETE:pass=14:fail=0] +[syscall] exit(0) pid=97 name=tty_oracle +[TTBR0_ASID_CENSUS:untagged=0:tagged=14510:kernel=21096:cleared=35416] +[init] tty_oracle exited pid=97 code=0 +[spawn] path='/bin/exec_smoke' +manager.create_process_with_argv [ARM64]: ENTRY - name='exec_smoke', elf_size=290928, argc=1 +manager.create_process_with_argv [ARM64]: Generated PID 99 +manager.create_process_with_argv [ARM64]: Creating ProcessPageTable +manager.create_process_with_argv [ARM64]: Loading ELF into page table +manager.create_process_with_argv [ARM64]: ELF loaded, entry=0x4000eb40 +manager.create_process_with_argv [ARM64]: Allocating user stack +manager.create_process_with_argv [ARM64]: User stack will be at 0xfffffeff0000-0xffffff000000 +manager.create_process_with_argv [ARM64]: argc/argv set up on stack, SP=0xfffffefffed0 +manager.create_process_with_argv [ARM64]: SUCCESS - returning PID 99 +[spawn] Created child PID 99 for parent PID 1 +[spawn] Success: child PID 99 scheduled +[EXEC_SMOKE:LAUNCH] +[EXEC_LOCK_ORDER:commits=2:pm_held=0:unpinned=0:missing=0] +[EXEC_SMOKE:TARGET_ENTER argc=2] +[EXEC_SMOKE:TARGET_OK] +[syscall] exit(0) pid=99 name=/bin/exec_smoke_target +[TTBR0_ASID_CENSUS:untagged=0:tagged=16127:kernel=22883:cleared=38799] +[EXEC_SMOKE:LAUNCHER_EXIT code=0] +[spawn] path='/usr/local/test/bin/clonevm_exec_test' +manager.create_process_with_argv [ARM64]: ENTRY - name='clonevm_exec_test', elf_size=289672, argc=1 +manager.create_process_with_argv [ARM64]: Generated PID 100 +manager.create_process_with_argv [ARM64]: Creating ProcessPageTable +manager.create_process_with_argv [ARM64]: Loading ELF into page table +manager.create_process_with_argv [ARM64]: ELF loaded, entry=0x4000f63c +manager.create_process_with_argv [ARM64]: Allocating user stack +manager.create_process_with_argv [ARM64]: User stack will be at 0xfffffeff0000-0xffffff000000 +manager.create_process_with_argv [ARM64]: argc/argv set up on stack, SP=0xfffffefffec0 +manager.create_process_with_argv [ARM64]: SUCCESS - returning PID 100 +[spawn] Created child PID 100 for parent PID 1 +[spawn] Success: child PID 100 scheduled +CLONEVM_EXEC_TEST: start +CLONEVM_EXEC_TEST: child live +CLONEVM_EXEC_TEST: live sibling refused exec +[syscall] exit(0) pid=101 name=thread-101 +[TTBR0_ASID_CENSUS:untagged=0:tagged=19420:kernel=25583:cleared=44219] +CLONEVM_EXEC_TEST: child exited +[heartbeat] tid=1241 uptime_ms=12952 kbd_nonzero=0 +[EXEC_LOCK_ORDER:commits=3:pm_held=0:unpinned=0:missing=0] +CLONEVM_EXEC_TEST: second stage +[syscall] exit(0) pid=102 name=thread-102 +[TTBR0_ASID_CENSUS:untagged=0:tagged=20366:kernel=26555:cleared=46084] +CLONEVM_EXEC_TEST: post-exec rendezvous complete +CLONEVM_EXEC_TEST: post-exec futex keys derived +CLONEVM_EXEC_TEST: PASS +[syscall] exit(0) pid=100 name=/usr/local/test/bin/clonevm_exec_test +[TTBR0_ASID_CENSUS:untagged=0:tagged=20376:kernel=26561:cleared=46098] +[init] clonevm_exec_test exited pid=100 code=0 +[spawn] path='/bin/bsshd' +manager.create_process_with_argv [ARM64]: ENTRY - name='bsshd', elf_size=455240, argc=1 +manager.create_process_with_argv [ARM64]: Generated PID 103 +manager.create_process_with_argv [ARM64]: Creating ProcessPageTable +manager.create_process_with_argv [ARM64]: Loading ELF into page table +manager.create_process_with_argv [ARM64]: ELF loaded, entry=0x4001d6c0 +manager.create_process_with_argv [ARM64]: Allocating user stack +manager.create_process_with_argv [ARM64]: User stack will be at 0xfffffeff0000-0xffffff000000 +manager.create_process_with_argv [ARM64]: argc/argv set up on stack, SP=0xfffffefffed0 +manager.create_process_with_argv [ARM64]: SUCCESS - returning PID 103 +[spawn] Created child PID 103 for parent PID 1 +[spawn] Success: child PID 103 scheduled +[init] bsshd started (PID 103) +[spawn] path='/bin/xhci_counters' +bsshd: starting on port 2222 +bsshd: listening on 0.0.0.0:2222 +manager.create_process_with_argv [ARM64]: ENTRY - name='xhci_counters', elf_size=292264, argc=1 +manager.create_process_with_argv [ARM64]: Generated PID 104 +manager.create_process_with_argv [ARM64]: Creating ProcessPageTable +manager.create_process_with_argv [ARM64]: Loading ELF into page table +manager.create_process_with_argv [ARM64]: ELF loaded, entry=0x4000f140 +manager.create_process_with_argv [ARM64]: Allocating user stack +manager.create_process_with_argv [ARM64]: User stack will be at 0xfffffeff0000-0xffffff000000 +manager.create_process_with_argv [ARM64]: argc/argv set up on stack, SP=0xfffffefffed0 +manager.create_process_with_argv [ARM64]: SUCCESS - returning PID 104 +[spawn] Created child PID 104 for parent PID 1 +[spawn] Success: child PID 104 scheduled +[spawn] path='/bin/bwm' +[xhci-counters] XHCI_MSI_EVENT_TOTAL=0 +[xhci-counters] XHCI_IRQ_ENTRY_TOTAL=0 +[xhci-counters] XHCI_LOCK_CONTENDED_TOTAL=0 +[xhci-counters] KBD_NONZERO_TOTAL=0 +[syscall] exit(0) pid=104 name=xhci_counters +[TTBR0_ASID_CENSUS:untagged=0:tagged=23350:kernel=29822:cleared=52305] +[heartbeat] tid=1241 uptime_ms=13954 kbd_nonzero=0 +manager.create_process_with_argv [ARM64]: ENTRY - name='bwm', elf_size=428144, argc=1 +manager.create_process_with_argv [ARM64]: Generated PID 105 +manager.create_process_with_argv [ARM64]: Creating ProcessPageTable +manager.create_process_with_argv [ARM64]: Loading ELF into page table +manager.create_process_with_argv [ARM64]: ELF loaded, entry=0x40018bf8 +manager.create_process_with_argv [ARM64]: Allocating user stack +manager.create_process_with_argv [ARM64]: User stack will be at 0xfffffeff0000-0xffffff000000 +manager.create_process_with_argv [ARM64]: argc/argv set up on stack, SP=0xfffffefffee0 +manager.create_process_with_argv [ARM64]: SUCCESS - returning PID 105 +[spawn] Created child PID 105 for parent PID 1 +[spawn] Success: child PID 105 scheduled +[spawn] path='/sbin/telnetd' +[bwm] Breenix Window Manager starting... (v2-chromeless-skip) +manager.create_process_with_argv [ARM64]: ENTRY - name='telnetd', elf_size=298232, argc=1 +manager.create_process_with_argv [ARM64]: Generated PID 106 +manager.create_process_with_argv [ARM64]: Creating ProcessPageTable +manager.create_process_with_argv [ARM64]: Loading ELF into page table +manager.create_process_with_argv [ARM64]: ELF loaded, entry=0x4000f930 +manager.create_process_with_argv [ARM64]: Allocating user stack +manager.create_process_with_argv [ARM64]: User stack will be at 0xfffffeff0000-0xffffff000000 +manager.create_process_with_argv [ARM64]: argc/argv set up on stack, SP=0xfffffefffed0 +manager.create_process_with_argv [ARM64]: SUCCESS - returning PID 106 +[spawn] Created child PID 106 for parent PID 1 +[spawn] Success: child PID 106 scheduled +[init] Boot script completed +[spawn] path='/bin/bounce' +TELNETD_STARTING +TELNETD_LISTENING +manager.create_process_with_argv [ARM64]: ENTRY - name='bounce', elf_size=388200, argc=1 +manager.create_process_with_argv [ARM64]: Generated PID 107 +manager.create_process_with_argv [ARM64]: Creating ProcessPageTable +manager.create_process_with_argv [ARM64]: Loading ELF into page table +manager.create_process_with_argv [ARM64]: ELF loaded, entry=0x400188f4 +manager.create_process_with_argv [ARM64]: Allocating user stack +manager.create_process_with_argv [ARM64]: User stack will be at 0xfffffeff0000-0xffffff000000 +manager.create_process_with_argv [ARM64]: argc/argv set up on stack, SP=0xfffffefffed0 +manager.create_process_with_argv [ARM64]: SUCCESS - returning PID 107 +[spawn] Created child PID 107 for parent PID 1 +[spawn] Success: child PID 107 scheduled +[init] bounce started (PID 107) +[INIT_GROUP_WALK:aarch64:rows=12:init_tgid_rows=1:foreign_tgid_rows=0:refused=3:verdict=PASS] +[INIT_GROUP_WALK:aarch64:rows=12:init_tgid_rows=1:foreign_tgid_rows=0:refused=4:verdict=PASS] +[INIT_GROUP_REFUSAL:aarch64:phase=quiesce:probe1=-22:probe2=-22:expected=-22] +Bounce spheres demo starting (for Gus!) [boot_id=000000035fb3aa80] +[init] Process 92 exited (code 0) +[init] Process 93 exited (code 0) +[window] create_window_buffer: 400x300 (480000 bytes, 118 pages) +[init] Process 101 exited (code 0) +[init] Process 102 exited (code 0) +[init] Process 104 exited (code 0) +[window] Created buffer id=1 for pid=107: 400x300 at virt=0x7ffffdf86000 phys=0x442cb000 +[bounce] Window mode: id=1 400x300 [boot_id=000000035fb3aa80] +[heartbeat] tid=1241 uptime_ms=14959 kbd_nonzero=0 +[SCHED_STRAND_ORACLE:aarch64:samples=309:checked=1186:stranded=0:running_shape=0:ready_shape=0:resolved_production=0:resolved_exercised=2:worst_dwell_ms=0:overflow=0:worst_nonprogress_ms=0:nonprogress=1:queued_on_nondispatching_cpu=1:worst_queued_nondispatch_ms=6339:worst_cpu_scheduler_silence_ms=6445:worst_silence_cpu=0] +[TOMBSTONE_CENSUS:resident=0:removed=15:reap_second=14:retire_second=1:abandoned_unqueued=0] +[TTBR0_ASID_CENSUS:untagged=0:tagged=27348:kernel=34383:cleared=60836] +[PINNED_HOME_CPU_UNAVAILABLE:count=0:publish_discarded=0:hold_pen_migrated=0:delivered=0:migration_refused=0:stack_home_conflict=0] +[heartbeat] tid=1241 uptime_ms=15961 kbd_nonzero=0 +[bwm] ERROR: GPU compositing required +[syscall] exit(1) pid=105 name=bwm +[TTBR0_ASID_CENSUS:untagged=0:tagged=27362:kernel=34500:cleared=60968] +[init] Process 105 exited (code 1) +[heartbeat] tid=1241 uptime_ms=16963 kbd_nonzero=0 +[heartbeat] tid=1241 uptime_ms=17964 kbd_nonzero=0 +[heartbeat] tid=1241 uptime_ms=18968 kbd_nonzero=0 +[heartbeat] tid=1241 uptime_ms=19970 kbd_nonzero=0 +[RESUME_PC_CENSUS:cpu=0:source=el1-restore-frame-elr:text=4470:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=0:source=el0-restore-frame-elr:text=0:kstack=0:uva=319:smallint=0:other=0] +[SCHED_STRAND_ORACLE:aarch64:samples=408:checked=1384:stranded=0:running_shape=0:ready_shape=0:resolved_production=0:resolved_exercised=2:worst_dwell_ms=0:overflow=0:worst_nonprogress_ms=0:nonprogress=1:queued_on_nondispatching_cpu=1:worst_queued_nondispatch_ms=6339:worst_cpu_scheduler_silence_ms=6445:worst_silence_cpu=0] +[TOMBSTONE_CENSUS:resident=0:removed=16:reap_second=15:retire_second=1:abandoned_unqueued=0] +[TTBR0_ASID_CENSUS:untagged=0:tagged=27375:kernel=35713:cleared=62193] +[PINNED_HOME_CPU_UNAVAILABLE:count=0:publish_discarded=0:hold_pen_migrated=0:delivered=0:migration_refused=0:stack_home_conflict=0] +[heartbeat] tid=1241 uptime_ms=20973 kbd_nonzero=0 +[PT_ROOT_CUSTODY:no_proof=14:no_arch=0:terminated=1:undecided=1:mid_retire=1:retired=82] +[TOMBSTONE_CENSUS:resident=0:removed=16:reap_second=15:retire_second=1:abandoned_unqueued=0] +[TTBR0_ASID_CENSUS:untagged=0:tagged=27378:kernel=35755:cleared=62237] +[net-rx-counters] sample=1 begin +[net-rx-counters] sample=1 NET_RX_MSI_TOTAL: 0 +[net-rx-counters] sample=1 NET_RX_RING_DRAIN_TOTAL: 0 +[net-rx-counters] sample=1 NET_RX_FRAME_TOTAL: 3 (cpu0=3) +[net-rx-counters] sample=1 NET_RX_ARP_TOTAL: 2 (cpu0=2) +[net-rx-counters] sample=1 NET_RX_ETHERTYPE_OTHER_TOTAL: 0 +[net-rx-counters] sample=1 NET_RX_SOFTIRQ_ENTRY_TOTAL: 37 (cpu0=1, cpu1=12, cpu2=6, cpu3=18) +[net-rx-counters] sample=1 NET_RX_SOFTIRQ_EXIT_TOTAL: 37 (cpu0=1, cpu1=12, cpu2=6, cpu3=18) +[net-rx-counters] sample=1 NET_RX_REENTRANT_SKIP_TOTAL: 1 (cpu3=1) +[net-rx-counters] sample=1 NET_RX_GUARD_RELEASE_TOTAL: 36 (cpu0=1, cpu1=12, cpu2=6, cpu3=17) +[net-rx-counters] sample=1 NET_RX_REARM_CHECK_TOTAL: 0 +[net-rx-counters] sample=1 NET_RX_REARM_RACE_TOTAL: 0 +[net-rx-counters] sample=1 NET_RX_REARM_ARMED_TOTAL: 0 +[net-rx-counters] sample=1 NET_PCI_IRQ_RAISED_NETRX: 0 +[net-rx-counters] sample=1 GIC_SPI55_ACK_TOTAL: 0 +[net-rx-counters] sample=1 end +[heartbeat] tid=1241 uptime_ms=21986 kbd_nonzero=0 +[heartbeat] tid=1241 uptime_ms=22988 kbd_nonzero=0 +[heartbeat] tid=1241 uptime_ms=23990 kbd_nonzero=0 +[heartbeat] tid=1241 uptime_ms=25003 kbd_nonzero=0 +[SCHED_STRAND_ORACLE:aarch64:samples=507:checked=1582:stranded=0:running_shape=0:ready_shape=0:resolved_production=0:resolved_exercised=2:worst_dwell_ms=0:overflow=0:worst_nonprogress_ms=0:nonprogress=1:queued_on_nondispatching_cpu=1:worst_queued_nondispatch_ms=6339:worst_cpu_scheduler_silence_ms=6445:worst_silence_cpu=0] +[TOMBSTONE_CENSUS:resident=0:removed=16:reap_second=15:retire_second=1:abandoned_unqueued=0] +[TTBR0_ASID_CENSUS:untagged=0:tagged=27398:kernel=37027:cleared=63527] +[PINNED_HOME_CPU_UNAVAILABLE:count=0:publish_discarded=0:hold_pen_migrated=0:delivered=0:migration_refused=0:stack_home_conflict=0] +[heartbeat] tid=1241 uptime_ms=26005 kbd_nonzero=0 +[heartbeat] tid=1241 uptime_ms=27007 kbd_nonzero=0 +[heartbeat] tid=1241 uptime_ms=28010 kbd_nonzero=0 +[heartbeat] tid=1241 uptime_ms=29012 kbd_nonzero=0 +[RESUME_PC_CENSUS:cpu=0:source=el1-restore-frame-elr:text=5031:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=0:source=el0-restore-frame-elr:text=0:kstack=0:uva=319:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=0:source=ctx-x30:text=16876:kstack=0:uva=130:smallint=190:other=0] +[RESUME_PC_CENSUS:cpu=0:source=ctx-elr-el1:text=16877:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=0:source=lr-save-el1:text=5110:kstack=0:uva=0:smallint=2:other=0] +[RESUME_PC_CENSUS:cpu=0:source=lr-restore-el1:text=5030:kstack=0:uva=0:smallint=1:other=0] +[RESUME_PC_CENSUS:cpu=0:source=lr-save-el0:text=0:kstack=0:uva=139:smallint=189:other=0] +[RESUME_PC_CENSUS:cpu=0:source=lr-restore-el0:text=0:kstack=0:uva=130:smallint=189:other=0] +[RESUME_PC_CENSUS:cpu=1:source=el1-restore-frame-elr:text=5331:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=1:source=el0-restore-frame-elr:text=0:kstack=0:uva=320:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=1:source=el0-first-entry-frame-elr:text=0:kstack=0:uva=5:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=1:source=ctx-x30:text=7268:kstack=0:uva=124:smallint=196:other=0] +[RESUME_PC_CENSUS:cpu=1:source=ctx-elr-el1:text=7268:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=1:source=lr-save-el1:text=5218:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=1:source=lr-restore-el1:text=5333:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=1:source=lr-save-el0:text=0:kstack=0:uva=116:smallint=195:other=0] +[RESUME_PC_CENSUS:cpu=1:source=lr-restore-el0:text=0:kstack=0:uva=124:smallint=196:other=0] +[RESUME_PC_CENSUS:cpu=2:source=el1-restore-frame-elr:text=5712:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=2:source=el0-restore-frame-elr:text=0:kstack=0:uva=289:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=2:source=el0-first-entry-frame-elr:text=0:kstack=0:uva=2:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=2:source=ctx-x30:text=8030:kstack=0:uva=45:smallint=245:other=0] +[RESUME_PC_CENSUS:cpu=2:source=ctx-elr-el1:text=8032:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=2:source=lr-save-el1:text=5671:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=2:source=lr-restore-el1:text=5712:kstack=0:uva=0:smallint=1:other=0] +[RESUME_PC_CENSUS:cpu=2:source=lr-save-el0:text=0:kstack=0:uva=41:smallint=244:other=0] +[RESUME_PC_CENSUS:cpu=2:source=lr-restore-el0:text=0:kstack=0:uva=45:smallint=244:other=0] +[RESUME_PC_CENSUS:cpu=3:source=el1-restore-frame-elr:text=6188:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=3:source=el0-restore-frame-elr:text=0:kstack=0:uva=377:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=3:source=el0-first-entry-frame-elr:text=0:kstack=0:uva=5:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=3:source=ctx-x30:text=8768:kstack=0:uva=82:smallint=295:other=0] +[RESUME_PC_CENSUS:cpu=3:source=ctx-elr-el1:text=8768:kstack=0:uva=0:smallint=0:other=0] +[heartbeat] tid=1241 uptime_ms=30014 kbd_nonzero=0 +[RESUME_PC_CENSUS:cpu=3:source=lr-save-el1:text=6266:kstack=0:uva=0:smallint=0:other=0] +[PT_ROOT_CUSTODY:no_proof=14:no_arch=0:terminated=1:undecided=1:mid_retire=1:retired=82] +[RESUME_PC_CENSUS:cpu=3:source=lr-restore-el1:text=6188:kstack=0:uva=0:smallint=0:other=0] +[TOMBSTONE_CENSUS:resident=0:removed=16:reap_second=15:retire_second=1:abandoned_unqueued=0] +[RESUME_PC_CENSUS:cpu=3:source=lr-save-el0:text=0:kstack=0:uva=78:smallint=294:other=0] +[TTBR0_ASID_CENSUS:untagged=0:tagged=27410:kernel=38146:cleared=64657] +[RESUME_PC_CENSUS:cpu=3:source=lr-restore-el0:text=0:kstack=0:uva=82:smallint=295:other=0] +[net-rx-counters] sample=2 begin +[net-rx-counters] sample=2 NET_RX_MSI_TOTAL: 0 +[net-rx-counters] sample=2 NET_RX_RING_DRAIN_TOTAL: 0 +[net-rx-counters] sample=2 NET_RX_FRAME_TOTAL: 3 (cpu0=3) +[net-rx-counters] sample=2 NET_RX_ARP_TOTAL: 2 (cpu0=2) +[net-rx-counters] sample=2 NET_RX_ETHERTYPE_OTHER_TOTAL: 0 +[net-rx-counters] sample=2 NET_RX_SOFTIRQ_ENTRY_TOTAL: 37 (cpu0=1, cpu1=12, cpu2=6, cpu3=18) +[net-rx-counters] sample=2 NET_RX_SOFTIRQ_EXIT_TOTAL: 37 (cpu0=1, cpu1=12, cpu2=6, cpu3=18) +[net-rx-counters] sample=2 NET_RX_REENTRANT_SKIP_TOTAL: 1 (cpu3=1) +[net-rx-counters] sample=2 NET_RX_GUARD_RELEASE_TOTAL: 36 (cpu0=1, cpu1=12, cpu2=6, cpu3=17) +[net-rx-counters] sample=2 NET_RX_REARM_CHECK_TOTAL: 0 +[net-rx-counters] sample=2 NET_RX_REARM_RACE_TOTAL: 0 +[net-rx-counters] sample=2 NET_RX_REARM_ARMED_TOTAL: 0 +[net-rx-counters] sample=2 NET_PCI_IRQ_RAISED_NETRX: 0 +[net-rx-counters] sample=2 GIC_SPI55_ACK_TOTAL: 0 +[net-rx-counters] sample=2 end +[SCHED_STRAND_ORACLE:aarch64:samples=606:checked=1780:stranded=0:running_shape=0:ready_shape=0:resolved_production=0:resolved_exercised=2:worst_dwell_ms=0:overflow=0:worst_nonprogress_ms=0:nonprogress=1:queued_on_nondispatching_cpu=1:worst_queued_nondispatch_ms=6339:worst_cpu_scheduler_silence_ms=6445:worst_silence_cpu=0] +[TOMBSTONE_CENSUS:resident=0:removed=16:reap_second=15:retire_second=1:abandoned_unqueued=0] +[TTBR0_ASID_CENSUS:untagged=0:tagged=27410:kernel=38344:cleared=64855] +[PINNED_HOME_CPU_UNAVAILABLE:count=0:publish_discarded=0:hold_pen_migrated=0:delivered=0:migration_refused=0:stack_home_conflict=0] +[heartbeat] tid=1241 uptime_ms=31030 kbd_nonzero=0 +[heartbeat] tid=1241 uptime_ms=32031 kbd_nonzero=0 +[heartbeat] tid=1241 uptime_ms=33033 kbd_nonzero=0 +[heartbeat] tid=1241 uptime_ms=34034 kbd_nonzero=0 +[heartbeat] tid=1241 uptime_ms=35037 kbd_nonzero=0 +[SCHED_STRAND_ORACLE:aarch64:samples=705:checked=1978:stranded=0:running_shape=0:ready_shape=0:resolved_production=0:resolved_exercised=2:worst_dwell_ms=0:overflow=0:worst_nonprogress_ms=0:nonprogress=1:queued_on_nondispatching_cpu=1:worst_queued_nondispatch_ms=6339:worst_cpu_scheduler_silence_ms=6445:worst_silence_cpu=0] +[TOMBSTONE_CENSUS:resident=0:removed=16:reap_second=15:retire_second=1:abandoned_unqueued=0] +[TTBR0_ASID_CENSUS:untagged=0:tagged=27420:kernel=39673:cleared=66194] +[PINNED_HOME_CPU_UNAVAILABLE:count=0:publish_discarded=0:hold_pen_migrated=0:delivered=0:migration_refused=0:stack_home_conflict=0] +[heartbeat] tid=1241 uptime_ms=36040 kbd_nonzero=0 +[heartbeat] tid=1241 uptime_ms=37043 kbd_nonzero=0 +[heartbeat] tid=1241 uptime_ms=38045 kbd_nonzero=0 +[heartbeat] tid=1241 uptime_ms=39048 kbd_nonzero=0 +[RESUME_PC_CENSUS:cpu=0:source=el1-restore-frame-elr:text=5693:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=0:source=el0-restore-frame-elr:text=0:kstack=0:uva=319:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=0:source=ctx-x30:text=17539:kstack=0:uva=130:smallint=190:other=0] +[RESUME_PC_CENSUS:cpu=0:source=ctx-elr-el1:text=17540:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=0:source=lr-save-el1:text=5772:kstack=0:uva=0:smallint=2:other=0] +[RESUME_PC_CENSUS:cpu=0:source=lr-restore-el1:text=5693:kstack=0:uva=0:smallint=1:other=0] +[RESUME_PC_CENSUS:cpu=0:source=lr-save-el0:text=0:kstack=0:uva=139:smallint=189:other=0] +[RESUME_PC_CENSUS:cpu=0:source=lr-restore-el0:text=0:kstack=0:uva=130:smallint=189:other=0] +[RESUME_PC_CENSUS:cpu=1:source=el1-restore-frame-elr:text=6013:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=1:source=el0-restore-frame-elr:text=0:kstack=0:uva=321:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=1:source=el0-first-entry-frame-elr:text=0:kstack=0:uva=5:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=1:source=ctx-x30:text=7949:kstack=0:uva=125:smallint=196:other=0] +[RESUME_PC_CENSUS:cpu=1:source=ctx-elr-el1:text=7949:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=1:source=lr-save-el1:text=5899:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=1:source=lr-restore-el1:text=6013:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=1:source=lr-save-el0:text=0:kstack=0:uva=117:smallint=195:other=0] +[RESUME_PC_CENSUS:cpu=1:source=lr-restore-el0:text=0:kstack=0:uva=125:smallint=196:other=0] +[RESUME_PC_CENSUS:cpu=2:source=el1-restore-frame-elr:text=6410:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=2:source=el0-restore-frame-elr:text=0:kstack=0:uva=290:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=2:source=el0-first-entry-frame-elr:text=0:kstack=0:uva=2:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=2:source=ctx-x30:text=8728:kstack=0:uva=46:smallint=245:other=0] +[RESUME_PC_CENSUS:cpu=2:source=ctx-elr-el1:text=8729:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=2:source=lr-save-el1:text=6368:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=2:source=lr-restore-el1:text=6409:kstack=0:uva=0:smallint=1:other=0] +[RESUME_PC_CENSUS:cpu=2:source=lr-save-el0:text=0:kstack=0:uva=42:smallint=244:other=0] +[RESUME_PC_CENSUS:cpu=2:source=lr-restore-el0:text=0:kstack=0:uva=46:smallint=244:other=0] +[RESUME_PC_CENSUS:cpu=3:source=el1-restore-frame-elr:text=6800:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=3:source=el0-restore-frame-elr:text=0:kstack=0:uva=377:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=3:source=el0-first-entry-frame-elr:text=0:kstack=0:uva=5:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=3:source=ctx-x30:text=9380:kstack=0:uva=82:smallint=295:other=0] +[RESUME_PC_CENSUS:cpu=3:source=ctx-elr-el1:text=9380:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=3:source=lr-save-el1:text=6878:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=3:source=lr-restore-el1:text=6800:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=3:source=lr-save-el0:text=0:kstack=0:uva=78:smallint=294:other=0] +[RESUME_PC_CENSUS:cpu=3:source=lr-restore-el0:text=0:kstack=0:uva=82:smallint=295:other=0] +[heartbeat] tid=1241 uptime_ms=40050 kbd_nonzero=0 +[PT_ROOT_CUSTODY:no_proof=14:no_arch=0:terminated=1:undecided=1:mid_retire=1:retired=82] +[TOMBSTONE_CENSUS:resident=0:removed=16:reap_second=15:retire_second=1:abandoned_unqueued=0] +[TTBR0_ASID_CENSUS:untagged=0:tagged=27433:kernel=40775:cleared=67308] +[net-rx-counters] sample=3 begin +[net-rx-counters] sample=3 NET_RX_MSI_TOTAL: 0 +[net-rx-counters] sample=3 NET_RX_RING_DRAIN_TOTAL: 0 +[net-rx-counters] sample=3 NET_RX_FRAME_TOTAL: 3 (cpu0=3) +[net-rx-counters] sample=3 NET_RX_ARP_TOTAL: 2 (cpu0=2) +[net-rx-counters] sample=3 NET_RX_ETHERTYPE_OTHER_TOTAL: 0 +[net-rx-counters] sample=3 NET_RX_SOFTIRQ_ENTRY_TOTAL: 37 (cpu0=1, cpu1=12, cpu2=6, cpu3=18) +[net-rx-counters] sample=3 NET_RX_SOFTIRQ_EXIT_TOTAL: 37 (cpu0=1, cpu1=12, cpu2=6, cpu3=18) +[net-rx-counters] sample=3 NET_RX_REENTRANT_SKIP_TOTAL: 1 (cpu3=1) +[net-rx-counters] sample=3 NET_RX_GUARD_RELEASE_TOTAL: 36 (cpu0=1, cpu1=12, cpu2=6, cpu3=17) +[net-rx-counters] sample=3 NET_RX_REARM_CHECK_TOTAL: 0 +[net-rx-counters] sample=3 NET_RX_REARM_RACE_TOTAL: 0 +[net-rx-counters] sample=3 NET_RX_REARM_ARMED_TOTAL: 0 +[net-rx-counters] sample=3 NET_PCI_IRQ_RAISED_NETRX: 0 +[net-rx-counters] sample=3 GIC_SPI55_ACK_TOTAL: 0 +[net-rx-counters] sample=3 end +[SCHED_STRAND_ORACLE:aarch64:samples=804:checked=2177:stranded=0:running_shape=0:ready_shape=0:resolved_production=0:resolved_exercised=2:worst_dwell_ms=0:overflow=0:worst_nonprogress_ms=0:nonprogress=1:queued_on_nondispatching_cpu=1:worst_queued_nondispatch_ms=6339:worst_cpu_scheduler_silence_ms=6445:worst_silence_cpu=0] +[TOMBSTONE_CENSUS:resident=0:removed=16:reap_second=15:retire_second=1:abandoned_unqueued=0] +[TTBR0_ASID_CENSUS:untagged=0:tagged=27438:kernel=40964:cleared=67502] +[PINNED_HOME_CPU_UNAVAILABLE:count=0:publish_discarded=0:hold_pen_migrated=0:delivered=0:migration_refused=0:stack_home_conflict=0] +[heartbeat] tid=1241 uptime_ms=41074 kbd_nonzero=0 +[heartbeat] tid=1241 uptime_ms=42075 kbd_nonzero=0 +[heartbeat] tid=1241 uptime_ms=43078 kbd_nonzero=0 +[heartbeat] tid=1241 uptime_ms=44079 kbd_nonzero=0 +[heartbeat] tid=1241 uptime_ms=45087 kbd_nonzero=0 +[SCHED_STRAND_ORACLE:aarch64:samples=903:checked=2375:stranded=0:running_shape=0:ready_shape=0:resolved_production=0:resolved_exercised=2:worst_dwell_ms=0:overflow=0:worst_nonprogress_ms=0:nonprogress=1:queued_on_nondispatching_cpu=1:worst_queued_nondispatch_ms=6339:worst_cpu_scheduler_silence_ms=6445:worst_silence_cpu=0] +[TOMBSTONE_CENSUS:resident=0:removed=16:reap_second=15:retire_second=1:abandoned_unqueued=0] +[TTBR0_ASID_CENSUS:untagged=0:tagged=27456:kernel=42263:cleared=68819] +[PINNED_HOME_CPU_UNAVAILABLE:count=0:publish_discarded=0:hold_pen_migrated=0:delivered=0:migration_refused=0:stack_home_conflict=0] +[heartbeat] tid=1241 uptime_ms=46090 kbd_nonzero=0 +[heartbeat] tid=1241 uptime_ms=47092 kbd_nonzero=0 +[heartbeat] tid=1241 uptime_ms=48093 kbd_nonzero=0 +[heartbeat] tid=1241 uptime_ms=49094 kbd_nonzero=0 +[RESUME_PC_CENSUS:cpu=0:source=el1-restore-frame-elr:text=6314:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=0:source=el0-restore-frame-elr:text=0:kstack=0:uva=323:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=0:source=ctx-x30:text=18159:kstack=0:uva=134:smallint=190:other=0] +[RESUME_PC_CENSUS:cpu=0:source=ctx-elr-el1:text=18160:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=0:source=lr-save-el1:text=6393:kstack=0:uva=0:smallint=2:other=0] +[RESUME_PC_CENSUS:cpu=0:source=lr-restore-el1:text=6313:kstack=0:uva=0:smallint=1:other=0] +[RESUME_PC_CENSUS:cpu=0:source=lr-save-el0:text=0:kstack=0:uva=143:smallint=189:other=0] +[RESUME_PC_CENSUS:cpu=0:source=lr-restore-el0:text=0:kstack=0:uva=134:smallint=189:other=0] +[RESUME_PC_CENSUS:cpu=1:source=el1-restore-frame-elr:text=6705:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=1:source=el0-restore-frame-elr:text=0:kstack=0:uva=324:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=1:source=el0-first-entry-frame-elr:text=0:kstack=0:uva=5:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=1:source=ctx-x30:text=8641:kstack=0:uva=128:smallint=196:other=0] +[RESUME_PC_CENSUS:cpu=1:source=ctx-elr-el1:text=8641:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=1:source=lr-save-el1:text=6592:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=1:source=lr-restore-el1:text=6705:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=1:source=lr-save-el0:text=0:kstack=0:uva=119:smallint=195:other=0] +[RESUME_PC_CENSUS:cpu=1:source=lr-restore-el0:text=0:kstack=0:uva=128:smallint=196:other=0] +[RESUME_PC_CENSUS:cpu=2:source=el1-restore-frame-elr:text=7084:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=2:source=el0-restore-frame-elr:text=0:kstack=0:uva=294:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=2:source=el0-first-entry-frame-elr:text=0:kstack=0:uva=2:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=2:source=ctx-x30:text=9402:kstack=0:uva=50:smallint=245:other=0] +[RESUME_PC_CENSUS:cpu=2:source=ctx-elr-el1:text=9403:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=2:source=lr-save-el1:text=7042:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=2:source=lr-restore-el1:text=7083:kstack=0:uva=0:smallint=1:other=0] +[RESUME_PC_CENSUS:cpu=2:source=lr-save-el0:text=0:kstack=0:uva=46:smallint=244:other=0] +[RESUME_PC_CENSUS:cpu=2:source=lr-restore-el0:text=0:kstack=0:uva=50:smallint=244:other=0] +[RESUME_PC_CENSUS:cpu=3:source=el1-restore-frame-elr:text=7451:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=3:source=el0-restore-frame-elr:text=0:kstack=0:uva=377:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=3:source=el0-first-entry-frame-elr:text=0:kstack=0:uva=5:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=3:source=ctx-x30:text=10031:kstack=0:uva=82:smallint=295:other=0] +[RESUME_PC_CENSUS:cpu=3:source=ctx-elr-el1:text=10031:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=3:source=lr-save-el1:text=7527:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=3:source=lr-restore-el1:text=7451:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=3:source=lr-save-el0:text=0:kstack=0:uva=79:smallint=294:other=0] +[RESUME_PC_CENSUS:cpu=3:source=lr-restore-el0:text=0:kstack=0:uva=82:smallint=295:other=0] +[heartbeat] tid=1241 uptime_ms=50101 kbd_nonzero=0 +[PT_ROOT_CUSTODY:no_proof=14:no_arch=0:terminated=1:undecided=1:mid_retire=1:retired=82] +[TOMBSTONE_CENSUS:resident=0:removed=16:reap_second=15:retire_second=1:abandoned_unqueued=0] +[TTBR0_ASID_CENSUS:untagged=0:tagged=27470:kernel=43402:cleared=69971] +[net-rx-counters] sample=4 begin +[net-rx-counters] sample=4 NET_RX_MSI_TOTAL: 0 +[net-rx-counters] sample=4 NET_RX_RING_DRAIN_TOTAL: 0 +[net-rx-counters] sample=4 NET_RX_FRAME_TOTAL: 3 (cpu0=3) +[net-rx-counters] sample=4 NET_RX_ARP_TOTAL: 2 (cpu0=2) +[net-rx-counters] sample=4 NET_RX_ETHERTYPE_OTHER_TOTAL: 0 +[net-rx-counters] sample=4 NET_RX_SOFTIRQ_ENTRY_TOTAL: 37 (cpu0=1, cpu1=12, cpu2=6, cpu3=18) +[net-rx-counters] sample=4 NET_RX_SOFTIRQ_EXIT_TOTAL: 37 (cpu0=1, cpu1=12, cpu2=6, cpu3=18) +[net-rx-counters] sample=4 NET_RX_REENTRANT_SKIP_TOTAL: 1 (cpu3=1) +[net-rx-counters] sample=4 NET_RX_GUARD_RELEASE_TOTAL: 36 (cpu0=1, cpu1=12, cpu2=6, cpu3=17) +[net-rx-counters] sample=4 NET_RX_REARM_CHECK_TOTAL: 0 +[net-rx-counters] sample=4 NET_RX_REARM_RACE_TOTAL: 0 +[net-rx-counters] sample=4 NET_RX_REARM_ARMED_TOTAL: 0 +[net-rx-counters] sample=4 NET_PCI_IRQ_RAISED_NETRX: 0 +[net-rx-counters] sample=4 GIC_SPI55_ACK_TOTAL: 0 +[net-rx-counters] sample=4 end +[SCHED_STRAND_ORACLE:aarch64:samples=1002:checked=2573:stranded=0:running_shape=0:ready_shape=0:resolved_production=0:resolved_exercised=2:worst_dwell_ms=0:overflow=0:worst_nonprogress_ms=0:nonprogress=1:queued_on_nondispatching_cpu=1:worst_queued_nondispatch_ms=6339:worst_cpu_scheduler_silence_ms=6445:worst_silence_cpu=0] +[TOMBSTONE_CENSUS:resident=0:removed=16:reap_second=15:retire_second=1:abandoned_unqueued=0] +[TTBR0_ASID_CENSUS:untagged=0:tagged=27478:kernel=43654:cleared=70230] +[PINNED_HOME_CPU_UNAVAILABLE:count=0:publish_discarded=0:hold_pen_migrated=0:delivered=0:migration_refused=0:stack_home_conflict=0] +[heartbeat] tid=1241 uptime_ms=51122 kbd_nonzero=0 +[heartbeat] tid=1241 uptime_ms=52125 kbd_nonzero=0 +[heartbeat] tid=1241 uptime_ms=53127 kbd_nonzero=0 +[heartbeat] tid=1241 uptime_ms=54128 kbd_nonzero=0 +[heartbeat] tid=1241 uptime_ms=55131 kbd_nonzero=0 +[SCHED_STRAND_ORACLE:aarch64:samples=1101:checked=2771:stranded=0:running_shape=0:ready_shape=0:resolved_production=0:resolved_exercised=2:worst_dwell_ms=0:overflow=0:worst_nonprogress_ms=0:nonprogress=1:queued_on_nondispatching_cpu=1:worst_queued_nondispatch_ms=6339:worst_cpu_scheduler_silence_ms=6445:worst_silence_cpu=0] +[TOMBSTONE_CENSUS:resident=0:removed=16:reap_second=15:retire_second=1:abandoned_unqueued=0] +[TTBR0_ASID_CENSUS:untagged=0:tagged=27489:kernel=44966:cleared=71552] +[PINNED_HOME_CPU_UNAVAILABLE:count=0:publish_discarded=0:hold_pen_migrated=0:delivered=0:migration_refused=0:stack_home_conflict=0] +[heartbeat] tid=1241 uptime_ms=56134 kbd_nonzero=0 +[heartbeat] tid=1241 uptime_ms=57136 kbd_nonzero=0 +[heartbeat] tid=1241 uptime_ms=58141 kbd_nonzero=0 +[heartbeat] tid=1241 uptime_ms=59142 kbd_nonzero=0 +[RESUME_PC_CENSUS:cpu=0:source=el1-restore-frame-elr:text=6933:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=0:source=el0-restore-frame-elr:text=0:kstack=0:uva=326:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=0:source=ctx-x30:text=18778:kstack=0:uva=137:smallint=190:other=0] +[RESUME_PC_CENSUS:cpu=0:source=ctx-elr-el1:text=18779:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=0:source=lr-save-el1:text=7013:kstack=0:uva=0:smallint=2:other=0] +[RESUME_PC_CENSUS:cpu=0:source=lr-restore-el1:text=6932:kstack=0:uva=0:smallint=1:other=0] +[RESUME_PC_CENSUS:cpu=0:source=lr-save-el0:text=0:kstack=0:uva=145:smallint=189:other=0] +[RESUME_PC_CENSUS:cpu=0:source=lr-restore-el0:text=0:kstack=0:uva=137:smallint=189:other=0] +[RESUME_PC_CENSUS:cpu=1:source=el1-restore-frame-elr:text=7394:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=1:source=el0-restore-frame-elr:text=0:kstack=0:uva=324:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=1:source=el0-first-entry-frame-elr:text=0:kstack=0:uva=5:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=1:source=ctx-x30:text=9330:kstack=0:uva=128:smallint=196:other=0] +[RESUME_PC_CENSUS:cpu=1:source=ctx-elr-el1:text=9330:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=1:source=lr-save-el1:text=7281:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=1:source=lr-restore-el1:text=7394:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=1:source=lr-save-el0:text=0:kstack=0:uva=119:smallint=195:other=0] +[RESUME_PC_CENSUS:cpu=1:source=lr-restore-el0:text=0:kstack=0:uva=128:smallint=196:other=0] +[RESUME_PC_CENSUS:cpu=2:source=el1-restore-frame-elr:text=7762:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=2:source=el0-restore-frame-elr:text=0:kstack=0:uva=297:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=2:source=el0-first-entry-frame-elr:text=0:kstack=0:uva=2:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=2:source=ctx-x30:text=10080:kstack=0:uva=53:smallint=245:other=0] +[RESUME_PC_CENSUS:cpu=2:source=ctx-elr-el1:text=10081:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=2:source=lr-save-el1:text=7719:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=2:source=lr-restore-el1:text=7761:kstack=0:uva=0:smallint=1:other=0] +[RESUME_PC_CENSUS:cpu=2:source=lr-save-el0:text=0:kstack=0:uva=50:smallint=244:other=0] +[RESUME_PC_CENSUS:cpu=2:source=lr-restore-el0:text=0:kstack=0:uva=53:smallint=244:other=0] +[RESUME_PC_CENSUS:cpu=3:source=el1-restore-frame-elr:text=8068:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=3:source=el0-restore-frame-elr:text=0:kstack=0:uva=379:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=3:source=el0-first-entry-frame-elr:text=0:kstack=0:uva=5:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=3:source=ctx-x30:text=10648:kstack=0:uva=84:smallint=295:other=0] +[RESUME_PC_CENSUS:cpu=3:source=ctx-elr-el1:text=10648:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=3:source=lr-save-el1:text=8144:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=3:source=lr-restore-el1:text=8068:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=3:source=lr-save-el0:text=0:kstack=0:uva=81:smallint=294:other=0] +[RESUME_PC_CENSUS:cpu=3:source=lr-restore-el0:text=0:kstack=0:uva=84:smallint=295:other=0] +[heartbeat] tid=1241 uptime_ms=60145 kbd_nonzero=0 +[PT_ROOT_CUSTODY:no_proof=14:no_arch=0:terminated=1:undecided=1:mid_retire=1:retired=82] +[TOMBSTONE_CENSUS:resident=0:removed=16:reap_second=15:retire_second=1:abandoned_unqueued=0] +[TTBR0_ASID_CENSUS:untagged=0:tagged=27501:kernel=46000:cleared=72597] +[net-rx-counters] sample=5 begin +[net-rx-counters] sample=5 NET_RX_MSI_TOTAL: 0 +[net-rx-counters] sample=5 NET_RX_RING_DRAIN_TOTAL: 0 +[net-rx-counters] sample=5 NET_RX_FRAME_TOTAL: 3 (cpu0=3) +[net-rx-counters] sample=5 NET_RX_ARP_TOTAL: 2 (cpu0=2) +[net-rx-counters] sample=5 NET_RX_ETHERTYPE_OTHER_TOTAL: 0 +[net-rx-counters] sample=5 NET_RX_SOFTIRQ_ENTRY_TOTAL: 37 (cpu0=1, cpu1=12, cpu2=6, cpu3=18) +[net-rx-counters] sample=5 NET_RX_SOFTIRQ_EXIT_TOTAL: 37 (cpu0=1, cpu1=12, cpu2=6, cpu3=18) +[net-rx-counters] sample=5 NET_RX_REENTRANT_SKIP_TOTAL: 1 (cpu3=1) +[net-rx-counters] sample=5 NET_RX_GUARD_RELEASE_TOTAL: 36 (cpu0=1, cpu1=12, cpu2=6, cpu3=17) +[net-rx-counters] sample=5 NET_RX_REARM_CHECK_TOTAL: 0 +[net-rx-counters] sample=5 NET_RX_REARM_RACE_TOTAL: 0 +[net-rx-counters] sample=5 NET_RX_REARM_ARMED_TOTAL: 0 +[net-rx-counters] sample=5 NET_PCI_IRQ_RAISED_NETRX: 0 +[net-rx-counters] sample=5 GIC_SPI55_ACK_TOTAL: 0 +[net-rx-counters] sample=5 end +[SCHED_STRAND_ORACLE:aarch64:samples=1200:checked=2969:stranded=0:running_shape=0:ready_shape=0:resolved_production=0:resolved_exercised=2:worst_dwell_ms=0:overflow=0:worst_nonprogress_ms=0:nonprogress=1:queued_on_nondispatching_cpu=1:worst_queued_nondispatch_ms=6339:worst_cpu_scheduler_silence_ms=6445:worst_silence_cpu=0] +[TOMBSTONE_CENSUS:resident=0:removed=16:reap_second=15:retire_second=1:abandoned_unqueued=0] +[TTBR0_ASID_CENSUS:untagged=0:tagged=27502:kernel=46226:cleared=72824] +[PINNED_HOME_CPU_UNAVAILABLE:count=0:publish_discarded=0:hold_pen_migrated=0:delivered=0:migration_refused=0:stack_home_conflict=0] +[heartbeat] tid=1241 uptime_ms=61153 kbd_nonzero=0 +[heartbeat] tid=1241 uptime_ms=62157 kbd_nonzero=0 +[heartbeat] tid=1241 uptime_ms=63161 kbd_nonzero=0 +[heartbeat] tid=1241 uptime_ms=64162 kbd_nonzero=0 +[heartbeat] tid=1241 uptime_ms=65163 kbd_nonzero=0 +[SCHED_STRAND_ORACLE:aarch64:samples=1299:checked=3167:stranded=0:running_shape=0:ready_shape=0:resolved_production=0:resolved_exercised=2:worst_dwell_ms=0:overflow=0:worst_nonprogress_ms=0:nonprogress=1:queued_on_nondispatching_cpu=1:worst_queued_nondispatch_ms=6339:worst_cpu_scheduler_silence_ms=6445:worst_silence_cpu=0] +[TOMBSTONE_CENSUS:resident=0:removed=16:reap_second=15:retire_second=1:abandoned_unqueued=0] +[TTBR0_ASID_CENSUS:untagged=0:tagged=27512:kernel=47508:cleared=74116] +[PINNED_HOME_CPU_UNAVAILABLE:count=0:publish_discarded=0:hold_pen_migrated=0:delivered=0:migration_refused=0:stack_home_conflict=0] +[heartbeat] tid=1241 uptime_ms=66165 kbd_nonzero=0 +[heartbeat] tid=1241 uptime_ms=67168 kbd_nonzero=0 +[heartbeat] tid=1241 uptime_ms=68170 kbd_nonzero=0 +[heartbeat] tid=1241 uptime_ms=69171 kbd_nonzero=0 +[heartbeat] tid=1241 uptime_ms=70174 kbd_nonzero=0 +[PT_ROOT_CUSTODY:no_proof=14:no_arch=0:terminated=1:undecided=1:mid_retire=1:retired=82] +[TOMBSTONE_CENSUS:resident=0:removed=16:reap_second=15:retire_second=1:abandoned_unqueued=0] +[TTBR0_ASID_CENSUS:untagged=0:tagged=27524:kernel=48547:cleared=75166] +[net-rx-counters] sample=6 begin +[net-rx-counters] sample=6 NET_RX_MSI_TOTAL: 0 +[net-rx-counters] sample=6 NET_RX_RING_DRAIN_TOTAL: 0 +[net-rx-counters] sample=6 NET_RX_FRAME_TOTAL: 3 (cpu0=3) +[net-rx-counters] sample=6 NET_RX_ARP_TOTAL: 2 (cpu0=2) +[net-rx-counters] sample=6 NET_RX_ETHERTYPE_OTHER_TOTAL: 0 +[net-rx-counters] sample=6 NET_RX_SOFTIRQ_ENTRY_TOTAL: 37 (cpu0=1, cpu1=12, cpu2=6, cpu3=18) +[net-rx-counters] sample=6 NET_RX_SOFTIRQ_EXIT_TOTAL: 37 (cpu0=1, cpu1=12, cpu2=6, cpu3=18) +[net-rx-counters] sample=6 NET_RX_REENTRANT_SKIP_TOTAL: 1 (cpu3=1) +[net-rx-counters] sample=6 NET_RX_GUARD_RELEASE_TOTAL: 36 (cpu0=1, cpu1=12, cpu2=6, cpu3=17) +[net-rx-counters] sample=6 NET_RX_REARM_CHECK_TOTAL: 0 +[net-rx-counters] sample=6 NET_RX_REARM_RACE_TOTAL: 0 +[net-rx-counters] sample=6 NET_RX_REARM_ARMED_TOTAL: 0 +[net-rx-counters] sample=6 NET_PCI_IRQ_RAISED_NETRX: 0 +[net-rx-counters] sample=6 GIC_SPI55_ACK_TOTAL: 0 +[net-rx-counters] sample=6 end +[SCHED_STRAND_ORACLE:aarch64:samples=1398:checked=3365:stranded=0:running_shape=0:ready_shape=0:resolved_production=0:resolved_exercised=2:worst_dwell_ms=0:overflow=0:worst_nonprogress_ms=0:nonprogress=1:queued_on_nondispatching_cpu=1:worst_queued_nondispatch_ms=6339:worst_cpu_scheduler_silence_ms=6445:worst_silence_cpu=0] +[TOMBSTONE_CENSUS:resident=0:removed=16:reap_second=15:retire_second=1:abandoned_unqueued=0] +[TTBR0_ASID_CENSUS:untagged=0:tagged=27524:kernel=48774:cleared=75393] +[PINNED_HOME_CPU_UNAVAILABLE:count=0:publish_discarded=0:hold_pen_migrated=0:delivered=0:migration_refused=0:stack_home_conflict=0] +[heartbeat] tid=1241 uptime_ms=71180 kbd_nonzero=0 +[heartbeat] tid=1241 uptime_ms=72183 kbd_nonzero=0 +[heartbeat] tid=1241 uptime_ms=73185 kbd_nonzero=0 +[heartbeat] tid=1241 uptime_ms=74187 kbd_nonzero=0 +[heartbeat] tid=1241 uptime_ms=75189 kbd_nonzero=0 +[SCHED_STRAND_ORACLE:aarch64:samples=1497:checked=3563:stranded=0:running_shape=0:ready_shape=0:resolved_production=0:resolved_exercised=2:worst_dwell_ms=0:overflow=0:worst_nonprogress_ms=0:nonprogress=1:queued_on_nondispatching_cpu=1:worst_queued_nondispatch_ms=6339:worst_cpu_scheduler_silence_ms=6445:worst_silence_cpu=0] +[TOMBSTONE_CENSUS:resident=0:removed=16:reap_second=15:retire_second=1:abandoned_unqueued=0] +[TTBR0_ASID_CENSUS:untagged=0:tagged=27534:kernel=50080:cleared=76709] +[PINNED_HOME_CPU_UNAVAILABLE:count=0:publish_discarded=0:hold_pen_migrated=0:delivered=0:migration_refused=0:stack_home_conflict=0] +[heartbeat] tid=1241 uptime_ms=76190 kbd_nonzero=0 +[heartbeat] tid=1241 uptime_ms=77193 kbd_nonzero=0 +[heartbeat] tid=1241 uptime_ms=78194 kbd_nonzero=0 +[heartbeat] tid=1241 uptime_ms=79197 kbd_nonzero=0 +[heartbeat] tid=1241 uptime_ms=80199 kbd_nonzero=0 +[PT_ROOT_CUSTODY:no_proof=14:no_arch=0:terminated=1:undecided=1:mid_retire=1:retired=82] +[TOMBSTONE_CENSUS:resident=0:removed=16:reap_second=15:retire_second=1:abandoned_unqueued=0] +[TTBR0_ASID_CENSUS:untagged=0:tagged=27544:kernel=51162:cleared=77801] +[net-rx-counters] sample=7 begin +[net-rx-counters] sample=7 NET_RX_MSI_TOTAL: 0 +[net-rx-counters] sample=7 NET_RX_RING_DRAIN_TOTAL: 0 +[net-rx-counters] sample=7 NET_RX_FRAME_TOTAL: 3 (cpu0=3) +[net-rx-counters] sample=7 NET_RX_ARP_TOTAL: 2 (cpu0=2) +[net-rx-counters] sample=7 NET_RX_ETHERTYPE_OTHER_TOTAL: 0 +[net-rx-counters] sample=7 NET_RX_SOFTIRQ_ENTRY_TOTAL: 37 (cpu0=1, cpu1=12, cpu2=6, cpu3=18) +[net-rx-counters] sample=7 NET_RX_SOFTIRQ_EXIT_TOTAL: 37 (cpu0=1, cpu1=12, cpu2=6, cpu3=18) +[net-rx-counters] sample=7 NET_RX_REENTRANT_SKIP_TOTAL: 1 (cpu3=1) +[net-rx-counters] sample=7 NET_RX_GUARD_RELEASE_TOTAL: 36 (cpu0=1, cpu1=12, cpu2=6, cpu3=17) +[net-rx-counters] sample=7 NET_RX_REARM_CHECK_TOTAL: 0 +[net-rx-counters] sample=7 NET_RX_REARM_RACE_TOTAL: 0 +[net-rx-counters] sample=7 NET_RX_REARM_ARMED_TOTAL: 0 +[net-rx-counters] sample=7 NET_PCI_IRQ_RAISED_NETRX: 0 +[net-rx-counters] sample=7 GIC_SPI55_ACK_TOTAL: 0 +[net-rx-counters] sample=7 end +[SCHED_STRAND_ORACLE:aarch64:samples=1596:checked=3761:stranded=0:running_shape=0:ready_shape=0:resolved_production=0:resolved_exercised=2:worst_dwell_ms=0:overflow=0:worst_nonprogress_ms=0:nonprogress=1:queued_on_nondispatching_cpu=1:worst_queued_nondispatch_ms=6339:worst_cpu_scheduler_silence_ms=6445:worst_silence_cpu=0] +[TOMBSTONE_CENSUS:resident=0:removed=16:reap_second=15:retire_second=1:abandoned_unqueued=0] +[TTBR0_ASID_CENSUS:untagged=0:tagged=27544:kernel=51380:cleared=78019] +[PINNED_HOME_CPU_UNAVAILABLE:count=0:publish_discarded=0:hold_pen_migrated=0:delivered=0:migration_refused=0:stack_home_conflict=0] +[heartbeat] tid=1241 uptime_ms=81212 kbd_nonzero=0 +[heartbeat] tid=1241 uptime_ms=82215 kbd_nonzero=0 +[heartbeat] tid=1241 uptime_ms=83218 kbd_nonzero=0 +[heartbeat] tid=1241 uptime_ms=84222 kbd_nonzero=0 +[heartbeat] tid=1241 uptime_ms=85227 kbd_nonzero=0 +[SCHED_STRAND_ORACLE:aarch64:samples=1695:checked=3960:stranded=0:running_shape=0:ready_shape=0:resolved_production=0:resolved_exercised=2:worst_dwell_ms=0:overflow=0:worst_nonprogress_ms=0:nonprogress=1:queued_on_nondispatching_cpu=1:worst_queued_nondispatch_ms=6339:worst_cpu_scheduler_silence_ms=6445:worst_silence_cpu=0] +[TOMBSTONE_CENSUS:resident=0:removed=16:reap_second=15:retire_second=1:abandoned_unqueued=0] +[TTBR0_ASID_CENSUS:untagged=0:tagged=27559:kernel=52666:cleared=79319] +[PINNED_HOME_CPU_UNAVAILABLE:count=0:publish_discarded=0:hold_pen_migrated=0:delivered=0:migration_refused=0:stack_home_conflict=0] +[heartbeat] tid=1241 uptime_ms=86229 kbd_nonzero=0 +[heartbeat] tid=1241 uptime_ms=87230 kbd_nonzero=0 +[heartbeat] tid=1241 uptime_ms=88232 kbd_nonzero=0 +[heartbeat] tid=1241 uptime_ms=89234 kbd_nonzero=0 diff --git a/docs/planning/green-program/block/serials/508/landing/aarch64-serial.txt.gz b/docs/planning/green-program/block/serials/508/landing/aarch64-serial.txt.gz new file mode 100644 index 000000000..d3359963f Binary files /dev/null and b/docs/planning/green-program/block/serials/508/landing/aarch64-serial.txt.gz differ diff --git a/docs/planning/green-program/block/serials/508/landing/aarch64-strict.log b/docs/planning/green-program/block/serials/508/landing/aarch64-strict.log new file mode 100644 index 000000000..1bcdcba67 --- /dev/null +++ b/docs/planning/green-program/block/serials/508/landing/aarch64-strict.log @@ -0,0 +1,127 @@ +REVISION=6cff8cf8c43adeeccd8d6088a5c42af70091233e +[GATE_SUITE:stem=aarch64_testing_profile_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=block_request_lifetime_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=blocking_fd_eagain_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=boot_disk_wait_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=bssh_auth_close_structure:attempt=1:timeout_s=300:wall_s=2:exit=0] +[GATE_SUITE:stem=capture_bxcap_schema_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=capture_path_lock_free_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=console_read_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=context_restore_structure:attempt=1:timeout_s=300:wall_s=58:exit=0] +[GATE_SUITE:stem=coreproof_component_h_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=coreproof_coverage_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=coreproof_mutation_register_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=coreproof_sites_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=critical_path_logging_census_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=ctx_diag_ring_sample_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=degenerate_transfer_fd_validation_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=dispatch_fact_census_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=dispatch_path_lock_free_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=dispatch_strand_census_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=dma_and_log_sink_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=entry_point_df_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=exec_lock_order_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=exit_tally_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=ext2_disk_size_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=ext2_lock_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=fcntl_pm_contention_gate_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=fork_lock_order_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=gate_boot_facts_pipefail_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=gate_boot_facts_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=gate_capture_drain_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=gate_qmp_backstop_structure:attempt=1:timeout_s=300:wall_s=6:exit=0] +[GATE_SUITE:stem=gate_structure_preflight_wiring_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=green_program_envelope_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=launcher_smoke_xhci_evidence_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=lockup_capture_guard_structure:attempt=1:timeout_s=300:wall_s=2:exit=0] +[GATE_SUITE:stem=loopback_pump_structure:attempt=1:timeout_s=300:wall_s=4:exit=0] +[GATE_SUITE:stem=masked_binary_load_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=mmap_floor_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=net_lock_structure:attempt=1:timeout_s=300:wall_s=2:exit=0] +[GATE_SUITE:stem=parallels_capture_structure:attempt=1:timeout_s=300:wall_s=2:exit=0] +[GATE_SUITE:stem=parallels_kill_by_name_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=pipe_fifo_blocking_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=poll_tcp_gate_wiring_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=preempt_bracket_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=qemu_host_lock_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=qemu_kill_by_name_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=ring_span_report_site_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=ring_span_unfiltered_report_site_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=run_inspector_import_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=serial_line_atomicity_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=signal_eintr_predicate_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=softirq_deferral_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=strand_handoff_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=structure_preflight_parallel_structure:attempt=1:timeout_s=300:wall_s=6:exit=0] +[GATE_SUITE:stem=syscall_return_register_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=teardown_rustfmt_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=teardown_structure:attempt=1:timeout_s=300:wall_s=19:exit=0] +[GATE_SUITE:stem=terminal_edge_capture_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=timer_wake_dispatch_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=trace_ring_depth_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=tracing_provider_gate_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=ttbr0_shadow_reconciliation_structure:attempt=1:timeout_s=300:wall_s=18:exit=0] +[GATE_SUITE:stem=tty_irq_fg_structure:attempt=1:timeout_s=300:wall_s=2:exit=0] +[GATE_SUITE:stem=tty_irq_pm_structure:attempt=1:timeout_s=300:wall_s=2:exit=0] +[GATE_SUITE:stem=tty_oracle_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=udp_ports_lock_irq_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=udp_socket_lock_irq_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=unix_stream_blocking_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=x86_boot_tests_profile_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=x86_smp_enum_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=xhci_wait_irq_order_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_PREFLIGHT:structure_suites=71/71:critical_path_lines=244:pinned=105] +Guard: kernel FP/SIMD instruction check + ELF: /private/tmp/claude-501/-Users-wrb-fun-code-breenix/d69ffb9d-4539-4cf3-8a3d-a872ff7c830b/scratchpad/b508/wt/target/aarch64-breenix-kernel/release/kernel-aarch64 + objdump: /Users/wrb/.rustup/toolchains/nightly-2025-06-24-aarch64-apple-darwin/lib/rustlib/aarch64-apple-darwin/bin/llvm-objdump + allowlist: /private/tmp/claude-501/-Users-wrb-fun-code-breenix/d69ffb9d-4539-4cf3-8a3d-a872ff7c830b/scratchpad/b508/wt/scripts/kernel-neon-allowlist.txt +PASS: 0 FP/SIMD load/store instructions in kernel .text (allowlisted & suppressed: 0). +Guard: aarch64 soft-lockup report allocation check (failure-capture PR-7) + ELF: /private/tmp/claude-501/-Users-wrb-fun-code-breenix/d69ffb9d-4539-4cf3-8a3d-a872ff7c830b/scratchpad/b508/wt/target/aarch64-breenix-kernel/release/kernel-aarch64 + sha256: f66a1369eafc1ad85d937a52ece8ade75c450b5e913542ec1a2c9b448f6044cb + objdump: /Users/wrb/.rustup/toolchains/nightly-2025-06-24-aarch64-apple-darwin/lib/rustlib/aarch64-apple-darwin/bin/llvm-objdump + root: dump_lockup_state (its own symbols and every reachable callee) + roots: 1 + _ZN6kernel9arch_impl7aarch6415timer_interrupt17dump_lockup_state17h61ecf85f7d566472E + reachable funcs: 18 + call edges: 32 +PASS: 0 allocation sinks reachable from 1 root symbol(s). +PASS: no allocation is reachable from dump_lockup_state in this ELF. +========================================= +ARM64 Strict Boot Test +========================================= +Kernel: /private/tmp/claude-501/-Users-wrb-fun-code-breenix/d69ffb9d-4539-4cf3-8a3d-a872ff7c830b/scratchpad/b508/wt/target/aarch64-breenix-kernel/release/kernel-aarch64 +ext2 disk: /private/tmp/claude-501/-Users-wrb-fun-code-breenix/d69ffb9d-4539-4cf3-8a3d-a872ff7c830b/scratchpad/b508/wt/target/ext2-aarch64.img +Iterations: 1 +Requirement: 100% success rate (all 1 must pass) + +Running tests... + +QEMU HOST LOCK: host qemu-system-aarch64 count before acquire: 0 +qemu-system-aarch64: terminating on signal 15 + [FAIL] Boot 1: T2T3T4T5[SOFTIRQ_DEFERRAL_ORACLE:arch=aarch64:cpu=1:budget_ticks=250:wait_ticks=2:wait_ns=2308000:dispatches=5:iterations=25:verdict=ok] +BSSH publickey oracle missing, duplicated, or failed (1398 lines); serial: /private/tmp/claude-501/-Users-wrb-fun-code-breenix/d69ffb9d-4539-4cf3-8a3d-a872ff7c830b/scratchpad/b508/wt/.gate-tmp/breenix_aarch64_strict_failures/20260908T143833Z-boot1.txt + [GATE_BOOT_FACTS:boot=1:host_ms=1788878211571-1788878313147:qemu_at_start=0:load_at_start=9.23:qemu_at_end=0:load_at_end=4.73:qemu_cpu_s=NA:guest_uptime_ms=89234:ended_by=hard_timeout] + [CAPTURE_DRAIN:capture=absent:seq=-:edge=-:cpu=-:records=-:drain_ms=300] + [CAPTURE_DRAIN_EVENTS:last_events=none] + [QMP_DUMP:capture=partial:reason=qmp_socket_missing:core=-:decoded_events=-:dump_ms=14] + +========================================= +RESULTS +========================================= +Total iterations: 1 +Successes: 0 +Failures: 1 +Inconclusive (host starvation): 0 +Success rate: 0% +Duration: 103s + +Failed iterations: 1 + +========================================= +FAIL: Only 0/1 boots succeeded +========================================= + +This indicates a regression or timing bug that needs investigation. +Serial output from failed boots can be found in /private/tmp/claude-501/-Users-wrb-fun-code-breenix/d69ffb9d-4539-4cf3-8a3d-a872ff7c830b/scratchpad/b508/wt/.gate-tmp/breenix_aarch64_strict_N/ +EXIT=1 diff --git a/docs/planning/green-program/block/serials/508/landing/source-citations.txt b/docs/planning/green-program/block/serials/508/landing/source-citations.txt new file mode 100644 index 000000000..277ba25f4 --- /dev/null +++ b/docs/planning/green-program/block/serials/508/landing/source-citations.txt @@ -0,0 +1,43 @@ +REVISION=74a57ab9a5c507be6ce8c6c20c662884d80590df +kernel/src/task/completion.rs:147: fn wait_idle_completion(completion: &Completion, expected_token: u32, timeout_ns: u64) -> bool { +kernel/src/task/completion.rs:198: pub fn waiter_tid(&self) -> u64 { +kernel/src/task/completion.rs:214: pub fn wait_timeout(&self, expected_token: u32, timeout_ns: u64) -> Result { +kernel/src/task/completion.rs:222: pub fn wait_timeout_uninterruptible( +kernel/src/task/completion.rs:230: fn wait_timeout_inner( +kernel/src/task/completion.rs:390: Cpu::halt_with_interrupts(); +kernel/src/per_cpu.rs:38: // unpaired enable wrapped preempt_count to 0xFFFFFFFF and can_schedule()'s +kernel/src/per_cpu.rs:39: // `preempt_count == 0` arms - ordinary timer preemption and yield-driven +kernel/src/per_cpu.rs:72: pub preempt_count: u32, +kernel/src/per_cpu.rs:169: // Linux-style preempt_count bit layout constants +kernel/src/per_cpu.rs:233: offset_of!(PerCpuData, preempt_count) == PERCPU_PREEMPT_COUNT_OFFSET, +kernel/src/per_cpu.rs:292: "preempt_count must be 4-byte aligned" +kernel/src/per_cpu.rs:328: preempt_count: 0, +kernel/src/per_cpu.rs:406: // Verify preempt_count read/write cycle +kernel/src/per_cpu.rs:407: let initial_preempt = hal_percpu::X86PerCpu::preempt_count(); +kernel/src/per_cpu.rs:409: let after_disable = hal_percpu::X86PerCpu::preempt_count(); +kernel/src/per_cpu.rs:418: let after_enable = hal_percpu::X86PerCpu::preempt_count(); +kernel/src/per_cpu.rs:430: "Per-CPU data marked as initialized - preempt_count functions now use per-CPU storage" +kernel/src/per_cpu.rs:689: let count_before = hal_percpu::X86PerCpu::preempt_count(); +kernel/src/per_cpu.rs:692: "irq_exit called but HARDIRQ count is already 0 (preempt_count={:#x})", +kernel/src/per_cpu.rs:716: // Use HAL to read current preempt_count +kernel/src/per_cpu.rs:718: let new_count = hal_percpu::X86PerCpu::preempt_count(); +kernel/src/per_cpu.rs:753: let count_before = hal_percpu::X86PerCpu::preempt_count(); +kernel/src/per_cpu.rs:756: "nmi_exit called but NMI count is already 0 (preempt_count={:#x})", +kernel/src/per_cpu.rs:799: let count_before = hal_percpu::X86PerCpu::preempt_count(); +kernel/src/per_cpu.rs:802: "bh_enable called but bottom halves are not disabled (preempt_count={:#x})", +kernel/src/per_cpu.rs:820: let count_before = hal_percpu::X86PerCpu::preempt_count(); +kernel/src/per_cpu.rs:823: "softirq_exit called but SOFTIRQ count is already 0 (preempt_count={:#x})", +kernel/src/per_cpu.rs:958: // do not need to be: preempt_count is per-CPU, the PREEMPT field is moved +kernel/src/per_cpu.rs:963: if hal_percpu::X86PerCpu::preempt_count() & PREEMPT_MASK == 0 { +kernel/src/per_cpu.rs:990: pub fn preempt_count() -> u32 { +kernel/src/per_cpu.rs:993: "preempt_count called before per-CPU initialization" +kernel/src/per_cpu.rs:998: hal_percpu::X86PerCpu::preempt_count() +kernel/src/per_cpu.rs:1001: /// Clear PREEMPT_ACTIVE bit (bit 28) from preempt_count +kernel/src/per_cpu.rs:1365: /// Check if we can schedule (preempt_count == 0 and returning to userspace) +kernel/src/per_cpu.rs:1366: pub fn can_schedule(saved_cs: u64) -> bool { +kernel/src/per_cpu.rs:1367: let current_preempt = preempt_count(); +kernel/src/interrupts/context_switch.rs:367: switch_to_thread( +kernel/src/interrupts/context_switch.rs:375: // Observe the resolved dispatch, after TLS/first-entry rollback can +kernel/src/interrupts/context_switch.rs:655: fn switch_to_thread( +kernel/src/boot/disk_wait_oracle.rs:34: "[BOOT_DISK_WAIT_ORACLE:x86:switched_away={}:tests_completed={}:{}]", +kernel/src/main.rs:2084: serial_println!("[TEST_EXEC_BLOCK_COMPLETE:x86:calls=64]"); diff --git a/docs/planning/green-program/block/serials/508/landing/structure-fixture.log b/docs/planning/green-program/block/serials/508/landing/structure-fixture.log new file mode 100644 index 000000000..eeec864b6 --- /dev/null +++ b/docs/planning/green-program/block/serials/508/landing/structure-fixture.log @@ -0,0 +1,74 @@ +REVISION=327b42f4ab2ce221a575c226229addb8ebe7a3fc plus fixture replacement +[GATE_SUITE:stem=aarch64_testing_profile_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=block_request_lifetime_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=blocking_fd_eagain_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=boot_disk_wait_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=bssh_auth_close_structure:attempt=1:timeout_s=300:wall_s=2:exit=0] +[GATE_SUITE:stem=capture_bxcap_schema_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=capture_path_lock_free_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=console_read_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=context_restore_structure:attempt=1:timeout_s=300:wall_s=70:exit=0] +[GATE_SUITE:stem=coreproof_component_h_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=coreproof_coverage_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=coreproof_mutation_register_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=coreproof_sites_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=critical_path_logging_census_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=ctx_diag_ring_sample_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=degenerate_transfer_fd_validation_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=dispatch_fact_census_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=dispatch_path_lock_free_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=dispatch_strand_census_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=dma_and_log_sink_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=entry_point_df_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=exec_lock_order_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=exit_tally_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=ext2_disk_size_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=ext2_lock_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=fcntl_pm_contention_gate_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=fork_lock_order_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=gate_boot_facts_pipefail_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=gate_boot_facts_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=gate_capture_drain_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=gate_qmp_backstop_structure:attempt=1:timeout_s=300:wall_s=6:exit=0] +[GATE_SUITE:stem=gate_structure_preflight_wiring_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=green_program_envelope_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=launcher_smoke_xhci_evidence_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=lockup_capture_guard_structure:attempt=1:timeout_s=300:wall_s=2:exit=0] +[GATE_SUITE:stem=loopback_pump_structure:attempt=1:timeout_s=300:wall_s=3:exit=0] +[GATE_SUITE:stem=masked_binary_load_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=mmap_floor_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=net_lock_structure:attempt=1:timeout_s=300:wall_s=2:exit=0] +[GATE_SUITE:stem=parallels_capture_structure:attempt=1:timeout_s=300:wall_s=2:exit=0] +[GATE_SUITE:stem=parallels_kill_by_name_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=pipe_fifo_blocking_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=poll_tcp_gate_wiring_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=preempt_bracket_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=qemu_host_lock_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=qemu_kill_by_name_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=ring_span_report_site_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=ring_span_unfiltered_report_site_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=run_inspector_import_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=serial_line_atomicity_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=signal_eintr_predicate_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=softirq_deferral_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=strand_handoff_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=structure_preflight_parallel_structure:attempt=1:timeout_s=300:wall_s=6:exit=0] +[GATE_SUITE:stem=syscall_return_register_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=teardown_rustfmt_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=teardown_structure:attempt=1:timeout_s=300:wall_s=25:exit=0] +[GATE_SUITE:stem=terminal_edge_capture_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=timer_wake_dispatch_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=trace_ring_depth_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=tracing_provider_gate_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=ttbr0_shadow_reconciliation_structure:attempt=1:timeout_s=300:wall_s=24:exit=0] +[GATE_SUITE:stem=tty_irq_fg_structure:attempt=1:timeout_s=300:wall_s=2:exit=0] +[GATE_SUITE:stem=tty_irq_pm_structure:attempt=1:timeout_s=300:wall_s=2:exit=0] +[GATE_SUITE:stem=tty_oracle_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=udp_ports_lock_irq_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=udp_socket_lock_irq_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=unix_stream_blocking_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=x86_boot_tests_profile_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=x86_smp_enum_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=xhci_wait_irq_order_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_PREFLIGHT:structure_suites=71/71:critical_path_lines=244:pinned=105] +EXIT=0 diff --git a/docs/planning/green-program/block/serials/508/landing/structure.log b/docs/planning/green-program/block/serials/508/landing/structure.log new file mode 100644 index 000000000..e6515df25 --- /dev/null +++ b/docs/planning/green-program/block/serials/508/landing/structure.log @@ -0,0 +1,74 @@ +327b42f4ab2ce221a575c226229addb8ebe7a3fc +[GATE_SUITE:stem=aarch64_testing_profile_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=block_request_lifetime_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=blocking_fd_eagain_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=boot_disk_wait_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=bssh_auth_close_structure:attempt=1:timeout_s=300:wall_s=2:exit=0] +[GATE_SUITE:stem=capture_bxcap_schema_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=capture_path_lock_free_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=console_read_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=context_restore_structure:attempt=1:timeout_s=300:wall_s=60:exit=0] +[GATE_SUITE:stem=coreproof_component_h_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=coreproof_coverage_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=coreproof_mutation_register_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=coreproof_sites_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=critical_path_logging_census_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=ctx_diag_ring_sample_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=degenerate_transfer_fd_validation_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=dispatch_fact_census_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=dispatch_path_lock_free_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=dispatch_strand_census_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=dma_and_log_sink_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=entry_point_df_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=exec_lock_order_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=exit_tally_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=ext2_disk_size_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=ext2_lock_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=fcntl_pm_contention_gate_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=fork_lock_order_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=gate_boot_facts_pipefail_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=gate_boot_facts_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=gate_capture_drain_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=gate_qmp_backstop_structure:attempt=1:timeout_s=300:wall_s=6:exit=0] +[GATE_SUITE:stem=gate_structure_preflight_wiring_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=green_program_envelope_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=launcher_smoke_xhci_evidence_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=lockup_capture_guard_structure:attempt=1:timeout_s=300:wall_s=2:exit=0] +[GATE_SUITE:stem=loopback_pump_structure:attempt=1:timeout_s=300:wall_s=4:exit=0] +[GATE_SUITE:stem=masked_binary_load_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=mmap_floor_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=net_lock_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=parallels_capture_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=parallels_kill_by_name_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=pipe_fifo_blocking_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=poll_tcp_gate_wiring_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=preempt_bracket_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=qemu_host_lock_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=qemu_kill_by_name_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=ring_span_report_site_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=ring_span_unfiltered_report_site_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=run_inspector_import_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=serial_line_atomicity_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=signal_eintr_predicate_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=softirq_deferral_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=strand_handoff_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=structure_preflight_parallel_structure:attempt=1:timeout_s=300:wall_s=7:exit=0] +[GATE_SUITE:stem=syscall_return_register_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=teardown_rustfmt_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=teardown_structure:attempt=1:timeout_s=300:wall_s=19:exit=0] +[GATE_SUITE:stem=terminal_edge_capture_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=timer_wake_dispatch_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=trace_ring_depth_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=tracing_provider_gate_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=ttbr0_shadow_reconciliation_structure:attempt=1:timeout_s=300:wall_s=18:exit=0] +[GATE_SUITE:stem=tty_irq_fg_structure:attempt=1:timeout_s=300:wall_s=3:exit=0] +[GATE_SUITE:stem=tty_irq_pm_structure:attempt=1:timeout_s=300:wall_s=2:exit=0] +[GATE_SUITE:stem=tty_oracle_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=udp_ports_lock_irq_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=udp_socket_lock_irq_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=unix_stream_blocking_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=x86_boot_tests_profile_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=x86_smp_enum_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=xhci_wait_irq_order_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_PREFLIGHT:structure_suites=71/71:critical_path_lines=244:pinned=105] +EXIT=0 diff --git a/docs/planning/green-program/block/serials/508/landing/x86-single-cancelled.log b/docs/planning/green-program/block/serials/508/landing/x86-single-cancelled.log new file mode 100644 index 000000000..1ea33fc63 --- /dev/null +++ b/docs/planning/green-program/block/serials/508/landing/x86-single-cancelled.log @@ -0,0 +1,3 @@ +REVISION=6cff8cf8c43adeeccd8d6088a5c42af70091233e +LAUNCH_LOAD_1M=5.40 +CANCELLED: required aarch64 gate failed; stopped x86 preflight before boot. diff --git a/docs/planning/green-program/block/serials/508/mutation-1/gate.log.gz b/docs/planning/green-program/block/serials/508/mutation-1/gate.log.gz new file mode 100644 index 000000000..b6406cdd9 Binary files /dev/null and b/docs/planning/green-program/block/serials/508/mutation-1/gate.log.gz differ diff --git a/docs/planning/green-program/block/serials/508/mutation-1/markers.txt b/docs/planning/green-program/block/serials/508/mutation-1/markers.txt new file mode 100644 index 000000000..8a0b17575 --- /dev/null +++ b/docs/planning/green-program/block/serials/508/mutation-1/markers.txt @@ -0,0 +1,5 @@ +serial_kernel.txt:15143: [ INFO] kernel::test_exec: === MULTIPLE CONCURRENT PROCESSES TEST === +serial_kernel.txt:17757: [ INFO] kernel::syscall::handlers: TEST_TALLY: exited=110 nonzero=0 failed=[] +serial_kernel.txt:17764: [ INFO] kernel::syscall::handlers: 🏁 TEST RUNNER: All tests passed - you can exit QEMU now 🏁 +serial_user.txt:1089: [BOOT_DISK_WAIT_ORACLE:x86:switched_away=606:tests_completed=0:FAIL] +serial_user.txt:1090: [BOOT_DISK_WAIT_TRACE:x86:switch_preempt=0] diff --git a/docs/planning/green-program/block/serials/508/mutation-1/serial_kernel.txt.gz b/docs/planning/green-program/block/serials/508/mutation-1/serial_kernel.txt.gz new file mode 100644 index 000000000..f6768da26 Binary files /dev/null and b/docs/planning/green-program/block/serials/508/mutation-1/serial_kernel.txt.gz differ diff --git a/docs/planning/green-program/block/serials/508/mutation-1/serial_user.txt.gz b/docs/planning/green-program/block/serials/508/mutation-1/serial_user.txt.gz new file mode 100644 index 000000000..23e2f3711 Binary files /dev/null and b/docs/planning/green-program/block/serials/508/mutation-1/serial_user.txt.gz differ diff --git a/docs/planning/green-program/block/serials/508/mutation-2/markers.txt b/docs/planning/green-program/block/serials/508/mutation-2/markers.txt new file mode 100644 index 000000000..31abd5db2 --- /dev/null +++ b/docs/planning/green-program/block/serials/508/mutation-2/markers.txt @@ -0,0 +1,5 @@ +serial_kernel.txt:15139: [ INFO] kernel::test_exec: === MULTIPLE CONCURRENT PROCESSES TEST === +serial_kernel.txt:17733: [ INFO] kernel::syscall::handlers: TEST_TALLY: exited=110 nonzero=0 failed=[] +serial_kernel.txt:17740: [ INFO] kernel::syscall::handlers: 🏁 TEST RUNNER: All tests passed - you can exit QEMU now 🏁 +serial_user.txt:1085: [BOOT_DISK_WAIT_ORACLE:x86:switched_away=601:tests_completed=0:FAIL] +serial_user.txt:1086: [BOOT_DISK_WAIT_TRACE:x86:switch_preempt=0] diff --git a/docs/planning/green-program/block/serials/508/mutation-2/serial_kernel.txt.gz b/docs/planning/green-program/block/serials/508/mutation-2/serial_kernel.txt.gz new file mode 100644 index 000000000..bc123c7bb Binary files /dev/null and b/docs/planning/green-program/block/serials/508/mutation-2/serial_kernel.txt.gz differ diff --git a/docs/planning/green-program/block/serials/508/mutation-2/serial_user.txt.gz b/docs/planning/green-program/block/serials/508/mutation-2/serial_user.txt.gz new file mode 100644 index 000000000..2e10f2cc3 Binary files /dev/null and b/docs/planning/green-program/block/serials/508/mutation-2/serial_user.txt.gz differ diff --git a/docs/planning/green-program/block/serials/508/mutation-3/markers.txt b/docs/planning/green-program/block/serials/508/mutation-3/markers.txt new file mode 100644 index 000000000..c4408fb18 --- /dev/null +++ b/docs/planning/green-program/block/serials/508/mutation-3/markers.txt @@ -0,0 +1,5 @@ +serial_kernel.txt:15132: [ INFO] kernel::test_exec: === MULTIPLE CONCURRENT PROCESSES TEST === +serial_kernel.txt:17699: [ INFO] kernel::syscall::handlers: TEST_TALLY: exited=110 nonzero=0 failed=[] +serial_kernel.txt:17706: [ INFO] kernel::syscall::handlers: 🏁 TEST RUNNER: All tests passed - you can exit QEMU now 🏁 +serial_user.txt:1085: [BOOT_DISK_WAIT_ORACLE:x86:switched_away=626:tests_completed=0:FAIL] +serial_user.txt:1086: [BOOT_DISK_WAIT_TRACE:x86:switch_preempt=0] diff --git a/docs/planning/green-program/block/serials/508/mutation-3/serial_kernel.txt.gz b/docs/planning/green-program/block/serials/508/mutation-3/serial_kernel.txt.gz new file mode 100644 index 000000000..c84a0e7b9 Binary files /dev/null and b/docs/planning/green-program/block/serials/508/mutation-3/serial_kernel.txt.gz differ diff --git a/docs/planning/green-program/block/serials/508/mutation-3/serial_user.txt.gz b/docs/planning/green-program/block/serials/508/mutation-3/serial_user.txt.gz new file mode 100644 index 000000000..0042aff7c Binary files /dev/null and b/docs/planning/green-program/block/serials/508/mutation-3/serial_user.txt.gz differ diff --git a/docs/planning/green-program/block/serials/508/mutation-4/markers.txt b/docs/planning/green-program/block/serials/508/mutation-4/markers.txt new file mode 100644 index 000000000..e7f4016d1 --- /dev/null +++ b/docs/planning/green-program/block/serials/508/mutation-4/markers.txt @@ -0,0 +1,5 @@ +serial_kernel.txt:15130: [ INFO] kernel::test_exec: === MULTIPLE CONCURRENT PROCESSES TEST === +serial_kernel.txt:17573: [ INFO] kernel::syscall::handlers: TEST_TALLY: exited=110 nonzero=0 failed=[] +serial_kernel.txt:17580: [ INFO] kernel::syscall::handlers: 🏁 TEST RUNNER: All tests passed - you can exit QEMU now 🏁 +serial_user.txt:1089: [BOOT_DISK_WAIT_ORACLE:x86:switched_away=597:tests_completed=0:FAIL] +serial_user.txt:1090: [BOOT_DISK_WAIT_TRACE:x86:switch_preempt=0] diff --git a/docs/planning/green-program/block/serials/508/mutation-4/serial_kernel.txt.gz b/docs/planning/green-program/block/serials/508/mutation-4/serial_kernel.txt.gz new file mode 100644 index 000000000..19868b842 Binary files /dev/null and b/docs/planning/green-program/block/serials/508/mutation-4/serial_kernel.txt.gz differ diff --git a/docs/planning/green-program/block/serials/508/mutation-4/serial_user.txt.gz b/docs/planning/green-program/block/serials/508/mutation-4/serial_user.txt.gz new file mode 100644 index 000000000..5eea94eff Binary files /dev/null and b/docs/planning/green-program/block/serials/508/mutation-4/serial_user.txt.gz differ diff --git a/docs/planning/green-program/block/serials/508/mutation-5/markers.txt b/docs/planning/green-program/block/serials/508/mutation-5/markers.txt new file mode 100644 index 000000000..ebb1eca31 --- /dev/null +++ b/docs/planning/green-program/block/serials/508/mutation-5/markers.txt @@ -0,0 +1,5 @@ +serial_kernel.txt:15131: [ INFO] kernel::test_exec: === MULTIPLE CONCURRENT PROCESSES TEST === +serial_kernel.txt:17455: [ INFO] kernel::syscall::handlers: TEST_TALLY: exited=110 nonzero=0 failed=[] +serial_kernel.txt:17462: [ INFO] kernel::syscall::handlers: 🏁 TEST RUNNER: All tests passed - you can exit QEMU now 🏁 +serial_user.txt:1083: [BOOT_DISK_WAIT_ORACLE:x86:switched_away=568:tests_completed=0:FAIL] +serial_user.txt:1084: [BOOT_DISK_WAIT_TRACE:x86:switch_preempt=0] diff --git a/docs/planning/green-program/block/serials/508/mutation-5/serial_kernel.txt.gz b/docs/planning/green-program/block/serials/508/mutation-5/serial_kernel.txt.gz new file mode 100644 index 000000000..160ecc391 Binary files /dev/null and b/docs/planning/green-program/block/serials/508/mutation-5/serial_kernel.txt.gz differ diff --git a/docs/planning/green-program/block/serials/508/mutation-5/serial_user.txt.gz b/docs/planning/green-program/block/serials/508/mutation-5/serial_user.txt.gz new file mode 100644 index 000000000..c31139de5 Binary files /dev/null and b/docs/planning/green-program/block/serials/508/mutation-5/serial_user.txt.gz differ diff --git a/docs/planning/green-program/block/serials/508/mutation/image.sha256 b/docs/planning/green-program/block/serials/508/mutation/image.sha256 new file mode 100644 index 000000000..5b53acb61 --- /dev/null +++ b/docs/planning/green-program/block/serials/508/mutation/image.sha256 @@ -0,0 +1 @@ +710a80074a667c2133e14d02d52b7119815e9266dec57f38cc3ea7ab0cd56f14 /root/breenix-b508/target/release/build/breenix-d924c107d332c75a/out/breenix-uefi.img diff --git a/docs/planning/green-program/block/serials/508/mutation/source.patch b/docs/planning/green-program/block/serials/508/mutation/source.patch new file mode 100644 index 000000000..cd331a78a --- /dev/null +++ b/docs/planning/green-program/block/serials/508/mutation/source.patch @@ -0,0 +1,69 @@ +diff --git a/kernel/src/task/completion.rs b/kernel/src/task/completion.rs +index 4cff4e73a..d2d70283b 100644 +--- a/kernel/src/task/completion.rs ++++ b/kernel/src/task/completion.rs +@@ -140,33 +140,6 @@ fn syscall_sleep_path_available() -> bool { + } + } + +-/// The x86 boot continuation is the idle task, not a sleepable worker. +-/// Keep its scheduling brake while allowing IRQ completion and timeout ticks. +-/// The masked check plus STI; HLT closes the completion-before-halt race. +-#[cfg(target_arch = "x86_64")] +-fn wait_idle_completion(completion: &Completion, expected_token: u32, timeout_ns: u64) -> bool { +- use x86_64::instructions::interrupts; +- +- interrupts::without_interrupts(|| { +- crate::per_cpu::preempt_disable(); +- let (secs, nanos) = crate::time::get_monotonic_time_ns(); +- let deadline = (secs * 1_000_000_000 + nanos).saturating_add(timeout_ns); +- let completed = loop { +- if completion.done.load(Ordering::Acquire) == expected_token { +- break true; +- } +- let (secs, nanos) = crate::time::get_monotonic_time_ns(); +- if secs * 1_000_000_000 + nanos >= deadline { +- break false; +- } +- interrupts::enable_and_hlt(); +- interrupts::disable(); +- }; +- crate::per_cpu::preempt_enable(); +- completed +- }) +-} +- + /// Completion primitive — pairs one waiter thread with one ISR. + pub struct Completion { + /// 0 = not done, otherwise the completion token published by `complete()`. +@@ -246,16 +219,6 @@ impl Completion { + // fall through to the polling path below. + let tid = crate::task::scheduler::current_thread_id(); + +- // Idle's saved boot continuation is discarded after Ring 3 starts. +- // preempt_count > 0 does not identify a syscall: boot holds it too. +- // Do not release that caller's brake or publish idle as BlockedOnIO. +- #[cfg(target_arch = "x86_64")] +- if crate::task::scheduler::with_scheduler(|sched| Some(sched.idle_thread()) == tid) +- == Some(true) +- { +- return Ok(wait_idle_completion(self, expected_token, timeout_ns)); +- } +- + if let Some(tid) = tid { + // Store TID so complete() can wake us. + self.waiter.store(tid, Ordering::Release); +@@ -387,7 +350,12 @@ impl Completion { + crate::arch_impl::aarch64::context_switch::schedule_from_kernel(); + } + #[cfg(not(target_arch = "aarch64"))] +- Cpu::halt_with_interrupts(); ++ { ++ unsafe { ++ Cpu::enable_interrupts(); ++ } ++ core::hint::spin_loop(); ++ } + + #[cfg(target_arch = "aarch64")] + trace_wait_timeout_stage(1); diff --git a/docs/planning/green-program/block/serials/508/parallel-1-1/followup-markers.txt b/docs/planning/green-program/block/serials/508/parallel-1-1/followup-markers.txt new file mode 100644 index 000000000..d90111767 --- /dev/null +++ b/docs/planning/green-program/block/serials/508/parallel-1-1/followup-markers.txt @@ -0,0 +1,3 @@ +serial_user.txt:3468: argc: 0 +serial_user.txt:3473: ARGV_TEST_FAILED +serial_user.txt:3519: [SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW]p00r0 [SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW]EXT2_LOCK_SPIN_STALL lock=ROOT_EXT2_write elapsed_ns=509843559 diff --git a/docs/planning/green-program/block/serials/508/parallel-1-1/gate.log.gz b/docs/planning/green-program/block/serials/508/parallel-1-1/gate.log.gz new file mode 100644 index 000000000..3a7c9aff8 Binary files /dev/null and b/docs/planning/green-program/block/serials/508/parallel-1-1/gate.log.gz differ diff --git a/docs/planning/green-program/block/serials/508/parallel-1-1/markers.txt b/docs/planning/green-program/block/serials/508/parallel-1-1/markers.txt new file mode 100644 index 000000000..df1baf33e --- /dev/null +++ b/docs/planning/green-program/block/serials/508/parallel-1-1/markers.txt @@ -0,0 +1,5 @@ +serial_kernel.txt:15177: [ INFO] kernel::test_exec: === MULTIPLE CONCURRENT PROCESSES TEST === +serial_kernel.txt:19836: [ INFO] kernel: === GRAPHICS TEST: FbInfo syscall === +serial_user.txt:2789: [TEST_EXEC_BLOCK_COMPLETE:x86:calls=64] +serial_user.txt:2790: [BOOT_DISK_WAIT_ORACLE:x86:switched_away=0:tests_completed=1:PASS] +serial_user.txt:2791: [BOOT_DISK_WAIT_TRACE:x86:switch_preempt=18446744073709551615] diff --git a/docs/planning/green-program/block/serials/508/parallel-1-1/serial_kernel.txt.gz b/docs/planning/green-program/block/serials/508/parallel-1-1/serial_kernel.txt.gz new file mode 100644 index 000000000..81a81d898 Binary files /dev/null and b/docs/planning/green-program/block/serials/508/parallel-1-1/serial_kernel.txt.gz differ diff --git a/docs/planning/green-program/block/serials/508/parallel-1-1/serial_user.txt.gz b/docs/planning/green-program/block/serials/508/parallel-1-1/serial_user.txt.gz new file mode 100644 index 000000000..0b8b29fdc Binary files /dev/null and b/docs/planning/green-program/block/serials/508/parallel-1-1/serial_user.txt.gz differ diff --git a/docs/planning/green-program/block/serials/508/parallel-1-2/followup-markers.txt b/docs/planning/green-program/block/serials/508/parallel-1-2/followup-markers.txt new file mode 100644 index 000000000..938923037 --- /dev/null +++ b/docs/planning/green-program/block/serials/508/parallel-1-2/followup-markers.txt @@ -0,0 +1,3 @@ +serial_user.txt:3434: argc: 0 +serial_user.txt:3439: ARGV_TEST_FAILED +serial_user.txt:3485: [SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW]p00r0 [SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW]EXT2_LOCK_SPIN_STALL lock=ROOT_EXT2_write elapsed_ns=512988575 diff --git a/docs/planning/green-program/block/serials/508/parallel-1-2/markers.txt b/docs/planning/green-program/block/serials/508/parallel-1-2/markers.txt new file mode 100644 index 000000000..c0d086ab9 --- /dev/null +++ b/docs/planning/green-program/block/serials/508/parallel-1-2/markers.txt @@ -0,0 +1,5 @@ +serial_kernel.txt:15168: [ INFO] kernel::test_exec: === MULTIPLE CONCURRENT PROCESSES TEST === +serial_kernel.txt:19827: [ INFO] kernel: === GRAPHICS TEST: FbInfo syscall === +serial_user.txt:2789: [TEST_EXEC_BLOCK_COMPLETE:x86:calls=64] +serial_user.txt:2790: [BOOT_DISK_WAIT_ORACLE:x86:switched_away=0:tests_completed=1:PASS] +serial_user.txt:2791: [BOOT_DISK_WAIT_TRACE:x86:switch_preempt=18446744073709551615] diff --git a/docs/planning/green-program/block/serials/508/parallel-1-2/serial_kernel.txt.gz b/docs/planning/green-program/block/serials/508/parallel-1-2/serial_kernel.txt.gz new file mode 100644 index 000000000..4a36b7e14 Binary files /dev/null and b/docs/planning/green-program/block/serials/508/parallel-1-2/serial_kernel.txt.gz differ diff --git a/docs/planning/green-program/block/serials/508/parallel-1-2/serial_user.txt.gz b/docs/planning/green-program/block/serials/508/parallel-1-2/serial_user.txt.gz new file mode 100644 index 000000000..97b1ef031 Binary files /dev/null and b/docs/planning/green-program/block/serials/508/parallel-1-2/serial_user.txt.gz differ diff --git a/docs/planning/green-program/block/serials/508/parallel-1-3/followup-markers.txt b/docs/planning/green-program/block/serials/508/parallel-1-3/followup-markers.txt new file mode 100644 index 000000000..53d82ab0b --- /dev/null +++ b/docs/planning/green-program/block/serials/508/parallel-1-3/followup-markers.txt @@ -0,0 +1,3 @@ +serial_user.txt:3469: argc: 0 +serial_user.txt:3474: ARGV_TEST_FAILED +serial_user.txt:3520: [SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW]p00r0 [SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW]EXT2_LOCK_SPIN_STALL lock=ROOT_EXT2_write elapsed_ns=501179341 diff --git a/docs/planning/green-program/block/serials/508/parallel-1-3/markers.txt b/docs/planning/green-program/block/serials/508/parallel-1-3/markers.txt new file mode 100644 index 000000000..32d10a889 --- /dev/null +++ b/docs/planning/green-program/block/serials/508/parallel-1-3/markers.txt @@ -0,0 +1,5 @@ +serial_kernel.txt:15165: [ INFO] kernel::test_exec: === MULTIPLE CONCURRENT PROCESSES TEST === +serial_kernel.txt:19824: [ INFO] kernel: === GRAPHICS TEST: FbInfo syscall === +serial_user.txt:2789: [TEST_EXEC_BLOCK_COMPLETE:x86:calls=64] +serial_user.txt:2790: [BOOT_DISK_WAIT_ORACLE:x86:switched_away=0:tests_completed=1:PASS] +serial_user.txt:2791: [BOOT_DISK_WAIT_TRACE:x86:switch_preempt=18446744073709551615] diff --git a/docs/planning/green-program/block/serials/508/parallel-1-3/serial_kernel.txt.gz b/docs/planning/green-program/block/serials/508/parallel-1-3/serial_kernel.txt.gz new file mode 100644 index 000000000..e9c04f71a Binary files /dev/null and b/docs/planning/green-program/block/serials/508/parallel-1-3/serial_kernel.txt.gz differ diff --git a/docs/planning/green-program/block/serials/508/parallel-1-3/serial_user.txt.gz b/docs/planning/green-program/block/serials/508/parallel-1-3/serial_user.txt.gz new file mode 100644 index 000000000..0e89023ae Binary files /dev/null and b/docs/planning/green-program/block/serials/508/parallel-1-3/serial_user.txt.gz differ diff --git a/docs/planning/green-program/block/serials/508/parallel-1-4/followup-markers.txt b/docs/planning/green-program/block/serials/508/parallel-1-4/followup-markers.txt new file mode 100644 index 000000000..ebd249e13 --- /dev/null +++ b/docs/planning/green-program/block/serials/508/parallel-1-4/followup-markers.txt @@ -0,0 +1,4 @@ +serial_kernel.txt:19949: [ERROR] kernel: KERNEL PANIC: panicked at kernel/src/clock_gettime_test.rs:77:5: +serial_kernel.txt:19950: Elapsed time 1992843 ns too large - suggests PIT fallback, not TSC +serial_user.txt:2790: KERNEL PANIC: panicked at kernel/src/clock_gettime_test.rs:77:5: +serial_user.txt:2791: Elapsed time 1992843 ns too large - suggests PIT fallback, not TSC diff --git a/docs/planning/green-program/block/serials/508/parallel-1-4/markers.txt b/docs/planning/green-program/block/serials/508/parallel-1-4/markers.txt new file mode 100644 index 000000000..8548c54ac --- /dev/null +++ b/docs/planning/green-program/block/serials/508/parallel-1-4/markers.txt @@ -0,0 +1,3 @@ +serial_kernel.txt:15170: [ INFO] kernel::test_exec: === MULTIPLE CONCURRENT PROCESSES TEST === +serial_kernel.txt:19829: [ INFO] kernel: === GRAPHICS TEST: FbInfo syscall === +serial_user.txt:2789: [TEST_EXEC_BLOCK_COMPLETE:x86:calls=64] diff --git a/docs/planning/green-program/block/serials/508/parallel-1-4/serial_kernel.txt.gz b/docs/planning/green-program/block/serials/508/parallel-1-4/serial_kernel.txt.gz new file mode 100644 index 000000000..193b99570 Binary files /dev/null and b/docs/planning/green-program/block/serials/508/parallel-1-4/serial_kernel.txt.gz differ diff --git a/docs/planning/green-program/block/serials/508/parallel-1-4/serial_user.txt.gz b/docs/planning/green-program/block/serials/508/parallel-1-4/serial_user.txt.gz new file mode 100644 index 000000000..be1ac12bf Binary files /dev/null and b/docs/planning/green-program/block/serials/508/parallel-1-4/serial_user.txt.gz differ diff --git a/docs/planning/green-program/block/serials/508/parallel-1-5/followup-markers.txt b/docs/planning/green-program/block/serials/508/parallel-1-5/followup-markers.txt new file mode 100644 index 000000000..1bfdf044c --- /dev/null +++ b/docs/planning/green-program/block/serials/508/parallel-1-5/followup-markers.txt @@ -0,0 +1,3 @@ +serial_user.txt:3464: argc: 0 +serial_user.txt:3469: ARGV_TEST_FAILED +serial_user.txt:3523: [SW][SW]p00r0 [SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW]EXT2_LOCK_SPIN_STALL lock=ROOT_EXT2_write elapsed_ns=507692151 diff --git a/docs/planning/green-program/block/serials/508/parallel-1-5/markers.txt b/docs/planning/green-program/block/serials/508/parallel-1-5/markers.txt new file mode 100644 index 000000000..f53e358ef --- /dev/null +++ b/docs/planning/green-program/block/serials/508/parallel-1-5/markers.txt @@ -0,0 +1,5 @@ +serial_kernel.txt:15167: [ INFO] kernel::test_exec: === MULTIPLE CONCURRENT PROCESSES TEST === +serial_kernel.txt:19826: [ INFO] kernel: === GRAPHICS TEST: FbInfo syscall === +serial_user.txt:2789: [TEST_EXEC_BLOCK_COMPLETE:x86:calls=64] +serial_user.txt:2790: [BOOT_DISK_WAIT_ORACLE:x86:switched_away=0:tests_completed=1:PASS] +serial_user.txt:2791: [BOOT_DISK_WAIT_TRACE:x86:switch_preempt=18446744073709551615] diff --git a/docs/planning/green-program/block/serials/508/parallel-1-5/serial_kernel.txt.gz b/docs/planning/green-program/block/serials/508/parallel-1-5/serial_kernel.txt.gz new file mode 100644 index 000000000..1c3e5f332 Binary files /dev/null and b/docs/planning/green-program/block/serials/508/parallel-1-5/serial_kernel.txt.gz differ diff --git a/docs/planning/green-program/block/serials/508/parallel-1-5/serial_user.txt.gz b/docs/planning/green-program/block/serials/508/parallel-1-5/serial_user.txt.gz new file mode 100644 index 000000000..ff4d519f5 Binary files /dev/null and b/docs/planning/green-program/block/serials/508/parallel-1-5/serial_user.txt.gz differ diff --git a/docs/planning/green-program/block/serials/508/parallel-2-1/followup-markers.txt b/docs/planning/green-program/block/serials/508/parallel-2-1/followup-markers.txt new file mode 100644 index 000000000..dee0b23ac --- /dev/null +++ b/docs/planning/green-program/block/serials/508/parallel-2-1/followup-markers.txt @@ -0,0 +1,3 @@ +serial_user.txt:3441: argc: 0 +serial_user.txt:3446: ARGV_TEST_FAILED +serial_user.txt:3492: [SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW]p00r0 [SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW]EXT2_LOCK_SPIN_STALL lock=ROOT_EXT2_write elapsed_ns=527564070 diff --git a/docs/planning/green-program/block/serials/508/parallel-2-1/gate.log.gz b/docs/planning/green-program/block/serials/508/parallel-2-1/gate.log.gz new file mode 100644 index 000000000..639be77e4 Binary files /dev/null and b/docs/planning/green-program/block/serials/508/parallel-2-1/gate.log.gz differ diff --git a/docs/planning/green-program/block/serials/508/parallel-2-1/markers.txt b/docs/planning/green-program/block/serials/508/parallel-2-1/markers.txt new file mode 100644 index 000000000..53a74f464 --- /dev/null +++ b/docs/planning/green-program/block/serials/508/parallel-2-1/markers.txt @@ -0,0 +1,5 @@ +serial_kernel.txt:15164: [ INFO] kernel::test_exec: === MULTIPLE CONCURRENT PROCESSES TEST === +serial_kernel.txt:19823: [ INFO] kernel: === GRAPHICS TEST: FbInfo syscall === +serial_user.txt:2789: [TEST_EXEC_BLOCK_COMPLETE:x86:calls=64] +serial_user.txt:2790: [BOOT_DISK_WAIT_ORACLE:x86:switched_away=0:tests_completed=1:PASS] +serial_user.txt:2791: [BOOT_DISK_WAIT_TRACE:x86:switch_preempt=18446744073709551615] diff --git a/docs/planning/green-program/block/serials/508/parallel-2-1/serial_kernel.txt.gz b/docs/planning/green-program/block/serials/508/parallel-2-1/serial_kernel.txt.gz new file mode 100644 index 000000000..0bc3ed048 Binary files /dev/null and b/docs/planning/green-program/block/serials/508/parallel-2-1/serial_kernel.txt.gz differ diff --git a/docs/planning/green-program/block/serials/508/parallel-2-1/serial_user.txt.gz b/docs/planning/green-program/block/serials/508/parallel-2-1/serial_user.txt.gz new file mode 100644 index 000000000..a7c11b47f Binary files /dev/null and b/docs/planning/green-program/block/serials/508/parallel-2-1/serial_user.txt.gz differ diff --git a/docs/planning/green-program/block/serials/508/parallel-2-2/followup-markers.txt b/docs/planning/green-program/block/serials/508/parallel-2-2/followup-markers.txt new file mode 100644 index 000000000..b3415a8ac --- /dev/null +++ b/docs/planning/green-program/block/serials/508/parallel-2-2/followup-markers.txt @@ -0,0 +1,3 @@ +serial_user.txt:3485: argc: 0 +serial_user.txt:3490: ARGV_TEST_FAILED +serial_user.txt:3536: [SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW]p00r0 [SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW]EXT2_LOCK_SPIN_STALL lock=ROOT_EXT2_write elapsed_ns=512551110 diff --git a/docs/planning/green-program/block/serials/508/parallel-2-2/markers.txt b/docs/planning/green-program/block/serials/508/parallel-2-2/markers.txt new file mode 100644 index 000000000..ba1be8ef8 --- /dev/null +++ b/docs/planning/green-program/block/serials/508/parallel-2-2/markers.txt @@ -0,0 +1,5 @@ +serial_kernel.txt:15169: [ INFO] kernel::test_exec: === MULTIPLE CONCURRENT PROCESSES TEST === +serial_kernel.txt:19828: [ INFO] kernel: === GRAPHICS TEST: FbInfo syscall === +serial_user.txt:2789: [TEST_EXEC_BLOCK_COMPLETE:x86:calls=64] +serial_user.txt:2790: [BOOT_DISK_WAIT_ORACLE:x86:switched_away=0:tests_completed=1:PASS] +serial_user.txt:2791: [BOOT_DISK_WAIT_TRACE:x86:switch_preempt=18446744073709551615] diff --git a/docs/planning/green-program/block/serials/508/parallel-2-2/serial_kernel.txt.gz b/docs/planning/green-program/block/serials/508/parallel-2-2/serial_kernel.txt.gz new file mode 100644 index 000000000..2a36fbdd3 Binary files /dev/null and b/docs/planning/green-program/block/serials/508/parallel-2-2/serial_kernel.txt.gz differ diff --git a/docs/planning/green-program/block/serials/508/parallel-2-2/serial_user.txt.gz b/docs/planning/green-program/block/serials/508/parallel-2-2/serial_user.txt.gz new file mode 100644 index 000000000..f729ab1b9 Binary files /dev/null and b/docs/planning/green-program/block/serials/508/parallel-2-2/serial_user.txt.gz differ diff --git a/docs/planning/green-program/block/serials/508/parallel-2-3/followup-markers.txt b/docs/planning/green-program/block/serials/508/parallel-2-3/followup-markers.txt new file mode 100644 index 000000000..e425f77a4 --- /dev/null +++ b/docs/planning/green-program/block/serials/508/parallel-2-3/followup-markers.txt @@ -0,0 +1,3 @@ +serial_user.txt:3524: argc: 0 +serial_user.txt:3529: ARGV_TEST_FAILED +serial_user.txt:3575: [SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW]p00r0 [SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW]EXT2_LOCK_SPIN_STALL lock=ROOT_EXT2_write elapsed_ns=528527042 diff --git a/docs/planning/green-program/block/serials/508/parallel-2-3/markers.txt b/docs/planning/green-program/block/serials/508/parallel-2-3/markers.txt new file mode 100644 index 000000000..f53e358ef --- /dev/null +++ b/docs/planning/green-program/block/serials/508/parallel-2-3/markers.txt @@ -0,0 +1,5 @@ +serial_kernel.txt:15167: [ INFO] kernel::test_exec: === MULTIPLE CONCURRENT PROCESSES TEST === +serial_kernel.txt:19826: [ INFO] kernel: === GRAPHICS TEST: FbInfo syscall === +serial_user.txt:2789: [TEST_EXEC_BLOCK_COMPLETE:x86:calls=64] +serial_user.txt:2790: [BOOT_DISK_WAIT_ORACLE:x86:switched_away=0:tests_completed=1:PASS] +serial_user.txt:2791: [BOOT_DISK_WAIT_TRACE:x86:switch_preempt=18446744073709551615] diff --git a/docs/planning/green-program/block/serials/508/parallel-2-3/serial_kernel.txt.gz b/docs/planning/green-program/block/serials/508/parallel-2-3/serial_kernel.txt.gz new file mode 100644 index 000000000..b7f243528 Binary files /dev/null and b/docs/planning/green-program/block/serials/508/parallel-2-3/serial_kernel.txt.gz differ diff --git a/docs/planning/green-program/block/serials/508/parallel-2-3/serial_user.txt.gz b/docs/planning/green-program/block/serials/508/parallel-2-3/serial_user.txt.gz new file mode 100644 index 000000000..d0b55a5b6 Binary files /dev/null and b/docs/planning/green-program/block/serials/508/parallel-2-3/serial_user.txt.gz differ diff --git a/docs/planning/green-program/block/serials/508/parallel-2-4/followup-markers.txt b/docs/planning/green-program/block/serials/508/parallel-2-4/followup-markers.txt new file mode 100644 index 000000000..b1a23ed77 --- /dev/null +++ b/docs/planning/green-program/block/serials/508/parallel-2-4/followup-markers.txt @@ -0,0 +1,4 @@ +serial_kernel.txt:19941: [ERROR] kernel: KERNEL PANIC: panicked at kernel/src/clock_gettime_test.rs:77:5: +serial_kernel.txt:19942: Elapsed time 4392079 ns too large - suggests PIT fallback, not TSC +serial_user.txt:2790: KERNEL PANIC: panicked at kernel/src/clock_gettime_test.rs:77:5: +serial_user.txt:2791: Elapsed time 4392079 ns too large - suggests PIT fallback, not TSC diff --git a/docs/planning/green-program/block/serials/508/parallel-2-4/markers.txt b/docs/planning/green-program/block/serials/508/parallel-2-4/markers.txt new file mode 100644 index 000000000..d9821f580 --- /dev/null +++ b/docs/planning/green-program/block/serials/508/parallel-2-4/markers.txt @@ -0,0 +1,3 @@ +serial_kernel.txt:15162: [ INFO] kernel::test_exec: === MULTIPLE CONCURRENT PROCESSES TEST === +serial_kernel.txt:19821: [ INFO] kernel: === GRAPHICS TEST: FbInfo syscall === +serial_user.txt:2789: [TEST_EXEC_BLOCK_COMPLETE:x86:calls=64] diff --git a/docs/planning/green-program/block/serials/508/parallel-2-4/serial_kernel.txt.gz b/docs/planning/green-program/block/serials/508/parallel-2-4/serial_kernel.txt.gz new file mode 100644 index 000000000..27ef39259 Binary files /dev/null and b/docs/planning/green-program/block/serials/508/parallel-2-4/serial_kernel.txt.gz differ diff --git a/docs/planning/green-program/block/serials/508/parallel-2-4/serial_user.txt.gz b/docs/planning/green-program/block/serials/508/parallel-2-4/serial_user.txt.gz new file mode 100644 index 000000000..74d68a0ea Binary files /dev/null and b/docs/planning/green-program/block/serials/508/parallel-2-4/serial_user.txt.gz differ diff --git a/docs/planning/green-program/block/serials/508/parallel-2-5/followup-markers.txt b/docs/planning/green-program/block/serials/508/parallel-2-5/followup-markers.txt new file mode 100644 index 000000000..1e30ed176 --- /dev/null +++ b/docs/planning/green-program/block/serials/508/parallel-2-5/followup-markers.txt @@ -0,0 +1,3 @@ +serial_user.txt:3462: argc: 0 +serial_user.txt:3467: ARGV_TEST_FAILED +serial_user.txt:3513: [SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW]p00r0 [SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW]EXT2_LOCK_SPIN_STALL lock=ROOT_EXT2_write elapsed_ns=547332526 diff --git a/docs/planning/green-program/block/serials/508/parallel-2-5/markers.txt b/docs/planning/green-program/block/serials/508/parallel-2-5/markers.txt new file mode 100644 index 000000000..0efb060d0 --- /dev/null +++ b/docs/planning/green-program/block/serials/508/parallel-2-5/markers.txt @@ -0,0 +1,5 @@ +serial_kernel.txt:15166: [ INFO] kernel::test_exec: === MULTIPLE CONCURRENT PROCESSES TEST === +serial_kernel.txt:19825: [ INFO] kernel: === GRAPHICS TEST: FbInfo syscall === +serial_user.txt:2789: [TEST_EXEC_BLOCK_COMPLETE:x86:calls=64] +serial_user.txt:2790: [BOOT_DISK_WAIT_ORACLE:x86:switched_away=0:tests_completed=1:PASS] +serial_user.txt:2791: [BOOT_DISK_WAIT_TRACE:x86:switch_preempt=18446744073709551615] diff --git a/docs/planning/green-program/block/serials/508/parallel-2-5/serial_kernel.txt.gz b/docs/planning/green-program/block/serials/508/parallel-2-5/serial_kernel.txt.gz new file mode 100644 index 000000000..22e93c662 Binary files /dev/null and b/docs/planning/green-program/block/serials/508/parallel-2-5/serial_kernel.txt.gz differ diff --git a/docs/planning/green-program/block/serials/508/parallel-2-5/serial_user.txt.gz b/docs/planning/green-program/block/serials/508/parallel-2-5/serial_user.txt.gz new file mode 100644 index 000000000..efaccedb1 Binary files /dev/null and b/docs/planning/green-program/block/serials/508/parallel-2-5/serial_user.txt.gz differ diff --git a/docs/planning/green-program/block/serials/508/prod-last/final-markers.txt b/docs/planning/green-program/block/serials/508/prod-last/final-markers.txt new file mode 100644 index 000000000..b88e24b8a --- /dev/null +++ b/docs/planning/green-program/block/serials/508/prod-last/final-markers.txt @@ -0,0 +1,8 @@ +serial_kernel.txt:596: [ INFO] kernel: [PREEMPT_BRACKET_CENSUS:underflow=0] +serial_kernel.txt:608: [ INFO] kernel: [PROD_BRACKET_RELEASE_CENSUS:underflow=0] +serial_user.txt:42: [SW][SW][SW][SW]<1>[PT_ROOT_CUSTODY:no_proof=0:no_arch=0:terminated=0:undecided=0:mid_retire=0:retired=0] +serial_user.txt:43: [TOMBSTONE_CENSUS:resident=0:removed=0:reap_second=0:retire_second=0:abandoned_unqueued=0] +serial_user.txt:64: [INIT_DESIGNATION:x86_64:designated_pid=1:reserved_collisions=0] +serial_user.txt:71: [TIMER_SCALE_ORACLE:x86:ms_per_tick=5:ticks_before=68:ms=340:ticks_after=68:ticks_nonzero=1:in_range=1:PASS] +serial_user.txt:75: [SW][SW][SW][SW][SW]breenix> [SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW] +serial_user.txt:76: breenix> [SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW]RING3_ENTER: CS=0x33 diff --git a/docs/planning/green-program/block/serials/508/prod-last/gate.log.gz b/docs/planning/green-program/block/serials/508/prod-last/gate.log.gz new file mode 100644 index 000000000..ef0d39f9d Binary files /dev/null and b/docs/planning/green-program/block/serials/508/prod-last/gate.log.gz differ diff --git a/docs/planning/green-program/block/serials/508/prod-last/markers.txt b/docs/planning/green-program/block/serials/508/prod-last/markers.txt new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/docs/planning/green-program/block/serials/508/prod-last/markers.txt @@ -0,0 +1 @@ + diff --git a/docs/planning/green-program/block/serials/508/prod-last/serial_kernel.txt.gz b/docs/planning/green-program/block/serials/508/prod-last/serial_kernel.txt.gz new file mode 100644 index 000000000..d2fdd0213 Binary files /dev/null and b/docs/planning/green-program/block/serials/508/prod-last/serial_kernel.txt.gz differ diff --git a/docs/planning/green-program/block/serials/508/prod-last/serial_user.txt.gz b/docs/planning/green-program/block/serials/508/prod-last/serial_user.txt.gz new file mode 100644 index 000000000..387ee034e Binary files /dev/null and b/docs/planning/green-program/block/serials/508/prod-last/serial_user.txt.gz differ diff --git a/docs/planning/green-program/block/serials/508/repaired-boot/followup-markers.txt b/docs/planning/green-program/block/serials/508/repaired-boot/followup-markers.txt new file mode 100644 index 000000000..11f995e95 --- /dev/null +++ b/docs/planning/green-program/block/serials/508/repaired-boot/followup-markers.txt @@ -0,0 +1,4 @@ +serial_user.txt:3550: argc: 0 +serial_user.txt:3555: ARGV_TEST_FAILED +serial_user.txt:3601: W][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW][SW]EXT2_LOCK_SPIN_STALL lock=ROOT_EXT2_write elapsed_ns=524713644 +serial_kernel.txt:21851: [DISPATCH_STRAND_CENSUS:seq=322:tick=50095:ms=425447:saved=13:stranded=13:tids=1239,1255,1268,1269,1270,1271,1273,1274,1275,1297,1306,1328,1330:tid_overflow=0:ledger_overflow=0:save_no_thread=1:save_no_proc=1:save_no_pm=1:sig_pending_blocked=1:sig_ctx_blocked=1:sig_delivered_blocked=1:idle_no_stack=1:kthread_no_info=1:user_no_kstack=1:sig_deliverable_user=1] diff --git a/docs/planning/green-program/block/serials/508/repaired-boot/gate.log.gz b/docs/planning/green-program/block/serials/508/repaired-boot/gate.log.gz new file mode 100644 index 000000000..20e47e1dc Binary files /dev/null and b/docs/planning/green-program/block/serials/508/repaired-boot/gate.log.gz differ diff --git a/docs/planning/green-program/block/serials/508/repaired-boot/markers.txt b/docs/planning/green-program/block/serials/508/repaired-boot/markers.txt new file mode 100644 index 000000000..5e35ba870 --- /dev/null +++ b/docs/planning/green-program/block/serials/508/repaired-boot/markers.txt @@ -0,0 +1,5 @@ +serial_kernel.txt:15104: [ INFO] kernel::test_exec: === MULTIPLE CONCURRENT PROCESSES TEST === +serial_kernel.txt:19763: [ INFO] kernel: === GRAPHICS TEST: FbInfo syscall === +serial_user.txt:2789: [TEST_EXEC_BLOCK_COMPLETE:x86:calls=64] +serial_user.txt:2790: [BOOT_DISK_WAIT_ORACLE:x86:switched_away=0:tests_completed=1:PASS] +serial_user.txt:2791: [BOOT_DISK_WAIT_TRACE:x86:switch_preempt=18446744073709551615] diff --git a/docs/planning/green-program/block/serials/508/repaired-boot/serial_kernel.txt.gz b/docs/planning/green-program/block/serials/508/repaired-boot/serial_kernel.txt.gz new file mode 100644 index 000000000..fd1a4c0ba Binary files /dev/null and b/docs/planning/green-program/block/serials/508/repaired-boot/serial_kernel.txt.gz differ diff --git a/docs/planning/green-program/block/serials/508/repaired-boot/serial_user.txt.gz b/docs/planning/green-program/block/serials/508/repaired-boot/serial_user.txt.gz new file mode 100644 index 000000000..b103f6ef4 Binary files /dev/null and b/docs/planning/green-program/block/serials/508/repaired-boot/serial_user.txt.gz differ diff --git a/docs/planning/green-program/block/serials/508/review-fix/build-result.txt b/docs/planning/green-program/block/serials/508/review-fix/build-result.txt new file mode 100644 index 000000000..21047eddb --- /dev/null +++ b/docs/planning/green-program/block/serials/508/review-fix/build-result.txt @@ -0,0 +1,9 @@ +SOURCE_REVISION=48610ba15e16a3a0785c7398e758cde9e2ed43a0 plus review patch +Kernel sources subsequently committed at c236b037d86e5d7e0cd04fc3c700d52f53a45bab +Command: cargo build --release --features boot_tests,testing,external_test_bins --bin qemu-uefi +LAUNCH_LOAD=3.40 + Finished `release` profile [optimized] target(s) in 1.28s + Finished `release` profile [optimized] target(s) in 0.17s + Finished `release` profile [optimized] target(s) in 21.23s +REVIEW_BUILD_EXIT=0 +Project compiler diagnostics: 0 diff --git a/docs/planning/green-program/block/serials/508/review-fix/gate-result.txt b/docs/planning/green-program/block/serials/508/review-fix/gate-result.txt new file mode 100644 index 000000000..70489aac9 --- /dev/null +++ b/docs/planning/green-program/block/serials/508/review-fix/gate-result.txt @@ -0,0 +1,13 @@ +SOURCE_REVISION=c236b037d86e5d7e0cd04fc3c700d52f53a45bab +Command: bash docker/qemu/run-x86-boot-tests.sh +gate.log.gz (decoded line 2): LAUNCH_LOAD=0.91 +gate.log.gz (decoded line 247): [GATE_PREFLIGHT:structure_suites=70/70:critical_path_lines=244:pinned=105] +gate.log.gz (decoded line 676): [GATE_BOOT_FACTS:boot=1:host_ms=1788876254272-1788877304962:qemu_at_start=0:load_at_start=2.89:qemu_at_end=0:load_at_end=1.28:qemu_cpu_s=1062.00:guest_uptime_ms=NA:ended_by=poll_exhausted] +gate.log.gz (decoded line 689): x86 frame-custody gate run 1: FAIL (set -e abort at docker/qemu/run-x86-boot-tests.sh:1072, exit 1) +gate.log.gz (decoded line 1098): REVIEW_GATE_EXIT=1 +serial_user.txt.gz (decoded line 125): [TIMER_WAKE_LATENCY_ORACLE:x86:sleep_ms=10:peers=8:overrun_ms=42:bound_ms=100:quantum_ms=50:round_ms=400:wake_enqueues=1:peers_started=8:peers_spinning=8:backstops=0:setup_ms=526:window_ms=692:measured=1:PASS] +serial_user.txt.gz (decoded line 2787): [TEST_EXEC_BLOCK_COMPLETE:x86:calls=64] +serial_user.txt.gz (decoded line 2788): [BOOT_DISK_WAIT_ORACLE:x86:switched_away=0:tests_completed=1:PASS] +serial_user.txt.gz (decoded line 2789): [BOOT_DISK_WAIT_TRACE:x86:switch_preempt=18446744073709551615] +serial_user.txt.gz (decoded line 3523): ARGV_TEST_FAILED +serial_user.txt.gz (decoded line 3569): EXT2_LOCK_SPIN_STALL lock=ROOT_EXT2_write elapsed_ns=521404760 diff --git a/docs/planning/green-program/block/serials/508/review-fix/gate.log.gz b/docs/planning/green-program/block/serials/508/review-fix/gate.log.gz new file mode 100644 index 000000000..415b334b7 Binary files /dev/null and b/docs/planning/green-program/block/serials/508/review-fix/gate.log.gz differ diff --git a/docs/planning/green-program/block/serials/508/review-fix/mutations.txt b/docs/planning/green-program/block/serials/508/review-fix/mutations.txt new file mode 100644 index 000000000..0a1c4dc07 --- /dev/null +++ b/docs/planning/green-program/block/serials/508/review-fix/mutations.txt @@ -0,0 +1,9 @@ +V1-original-selected-counter: exit 101 +V1-ignore-rollback: exit 101 +V2-switch-serial: exit 101 +V2-admission-log: exit 101 +V2-admission-port: exit 101 +wait-busy-spin: exit 101 +admission-remove-count: exit 101 +final-marker-removed: exit 101 +8/8 mutants rejected; 4/4 source files restored diff --git a/docs/planning/green-program/block/serials/508/review-fix/oracle-score.txt b/docs/planning/green-program/block/serials/508/review-fix/oracle-score.txt new file mode 100644 index 000000000..9c4575ff1 --- /dev/null +++ b/docs/planning/green-program/block/serials/508/review-fix/oracle-score.txt @@ -0,0 +1,4 @@ +SOURCE_REVISION=c236b037d86e5d7e0cd04fc3c700d52f53a45bab +Command: python3 scripts/score-boot-disk-wait.py +boot disk wait oracle: PASS (switched_away=0 tests_completed=1) +exit=0 diff --git a/docs/planning/green-program/block/serials/508/review-fix/ratchet-original-head.txt b/docs/planning/green-program/block/serials/508/review-fix/ratchet-original-head.txt new file mode 100644 index 000000000..129983876 --- /dev/null +++ b/docs/planning/green-program/block/serials/508/review-fix/ratchet-original-head.txt @@ -0,0 +1,30 @@ +== compiling boot_disk_wait_structure == +== running boot_disk_wait_structure == + +running 6 tests +test boot_completion_preserves_brake_and_uses_atomic_check_halt ... ok +test kernel_schedule_admission_checks_the_count_before_exceptions ... ok +test departure_counter_observes_dispatch_result_after_rollback ... FAILED +test switch_and_admission_have_no_text_output ... FAILED +test oracle_measures_switches_and_final_test_block_return ... ok +test scorer_rejects_mutation_missing_duplicate_and_unfinished_evidence ... ok + +failures: + +---- departure_counter_observes_dispatch_result_after_rollback stdout ---- + +thread 'departure_counter_observes_dispatch_result_after_rollback' panicked at /private/tmp/claude-501/-Users-wrb-fun-code-breenix/d69ffb9d-4539-4cf3-8a3d-a872ff7c830b/scratchpad/b508/wt/tests/boot_disk_wait_structure.rs:94:5: +selected dispatch is not a completed departure +note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace + +---- switch_and_admission_have_no_text_output stdout ---- + +thread 'switch_and_admission_have_no_text_output' panicked at /private/tmp/claude-501/-Users-wrb-fun-code-breenix/d69ffb9d-4539-4cf3-8a3d-a872ff7c830b/scratchpad/b508/wt/tests/boot_disk_wait_structure.rs:110:17: +text output in switch/admission: pub fn raw_serial_char(c: u8) { + + +failures: + departure_counter_observes_dispatch_result_after_rollback + switch_and_admission_have_no_text_output + +test result: FAILED. 4 passed; 2 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s diff --git a/docs/planning/green-program/block/serials/508/review-fix/ratchet-repaired.txt b/docs/planning/green-program/block/serials/508/review-fix/ratchet-repaired.txt new file mode 100644 index 000000000..7a2b22408 --- /dev/null +++ b/docs/planning/green-program/block/serials/508/review-fix/ratchet-repaired.txt @@ -0,0 +1,13 @@ +== compiling boot_disk_wait_structure == +== running boot_disk_wait_structure == + +running 7 tests +test kernel_schedule_admission_checks_the_count_before_exceptions ... ok +test boot_completion_preserves_brake_and_uses_atomic_check_halt ... ok +test departure_counter_observes_dispatch_result_after_rollback ... ok +test oracle_measures_switches_and_final_test_block_return ... ok +test switch_and_admission_have_no_text_output ... ok +test scorer_rejects_mutation_missing_duplicate_and_unfinished_evidence ... ok +test resolved_departure_block_rejects_tls_rollback_and_counts_departure ... ok + +test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.06s diff --git a/docs/planning/green-program/block/serials/508/review-fix/serial_kernel.txt.gz b/docs/planning/green-program/block/serials/508/review-fix/serial_kernel.txt.gz new file mode 100644 index 000000000..5e928a5c7 Binary files /dev/null and b/docs/planning/green-program/block/serials/508/review-fix/serial_kernel.txt.gz differ diff --git a/docs/planning/green-program/block/serials/508/review-fix/serial_user.txt.gz b/docs/planning/green-program/block/serials/508/review-fix/serial_user.txt.gz new file mode 100644 index 000000000..b989433d7 Binary files /dev/null and b/docs/planning/green-program/block/serials/508/review-fix/serial_user.txt.gz differ diff --git a/docs/planning/green-program/block/serials/508/review-fix/source-citations.txt b/docs/planning/green-program/block/serials/508/review-fix/source-citations.txt new file mode 100644 index 000000000..372ac2d73 --- /dev/null +++ b/docs/planning/green-program/block/serials/508/review-fix/source-citations.txt @@ -0,0 +1,13 @@ +SOURCE_REVISION=c236b037d86e5d7e0cd04fc3c700d52f53a45bab +kernel/src/interrupts/context_switch.rs:363: let outgoing_preempt = crate::per_cpu::preempt_count() as u64; +kernel/src/interrupts/context_switch.rs:367: switch_to_thread( +kernel/src/interrupts/context_switch.rs:382: if dispatched_tid != old_thread_id { +kernel/src/interrupts/context_switch.rs:384: SWITCHED_AWAY.fetch_add(1, Ordering::Release); +kernel/src/interrupts/context_switch.rs:682: if crate::tls::switch_tls(thread_id).is_err() { +kernel/src/interrupts/context_switch.rs:683: scheduler::abort_dispatch_and_resume(thread_id, resume_thread_id); +kernel/src/interrupts/context_switch.rs:1013: scheduler::abort_dispatch_and_resume(thread_id, resume_thread_id); +kernel/src/interrupts/context_switch.rs:1182: scheduler::abort_dispatch_and_resume(thread_id, resume_thread_id); +kernel/src/per_cpu.rs:1366: pub fn can_schedule(saved_cs: u64) -> bool { +tests/boot_disk_wait_structure.rs:89: fn departure_counter_observes_dispatch_result_after_rollback() { +tests/boot_disk_wait_structure.rs:108: fn switch_and_admission_have_no_text_output() { +tests/boot_disk_wait_structure.rs:144: fn resolved_departure_block_rejects_tls_rollback_and_counts_departure() { diff --git a/docs/planning/green-program/block/serials/508/review-fix/structure.txt b/docs/planning/green-program/block/serials/508/review-fix/structure.txt new file mode 100644 index 000000000..2df8b8a8c --- /dev/null +++ b/docs/planning/green-program/block/serials/508/review-fix/structure.txt @@ -0,0 +1,71 @@ +[GATE_SUITE:stem=aarch64_testing_profile_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=block_request_lifetime_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=blocking_fd_eagain_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=boot_disk_wait_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=capture_bxcap_schema_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=capture_path_lock_free_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=console_read_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=context_restore_structure:attempt=1:timeout_s=300:wall_s=58:exit=0] +[GATE_SUITE:stem=coreproof_component_h_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=coreproof_coverage_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=coreproof_mutation_register_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=coreproof_sites_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=critical_path_logging_census_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=ctx_diag_ring_sample_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=degenerate_transfer_fd_validation_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=dispatch_fact_census_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=dispatch_path_lock_free_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=dispatch_strand_census_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=dma_and_log_sink_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=entry_point_df_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=exec_lock_order_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=exit_tally_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=ext2_disk_size_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=ext2_lock_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=fcntl_pm_contention_gate_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=fork_lock_order_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=gate_boot_facts_pipefail_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=gate_boot_facts_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=gate_capture_drain_structure:attempt=1:timeout_s=300:wall_s=2:exit=0] +[GATE_SUITE:stem=gate_qmp_backstop_structure:attempt=1:timeout_s=300:wall_s=5:exit=0] +[GATE_SUITE:stem=gate_structure_preflight_wiring_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=green_program_envelope_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=launcher_smoke_xhci_evidence_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=lockup_capture_guard_structure:attempt=1:timeout_s=300:wall_s=2:exit=0] +[GATE_SUITE:stem=loopback_pump_structure:attempt=1:timeout_s=300:wall_s=3:exit=0] +[GATE_SUITE:stem=masked_binary_load_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=mmap_floor_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=net_lock_structure:attempt=1:timeout_s=300:wall_s=2:exit=0] +[GATE_SUITE:stem=parallels_capture_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=parallels_kill_by_name_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=pipe_fifo_blocking_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=poll_tcp_gate_wiring_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=preempt_bracket_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=qemu_host_lock_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=qemu_kill_by_name_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=ring_span_report_site_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=ring_span_unfiltered_report_site_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=run_inspector_import_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=serial_line_atomicity_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=signal_eintr_predicate_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=softirq_deferral_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=strand_handoff_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=structure_preflight_parallel_structure:attempt=1:timeout_s=300:wall_s=6:exit=0] +[GATE_SUITE:stem=syscall_return_register_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=teardown_rustfmt_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=teardown_structure:attempt=1:timeout_s=300:wall_s=19:exit=0] +[GATE_SUITE:stem=terminal_edge_capture_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=timer_wake_dispatch_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=trace_ring_depth_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=tracing_provider_gate_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=ttbr0_shadow_reconciliation_structure:attempt=1:timeout_s=300:wall_s=18:exit=0] +[GATE_SUITE:stem=tty_irq_fg_structure:attempt=1:timeout_s=300:wall_s=2:exit=0] +[GATE_SUITE:stem=tty_irq_pm_structure:attempt=1:timeout_s=300:wall_s=2:exit=0] +[GATE_SUITE:stem=tty_oracle_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=udp_ports_lock_irq_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=udp_socket_lock_irq_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=unix_stream_blocking_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_SUITE:stem=x86_boot_tests_profile_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=x86_smp_enum_structure:attempt=1:timeout_s=300:wall_s=1:exit=0] +[GATE_SUITE:stem=xhci_wait_irq_order_structure:attempt=1:timeout_s=300:wall_s=0:exit=0] +[GATE_PREFLIGHT:structure_suites=70/70:critical_path_lines=244:pinned=105] diff --git a/docs/planning/green-program/block/serials/508/validation/artifacts.sha256 b/docs/planning/green-program/block/serials/508/validation/artifacts.sha256 new file mode 100644 index 000000000..0651dc1a6 --- /dev/null +++ b/docs/planning/green-program/block/serials/508/validation/artifacts.sha256 @@ -0,0 +1,43 @@ +514f41561f26d1d3423b762425f61245bfc5ba2600bc73a890ffa508dd03c36e baseline/gate.log.gz +87c1629ea54d121c501e4c9b1c58e73c1bde58086829724d3d82bff5adbdd4ea baseline/serial_kernel.txt.gz +3eeac94841854bfd7e84a2d8f16bb666b139d5958ce202b35564d9ed38666d50 baseline/serial_user.txt.gz +ae89dae3103193f0ca09607b07047d672aafc313f7f61e40c63995e8a51c31fb mutation-1/gate.log.gz +a43dac2de27ba6b17cfd37f3da438dfc91e79dbe6ef7cd8e863ecfb12e855765 mutation-1/serial_kernel.txt.gz +c276cb7f845ada1dfbb3dbc8a8bf082d2441ae0d096c8988ee63c3c7553b584c mutation-1/serial_user.txt.gz +daed27de4979e4d224c82fa86739533a59648bcfa3bdf09b0684c1d9fcd48ed7 mutation-2/serial_kernel.txt.gz +113c08ca5892db320dccf16663d0e4fba0c9e718de976750cc400059e5f31a37 mutation-2/serial_user.txt.gz +e6ee6523ce203f8d216c6124671323908e355b2f27cfd4bd8b1230724ef27051 mutation-3/serial_kernel.txt.gz +87082de458b1f3a8037ce0a9aa958a6a03025618826b6b75f8f9e2754414154c mutation-3/serial_user.txt.gz +935de840116490ca8cf2df78487f11d5683a62a50330f332d1a0c3afe2ab12ad mutation-4/serial_kernel.txt.gz +88786b10041e0d489d8b562329144c2a25d1c08a6e6f20cf37b1c5a9a7321761 mutation-4/serial_user.txt.gz +bdae9abdf562c110c857cdfa2cd69c0e32b74373a0c54e9ba21a65ea70c78604 mutation-5/serial_kernel.txt.gz +1f1bc5f502b70ec85009584fc30541cfc11eb43a949d587b657b768e3b0ed267 mutation-5/serial_user.txt.gz +69a3910dcef1166fed821c7bfd41e0b1d1f5fe6e82739f4f75d49ac86f6e7a35 parallel-1-1/gate.log.gz +fb5b6bf6160ddc802cf817c4cbdea30dee73ec4c2275381cd469aeff4f23e91f parallel-1-1/serial_kernel.txt.gz +c901a2eb72bf39ed09ab84569d9d570369c1bae0aa20cd3cf7b1113dcdb23e88 parallel-1-1/serial_user.txt.gz +e2988d5691d8108589c27a9c92e655676c0b1c405f3796afd6975a46a7c6cbe8 parallel-1-2/serial_kernel.txt.gz +0e18fed0ce59445a79d58da2589f1549fd3444f72de3f81c5edb375bc3650479 parallel-1-2/serial_user.txt.gz +0686afa28f5675b68cdb3e2a91ec51413c455d7edeb1b6fd20d3f5768a9cba31 parallel-1-3/serial_kernel.txt.gz +08e31f99453ddb03569cb1aa217c830ce32c42c0f7cf5b05e6a6537c8f4c0553 parallel-1-3/serial_user.txt.gz +7941fa99b9391147988029d7e501c313e866b31a72e2329424cba30e6b2796f4 parallel-1-4/serial_kernel.txt.gz +1fe6e385cd43b4be41200a33554a1e3a2319ce61ec8a4b8dd9b96cd275a14c2c parallel-1-4/serial_user.txt.gz +f13914fced1f9b53cdb78bcd2a87614924573e7ce3b61bee887df4756c225fb0 parallel-1-5/serial_kernel.txt.gz +6516220d60a27b313f9174c7480bf7f6cfbd7a49f586db8afe429cb86d198ba9 parallel-1-5/serial_user.txt.gz +7f4894159466eb9a2626421755cbeb857dad18e55b9df3556c5484b7f804d97a parallel-2-1/gate.log.gz +106cdeb7d4c7e97b1181d2ed160363d2f00b439cd75f56053b3f5f47b8691122 parallel-2-1/serial_kernel.txt.gz +f6d68e404a99509b86aed49b63657f2af162181223511984c8422889118c4c5c parallel-2-1/serial_user.txt.gz +39b55010d845e6bb7f304dd207635f367bf1b015325459258adaf4a6e79c486d parallel-2-2/serial_kernel.txt.gz +4e36c0f1836301945db3047b50e79f0d640e38fffb2ef457e98c328af78783a9 parallel-2-2/serial_user.txt.gz +d39729f64f03483a185a9a84b8ccaf6c9ac66bcd5bf9eb163571dfceb859269a parallel-2-3/serial_kernel.txt.gz +934c461d40bfd927d5b3940d62178b13fd7d23aab17ed23c803db23bec4d86eb parallel-2-3/serial_user.txt.gz +68850607bf224311c52ea66129e3dd055f64038704c3368dc22a51d693f831e2 parallel-2-4/serial_kernel.txt.gz +5d0b6bc684ba8c34fa22291211da030d8b53b0512b359b54f33be6ca97647114 parallel-2-4/serial_user.txt.gz +d2908dc442f3dfd61ac169b6a4002caf57bda25564c62bd3d0d32ac92aa1a74b parallel-2-5/serial_kernel.txt.gz +372f9aba5b71611a972c4465f53cd1c760ed9097a5643d2f99b259f2a3fe0054 parallel-2-5/serial_user.txt.gz +b037d5eb2da299b6c3e64194de4ad9f6ecab0f5f0f46ade9b4cb24a8e77b688f prod-last/gate.log.gz +7e06c0aff124294c1d54e94b0fc2a86326bf94e293b32371ced4fcd83668d2aa prod-last/serial_kernel.txt.gz +e2fb830f41388fce6c72553fd039a7f1784d5bf5232111f8a20814a2030f3619 prod-last/serial_user.txt.gz +dba61835dd8b3d8eeb082e8b228152e23a0d52176179a5732735cec9663c7055 repaired-boot/gate.log.gz +9101505de83d98fa2fc91f3084fba0024bf95108fa6ca6506a26f6a13daca986 repaired-boot/serial_kernel.txt.gz +059621249825526c7f7c9a50bff99f45dfe5501a5ce5f3bb3654f31cd07f28d5 repaired-boot/serial_user.txt.gz +2c7cc7e43ace7d8275b714a8d73e2894f2cc1cc0149e4b34db6057165f669b8b validation/structure.log.gz diff --git a/docs/planning/green-program/block/serials/508/validation/code-commit.txt b/docs/planning/green-program/block/serials/508/validation/code-commit.txt new file mode 100644 index 000000000..0d7934037 --- /dev/null +++ b/docs/planning/green-program/block/serials/508/validation/code-commit.txt @@ -0,0 +1,13 @@ +Preserve idle boot continuation during disk completion waits + +Issue 508: retain the boot scheduling brake across an IRQ-driven HLT wait, +and apply the kernel preempt-count guard before blocked-state admission. +Count boot-window switch departures and require the final test_exec marker +in the x86 scorer. The baseline oracle records an incomplete registration +block despite the previous gate passing. + +Validation: 70 structure suites passed; x86 testing profile built without +project diagnostics. Runtime and mutation validation are recorded separately. + +Co-authored-by: Ryan Breen +Co-authored-by: Claude Code diff --git a/docs/planning/green-program/block/serials/508/validation/code-message-claim.txt b/docs/planning/green-program/block/serials/508/validation/code-message-claim.txt new file mode 100644 index 000000000..0d71bedd7 --- /dev/null +++ b/docs/planning/green-program/block/serials/508/validation/code-message-claim.txt @@ -0,0 +1 @@ +claim-lint: clean commit message (.tmp/508-code-commit.txt). diff --git a/docs/planning/green-program/block/serials/508/validation/code-tree-claim.txt b/docs/planning/green-program/block/serials/508/validation/code-tree-claim.txt new file mode 100644 index 000000000..04f8266a8 --- /dev/null +++ b/docs/planning/green-program/block/serials/508/validation/code-tree-claim.txt @@ -0,0 +1,3 @@ +claim-lint: clean (11 file(s) checked, changed hunks vs 4394409fca39). +claim-lint: 136 pre-existing finding(s) outside this branch's changed hunks not reported (--whole-file shows them). +claim-lint: 3 target(s) SKIPPED, not checked (extension not in ['.md', '.py', '.rs', '.sh', '.txt']): docs/planning/green-program/block/serials/508/baseline/gate.log.gz, docs/planning/green-program/block/serials/508/baseline/serial_kernel.txt.gz, docs/planning/green-program/block/serials/508/baseline/serial_user.txt.gz diff --git a/docs/planning/green-program/block/serials/508/validation/compiler-diagnostics.txt b/docs/planning/green-program/block/serials/508/validation/compiler-diagnostics.txt new file mode 100644 index 000000000..bfb41c02c --- /dev/null +++ b/docs/planning/green-program/block/serials/508/validation/compiler-diagnostics.txt @@ -0,0 +1,6 @@ +baseline: project_compiler_diagnostics=0 +mutation-1: project_compiler_diagnostics=0 +parallel-1-1: project_compiler_diagnostics=0 +parallel-2-1: project_compiler_diagnostics=0 +prod-last: project_compiler_diagnostics=0 +repaired-boot: project_compiler_diagnostics=0 diff --git a/docs/planning/green-program/block/serials/508/validation/parallel-1-scorer.txt b/docs/planning/green-program/block/serials/508/validation/parallel-1-scorer.txt new file mode 100644 index 000000000..3e61ddd48 --- /dev/null +++ b/docs/planning/green-program/block/serials/508/validation/parallel-1-scorer.txt @@ -0,0 +1,6 @@ +SOURCE_REVISION=b346196295db73f9fe4b44c8f080e75217f27693 +parallel-1-1: final_markers=1 scorer_exit=0 +parallel-1-2: final_markers=1 scorer_exit=0 +parallel-1-3: final_markers=1 scorer_exit=0 +parallel-1-4: final_markers=1 scorer_exit=1 +parallel-1-5: final_markers=1 scorer_exit=0 diff --git a/docs/planning/green-program/block/serials/508/validation/parallel-2-scorer.txt b/docs/planning/green-program/block/serials/508/validation/parallel-2-scorer.txt new file mode 100644 index 000000000..060281ced --- /dev/null +++ b/docs/planning/green-program/block/serials/508/validation/parallel-2-scorer.txt @@ -0,0 +1,6 @@ +SOURCE_REVISION=b346196295db73f9fe4b44c8f080e75217f27693 +parallel-2-1: final_markers=1 scorer_exit=0 +parallel-2-2: final_markers=1 scorer_exit=0 +parallel-2-3: final_markers=1 scorer_exit=0 +parallel-2-4: final_markers=1 scorer_exit=1 +parallel-2-5: final_markers=1 scorer_exit=0 diff --git a/docs/planning/green-program/block/serials/508/validation/ratchet-original-head.txt b/docs/planning/green-program/block/serials/508/validation/ratchet-original-head.txt new file mode 100644 index 000000000..9fbbc435d --- /dev/null +++ b/docs/planning/green-program/block/serials/508/validation/ratchet-original-head.txt @@ -0,0 +1,36 @@ +== compiling boot_disk_wait_structure == +== running boot_disk_wait_structure == + +running 4 tests +test kernel_schedule_admission_checks_the_count_before_exceptions ... FAILED +test boot_completion_preserves_brake_and_uses_atomic_check_halt ... FAILED +test oracle_measures_switches_and_final_test_block_return ... FAILED +test scorer_rejects_mutation_missing_duplicate_and_unfinished_evidence ... ok + +failures: + +---- kernel_schedule_admission_checks_the_count_before_exceptions stdout ---- + +thread 'kernel_schedule_admission_checks_the_count_before_exceptions' panicked at /private/tmp/claude-501/-Users-wrb-fun-code-breenix/d69ffb9d-4539-4cf3-8a3d-a872ff7c830b/scratchpad/b508/wt/.tmp/508-ratchet-baseline/tests/boot_disk_wait_structure.rs:34:14: +called `Option::unwrap()` on a `None` value + +---- boot_completion_preserves_brake_and_uses_atomic_check_halt stdout ---- + +thread 'boot_completion_preserves_brake_and_uses_atomic_check_halt' panicked at /private/tmp/claude-501/-Users-wrb-fun-code-breenix/d69ffb9d-4539-4cf3-8a3d-a872ff7c830b/scratchpad/b508/wt/.tmp/508-ratchet-baseline/tests/boot_disk_wait_structure.rs:12:10: +idle completion wait missing +note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace + +---- oracle_measures_switches_and_final_test_block_return stdout ---- + +thread 'oracle_measures_switches_and_final_test_block_return' panicked at /private/tmp/claude-501/-Users-wrb-fun-code-breenix/d69ffb9d-4539-4cf3-8a3d-a872ff7c830b/scratchpad/b508/wt/.tmp/508-ratchet-baseline/tests/boot_disk_wait_structure.rs:42:48: +called `Option::unwrap()` on a `None` value + + +failures: + boot_completion_preserves_brake_and_uses_atomic_check_halt + kernel_schedule_admission_checks_the_count_before_exceptions + oracle_measures_switches_and_final_test_block_return + +test result: FAILED. 1 passed; 3 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.03s + +RATCHET_ORIGINAL_HEAD_EXIT=101 diff --git a/docs/planning/green-program/block/serials/508/validation/ratchet-repaired.txt b/docs/planning/green-program/block/serials/508/validation/ratchet-repaired.txt new file mode 100644 index 000000000..1d3dedfe5 --- /dev/null +++ b/docs/planning/green-program/block/serials/508/validation/ratchet-repaired.txt @@ -0,0 +1,11 @@ +== compiling boot_disk_wait_structure == +== running boot_disk_wait_structure == + +running 4 tests +test kernel_schedule_admission_checks_the_count_before_exceptions ... ok +test boot_completion_preserves_brake_and_uses_atomic_check_halt ... ok +test oracle_measures_switches_and_final_test_block_return ... ok +test scorer_rejects_mutation_missing_duplicate_and_unfinished_evidence ... ok + +test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.03s + diff --git a/docs/planning/green-program/block/serials/508/validation/repaired-image.sha256 b/docs/planning/green-program/block/serials/508/validation/repaired-image.sha256 new file mode 100644 index 000000000..287426ae5 --- /dev/null +++ b/docs/planning/green-program/block/serials/508/validation/repaired-image.sha256 @@ -0,0 +1 @@ +229a1b82aad70abf43d7ef8fd709a9d7e1d35495f376e1c5ccb72e0923077dc3 /root/breenix-b508/target/release/build/breenix-d924c107d332c75a/out/breenix-uefi.img diff --git a/docs/planning/green-program/block/serials/508/validation/scorer-saved-serials.txt b/docs/planning/green-program/block/serials/508/validation/scorer-saved-serials.txt new file mode 100644 index 000000000..784d1e930 --- /dev/null +++ b/docs/planning/green-program/block/serials/508/validation/scorer-saved-serials.txt @@ -0,0 +1,5 @@ +baseline: python3 scripts/score-boot-disk-wait.py -> exit 1 +boot disk wait oracle: FAIL (requires exactly one completed, unswitched boot window) + +repaired-boot: python3 scripts/score-boot-disk-wait.py -> exit 0 +boot disk wait oracle: PASS (switched_away=0 tests_completed=1) diff --git a/docs/planning/green-program/block/serials/508/validation/source-citations.txt b/docs/planning/green-program/block/serials/508/validation/source-citations.txt new file mode 100644 index 000000000..7dd00a9ae --- /dev/null +++ b/docs/planning/green-program/block/serials/508/validation/source-citations.txt @@ -0,0 +1,28 @@ +SOURCE_REVISION=b346196295db73f9fe4b44c8f080e75217f27693 +kernel/src/main.rs:590: task::scheduler::init_with_current(init_task); +kernel/src/task/scheduler.rs:5472: pub fn init_with_current(current_thread: Box) { +kernel/src/main.rs:1309: kernel::per_cpu::preempt_disable(); +kernel/src/main.rs:1843: test_exec::test_direct_execution(); +kernel/src/main.rs:2082: test_exec::test_fbinfo(); +kernel/src/drivers/virtio/block.rs:401: .wait_timeout_uninterruptible(token, timeout_ns); +kernel/src/task/completion.rs:301: let in_syscall = syscall_sleep_path_available(); +kernel/src/task/completion.rs:342: crate::per_cpu::preempt_enable(); +kernel/src/interrupts/timer.rs:65: scheduler::set_need_resched(); +kernel/src/interrupts/context_switch.rs:178: if preempt_count_value > 0 && !from_userspace { +kernel/src/interrupts/context_switch.rs:860: let userspace_started = crate::syscall::handler::is_ring3_confirmed(); +kernel/src/task/completion.rs:253: if crate::task::scheduler::with_scheduler(|sched| Some(sched.idle_thread()) == tid) +kernel/src/task/completion.rs:147: fn wait_idle_completion(completion: &Completion, expected_token: u32, timeout_ns: u64) -> bool { +kernel/src/drivers/virtio/block.rs:678: self.completion.complete(token); +kernel/src/per_cpu.rs:1373: if !returning_to_userspace && current_preempt & 0x0fff_ffff != 0 { +kernel/src/interrupts/context_switch.rs:402: use crate::boot::disk_wait_oracle::{BOOT_TID, SWITCHED_AWAY, SWITCH_PREEMPT}; +kernel/src/boot/disk_wait_oracle.rs:34: "[BOOT_DISK_WAIT_ORACLE:x86:switched_away={}:tests_completed={}:{}]", +kernel/src/main.rs:2084: serial_println!("[TEST_EXEC_BLOCK_COMPLETE:x86:calls=64]"); +kernel/src/boot/disk_wait_oracle.rs:4: pub static BOOT_TID: AtomicU64 = AtomicU64::new(0); +kernel/src/main.rs:1312: kernel::boot::disk_wait_oracle::begin(); +kernel/src/main.rs:2261: kernel::boot::disk_wait_oracle::finish(); +kernel/src/main.rs:2267: kernel::per_cpu::preempt_enable(); +kernel/src/boot/disk_wait_oracle.rs:27: pub fn report() { +kernel/src/syscall/handlers.rs:254: crate::boot::disk_wait_oracle::report(); +scripts/score-boot-disk-wait.py:12: def score(text): +scripts/x86-gate-verdict.sh:28: python3 "$SCRIPT_DIR/score-boot-disk-wait.py" "$@" || exit $? +kernel/src/clock_gettime_test.rs:77: assert!( diff --git a/docs/planning/green-program/block/serials/508/validation/structure.log.gz b/docs/planning/green-program/block/serials/508/validation/structure.log.gz new file mode 100644 index 000000000..ffc739c52 Binary files /dev/null and b/docs/planning/green-program/block/serials/508/validation/structure.log.gz differ diff --git a/kernel/src/boot/disk_wait_oracle.rs b/kernel/src/boot/disk_wait_oracle.rs new file mode 100644 index 000000000..cb9f21d46 --- /dev/null +++ b/kernel/src/boot/disk_wait_oracle.rs @@ -0,0 +1,47 @@ +//! Boot continuation oracle. Hot-path writers only publish plain atomics. +use core::sync::atomic::{AtomicBool, AtomicU64, Ordering}; + +pub static BOOT_TID: AtomicU64 = AtomicU64::new(0); +pub static SWITCHED_AWAY: AtomicU64 = AtomicU64::new(0); +pub static SWITCH_PREEMPT: AtomicU64 = AtomicU64::new(u64::MAX); +static TESTS_COMPLETED: AtomicU64 = AtomicU64::new(0); +static REPORTED: AtomicBool = AtomicBool::new(false); + +pub fn begin() { + BOOT_TID.store( + crate::task::scheduler::current_thread_id().unwrap(), + Ordering::Release, + ); +} + +pub fn tests_completed() { + TESTS_COMPLETED.store(1, Ordering::Release); +} + +pub fn finish() { + BOOT_TID.store(0, Ordering::Release); + report(); +} + +/// Called at the final boot marker, or at the terminal tally if boot was lost. +pub fn report() { + if REPORTED.swap(true, Ordering::AcqRel) { + return; + } + let switched = SWITCHED_AWAY.load(Ordering::Acquire); + let completed = TESTS_COMPLETED.load(Ordering::Acquire); + crate::serial_println!( + "[BOOT_DISK_WAIT_ORACLE:x86:switched_away={}:tests_completed={}:{}]", + switched, + completed, + if switched == 0 && completed == 1 { + "PASS" + } else { + "FAIL" + } + ); + crate::serial_println!( + "[BOOT_DISK_WAIT_TRACE:x86:switch_preempt={}]", + SWITCH_PREEMPT.load(Ordering::Acquire) + ); +} diff --git a/kernel/src/boot/mod.rs b/kernel/src/boot/mod.rs index 3905165a3..c95289be8 100644 --- a/kernel/src/boot/mod.rs +++ b/kernel/src/boot/mod.rs @@ -16,3 +16,10 @@ pub mod test_list; // of aarch64's own copy in main_aarch64.rs rather than a shared helper. #[cfg(target_arch = "x86_64")] pub mod init_image; + +#[cfg(all( + target_arch = "x86_64", + feature = "testing", + not(feature = "interactive") +))] +pub mod disk_wait_oracle; diff --git a/kernel/src/interrupts/context_switch.rs b/kernel/src/interrupts/context_switch.rs index b4f4c0afb..6bd6e2d7d 100644 --- a/kernel/src/interrupts/context_switch.rs +++ b/kernel/src/interrupts/context_switch.rs @@ -6,11 +6,10 @@ #![cfg(target_arch = "x86_64")] +use crate::task::dispatch_strand_census::{note_fact, DispatchLogFact}; use crate::task::process_context::{ - is_kernel_code_selector, restore_userspace_context, save_userspace_context, RestoreError, - SavedRegisters, + is_kernel_code_selector, restore_userspace_context, save_userspace_context, SavedRegisters, }; -use crate::task::dispatch_strand_census::{note_fact, DispatchLogFact}; use crate::task::scheduler; use crate::task::thread::ThreadPrivilege; use crate::tracing::providers::counters::{ @@ -20,91 +19,29 @@ use crate::tracing::providers::sched::{ trace_ctx_switch, trace_dispatch_abandon, trace_dispatch_save, DispatchAbandonSite, DispatchSaveReason, }; -use core::sync::atomic::{AtomicBool, AtomicU64, Ordering}; +use core::sync::atomic::{AtomicU64, Ordering}; use x86_64::structures::idt::InterruptStackFrame; use x86_64::VirtAddr; enum FirstUserspaceEntry { Installed, - Aborted(&'static str), + Aborted, } static FIRST_USERSPACE_ENTRY_ABORT_COUNT: AtomicU64 = AtomicU64::new(0); -static FIRST_USERSPACE_ENTRY_ABORT_LOGGED: AtomicBool = AtomicBool::new(false); static USERSPACE_DISPATCH_NO_CR3_REFUSED: AtomicU64 = AtomicU64::new(0); -static USERSPACE_DISPATCH_NO_CR3_LOGGED: AtomicBool = AtomicBool::new(false); static USERSPACE_DISPATCH_CREATING_REFUSED: AtomicU64 = AtomicU64::new(0); -static USERSPACE_DISPATCH_CREATING_LOGGED: AtomicBool = AtomicBool::new(false); -static DISPATCH_GUARD_UNAVAILABLE_STREAK: AtomicU64 = AtomicU64::new(0); -static DISPATCH_GUARD_ESCALATION_LOGGED: AtomicBool = AtomicBool::new(false); -const DISPATCH_GUARD_ESCALATION_THRESHOLD: u64 = 1024; - -/// Raw serial debug output - single character, no locks, no allocations. -/// Use this for debugging context switch paths where any allocation/locking -/// could perturb timing or cause deadlocks. -#[inline(always)] -pub fn raw_serial_char(c: u8) { - unsafe { - use x86_64::instructions::port::Port; - let mut port: Port = Port::new(0x3F8); // COM1 data port - port.write(c); - } -} - -/// Raw serial string output - no locks, no allocations. -/// Use for boot markers in context switch path where locking would deadlock. -#[inline(always)] -fn raw_serial_str(s: &str) { - unsafe { - use x86_64::instructions::port::Port; - let mut port: Port = Port::new(0x3F8); - for byte in s.bytes() { - port.write(byte); - } - } -} - -/// Raw serial decimal output - no locks, no allocations. -#[inline(always)] -fn raw_serial_u64(mut value: u64) { - if value == 0 { - raw_serial_char(b'0'); - return; - } - - let mut digits = [0_u8; 20]; - let mut index = digits.len(); - while value != 0 { - index -= 1; - digits[index] = b'0' + (value % 10) as u8; - value /= 10; - } - while index < digits.len() { - raw_serial_char(digits[index]); - index += 1; - } -} /// Third dispatch admission arm (tranche-2 P3). A row whose publication has not /// completed must never have CR3 armed for it. Cheap field read on a row the /// caller already holds; hot-path safe. #[inline] -pub(crate) fn refuse_unpublished_dispatch( - process: &crate::process::process::Process, - thread_id: u64, - pid: u64, -) -> bool { +pub(crate) fn refuse_unpublished_dispatch(process: &crate::process::process::Process) -> bool { if !process.is_unpublished() { return false; } USERSPACE_DISPATCH_CREATING_REFUSED.fetch_add(1, Ordering::Relaxed); - if !USERSPACE_DISPATCH_CREATING_LOGGED.swap(true, Ordering::Relaxed) { - raw_serial_str("[PMGUARD] creating dispatch refused tid="); - raw_serial_u64(thread_id); - raw_serial_str(" pid="); - raw_serial_u64(pid); - raw_serial_str("\n"); - } + true } @@ -113,38 +50,6 @@ pub fn userspace_dispatch_creating_refused() -> u64 { USERSPACE_DISPATCH_CREATING_REFUSED.load(Ordering::Relaxed) } -#[inline(always)] -fn note_dispatch_guard_available() { - DISPATCH_GUARD_UNAVAILABLE_STREAK.store(0, Ordering::Relaxed); -} - -#[inline(always)] -fn note_dispatch_guard_unavailable() { - let streak = DISPATCH_GUARD_UNAVAILABLE_STREAK - .fetch_add(1, Ordering::Relaxed) - .wrapping_add(1); - if streak >= DISPATCH_GUARD_ESCALATION_THRESHOLD - && !DISPATCH_GUARD_ESCALATION_LOGGED.swap(true, Ordering::Relaxed) - { - let (owner_cpu, owner_tid) = crate::process::process_manager_owner_snapshot().unwrap_or(( - crate::process::PM_LOCK_OWNER_NONE, - crate::process::PM_LOCK_OWNER_NONE, - )); - let current_tid = crate::per_cpu::current_thread_id_lock_free() - .unwrap_or(crate::process::PM_LOCK_OWNER_TID_UNKNOWN); - - raw_serial_str("[PMGUARD] dispatch refused streak="); - raw_serial_u64(streak); - raw_serial_str(" owner_cpu="); - raw_serial_u64(owner_cpu); - raw_serial_str(" owner_tid="); - raw_serial_u64(owner_tid); - raw_serial_str(" current_tid="); - raw_serial_u64(current_tid); - raw_serial_str("\n"); - } -} - // REMOVED: NEXT_PAGE_TABLE is no longer needed since CR3 switching happens // immediately during context switch, not deferred to interrupt return @@ -331,12 +236,6 @@ pub extern "C" fn check_need_resched_and_switch( } } - // Count reschedule attempts (for diagnostics if needed) - static RESCHED_LOG_COUNTER: core::sync::atomic::AtomicU64 = - core::sync::atomic::AtomicU64::new(0); - let _count = RESCHED_LOG_COUNTER.fetch_add(1, core::sync::atomic::Ordering::Relaxed); - // Note: Debug logging removed from hot path - use GDB if debugging is needed - // Both entry paths must resolve the process-manager dependency BEFORE committing // to a scheduling decision, and both must refuse identically when it is // unavailable. The kernel-entry path used to skip this check and pass `None` @@ -346,12 +245,8 @@ pub extern "C" fn check_need_resched_and_switch( // lock-holding context - the only one that can release it - running. // try_lock only: blocking here would deadlock the interrupt path. let mut process_manager_guard = match crate::process::try_manager() { - Some(guard) => { - note_dispatch_guard_available(); - guard - } + Some(guard) => guard, None => { - note_dispatch_guard_unavailable(); scheduler::set_need_resched(); return; } @@ -360,15 +255,6 @@ pub extern "C" fn check_need_resched_and_switch( // Perform scheduling decision let schedule_result = scheduler::schedule(); - // One-time boot stage marker (only fires once to satisfy boot-stages test) - // CRITICAL: Use raw serial to avoid deadlock in IRQ context - static SCHEDULE_MARKER_EMITTED: core::sync::atomic::AtomicBool = - core::sync::atomic::AtomicBool::new(false); - if !SCHEDULE_MARKER_EMITTED.load(core::sync::atomic::Ordering::Relaxed) { - SCHEDULE_MARKER_EMITTED.store(true, core::sync::atomic::Ordering::Relaxed); - raw_serial_str("[ INFO] scheduler::schedule() returned (boot marker)\n"); - } - if schedule_result.is_none() { // CRITICAL: Clear exception cleanup context even when no switch happens. // Otherwise the flag stays set forever, causing unexpected scheduling later. @@ -397,25 +283,6 @@ pub extern "C" fn check_need_resched_and_switch( return; } - // NOTE: No logging here - log statements in the context switch path - // cause deadlocks when the logger tries to acquire locks during a switch - // to a newly created kthread. Use raw_serial_char() for debugging only. - - // Emit canonical ring3 marker on the FIRST entry to userspace (for CI) - // CRITICAL: Use raw serial output without locks to prevent deadlock in IRQ context - if from_userspace { - static mut EMITTED_RING3_MARKER: bool = false; - unsafe { - if !EMITTED_RING3_MARKER { - EMITTED_RING3_MARKER = true; - raw_serial_str("RING3_ENTER: CS=0x33\n"); - raw_serial_str( - "[ OK ] RING3_SMOKE: userspace executed + syscall path verified\n", - ); - } - } - } - // Save current thread's context if coming from userspace // CRITICAL: If save fails, we MUST NOT switch contexts! // Switching without saving would cause the process to return to stale RIP (entry point) @@ -443,8 +310,6 @@ pub extern "C" fn check_need_resched_and_switch( if from_userspace { // Use the already-held guard to save context (prevents TOCTOU race) - // Debug marker: saving userspace context (raw serial, no locks) - raw_serial_str(""); if !save_current_thread_context_with_guard( old_thread_id, saved_regs, @@ -494,6 +359,9 @@ pub extern "C" fn check_need_resched_and_switch( ); } + #[cfg(all(feature = "testing", not(feature = "interactive")))] + let outgoing_preempt = crate::per_cpu::preempt_count() as u64; + // Switch to the new thread // Pass the process_manager_guard so we don't try to re-acquire the lock switch_to_thread( @@ -504,6 +372,21 @@ pub extern "C" fn check_need_resched_and_switch( Some(process_manager_guard), ); + // Observe the resolved dispatch, after TLS/first-entry rollback can + // restore the outgoing thread. Selection alone is not a departure. + #[cfg(all(feature = "testing", not(feature = "interactive")))] + { + use crate::boot::disk_wait_oracle::{BOOT_TID, SWITCHED_AWAY, SWITCH_PREEMPT}; + if BOOT_TID.load(Ordering::Acquire) == old_thread_id { + if let Some(dispatched_tid) = crate::per_cpu::current_thread_id_lock_free() { + if dispatched_tid != old_thread_id { + SWITCH_PREEMPT.store(outgoing_preempt, Ordering::Relaxed); + SWITCHED_AWAY.fetch_add(1, Ordering::Release); + } + } + } + } + // #772: record the resume frame this dispatch installed. // // Taken HERE rather than beside `set_current_thread` inside @@ -546,13 +429,6 @@ pub extern "C" fn check_need_resched_and_switch( // Linux clears this in schedule_tail() after context switch. crate::per_cpu::clear_preempt_active(); - // Log userspace transition - if scheduler::with_thread_mut(new_thread_id, |t| t.privilege == ThreadPrivilege::User) - .unwrap_or(false) - { - log::trace!("Restored userspace context for thread {}", new_thread_id); - } - // Reset the timer quantum for the new thread super::timer::reset_quantum(); } @@ -629,17 +505,12 @@ fn save_current_thread_context_with_guard( save_reason: DispatchSaveReason, ) -> bool { if let Some(ref mut manager) = **manager_guard { - if let Some((pid, process)) = manager.find_process_by_thread_mut(thread_id) { + if let Some((_, process)) = manager.find_process_by_thread_mut(thread_id) { if let Some(ref mut thread) = process.main_thread { save_userspace_context(thread, interrupt_frame, saved_regs); // #772: recorded where the save actually happened, so the // counter cannot outrun the saves. note_dispatch_save(save_reason, thread_id, interrupt_frame); - log::trace!( - "Saved context for process {} (thread {})", - pid.as_u64(), - thread_id - ); return true; } else { note_fact(DispatchLogFact::SaveNoMainThread); @@ -733,13 +604,6 @@ fn save_kthread_context( thread.context.rflags = interrupt_frame.cpu_flags.bits(); thread.context.cs = interrupt_frame.code_segment.0 as u64; thread.context.ss = interrupt_frame.stack_segment.0 as u64; - - log::trace!( - "KTHREAD_SAVE: thread {} RIP={:#x} RSP={:#x}", - thread_id, - thread.context.rip, - thread.context.rsp - ); }) .is_some(); @@ -795,8 +659,6 @@ fn switch_to_thread( interrupt_frame: &mut InterruptStackFrame, process_manager_guard: Option, ) { - // Debug marker: entering switch_to_thread (raw serial, no locks) - raw_serial_str("[SW]"); // Update per-CPU current thread and TSS.RSP0 scheduler::with_thread_mut(thread_id, |thread| { // Update per-CPU current thread pointer @@ -807,11 +669,6 @@ fn switch_to_thread( // This is critical for interrupt/exception handling if let Some(kernel_stack_top) = thread.kernel_stack_top { crate::per_cpu::update_tss_rsp0(kernel_stack_top.as_u64()); - log::trace!( - "sched: switch to thread {} rsp0={:#x}", - thread_id, - kernel_stack_top - ); } }); @@ -828,8 +685,6 @@ fn switch_to_thread( scheduler::set_need_resched(); return; } - // Debug marker: TLS switch completed (raw serial, no locks) - raw_serial_str(""); } // Check if this is the idle thread @@ -865,20 +720,13 @@ fn switch_to_thread( if has_saved_context { // Restore idle thread's saved context (like a kthread) - // Debug marker: idle with saved context (raw serial, no locks) - raw_serial_str("<1>"); - log::trace!("Restoring idle thread's saved context"); setup_kernel_thread_return(thread_id, saved_regs, interrupt_frame); } else { // No saved context or was in idle_loop - go to idle loop - // Debug marker: switching to idle (raw serial, no locks) - raw_serial_str(""); setup_idle_return(interrupt_frame); } } else if is_kernel_thread { // Set up to return to kernel thread - // Debug marker: kernel thread (raw serial, no locks) - raw_serial_str(""); setup_kernel_thread_return(thread_id, saved_regs, interrupt_frame); // The saved CS is the authoritative record of the ring where the context was // captured, even if a remote waker cleared blocked_in_syscall. Evaluate it @@ -886,8 +734,6 @@ fn switch_to_thread( } else if blocked_in_syscall || saved_context_is_kernel_frame(thread_id, process_manager_guard.as_ref()) { - // Debug marker: blocked in syscall (raw serial, no locks) - raw_serial_str(""); // CRITICAL: Thread was blocked inside a syscall (like pause() or waitpid()). // We need to check if there are pending signals. If so, deliver them using // the saved userspace context. Otherwise, resume at the kernel HLT loop. @@ -908,8 +754,8 @@ fn switch_to_thread( let guard_option = process_manager_guard.or_else(|| crate::process::try_manager()); if let Some(mut manager_guard) = guard_option { if let Some(ref mut manager) = *manager_guard { - if let Some((pid, process)) = manager.find_process_by_thread_mut(thread_id) { - if refuse_unpublished_dispatch(process, thread_id, pid.as_u64()) { + if let Some((_, process)) = manager.find_process_by_thread_mut(thread_id) { + if refuse_unpublished_dispatch(process) { crate::task::scheduler::set_need_resched(); setup_idle_return(interrupt_frame); crate::task::scheduler::switch_to_idle(); @@ -924,13 +770,7 @@ fn switch_to_thread( Some(cr3_value) => cr3_value, None => { USERSPACE_DISPATCH_NO_CR3_REFUSED.fetch_add(1, Ordering::Relaxed); - if !USERSPACE_DISPATCH_NO_CR3_LOGGED.swap(true, Ordering::Relaxed) { - raw_serial_str("[PMGUARD] no-cr3 dispatch refused tid="); - raw_serial_u64(thread_id); - raw_serial_str(" pid="); - raw_serial_u64(pid.as_u64()); - raw_serial_str("\n"); - } + if let Some(ref mut thread) = process.main_thread { thread.set_terminated(); } @@ -1077,7 +917,9 @@ fn switch_to_thread( scheduler::set_need_resched(); setup_idle_return(interrupt_frame); scheduler::switch_to_idle(); - trace_dispatch_abandon(DispatchAbandonSite::IdleSignalTerminatedBlocked); + trace_dispatch_abandon( + DispatchAbandonSite::IdleSignalTerminatedBlocked, + ); unsafe { crate::memory::process_memory::switch_to_kernel_page_table(); } @@ -1175,8 +1017,6 @@ fn switch_to_thread( } } else { // Restore userspace thread context - // Debug marker: userspace restore path (raw serial, no locks) - raw_serial_str(""); // Pass the process_manager_guard to avoid double-lock restore_userspace_thread_context( thread_id, @@ -1231,7 +1071,6 @@ pub(crate) fn setup_idle_return(interrupt_frame: &mut InterruptStackFrame) { // leaving the system stuck in the idle loop unable to switch to ready threads. crate::per_cpu::clear_preempt_active(); } - log::trace!("Set up return to idle loop"); } /// Set up interrupt frame to return to kernel thread @@ -1318,8 +1157,6 @@ fn restore_userspace_thread_context( interrupt_frame: &mut InterruptStackFrame, process_manager_guard: Option, ) { - log::trace!("restore_userspace_thread_context: thread {}", thread_id); - // Check if this thread has ever run before let has_started = scheduler::with_thread_mut(thread_id, |thread| thread.has_started).unwrap_or(false); @@ -1335,20 +1172,13 @@ fn restore_userspace_thread_context( process_manager_guard, ) { FirstUserspaceEntry::Installed => { - log::info!("First run: thread {} entering userspace", thread_id); scheduler::with_thread_mut(thread_id, |thread| { thread.has_started = true; }); } - FirstUserspaceEntry::Aborted(reason) => { + FirstUserspaceEntry::Aborted => { FIRST_USERSPACE_ENTRY_ABORT_COUNT.fetch_add(1, Ordering::Relaxed); - if !FIRST_USERSPACE_ENTRY_ABORT_LOGGED.swap(true, Ordering::Relaxed) { - raw_serial_str("[PMGUARD] first-entry aborted tid="); - raw_serial_u64(thread_id); - raw_serial_str(" reason="); - raw_serial_str(reason); - raw_serial_str("\n"); - } + scheduler::abort_dispatch_and_resume(thread_id, resume_thread_id); trace_dispatch_abandon(DispatchAbandonSite::RollbackFirstEntry); scheduler::set_need_resched(); @@ -1358,7 +1188,6 @@ fn restore_userspace_thread_context( } // Thread has run before - do normal context restore - log::trace!("Resuming thread {}", thread_id); // CRITICAL: Use the passed-in guard if available, otherwise try to acquire one. // The guard is passed from check_need_resched_and_switch to avoid double-lock deadlock. @@ -1370,9 +1199,9 @@ fn restore_userspace_thread_context( if let Some(mut manager_guard) = guard_option { if let Some(ref mut manager) = *manager_guard { - if let Some((pid, process)) = manager.find_process_by_thread_mut(thread_id) { + if let Some((_, process)) = manager.find_process_by_thread_mut(thread_id) { // Get CR3 before borrowing main_thread mutably - if refuse_unpublished_dispatch(process, thread_id, pid.as_u64()) { + if refuse_unpublished_dispatch(process) { crate::task::scheduler::set_need_resched(); setup_idle_return(interrupt_frame); crate::task::scheduler::switch_to_idle(); @@ -1384,17 +1213,7 @@ fn restore_userspace_thread_context( if let Some(ref mut thread) = process.main_thread { if thread.privilege == ThreadPrivilege::User { - // Debug marker: restoring userspace context (raw serial, no locks) - raw_serial_str(""); - if let Err(error) = - restore_userspace_context(thread, interrupt_frame, saved_regs) - { - match error { - RestoreError::NonCanonicalRip | RestoreError::NonCanonicalRsp => { - raw_serial_str("") - } - RestoreError::KernelFrame => raw_serial_str(""), - } + if restore_userspace_context(thread, interrupt_frame, saved_regs).is_err() { // Corrupted process state. Terminate the process and switch to idle. thread.set_terminated(); process.terminate(-11); // SIGSEGV equivalent @@ -1429,13 +1248,7 @@ fn restore_userspace_thread_context( } } else { USERSPACE_DISPATCH_NO_CR3_REFUSED.fetch_add(1, Ordering::Relaxed); - if !USERSPACE_DISPATCH_NO_CR3_LOGGED.swap(true, Ordering::Relaxed) { - raw_serial_str("[PMGUARD] no-cr3 dispatch refused tid="); - raw_serial_u64(thread_id); - raw_serial_str(" pid="); - raw_serial_u64(pid.as_u64()); - raw_serial_str("\n"); - } + // With next_cr3 == 0, timer_entry.asm takes its fallback path // and restores the interrupted process's address space. Refuse // to finish this user-mode return with that wrong CR3 active. @@ -1456,7 +1269,6 @@ fn restore_userspace_thread_context( // Update TSS RSP0 for the new thread's kernel stack if let Some(kernel_stack_top) = thread.kernel_stack_top { crate::per_cpu::update_tss_rsp0(kernel_stack_top.as_u64()); - log::trace!("Set kernel stack: {:#x}", kernel_stack_top.as_u64()); } else { note_fact(DispatchLogFact::UserKernelStackMissing); } @@ -1505,7 +1317,9 @@ fn restore_userspace_thread_context( signal_termination_info = Some(notification); setup_idle_return(interrupt_frame); crate::task::scheduler::switch_to_idle(); - trace_dispatch_abandon(DispatchAbandonSite::IdleSignalTerminatedUser); + trace_dispatch_abandon( + DispatchAbandonSite::IdleSignalTerminatedUser, + ); // Don't return here - fall through to handle notification } crate::signal::delivery::SignalDeliveryResult::Delivered => { @@ -1515,7 +1329,9 @@ fn restore_userspace_thread_context( crate::task::scheduler::set_need_resched(); setup_idle_return(interrupt_frame); crate::task::scheduler::switch_to_idle(); - trace_dispatch_abandon(DispatchAbandonSite::IdleProcessTerminatedUser); + trace_dispatch_abandon( + DispatchAbandonSite::IdleProcessTerminatedUser, + ); } } crate::signal::delivery::SignalDeliveryResult::NoAction => {} @@ -1533,12 +1349,6 @@ fn restore_userspace_thread_context( crate::signal::delivery::notify_parent_of_termination_deferred(¬ification); } } - } else { - log::error!( - "CRITICAL: Could not acquire process manager lock to restore context for thread {}. \ - Interrupt frame NOT modified - will return to previous thread instead!", - thread_id - ); } } @@ -1552,26 +1362,26 @@ fn setup_first_userspace_entry( // Phase 1: resolve every fallible dependency before touching the return frame. let mut manager_guard = match process_manager_guard.or_else(crate::process::try_manager) { Some(guard) if guard.is_some() => guard, - _ => return FirstUserspaceEntry::Aborted("process manager unavailable"), + _ => return FirstUserspaceEntry::Aborted, }; let (_, process) = match manager_guard .as_mut() .and_then(|manager| manager.find_process_by_thread_mut(thread_id)) { Some(found) => found, - None => return FirstUserspaceEntry::Aborted("process lookup failed"), + None => return FirstUserspaceEntry::Aborted, }; let cr3_value = match process.cr3_value() { Some(value) => value, - None => return FirstUserspaceEntry::Aborted("process CR3 unavailable"), + None => return FirstUserspaceEntry::Aborted, }; let thread = match process.main_thread.as_ref() { Some(thread) => thread, - None => return FirstUserspaceEntry::Aborted("thread kernel stack unavailable"), + None => return FirstUserspaceEntry::Aborted, }; let kernel_stack_top = match thread.kernel_stack_top { Some(stack_top) => stack_top, - None => return FirstUserspaceEntry::Aborted("thread kernel stack unavailable"), + None => return FirstUserspaceEntry::Aborted, }; let entry_rip = thread.context.rip; let user_rsp = thread.context.rsp; @@ -1634,14 +1444,6 @@ fn setup_first_userspace_entry( let flags_ptr = &mut frame.cpu_flags as *mut x86_64::registers::rflags::RFlags as *mut u64; *flags_ptr = 0x202; // Bit 1=1 (required), IF=1 (bit 9) - - log::info!( - "RING3_ENTRY: RIP={:#x}, RSP={:#x}, CS={:#x}, SS={:#x}", - frame.instruction_pointer.as_u64(), - frame.stack_pointer.as_u64(), - frame.code_segment.0, - frame.stack_segment.0 - ); }); } @@ -1663,13 +1465,6 @@ fn setup_first_userspace_entry( saved_regs.r14 = 0; saved_regs.r15 = 0; - // DEBUG: Log that registers were zeroed for first entry - log::info!("FIRST_ENTRY t{}: zeroed all registers", thread_id); - - log::info!( - "First userspace entry setup complete for thread {}", - thread_id - ); FirstUserspaceEntry::Installed } @@ -1745,7 +1540,9 @@ fn check_and_deliver_signals_for_current_thread( crate::task::scheduler::set_need_resched(); setup_idle_return(interrupt_frame); crate::task::scheduler::switch_to_idle(); - trace_dispatch_abandon(DispatchAbandonSite::IdleProcessTerminatedOnReturn); + trace_dispatch_abandon( + DispatchAbandonSite::IdleProcessTerminatedOnReturn, + ); } } crate::signal::delivery::SignalDeliveryResult::NoAction => {} diff --git a/kernel/src/main.rs b/kernel/src/main.rs index 26d3010df..59efa922d 100644 --- a/kernel/src/main.rs +++ b/kernel/src/main.rs @@ -1219,10 +1219,10 @@ fn kernel_main_continue() -> ! { // This is the last point in the x86 boot where the registry CAN be // dispatched: `run_staged_tests` spawns one kthread per subsystem and // `kthread_join`s them, so it needs preemption enabled, and the boot thread - // has to still be running. Both stop being true a few lines below - the - // `preempt_disable()` immediately after this takes the scheduling brake, and - // the boot thread then strands inside the disk-backed `get_test_binary()` - // busy-wait in `test_exec::test_direct_execution()` and never returns. + // has to still be running. The `preempt_disable()` below takes the + // scheduling brake. Completion now retains that brake for idle-task disk + // waits (508), so the test_exec registration block can return, but joining + // the registry workers still requires this earlier, preemptible site. // // The historical call site sat next to `preempt_enable()` several hundred // lines further down, past both of those. It was therefore unreachable, and @@ -1303,15 +1303,14 @@ fn kernel_main_continue() -> ! { // preempt_disable() is the brake here, not interrupts::disable(), because // the disk-backed test binaries loaded in the block below need VirtIO block // IRQ completions: interrupts stay hardware-enabled and preempt_count gates - // scheduling instead. PRECONDITION 7 further below checks that real - // invariant. NOTE: real boot testing shows the timer interrupt can still - // switch away from the boot thread during the busy-spin disk-completion - // wait in this window (a pre-existing gap between preempt_count and this - // kernel's actual can_schedule() logic, which this change neither - // introduces nor closes - see the PR that added this comment for the - // investigation notes and the recommended follow-up RCA). + // scheduling instead. PRECONDITION 7 checks that invariant. Completion's + // idle-task wait retains the brake and uses a masked check plus STI; HLT: + // IRQs can complete disk requests without donating boot's continuation. kernel::per_cpu::preempt_disable(); + #[cfg(all(feature = "testing", not(feature = "interactive")))] + kernel::boot::disk_wait_oracle::begin(); + // RING3_SMOKE: Create userspace process early for CI validation // Must be done before int3() which might hang in CI // @@ -2081,6 +2080,8 @@ fn kernel_main_continue() -> ! { // Test FbInfo syscall (framebuffer information) log::info!("=== GRAPHICS TEST: FbInfo syscall ==="); test_exec::test_fbinfo(); + kernel::boot::disk_wait_oracle::tests_completed(); + serial_println!("[TEST_EXEC_BLOCK_COMPLETE:x86:calls=64]"); } // NOTE: Premature success markers removed - tests must verify actual execution @@ -2235,9 +2236,8 @@ fn kernel_main_continue() -> ! { // Test our clock_gettime implementation BEFORE enabling preemption. // Interrupts are already hardware-enabled at this point (see the first - // RING3_SMOKE block above); preemption is intended to still be disabled - // via preempt_disable() called there (see that comment for a known gap: - // the timer can still switch away during a disk-completion busy-wait). + // RING3_SMOKE block above); preemption remains disabled by the bracket + // there, including Completion's idle-task IRQ wait. log::info!("Testing clock_gettime syscall implementation..."); clock_gettime_test::test_clock_gettime(); log::info!("✅ clock_gettime tests passed"); @@ -2257,6 +2257,9 @@ fn kernel_main_continue() -> ! { #[cfg(all(feature = "btrt", not(feature = "testing")))] kernel::test_framework::btrt::finalize(); + #[cfg(all(feature = "testing", not(feature = "interactive")))] + kernel::boot::disk_wait_oracle::finish(); + // Release the scheduling brake taken in the first RING3_SMOKE block // above (see its preempt_disable() comment) - this is the true, // intended start of preemption for userspace processes registered diff --git a/kernel/src/per_cpu.rs b/kernel/src/per_cpu.rs index 00a652add..de0f99a13 100644 --- a/kernel/src/per_cpu.rs +++ b/kernel/src/per_cpu.rs @@ -17,14 +17,14 @@ use crate::arch_impl::PerCpuOps; // Import HAL constants - single source of truth for per-CPU offsets use crate::arch_impl::current::constants::{ - DISPATCH_MARK_INVALID, DISPATCH_MARK_VALID, PERCPU_CPU_ID_OFFSET, - PERCPU_CURRENT_THREAD_OFFSET, PERCPU_DISPATCH_MARK_RIP_OFFSET, PERCPU_DISPATCH_MARK_RSP_OFFSET, + DISPATCH_MARK_INVALID, DISPATCH_MARK_VALID, PERCPU_CPU_ID_OFFSET, PERCPU_CURRENT_THREAD_OFFSET, + PERCPU_DISPATCH_MARK_RIP_OFFSET, PERCPU_DISPATCH_MARK_RSP_OFFSET, PERCPU_DISPATCH_MARK_STATE_OFFSET, PERCPU_DISPATCH_MARK_TID_OFFSET, - PERCPU_DISPATCH_MARK_WAIT_ITERS_OFFSET, - PERCPU_EXCEPTION_CLEANUP_CONTEXT_OFFSET, PERCPU_IDLE_THREAD_OFFSET, PERCPU_KERNEL_CR3_OFFSET, - PERCPU_KERNEL_STACK_TOP_OFFSET, PERCPU_NEED_RESCHED_OFFSET, PERCPU_NEXT_CR3_OFFSET, - PERCPU_PREEMPT_COUNT_OFFSET, PERCPU_SAVED_PROCESS_CR3_OFFSET, PERCPU_SOFTIRQ_PENDING_OFFSET, - PERCPU_TSS_OFFSET, PERCPU_USER_RSP_SCRATCH_OFFSET, + PERCPU_DISPATCH_MARK_WAIT_ITERS_OFFSET, PERCPU_EXCEPTION_CLEANUP_CONTEXT_OFFSET, + PERCPU_IDLE_THREAD_OFFSET, PERCPU_KERNEL_CR3_OFFSET, PERCPU_KERNEL_STACK_TOP_OFFSET, + PERCPU_NEED_RESCHED_OFFSET, PERCPU_NEXT_CR3_OFFSET, PERCPU_PREEMPT_COUNT_OFFSET, + PERCPU_SAVED_PROCESS_CR3_OFFSET, PERCPU_SOFTIRQ_PENDING_OFFSET, PERCPU_TSS_OFFSET, + PERCPU_USER_RSP_SCRATCH_OFFSET, }; // Global tracking counters for irq_enter/irq_exit balance analysis @@ -549,7 +549,9 @@ pub fn note_wait_loop_park() { return; } unsafe { - (*thread_ptr).wait_loop_iters.fetch_add(1, Ordering::Relaxed); + (*thread_ptr) + .wait_loop_iters + .fetch_add(1, Ordering::Relaxed); } } @@ -1365,18 +1367,19 @@ pub fn can_schedule(saved_cs: u64) -> bool { let current_preempt = preempt_count(); let returning_to_userspace = (saved_cs & 3) == 3; + // Match the interrupt-return switch gate before the blocked/exception arms: + // a kernel continuation holding the count cannot donate its CPU. Completion + // must preserve boot's count; testing count > 0 is not a syscall predicate. + if !returning_to_userspace && current_preempt & 0x0fff_ffff != 0 { + return false; + } + // CRITICAL: Check if current_thread is set before accessing scheduler. // During early boot or before first context switch, gs:[8] may be NULL. // Timer interrupts can fire before any thread is set, causing a page fault // at CR2=0x8 (offset 8 in PerCpuData = current_thread pointer). if current_thread().is_none() { // No current thread set yet - cannot schedule - static EARLY_RETURN_COUNT: core::sync::atomic::AtomicU64 = - core::sync::atomic::AtomicU64::new(0); - let count = EARLY_RETURN_COUNT.fetch_add(1, core::sync::atomic::Ordering::Relaxed); - if count < 10 { - log::warn!("can_schedule: returning false - current_thread is None"); - } return false; } @@ -1392,72 +1395,29 @@ pub fn can_schedule(saved_cs: u64) -> bool { // Also allow scheduling if we're in exception cleanup context let in_exception_cleanup = in_exception_cleanup_context(); - // Check if current thread is blocked or terminated. This must recognize - // every ThreadState the scheduler treats as "not really running" -- - // schedule() and unblock() (task/scheduler.rs) both switch on the same - // five variants (Blocked, BlockedOnSignal, BlockedOnChildExit, - // BlockedOnTimer, BlockedOnIO); this check used to be missing - // BlockedOnTimer and BlockedOnIO, which meant a thread parked in - // sys_nanosleep's or a device wait's HLT loop was never recognized as - // blocked here. On a single CPU, with nothing else forcing a reschedule - // (not returning to userspace, not idle, need_resched already consumed), - // that starved every OTHER ready thread indefinitely -- reproduced by - // #673's init, whose infinite reap loop nanosleep()s between waitpid - // attempts and is the first x86 production thread to ever call nanosleep - // in a retry loop while a sibling thread needs the CPU. + // Parked threads need dispatch even without a fresh quantum request. + // 673 / 718 added BlockedOnTimer; retain that admission set here. + // BlockedOnIO continues through the count-zero need_resched arm below. + // Unlike the old expression alone, the early kernel-count guard above + // also covers these blocked and exception-cleanup arms. It matches the + // later interrupt-return guard rather than relying on that second check. // - // This check deliberately recognizes BlockedOnTimer (the variant #673's - // starvation actually needs -- nanosleep()) but NOT BlockedOnIO (#673 - // review, M5, narrow fix chosen over widening both). The property that - // makes the other four variants (Blocked, BlockedOnSignal, - // BlockedOnChildExit, Terminated) unconditionally safe to recognize here - // is that they all feed the SAME `current_thread_blocked_or_terminated` - // term below, which is OR'd ahead of every `current_preempt == 0` guard - // in `result` -- so all five variants, were BlockedOnIO added, would - // bypass that guard identically; none is special-cased relative to the - // others by this expression's structure (#673 review, MA1: an earlier - // version of this comment claimed BlockedOnIO alone bypassed the guard, - // which the expression itself disproves). - // - // The real reason BlockedOnIO stays out is narrower: it is the ONLY one - // of the five states the boot thread can hold while #673's own - // production-init brake is up (`launch_x86_production_init()`'s caller - // in main.rs holds `preempt_disable()` across the disk-backed ext2 read - // that loads `/sbin/init`) -- the boot thread does not nanosleep, wait - // on a child, or receive a signal during that read. Today the one path - // that sets BlockedOnIO for that read - // (`Completion::wait_timeout_uninterruptible()`, drivers/virtio/block.rs - // -> task/completion.rs) already calls `preempt_enable()` of its own - // accord before setting the state and restores the brake afterward, so - // recognizing it here would not currently defeat that specific brake -- - // but other BlockedOnIO producers on x86 (the WaitQueueHead-based - // `prepare_to_wait(BlockedOnIO)` call sites in - // drivers/virtio/{block,block_mmio,sound,sound_mmio,gpu_pci}.rs and - // syscall/graphics.rs) make no such promise, and nothing here proves - // every future BlockedOnIO producer will. Recognizing it unconditionally - // would trade a proof for an observation. Leaving it out does not reopen - // anything: it was never recognized here before #673 either. This is the - // documented, still-open gap between preempt_count and scheduling - // admission during a boot-thread disk-completion wait (#666, #508); if a - // future device-wait starvation needs BlockedOnIO recognized here too, - // that is a #666/#508 fix in its own right (establishing the invariant - // across every producer first), not a side effect of this one. - // When a thread blocks, it enters an HLT loop waiting for an interrupt. - // When a thread terminates, it sets need_resched and expects immediate switch. - // The timer interrupt should be able to switch to another thread. - let current_thread_blocked_or_terminated = - crate::task::scheduler::with_scheduler(|sched| { - if let Some(current) = sched.current_thread_mut() { - current.state == crate::task::thread::ThreadState::BlockedOnSignal - || current.state == crate::task::thread::ThreadState::BlockedOnChildExit - || current.state == crate::task::thread::ThreadState::BlockedOnTimer - || current.state == crate::task::thread::ThreadState::Blocked - || current.state == crate::task::thread::ThreadState::Terminated - } else { - false - } - }) - .unwrap_or(false); + // 508's idle boot wait is different from a parked worker: Completion + // retains its caller's count and waits for an IRQ without publishing idle + // as BlockedOnIO. The old Completion predicate mistook boot's held count + // for syscall context and released it, admitting an idle-kernel switch. + let current_thread_blocked_or_terminated = crate::task::scheduler::with_scheduler(|sched| { + if let Some(current) = sched.current_thread_mut() { + current.state == crate::task::thread::ThreadState::BlockedOnSignal + || current.state == crate::task::thread::ThreadState::BlockedOnChildExit + || current.state == crate::task::thread::ThreadState::BlockedOnTimer + || current.state == crate::task::thread::ThreadState::Blocked + || current.state == crate::task::thread::ThreadState::Terminated + } else { + false + } + }) + .unwrap_or(false); // Check if need_resched is set - kernel threads use yield_current() which sets this flag let need_resched_set = crate::task::scheduler::is_need_resched(); @@ -1476,34 +1436,6 @@ pub fn can_schedule(saved_cs: u64) -> bool { || (current_preempt == 0 && (returning_to_userspace || returning_to_idle_kernel)) || (current_preempt == 0 && need_resched_set); - // DEBUG: Print why can_schedule returns false (every 1000 calls) - static CAN_SCHED_DEBUG_COUNT: core::sync::atomic::AtomicU32 = - core::sync::atomic::AtomicU32::new(0); - let dbg_count = CAN_SCHED_DEBUG_COUNT.fetch_add(1, core::sync::atomic::Ordering::Relaxed); - if !result && dbg_count % 1000 == 0 { - // Raw serial output to debug - use x86_64::instructions::port::Port; - unsafe { - let mut port: Port = Port::new(0x3F8); - // Print: 'p' + preempt_count_hex + 'r' + (need_resched ? '1' : '0') - port.write(b'p'); - let p = current_preempt as u8; - port.write(if (p >> 4) < 10 { - b'0' + (p >> 4) - } else { - b'A' + (p >> 4) - 10 - }); - port.write(if (p & 0xF) < 10 { - b'0' + (p & 0xF) - } else { - b'A' + (p & 0xF) - 10 - }); - port.write(b'r'); - port.write(if need_resched_set { b'1' } else { b'0' }); - port.write(b' '); - } - } - result } diff --git a/kernel/src/syscall/handlers.rs b/kernel/src/syscall/handlers.rs index fbc958f25..37c5ffb91 100644 --- a/kernel/src/syscall/handlers.rs +++ b/kernel/src/syscall/handlers.rs @@ -246,6 +246,13 @@ pub fn sys_exit(exit_code: i32) -> SyscallResult { crate::task::exit_tally::FailureList::new(failures, nonzero) ); + #[cfg(all( + target_arch = "x86_64", + feature = "testing", + not(feature = "interactive") + ))] + crate::boot::disk_wait_oracle::report(); + if nonzero == 0 { log::info!("====================================="); log::info!("✅ USERSPACE EXECUTION SUCCESSFUL ✅"); diff --git a/kernel/src/task/completion.rs b/kernel/src/task/completion.rs index c8d34ba13..4cff4e73a 100644 --- a/kernel/src/task/completion.rs +++ b/kernel/src/task/completion.rs @@ -140,6 +140,33 @@ fn syscall_sleep_path_available() -> bool { } } +/// The x86 boot continuation is the idle task, not a sleepable worker. +/// Keep its scheduling brake while allowing IRQ completion and timeout ticks. +/// The masked check plus STI; HLT closes the completion-before-halt race. +#[cfg(target_arch = "x86_64")] +fn wait_idle_completion(completion: &Completion, expected_token: u32, timeout_ns: u64) -> bool { + use x86_64::instructions::interrupts; + + interrupts::without_interrupts(|| { + crate::per_cpu::preempt_disable(); + let (secs, nanos) = crate::time::get_monotonic_time_ns(); + let deadline = (secs * 1_000_000_000 + nanos).saturating_add(timeout_ns); + let completed = loop { + if completion.done.load(Ordering::Acquire) == expected_token { + break true; + } + let (secs, nanos) = crate::time::get_monotonic_time_ns(); + if secs * 1_000_000_000 + nanos >= deadline { + break false; + } + interrupts::enable_and_hlt(); + interrupts::disable(); + }; + crate::per_cpu::preempt_enable(); + completed + }) +} + /// Completion primitive — pairs one waiter thread with one ISR. pub struct Completion { /// 0 = not done, otherwise the completion token published by `complete()`. @@ -219,6 +246,16 @@ impl Completion { // fall through to the polling path below. let tid = crate::task::scheduler::current_thread_id(); + // Idle's saved boot continuation is discarded after Ring 3 starts. + // preempt_count > 0 does not identify a syscall: boot holds it too. + // Do not release that caller's brake or publish idle as BlockedOnIO. + #[cfg(target_arch = "x86_64")] + if crate::task::scheduler::with_scheduler(|sched| Some(sched.idle_thread()) == tid) + == Some(true) + { + return Ok(wait_idle_completion(self, expected_token, timeout_ns)); + } + if let Some(tid) = tid { // Store TID so complete() can wake us. self.waiter.store(tid, Ordering::Release); diff --git a/kernel/src/tracing/providers/teardown.rs b/kernel/src/tracing/providers/teardown.rs index 10863ba7f..88f4620d5 100644 --- a/kernel/src/tracing/providers/teardown.rs +++ b/kernel/src/tracing/providers/teardown.rs @@ -4327,16 +4327,7 @@ pub fn clone_admission_oracle_test() -> crate::test_framework::registry::TestRes fn published_dispatch_refused(process: &crate::process::Process) -> bool { #[cfg(target_arch = "x86_64")] { - let thread_id = process - .main_thread - .as_ref() - .map(|thread| thread.id) - .unwrap_or(0); - crate::interrupts::context_switch::refuse_unpublished_dispatch( - process, - thread_id, - process.id.as_u64(), - ) + crate::interrupts::context_switch::refuse_unpublished_dispatch(process) } #[cfg(target_arch = "aarch64")] { diff --git a/scripts/score-boot-disk-wait.py b/scripts/score-boot-disk-wait.py new file mode 100644 index 000000000..2c2e83e97 --- /dev/null +++ b/scripts/score-boot-disk-wait.py @@ -0,0 +1,29 @@ +#!/usr/bin/env python3 +"""Score issue 508's boot continuation evidence, including absent/duplicate markers.""" +import re +import sys +from pathlib import Path + +PREFIX = "[BOOT_DISK_WAIT_ORACLE:" +FINAL = "[TEST_EXEC_BLOCK_COMPLETE:x86:calls=64]" +PASS = "[BOOT_DISK_WAIT_ORACLE:x86:switched_away=0:tests_completed=1:PASS]" + + +def score(text): + markers = re.findall(r"\[BOOT_DISK_WAIT_ORACLE:[^\]\r\n]*\]", text) + return (text.count(PREFIX) == 1 and markers == [PASS] + and text.count(FINAL) == 1 + and text.index(FINAL) < text.index(PASS)) + + +def main(): + text = "\n".join(Path(path).read_text(errors="replace") for path in sys.argv[1:]) + if not score(text): + print("boot disk wait oracle: FAIL (requires exactly one completed, unswitched boot window)") + return 1 + print("boot disk wait oracle: PASS (switched_away=0 tests_completed=1)") + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/test-boot-disk-wait-mutations.py b/scripts/test-boot-disk-wait-mutations.py new file mode 100644 index 000000000..7f83819f8 --- /dev/null +++ b/scripts/test-boot-disk-wait-mutations.py @@ -0,0 +1,44 @@ +#!/usr/bin/env python3 +"""Run 508 source ratchets sequentially; restore each source in finally. + +Invoke from the repository root with lane-local TMPDIR and BREENIX_GATE_TMP. +The unmodified 48610ba1 counter is the review's V-1 regression specimen. +""" +from pathlib import Path +import os +import subprocess + +root = Path.cwd() +log_dir = Path(os.environ.get('TMPDIR', root / '.tmp')) +log_dir.mkdir(parents=True, exist_ok=True) +env = dict(os.environ, TMPDIR=str(log_dir), BREENIX_GATE_TMP=os.environ.get('BREENIX_GATE_TMP', str(root / '.gate-tmp'))) +files = ['kernel/src/interrupts/context_switch.rs', 'kernel/src/per_cpu.rs', 'kernel/src/task/completion.rs', 'kernel/src/main.rs'] +original = {f: Path(f).read_text() for f in files} +switch = files[0] +per = files[1] +completion = files[2] +main = files[3] +cases = [ + ('V1-original-selected-counter', switch, lambda s: subprocess.check_output(['git', 'show', '48610ba1:' + switch], text=True), 'departure'), + ('V1-ignore-rollback', switch, lambda s: s.replace('dispatched_tid != old_thread_id', 'dispatched_tid == old_thread_id'), 'departure'), + ('V2-switch-serial', switch, lambda s: s.replace(' // Update per-CPU current thread and TSS.RSP0', ' raw_serial_str("[SW]");\n // Update per-CPU current thread and TSS.RSP0', 1), 'switch_and_admission'), + ('V2-admission-log', per, lambda s: s.replace('pub fn can_schedule(saved_cs: u64) -> bool {', 'pub fn can_schedule(saved_cs: u64) -> bool {\n log::warn!("probe");'), 'switch_and_admission'), + ('V2-admission-port', per, lambda s: s.replace('pub fn can_schedule(saved_cs: u64) -> bool {', "pub fn can_schedule(saved_cs: u64) -> bool {\n port.write(b'p');"), 'switch_and_admission'), + ('wait-busy-spin', completion, lambda s: s.replace('enable_and_hlt()', 'spin_loop()'), 'boot_completion'), + ('admission-remove-count', per, lambda s: s.replace('if !returning_to_userspace && current_preempt & 0x0fff_ffff != 0', 'if false'), 'kernel_schedule_admission'), + ('final-marker-removed', main, lambda s: s.replace('disk_wait_oracle::tests_completed()', 'disk_wait_oracle::report()'), 'oracle_measures'), +] +for name, path, mutate, test_filter in cases: + try: + mutant = mutate(original[path]) + assert mutant != original[path], name + Path(path).write_text(mutant) + proc = subprocess.run(['bash', 'scripts/run-structure-tests.sh', 'boot_disk_wait_structure', test_filter], env=env, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True) + (log_dir / f'mutation-{name}.log').write_text(proc.stdout) + print(f'{name}: exit {proc.returncode}', flush=True) + assert proc.returncode == 101, (name, proc.stdout) + finally: + Path(path).write_text(original[path]) +for path, source in original.items(): + assert Path(path).read_text() == source +print('8/8 mutants rejected; 4/4 source files restored') diff --git a/scripts/x86-gate-verdict.sh b/scripts/x86-gate-verdict.sh index 93261a755..9c20587de 100755 --- a/scripts/x86-gate-verdict.sh +++ b/scripts/x86-gate-verdict.sh @@ -25,6 +25,8 @@ for serial_log in "$@"; do [[ -r "$serial_log" ]] || fail "serial log is not readable: $serial_log" done +python3 "$SCRIPT_DIR/score-boot-disk-wait.py" "$@" || exit $? + python3 "$SCRIPT_DIR/score-softirq-deferral.py" "$@" || exit $? [[ -r "$ALLOWLIST_PATH" ]] || fail "allowlist is not readable: $ALLOWLIST_PATH" diff --git a/tests/boot_disk_wait_structure.rs b/tests/boot_disk_wait_structure.rs new file mode 100644 index 000000000..70b445085 --- /dev/null +++ b/tests/boot_disk_wait_structure.rs @@ -0,0 +1,213 @@ +//! Issue 508: idle boot cannot donate its continuation to ordinary scheduling. +use std::{fs, path::PathBuf}; +fn read(path: &str) -> String { + fs::read_to_string(PathBuf::from(env!("CARGO_MANIFEST_DIR")).join(path)).unwrap() +} +#[test] +fn boot_completion_preserves_brake_and_uses_atomic_check_halt() { + let source = read("kernel/src/task/completion.rs"); + let wait = source + .split("fn wait_idle_completion(") + .nth(1) + .expect("idle completion wait missing") + .split("/// Completion primitive") + .next() + .unwrap(); + assert!(wait.contains("preempt_disable()")); + assert!(wait.contains("without_interrupts(||")); + assert!(wait.contains("self.done") || wait.contains("completion.done")); + assert!(wait.contains("enable_and_hlt()")); + assert!(!wait.contains("spin_loop()")); + assert!(!wait.contains("block_current_for_io")); + let inner = source.split("fn wait_timeout_inner(").nth(1).unwrap(); + assert!( + inner.find("wait_idle_completion(self").unwrap() + < inner.find("self.waiter.store(tid").unwrap() + ); +} +#[test] +fn kernel_schedule_admission_checks_the_count_before_exceptions() { + let source = read("kernel/src/per_cpu.rs"); + let body = source.split("pub fn can_schedule(").nth(1).unwrap(); + assert!( + body.find("if !returning_to_userspace && current_preempt & 0x0fff_ffff != 0") + .unwrap() + < body.find("in_exception_cleanup_context()").unwrap() + ); +} +#[test] +fn oracle_measures_switches_and_final_test_block_return() { + let main = read("kernel/src/main.rs"); + assert!( + main.find("disk_wait_oracle::begin()").unwrap() + < main + .find("\n test_exec::test_direct_execution();") + .unwrap() + ); + assert!( + main.find("test_exec::test_fbinfo()").unwrap() + < main.find("disk_wait_oracle::tests_completed()").unwrap() + ); + let switch = read("kernel/src/interrupts/context_switch.rs"); + assert!( + switch.find("if old_thread_id == new_thread_id").unwrap() + < switch.find("SWITCHED_AWAY.fetch_add").unwrap() + ); + assert!(read("scripts/x86-gate-verdict.sh").contains("score-boot-disk-wait.py")); +} + +#[test] +fn scorer_rejects_mutation_missing_duplicate_and_unfinished_evidence() { + let status = std::process::Command::new("python3") + .args([ + "-c", + r#" +import importlib.util +from pathlib import Path +p = Path('scripts/score-boot-disk-wait.py') +spec = importlib.util.spec_from_file_location('oracle', p) +m = importlib.util.module_from_spec(spec) +spec.loader.exec_module(m) +assert m.score(m.FINAL + m.PASS) +assert not m.score(m.PASS) +for bad in ['', m.PASS + m.PASS, + m.PASS.replace('switched_away=0', 'switched_away=1'), + m.PASS.replace('tests_completed=1', 'tests_completed=0'), + m.PASS.replace(':PASS]', ':FAIL]'), + m.PASS + m.PREFIX, + m.PASS.replace('x86:', 'aarch64:')]: + assert not m.score(m.FINAL + bad), bad +"#, + ]) + .current_dir(env!("CARGO_MANIFEST_DIR")) + .status() + .unwrap(); + assert!(status.success()); +} + +#[test] +fn departure_counter_observes_dispatch_result_after_rollback() { + let source = read("kernel/src/interrupts/context_switch.rs"); + let caller = source + .split("pub extern \"C\" fn check_need_resched_and_switch(") + .nth(1) + .unwrap(); + let call = caller.find(" switch_to_thread(").unwrap(); + let count = caller.find("SWITCHED_AWAY.fetch_add").unwrap(); + assert!( + call < count, + "selected dispatch is not a completed departure" + ); + let observation = &caller[call..count]; + assert!(observation.contains("current_thread_id_lock_free()")); + assert!(observation.contains("dispatched_tid != old_thread_id")); + assert!(observation.contains("BOOT_TID.load(Ordering::Acquire) == old_thread_id")); +} + +#[test] +fn switch_and_admission_have_no_text_output() { + let switch = read("kernel/src/interrupts/context_switch.rs"); + let per_cpu = read("kernel/src/per_cpu.rs"); + let admission = per_cpu + .split("pub fn can_schedule(") + .nth(1) + .unwrap() + .split("/// Get per-CPU base address") + .next() + .unwrap(); + for source in [&switch[..], admission] { + for line in source + .lines() + .filter(|line| !line.trim_start().starts_with("//")) + { + for forbidden in [ + "log::trace!", + "log::debug!", + "log::info!", + "log::warn!", + "log::error!", + "raw_serial_", + "serial_print", + "Port::new", + "port.write(", + ] { + assert!( + !line.contains(forbidden), + "text output in switch/admission: {line}" + ); + } + } + } +} + +#[test] +fn resolved_departure_block_rejects_tls_rollback_and_counts_departure() { + let source = read("kernel/src/interrupts/context_switch.rs"); + let observation = source + .split("// Observe the resolved dispatch,") + .nth(1) + .unwrap(); + let block = observation.split(" // #772:").next().unwrap(); + let block = &block[block.find(" #[cfg").unwrap()..]; + let harness = format!( + r#" +use std::sync::atomic::{{AtomicU64, Ordering}}; +mod boot {{ pub mod disk_wait_oracle {{ + use std::sync::atomic::AtomicU64; + pub static BOOT_TID: AtomicU64 = AtomicU64::new(42); + pub static SWITCHED_AWAY: AtomicU64 = AtomicU64::new(0); + pub static SWITCH_PREEMPT: AtomicU64 = AtomicU64::new(u64::MAX); +}} }} +static CURRENT: AtomicU64 = AtomicU64::new(42); +mod per_cpu {{ + pub fn current_thread_id_lock_free() -> Option {{ + match super::CURRENT.load(super::Ordering::Relaxed) {{ 0 => None, id => Some(id) }} + }} +}} +fn observe(old_thread_id: u64, outgoing_preempt: u64) {{ {block} }} +fn main() {{ + use boot::disk_wait_oracle::*; + // TLS rollback restores boot's identity before observation. + observe(42, 7); + assert_eq!(SWITCHED_AWAY.load(Ordering::Acquire), 0); + assert_eq!(SWITCH_PREEMPT.load(Ordering::Relaxed), u64::MAX); + CURRENT.store(43, Ordering::Relaxed); + observe(42, 7); + assert_eq!(SWITCHED_AWAY.load(Ordering::Acquire), 1); + assert_eq!(SWITCH_PREEMPT.load(Ordering::Relaxed), 7); + observe(43, 9); + CURRENT.store(0, Ordering::Relaxed); + observe(42, 9); + CURRENT.store(42, Ordering::Relaxed); + observe(42, 9); + assert_eq!(SWITCHED_AWAY.load(Ordering::Acquire), 1); + assert_eq!(SWITCH_PREEMPT.load(Ordering::Relaxed), 7); +}} +"# + ); + let dir = std::env::temp_dir().join(format!("boot-departure-{}", std::process::id())); + fs::create_dir_all(&dir).unwrap(); + let input = dir.join("departure.rs"); + let binary = dir.join("departure"); + fs::write(&input, harness).unwrap(); + let compile = std::process::Command::new("rustc") + .args(["--edition=2021", "--cfg", "feature=\"testing\""]) + .arg(&input) + .arg("-o") + .arg(&binary) + .output() + .unwrap(); + assert!( + compile.status.success(), + "{}", + String::from_utf8_lossy(&compile.stderr) + ); + assert!( + compile.stderr.is_empty(), + "{}", + String::from_utf8_lossy(&compile.stderr) + ); + let run = std::process::Command::new(&binary).status().unwrap(); + fs::remove_dir_all(dir).unwrap(); + assert!(run.success()); +} diff --git a/tests/context_restore_structure.rs b/tests/context_restore_structure.rs index dd4acf753..31b708043 100644 --- a/tests/context_restore_structure.rs +++ b/tests/context_restore_structure.rs @@ -1516,12 +1516,8 @@ fn validate_blocked_syscall_dispatch_resolves_cr3(source: &str) -> Result<(), St let no_cr3_mask = code_mask(no_cr3_arm); let normalized_arm = normalized_code(no_cr3_arm); let compact_arm = normalized_arm.replace(' ', ""); - if !compact_arm.contains("USERSPACE_DISPATCH_NO_CR3_REFUSED.fetch_add") - || !compact_arm.contains("USERSPACE_DISPATCH_NO_CR3_LOGGED.swap") - || identifier_offsets(no_cr3_arm, &no_cr3_mask, "raw_serial_str").is_empty() - || identifier_offsets(no_cr3_arm, &no_cr3_mask, "raw_serial_u64").len() < 2 - { - return Err("unavailable CR3 arm lacks the guarded raw breadcrumb".to_string()); + if !compact_arm.contains("USERSPACE_DISPATCH_NO_CR3_REFUSED.fetch_add") { + return Err("unavailable CR3 arm lacks the refusal counter".to_string()); } let with_thread_mut_source = identifier_offsets(no_cr3_arm, &no_cr3_mask, "with_thread_mut") diff --git a/tests/critical_path_logging_census_structure.rs b/tests/critical_path_logging_census_structure.rs index a730dc536..6b7cf3f08 100644 --- a/tests/critical_path_logging_census_structure.rs +++ b/tests/critical_path_logging_census_structure.rs @@ -1,35 +1,20 @@ //! Structural ratchet for `scripts/check-critical-path-violations.sh`. //! -//! The shell script greps a fixed file list for a fixed spelling list and -//! exits 1 today (119 distinct call sites across 9 files -- 135 at the -//! classification snapshot in `docs/planning/green-program/gates/ -//! CRITICAL-PATH-DEBT-2026-09-06.md` §1-4, less the 16 PR-1 of that -//! document's drain plan deleted from -//! `kernel/src/interrupts/context_switch.rs`). It is not -//! wired into any gate, so today the only thing that notices a NEW call -//! creeping in is a human rereading 259 lines of grep output. This suite -//! pins the census in Rust so a per-`(file, item-path)` INCREASE fails a -//! `cargo test` run, the same way `tests/serial_line_atomicity_structure.rs` -//! pins the raw-serial-primitive census and `tests/ -//! capture_path_lock_free_structure.rs` pins the capture path's denylist. -//! The pin is a full `(file, item-path) -> count` exact match, not a -//! one-directional ratchet: a DECREASE at an existing anchor fails the same -//! run, with its own `~ :: (expected N, found N-1)` diff -//! line, so a drain PR has to update the table consciously rather than -//! coast on a stale higher count. See "Direction" in `docs/planning/ -//! green-program/gates/CRITICAL-PATH-DEBT-2026-09-06.md` for the fuller -//! statement of this. +//! 508 review V-2 removes 14 context-switch logger calls and one admission +//! warning from the PR-1 census: 119 -> 104 sites. The shared structure +//! preflight runs this exact item-path census before the boot gates. +//! Both additions and removals require an explicit anchor-table update. //! //! # Two censuses, on purpose //! //! `CRITICAL_PATH_LOG_ANCHORS` pins the shell script's ORIGINAL twelve -//! spellings at 119 -- the number the drain plan's PR ledger tracks PR by +//! spellings at 104 -- the number the drain plan's PR ledger tracks PR by //! PR, 135 before PR-1. A second, WIDER set adds three spellings the //! original denylist //! misses by construction (`serial_print!`, `log_serial_print!`, //! `log::log!` -- each reaches the same blocking serial lock as the //! `serial_println!`/`log::*!` families the narrow list already denies). -//! That wider census is 120 today: the 119 plus exactly one escaped site, +//! That wider census is 105 today: the 104 plus exactly one escaped site, //! `kernel/src/arch_impl/aarch64/exception.rs :: fn sys_write`, a //! `crate::serial_print!` call inside a per-BYTE loop. This same PR widens //! `PROHIBITED_PATTERNS` in the shell script to carry the three new @@ -51,7 +36,7 @@ //! //! `arch_impl/aarch64/context.rs`, `interrupts/timer.rs` and //! `arch_impl/aarch64/percpu.rs` are three of the fourteen checked files -//! that carry NO denylisted call today. 0 of the 47 rows in the anchor +//! that carry NO denylisted call today. 0 of the 39 rows in the anchor //! table name them, so silence from the general census already catches a //! first print there as an unexpected `+` row -- but a `+` row buried in a //! sea of a 9-file diff is easy to misread as "one more example from an @@ -642,14 +627,6 @@ const CRITICAL_PATH_LOG_ANCHORS: &[(&str, &str, usize)] = &[ ("kernel/src/arch_impl/aarch64/exception.rs", "fn handle_syscall", 8), ("kernel/src/arch_impl/aarch64/timer_interrupt.rs", "fn dump_gic_state", 9), ("kernel/src/arch_impl/aarch64/timer_interrupt.rs", "fn init", 9), - ("kernel/src/interrupts/context_switch.rs", "fn check_need_resched_and_switch", 1), - ("kernel/src/interrupts/context_switch.rs", "fn restore_userspace_thread_context", 5), - ("kernel/src/interrupts/context_switch.rs", "fn save_current_thread_context_with_guard", 1), - ("kernel/src/interrupts/context_switch.rs", "fn save_kthread_context", 1), - ("kernel/src/interrupts/context_switch.rs", "fn setup_first_userspace_entry", 3), - ("kernel/src/interrupts/context_switch.rs", "fn setup_idle_return", 1), - ("kernel/src/interrupts/context_switch.rs", "fn switch_to_thread", 2), - ("kernel/src/per_cpu.rs", "fn can_schedule", 1), ("kernel/src/per_cpu.rs", "fn init", 9), ("kernel/src/per_cpu.rs", "fn set_kernel_cr3", 2), ("kernel/src/per_cpu_aarch64.rs", "fn init", 5), @@ -704,7 +681,7 @@ const ESCAPED_SITE: (&str, &str, usize) = ( /// pinned as its own number so a PR that moves rows around without changing /// the total -- or changes the total without saying so -- fails on the number /// the plan is written in, not only on the per-row diff. -const CRITICAL_PATH_LOG_TOTAL: usize = 119; +const CRITICAL_PATH_LOG_TOTAL: usize = 104; fn wider_anchors() -> Vec<(&'static str, &'static str, usize)> { let mut anchors = CRITICAL_PATH_LOG_ANCHORS.to_vec(); diff --git a/tests/dispatch_fact_census_structure.rs b/tests/dispatch_fact_census_structure.rs index 9450c7705..7df001721 100644 --- a/tests/dispatch_fact_census_structure.rs +++ b/tests/dispatch_fact_census_structure.rs @@ -4,7 +4,8 @@ //! The census ratchet next door //! (`tests/critical_path_logging_census_structure.rs`) says the sixteen calls //! are GONE. It does not say whether the facts they carried are still -//! published. This suite is the other half: for each of the sixteen sites, the +//! published. This suite retains 15 publication checks after 508 review V-2 removed +//! the serial-only KernelFrame split. At those retained sites, the //! arm now carries either a `trace_dispatch_abandon(DispatchAbandonSite::…)` //! that already counted it, or exactly one //! `note_fact(DispatchLogFact::…)` in the new sibling family -- and the ten @@ -100,7 +101,7 @@ const FACTS: [(&str, &str); 10] = [ /// print and already counted that arm; ten name a new `DispatchLogFact`. The /// count column is what makes a copy-paste of the wrong variant fail: a /// function that publishes the same fact twice, or drops one of two, moves it. -const SITE_PUBLICATIONS: [(&str, &str, usize); 16] = [ +const SITE_PUBLICATIONS: [(&str, &str, usize); 15] = [ // Already counted before this PR (the print was redundant). ( "check_need_resched_and_switch", @@ -123,10 +124,8 @@ const SITE_PUBLICATIONS: [(&str, &str, usize); 16] = [ "DispatchAbandonSite::IdleRestoreError", 1, ), - // The KernelFrame arm's own split, which `IdleRestoreError` does not - // carry: a lock-free raw-serial marker that was already there beside the - // deleted `log::error!`. - ("restore_userspace_thread_context", "", 1), + // 508 review V-2 removes the serial-only KernelFrame split. The + // IdleRestoreError abandonment publication above remains required. // New this PR. ( "save_current_thread_context_with_guard", diff --git a/tests/dispatch_strand_census_structure.rs b/tests/dispatch_strand_census_structure.rs index b8d785723..cb487f6aa 100644 --- a/tests/dispatch_strand_census_structure.rs +++ b/tests/dispatch_strand_census_structure.rs @@ -97,29 +97,9 @@ fn the_surviving_record_census_in_the_dispatch_path_is_pinned() { } histogram.sort(); - // Moved consciously by PR-1 of the critical-path logging drain - // (docs/planning/green-program/gates/CRITICAL-PATH-DEBT-PR1-2026-09-06.md), - // which deleted the sixteen H1 calls that file's classification table names: - // 2 debug, 10 error and 4 info. 30 -> 14, and the `debug` row is gone - // rather than present with a count of 0, because a level with no records - // is not a histogram row. - // The 9 `trace` records are untouched: `CombinedLogger::log` returns before - // taking any lock on a Trace record, so they emit 0 bytes today, and the - // drain plan classifies them H3 and hands them to a later PR. - assert_eq!( - records.len(), - 14, - "context_switch.rs record census moved: {histogram:?}" - ); - assert_eq!( - histogram, - vec![ - ("error".to_string(), 1), - ("info".to_string(), 4), - ("trace".to_string(), 9), - ], - "context_switch.rs record level histogram moved" - ); + // 508 review V-2 drains the remaining 14 logger calls from this file. + assert!(records.is_empty(), "context_switch.rs logger calls: {histogram:?}"); + } #[test] diff --git a/tests/fixtures/udp-socket-lock-aarch64-serial.txt b/tests/fixtures/udp-socket-lock-aarch64-serial.txt index d121f3f3a..ce408ca9c 100644 --- a/tests/fixtures/udp-socket-lock-aarch64-serial.txt +++ b/tests/fixtures/udp-socket-lock-aarch64-serial.txt @@ -1,7 +1,7 @@ EOS ======================================== Breenix ARM64 Kernel Starting - BUILD_ID: 006a9fbc622ed3 + BUILD_ID: 006a9fec6b0b42 ======================================== [CTX596_ORACLE:ARMED:force_eret=0] @@ -16,7 +16,7 @@ EOS [boot] Initializing Generic Timer... [boot] Timer frequency: 62500000 Hz (62 MHz) [boot] Initializing PL031 RTC... -[boot] Current timestamp: 545625 +[boot] Current timestamp: 604625 [boot] Initializing GIC... [gic] GICR probe 0x080a0000: WAKER=0x00000006 <<< VALID [gic] GICR base mismatch: loader=0x00000000, using=0x080a0000 @@ -49,9 +49,9 @@ EOS [virtio-blk] Searching for block devices... [virtio-blk] Found block device 0 at 0xa003800 [virtio-blk] Device 0 version: 1 -[virtio-blk] Device 0 capacity: 190464 sectors (93 MB) +[virtio-blk] Device 0 capacity: 524288 sectors (256 MB) [virtio-blk] Device 0 queue max size: 1024 -[virtio-blk] Device 0 using v1 (legacy) queue setup at PFN 0x413cf +[virtio-blk] Device 0 using v1 (legacy) queue setup at PFN 0x4099d [virtio-blk] Block MMIO IRQ 76 enabled for device 0 [virtio-blk] Block device 0 initialized successfully [virtio-blk] Initialized 1 block device(s) @@ -105,7 +105,7 @@ NET: Network initialization complete [virtio-net] Enabling IRQ 75 for network device NET: pre-primed NetRx softirq for bootstrap callback re-enable [boot] Initializing filesystem... -[ext2] Using VirtIO block device (190464 sectors) +[ext2] Using VirtIO block device (524288 sectors) [boot] ext2 root filesystem mounted [boot] No home filesystem: No home block device available (expected at device index 3 or 1) (continuing) [boot] devfs initialized at /dev @@ -150,7 +150,7 @@ NET: pre-primed NetRx softirq for bootstrap callback re-enable [boot] Tracing subsystem initialized and enabled [boot] Pre-loading /sbin/init from ext2 (before timer)... [net] ICMP echo reply received from 10.0.2.2 seq=1 -[boot] Init binary pre-loaded: 298664 bytes +[boot] Init binary pre-loaded: 303144 bytes [xhci] post-activation: MSI_EVENT_COUNT=0 EVENT_COUNT=0 POLL_COUNT=0 SPI_ACTIVATED=false [boot] Initializing timer interrupt... [timer] Timer configured for ~1000 Hz (62500 ticks per interrupt) @@ -158,29 +158,29 @@ NET: pre-primed NetRx softirq for bootstrap callback re-enable [boot] Timer interrupt initialized [smp] CPU 0 MPIDR=0x80000000, stack_base=0x43000000 [smp] Probing secondary CPUs via PSCI... -1[smp] CPU 1: PSCI CPU_@O1N success (raw_stAatus=BC0)D -[2@1AsEBeCFmGp] C1PU 2: PSCID CPU_ON suEeFGccess (raw_sta2tus=0) -3@1A[smp] CPU BC3: PSCI CPU_ON success (Draw_statEeFGus=0) -3[gic] EOImode=1 (split EOI/DIR) - non-VMware path +[smp]1 CPU 1: PSCI CPU_ON succ@ess (raw_status=1A0) +[smp] BCPU 2@1A2: PSCCI CPU_ON suDBCcDcess (rawE_staEteus=eF0) +G[smp] 31FCPU 3: @1AGPSCI CPUB_ON2 sCDEeFG3uccess (raw_status=0) [gic] EOImode=1 (split EOI/DIR) - non-VMware path +[gic] EOImode=1 (splitT EO1I/DIR) - non-VMware path [gic] EOImode=1 (split EOI/DIR) - non-VMware path -[smp] CPU 4 attempt 1/4: HVC64 failed (ret=-2), trying HVC32... -[gic] ICC_CTLR_EL1: 0x8c00 -> 0x8c02 (TEOImode=1) -1[gic] ICC_CTLR_EL1: 0x8c00 -> 0x8c02 (EOImode=1) [gic] ICC_CTLR_EL1: 0x8c00 -> 0x8c02 (EOImode=1) +[gic] ICC_CTLR_EL1: 0x8c00 -> 0x8c02 (EOImode=1) +[gic] ICC_CTLR_EL1: 0x8c00 -> 0x8c02 (EOImode=1) +[smp] CPU 4 attempt 1/4: HVC64 failed (ret=-2), trying HVC32... [smp] PSCI CPU_ON failed for CPU 4 after 1 attempts: ret=-2 (MPIDR=0x4 entry=0x400802b8) [smp] CPU 4: PSCI CPU_ON failed (ret=-2), stopping probe -[smp] initialization_watchdog gap_ms=88 local_ceiling_ms=15000 margin_ms=3000 effective_ceiling_ms=20000 +T2[smp] initialization_watchdog gap_ms=97 local_ceiling_ms=15000 margin_ms=3000 effective_ceiling_ms=20000 [smp] 4 CPUs online -T2T3T4T5T6[SOFTIRQ_DEFERRAL_ORACLE:arch=aarch64:cpu=1:budget_ticks=250:wait_ticks=2:wait_ns=3591008:dispatches=5:iterations=25:verdict=ok] +T3T4T5T6T7[SOFTIRQ_DEFERRAL_ORACLE:arch=aarch64:cpu=1:budget_ticks=250:wait_ticks=2:wait_ns=3746000:dispatches=5:iterations=25:verdict=ok] [boot] Running parallel boot tests... -[BOOT_TESTS:START] +T8[BOOT_TESTS:START] [STAGE:serial:ADVANCE] [BOOT_TESTS:TOTAL:118] [BOOT_TESTS:SERIAL_BOOT:3] [BOOT_TESTS:EARLY_BOOT:91] -T7[BOOT_TESTS:STAGED:27 tests waiting for later stages] -T8T9T0[SUBSYSTEM:process:serial:START] +[BOOT_TESTS:STAGED:27 tests waiting for later stages] +T9T0[SUBSYSTEM:process:serial:START] [TEST:process:frame_custody_refusal_gate:START] [TEST:process:frame_custody_refusal_gate:PASS] [TEST:process:page_table_custody_disposition_gate:START] @@ -194,40 +194,61 @@ T8T9T0[SUBSYSTEM:process:serial:START] [SUBSYSTEM:memory:early:START] [TEST:memory:framework_sanity:START] [SUBSYSTEM:scheduler:early:START] -[TEST:scheduler:wakes_are_placed_on_online_cpus:START] [TEST:memory:framework_sanity:PASS] +[TEST:scheduler:wakes_are_placed_on_online_cpus:START] [TEST:scheduler:wakes_are_placed_on_online_cpus:PASS] -[SUBSYSTEM:interrupts:early:START] -[TEST:interrupts:interrupt_controller_init:START] [SUBSYSTEM:network:early:START] -[TEST:interrupts:interrupt_controller_init:PASS] [TEST:network:network_stack_init:START] +[SUBSYSTEM:interrupts:early:START] [TEST:network:network_stack_init:PASS] -[SUBSYSTEM:syscall:early:START] -[TEST:syscall:syscall_dispatch:START] -[TEST:syscall:syscall_dispatch:PASS] +[TEST:interrupts:interrupt_controller_init:START] +[TEST:interrupts:interrupt_controller_init:PASS] [SUBSYSTEM:filesystem:early:START] -[SUBSYSTEM:system:early:START] [TEST:filesystem:vfs_init:START] -[TEST:system:boot_sequence:START] -[TEST:system:boot_sequence:PASS] [TEST:filesystem:vfs_init:PASS] [SUBSYSTEM:ipc:early:START] [TEST:ipc:pipe_buffer_basic:START] [TEST:ipc:pipe_buffer_basic:PASS] +[SUBSYSTEM:syscall:early:START] +[TEST:syscall:syscall_dispatch:START] +[TEST:syscall:syscall_dispatch:PASS] [SUBSYSTEM:process:early:START] [TEST:process:deferred_fault_ring_overflow_injection:START] [TEST:process:deferred_fault_ring_overflow_injection:PASS] [SUBSYSTEM:timer:early:START] [TEST:timer:timer_init:START] [TEST:timer:timer_init:PASS] +[SUBSYSTEM:system:early:START] +[TEST:system:boot_sequence:START] +[TEST:system:boot_sequence:PASS] [SUBSYSTEM:logging:early:START] [TEST:logging:logging_init:START] -[TEST:memory:heap_alloc_basic:START] [TEST:logging:logging_init:PASS] +[TEST:memory:heap_alloc_basic:START] [TEST:memory:heap_alloc_basic:PASS] +[TEST:timer:timer_ticks:START] +[TEST:timer:timer_ticks:PASS] +[TEST:system:system_stability:START] +[TEST:system:system_stability:PASS] +[TEST:system:kernel_heap:START] +[TEST:system:kernel_heap:PASS] +[TEST:interrupts:irq_enable_disable:START] +[TEST:interrupts:irq_enable_disable:PASS] +[TEST:system:tty_foreground_pgrp:START] +[TEST:system:tty_foreground_pgrp:PASS] +[SCHED_STRAND_ORACLE:aarch64:samples=10:checked=126:stranded=0:running_shape=0:ready_shape=0:resolved_production=0:resolved_exercised=0:worst_dwell_ms=0:overflow=0:worst_nonprogress_ms=0:nonprogress=0:queued_on_nondispatching_cpu=0:worst_queued_nondispatch_ms=0:worst_cpu_scheduler_silence_ms=340:worst_silence_cpu=0] +[TOMBSTONE_CENSUS:resident=0:removed=0:reap_second=0:retire_second=0:abandoned_unqueued=0] +[TEST:timer:timer_delay:START] +[TEST:filesystem:devfs_mounted:START] +[TEST:filesystem:devfs_mounted:PASS] +[TEST:timer:timer_delay:PASS] +[TTBR0_ASID_CENSUS:untagged=0:tagged=0:kernel=44:cleared=44] +[PINNED_HOME_CPU_UNAVAILABLE:count=0:publish_discarded=0:hold_pen_migrated=0:delivered=0:migration_refused=0:stack_home_conflict=0] +[SUBSYSTEM:system:early:COMPLETE:4/4] +[TEST:ipc:pipe_eof:START] +[TEST:ipc:pipe_eof:PASS] [TEST:syscall:arm64_pty_ioctl_path:START] -manager.create_process [ARM64]: ENTRY - name='pty_ioctl_test', elf_size=276816 +manager.create_process [ARM64]: ENTRY - name='pty_ioctl_test', elf_size=276792 manager.create_process [ARM64]: Generated PID 2 manager.create_process [ARM64]: Creating ProcessPageTable manager.create_process [ARM64]: ProcessPageTable created @@ -248,87 +269,77 @@ manager.create_process [ARM64]: Adding PID 2 to ready queue manager.create_process [ARM64]: Inserting process into process table manager.create_process [ARM64]: SUCCESS - returning PID 2 [TEST:syscall:arm64_pty_ioctl_path:PASS] -[TEST:memory:frame_allocator:START] -[TEST:memory:frame_allocator:PASS] -[TEST:logging:log_levels:START] -[TEST:logging:log_levels:PASS] -[TEST:memory:heap_large_alloc:START] -[TEST:logging:serial_output:START] -[LOGGING_TEST] Ser[iTEST:meamory:healp_la rge_alloc:PASS] -test ARM64 -[TEST:logging:serial_output:PASS] -[TEST:system:system_stability:START] -[TEST:system:system_stability:PASS] -[TEST:memory:heap_many_small:START] -[TEST:memory:heap_many_small:PASS] +[TEST:timer:timer_monotonic:START] +[TEST:timer:timer_monotonic:PASS] [TEST:process:process_manager_init:START] [TEST:process:process_manager_init:PASS] -[TEST:network:virtio_net_probe:START] -[TEST:network:virtio_net_probe:PASS] -[TEST:timer:timer_ticks:START] -[TEST:timer:timer_ticks:PASS] -[TEST:network:socket_creation:START] -[TEST:network:socket_creation:PASS] -[TEST:filesystem:devfs_mounted:START] -[TEST:filesystem:devfs_mounted:PASS] -[TEST:ipc:pipe_eof:START] -[TEST:ipc:pipe_eof:PASS] -[TEST:scheduler:executor_exists:START] -[TEST:scheduler:executor_exists:PASS] -[TEST:timer:timer_delay:START] -[TEST:timer:timer_delay:PASS] -[TEST:scheduler:async_waker:START] -[TEST:scheduler:async_waker:PASS] +[TEST:timer:timer_quantum_reset_aarch64:START] +[TEST:timer:timer_quantum_reset_aarch64:PASS] [TEST:syscall:arm64_socket_reset_quantum:START] [TEST:syscall:arm64_socket_reset_quantum:PASS] -[SUBSYSTEM:logging:early:COMPLETE:3/3] +[TEST:process:scheduler_init:START] +[TEST:process:scheduler_init:PASS] +[TEST:timer:ring_span_report:START] +[SUBSYSTEM:syscall:early:COMPLETE:3/3] +[TEST:process:thread_creation:START] +[TEST:process:thread_creation:PASS] +[TEST:memory:frame_allocator:START] +[TEST:memory:frame_allocator:PASS] +[TEST:process:signal_delivery_infrastructure:START] +[TEST:process:signal_delivery_infrastructure:PASS] [TEST:ipc:pipe_broken:START] [TEST:ipc:pipe_broken:PASS] +[TEST:memory:heap_large_alloc:START] +[TEST:memory:heap_large_alloc:PASS] +[TEST:scheduler:executor_exists:START] +[TEST:scheduler:executor_exists:PASS] +[TEST:network:virtio_net_probe:START] +[TEST:network:virtio_net_probe:PASS] +[TEST:interrupts:timer_interrupt_running:START] +[TEST:interrupts:timer_interrupt_running:PASS] [TEST:filesystem:file_open_close:START] [TEST:filesystem:file_open_close:PASS] +[TEST:memory:heap_many_small:START] +[TEST:memory:heap_many_small:PASS] +[TEST:logging:log_levels:START] +[TEST:logging:log_levels:PASS] [TEST:memory:cow_flags_aarch64:START] [TEST:memory:cow_flags_aarch64:PASS] -[SCHED_STRAND_ORACLE:aarch64:samples=10:checked=132:stranded=0:running_shape=0:ready_shape=0:resolved_production=0:resolved_exercised=0:worst_dwell_ms=0:overflow=0:worst_nonprogress_ms=0:nonprogress=0:queued_on_nondispatching_cpu=0:worst_queued_nondispatch_ms=0:worst_cpu_scheduler_silence_ms=361:worst_silence_cpu=0] -[TOMBSTONE_CENSUS:resident=0:removed=0:reap_second=0:retire_second=0:abandoned_unqueued=0] -[TTBR0_ASID_CENSUS:untagged=0:tagged=0:kernel=23:cleared=23] -[PINNED_HOME_CPU_UNAVAILABLE:count=0:publish_discarded=0:hold_pen_migrated=0:delivered=0:migration_refused=0:stack_home_conflict=0] -[TEST:filesystem:directory_list:START] -[TEST:filesystem:directory_list:PASS] -[TEST:memory:guard_page_exists:START] -[TEST:memory:guard_page_exists:PASS] +[TEST:ipc:pipe_wake_mechanism:START] +[TEST:ipc:pipe_wake_mechanism:PASS] +[TEST:network:socket_creation:START] +[TEST:network:socket_creation:PASS] +[TEST:logging:serial_output:START] +[LOGGING_TEST] Serial test ARM64 +[TEST:logging:serial_output:PASS] +[TEST:interrupts:keyboard_irq_setup:START] +[TEST:interrupts:keyboard_irq_setup:PASS] [TEST:network:tcp_socket_creation:START] [TEST:network:tcp_socket_creation:PASS] -[TEST:timer:timer_monotonic:START] -[TEST:timer:timer_monotonic:PASS] +[TEST:interrupts:exception_vectors:START] +[TEST:interrupts:exception_vectors:PASS] +[TEST:process:arm64_signal_frame_conversion:START] +[TEST:process:arm64_signal_frame_conversion:PASS] +[TEST:memory:guard_page_exists:START] +[TEST:memory:guard_page_exists:PASS] +[TEST:filesystem:directory_list:START] +[TEST:filesystem:directory_list:PASS] +[RING_SPAN:cpu=0:span_ms=1424:writes=457:dropped=0:ticks_total=3971:tick_events=62] +[TEST:timer:ring_span_report:PASS] +[TEST:memory:stack_layout:START] +[TEST:memory:stack_layout:PASS] +[SUBSYSTEM:logging:early:COMPLETE:3/3] [TEST:network:loopback:START] [TEST:network:loopback:PASS] [TEST:filesystem:filesystem_syscalls_aarch64:START] -[SUBSYSTEM:syscall:early:COMPLETE:3/3] -[TEST:interrupts:irq_enable_disable:START] -[TEST:interrupts:irq_enable_disable:PASS] -[TEST:system:kernel_heap:START] -[TEST:system:kernel_heap:PASS] -[TEST:scheduler:future_basics:START] -[TEST:scheduler:future_basics:PASS] -[TEST:filesystem:filesystem_syscalls_aarch64:PASS] -[TEST:timer:timer_quantum_reset_aarch64:START] -[TEST:timer:timer_quantum_reset_aarch64:PASS] -[TEST:system:tty_foreground_pgrp:START] -[TEST:system:tty_foreground_pgrp:PASS] -[TEST:process:scheduler_init:START] -[TEST:process:scheduler_init:PASS] -[TEST:ipc:pipe_wake_mechanism:START] -[TEST:ipc:pipe_wake_mechanism:PASS] -[TEST:process:thread_creation:START] -[TEST:process:thread_creation:PASS] -[SUBSYSTEM:system:early:COMPLETE:4/4] -[TEST:process:signal_delivery_infrastructure:START] -[TEST:process:signal_delivery_infrastructure:PASS] [TEST:ipc:fd_table_creation:START] [TEST:ipc:fd_table_creation:PASS] [TEST:network:loopback_wake_loss_counters_are_zero:START] [TEST:network:loopback_wake_loss_counters_are_zero:PASS] -[TEST:timer:ring_span_report:START] +[SUBSYSTEM:process:early:COMPLETE:6/6] +[SUBSYSTEM:timer:early:COMPLETE:6/6] +[TEST:filesystem:filesystem_syscalls_aarch64:PASS] +[TEST:network:loopback_recv_wake_when_idle:START] [TEST:filesystem:virtio_blk_multi_read:START] [virtio-blk] Starting multi-read stress test (10 reads)... [virtio-blk] Read 1 of 10 complete @@ -337,29 +348,27 @@ test ARM64 [virtio-blk] Read 4 of 10 complete [virtio-blk] Read 5 of 10 complete [virtio-blk] Read 6 of 10 complete -[TEST:network:loopback_recv_wake_when_idle:START] [virtio-blk] Read 7 of 10 complete [virtio-blk] Read 8 of 10 complete [virtio-blk] Read 9 of 10 complete [virtio-blk] Read 10 of 10 complete [virtio-blk] Multi-read stress test passed! [TEST:filesystem:virtio_blk_multi_read:PASS] -[TEST:process:arm64_signal_frame_conversion:START] -[TEST:process:arm64_signal_frame_conversion:PASS] -[TEST:memory:stack_layout:START] -[TEST:memory:stack_layout:PASS] -[TEST:interrupts:timer_interrupt_running:START] -[TEST:interrupts:timer_interrupt_running:PASS] +[TEST:interrupts:exception_handlers:START] +[TEST:interrupts:exception_handlers:PASS] [TEST:memory:stack_allocation:START] [TEST:memory:stack_allocation:PASS] -[TEST:interrupts:keyboard_irq_setup:START] -[TEST:interrupts:keyboard_irq_setup:PASS] -[SUBSYSTEM:scheduler:early:COMPLETE:4/4] -[TEST:memory:user_stack_base:START] -[TEST:memory:user_stack_base:PASS] -[TEST:interrupts:exception_vectors:START] -[TEST:interrupts:exception_vectors:PASS] -[SUBSYSTEM:process:early:COMPLETE:6/6] +[TEST:interrupts:breakpoint:START] +[exception] Breakpoint (BRK #0) at 0xffff000040446f34 +[TEST:interrupts:breakpoint:PASS] +[TEST:scheduler:async_waker:START] +[TEST:scheduler:async_waker:PASS] +[TEST:ipc:fd_alloc_close:START] +[TEST:ipc:fd_alloc_close:PASS] +[TEST:scheduler:future_basics:START] +[TEST:scheduler:future_basics:PASS] +[TEST:ipc:create_pipe:START] +[TEST:ipc:create_pipe:PASS] [TEST:filesystem:virtio_blk_sequential_read:START] [virtio-blk] Testing sequential read of sectors 0-31... [virtio-blk] Read sectors 0-7 OK (avail_idx wrap count: 0) @@ -368,66 +377,60 @@ test ARM64 [virtio-blk] Read sectors 0-31 OK (avail_idx wrap count: 2) [virtio-blk] Sequential read test passed! (32 sectors, 2 queue wraps) [TEST:filesystem:virtio_blk_sequential_read:PASS] -[TEST:interrupts:exception_handlers:START] -[TEST:interrupts:exception_handlers:PASS] +[TEST:interrupts:softirq_aarch64:START] +[TEST:interrupts:softirq_aarch64:PASS] [TEST:filesystem:virtio_blk_write_read_verify:START] [virtio-blk] Testing write-read-verify cycle... -[virtio-blk] Device capacity: 190464 sectors +[virtio-blk] Device capacity: 524288 sectors [virtio-blk] Reading original data from sector 1000... [virtio-blk] Original first 16 bytes: [00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00] [virtio-blk] Test pattern first 16 bytes: [aa, 01, aa, 03, aa, 05, aa, 07, aa, 09, aa, 0b, aa, 0d, aa, 0f] [virtio-blk] Writing test pattern to sector 1000... -[TEST:memory:user_stack_size:START] -[TEST:memory:user_stack_size:PASS] -[TEST:interrupts:breakpoint:START] -[exception] Breakpoint (BRK #0) at 0xffff0000405b2b18 -[TEST:interrupts:breakpoint:PASS] [virtio-blk] Write succeeded [virtio-blk] Reading back sector 1000... [virtio-blk] Readback first 16 bytes: [aa, 01, aa, 03, aa, 05, aa, 07, aa, 09, aa, 0b, aa, 0d, aa, 0f] [virtio-blk] Restoring original data to sector 1000... [virtio-blk] Write-read-verify test passed! All 512 bytes match. [TEST:filesystem:virtio_blk_write_read_verify:PASS] -[LOOPBACK_WAKE_BUDGET:arch=aarch64:test=when_idle:budget_ms=200:elapsed_tick_ms=135:elapsed_ctr_ms=207:ctx_delta=75:extensions=0:reader_state=terminated:queued_cpu=none:queued_idx=none:idle_cpus=0x0:cpu_silence_ms=750:silence_cpu=0:woke_ms=626:verdict=ok] +[TEST:ipc:pty_support_aarch64:START] +[TEST:ipc:pty_support_aarch64:PASS] +[TEST:memory:user_stack_base:START] +[TEST:memory:user_stack_base:PASS] +[LOOPBACK_WAKE_BUDGET:arch=aarch64:test=when_idle:budget_ms=200:elapsed_tick_ms=150:elapsed_ctr_ms=200:ctx_delta=87:extensions=0:reader_state=terminated:queued_cpu=none:queued_idx=none:idle_cpus=0x0:cpu_silence_ms=1341:silence_cpu=0:woke_ms=1193:verdict=ok] +[TEST:filesystem:virtio_blk_invalid_sector:START] +[virtio-blk] Testing invalid sector read... +[virtio-blk] Device capacity: 524288 sectors +[virtio-blk] Invalid sector correctly rejected: Sector out of range +[virtio-blk] Invalid sector test passed! +[TEST:filesystem:virtio_blk_invalid_sector:PASS] [TEST:network:loopback_recv_wake_when_idle:PASS] +[SUBSYSTEM:ipc:early:COMPLETE:8/8] +[TEST:filesystem:virtio_blk_uninitialized_read:START] +[virtio-blk] Testing uninitialized device handling... +[virtio-blk] Device is initialized (expected during normal boot) +[virtio-blk] Verified: read_sector checks BLOCK_DEVICE.is_none() and returns error +[virtio-blk] Uninitialized test passed (device was already initialized)! +[TEST:filesystem:virtio_blk_uninitialized_read:PASS] +[TEST:memory:user_stack_size:START] +[TEST:memory:user_stack_size:PASS] +[SUBSYSTEM:filesystem:early:COMPLETE:10/10] +[SUBSYSTEM:interrupts:early:COMPLETE:8/8] [TEST:memory:user_stack_top:START] [TEST:memory:user_stack_top:PASS] -[TEST:ipc:fd_alloc_close:START] -[TEST:ipc:fd_alloc_close:PASS] +[SUBSYSTEM:scheduler:early:COMPLETE:4/4] +[TEST:network:loopback_recv_wake_under_load:START] [TEST:memory:user_stack_guard:START] [TEST:memory:user_stack_guard:PASS] -[TEST:ipc:create_pipe:START] -[TEST:ipc:create_pipe:PASS] [TEST:memory:user_stack_alignment:START] [TEST:memory:user_stack_alignment:PASS] -[TEST:network:loopback_recv_wake_under_load:START] -[TEST:filesystem:virtio_blk_invalid_sector:START] -[virtio-blk] Testing invalid sector read... -[virtio-blk] Device capacity: 190464 sectors -[virtio-blk] Invalid sector correctly rejected: Sector out of range -[virtio-blk] Invalid sector test passed! -[TEST:filesystem:virtio_blk_invalid_sector:PASS] -[TEST:interrupts:softirq_aarch64:START] -[TEST:interrupts:softirq_aarch64:PASS] -[TEST:ipc:pty_support_aarch64:START] -[TEST:ipc:pty_support_aarch64:PASS] [TEST:memory:kernel_stack_base:START] [TEST:memory:kernel_stack_base:PASS] -[SUBSYSTEM:interrupts:early:COMPLETE:8/8] [TEST:memory:kernel_stack_size:START] [TEST:memory:kernel_stack_size:PASS] -[SUBSYSTEM:ipc:early:COMPLETE:8/8] [TEST:memory:kernel_stack_top:START] [TEST:memory:kernel_stack_top:PASS] -[TEST:filesystem:virtio_blk_uninitialized_read:START] -[virtio-blk] Testing uninitialized device handling... -[virtio-blk] Device is initialized (expected during normal boot) -[virtio-blk] Verified: read_sector checks BLOCK_DEVICE.is_none() and returns error -[virtio-blk] Uninitialized test passed (device was already initialized)! -[TEST:filesystem:virtio_blk_uninitialized_read:PASS] [TEST:memory:kernel_stack_guard:START] [TEST:memory:kernel_stack_guard:PASS] -[SUBSYSTEM:filesystem:early:COMPLETE:10/10] [TEST:memory:kernel_stack_alignment:START] [TEST:memory:kernel_stack_alignment:PASS] [TEST:memory:stack_in_range:START] @@ -441,10 +444,7 @@ test ARM64 [TEST:memory:stack_red_zone:START] [TEST:memory:stack_red_zone:PASS] [SUBSYSTEM:memory:early:COMPLETE:24/24] -[RING_SPAN:cpu=0:span_ms=1487:writes=583:dropped=0:ticks_total=3987:tick_events=62] -[TEST:timer:ring_span_report:PASS] -[SUBSYSTEM:timer:early:COMPLETE:6/6] -[LOOPBACK_WAKE_BUDGET:arch=aarch64:test=under_load:budget_ms=200:elapsed_tick_ms=130:elapsed_ctr_ms=200:ctx_delta=262:extensions=0:reader_state=absent:queued_cpu=none:queued_idx=none:idle_cpus=0x0:cpu_silence_ms=1015:silence_cpu=0:woke_ms=887:verdict=ok] +[LOOPBACK_WAKE_BUDGET:arch=aarch64:test=under_load:budget_ms=200:elapsed_tick_ms=148:elapsed_ctr_ms=200:ctx_delta=350:extensions=0:reader_state=absent:queued_cpu=none:queued_idx=none:idle_cpus=0x0:cpu_silence_ms=1579:silence_cpu=0:woke_ms=1432:verdict=ok] [TEST:network:loopback_recv_wake_under_load:PASS] [TEST:network:loopback_pump_does_not_busy_spin:START] [TEST:network:loopback_pump_does_not_busy_spin:PASS] @@ -459,14 +459,14 @@ test ARM64 [STAGE:sched:ADVANCE] [SUBSYSTEM:scheduler:sched:START] [TEST:scheduler:kthread_spawn_verify:START] -[SUBSYSTEM:filesystem:sched:START] -[TEST:filesystem:block_wedge_oracle:START] [SUBSYSTEM:process:sched:START] [TEST:process:fork_exit_defer_reclaim_pairing_test:START] +[SUBSYSTEM:filesystem:sched:START] +[TEST:filesystem:block_wedge_oracle:START] [TEST:scheduler:kthread_spawn_verify:PASS] -[TEST:scheduler:workqueue_operational:START] [BLOCK_WEDGE_ORACLE:locked=1:wedged=1:refused=1:parked=0:refuse_ms=0] [TEST:filesystem:block_wedge_oracle:PASS] +[TEST:scheduler:workqueue_operational:START] [TEST:scheduler:workqueue_operational:PASS] [SUBSYSTEM:filesystem:sched:COMPLETE:1/1] [SUBSYSTEM:scheduler:sched:COMPLETE:2/2] @@ -542,7 +542,7 @@ manager.create_process [ARM64]: Main thread set on process manager.create_process [ARM64]: Adding PID 86 to ready queue manager.create_process [ARM64]: Inserting process into process table manager.create_process [ARM64]: SUCCESS - returning PID 86 -[CREATING_DISPATCH_ORACLE_DIAG:aarch64:refusal_delta=2:leaf_residual=16:user_stack_residual=16:balance=0:settle_rounds=3:root=0x44042000:root_release_done=1:probe_hw_clear=1:probe_shadow_clear=1:probe_cached_clear=1:retire_hw_blocked=0:retire_shadow_blocked=0:retire_cached_blocked=0] +[CREATING_DISPATCH_ORACLE_DIAG:aarch64:refusal_delta=3:leaf_residual=16:user_stack_residual=16:balance=0:settle_rounds=3:root=0x44042000:root_release_done=1:probe_hw_clear=1:probe_shadow_clear=1:probe_cached_clear=1:retire_hw_blocked=0:retire_shadow_blocked=0:retire_cached_blocked=0] [CREATING_DISPATCH_ORACLE:aarch64:injected=1:refused_via_dispatch=1:requeue_retried=1:dispatched_after_publish=1:balance=0:leaf_residual=16:user_stack_residual=16] [TEST:process:creating_dispatch_refusal:PASS] [TEST:process:creating_dispatch_refusal:PASS] @@ -554,63 +554,55 @@ manager.create_process [ARM64]: SUCCESS - returning PID 86 [TEST:process:reclaim_progress_gate:START] [TEST:process:reclaim_progress_gate:PASS] [TEST:process:exit_kick_protocol_gate:START] -[exit_kick_gate] budget_anchor=test_phase anchor_age_at_gate_entry_ms=2095 budget_ms=60000 gate_ceiling_ms=45000 -[LR_NONTEXT:site=save-el1:tid=32:lr=0xffff0000542a99f0:cpu=1] -[LR_NONTEXT:site=restore-el1:tid=32:lr=0xffff0000542a99f0:cpu=1] -[LR_NONTEXT:site=save-el1:tid=32:lr=0xffff0000542a99f0:cpu=1] -[LR_NONTEXT:site=restore-el1:tid=32:lr=0xffff0000542a99f0:cpu=2] -[LR_NONTEXT:site=save-el1:tid=32:lr=0xffff0000542a99f0:cpu=2] -[LR_NONTEXT:site=restore-el1:tid=32:lr=0xffff0000542a99f0:cpu=2] -[LR_NONTEXT:site=save-el1:tid=32:lr=0xffff0000542a99f0:cpu=2] -[LR_NONTEXT:site=restore-el1:tid=32:lr=0xffff0000542a99f0:cpu=2] +[exit_kick_gate] budget_anchor=test_phase anchor_age_at_gate_entry_ms=2930 budget_ms=60000 gate_ceiling_ms=45000 [TEST:process:exit_kick_protocol_gate:PASS] [TEST:process:exit_kick_worker_window_isolation:START] -[exit_kick_worker_isolation] budget_anchor=test_phase anchor_age_at_entry_ms=2121 budget_ms=60000 scenario_ceiling_ms=1500 +[exit_kick_worker_isolation] budget_anchor=test_phase anchor_age_at_entry_ms=2956 budget_ms=60000 scenario_ceiling_ms=1500 [exit_kick_worker_isolation] scenario=before_union_worker_1 start=1 [exit_kick_gate] wait=before_union_worker_1 breadcrumb=1 elapsed_ms=1000 progress_work=43 progress_exit=0 re_kick_sgis=57 -[exit_kick_gate] wait=before_union_worker_1 cause=absolute_ceiling elapsed_ms=1500 window_budget_ms=1500 re_kick_sgis=87 cpus_online=4 condition_current=2 condition_expected=3 progress_work_start=3 progress_work_final=63 progress_exit_start=0 progress_exit_final=0 worker_1_progress_start=1 worker_1_progress_final=1 worker_2_progress_start=0 worker_2_progress_final=31 worker_3_progress_start=2 worker_3_progress_final=31 last_advance_ms_ago=29 late_true=0 -[exit_kick_worker_isolation] scenario=before_union_worker_1 elapsed_ms=1501 cause=absolute_ceiling target=none progress=[1, 31, 31] completed=6 joined=3 +[exit_kick_gate] wait=before_union_worker_1 cause=absolute_ceiling elapsed_ms=1500 window_budget_ms=1500 re_kick_sgis=87 cpus_online=4 condition_current=2 condition_expected=3 progress_work_start=3 progress_work_final=63 progress_exit_start=0 progress_exit_final=0 worker_1_progress_start=1 worker_1_progress_final=1 worker_2_progress_start=2 worker_2_progress_final=31 worker_3_progress_start=0 worker_3_progress_final=31 last_advance_ms_ago=28 late_true=0 +[exit_kick_worker_isolation] scenario=before_union_worker_1 elapsed_ms=1502 cause=absolute_ceiling target=none progress=[1, 31, 31] completed=6 joined=3 [exit_kick_worker_isolation] scenario=after_worker_1 start=1 [STRAND_INJECT_ORACLE:aarch64:legA_exercised=1:legA_recovered=1:legB_exercised=1:legB_recovered=1:stranded=0] -[exit_kick_gate] wait=after_worker_1 cause=no_progress elapsed_ms=801 window_budget_ms=800 re_kick_sgis=45 cpus_online=4 condition_current=2 condition_expected=3 progress_work_start=4 progress_work_final=35 progress_exit_start=0 progress_exit_final=0 worker_1_progress_start=0 worker_1_progress_final=1 worker_2_progress_start=2 worker_2_progress_final=17 worker_3_progress_start=2 worker_3_progress_final=17 last_advance_ms_ago=801 late_true=0 -[exit_kick_worker_isolation] scenario=after_worker_1 elapsed_ms=802 cause=no_progress target=worker_1 progress=[1, 17, 17] completed=6 joined=3 +[exit_kick_gate] wait=after_worker_1 cause=no_progress elapsed_ms=800 window_budget_ms=800 re_kick_sgis=45 cpus_online=4 condition_current=2 condition_expected=3 progress_work_start=2 progress_work_final=35 progress_exit_start=0 progress_exit_final=0 worker_1_progress_start=0 worker_1_progress_final=1 worker_2_progress_start=0 worker_2_progress_final=17 worker_3_progress_start=2 worker_3_progress_final=17 last_advance_ms_ago=798 late_true=0 +[exit_kick_worker_isolation] scenario=after_worker_1 elapsed_ms=803 cause=no_progress target=worker_1 progress=[1, 17, 17] completed=6 joined=3 [exit_kick_worker_isolation] expected_failure=exit_kick_worker_isolation: worker 1 made no progress [exit_kick_worker_isolation] scenario=after_worker_2 start=1 +[SCHED_STRAND_ORACLE:aarch64:samples=107:checked=700:stranded=0:running_shape=0:ready_shape=0:resolved_production=0:resolved_exercised=2:worst_dwell_ms=0:overflow=0:worst_nonprogress_ms=0:nonprogress=0:queued_on_nondispatching_cpu=0:worst_queued_nondispatch_ms=0:worst_cpu_scheduler_silence_ms=4022:worst_silence_cpu=0] +[TOMBSTONE_CENSUS:resident=0:removed=2:reap_second=1:retire_second=1:abandoned_unqueued=0] +[TTBR0_ASID_CENSUS:untagged=0:tagged=3:kernel=2884:cleared=2888] +[PINNED_HOME_CPU_UNAVAILABLE:count=0:publish_discarded=0:hold_pen_migrated=0:delivered=0:migration_refused=0:stack_home_conflict=0] [exit_kick_gate] wait=after_worker_2 cause=no_progress elapsed_ms=800 window_budget_ms=800 re_kick_sgis=45 cpus_online=4 condition_current=2 condition_expected=3 progress_work_start=2 progress_work_final=35 progress_exit_start=0 progress_exit_final=0 worker_1_progress_start=2 worker_1_progress_final=17 worker_2_progress_start=0 worker_2_progress_final=1 worker_3_progress_start=0 worker_3_progress_final=17 last_advance_ms_ago=799 late_true=0 -[exit_kick_worker_isolation] scenario=after_worker_2 elapsed_ms=804 cause=no_progress target=worker_2 progress=[17, 1, 17] completed=5 joined=3 +[exit_kick_worker_isolation] scenario=after_worker_2 elapsed_ms=801 cause=no_progress target=worker_2 progress=[17, 1, 17] completed=5 joined=3 [exit_kick_worker_isolation] expected_failure=exit_kick_worker_isolation: worker 2 made no progress [exit_kick_worker_isolation] scenario=after_worker_3 start=1 -[SCHED_STRAND_ORACLE:aarch64:samples=107:checked=624:stranded=0:running_shape=0:ready_shape=0:resolved_production=0:resolved_exercised=2:worst_dwell_ms=0:overflow=0:worst_nonprogress_ms=0:nonprogress=0:queued_on_nondispatching_cpu=0:worst_queued_nondispatch_ms=0:worst_cpu_scheduler_silence_ms=3611:worst_silence_cpu=0] -[TOMBSTONE_CENSUS:resident=0:removed=2:reap_second=1:retire_second=1:abandoned_unqueued=0] -[TTBR0_ASID_CENSUS:untagged=0:tagged=2:kernel=2998:cleared=3001] -[PINNED_HOME_CPU_UNAVAILABLE:count=0:publish_discarded=0:hold_pen_migrated=0:delivered=0:migration_refused=0:stack_home_conflict=0] -[exit_kick_gate] wait=after_worker_3 cause=no_progress elapsed_ms=800 window_budget_ms=800 re_kick_sgis=45 cpus_online=4 condition_current=2 condition_expected=3 progress_work_start=3 progress_work_final=35 progress_exit_start=0 progress_exit_final=0 worker_1_progress_start=2 worker_1_progress_final=17 worker_2_progress_start=0 worker_2_progress_final=17 worker_3_progress_start=1 worker_3_progress_final=1 last_advance_ms_ago=800 late_true=0 +[exit_kick_gate] wait=after_worker_3 cause=no_progress elapsed_ms=800 window_budget_ms=800 re_kick_sgis=45 cpus_online=4 condition_current=2 condition_expected=3 progress_work_start=5 progress_work_final=35 progress_exit_start=0 progress_exit_final=0 worker_1_progress_start=2 worker_1_progress_final=17 worker_2_progress_start=2 worker_2_progress_final=17 worker_3_progress_start=1 worker_3_progress_final=1 last_advance_ms_ago=800 late_true=0 [exit_kick_worker_isolation] scenario=after_worker_3 elapsed_ms=802 cause=no_progress target=worker_3 progress=[17, 17, 1] completed=3 joined=3 [exit_kick_worker_isolation] expected_failure=exit_kick_worker_isolation: worker 3 made no progress [exit_kick_worker_isolation] scenario=after_healthy start=1 -[exit_kick_worker_isolation] scenario=after_healthy elapsed_ms=2 cause=success target=none progress=[2, 2, 2] completed=7 joined=3 +[exit_kick_worker_isolation] scenario=after_healthy elapsed_ms=1 cause=success target=none progress=[2, 2, 2] completed=7 joined=3 [exit_kick_worker_isolation] healthy_baseline=PASS -[exit_kick_worker_isolation] fixture_elapsed_ms=4031 +[exit_kick_worker_isolation] fixture_elapsed_ms=4033 [TEST:process:exit_kick_worker_window_isolation:PASS] [TEST:process:exit_kick_budget_anchor_isolation:START] -[exit_kick_budget_anchor] pre_test_delay_ms=1213 fixture_budget_ms=1000 fixture_gate_ceiling_ms=600 -[exit_kick_budget_anchor] scenario=inherited_kernel_entry_anchor anchor=inherited cause=phase_one_ceiling target=none elapsed_ms=0 budget_age_at_entry_ms=1214 -[exit_kick_budget_anchor] scenario=test_phase_entry_anchor anchor=test_phase cause=no_progress target=worker_1 elapsed_ms=401 budget_age_at_entry_ms=0 -[exit_kick_budget_anchor] scenario=gate_window_exhaustion anchor=test_phase cause=gate_ceiling target=none elapsed_ms=610 budget_age_at_entry_ms=0 -[exit_kick_budget_anchor] fixture_elapsed_ms=2228 +[exit_kick_budget_anchor] pre_test_delay_ms=1216 fixture_budget_ms=1000 fixture_gate_ceiling_ms=600 +[exit_kick_budget_anchor] scenario=inherited_kernel_entry_anchor anchor=inherited cause=phase_one_ceiling target=none elapsed_ms=0 budget_age_at_entry_ms=1216 +[exit_kick_budget_anchor] scenario=test_phase_entry_anchor anchor=test_phase cause=no_progress target=worker_1 elapsed_ms=407 budget_age_at_entry_ms=0 +[exit_kick_budget_anchor] scenario=gate_window_exhaustion anchor=test_phase cause=gate_ceiling target=none elapsed_ms=607 budget_age_at_entry_ms=0 +[exit_kick_budget_anchor] fixture_elapsed_ms=2234 [TEST:process:exit_kick_budget_anchor_isolation:PASS] [TEST:process:census_widen_oracle:START] -[CENSUS_WIDEN_ORACLE:aarch64:arm_target=0:baseline_reported=0:armed_reported=1:tid=1218:shape=ready_queued_nondispatching:queued_nondispatching=1:queued_nondispatch_ms=5502:cpu_silence_ms=5502:joined=1:retired=1:PASS] +[CENSUS_WIDEN_ORACLE:aarch64:arm_target=0:baseline_reported=0:armed_reported=1:tid=1218:shape=ready_queued_nondispatching:queued_nondispatching=1:queued_nondispatch_ms=6867:cpu_silence_ms=6867:joined=1:retired=1:PASS] [TEST:process:census_widen_oracle:PASS] [SUBSYSTEM:process:sched:COMPLETE:14/14] [STAGE:sched:COMPLETE:108/118] [boot] All boot tests passed! [PT_ROOT_CUSTODY:no_proof=2:no_arch=0:terminated=1:undecided=1:mid_retire=1:retired=79] [TOMBSTONE_CENSUS:resident=0:removed=2:reap_second=1:retire_second=1:abandoned_unqueued=0] -[TTBR0_ASID_CENSUS:untagged=0:tagged=2:kernel=4354:cleared=4357] +[TTBR0_ASID_CENSUS:untagged=0:tagged=3:kernel=5176:cleared=5180] [PIN_GUARD_ORACLE:aarch64:home=1:here=0:reclaim=1:requeue=1:previous=1:on_home=3:refused=3:census_clean=1:verdict=PASS] [PINNED_HOME_CPU_UNAVAILABLE:count=0:publish_discarded=0:hold_pen_migrated=0:delivered=0:migration_refused=0:stack_home_conflict=0] -[TIMER_WAKE_LATENCY_ORACLE:aarch64:sleep_ms=10:peers=8:overrun_ms=8:bound_ms=100:quantum_ms=10:round_ms=80:wake_enqueues=1:peers_started=8:peers_spinning=8:backstops=0:setup_ms=4:window_ms=50:measured=1:PASS] +[TIMER_WAKE_LATENCY_ORACLE:aarch64:sleep_ms=10:peers=8:overrun_ms=4:bound_ms=100:quantum_ms=10:round_ms=80:wake_enqueues=2:peers_started=8:peers_spinning=8:backstops=0:setup_ms=5:window_ms=37:measured=1:PASS] ======================================== Breenix ARM64 Boot Complete! @@ -619,11 +611,11 @@ manager.create_process [ARM64]: SUCCESS - returning PID 86 Hello from ARM64! [boot] Launching init from pre-loaded ELF... -manager.create_process_with_argv [ARM64]: ENTRY - name='init', elf_size=298664, argc=1 +manager.create_process_with_argv [ARM64]: ENTRY - name='init', elf_size=303144, argc=1 manager.create_process_with_argv [ARM64]: Generated PID 1 manager.create_process_with_argv [ARM64]: Creating ProcessPageTable manager.create_process_with_argv [ARM64]: Loading ELF into page table -manager.create_process_with_argv [ARM64]: ELF loaded, entry=0x4000f5d0 +manager.create_process_with_argv [ARM64]: ELF loaded, entry=0x4000f6f4 manager.create_process_with_argv [ARM64]: Allocating user stack manager.create_process_with_argv [ARM64]: User stack will be at 0xfffffeff0000-0xffffff000000 manager.create_process_with_argv [ARM64]: argc/argv set up on stack, SP=0xfffffefffed0 @@ -632,16 +624,16 @@ manager.create_process_with_argv [ARM64]: SUCCESS - returning PID 1 [STAGE:proc:ADVANCE] [SUBSYSTEM:ipc:proc:START] [TEST:ipc:telnetd_dependencies_aarch64:START] +[TEST:ipc:telnetd_dependencies_aarch64:PASS] [SUBSYSTEM:process:proc:START] [TEST:process:current_thread_exists:START] -[TEST:ipc:telnetd_dependencies_aarch64:PASS] [TEST:process:current_thread_exists:PASS] [SUBSYSTEM:syscall:proc:START] [TEST:syscall:fcntl_pm_contention_oracle:START] [SUBSYSTEM:ipc:proc:COMPLETE:1/1] [TEST:process:process_list_populated:START] [TEST:process:process_list_populated:PASS] -[FCNTL_PM_CONTENTION_ORACLE:aarch64:arm_wait_us=84:armed=1:acquired=1:holder_cpu=1:pm_busy_probe=1:calls=64:eagain=0:first_errno=9:first_wait_us=8058:hold_safety=0:hold_done=1:joined=1:PASS] +[FCNTL_PM_CONTENTION_ORACLE:aarch64:arm_wait_us=138:armed=1:acquired=1:holder_cpu=2:pm_busy_probe=1:calls=64:eagain=0:first_errno=9:first_wait_us=8129:hold_safety=0:hold_done=1:joined=1:PASS] [TEST:syscall:fcntl_pm_contention_oracle:PASS] [TEST:process:frame_custody_healthy_counters:START] [TEST:process:frame_custody_healthy_counters:PASS] @@ -658,15 +650,14 @@ UDP: Delivered packet to socket on port 54540 UDP: Delivered packet to socket on port 54540 UDP: Delivered packet to socket on port 54540 UDP: Delivered packet to socket on port 54540 -UDP: Delivered packet to socket on port 54540 -[IRQ_HOLD_ORACLE:aarch64:attempts=1:armed=1:holder_cpu=2:irqs_enabled_before=1:masked_in_hold=1:sends=12:hold_us=12014:netrx_pending_at_release=1:received=12:stalled=0:hold_done=1:joined=1:PASS] +[IRQ_HOLD_ORACLE:aarch64:attempts=1:armed=1:holder_cpu=2:irqs_enabled_before=1:masked_in_hold=1:sends=11:hold_us=12047:netrx_pending_at_release=1:received=11:stalled=0:hold_done=1:joined=1:PASS] [TEST:syscall:irq_hold_oracle:PASS] [TEST:syscall:tty_irq_pm_oracle:START] -[TTY_IRQ_PM_ORACLE:aarch64:fg_unset_before=1:pm_blocking_acquires=0:deferred=2:pgrp_set_by_entry=0:processed=2:buffered=2:irqs_enabled_before=1:holder_cpu=1:pm_busy_probe=1:hold_us=20000:entry_us=2:joined=1:adopted=1:adopted_pgrp=821:restored=1:PASS:peer_hold] +[TTY_IRQ_PM_ORACLE:aarch64:fg_unset_before=1:pm_blocking_acquires=0:deferred=2:pgrp_set_by_entry=0:processed=2:buffered=2:irqs_enabled_before=1:holder_cpu=2:pm_busy_probe=1:hold_us=20000:entry_us=6:joined=1:adopted=1:adopted_pgrp=821:restored=1:PASS:peer_hold] [TEST:syscall:tty_irq_pm_oracle:PASS] [TEST:syscall:tty_irq_fg_oracle:START] -[TTY_IRQ_FG_ORACLE:aarch64:fg_known=822:target_absent=1:fg_lock_touches=0:fg_blocking_acquires=0:snapshot_reads=3:processed=2:buffered=1:irqs_enabled_before=1:holder_cpu=1:fg_busy_probe=1:hold_us=20000:entry_us=132:joined=1:sig_calls=1:sig_pid=822:sig_num=2:snapshot_agrees=1:restored=1:PASS:peer_hold] +[TTY_IRQ_FG_ORACLE:aarch64:fg_known=822:target_absent=1:fg_lock_touches=0:fg_blocking_acquires=0:snapshot_reads=3:processed=2:buffered=1:irqs_enabled_before=1:holder_cpu=2:fg_busy_probe=1:hold_us=20000:entry_us=266:joined=1:sig_calls=1:sig_pid=822:sig_num=2:snapshot_agrees=1:restored=1:PASS:peer_hold] [TEST:syscall:tty_irq_fg_oracle:PASS] [TEST:syscall:udp_socket_lock_oracle:START] UDP: Delivered packet to socket on port 54550 @@ -681,7 +672,7 @@ UDP: Delivered packet to socket on port 54550 UDP: Delivered packet to socket on port 54550 UDP: Delivered packet to socket on port 54550 UDP: Delivered packet to socket on port 54550 -[UDP_LOCK_ORACLE:aarch64:attempts=1:armed=1:holder_cpu=1:irqs_enabled_before=1:masked_in_hold=1:sends=12:hold_us=12024:netrx_pending_at_release=1:received=12:stalled=0:hold_done=1:joined=1:PASS] +[UDP_LOCK_ORACLE:aarch64:attempts=1:armed=1:holder_cpu=2:irqs_enabled_before=1:masked_in_hold=1:sends=12:hold_us=12098:netrx_pending_at_release=1:received=12:stalled=0:hold_done=1:joined=1:PASS] [TEST:syscall:udp_socket_lock_oracle:PASS] [TEST:syscall:udp_ports_lock_oracle:START] UDP: Delivered packet to socket on port 54560 @@ -696,8 +687,7 @@ UDP: Delivered packet to socket on port 54560 UDP: Delivered packet to socket on port 54560 UDP: Delivered packet to socket on port 54560 UDP: Delivered packet to socket on port 54560 -UDP: Delivered packet to socket on port 54560 -[UDP_PORTS_LOCK_ORACLE:aarch64:attempts=1:armed=1:holder_cpu=1:driver_cpu=2:irqs_enabled_before=1:masked_in_hold=1:sends=19:hold_us=12017:refused=6:delivered=13:stalled=0:hold_done=1:joined=1:PASS] +[UDP_PORTS_LOCK_ORACLE:aarch64:attempts=1:armed=1:holder_cpu=2:driver_cpu=1:irqs_enabled_before=1:masked_in_hold=1:sends=21:hold_us=12014:refused=9:delivered=12:stalled=0:hold_done=1:joined=1:PASS] [TEST:syscall:udp_ports_lock_oracle:PASS] [SUBSYSTEM:syscall:proc:COMPLETE:6/6] [EXEC_LOCK_ORDER:commits=0:pm_held=0:unpinned=0:missing=0] @@ -708,12 +698,12 @@ EL0_SYSCALL: First syscall from userspace (SPSR confirms EL0) [ OK ] syscall path verified [STAGE:user:ADVANCE] [EXEC_LOCK_ORDER:commits=0:pm_held=0:unpinned=0:missing=0] -[USER_RSP_SCRATCH_EL_CENSUS:el0_installs=2:el1_skipped=0] +[USER_RSP_SCRATCH_EL_CENSUS:el0_installs=1:el1_skipped=0] [TESTS_COMPLETE:118/118] [BOOT_TESTS:PASS] [init] Breenix init starting (PID 1) [spawn] path='/bin/heartbeat' -manager.create_process_with_argv [ARM64]: ENTRY - name='heartbeat', elf_size=303616, argc=1 +manager.create_process_with_argv [ARM64]: ENTRY - name='heartbeat', elf_size=303584, argc=1 manager.create_process_with_argv [ARM64]: Generated PID 90 manager.create_process_with_argv [ARM64]: Creating ProcessPageTable manager.create_process_with_argv [ARM64]: Loading ELF into page table @@ -729,8 +719,8 @@ manager.create_process_with_argv [ARM64]: SUCCESS - returning PID 90 [INIT_GROUP_WALK:aarch64:rows=3:init_tgid_rows=1:foreign_tgid_rows=0:refused=2:verdict=PASS] [INIT_GROUP_REFUSAL:aarch64:phase=early:probe1=-22:probe2=-22:expected=-22] [spawn] path='/bin/block_eintr_oracle' -[heartbeat] tid=1240 uptime_ms=9189 kbd_nonzero=0 -manager.create_process_with_argv [ARM64]: ENTRY - name='block_eintr_oracle', elf_size=304752, argc=1 +[heartbeat] tid=1241 uptime_ms=10073 kbd_nonzero=0 +manager.create_process_with_argv [ARM64]: ENTRY - name='block_eintr_oracle', elf_size=304720, argc=1 manager.create_process_with_argv [ARM64]: Generated PID 91 manager.create_process_with_argv [ARM64]: Creating ProcessPageTable manager.create_process_with_argv [ARM64]: Loading ELF into page table @@ -742,108 +732,82 @@ manager.create_process_with_argv [ARM64]: SUCCESS - returning PID 91 [spawn] Created child PID 91 for parent PID 1 [spawn] Success: child PID 91 scheduled F123456789SC[syscall] exit(0) pid=92 name=block_eintr_oracle_child_92 -[TTBR0_ASID_CENSUS:untagged=0:tagged=2381:kernel=7107:cleared=9460] - -[CTX596_ELR_DIVERGENCE] tid=1241 cpu=0 prev_elr=0xffff000040422770 x30=0xffff00004046aba4 ctx_elr=0xffff00004046aba4 - -[INLINE_SAVE_OVERWRITE] tid=1241 sp=0xffff0000542753a0 old_sp=0xffff0000542753b0 saved_sp=0xffff0000542753b0 delta=0xfffffffffffffff0 saved_lr=0xffff00004047b498 saved_slot20=0xffff000040a54094 slot20=0xffff00004047b494 elr=0xffff0000404166a0 x30=0xffff000040416690 -[RESUME_PC_CENSUS:cpu=0:source=el1-restore-frame-elr:text=843:kstack=0:uva=0:smallint=0:other=0] -[RESUME_PC_CENSUS:cpu=0:source=el0-restore-frame-elr:text=0:kstack=0:uva=17:smallint=0:other=0] -[RESUME_PC_CENSUS:cpu=0:source=el0-first-entry-frame-elr:text=0:kstack=0:uva=1:smallint=0:other=0] -[RESUME_PC_CENSUS:cpu=0:source=ctx-x30:text=2548:kstack=0:uva=17:smallint=0:other=0] -[RESUME_PC_CENSUS:cpu=0:source=ctx-elr-el1:text=2548:kstack=0:uva=0:smallint=0:other=0] -[RESUME_PC_CENSUS:cpu=0:source=lr-save-el1:text=853:kstack=0:uva=0:smallint=0:other=0] -[RESUME_PC_CENSUS:cpu=0:source=lr-restore-el1:text=843:kstack=0:uva=0:smallint=0:other=0] -[RESUME_PC_CENSUS:cpu=0:source=lr-save-el0:text=0:kstack=0:uva=20:smallint=2:other=0] -[RESUME_PC_CENSUS:cpu=0:source=lr-restore-el0:text=0:kstack=0:uva=17:smallint=0:other=0] -[RESUME_PC_CENSUS:cpu=1:source=el1-restore-frame-elr:text=2096:kstack=0:uva=0:smallint=0:other=0] -[RESUME_PC_CENSUS:cpu=1:source=el0-restore-frame-elr:text=0:kstack=0:uva=9:smallint=0:other=0] -[RESUME_PC_CENSUS:cpu=1:source=ctx-x30:text=2293:kstack=1:uva=7:smallint=159:other=8] -[RESUME_PC_CENSUS:cpu=1:source=ctx-elr-el1:text=2459:kstack=0:uva=0:smallint=0:other=0] -[RESUME_PC_CENSUS:cpu=1:source=lr-save-el1:text=1931:kstack=2:uva=0:smallint=157:other=7] -[RESUME_PC_CENSUS:cpu=1:source=lr-restore-el1:text=1930:kstack=1:uva=0:smallint=157:other=8] -[RESUME_PC_CENSUS:cpu=1:source=lr-save-el0:text=0:kstack=0:uva=5:smallint=1:other=0] -[RESUME_PC_CENSUS:cpu=1:source=lr-restore-el0:text=0:kstack=0:uva=7:smallint=2:other=0] -[RESUME_PC_CENSUS:cpu=2:source=el1-restore-frame-elr:text=2462:kstack=0:uva=0:smallint=0:other=0] -[RESUME_PC_CENSUS:cpu=2:source=el0-restore-frame-elr:text=0:kstack=0:uva=13:smallint=0:other=0] -[RESUME_PC_CENSUS:cpu=2:source=ctx-x30:text=2589:kstack=3:uva=13:smallint=209:other=25] -[RESUME_PC_CENSUS:cpu=2:source=ctx-elr-el1:text=2826:kstack=0:uva=0:smallint=0:other=0] -[RESUME_PC_CENSUS:cpu=2:source=lr-save-el1:text=2211:kstack=2:uva=0:smallint=210:other=24] -[RESUME_PC_CENSUS:cpu=2:source=lr-restore-el1:text=2225:kstack=3:uva=0:smallint=209:other=25] -[RESUME_PC_CENSUS:cpu=2:source=lr-save-el0:text=0:kstack=0:uva=11:smallint=0:other=0] -[RESUME_PC_CENSUS:cpu=2:source=lr-restore-el0:text=0:kstack=0:uva=13:smallint=0:other=0] -[RESUME_PC_CENSUS:cpu=3:source=el1-restore-frame-elr:text=2700:kstack=0:uva=0:smallint=0:other=0] -[RESUME_PC_CENSUS:cpu=3:source=el0-restore-frame-elr:text=0:kstack=0:uva=12:smallint=0:other=0] -[RESUME_PC_CENSUS:cpu=3:source=el0-first-entry-frame-elr:text=0:kstack=0:uva=1:smallint=0:other=0] -[RESUME_PC_CENSUS:cpu=3:source=ctx-x30:text=2855:kstack=0:uva=11:smallint=262:other=9] -[RESUME_PC_CENSUS:cpu=3:source=ctx-elr-el1:text=3125:kstack=0:uva=0:smallint=0:other=0] -[RESUME_PC_CENSUS:cpu=3:source=lr-save-el1:text=2432:kstack=0:uva=0:smallint=260:other=11] -[RESUME_PC_CENSUS:cpu=3:source=lr-restore-el1:text=2430:kstack=0:uva=0:smallint=261:other=9] -[RESUME_PC_CENSUS:cpu=3:source=lr-save-el0:text=0:kstack=0:uva=11:smallint=0:other=0] -[RESUME_PC_CENSUS:cpu=3:source=lr-restore-el0:text=0:kstack=0:uva=11:smallint=1:other=0] -[heartbeat] tid=1240 uptime_ms=10199 kbd_nonzero=0 -F123456789SC[syscall] exit(0) pid=93 name=block_eintr_oracle_child_93 -[TTBR0_ASID_CENSUS:untagged=0:tagged=6411:kernel=11549:cleared=17888] -[SCHED_STRAND_ORACLE:aarch64:samples=206:checked=968:stranded=0:running_shape=0:ready_shape=0:resolved_production=0:resolved_exercised=2:worst_dwell_ms=0:overflow=0:worst_nonprogress_ms=0:nonprogress=1:queued_on_nondispatching_cpu=1:worst_queued_nondispatch_ms=5484:worst_cpu_scheduler_silence_ms=5566:worst_silence_cpu=0] +[TTBR0_ASID_CENSUS:untagged=0:tagged=2360:kernel=8017:cleared=10354] +[SCHED_STRAND_ORACLE:aarch64:samples=206:checked=1044:stranded=0:running_shape=0:ready_shape=0:resolved_production=0:resolved_exercised=2:worst_dwell_ms=0:overflow=0:worst_nonprogress_ms=0:nonprogress=1:queued_on_nondispatching_cpu=1:worst_queued_nondispatch_ms=6838:worst_cpu_scheduler_silence_ms=6927:worst_silence_cpu=0] [TOMBSTONE_CENSUS:resident=0:removed=2:reap_second=1:retire_second=1:abandoned_unqueued=0] -[TTBR0_ASID_CENSUS:untagged=0:tagged=6785:kernel=11951:cleared=18658] +[TTBR0_ASID_CENSUS:untagged=0:tagged=2975:kernel=8723:cleared=11670] [PINNED_HOME_CPU_UNAVAILABLE:count=0:publish_discarded=0:hold_pen_migrated=0:delivered=0:migration_refused=0:stack_home_conflict=0] -[heartbeat] tid=1240 uptime_ms=11201 kbd_nonzero=0 +[heartbeat] tid=1241 uptime_ms=11079 kbd_nonzero=0 +F123456789SC[syscall] exit(0) pid=93 name=block_eintr_oracle_child_93 +[TTBR0_ASID_CENSUS:untagged=0:tagged=6786:kernel=12955:cleared=19673] +[heartbeat] tid=1241 uptime_ms=12083 kbd_nonzero=0 [BLOCK_EINTR_ORACLE:PASS:stages=2:reads=4:short=0:eintr=0:handled=1] [BLOCK_EINTR_ORACLE:PASS:stages=2:reads=4:short=0:eintr=0:handled=1] [syscall] exit(0) pid=91 name=block_eintr_oracle -[TTBR0_ASID_CENSUS:untagged=0:tagged=10256:kernel=15794:cleared=25942] +[TTBR0_ASID_CENSUS:untagged=0:tagged=10467:kernel=16978:cleared=27341] [init] block_eintr_oracle exited pid=91 code=0 [spawn] path='/bin/futex_handoff_oracle' -manager.create_process_with_argv [ARM64]: ENTRY - name='futex_handoff_oracle', elf_size=291984, argc=1 +manager.create_process_with_argv [ARM64]: ENTRY - name='futex_handoff_oracle', elf_size=297168, argc=1 manager.create_process_with_argv [ARM64]: Generated PID 94 manager.create_process_with_argv [ARM64]: Creating ProcessPageTable manager.create_process_with_argv [ARM64]: Loading ELF into page table -manager.create_process_with_argv [ARM64]: ELF loaded, entry=0x4000ef08 +manager.create_process_with_argv [ARM64]: ELF loaded, entry=0x4000f28c manager.create_process_with_argv [ARM64]: Allocating user stack manager.create_process_with_argv [ARM64]: User stack will be at 0xfffffeff0000-0xffffff000000 manager.create_process_with_argv [ARM64]: argc/argv set up on stack, SP=0xfffffefffec0 manager.create_process_with_argv [ARM64]: SUCCESS - returning PID 94 [spawn] Created child PID 94 for parent PID 1 [spawn] Success: child PID 94 scheduled -[FUTEX_HANDOFF_ORACLE:aarch64:driven=2:stage1_ret=EAGAIN:stage1_wake=0:stage1_parked=0:stage2_ret=0:stage2_wake=1:stage2_parked=0:stage3_ret=ETIMEDOUT:stage3_elapsed_ok=1:stage3_elapsed_ms=51:arm_delay_us=10:rescues=0:queue_residual=0:balance=0] +[FUTEX_HANDOFF_ORACLE:aarch64:driven=2:stage1_ret=EAGAIN:stage1_wake=0:stage1_parked=0:stage2_ret=0:stage2_wake=1:stage2_parked=0:stage3_ret=ETIMEDOUT:stage3_elapsed_ok=1:stage3_elapsed_ms=51:arm_delay_us=23:rescues=0:queue_residual=0:balance=0] [FUTEX_HANDOFF_ORACLE_DRIVER:s1=-11:s2=0:s3=-110] [syscall] exit(0) pid=94 name=futex_handoff_oracle -[TTBR0_ASID_CENSUS:untagged=0:tagged=11081:kernel=16710:cleared=27673] +[TTBR0_ASID_CENSUS:untagged=0:tagged=11352:kernel=17982:cleared=29220] [init] futex_handoff_oracle exited pid=94 code=0 [spawn] path='/bin/poll_tcp_oracle' -manager.create_process_with_argv [ARM64]: ENTRY - name='poll_tcp_oracle', elf_size=307952, argc=1 +[heartbeat] tid=1241 uptime_ms=13087 kbd_nonzero=0 +manager.create_process_with_argv [ARM64]: ENTRY - name='poll_tcp_oracle', elf_size=324864, argc=1 manager.create_process_with_argv [ARM64]: Generated PID 95 manager.create_process_with_argv [ARM64]: Creating ProcessPageTable manager.create_process_with_argv [ARM64]: Loading ELF into page table -manager.create_process_with_argv [ARM64]: ELF loaded, entry=0x4001050c +manager.create_process_with_argv [ARM64]: ELF loaded, entry=0x40011890 manager.create_process_with_argv [ARM64]: Allocating user stack manager.create_process_with_argv [ARM64]: User stack will be at 0xfffffeff0000-0xffffff000000 manager.create_process_with_argv [ARM64]: argc/argv set up on stack, SP=0xfffffefffed0 manager.create_process_with_argv [ARM64]: SUCCESS - returning PID 95 [spawn] Created child PID 95 for parent PID 1 [spawn] Success: child PID 95 scheduled -[heartbeat] tid=1240 uptime_ms=12202 kbd_nonzero=0 [POLL_TCP_TIMEOUT] fd=4 timeout_ms=120 publish=none_in_window rx_len=0 revents=0x0000 -F123456789SC[syscall] exit(0) pid=96 name=poll_tcp_oracle_child_96 -[TTBR0_ASID_CENSUS:untagged=0:tagged=12261:kernel=17999:cleared=30111] -[POLL_TCP_ORACLE:PASS:stages=3:idle_ms=122:late_ms=84:park_ms=81:attempts=1] -[POLL_TCP_ORACLE:PASS:stages=3:idle_ms=122:late_ms=84:park_ms=81:attempts=1] +F123456789SC[POLL_TCP_ORACLE:PEER:branch=sent:n=23 want=23 anchor=13411 token_ms=13412 write_ms=13499 delay_ms=80] +[POLL_TCP_ORACLE:PEER:branch=sent:n=23 want=23 anchor=13411 token_ms=13412 write_ms=13499 delay_ms=80] +[syscall] exit(0) pid=96 name=poll_tcp_oracle_child_96 +[TTBR0_ASID_CENSUS:untagged=0:tagged=12702:kernel=19431:cleared=31986] +F123456789SC[POLL_TCP_TIMEOUT] fd=4 timeout_ms=150 publish=none_in_window rx_len=0 revents=0x0000 +[POLL_TCP_ORACLE:LOSTWAKE_PROBE:probe_ms=13663 rescan_ready=0 rescan_revents=0x0000 nbread_err=EAGAIN] +[POLL_TCP_ORACLE:LOSTWAKE_PROBE:probe_ms=13663 rescan_ready=0 rescan_revents=0x0000 nbread_err=EAGAIN] +[POLL_TCP_ORACLE:PEER:branch=sent:n=23 want=23 anchor=13508 token_ms=13509 write_ms=14009 delay_ms=500] +[POLL_TCP_ORACLE:PEER:branch=sent:n=23 want=23 anchor=13508 token_ms=13509 write_ms=14009 delay_ms=500] +[syscall] exit(0) pid=97 name=poll_tcp_oracle_child_97 +[TTBR0_ASID_CENSUS:untagged=0:tagged=12887:kernel=19774:cleared=32499] +[POLL_TCP_ORACLE:LATE_PUBLISH:stage=forced decided=published_after_deadline anchor=13508 entry=13509 deadline=13659 returned=13663 write_ms=14009 late_by_ms=350 delay_ms=500 timeout=150] +[POLL_TCP_ORACLE:LATE_PUBLISH:stage=forced decided=published_after_deadline anchor=13508 entry=13509 deadline=13659 returned=13663 write_ms=14009 late_by_ms=350 delay_ms=500 timeout=150] +[POLL_TCP_ORACLE:PASS:stages=4:idle_ms=124:late_ms=88:park_ms=87:forced_ms=154:forced_late_by_ms=350] +[POLL_TCP_ORACLE:PASS:stages=4:idle_ms=124:late_ms=88:park_ms=87:forced_ms=154:forced_late_by_ms=350] [syscall] exit(0) pid=95 name=poll_tcp_oracle -[TTBR0_ASID_CENSUS:untagged=0:tagged=12278:kernel=18016:cleared=30141] +[TTBR0_ASID_CENSUS:untagged=0:tagged=12903:kernel=19788:cleared=32526] [init] poll_tcp_oracle exited pid=95 code=0 [spawn] path='/bin/tty_oracle' -manager.create_process_with_argv [ARM64]: ENTRY - name='tty_oracle', elf_size=338264, argc=1 -manager.create_process_with_argv [ARM64]: Generated PID 97 +[heartbeat] tid=1241 uptime_ms=14093 kbd_nonzero=0 +manager.create_process_with_argv [ARM64]: ENTRY - name='tty_oracle', elf_size=337168, argc=1 +manager.create_process_with_argv [ARM64]: Generated PID 98 manager.create_process_with_argv [ARM64]: Creating ProcessPageTable manager.create_process_with_argv [ARM64]: Loading ELF into page table -manager.create_process_with_argv [ARM64]: ELF loaded, entry=0x40012b34 +manager.create_process_with_argv [ARM64]: ELF loaded, entry=0x40012c44 manager.create_process_with_argv [ARM64]: Allocating user stack manager.create_process_with_argv [ARM64]: User stack will be at 0xfffffeff0000-0xffffff000000 manager.create_process_with_argv [ARM64]: argc/argv set up on stack, SP=0xfffffefffed0 -manager.create_process_with_argv [ARM64]: SUCCESS - returning PID 97 -[spawn] Created child PID 97 for parent PID 1 -[spawn] Success: child PID 97 scheduled +manager.create_process_with_argv [ARM64]: SUCCESS - returning PID 98 +[spawn] Created child PID 98 for parent PID 1 +[spawn] Success: child PID 98 scheduled [pty] sys_posix_openpt(flags=0x902) [pty] Created master fd=3 (pty 2) [pty] Unlocked PTY 2 (fd 3) @@ -867,8 +831,8 @@ manager.create_process_with_argv [ARM64]: SUCCESS - returning PID 97 [TTY_ORACLE:onlcr:verdict=PASS:onlcr_expanded=3:opost_off_passthrough=2] [TTY_ORACLE:winsize:verdict=PASS:default=24x80:set=41x133:crossed_ends=1] [TTY_ORACLE:winsize:verdict=PASS:default=24x80:set=41x133:crossed_ends=1] -[TTY_ORACLE:foreground_pgrp:verdict=PASS:pgrp=97:crossed_ends=1] -[TTY_ORACLE:foreground_pgrp:verdict=PASS:pgrp=97:crossed_ends=1] +[TTY_ORACLE:foreground_pgrp:verdict=PASS:pgrp=98:crossed_ends=1] +[TTY_ORACLE:foreground_pgrp:verdict=PASS:pgrp=98:crossed_ends=1] [TTY_ORACLE:hangup:verdict=PASS:eagain_while_open=1:eof_after_close=1] [TTY_ORACLE:hangup:verdict=PASS:eagain_while_open=1:eof_after_close=1] [pty] sys_posix_openpt(flags=0x902) @@ -881,64 +845,366 @@ manager.create_process_with_argv [ARM64]: SUCCESS - returning PID 97 [pty] Unlocked PTY 3 (fd 4) F123456789SC[EXEC_LOCK_ORDER:FIRST_COMMIT] [EXEC_LOCK_ORDER:commits=1:pm_held=0:unpinned=0:missing=0] -[syscall] exit(0) pid=98 name=/bin/tty_oracle -[TTBR0_ASID_CENSUS:untagged=0:tagged=14827:kernel=20789:cleared=35408] +[syscall] exit(0) pid=99 name=/bin/tty_oracle +[TTBR0_ASID_CENSUS:untagged=0:tagged=15407:kernel=22514:cleared=37692] [TTY_ORACLE:cloexec_exec:verdict=PASS:cloexec_survived_fork=1:eof_after_parent_close=1] [TTY_ORACLE:cloexec_exec:verdict=PASS:cloexec_survived_fork=1:eof_after_parent_close=1] [TTY_ORACLE:COMPLETE:pass=14:fail=0] [TTY_ORACLE:COMPLETE:pass=14:fail=0] -[syscall] exit(0) pid=97 name=tty_oracle -[TTBR0_ASID_CENSUS:untagged=0:tagged=14836:kernel=20794:cleared=35421] -[init] tty_oracle exited pid=97 code=0 +[syscall] exit(0) pid=98 name=tty_oracle +[TTBR0_ASID_CENSUS:untagged=0:tagged=15419:kernel=22521:cleared=37708] +[init] tty_oracle exited pid=98 code=0 [spawn] path='/bin/exec_smoke' -[heartbeat] tid=1240 uptime_ms=13202 kbd_nonzero=0 -manager.create_process_with_argv [ARM64]: ENTRY - name='exec_smoke', elf_size=290928, argc=1 -manager.create_process_with_argv [ARM64]: Generated PID 99 +manager.create_process_with_argv [ARM64]: ENTRY - name='exec_smoke', elf_size=290896, argc=1 +manager.create_process_with_argv [ARM64]: Generated PID 100 manager.create_process_with_argv [ARM64]: Creating ProcessPageTable manager.create_process_with_argv [ARM64]: Loading ELF into page table manager.create_process_with_argv [ARM64]: ELF loaded, entry=0x4000eb40 manager.create_process_with_argv [ARM64]: Allocating user stack manager.create_process_with_argv [ARM64]: User stack will be at 0xfffffeff0000-0xffffff000000 manager.create_process_with_argv [ARM64]: argc/argv set up on stack, SP=0xfffffefffed0 -manager.create_process_with_argv [ARM64]: SUCCESS - returning PID 99 -[spawn] Created child PID 99 for parent PID 1 -[spawn] Success: child PID 99 scheduled +manager.create_process_with_argv [ARM64]: SUCCESS - returning PID 100 +[spawn] Created child PID 100 for parent PID 1 +[spawn] Success: child PID 100 scheduled [EXEC_SMOKE:LAUNCH] [EXEC_LOCK_ORDER:commits=2:pm_held=0:unpinned=0:missing=0] [EXEC_SMOKE:TARGET_ENTER argc=2] +[heartbeat] tid=1241 uptime_ms=15094 kbd_nonzero=0 [EXEC_SMOKE:TARGET_OK] -[syscall] exit(0) pid=99 name=/bin/exec_smoke_target -[TTBR0_ASID_CENSUS:untagged=0:tagged=16530:kernel=22666:cleared=38957] +[syscall] exit(0) pid=100 name=/bin/exec_smoke_target +[TTBR0_ASID_CENSUS:untagged=0:tagged=17150:kernel=24474:cleared=41363] [EXEC_SMOKE:LAUNCHER_EXIT code=0] [spawn] path='/usr/local/test/bin/clonevm_exec_test' -manager.create_process_with_argv [ARM64]: ENTRY - name='clonevm_exec_test', elf_size=289672, argc=1 -manager.create_process_with_argv [ARM64]: Generated PID 100 +manager.create_process_with_argv [ARM64]: ENTRY - name='clonevm_exec_test', elf_size=289648, argc=1 +manager.create_process_with_argv [ARM64]: Generated PID 101 manager.create_process_with_argv [ARM64]: Creating ProcessPageTable manager.create_process_with_argv [ARM64]: Loading ELF into page table manager.create_process_with_argv [ARM64]: ELF loaded, entry=0x4000f63c manager.create_process_with_argv [ARM64]: Allocating user stack manager.create_process_with_argv [ARM64]: User stack will be at 0xfffffeff0000-0xffffff000000 manager.create_process_with_argv [ARM64]: argc/argv set up on stack, SP=0xfffffefffec0 -manager.create_process_with_argv [ARM64]: SUCCESS - returning PID 100 -[spawn] Created child PID 100 for parent PID 1 -[spawn] Success: child PID 100 scheduled +manager.create_process_with_argv [ARM64]: SUCCESS - returning PID 101 +[spawn] Created child PID 101 for parent PID 1 +[spawn] Success: child PID 101 scheduled CLONEVM_EXEC_TEST: start CLONEVM_EXEC_TEST: child live CLONEVM_EXEC_TEST: live sibling refused exec -[syscall] exit(0) pid=101 name=thread-101 -[TTBR0_ASID_CENSUS:untagged=0:tagged=19570:kernel=25304:cleared=44138] +[syscall] exit(0) pid=102 name=thread-102 +[TTBR0_ASID_CENSUS:untagged=0:tagged=20182:kernel=27099:cleared=46542] CLONEVM_EXEC_TEST: child exited -[heartbeat] tid=1240 uptime_ms=14204 kbd_nonzero=0 +[SCHED_STRAND_ORACLE:aarch64:samples=306:checked=1334:stranded=0:running_shape=0:ready_shape=0:resolved_production=0:resolved_exercised=2:worst_dwell_ms=0:overflow=0:worst_nonprogress_ms=0:nonprogress=1:queued_on_nondispatching_cpu=1:worst_queued_nondispatch_ms=6838:worst_cpu_scheduler_silence_ms=6927:worst_silence_cpu=0] +[TOMBSTONE_CENSUS:resident=0:removed=10:reap_second=9:retire_second=1:abandoned_unqueued=0] +[TTBR0_ASID_CENSUS:untagged=0:tagged=20289:kernel=27219:cleared=46767] +[PINNED_HOME_CPU_UNAVAILABLE:count=0:publish_discarded=0:hold_pen_migrated=0:delivered=0:migration_refused=0:stack_home_conflict=0] [EXEC_LOCK_ORDER:commits=3:pm_held=0:unpinned=0:missing=0] CLONEVM_EXEC_TEST: second stage -[syscall] exit(0) pid=102 name=thread-102 -[TTBR0_ASID_CENSUS:untagged=0:tagged=20557:kernel=26336:cleared=46096] +[syscall] exit(0) pid=103 name=thread-103 +[TTBR0_ASID_CENSUS:untagged=0:tagged=21209:kernel=28201:cleared=48617] CLONEVM_EXEC_TEST: post-exec rendezvous complete CLONEVM_EXEC_TEST: post-exec futex keys derived CLONEVM_EXEC_TEST: PASS -[syscall] exit(0) pid=100 name=/usr/local/test/bin/clonevm_exec_test -[TTBR0_ASID_CENSUS:untagged=0:tagged=20560:kernel=26339:cleared=46103] -[init] clonevm_exec_test exited pid=100 code=0 +[syscall] exit(0) pid=101 name=/usr/local/test/bin/clonevm_exec_test +[TTBR0_ASID_CENSUS:untagged=0:tagged=21210:kernel=28203:cleared=48622] +[init] clonevm_exec_test exited pid=101 code=0 [spawn] path='/bin/bsshd' +[heartbeat] tid=1241 uptime_ms=16096 kbd_nonzero=0 +manager.create_process_with_argv [ARM64]: ENTRY - name='bsshd', elf_size=458128, argc=1 +manager.create_process_with_argv [ARM64]: Generated PID 104 +manager.create_process_with_argv [ARM64]: Creating ProcessPageTable +manager.create_process_with_argv [ARM64]: Loading ELF into page table +manager.create_process_with_argv [ARM64]: ELF loaded, entry=0x4001e0b4 +manager.create_process_with_argv [ARM64]: Allocating user stack +manager.create_process_with_argv [ARM64]: User stack will be at 0xfffffeff0000-0xffffff000000 +manager.create_process_with_argv [ARM64]: argc/argv set up on stack, SP=0xfffffefffed0 +manager.create_process_with_argv [ARM64]: SUCCESS - returning PID 104 +[spawn] Created child PID 104 for parent PID 1 +[spawn] Success: child PID 104 scheduled +[init] bsshd started (PID 104) +bsshd: starting on port 2222 +bsshd: listening on 0.0.0.0:2222 +[heartbeat] tid=1241 uptime_ms=17099 kbd_nonzero=0 +[spawn] path='/bin/bssh' +[heartbeat] tid=1241 uptime_ms=18102 kbd_nonzero=0 +manager.create_process_with_argv [ARM64]: ENTRY - name='bssh', elf_size=469408, argc=6 +manager.create_process_with_argv [ARM64]: Generated PID 105 +manager.create_process_with_argv [ARM64]: Creating ProcessPageTable +manager.create_process_with_argv [ARM64]: Loading ELF into page table +manager.create_process_with_argv [ARM64]: ELF loaded, entry=0x4001e6d8 +manager.create_process_with_argv [ARM64]: Allocating user stack +manager.create_process_with_argv [ARM64]: User stack will be at 0xfffffeff0000-0xffffff000000 +manager.create_process_with_argv [ARM64]: argc/argv set up on stack, SP=0xfffffefffe90 +manager.create_process_with_argv [ARM64]: SUCCESS - returning PID 105 +[spawn] Created child PID 105 for parent PID 1 +[spawn] Success: child PID 105 scheduled +bssh: connecting to 127.0.0.1:2222 +bsshd: connection from 10.0.2.15:49153 +F123456789SCbsshd: client version: 'SSH-2.0-bssh_1.0' +bsshd: server version sent +bsshd: KEX curve25519-sha256 +[heartbeat] tid=1241 uptime_ms=19105 kbd_nonzero=0 +[RESUME_PC_CENSUS:cpu=0:source=el1-restore-frame-elr:text=5739:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=0:source=el0-restore-frame-elr:text=0:kstack=0:uva=688:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=0:source=el0-first-entry-frame-elr:text=0:kstack=0:uva=1:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=0:source=ctx-x30:text=15749:kstack=0:uva=563:smallint=129:other=0] +[RESUME_PC_CENSUS:cpu=0:source=ctx-elr-el1:text=15753:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=0:source=lr-save-el1:text=5824:kstack=0:uva=4:smallint=1:other=0] +[RESUME_PC_CENSUS:cpu=0:source=lr-restore-el1:text=5736:kstack=0:uva=3:smallint=1:other=0] +[RESUME_PC_CENSUS:cpu=0:source=lr-save-el0:text=0:kstack=0:uva=586:smallint=128:other=0] +[RESUME_PC_CENSUS:cpu=0:source=lr-restore-el0:text=0:kstack=0:uva=560:smallint=128:other=0] +[RESUME_PC_CENSUS:cpu=1:source=el1-restore-frame-elr:text=5257:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=1:source=el0-restore-frame-elr:text=0:kstack=0:uva=545:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=1:source=el0-first-entry-frame-elr:text=0:kstack=0:uva=1:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=1:source=ctx-x30:text=7207:kstack=0:uva=329:smallint=222:other=0] +[RESUME_PC_CENSUS:cpu=1:source=ctx-elr-el1:text=7213:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=1:source=lr-save-el1:text=5161:kstack=0:uva=4:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=1:source=lr-restore-el1:text=5251:kstack=0:uva=6:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=1:source=lr-save-el0:text=0:kstack=0:uva=312:smallint=220:other=0] +[RESUME_PC_CENSUS:cpu=1:source=lr-restore-el0:text=0:kstack=0:uva=323:smallint=222:other=0] +[RESUME_PC_CENSUS:cpu=2:source=el1-restore-frame-elr:text=5355:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=2:source=el0-restore-frame-elr:text=0:kstack=0:uva=621:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=2:source=el0-first-entry-frame-elr:text=0:kstack=0:uva=4:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=2:source=ctx-x30:text=7421:kstack=0:uva=408:smallint=218:other=0] +[RESUME_PC_CENSUS:cpu=2:source=ctx-elr-el1:text=7426:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=2:source=lr-save-el1:text=5349:kstack=0:uva=4:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=2:source=lr-restore-el1:text=5350:kstack=0:uva=5:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=2:source=lr-save-el0:text=0:kstack=0:uva=393:smallint=217:other=0] +[RESUME_PC_CENSUS:cpu=2:source=lr-restore-el0:text=0:kstack=0:uva=403:smallint=218:other=0] +[RESUME_PC_CENSUS:cpu=3:source=el1-restore-frame-elr:text=5696:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=3:source=el0-restore-frame-elr:text=0:kstack=0:uva=592:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=3:source=el0-first-entry-frame-elr:text=0:kstack=0:uva=3:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=3:source=ctx-x30:text=7846:kstack=0:uva=415:smallint=179:other=0] +[RESUME_PC_CENSUS:cpu=3:source=ctx-elr-el1:text=7848:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=3:source=lr-save-el1:text=5699:kstack=0:uva=5:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=3:source=lr-restore-el1:text=5694:kstack=0:uva=2:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=3:source=lr-save-el0:text=0:kstack=0:uva=392:smallint=180:other=0] +[RESUME_PC_CENSUS:cpu=3:source=lr-restore-el0:text=0:kstack=0:uva=413:smallint=179:other=0] +[heartbeat] tid=1241 uptime_ms=20107 kbd_nonzero=0 +[PT_ROOT_CUSTODY:no_proof=13:no_arch=0:terminated=1:undecided=1:mid_retire=1:retired=82] +[TOMBSTONE_CENSUS:resident=0:removed=11:reap_second=10:retire_second=1:abandoned_unqueued=0] +[TTBR0_ASID_CENSUS:untagged=0:tagged=28637:kernel=36039:cleared=62706] +[net-rx-counters] sample=1 begin +[net-rx-counters] sample=1 NET_RX_MSI_TOTAL: 0 +[net-rx-counters] sample=1 NET_RX_RING_DRAIN_TOTAL: 0 +[net-rx-counters] sample=1 NET_RX_FRAME_TOTAL: 3 (cpu0=3) +[net-rx-counters] sample=1 NET_RX_ARP_TOTAL: 2 (cpu0=2) +[net-rx-counters] sample=1 NET_RX_ETHERTYPE_OTHER_TOTAL: 0 +[net-rx-counters] sample=1 NET_RX_SOFTIRQ_ENTRY_TOTAL: 46 (cpu0=5, cpu1=17, cpu2=14, cpu3=10) +[net-rx-counters] sample=1 NET_RX_SOFTIRQ_EXIT_TOTAL: 46 (cpu0=5, cpu1=17, cpu2=14, cpu3=10) +[net-rx-counters] sample=1 NET_RX_REENTRANT_SKIP_TOTAL: 1 (cpu1=1) +[net-rx-counters] sample=1 NET_RX_GUARD_RELEASE_TOTAL: 45 (cpu0=5, cpu1=16, cpu2=14, cpu3=10) +[net-rx-counters] sample=1 NET_RX_REARM_CHECK_TOTAL: 0 +[net-rx-counters] sample=1 NET_RX_REARM_RACE_TOTAL: 0 +[net-rx-counters] sample=1 NET_RX_REARM_ARMED_TOTAL: 0 +[net-rx-counters] sample=1 NET_PCI_IRQ_RAISED_NETRX: 0 +[net-rx-counters] sample=1 GIC_SPI55_ACK_TOTAL: 0 +[net-rx-counters] sample=1 end +[SCHED_STRAND_ORACLE:aarch64:samples=405:checked=1609:stranded=0:running_shape=0:ready_shape=0:resolved_production=0:resolved_exercised=2:worst_dwell_ms=0:overflow=0:worst_nonprogress_ms=0:nonprogress=1:queued_on_nondispatching_cpu=1:worst_queued_nondispatch_ms=6838:worst_cpu_scheduler_silence_ms=6927:worst_silence_cpu=0] +[TOMBSTONE_CENSUS:resident=0:removed=11:reap_second=10:retire_second=1:abandoned_unqueued=0] +[TTBR0_ASID_CENSUS:untagged=0:tagged=30153:kernel=37176:cleared=64663] +[PINNED_HOME_CPU_UNAVAILABLE:count=0:publish_discarded=0:hold_pen_migrated=0:delivered=0:migration_refused=0:stack_home_conflict=0] +[heartbeat] tid=1241 uptime_ms=21124 kbd_nonzero=0 +[heartbeat] tid=1241 uptime_ms=22125 kbd_nonzero=0 +[heartbeat] tid=1241 uptime_ms=23127 kbd_nonzero=0 +bssh: pinned host key [127.0.0.1]:2222 algorithm=rsa-sha2-256 fingerprint=SHA256:87d2e842d6e8ca62a4f93d8ec5f3e6341a7493396a649de7cee70c7b689b84c0 +bssh: userauth request method=publickey user='root' algo=rsa-sha2-256 has_signature=false key_blob_len=279 +bsshd: pubkey auth: algo=rsa-sha2-256 blob_len=279 has_sig=false +bsshd: key MATCHES authorized_keys! +[heartbeat] tid=1241 uptime_ms=24130 kbd_nonzero=0 +[heartbeat] tid=1241 uptime_ms=25132 kbd_nonzero=0 +[SCHED_STRAND_ORACLE:aarch64:samples=504:checked=1907:stranded=0:running_shape=0:ready_shape=0:resolved_production=0:resolved_exercised=2:worst_dwell_ms=0:overflow=0:worst_nonprogress_ms=0:nonprogress=1:queued_on_nondispatching_cpu=1:worst_queued_nondispatch_ms=6838:worst_cpu_scheduler_silence_ms=6927:worst_silence_cpu=0] +[TOMBSTONE_CENSUS:resident=0:removed=11:reap_second=10:retire_second=1:abandoned_unqueued=0] +[TTBR0_ASID_CENSUS:untagged=0:tagged=41524:kernel=45827:cleared=79534] +[PINNED_HOME_CPU_UNAVAILABLE:count=0:publish_discarded=0:hold_pen_migrated=0:delivered=0:migration_refused=0:stack_home_conflict=0] +[heartbeat] tid=1241 uptime_ms=26134 kbd_nonzero=0 +[heartbeat] tid=1241 uptime_ms=27136 kbd_nonzero=0 +bssh: userauth request method=publickey user='root' algo=rsa-sha2-256 has_signature=true signature_len=276 +bsshd: pubkey auth: algo=rsa-sha2-256 blob_len=279 has_sig=true +bsshd: key MATCHES authorized_keys! +bssh: authenticated as 'root' +bssh: smoke success +bsshd: authenticated user 'root' +[syscall] exit(0) pid=105 name=bssh +[TTBR0_ASID_CENSUS:untagged=0:tagged=46939:kernel=49890:cleared=86515] +[heartbeat] tid=1241 uptime_ms=28137 kbd_nonzero=0 +[spawn] path='/bin/bssh' +bsshd: channel setup failed: Io -[BSSH_PUBKEY_ORACLE:right=ok:wrong=refused:PASS] +[CTX596_ELR_DIVERGENCE] tid=1230 cpu=1 prev_elr=0xffff0000404ce668 x30=0xffff000040516298 ctx_elr=0xffff000040516298 + +[INLINE_SAVE_OVERWRITE] tid=1230 sp=0xffff00005432fed0 old_sp=0xffff00005432fed0 saved_sp=0xffff00005432fed0 delta=0x0 saved_lr=0xffff0000405262f4 saved_slot20=0xffff0000405262f4 slot20=0xffff0000405262f4 elr=0xffff000040516298 x30=0xffff000040516298 +[syscall] exit(0) pid=106 name=bsshd_child_106 +[TTBR0_ASID_CENSUS:untagged=0:tagged=46985:kernel=49915:cleared=86572] +manager.create_process_with_argv [ARM64]: ENTRY - name='bssh', elf_size=469408, argc=6 +manager.create_process_with_argv [ARM64]: Generated PID 107 +manager.create_process_with_argv [ARM64]: Creating ProcessPageTable +manager.create_process_with_argv [ARM64]: Loading ELF into page table +manager.create_process_with_argv [ARM64]: ELF loaded, entry=0x4001e6d8 +manager.create_process_with_argv [ARM64]: Allocating user stack +manager.create_process_with_argv [ARM64]: User stack will be at 0xfffffeff0000-0xffffff000000 +manager.create_process_with_argv [ARM64]: argc/argv set up on stack, SP=0xfffffefffe80 +manager.create_process_with_argv [ARM64]: SUCCESS - returning PID 107 +[spawn] Created child PID 107 for parent PID 1 +[spawn] Success: child PID 107 scheduled +bssh: connecting to 127.0.0.1:2222 +bsshd: connection from 10.0.2.15:49154 +F123456789SCbsshd: client version: 'SSH-2.0-bssh_1.0' +bsshd: server version sent +bsshd: KEX curve25519-sha256 +[heartbeat] tid=1241 uptime_ms=29141 kbd_nonzero=0 +[RESUME_PC_CENSUS:cpu=0:source=el1-restore-frame-elr:text=7630:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=0:source=el0-restore-frame-elr:text=0:kstack=0:uva=4028:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=0:source=el0-first-entry-frame-elr:text=0:kstack=0:uva=1:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=0:source=ctx-x30:text=18606:kstack=0:uva=3924:smallint=129:other=0] +[RESUME_PC_CENSUS:cpu=0:source=ctx-elr-el1:text=18631:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=0:source=lr-save-el1:text=7704:kstack=0:uva=28:smallint=1:other=0] +[RESUME_PC_CENSUS:cpu=0:source=lr-restore-el1:text=7605:kstack=0:uva=24:smallint=1:other=0] +[RESUME_PC_CENSUS:cpu=0:source=lr-save-el0:text=0:kstack=0:uva=3661:smallint=128:other=0] +[RESUME_PC_CENSUS:cpu=0:source=lr-restore-el0:text=0:kstack=0:uva=3900:smallint=128:other=0] +[RESUME_PC_CENSUS:cpu=1:source=el1-restore-frame-elr:text=6891:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=1:source=el0-restore-frame-elr:text=0:kstack=0:uva=3319:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=1:source=el0-first-entry-frame-elr:text=0:kstack=0:uva=2:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=1:source=ctx-x30:text=9000:kstack=0:uva=3132:smallint=222:other=0] +[RESUME_PC_CENSUS:cpu=1:source=ctx-elr-el1:text=9035:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=1:source=lr-save-el1:text=6766:kstack=0:uva=32:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=1:source=lr-restore-el1:text=6856:kstack=0:uva=35:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=1:source=lr-save-el0:text=0:kstack=0:uva=3082:smallint=220:other=0] +[RESUME_PC_CENSUS:cpu=1:source=lr-restore-el0:text=0:kstack=0:uva=3097:smallint=222:other=0] +[RESUME_PC_CENSUS:cpu=2:source=el1-restore-frame-elr:text=6958:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=2:source=el0-restore-frame-elr:text=0:kstack=0:uva=3520:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=2:source=el0-first-entry-frame-elr:text=0:kstack=0:uva=4:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=2:source=ctx-x30:text=9176:kstack=0:uva=3349:smallint=218:other=0] +[RESUME_PC_CENSUS:cpu=2:source=ctx-elr-el1:text=9222:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=2:source=lr-save-el1:text=6890:kstack=0:uva=45:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=2:source=lr-restore-el1:text=6912:kstack=0:uva=46:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=2:source=lr-save-el0:text=0:kstack=0:uva=3293:smallint=217:other=0] +[RESUME_PC_CENSUS:cpu=2:source=lr-restore-el0:text=0:kstack=0:uva=3304:smallint=218:other=0] +[RESUME_PC_CENSUS:cpu=3:source=el1-restore-frame-elr:text=7231:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=3:source=el0-restore-frame-elr:text=0:kstack=0:uva=3267:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=3:source=el0-first-entry-frame-elr:text=0:kstack=0:uva=3:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=3:source=ctx-x30:text=9580:kstack=0:uva=3121:smallint=179:other=0] +[RESUME_PC_CENSUS:cpu=3:source=ctx-elr-el1:text=9613:kstack=0:uva=0:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=3:source=lr-save-el1:text=7213:kstack=0:uva=33:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=3:source=lr-restore-el1:text=7199:kstack=0:uva=33:smallint=0:other=0] +[RESUME_PC_CENSUS:cpu=3:source=lr-save-el0:text=0:kstack=0:uva=3061:smallint=180:other=0] +[RESUME_PC_CENSUS:cpu=3:source=lr-restore-el0:text=0:kstack=0:uva=3088:smallint=179:other=0] +[heartbeat] tid=1241 uptime_ms=30143 kbd_nonzero=0 +[PT_ROOT_CUSTODY:no_proof=15:no_arch=0:terminated=1:undecided=1:mid_retire=1:retired=82] +[TOMBSTONE_CENSUS:resident=0:removed=13:reap_second=12:retire_second=1:abandoned_unqueued=0] +[TTBR0_ASID_CENSUS:untagged=0:tagged=52429:kernel=55086:cleared=95717] +[net-rx-counters] sample=2 begin +[net-rx-counters] sample=2 NET_RX_MSI_TOTAL: 0 +[net-rx-counters] sample=2 NET_RX_RING_DRAIN_TOTAL: 0 +[net-rx-counters] sample=2 NET_RX_FRAME_TOTAL: 3 (cpu0=3) +[net-rx-counters] sample=2 NET_RX_ARP_TOTAL: 2 (cpu0=2) +[net-rx-counters] sample=2 NET_RX_ETHERTYPE_OTHER_TOTAL: 0 +[net-rx-counters] sample=2 NET_RX_SOFTIRQ_ENTRY_TOTAL: 70 (cpu0=13, cpu1=25, cpu2=16, cpu3=16) +[net-rx-counters] sample=2 NET_RX_SOFTIRQ_EXIT_TOTAL: 70 (cpu0=13, cpu1=25, cpu2=16, cpu3=16) +[net-rx-counters] sample=2 NET_RX_REENTRANT_SKIP_TOTAL: 1 (cpu1=1) +[net-rx-counters] sample=2 NET_RX_GUARD_RELEASE_TOTAL: 69 (cpu0=13, cpu1=24, cpu2=16, cpu3=16) +[net-rx-counters] sample=2 NET_RX_REARM_CHECK_TOTAL: 0 +[net-rx-counters] sample=2 NET_RX_REARM_RACE_TOTAL: 0 +[net-rx-counters] sample=2 NET_RX_REARM_ARMED_TOTAL: 0 +[net-rx-counters] sample=2 NET_PCI_IRQ_RAISED_NETRX: 0 +[net-rx-counters] sample=2 GIC_SPI55_ACK_TOTAL: 0 +[net-rx-counters] sample=2 end +[SCHED_STRAND_ORACLE:aarch64:samples=603:checked=2206:stranded=0:running_shape=0:ready_shape=0:resolved_production=0:resolved_exercised=2:worst_dwell_ms=0:overflow=0:worst_nonprogress_ms=0:nonprogress=1:queued_on_nondispatching_cpu=1:worst_queued_nondispatch_ms=6838:worst_cpu_scheduler_silence_ms=6927:worst_silence_cpu=0] +[TOMBSTONE_CENSUS:resident=0:removed=13:reap_second=12:retire_second=1:abandoned_unqueued=0] +[TTBR0_ASID_CENSUS:untagged=0:tagged=53850:kernel=56172:cleared=97582] +[PINNED_HOME_CPU_UNAVAILABLE:count=0:publish_discarded=0:hold_pen_migrated=0:delivered=0:migration_refused=0:stack_home_conflict=0] +[heartbeat] tid=1241 uptime_ms=31156 kbd_nonzero=0 +[heartbeat] tid=1241 uptime_ms=32158 kbd_nonzero=0 +[heartbeat] tid=1241 uptime_ms=33159 kbd_nonzero=0 +bssh: userauth request method=publickey user='root' algo=rsa-sha2-256 has_signature=false key_blob_len=279 +bsshd: pubkey auth: algo=rsa-sha2-256 blob_len=279 has_sig=false +bsshd: key MATCHES authorized_keys! +[heartbeat] tid=1241 uptime_ms=34162 kbd_nonzero=0 +[heartbeat] tid=1241 uptime_ms=35164 kbd_nonzero=0 +[SCHED_STRAND_ORACLE:aarch64:samples=702:checked=2503:stranded=0:running_shape=0:ready_shape=0:resolved_production=0:resolved_exercised=2:worst_dwell_ms=0:overflow=0:worst_nonprogress_ms=0:nonprogress=1:queued_on_nondispatching_cpu=1:worst_queued_nondispatch_ms=6838:worst_cpu_scheduler_silence_ms=6927:worst_silence_cpu=0] +[TOMBSTONE_CENSUS:resident=0:removed=13:reap_second=12:retire_second=1:abandoned_unqueued=0] +[TTBR0_ASID_CENSUS:untagged=0:tagged=65311:kernel=64857:cleared=112487] +[PINNED_HOME_CPU_UNAVAILABLE:count=0:publish_discarded=0:hold_pen_migrated=0:delivered=0:migration_refused=0:stack_home_conflict=0] +[heartbeat] tid=1241 uptime_ms=36167 kbd_nonzero=0 +[heartbeat] tid=1241 uptime_ms=37168 kbd_nonzero=0 +bssh: userauth request method=publickey user='root' algo=rsa-sha2-256 has_signature=true signature_len=276 +bsshd: pubkey auth: algo=rsa-sha2-256 blob_len=279 has_sig=true +bsshd: key MATCHES authorized_keys! +bssh: userauth failure methods='publickey,password' partial=false +bssh: authentication failed +[syscall] exit(77) pid=107 name=bssh +[TTBR0_ASID_CENSUS:untagged=0:tagged=70212:kernel=68473:cleared=118731] +[BSSH_PUBKEY_ORACLE:right=ok:wrong=refused:PASS] +[spawn] path='/bin/xhci_counters' +bsshd: handshake failed: Io +[syscall] exit(0) pid=108 name=bsshd_child_108 +[TTBR0_ASID_CENSUS:untagged=0:tagged=70274:kernel=68523:cleared=118827] +manager.create_process_with_argv [ARM64]: ENTRY - name='xhci_counters', elf_size=292232, argc=1 +manager.create_process_with_argv [ARM64]: Generated PID 109 +manager.create_process_with_argv [ARM64]: Creating ProcessPageTable +manager.create_process_with_argv [ARM64]: Loading ELF into page table +manager.create_process_with_argv [ARM64]: ELF loaded, entry=0x4000f140 +manager.create_process_with_argv [ARM64]: Allocating user stack +manager.create_process_with_argv [ARM64]: User stack will be at 0xfffffeff0000-0xffffff000000 +manager.create_process_with_argv [ARM64]: argc/argv set up on stack, SP=0xfffffefffed0 +manager.create_process_with_argv [ARM64]: SUCCESS - returning PID 109 +[spawn] Created child PID 109 for parent PID 1 +[spawn] Success: child PID 109 scheduled +[spawn] path='/bin/bwm' +[xhci-counters] XHCI_MSI_EVENT_TOTAL=0 +[xhci-counters] XHCI_IRQ_ENTRY_TOTAL=0 +[xhci-counters] XHCI_LOCK_CONTENDED_TOTAL=0 +[xhci-counters] KBD_NONZERO_TOTAL=0 +[syscall] exit(0) pid=109 name=xhci_counters +[TTBR0_ASID_CENSUS:untagged=0:tagged=71082:kernel=69421:cleared=120528] +[heartbeat] tid=1241 uptime_ms=38170 kbd_nonzero=0 +manager.create_process_with_argv [ARM64]: ENTRY - name='bwm', elf_size=431472, argc=1 +manager.create_process_with_argv [ARM64]: Generated PID 110 +manager.create_process_with_argv [ARM64]: Creating ProcessPageTable +manager.create_process_with_argv [ARM64]: Loading ELF into page table +manager.create_process_with_argv [ARM64]: ELF loaded, entry=0x40018bc8 +manager.create_process_with_argv [ARM64]: Allocating user stack +manager.create_process_with_argv [ARM64]: User stack will be at 0xfffffeff0000-0xffffff000000 +manager.create_process_with_argv [ARM64]: argc/argv set up on stack, SP=0xfffffefffee0 +manager.create_process_with_argv [ARM64]: SUCCESS - returning PID 110 +[spawn] Created child PID 110 for parent PID 1 +[spawn] Success: child PID 110 scheduled +[spawn] path='/sbin/telnetd' +[bwm] Breenix Window Manager starting... (v2-chromeless-skip) +manager.create_process_with_argv [ARM64]: ENTRY - name='telnetd', elf_size=298072, argc=1 +manager.create_process_with_argv [ARM64]: Generated PID 111 +manager.create_process_with_argv [ARM64]: Creating ProcessPageTable +manager.create_process_with_argv [ARM64]: Loading ELF into page table +manager.create_process_with_argv [ARM64]: ELF loaded, entry=0x4000fb28 +manager.create_process_with_argv [ARM64]: Allocating user stack +manager.create_process_with_argv [ARM64]: User stack will be at 0xfffffeff0000-0xffffff000000 +manager.create_process_with_argv [ARM64]: argc/argv set up on stack, SP=0xfffffefffed0 +manager.create_process_with_argv [ARM64]: SUCCESS - returning PID 111 +[spawn] Created child PID 111 for parent PID 1 +[spawn] Success: child PID 111 scheduled +[init] Boot script completed +[spawn] path='/bin/bounce' +TELNETD_STARTING +TELNETD_LISTENING +manager.create_process_with_argv [ARM64]: ENTRY - name='bounce', elf_size=387984, argc=1 +manager.create_process_with_argv [ARM64]: Generated PID 112 +manager.create_process_with_argv [ARM64]: Creating ProcessPageTable +manager.create_process_with_argv [ARM64]: Loading ELF into page table +manager.create_process_with_argv [ARM64]: ELF loaded, entry=0x400188e0 +manager.create_process_with_argv [ARM64]: Allocating user stack +manager.create_process_with_argv [ARM64]: User stack will be at 0xfffffeff0000-0xffffff000000 +manager.create_process_with_argv [ARM64]: argc/argv set up on stack, SP=0xfffffefffed0 +manager.create_process_with_argv [ARM64]: SUCCESS - returning PID 112 +[spawn] Created child PID 112 for parent PID 1 +[spawn] Success: child PID 112 scheduled +[init] bounce started (PID 112) +[INIT_GROUP_WALK:aarch64:rows=13:init_tgid_rows=1:foreign_tgid_rows=0:refused=3:verdict=PASS] +[INIT_GROUP_WALK:aarch64:rows=13:init_tgid_rows=1:foreign_tgid_rows=0:refused=4:verdict=PASS] +[INIT_GROUP_REFUSAL:aarch64:phase=quiesce:probe1=-22:probe2=-22:expected=-22] +[init] Process 92 exited (code 0) +[init] Process 93 exited (code 0) +[init] Process 102 exited (code 0) +[init] Process 103 exited (code 0) +[init] Process 109 exited (code 0) +Bounce spheres demo starting (for Gus!) [boot_id=000000090b5b2f90] +[window] create_window_buffer: 400x300 (480000 bytes, 118 pages) +[window] Created buffer id=1 for pid=112: 400x300 at virt=0x7ffffdf86000 phys=0x44391000 +[bounce] Window mode: id=1 400x300 [boot_id=000000090b5b2f90] diff --git a/tests/serial_line_atomicity_structure.rs b/tests/serial_line_atomicity_structure.rs index 52cc39596..1ee489141 100644 --- a/tests/serial_line_atomicity_structure.rs +++ b/tests/serial_line_atomicity_structure.rs @@ -774,17 +774,6 @@ const RAW_SERIAL_PRIMITIVE_ANCHORS: &[(&str, &str, usize)] = &[ "fn animation_thread_entry::fn raw_char", 1, ), - ( - "kernel/src/interrupts/context_switch.rs", - "fn raw_serial_char", - 1, - ), - ( - "kernel/src/interrupts/context_switch.rs", - "fn raw_serial_str", - 1, - ), - ("kernel/src/per_cpu.rs", "fn can_schedule", 1), ( "kernel/src/serial.rs", "fn emergency_print::impl fmt::Write for EmergencySerial::fn write_str", @@ -1080,36 +1069,6 @@ const UNLOCKED_MULTI_BYTE_WRITE_ANCHORS: &[(&str, &str, usize)] = &[ "fn timer_interrupt_handler", 6, ), - ( - "kernel/src/interrupts/context_switch.rs", - "fn check_need_resched_and_switch", - 4, - ), - ( - "kernel/src/interrupts/context_switch.rs", - "fn note_dispatch_guard_unavailable", - 5, - ), - ( - "kernel/src/interrupts/context_switch.rs", - "fn raw_serial_u64", - 1, - ), - ( - "kernel/src/interrupts/context_switch.rs", - "fn refuse_unpublished_dispatch", - 3, - ), - ( - "kernel/src/interrupts/context_switch.rs", - "fn restore_userspace_thread_context", - 10, - ), - ( - "kernel/src/interrupts/context_switch.rs", - "fn switch_to_thread", - 10, - ), // #608 F4: the timed-futex failure record. It fires only when a timed // wait arbitrates to something other than ETIMEDOUT, is budgeted to 32 // lines a boot, and must stay lock-free because the futex wait reaches it