hardclock(9), roundrobin: make roundrobin() an independent clock interrupt
authorcheloha <cheloha@openbsd.org>
Fri, 11 Aug 2023 22:02:50 +0000 (22:02 +0000)
committercheloha <cheloha@openbsd.org>
Fri, 11 Aug 2023 22:02:50 +0000 (22:02 +0000)
commit9ac452c773fe76f659962b5d2542d591385a4b06
treee8839953e6066d9bf598ba360c0349ac2e97fe30
parent94cbdd02134df6ff030490f83bc50ecced563084
hardclock(9), roundrobin: make roundrobin() an independent clock interrupt

- Remove the roundrobin() call from hardclock(9).

- Revise roundrobin() to make it a valid clock interrupt callback.
  It is still periodic and it still runs at one tenth of the hardclock
  frequency.

- Account for multiple expirations in roundrobin(): if two or more
  roundrobin periods have elapsed, set SPCF_SHOULDYIELD on the running
  thread immediately to simulate normal behavior.

- Each schedstate_percpu has its own roundrobin() handle, spc_roundrobin.
  spc_roundrobin is started/advanced during clockintr_cpu_init().
  Intervals elapsed across suspend/resume are discarded.

- rrticks_init and schedstate_percpu.spc_rrticks are now useless:
  delete them.

Tweaked by mpi@.  With input from mpi@ and claudio@.

Thread: https://marc.info/?l=openbsd-tech&m=169127381314651&w=2

ok mpi@ claudio@
sys/kern/kern_clock.c
sys/kern/kern_clockintr.c
sys/kern/kern_sched.c
sys/kern/sched_bsd.c
sys/sys/sched.h