Skip to content

Commit c156450

Browse files
Japabuclaude
andcommitted
issues: the two reds main's guest lanes found stay until main's nightly meets their exits
Round 2 deleted both because #675 and #676 were to land in one batch with this branch and close them. The owner has since ruled that #675 and #676 land on their own reviews, with a nightly run on main to confirm them, so nothing closes these two by this branch's landing. They are restored as round 2 found them, at 90a989e^: when this branch lands, each goes only if main's nightly has met its exit, and otherwise stays, corrected. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016t9wjdQkB8SH7bmfUoiy6L
1 parent 9ce37f2 commit c156450

2 files changed

Lines changed: 65 additions & 0 deletions

File tree

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
---
2+
status: open
3+
kind: defect
4+
opened: 2026-10-01
5+
---
6+
7+
# Every AArch64 guest dies at the kernel's entry on CI's firmware
8+
9+
All sixteen `virt_*` tests red in CI. Each boot's console ends the same way:
10+
`Loader log: the kernel handoff begins`, then the firmware's
11+
`Synchronous Exception at 0x00000000BC33EB20`. The PC differs per kernel build,
12+
but always falls inside the kernel image the loader placed at `0xbc200000`. That
13+
happens at EL1 entry (`Profile::Virt`) and at EL2 entry (`VirtEl2`), on one CPU
14+
and on eight. The kernel prints nothing first, so the tests time out waiting for
15+
their first marker.
16+
17+
**Evidence**, identical in two runs on toolchain
18+
`toolchain-linux-x86_64-48dd24f826263d6c`:
19+
- Main's nightly `guest` lane at `06788146b`, run 36843762360, job 110374194368.
20+
- PR #671's `guest` check, on its merge onto `59052827f`, run 36863809437, job
21+
110375742604.
22+
23+
Both ran QEMU 11.1.1 under TCG `-cpu max` on an AMD EPYC 9V45 with 4 cores. The
24+
firmware was Debian's `AAVMF_CODE.no-secboot.fd`, "version 2026.05-2". Both
25+
logged `test result: FAILED. 4 passed, 17 failed`. The other red is
26+
`issues/kernel/the-nested-nmi-report-interleaves-with-another-cpus-console-line.md`.
27+
28+
The same sixteen tests pass on the dev host, in a whole-suite run of #670's
29+
branch (`test result: ok. 21 passed`). That host ran QEMU 11.1.1 from
30+
Homebrew, under the same TCG `-cpu max` for `VirtEl2`. Two parts of the
31+
instrument differ:
32+
- The firmware: the dev host runs QEMU's bundled `edk2-stable202408-prebuilt.qemu.org`.
33+
- The toolchain: the dev host builds its own, and CI installs the published release.
34+
35+
`.github/qemu-version` pins neither of the two.
36+
37+
**Exit:** the sixteen `virt_*` tests are green in CI's `guest` check.
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
---
2+
status: open
3+
kind: defect
4+
opened: 2026-10-01
5+
---
6+
7+
# The nested-NMI report interleaves with another CPU's console line
8+
9+
`nested_nmi` (`kernel/src/arch/x86_64/idt/nmi.rs`) writes its report through
10+
`serial::panic_raw`, which takes no lock. When cpu1 is writing its own record at
11+
the same moment, the two lines interleave byte by byte on the 16550. The cpu1
12+
line was `[kernel 0.385 cpu1] CPU 1: joining scheduler`, and the 16550 carried:
13+
14+
[[kenrnmel i0.38]5 cpNu1E] CSPUT 1E: Djo inNiMngI s choednule r
15+
16+
`NESTED NMI` is never whole on the console, so `nested_nmi_is_loud` times out
17+
waiting for it, and the machine halts with its report unreadable.
18+
19+
**Evidence:** red under KVM in two runs, with byte-identical interleaving:
20+
- Main's nightly `guest` lane at `06788146b`, run 36843762360, job 110374194368.
21+
- PR #671's `guest` check, on its merge onto `59052827f`, run 36863809437, job
22+
110375742604.
23+
24+
It is green under TCG: on the dev host in a whole-suite run of #670's branch,
25+
and on a runner in main's nightly `tcg` lane at `06788146b` (job 110374194382).
26+
27+
**Exit:** `nested_nmi_is_loud` is green in CI's KVM `guest` check, and a report
28+
written while another CPU is writing a record reads whole.

0 commit comments

Comments
 (0)