diff --git a/local/recipes/drivers/redox-driver-sys/source/src/quirks/dmi.rs b/local/recipes/drivers/redox-driver-sys/source/src/quirks/dmi.rs index 304ad73069..8b0758ab96 100644 --- a/local/recipes/drivers/redox-driver-sys/source/src/quirks/dmi.rs +++ b/local/recipes/drivers/redox-driver-sys/source/src/quirks/dmi.rs @@ -171,13 +171,28 @@ pub struct DmiXhciQuirkRule { /// Read DMI/SMBIOS data from the ACPI scheme. /// -/// Returns `Err(())` if DMI data is not available (e.g., early boot, -/// no SMBIOS table, or acpid not running). +/// Returns `Err(())` if DMI data is not available. Phase R10 audit +/// (2026-06-07) — emits a single `log::warn!` per process on the first +/// failure, so the absence of `/scheme/acpi/dmi` is visible in the +/// boot log instead of silently producing empty DMI matches on every +/// lookup. pub fn read_dmi_info() -> Result { + use std::sync::atomic::{AtomicBool, Ordering}; + static WARNED: AtomicBool = AtomicBool::new(false); + let dmi_path = "/scheme/acpi/dmi"; match std::fs::read_to_string(dmi_path) { Ok(data) => parse_dmi_data(&data), - Err(_) => Err(()), + Err(e) => { + if !WARNED.swap(true, Ordering::Relaxed) { + log::warn!( + "quirks: cannot read DMI from {dmi_path}: {e}; \ + acpid DMI producer is not serving data, \ + all DMI-based rules are inert" + ); + } + Err(()) + } } }