amd64, i386: add delay_init(): basic delay(9) implementation management
authorcheloha <cheloha@openbsd.org>
Thu, 25 Aug 2022 17:25:25 +0000 (17:25 +0000)
committercheloha <cheloha@openbsd.org>
Thu, 25 Aug 2022 17:25:25 +0000 (17:25 +0000)
commitc8334f21d0719699c4fdecca1815a29a13871818
tree9ed33af7fcbeb591ad19769387a33197c66c216e
parent4ccf1d4e84ac98b68fe98b1ca25e32f59dd69c3e
amd64, i386: add delay_init(): basic delay(9) implementation management

Because the clock situation on x86 and amd64 is a terminal
clusterfuck, there are many different ways to delay(9).  We need a
rudimentary mechanism for gracefully switching to progressively better
delay(9) implementations as they become available during boot without
riddling the code with ifdefs and function pointer comparisons.

This patch adds delay_init() to both amd64 and i386.  If the quality
value passed to delay_init() exceeds the quality value of the current
delay_func, delay_init() changes delay_func to the given function
pointer and updates the quality value.  Both platforms start with
delay_func set to i8254_delay() and a quality value of zero: all other
delay(9) implementations are preferable.

Idea and patch provided by jsg@.  With tons of input, research, and
advice from jsg@.

Link: https://marc.info/?l=openbsd-tech&m=166053729104923&w=2
ok mlarkin@ jsg@
sys/arch/amd64/amd64/machdep.c
sys/arch/amd64/include/cpu.h
sys/arch/i386/i386/machdep.c
sys/arch/i386/include/cpu.h