On 21/12/2016 3:44 AM, John Baldwin wrote:
Author: jhb
Date: Tue Dec 20 19:44:44 2016
New Revision: 310336
URL: https://svnweb.freebsd.org/changeset/base/310336
Log:
Don't spin in pause() during early boot for kthreads other than thread0.
pause() uses a spin loop to simulate a sleep during early boot. However,
we only need this for thread0 to get far enough in the boot process to
enable timers (at which point pause() can sleep). For other kthreads,
sleeping in pause() is ok as the callout will be scheduled and will
eventually fire once thread0 initializes timers.
maybe we just need to depend on a variable "have_timers"
that is independent of the cold/hot/whatever settings.
first code to enable a timer sets it.
Tested by: Steven Kargl
Sleuthing by: markj
MFC after: 1 week
Sponsored by: Netflix
Modified:
head/sys/kern/kern_synch.c
Modified: head/sys/kern/kern_synch.c
==============================================================================
--- head/sys/kern/kern_synch.c Tue Dec 20 19:30:21 2016 (r310335)
+++ head/sys/kern/kern_synch.c Tue Dec 20 19:44:44 2016 (r310336)
@@ -321,7 +321,8 @@ pause_sbt(const char *wmesg, sbintime_t
if (sbt == 0)
sbt = tick_sbt;
- if (cold || kdb_active || SCHEDULER_STOPPED()) {
+ if ((cold && curthread == &thread0) || kdb_active ||
+ SCHEDULER_STOPPED()) {
/*
* We delay one second at a time to avoid overflowing the
* system specific DELAY() function(s):
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"