svn commit: r267077 - stable/9/sys/x86/x86

Alexander Motin mav at FreeBSD.org
Wed Jun 4 18:58:33 UTC 2014


Author: mav
Date: Wed Jun  4 18:58:32 2014
New Revision: 267077
URL: http://svnweb.freebsd.org/changeset/base/267077

Log:
  MFC r239133 (by jimharris):
  During TSC synchronization test, use rdtsc() rather than rdtsc32(), to
  protect against 32-bit TSC overflow while the sync test is running.
  
  On dual-socket Xeon E5-2600 (SNB) systems with up to 32 threads, there
  is non-trivial chance (2-3%) that TSC synchronization test fails due to
  32-bit TSC overflow while the synchronization test is running.
  
  Approved by:	re (delphij)

Modified:
  stable/9/sys/x86/x86/tsc.c
Directory Properties:
  stable/9/   (props changed)
  stable/9/sys/   (props changed)

Modified: stable/9/sys/x86/x86/tsc.c
==============================================================================
--- stable/9/sys/x86/x86/tsc.c	Wed Jun  4 18:32:41 2014	(r267076)
+++ stable/9/sys/x86/x86/tsc.c	Wed Jun  4 18:58:32 2014	(r267077)
@@ -373,11 +373,11 @@ init_TSC(void)
 static void								\
 tsc_read_##x(void *arg)							\
 {									\
-	uint32_t *tsc = arg;						\
+	uint64_t *tsc = arg;						\
 	u_int cpu = PCPU_GET(cpuid);					\
 									\
 	__asm __volatile("cpuid" : : : "eax", "ebx", "ecx", "edx");	\
-	tsc[cpu * 3 + x] = rdtsc32();					\
+	tsc[cpu * 3 + x] = rdtsc();					\
 }
 TSC_READ(0)
 TSC_READ(1)
@@ -389,8 +389,8 @@ TSC_READ(2)
 static void
 comp_smp_tsc(void *arg)
 {
-	uint32_t *tsc;
-	int32_t d1, d2;
+	uint64_t *tsc;
+	int64_t d1, d2;
 	u_int cpu = PCPU_GET(cpuid);
 	u_int i, j, size;
 
@@ -454,7 +454,7 @@ adj_smp_tsc(void *arg)
 static int
 test_tsc(void)
 {
-	uint32_t *data, *tsc;
+	uint64_t *data, *tsc;
 	u_int i, size, adj;
 
 	if ((!smp_tsc && !tsc_is_invariant) || vm_guest)


More information about the svn-src-all mailing list