amd64: switch to clockintr(9)
authorcheloha <cheloha@openbsd.org>
Tue, 8 Nov 2022 17:34:12 +0000 (17:34 +0000)
committercheloha <cheloha@openbsd.org>
Tue, 8 Nov 2022 17:34:12 +0000 (17:34 +0000)
commit9e761879e36ccabc9a1c69d0234941809e96d51d
tree2f7d5256c1b4ec92c32dd35a1b7e73ba9153f679
parentdac51b63a4140febe34689a3aa7279b115464d88
amd64: switch to clockintr(9)

Switch amd64 to the clockintr(9) subsystem.  There are lots of little
changes, but the bigs ones are listed here.

When using the local apic timer:

- Run the timer in one-shot mode.
- lapic_delay() is gone.  We can't use it to delay(9) when running
  the timer in one-shot mode.
- Add a randomized statclock(); stathz = hz.
- Add support for switching to profhz when profiling is enabled;
  profhz = stathz * 10.

When using the i8254/mc146818:

- i8254's clockintr() no longer has a monopoly on hardclock().
- mc146818's rtcintr() no longer has a monopoly on statclock().
- In profiling mode, the statclock() will drift very slightly
  because (profhz = 1024) does not divide evenly into one billion.
  We could avoid this by setting (profhz = 512) instead and
  programming the RTC to run at that rate.

Early revisions reviewed by mlarkin@.  Extensively tested by mlarkin@
on a variety of physical and virtual hardware.  Additional testing
from dv@ and jmc@.

Link: https://marc.info/?l=openbsd-tech&m=166776339203279&w=2
ok kettenis@ mlarkin@
sys/arch/amd64/amd64/acpi_machdep.c
sys/arch/amd64/amd64/cpu.c
sys/arch/amd64/amd64/lapic.c
sys/arch/amd64/include/_types.h
sys/arch/amd64/include/cpu.h
sys/arch/amd64/isa/clock.c