fix(repl): the bring-up build's prompt waits for a line instead of answering itself without end
Built with EMERGENCY_CONSOLE_ENABLED=1 and booted with no identity logged
in, the prompt printed "ok> ok" without end, 1.4 million times in 200
seconds (logs/20261013-210442). sk_console_readline() gave up at once
whenever no identity was present. The production build answers that by
going silent until a login; the bring-up build, which needs no login,
took it as an empty line and asked again. The give-up is now the
production build's only.
Found rehearsing boards/BRINGUP.md; it predates the console change of
c9519173 (the image built from the commit before that did the same).
The riscv64 bring-up build, no thumbdrive, three lines typed
(logs/20261013-235129): one prompt that waits, and 3, 56 and 81.
Acceptance of the production build, one QEMU at a time: amd64
(-235255), aarch64 (-235411), riscv64 (-235620) to the zuse prompt, no
unknown word, hash 0x08873e0f44b7cb2a on all three.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
c95191736e
commit
9772ee8b68
+8
-9
@@ -71,22 +71,21 @@ port, `kernel/src/arch/armv7` (entry, MMU, GIC, private timer); and the four fil
|
||||
`__int128` or have no ARMv7 branch (`boards/zynq7020/README.md` names them). It is the host for
|
||||
the v4 mesh, so it also waits on A6.
|
||||
|
||||
### 1.6 Found in rehearsal, 2026-10-13: the bring-up build floods its prompt
|
||||
### 1.6 Found in rehearsal, and fixed, 2026-10-13: the bring-up build flooded its prompt
|
||||
|
||||
Built with `EMERGENCY_CONSOLE_ENABLED=1` and booted with nothing typed, the Mars image prints
|
||||
`ok> ok` without end: 1.4 million times in 200 seconds, through U-Boot in QEMU. Under the
|
||||
usual QEMU firmware the first prompt waits, a typed line is answered, and then the same flood
|
||||
begins. The image built from the commit before the console change does the same, so it is
|
||||
not the serial line. **Not found yet, and it blocks a usable prompt on every board's bring-up
|
||||
build.** The production build, which waits for a login, does not show it: the three-ISA
|
||||
acceptance boots reach one `zuse@Hera` prompt and stop there.
|
||||
Built with `EMERGENCY_CONSOLE_ENABLED=1` and booted with no thumbdrive, the prompt printed
|
||||
`ok> ok` without end: 1.4 million times in 200 seconds. The line reader
|
||||
(`kernel/src/repl.c`, `sk_console_readline()`) gave up at once whenever no identity was logged
|
||||
in, which the production build answers by going silent; the bring-up build took it as an
|
||||
empty line and asked again. It now gives up only in the production build. Rehearsed on
|
||||
riscv64 (`logs/20261013-235129`): one prompt, which waits, and three typed lines answered.
|
||||
|
||||
### 1.7 What I would close before the bench day
|
||||
|
||||
In this order, each as a design for approval first:
|
||||
|
||||
1. ~~R1 and M1: a console that finds its UART from the devicetree, and does nothing when
|
||||
there is none.~~ Done 2026-10-13. Then 1.6, the flood.
|
||||
there is none.~~ Done 2026-10-13, and 1.6, the flood.
|
||||
2. A6: the v4 switch in the board images. The v4 node needs only a console to reach a prompt;
|
||||
it has no login, no fleet and no disk to wait for, so it is the shorter road to a first
|
||||
prompt on each board.
|
||||
|
||||
@@ -1283,9 +1283,16 @@ int sk_console_readline(char* buf, int size, VM* active_vm, int reanchor_prompt)
|
||||
* before this fix (a bare, unauthenticated prompt stayed on
|
||||
* screen after every logout for the rest of the boot). n == 0
|
||||
* only: never abandon a line the user is actively typing. */
|
||||
#if !EMERGENCY_CONSOLE_ENABLED
|
||||
if (reanchor_prompt && n == 0 && !sk_console_identity_present()) {
|
||||
return -1;
|
||||
}
|
||||
#endif
|
||||
/* Not in the bring-up build (EMERGENCY_CONSOLE_ENABLED): its prompt
|
||||
* needs no login, and sk_repl_run() takes this return as an empty
|
||||
* line there -- with no identity attached the prompt answered " ok"
|
||||
* and asked again without end, 1.4 million times in 200 seconds
|
||||
* (found 2026-10-13 rehearsing boards/BRINGUP.md; logs/20261013-210442). */
|
||||
|
||||
if (reanchor_prompt && n == 0 &&
|
||||
console_tx_count() != prompt_tx_mark)
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user