Hi,
At boot, if we don't know the lapic frequency offhand we compute it by
waiting for a known clock (the i8254) with a known frequency to cycle
a few times.
Currently we cycle hz times. This doesn't make sense. There is
little to no benefit to waiting additional cycles if your kernel is
compiled with a larger HZ. Mostly it just makes the calibration take
longer.
Consider the common HZ=1000 case. What is the benefit of looping an
additional 900 times? The point of diminishing returns is well under
1000 loops.
20-50 loops is probably sufficient to limit our error, but I don't
want to break anything so let's use 100, like we do on default
kernels.
ok?
Index: lapic.c
===================================================================
RCS file: /cvs/src/sys/arch/amd64/amd64/lapic.c,v
retrieving revision 1.55
diff -u -p -r1.55 lapic.c
--- lapic.c 3 Aug 2019 14:57:51 -0000 1.55
+++ lapic.c 1 Sep 2020 15:58:41 -0000
@@ -509,15 +509,15 @@ lapic_calibrate_timer(struct cpu_info *c
startapic = lapic_gettick();
- /* wait the next hz cycles */
- for (i = 0; i < hz; i++)
+ /* wait a few cycles */
+ for (i = 0; i < 100; i++)
wait_next_cycle();
endapic = lapic_gettick();
intr_restore(s);
- dtick = hz * rtclock_tval;
+ dtick = 100 * rtclock_tval;
dapic = startapic-endapic;
/*