mips64, octeon, loonson: trigger deferred clock interrupts from splx(9)
authorcheloha <cheloha@openbsd.org>
Mon, 22 Aug 2022 00:35:06 +0000 (00:35 +0000)
committercheloha <cheloha@openbsd.org>
Mon, 22 Aug 2022 00:35:06 +0000 (00:35 +0000)
commit85caa4b9a5f41b995dcf54ce01413cd20e8f7dcd
treeb91103016a9124a8b1c411fd49a8fd321e4d1eab
parent148170073102c03b8ea62ff7e69f02107698b431
mips64, octeon, loonson: trigger deferred clock interrupts from splx(9)

As with powerpc, powerpc64, and riscv64, on mips64 platforms we need
to isolate the clock interrupt schedule from the MD clock interrupt
code.  To do this, we need to stop deferring clock interrupt work
until the next tick and instead defer the work until we logically
unmask the clock interrupt from splx(9).

Add a boolean (ci_clock_deferred) to the cpu_info struct to note
whether we need to trigger the clock interrupt by hand, and then
do so from splx(9) by calling md_triggerclock().

Currently md_triggerclock is only ever set to cp0_trigger_int5().  The
routine takes great care to ensure that INT5 has fired or will fire
before returning.

There are some loongson machines that use glxclk instead of CP0.  They
can be switched to use CP0 later.

With input and advice from visa@ and miod@.

Compiled and extensively tested by visa@ and miod@ on various octeon
and loongson machines.  No issues seen on octeon machines.  miod@ saw
some odd things on loongsoon, but suggests that all issues are
probably unrelated to this patch.

Link: https://marc.info/?l=openbsd-tech&m=165929192702632&w=2
ok visa@, miod@
sys/arch/loongson/dev/bonito.c
sys/arch/loongson/loongson/loongson3_intr.c
sys/arch/mips64/include/cpu.h
sys/arch/mips64/mips64/clock.c
sys/arch/mips64/mips64/cp0access.S
sys/arch/mips64/mips64/mips64_machdep.c
sys/arch/octeon/dev/octcit.c
sys/arch/octeon/dev/octciu.c