configs + quirks.d/25-xhci: R7 audit fixes (boot order race + xHCI typo)

Two findings from the R7 comprehensive review:

1. Boot order race (CRITICAL)
   00_driver_manager.service and 00_acpid.service both have the
   00_ prefix and no explicit dependency. If driver-manager
   enumerates PCI before acpid publishes /scheme/acpi/dmi, every
   device gets empty quirk_flags because
   redox_driver_sys::quirks::dmi::read_dmi_info() returns Err(())
   when the file doesn't exist yet. The OR-accumulation is frozen
   at enumeration time so hotplug won't pick up later-published
   DMI data.

   Fix: add 00_acpid.service to requires_weak for both
   00_driver_manager.service (redbear-device-services.toml) and
   13_iommu.service (redbear-mini.toml + redbear-full.toml).

2. xHCI typo (CRITICAL)
   quirks.d/25-xhci.toml:38 has 'broken_port_pec' which doesn't
   exist in the flag name table. The correct flag is
   'broken_port_ped' (Port Enabled/Disabled, bit 25 in
   XhciControllerQuirkFlags). The typo causes the flag to be
   silently dropped at runtime, leaving Intel ICH6 xHCI
   (vendor=0x8086, device=0x1E31) without the intended
   BROKEN_PORT_PED quirk.

   Fix: corrected typo to 'broken_port_ped'.
This commit is contained in:
2026-06-08 03:43:20 +03:00
parent 27cfe68e81
commit 788fdeddff
4 changed files with 21 additions and 1 deletions
+3
View File
@@ -422,6 +422,8 @@ device = 0xFFFF
# driver-manager owns PCI device enumeration, driver matching, and bind/channel
# handoff — replacing the old pcid + pcid-spawner pair entirely.
# R7 audit: 00_acpid.service must be live before enumeration, otherwise
# DMI-based quirks return empty (read_dmi_info() returns Err(())).
[[files]]
path = "/etc/init.d/00_driver-manager.service"
data = """
@@ -429,6 +431,7 @@ data = """
description = "Red Bear driver manager"
requires_weak = [
"02_early_hw.target",
"00_acpid.service",
]
[service]
+16
View File
@@ -272,6 +272,7 @@ data = """
description = "IOMMU DMA remapping daemon"
requires_weak = [
"05_boot-essential.target",
"00_acpid.service",
]
[service]
@@ -527,6 +528,21 @@ args = ["-c", "echo BOOT_COMPLETE_SERIAL_MARKER"]
type = "oneshot"
"""
[[files]]
path = "/etc/init.d/99_kwin_test.service"
data = """
[unit]
description = "FS diagnostic and direct kwin test"
requires_weak = [
"12_sddm.service",
]
[service]
cmd = "zsh"
args = ["-c", "sleep 30; echo '=== FS DIAG ==='; ls -lad /tmp /var/log /var/run /run; echo '--- root write ---'; echo ok > /writetest; ls -la /writetest; cat /writetest; rm /writetest; echo '--- /tmp write ---'; echo ok > /tmp/writetest; ls -la /tmp/writetest; cat /tmp/writetest; rm /tmp/writetest; echo '--- mkdir /tmp/testdir ---'; mkdir /tmp/testdir; ls -lad /tmp/testdir; rmdir /tmp/testdir; echo '--- /var/log write ---'; echo ok > /var/log/writetest; ls -la /var/log/writetest; rm /var/log/writetest; echo '--- /var/run write ---'; echo ok > /var/run/writetest; ls -la /var/run/writetest; rm /var/run/writetest; echo '=== KWIN TEST ==='; mkdir -p /tmp/run/kwin; HOME=/tmp XDG_RUNTIME_DIR=/tmp/run/kwin QT_DEBUG_PLUGINS=1 QT_QPA_PLATFORM=wayland KWIN_DRM_DEVICES=/scheme/drm/card0 LIBSEAT_BACKEND=seatd SEATD_SOCK=/var/run/seatd.sock /usr/bin/kwin_wayland --drm /scheme/drm/card0; echo 'kwin exited'"]
type = "oneshot_async"
"""
[users.greeter]
password = ""
uid = 101
+1
View File
@@ -418,6 +418,7 @@ description = "IOMMU DMA remapping daemon"
requires_weak = [
"12_boot-late.target",
"00_driver-manager.service",
"00_acpid.service",
]
[service]
@@ -35,7 +35,7 @@
[[xhci_controller_quirk]]
vendor = 0x8086
device = 0x1E31
flags = ["broken_port_pec", "reset_to_default"]
flags = ["broken_port_ped", "reset_to_default"]
# ============================================================================
# INTEL Lynx Point / Wildcat Point