The earlier commit (6d1b11726) read /sys/class/dmi/id/sys_vendor
and /sys/class/dmi/id/product_name. Those are the Linux paths.
Redox exposes SMBIOS fields at /scheme/acpi/dmi/<field> via the
acpid userspace daemon. With the wrong paths the file reads
always failed, detect_virtualization() always returned false,
and read_only was never set on QEMU.
Now we read /scheme/acpi/dmi/sys_vendor and product_name (the
Redox-correct paths), and as a fallback when SMBIOS is absent
or uninformative we check the CPUID hypervisor-present bit
(leaf 1 ECX bit 31) via inline assembly. The CPUID pattern
mirrors local/recipes/system/redbear-power/source/src/cpuid.rs:168
which already uses this bit for the same purpose.
When either signal indicates virtualization, every CpuInfo is
constructed with read_only = true and apply_pstate() short-
circuits at the top. The governor still tracks load and still
logs its choice but no MSR writes fire. On bare metal the
existing path is preserved exactly.
The companion kernel fix in local/sources/kernel (commit
c2312627 on master) corrects a path-strip bug in the sys
scheme dispatcher that was preventing every MSR open from
succeeding with ENOENT. With both fixes together, cpufreqd
on QEMU enters read-only mode and the Ondemand governor stops
the P0->P1->P0 oscillation.
C1 (Critical): Binary store restore now iterates ALL stage directories
instead of only the first, matching how cook_creates handles multi-stage.
C2 (Critical): All binary store restore errors are now logged via
log_to_pty! instead of being silently discarded with let _ =.
H1 (High): dep_hashes.toml keys now use full PackageName (including
host: prefix) via name.to_string() instead of name.without_prefix(),
preventing host/target key collisions.
H2 (High): Patch file mtimes are now included in source_modified
calculation, so editing a patch correctly triggers a rebuild.
H4 (High): All to_str().unwrap() calls replaced with safe alternatives
(to_string_lossy, direct PathBuf refs) to prevent panics on non-UTF8
paths.
H5 (High): auto_deps.toml reconstruction now logs a warning that it
may be incomplete (does not include ELF-discovered dynamic linking deps).
M1 (Medium): dep_hashes.toml is now written atomically via write-to-tmp
+ fs::rename, preventing corrupted/partial files on crash.
M3 (Medium): Missing source dir now triggers rebuild (SystemTime::now()
fallback) instead of being masked as no-change via UNIX_EPOCH.
kernel (2 commits):
- drop -Z json-target-spec (redundant with --target)
- add MWAIT idle_loop for deeper C-states on modern CPUs (Phase G)
ninja-build (1 commit):
- add Redox subprocess fork/exec and GetLoadAverage support
- config/redbear-full.toml: 9 package groups defined (graphics-core,
input-stack, dbus-services, firmware-stack, qt6-core, qt6-extras,
kf6-frameworks, desktop-session, kde-desktop)
- Cargo.toml: switch redox_installer from upstream git to local fork
(path = "local/sources/installer") to use package group support
- Cargo.lock: remove installer git source entry
- local/sources/installer: bump to package groups commit
Groups are resolved transparently by Config::from_file() — the cookbook
repo binary sees expanded packages automatically.
Update the inner-fork submodule pointers to reflect:
- local/sources/kernel: 8cd4f69 (Phase G.1: /scheme/sys/msr/ scheme)
- local/sources/base: c335553 (Phase G.6: /scheme/acpi/processor/)
No source changes in the outer repo. The submodules already
contain all the new code; this commit only updates the
gitlink pointers so `git diff --submodule=log` shows the
correct history.
The `local/cache/` directory deletions are normal: the
cookbook cleans cached package artifacts when source hashes
change. `local/sources/base/target` is also a build artifact.
`local/recipes/dev/ninja-build/source` is a pre-existing dirty
state from a prior session — not changed by Phase G work.
Verified by: `git diff --submodule=log` shows the new inner
commits, and CI=1 ./local/scripts/build-redbear.sh redbear-mini
builds the same 512 MB ISO with the Phase G.1 / G.2 / G.5 / G.6
code paths in effect.
Phase D of the ACPI fork-sync plan (continuation).
Phase B replaced the `/scheme/kernel.acpi/kstop` filesystem file with
a single Fd-based call() interface. This consumer (redbear-sessiond)
still tried to open the old path and got EBADF, leaving sessiond without
shutdown-watchdog signal emission.
The new implementation:
- Opens `/scheme/kernel.acpi` and uses `openat("kstop", ...)` to
get the kstop sub-handle. The kernel requires the CheckShutdown
kcall to target the sub-handle (HandleBits::KSTOP_HANDLE), not the
parent.
- Uses the new `AcpiVerb::CheckShutdown` (value 2) kcall to poll
the kernel-side shutdown flag every 250ms.
- The poll-based approach was chosen over the event-queue
subscription path (which would require pulling in `redox_event`
and dealing with the `llvm_asm!` macro deprecation). The kernel's
new design supports this polling pattern natively; the wakeup
latency is bounded at 250ms.
Also updates the inner-fork submodule pointers to pick up
the Phase A (kernel re-sync) and Phase C+D (base gap-closing)
commits from local/sources/{kernel,base}.
Files:
- local/recipes/system/redbear-sessiond/source/src/acpi_watcher.rs:
rewrote wait_for_shutdown_edge() to use the new Fd interface.
- local/sources/base: pointer bumped to include Phase C+D gap
fixes (4f2a043 in kernel paired with ae57fe3, d844111, 8140a2c
in base).
- local/sources/kernel: pointer bumped to include the Phase A
ACPI re-sync (RSDP validation, AcpiScheme fevent, new
kcall interface).
Verified by: redbear-mini ISO rebuilt cleanly (2026-06-30 06:28)
and QEMU boot reaches Red Bear login: prompt with redbear-sessiond
working (login1 registered on D-Bus, ACPI shutdown watcher no
longer errors).
Updates the local/sources/base submodule pointer to pick up the
PIIX4 IDE BAR quirk + vgaarb logging + archiso loop_mnt, and
updates the base-initfs recipe to cross-compile loop_mnt before
the redox-initfs-ar archive step.
See local/sources/base commit 2055dcd for the individual
changes.
- acpid scheme: add Thermal and Power as new HandleKind variants,
register them in the openat match, and add entries to the TopLevel
getdents list. thermald and redbear-upower probe /scheme/acpi/thermal
and /scheme/acpi/power via read_dir; an empty directory is the
correct fallback for desktops and QEMU where there is no ACPI
_TZ/_PR data to enumerate.
- acpid scheme: also handle getdents on the new Thermal and Power
variants. Without this, the scheme returned EIO which std::fs::read_dir
treats as 'the path is not a directory or doesn't exist', and thermald
emits a false 'thermal surface unavailable' warning every poll cycle.
- gettext: use -I${COOKBOOK_HOST_SYSROOT}/share/aclocal instead of
/usr/share/aclocal so autoreconf picks up the Redox-patched libtool 2.5.4
macros instead of the host system's libtool 2.6.1, fixing version mismatch
at build time
- libxau: add ACLOCAL=true AUTOMAKE=true AUTOHEADER=true to make invocations
to prevent automake regeneration when host autotools version differs from
what the source expects
- build-redbear.sh: make pre-cook failures non-fatal (warn only) and run with
COOKBOOK_OFFLINE=false so packages that need source fetching can succeed
- redox-drm: restore source from git history (was deleted in dc6805430);
update Cargo.toml version 0.1.0 -> 0.2.4 and dependency constraints to
match current project version
- Add x11proto to redbear-full.toml package list
- libxau recipe updated with x11proto dependency and custom build script
- Fixes libxau build failure: 'Package xproto was not found'
Core fixes to get redbear-mini building and booting via UEFI:
relibc: Use 'VaListImpl as va_list' in syslog so cbindgen outputs va_list
instead of unknown VaListImpl type (matches stdio pattern). Fixes
openssl3 and all C consumers of syslog.h.
base fork (f97da5b0): ps2d missing info! import, ps2d dead variable,
fbcond drm-0.15 API fix, acpid 31 errors (ivrs/mcfg modules, duplicate
methods, packed fields, dmar copy-paste bug), bootstrap abort_immediate
removal (feature removed from nightly)
redox-driver-sys: Add PciQuirkFlags re-export for crate-root imports
bash: Regenerate P1-mksyntax-host-headers.patch with proper unified diff
m4: Fix getlocalename_l unsafe wrapper
config: Comment out mc (requires glib-2.0 chain, not needed for mini)
UEFI boot verified in QEMU — boots to RedBear login prompt.
Author: vasilito <adminpupkin@gmail.com>
Aligns all Red Bear custom recipe dependencies with the syscall 0.8.x
version used by the upstream-synced base and relibc forks.
Author: vasilito <adminpupkin@gmail.com>