Repository navigation
The ACPI probes ask off the boot processor from a held thread - #1187
Merged
Merged
Conversation
acpi_mediated asked its three crossed firmware calls, and acpi_release its claim, from a thread it spawned again until one read itself off the boot processor, 64 at most. Where the spawns went was the scheduler's, and on a two-CPU guest it put all 64 on the boot processor: three nightly reds from 2026-10-21 to 11-03 (runs 39566825102 tcg, 40847028162 and 41618038084 kvm) and the first guest-rows run at 15c26bf (42008942191), each `acpi: 64 threads in a row started on the boot processor`. acpi_release fell back to claiming from the boot processor, which the T14's acpi_server_death judge then refused; and a thread that read itself off the boot processor could still be preempted onto it before the kernel took its request. Both now ask from one thread held to the machine's last CPU with core_affinity (tests/guest/rust-tests/src/off_the_boot_processor.rs). A mask moves the thread as it is set and keeps it off every other CPU, which affinity_pins holds, so the asker is fixed before the request and stays so. The harness now requires each of the three crossed calls asked from that CPU, where it required one of them asked from any CPU but the boot processor. Nightly 41427513540 reddened the same row another way, ten lines for five calls: on that tree the boot carried a console port, and the merged capture held each call's line once off the port and once off the UART after the UART had said the log was carried elsewhere. acpicase's probe boots have had no console port since 79473b7, so the UART is their one console. The records lose what the pin closes: the window and the 64-try fallback in issues/no-t14-row-arranges-an-acpi-disable-asked-off-the-boot-processor.md, and the matching caveat in the ACPI track. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… the internet Six nightlies from 2026-10-24 to 10-31 failed portability-linux before its first step, the pull of public.ecr.aws/docker/library/debian:sid refused `toomanyrequests`. A verdict that rests on the public internet is one root CLAUDE.md rules out; the nightly is frozen, so the record that owns its resumption now carries this too. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Collaborator
Author
Review r1 of #1187 at 0383550 (and the record-only f529b66)Architecture. Pinning is legitimate test control. The probes test whether Does
Is 64 spawns in a row on cpu0 expected placement? Not by the documented rule. This is the one required finding. Required
Suggestions
Records.
SEND BACK |
… whose serial nobody keeps Review r1 of #1187: the pin removes the only signal of a placement that contradicts CpuHandles::place, so the four runs that showed it, the rule and the candidate causes are a sighting with an owner. And guest-rows 42010705757's serial artifact held another lane's passing boot while the stalled stdio-UART boot left no file at all. The harness's crossed bytes say they are the probe's CROSSED. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Japabu
added a commit
that referenced
this pull request
Nov 5, 2026
…'s hand-over, on main too The STALL review r1 of #1187 asked to attribute: 3 of 3 runs, two at 0383550 and one at main b27dd3e, each silent after the kernel's Boot: complete. The press arm makes no firmware call and the stall is before any userland line, so it is not this branch's; recorded with its runs and the neighbouring boot whose UART stopped mid-line. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…'s hand-over, on main too The STALL review r1 of #1187 asked to attribute: 3 of 3 runs, two at 0383550 and one at main b27dd3e, each silent after the kernel's Boot: complete. The press arm makes no firmware call and the stall is before any userland line, so it is not this branch's; recorded with its runs and the neighbouring boot whose UART stopped mid-line. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Collaborator
Author
|
Orchestrator verification of the round after review (0383550..2060374). It changes no code:
|
Japabu
marked this pull request as ready for review
November 5, 2026 12:52
This was referenced Nov 5, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
acpi_mediated_accessreddened intermittently withacpi: 64 threads in a row started on the boot processor: three nightly reds between 2026-10-21 and 11-03 (39566825102 tcg, 40847028162 and 41618038084 kvm), and the first guest-rows run of main at 15c26bf on the quiet runner (42008942191). The probe spawned a thread again and again until one read itself off the boot processor; where a spawn lands is the scheduler's, and on a two-CPU guest it can land every one on the boot processor.acpi_release, the T14acpi_server_deathjob, used the same loop and fell back to claiming from the boot processor, which that row's judge refuses; and a thread that read itself off the boot processor could still be preempted onto it before the kernel took its request.Change
Both probes ask from one thread held to the machine's last CPU with
core_affinity(tests/guest/rust-tests/src/off_the_boot_processor.rs). A mask moves the thread as it is set and keeps it off every other CPU, whichaffinity_pinsholds, so the asker is fixed before the request and stays fixed. The 64-try loops and the fallback are gone.The harness now requires each of the three crossed calls (
0x51..0x53) asked from that CPU (cpu{cpus-1}), where it required one of them asked from any CPU but the boot processor.Records:
issues/no-t14-row-arranges-an-acpi-disable-asked-off-the-boot-processor.mdloses the enable's window and the fallback (its exit loses that clause; the disable's asker and the lock-spin answer stay owed), and the ACPI track loses the matching caveat.Nightly 41427513540 reddened the same row a second way, ten lines for five calls. On that tree the acpicase boot carried a console port, and the merged capture held each call's line off the port and again off the UART. acpicase's probe boots have had no console port since 79473b7, so the UART is their one console and nothing here addresses that mode.
Evidence
All guest runs on the guest runner (
guest-rows.yml), x86-64 KVM:acpi_mediated_access …64 threads in a row started on the boot processoracpi_acpi_mediated_accessgreen, the three callsasked from cpu1, x2APIC[1, 1, 1];acpi_lock_given_back_on_one_cpu,acpi_supply_outlives_holder,acpi_holder_is_refused_a_held_functions_configurationgreen;acpi_press_is_one_sciSTALL, see belowacpi_mediated_accessfirmware call 0x51 was asked from cpu0, where the probe held its asker to cpu1Logs: https://github.com/ToyOSOrg/evidence/tree/cae8728ee085cd0e7555b49c065fe21dc4f27226
acpi_press_is_one_scistalls in 3 of 3 runs: 42010705757 and 42016111039 at 0383550, and 42025888487 on main at b27dd3e. Every time, the console ends at the kernel'sBoot: completeand carries nothing past the UART's hand-over to its driver, so no line of any userland process appears. It is main's, not this branch's: the press arm makes no firmware call, and the silence starts before the probe could speak. Recorded with the runs inissues/acpi-press-is-one-sci-boots-to-a-console-that-carries-no-line-past-the-hand-over.md. The 11-03 nightly, before #1175 made the UART a driver's, passed the row. Evidence: https://github.com/ToyOSOrg/evidence/tree/dd2322e70ef113d1da8d5418647bbb8fa22e52c5/r3Review r1's other records:
issues/sixty-four-spawns-in-a-row-landed-on-the-spawners-cpu.md: the sighting the pin hides. It carries the four runs, theCpuHandles::placerule they contradict, the three candidate causes and ownerkernel::sched. It becomes adefectwith severityhangif the cause is a doorbell left unserviced.issues/a-red-run-keeps-no-serial-for-a-boot-whose-uart-is-qemus-stdio.md: a boot whose 16550 is QEMU's stdio writes nouart-*.log, so the red run'sserialartifact held only another lane's passing boot.CROSSED.Host checks:
cargo run -- --ci hoston this tree, exit 1. Its only red step is the build system'sbuildlockfairness test and theDirectory not emptythat test leaves for the next one. Both are flakes inbuild/, which this branch does not touch, and #1186 fixes them. Every guest-crate clippy and test step is green.Metal: the T14 booted the
acpicaseimage staged at 0383550 (rc=0, boot verdict passed), and--metal-readbackjudged itPASS acpi_server_death. The job claimed from x2APIC id 7, the kernel wroteACPI_ENABLEon cpu0asked from cpu7, and the disable, which nothing arranges (see the record), was asked from cpu3. Evidence: https://github.com/ToyOSOrg/evidence/tree/b8532182b82f83b367675bca20de5273ccaa6d5b/r2. Supported targets are unchanged: the QEMU rows on q35 x86-64,acpi_server_deathon the T14.Record-only commit f529b66:
issues/the-nightly-is-frozen-so-nothing-runs-the-guest-matrix.mdnow carriesportability-linux's dependency on pulling a movingdebian:sidtag. All six of its nightly reds from 10-24 to 10-31 weretoomanyrequestspulls. Resumption owes an image pinned by digest from a mirror the build controls.🤖 Generated with Claude Code