Fix a bug where the main system clock stops operating. We were using a field
authorMatthew Dillon <dillon@dragonflybsd.org>
Sun, 27 Mar 2005 19:25:10 +0000 (19:25 +0000)
committerMatthew Dillon <dillon@dragonflybsd.org>
Sun, 27 Mar 2005 19:25:10 +0000 (19:25 +0000)
commit774fc796cf22674bec3d6fd24c8060464dfec38b
treeaae89acb0e2c1a41d5a169a39b036f27a5230369
parentca76ab120a7fd48e903de09f73652c7fc655f58e
Fix a bug where the main system clock stops operating.  We were using a field
in the globaldata structure called gd_nextclock to determine whether a systimer
was queued for a cpu.  This field indicated the next pending timeout for the
systimer on the cpu.  However, at 8254 rates this 32 bit field has a chance of
calculating to 0 once every 1/18 second, which disables the systimer dispatch
on that cpu and can cause the system clocks to stop operating.

Remove the field and replace with a TAILQ_FIRST queue check instead.

The machine dependant part of the systimer implementations needs a better
way to figure out which cpus to dispatch to.

Reported-by: justin@shiningsilence.com
sys/i386/isa/clock.c
sys/kern/kern_systimer.c
sys/platform/pc32/isa/clock.c
sys/sys/globaldata.h