HomeFreeBSD

Rework handling of thread sleeps before timers are working.

Description

Rework handling of thread sleeps before timers are working.

Previously, calls to *sleep() and cv_*wait*() immediately returned during
early boot. Instead, permit threads that request a sleep without a
timeout to sleep as wakeup() works during early boot. Sleeps with
timeouts are harder to emulate without working timers, so just punt and
panic explicitly if any thread tries to use those before timers are
working. Any threads that depend on timeouts should either wait until
SI_SUB_KICK_SCHEDULER to start or they should use DELAY() until timers
are available.

Until APs are started earlier this should be a no-op as other kthreads
shouldn't get a chance to start running until after timers are working
regardless of when they were created.

Reviewed by: kib
Sponsored by: Netflix
Differential Revision: https://reviews.freebsd.org/D5724

Details

Provenance
jhbAuthored on
Reviewer
kib
Differential Revision
D5724: Rework handling of thread sleeps before timers are working.
Parents
rS297465: Refactor; no functional changes.
Branches
Unknown
Tags
Unknown