--- src/sys/kern/kern_clock.c 2004/08/02 23:20:30 1.23 +++ src/sys/kern/kern_clock.c 2004/09/17 00:18:09 1.24 @@ -288,10 +288,9 @@ hardclock(systimer_t info, struct intrfr } /* - * The system-wide ticks and softticks are only updated by cpu #0. - * Callwheel actions are also (at the moment) only handled by cpu #0. - * Finally, we also do NTP related timedelta/tickdelta adjustments - * by adjusting basetime. + * The system-wide ticks counter and NTP related timedelta/tickdelta + * adjustments only occur on cpu #0. NTP adjustments are accomplished + * by updating basetime. */ if (gd->gd_cpuid == 0) { struct timespec nts; @@ -303,12 +302,6 @@ hardclock(systimer_t info, struct intrfr hardclock_device_poll(); /* mpsafe, short and quick */ #endif /* DEVICE_POLLING */ - if (TAILQ_FIRST(&callwheel[ticks & callwheelmask]) != NULL) { - setsoftclock(); - } else if (softticks + 1 == ticks) { - ++softticks; - } - #if 0 if (tco->tc_poll_pps) tco->tc_poll_pps(tco); @@ -371,6 +364,11 @@ hardclock(systimer_t info, struct intrfr } /* + * softticks are handled for all cpus + */ + hardclock_softtick(gd); + + /* * ITimer handling is per-tick, per-cpu. I don't think psignal() * is mpsafe on curproc, so XXX get the mplock. */