Module Name: src Committed By: riastradh Date: Mon Jul 17 13:35:07 UTC 2023
Modified Files: src/sys/kern: kern_tc.c Log Message: timecounter(9): Ward off interrupts during time_second/uptime update. Only relevant during 32-bit wraparound, so the potential performance impact of using splhigh here is negligible; indeed, we would have to go out of our way to exercise this in tests before it will ever happen in the next century. To generate a diff of this commit: cvs rdiff -u -r1.64 -r1.65 src/sys/kern/kern_tc.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/kern/kern_tc.c diff -u src/sys/kern/kern_tc.c:1.64 src/sys/kern/kern_tc.c:1.65 --- src/sys/kern/kern_tc.c:1.64 Mon Jul 17 13:29:12 2023 +++ src/sys/kern/kern_tc.c Mon Jul 17 13:35:07 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: kern_tc.c,v 1.64 2023/07/17 13:29:12 riastradh Exp $ */ +/* $NetBSD: kern_tc.c,v 1.65 2023/07/17 13:35:07 riastradh Exp $ */ /*- * Copyright (c) 2008, 2009 The NetBSD Foundation, Inc. @@ -40,7 +40,7 @@ #include <sys/cdefs.h> /* __FBSDID("$FreeBSD: src/sys/kern/kern_tc.c,v 1.166 2005/09/19 22:16:31 andre Exp $"); */ -__KERNEL_RCSID(0, "$NetBSD: kern_tc.c,v 1.64 2023/07/17 13:29:12 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: kern_tc.c,v 1.65 2023/07/17 13:35:07 riastradh Exp $"); #ifdef _KERNEL_OPT #include "opt_ntp.h" @@ -172,6 +172,7 @@ setrealuptime(time_t second, time_t upti { uint32_t seclo = second & 0xffffffff, sechi = second >> 32; uint32_t uplo = uptime & 0xffffffff, uphi = uptime >> 32; + int s; KDASSERT(mutex_owned(&timecounter_lock)); @@ -186,6 +187,7 @@ setrealuptime(time_t second, time_t upti return; } + s = splhigh(); atomic_store_relaxed(&time__second32.hi, 0xffffffff); atomic_store_relaxed(&time__uptime32.hi, 0xffffffff); membar_producer(); @@ -194,6 +196,7 @@ setrealuptime(time_t second, time_t upti membar_producer(); atomic_store_relaxed(&time__second32.hi, sechi); atomic_store_relaxed(&time__uptime32.hi, uphi); + splx(s); } time_t