From 013228b353f210180a3f6eab5e149f3f7b02e565 Mon Sep 17 00:00:00 2001 From: cheloha Date: Sun, 18 Jun 2023 23:19:01 +0000 Subject: [PATCH] clockintr_cpu_init: initialize starting offsets with clockintr_stagger() --- sys/kern/kern_clockintr.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/sys/kern/kern_clockintr.c b/sys/kern/kern_clockintr.c index 1f1f11a25cb..22a21996d00 100644 --- a/sys/kern/kern_clockintr.c +++ b/sys/kern/kern_clockintr.c @@ -1,4 +1,4 @@ -/* $OpenBSD: kern_clockintr.c,v 1.23 2023/06/18 23:09:35 cheloha Exp $ */ +/* $OpenBSD: kern_clockintr.c,v 1.24 2023/06/18 23:19:01 cheloha Exp $ */ /* * Copyright (c) 2003 Dale Rahn * Copyright (c) 2020 Mark Kettenis @@ -107,7 +107,7 @@ clockintr_init(u_int flags) void clockintr_cpu_init(const struct intrclock *ic) { - uint64_t multiplier = 0, offset; + uint64_t multiplier = 0; struct cpu_info *ci = curcpu(); struct clockintr_queue *cq = &ci->ci_queue; int reset_cq_intrclock = 0; @@ -170,8 +170,8 @@ clockintr_cpu_init(const struct intrclock *ic) clockintr_advance(cq->cq_hardclock, hardclock_period); } else { if (cq->cq_hardclock->cl_expiration == 0) { - offset = hardclock_period / ncpus * multiplier; - cq->cq_hardclock->cl_expiration = offset; + clockintr_stagger(cq->cq_hardclock, hardclock_period, + multiplier, ncpus); } clockintr_advance(cq->cq_hardclock, hardclock_period); } @@ -179,12 +179,16 @@ clockintr_cpu_init(const struct intrclock *ic) /* * We can always advance the statclock and schedclock. */ - offset = statclock_avg / ncpus * multiplier; - clockintr_schedule(cq->cq_statclock, offset); + if (cq->cq_statclock->cl_expiration == 0) { + clockintr_stagger(cq->cq_statclock, statclock_avg, multiplier, + ncpus); + } clockintr_advance(cq->cq_statclock, statclock_avg); if (schedhz != 0) { - offset = schedclock_period / ncpus * multiplier; - clockintr_schedule(cq->cq_schedclock, offset); + if (cq->cq_schedclock->cl_expiration == 0) { + clockintr_stagger(cq->cq_schedclock, schedclock_period, + multiplier, ncpus); + } clockintr_advance(cq->cq_schedclock, schedclock_period); } -- 2.20.1