  }
  
 diff --git a/arch/x86/vdso/vclock_gettime.c b/arch/x86/vdso/vclock_gettime.c
-index 6a40b78..b92ac35 100644
+index 6a40b78..656b941 100644
 --- a/arch/x86/vdso/vclock_gettime.c
 +++ b/arch/x86/vdso/vclock_gettime.c
-@@ -124,3 +124,81 @@ notrace int __vdso_gettimeofday(struct timeval *tv, struct timezone *tz)
+@@ -124,3 +124,90 @@ notrace int __vdso_gettimeofday(struct timeval *tv, struct timezone *tz)
  }
  int gettimeofday(struct timeval *, struct timezone *)
  	__attribute__((weak, alias("__vdso_gettimeofday")));

+	if (likely(gtod->sysctl_enabled && gtod->clock.vread)) {
+
+		/* One for fun and warmup */
+		rdtscll(tsc1);
+		__asm __volatile("lfence" ::: "memory");
+		rdtscll(tsc1);
+		__asm __volatile("lfence" ::: "memory");
+		rdtscll(tsc2);
+		__asm __volatile("lfence" ::: "memory");
+		vcount = read_vcounter();
+		__asm __volatile("lfence" ::: "memory");
+		rdtscll(tsc3);
+		__asm __volatile("lfence" ::: "memory");
+
+		*vcounter = vcount;

---
 arch/x86/include/asm/vgtod.h   |    4 ++
 arch/x86/kernel/vsyscall_64.c  |    4 ++
 arch/x86/vdso/vclock_gettime.c |   87 ++++++++++++++++++++++++++++++++++++++++
 3 files changed, 95 insertions(+), 0 deletions(-)

diff --git a/arch/x86/include/asm/vgtod.h b/arch/x86/include/asm/vgtod.h
index dc27a69..685f7a9 100644
