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-stable-9
mailing list