vppinfra: fix TSC clock detection on newer intel CPUs 08/3808/3
authorDamjan Marion <[email protected]>
Sat, 12 Nov 2016 10:50:01 +0000 (11:50 +0100)
committerDave Wallace <[email protected]>
Tue, 22 Nov 2016 14:35:46 +0000 (14:35 +0000)
Change-Id: Iff88c9a0dd1b7401605075221640b269bec12859
Signed-off-by: Damjan Marion <[email protected]>
vppinfra/vppinfra/cpu.h
vppinfra/vppinfra/time.c

index a88eaa2..7d63f85 100644 (file)
@@ -63,7 +63,8 @@ _ (avx,      1, ecx, 28)  \
 _ (avx2,     7, ebx, 5)   \
 _ (avx512f,  7, ebx, 16)  \
 _ (aes,      1, ecx, 25)  \
-_ (sha,      7, ebx, 29)
+_ (sha,      7, ebx, 29)  \
+_ (invariant_tsc, 0x80000007, edx, 8)
 
 static inline int
 clib_get_cpuid (const u32 lev, u32 * eax, u32 * ebx, u32 * ecx, u32 * edx)
index e62ee86..2bdb9da 100644 (file)
@@ -38,6 +38,7 @@
 #include <vppinfra/os.h>
 #include <vppinfra/time.h>
 #include <vppinfra/format.h>
+#include <vppinfra/cpu.h>
 
 #ifdef CLIB_UNIX
 
@@ -143,6 +144,9 @@ os_cpu_clock_frequency (void)
 {
   f64 cpu_freq;
 
+  if (clib_cpu_supports_invariant_tsc ())
+    return estimate_clock_frequency (1e-3);
+
   /* First try /sys version. */
   cpu_freq = clock_frequency_from_sys_filesystem ();
   if (cpu_freq != 0)