summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_clocksource.c
diff options
context:
space:
mode:
authormav <mav@FreeBSD.org>2012-03-09 07:30:48 +0000
committermav <mav@FreeBSD.org>2012-03-09 07:30:48 +0000
commitfb50c869a446e352c87936f1226e1eb3624da646 (patch)
tree57a5a417bd5d6d042adea998668c8868ff8825eb /sys/kern/kern_clocksource.c
parentda71350391ba7527bc5ca7e54aff69071b551be8 (diff)
downloadFreeBSD-src-fb50c869a446e352c87936f1226e1eb3624da646.zip
FreeBSD-src-fb50c869a446e352c87936f1226e1eb3624da646.tar.gz
Be more polite when setting state->nextevent inside cpu_new_callout().
Hardclock is not the only who wakes idle CPU since kdtrace cyclic addition. MFC after: 2 weeks
Diffstat (limited to 'sys/kern/kern_clocksource.c')
-rw-r--r--sys/kern/kern_clocksource.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/sys/kern/kern_clocksource.c b/sys/kern/kern_clocksource.c
index ecfd408..d94157c 100644
--- a/sys/kern/kern_clocksource.c
+++ b/sys/kern/kern_clocksource.c
@@ -854,10 +854,11 @@ cpu_new_callout(int cpu, int ticks)
* If timer is global - there is chance it is already programmed.
*/
if (periodic || (timer->et_flags & ET_FLAGS_PERCPU) == 0) {
- state->nextevent = state->nexthard;
tmp = hardperiod;
bintime_mul(&tmp, ticks - 1);
- bintime_add(&state->nextevent, &tmp);
+ bintime_add(&tmp, &state->nexthard);
+ if (bintime_cmp(&tmp, &state->nextevent, <))
+ state->nextevent = tmp;
if (periodic ||
bintime_cmp(&state->nextevent, &nexttick, >=)) {
ET_HW_UNLOCK(state);
OpenPOWER on IntegriCloud