On 01/16/17 20:31, John Baldwin wrote:
On Monday, January 16, 2017 04:51:42 PM Hans Petter Selasky wrote:

When booting I observe an additional 30-second delay after this print:

Timecounters tick every 1.000 msec

~30 second delay and boot continues like normal.

Checking "vmstat -i" reveals that some timers have been running loose.

cpu0:timer                         44300        442
cpu1:timer                         40561        404
cpu3:timer                      48462822     483058
cpu2:timer                      48477898     483209

Trying to add delays and/or prints around the Timecounters printout
makes the issue go away. Any ideas for debugging?

I have generally used KTR tracing to trace what is happening during
boot to debug EARLY_AP_STARTUP issues.

Hi John,

What happens is that getnextcpuevent(0) keeps on returning "state->nextcall" which is in the past for CPU #2 and #3 on my box.

In "cpu_new_callout()" there is a check if "bt >= state->nextcall", which I suspect is true, so "state->nextcall" never gets set to real minimum sbintime.

The attached patch fixes the problem for me, but I'm not 100% sure if it is correct.

diff --git a/sys/kern/kern_clocksource.c b/sys/kern/kern_clocksource.c
index 7f7769d..454a130 100644
--- a/sys/kern/kern_clocksource.c
+++ b/sys/kern/kern_clocksource.c
@@ -511,7 +511,7 @@ configtimer(int start)
 			state->nexthard = next;
 			state->nextstat = next;
 			state->nextprof = next;
-			state->nextcall = next;
+			state->nextcall = SBT_MAX;
 			state->nextcallopt = next;
freebsd-current@freebsd.org mailing list
To unsubscribe, send any mail to "freebsd-current-unsubscr...@freebsd.org"

Reply via email to