From 19470fb44408e665520f0dfec4cbf8f12ec8b5b6 Mon Sep 17 00:00:00 2001 From: vasilito Date: Thu, 16 Jul 2026 12:48:57 +0900 Subject: [PATCH] boot: make bare/base driver-manager + netstack non-blocking; changelog Base submodule 1f826240: 00_pcid-spawner (/usr) and 10_smolnetd base-default init units switched to oneshot_async so init never blocks the boot-to-login path on PCI driver enumeration or a network adapter binding. Adds the 2026-07-16 CHANGELOG entry (mini login restored, kernel MSR #GP guard, build-system staleness/lock/override fixes). --- CHANGELOG.md | 57 ++++++++++++++++++++++++++++++++++++++++++++++ local/sources/base | 2 +- 2 files changed, 58 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9be2a2e5fc..b9eb524def 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,63 @@ When a commit changes the visible system surface, supported hardware, build flow or major documentation status, add a short note here and keep the README "What's New" section in sync with the newest highlights. +## 2026-07-16 — Boot path restored: Mini ISO reaches a working login prompt + +### Boot / init (the login blockers) + +- **base-env no longer hangs the boot.** `00_base.service` ran a full `zsh` + as an init oneshot; zsh's interactive startup hangs in the oneshot before + the login stack. Switched to `mkdir` (uutils). An earlier "echo/mkdir also + hang" result was a false negative — a silent config `[[files]]` override + (`redbear-legacy-base.toml` shadowing `base.toml`) was still running zsh. +- **ptyd no longer blocks init.** `00_ptyd.service` was `type = "notify"`, + but ptyd signals readiness via its scheme cap fd (`ready_sync_scheme`), so + init waited on a readiness byte that never came and blocked forever at + ptyd. Corrected to `type = { scheme = "pty" }` (base recipe default + + `redbear-mini` override). +- **Driver-manager + netstack no longer wedge the boot.** The post-switchroot + `/usr` `00_pcid-spawner.service` was a blocking oneshot (init waited for + every PCI driver to reach readiness) and `10_smolnetd.service` was + `type = "notify"` (blocks until a NIC binds). Both are now `oneshot_async`; + the login path renders on the initfs framebuffer and needs neither ready + first. (The initfs driver spawner stays blocking — disk must mount.) + +### Kernel + +- **Root can no longer panic the kernel via `/scheme/sys/msr`.** A bad MSR + write (e.g. cpufreqd's legacy P-state MSR, unsupported under KVM) raised a + kernel-mode `#GP` on the raw `wrmsr`, which was unrecoverable and panicked + the whole machine (`unreachable!()` in `exit_this_context`). Added + `wrmsr_safe`/`rdmsr_safe` with `#GP` fault recovery (the same labeled-region + mechanism as usercopy page-fault recovery); the MSR scheme and the cross-CPU + MSR IPI handler now return `EIO` instead of faulting. + +### Noise + +- hwd ACPI `_LNK` interrupt-routing enumeration (50+ INFO lines per boot on + QEMU) demoted to `debug`. + +### Build system + +- **Host fstools staleness fixed** — `make live`'s `redox_installer`/`redoxfs` + are rebuilt when their sources change (the `build/fstools` dir target had no + source prerequisite, so edits silently never reached image assembly). +- **Prefix no longer rebuilds every build** — `make prefix` is a no-op tarball + extract, so `libc.a`'s mtime never advanced past the fork commit; now stamped + after a successful prefix step. +- **Concurrent-build lock** (`flock`) prevents two builds corrupting caches. +- **Config `[[files]]` overrides are now visible** — the installer warns when a + later-included config redefines a file path (was a silent last-wins accumulate). + +### Status + +- **Mini ISO**: boots to the `Red Bear login:` prompt on VT2 (framebuffer) and + the serial debug console, verified on q35/KVM both with and without a NIC, + zero kernel panics. +- **Bare ISO**: driver-manager/netstack blocking fixes applied; login bring-up + in progress. +- **Full ISO** (KWin/Wayland `redbear-greeterd`): unchanged, still experimental. + ## 2026-07-01 — Phase I/II complete: full s2idle + S3 entry + LG Gram DMI ### Phase I.5 (kernel ↔ acpid s2idle wire end-to-end) diff --git a/local/sources/base b/local/sources/base index 8aa8616d5e..1f82624025 160000 --- a/local/sources/base +++ b/local/sources/base @@ -1 +1 @@ -Subproject commit 8aa8616d5e594d4afac04a7f48fa6e7a8af32045 +Subproject commit 1f826240250c2e3f00a01d4f3fd82127b46388e5