From 49d356ad6e18b32ae1eb8b005d49f6913b183ab5 Mon Sep 17 00:00:00 2001 From: vasilito Date: Mon, 20 Jul 2026 00:03:42 +0900 Subject: [PATCH] config: consolidate PCI driver spawning on pcid-spawner (drop driver-manager stub) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Root cause of the duplication: a stalled migration. driver-manager (new Red Bear framework) was written and packaged, but never wired in — its 00_driver-manager.service ran cmd="pcid-spawner" (the legacy binary), and redbear-mini.toml already notes it is 'not yet ready'. Meanwhile the base recipe's 00_pcid-spawner.service (oneshot_async) is the live spawner. Both services ran pcid-spawner async, so pcid-spawner launched TWICE in mini/full, racing to spawn the same drivers. Consolidation (user directive: consolidate on pcid-spawner for now, revisit driver-manager later): - drop the unused driver-manager = {} package (source recipe kept for the future migration), - remove the duplicate 00_driver-manager.service, - point 13_driver-params.service requires_weak at the real 00_pcid-spawner.service, - base recipe's oneshot_async pcid-spawner is now the sole PCI driver spawner — no more double launch. driver-manager is intentionally left out of configs until its driver config migration is completed (documented in the file). --- config/redbear-device-services.toml | 31 ++++++++++++++--------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/config/redbear-device-services.toml b/config/redbear-device-services.toml index 04d897677c..ec4308c1ab 100644 --- a/config/redbear-device-services.toml +++ b/config/redbear-device-services.toml @@ -6,7 +6,11 @@ redbear-quirks = {} pciids = {} fatd = {} -driver-manager = {} +# driver-manager intentionally not included: it is the intended future +# replacement for pcid-spawner but is not yet ready (driver config migration +# pending) and was previously packaged-but-unused — its service launched +# pcid-spawner instead of driver-manager. Consolidated on pcid-spawner for +# now; the recipe source is kept for when the migration is completed. # Firmware fallback chain configs [[files]] @@ -478,8 +482,11 @@ priority = 70 command = ["/usr/bin/redbear-usbaudiod"] """ -# Profiles that include this fragment should start `driver-manager` instead of -# `pcid-spawner`; the manager performs the PCI bind/channel handoff itself. +# PCI driver spawning is performed by pcid-spawner (the base recipe's +# 00_pcid-spawner.service, oneshot_async). driver-manager is the intended +# future replacement but is not yet ready; do NOT create a separate +# 00_driver-manager.service here — it previously duplicated pcid-spawner +# (two async instances of the same spawner racing to spawn drivers). # Firmware fallback chain configs [[files]] path = "/etc/firmware-fallbacks.d/00-amdgpu.toml" @@ -508,19 +515,11 @@ data = """ pattern = "i915/adlp_dmc_ver2_16.bin" chain = ["i915/adlp_dmc_ver2_14.bin", "i915/adlp_dmc_ver2_12.bin"] """ -[[files]] -path = "/etc/init.d/00_driver-manager.service" -data = """ -[unit] -description = "PCI driver spawner" -requires_weak = [ - "00_base.target", -] -[service] -cmd = "pcid-spawner" -type = "oneshot_async" -""" +# There must be exactly one PCI driver spawner service in the image: the +# base recipe's 00_pcid-spawner.service (oneshot_async). Do not add a +# second, differently-named service that also launches pcid-spawner — two +# async instances race to spawn the same drivers. # Firmware fallback chain configs [[files]] @@ -786,7 +785,7 @@ path = "/etc/init.d/13_driver-params.service" data = """ [unit] description = "Driver parameter scheme" -requires_weak = ["00_driver-manager.service"] +requires_weak = ["00_pcid-spawner.service"] [service] cmd = "/usr/bin/driver-params"