summaryrefslogtreecommitdiff
path: root/sys/kern/kern_clockintr.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/kern/kern_clockintr.c')
-rw-r--r--sys/kern/kern_clockintr.c20
1 files changed, 8 insertions, 12 deletions
diff --git a/sys/kern/kern_clockintr.c b/sys/kern/kern_clockintr.c
index 22a21996d00..21fad46338b 100644
--- a/sys/kern/kern_clockintr.c
+++ b/sys/kern/kern_clockintr.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: kern_clockintr.c,v 1.24 2023/06/18 23:19:01 cheloha Exp $ */
+/* $OpenBSD: kern_clockintr.c,v 1.25 2023/06/22 16:23:50 cheloha Exp $ */
/*
* Copyright (c) 2003 Dale Rahn <drahn@openbsd.org>
* Copyright (c) 2020 Mark Kettenis <kettenis@openbsd.org>
@@ -107,7 +107,7 @@ clockintr_init(u_int flags)
void
clockintr_cpu_init(const struct intrclock *ic)
{
- uint64_t multiplier = 0;
+ uint64_t multiplier = 0, offset;
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) {
- clockintr_stagger(cq->cq_hardclock, hardclock_period,
- multiplier, ncpus);
+ offset = hardclock_period / ncpus * multiplier;
+ cq->cq_hardclock->cl_expiration = offset;
}
clockintr_advance(cq->cq_hardclock, hardclock_period);
}
@@ -179,16 +179,12 @@ clockintr_cpu_init(const struct intrclock *ic)
/*
* We can always advance the statclock and schedclock.
*/
- if (cq->cq_statclock->cl_expiration == 0) {
- clockintr_stagger(cq->cq_statclock, statclock_avg, multiplier,
- ncpus);
- }
+ offset = statclock_avg / ncpus * multiplier;
+ clockintr_schedule(cq->cq_statclock, offset);
clockintr_advance(cq->cq_statclock, statclock_avg);
if (schedhz != 0) {
- if (cq->cq_schedclock->cl_expiration == 0) {
- clockintr_stagger(cq->cq_schedclock, schedclock_period,
- multiplier, ncpus);
- }
+ offset = schedclock_period / ncpus * multiplier;
+ clockintr_schedule(cq->cq_schedclock, offset);
clockintr_advance(cq->cq_schedclock, schedclock_period);
}