diff --git a/init.d/00_pcid-spawner.service b/init.d/00_pcid-spawner.service index 8ba6fc6cec..1eb911c186 100644 --- a/init.d/00_pcid-spawner.service +++ b/init.d/00_pcid-spawner.service @@ -3,4 +3,14 @@ description = "PCI driver spawner" [service] cmd = "pcid-spawner" -type = "oneshot" +# oneshot_async, NOT oneshot: this is the post-switchroot /usr driver-manager. +# As a blocking oneshot, init waits for pcid-spawner to enumerate PCI and bring +# every matched driver to readiness (daemon::Daemon::spawn blocks on each +# driver's ready signal) before continuing — so a single slow/hanging driver, +# or an unavailable /scheme/pci after switchroot, wedges the whole boot right +# here, before the console/login stack. The login path renders on the initfs +# framebuffer (vesad+fbcond) and does not need the /usr PCI drivers to be ready +# first, so bring them up asynchronously. NOTE: the initfs driver spawner +# (40_pcid-spawner-initfs) stays a blocking oneshot — disk (ahcid) must be +# ready before redoxfs mounts. +type = "oneshot_async" diff --git a/init.d/10_smolnetd.service b/init.d/10_smolnetd.service index b0e88ae357..8d0f9aaf4e 100644 --- a/init.d/10_smolnetd.service +++ b/init.d/10_smolnetd.service @@ -8,4 +8,10 @@ requires_weak = [ [service] cmd = "smolnetd" -type = "notify" +# oneshot_async, NOT notify: smolnetd only signals readiness once it binds a +# network adapter, so on a machine with no NIC (or before the NIC driver +# attaches) a notify unit blocks init forever right here — before the console +# stack — and there is no login. The network scheme is not on the critical +# path to login, so start it non-blocking (this matches the redbear-mini +# netstack unit). Boot must never hang on absent/late network hardware. +type = "oneshot_async"