Module Name:    src
Committed By:   ad
Date:           Sat Sep  9 18:37:03 UTC 2023

Modified Files:
        src/sys/arch/x86/x86: tsc.c

Log Message:
tsc_get_timecount(): cover the backwards check by DIAGNOSTIC since it has
proven the point by now.


To generate a diff of this commit:
cvs rdiff -u -r1.57 -r1.58 src/sys/arch/x86/x86/tsc.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/arch/x86/x86/tsc.c
diff -u src/sys/arch/x86/x86/tsc.c:1.57 src/sys/arch/x86/x86/tsc.c:1.58
--- src/sys/arch/x86/x86/tsc.c:1.57	Fri Oct 15 18:12:48 2021
+++ src/sys/arch/x86/x86/tsc.c	Sat Sep  9 18:37:03 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: tsc.c,v 1.57 2021/10/15 18:12:48 jmcneill Exp $	*/
+/*	$NetBSD: tsc.c,v 1.58 2023/09/09 18:37:03 ad Exp $	*/
 
 /*-
  * Copyright (c) 2008, 2020 The NetBSD Foundation, Inc.
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tsc.c,v 1.57 2021/10/15 18:12:48 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tsc.c,v 1.58 2023/09/09 18:37:03 ad Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -406,7 +406,7 @@ tsc_delay(unsigned int us)
 static u_int
 tsc_get_timecount(struct timecounter *tc)
 {
-#ifdef _LP64 /* requires atomic 64-bit store */
+#if defined(_LP64) && defined(DIAGNOSTIC) /* requires atomic 64-bit store */
 	static __cpu_simple_lock_t lock = __SIMPLELOCK_UNLOCKED;
 	static int lastwarn;
 	uint64_t cur, prev;
@@ -421,19 +421,17 @@ tsc_get_timecount(struct timecounter *tc
 	 */
 	prev = l->l_md.md_tsc;
 	cur = cpu_counter();
-	if (__predict_false(cur < prev)) {
-		if ((cur >> 63) == (prev >> 63) &&
-		    __cpu_simple_lock_try(&lock)) {
-			ticks = getticks();
-			if (ticks - lastwarn >= hz) {
-				printf(
-				    "WARNING: TSC time went backwards by %u - "
-				    "change sysctl(7) kern.timecounter?\n",
-				    (unsigned)(prev - cur));
-				lastwarn = ticks;
-			}
-			__cpu_simple_unlock(&lock);
+	if (__predict_false(cur < prev) && (cur >> 63) == (prev >> 63) &&
+	    __cpu_simple_lock_try(&lock)) {
+		ticks = getticks();
+		if (ticks - lastwarn >= hz) {
+			printf(
+			    "WARNING: %s TSC went backwards by %u - "
+			    "change sysctl(7) kern.timecounter?\n",
+			    cpu_name(curcpu()), (unsigned)(prev - cur));
+			lastwarn = ticks;
 		}
+		__cpu_simple_unlock(&lock);
 	}
 	l->l_md.md_tsc = cur;
 	return (uint32_t)cur;

Reply via email to