i386: switch to clockintr
authorcheloha <cheloha@openbsd.org>
Tue, 6 Dec 2022 01:56:43 +0000 (01:56 +0000)
committercheloha <cheloha@openbsd.org>
Tue, 6 Dec 2022 01:56:43 +0000 (01:56 +0000)
commita623d4ea00d31d6423d47da710b63aaf9f52512e
tree6d2c2f9777191cdc422a0ee8f3f71ceb286c652b
parenta2953de374c0861047d84c6d3ba4d0a7fbfd2cf8
i386: switch to clockintr

In lapic timer mode:

- Rip out lapic_delay().  We can't use the lapic timer to delay(9) when
  it's running in one-shot mode.
- Add a randomized statclock(), stathz = hz.
- Add profiling support, profhz = stathz * 10.
- Wire up lapic_intrclock.

In i8254-mode:

- i8254's clockintr() does not have a monopoly on hardclock(9).
- mc146818's rtcintr() does not have a monopoly on statclock().
- In profiling mode, the statclock() will drift very slightly
  because (profhz = 1024) does not divide into 1 billion.  Need to
  consider how best to fix this.

ACPI suspend/resume tested by mlarkin@ via ESXi.  Tons of testing by
Scott Bennett on a Pentium 4 machine; APM suspend/resume confirmed to
work there, too.

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