All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] x86_64 : fix vtime() vsyscall
@ 2007-03-28  6:22 Eric Dumazet
  0 siblings, 0 replies; only message in thread
From: Eric Dumazet @ 2007-03-28  6:22 UTC (permalink / raw)
  To: Andrew Morton; +Cc: Andi Kleen, Linux kernel

[-- Attachment #1: Type: text/plain, Size: 565 bytes --]

There is a tiny probability that the return value from vtime(time_t *t) is 
different than the value stored in *t

Using a temporary variable solves the problem and gives a faster code.

   17:   48 85 ff                test   %rdi,%rdi
   1a:   48 8b 05 00 00 00 00    mov    0(%rip),%rax        # 
__vsyscall_gtod_data.wall_time_tv.tv_sec
   21:   74 03                   je     26
   23:   48 89 07                mov    %rax,(%rdi)
   26:   c9                      leaveq
   27:   c3                      retq

Signed-off-by: Eric Dumazet <dada1@cosmosbay.com>

[-- Attachment #2: vtime_fix.patch --]
[-- Type: text/plain, Size: 667 bytes --]

--- linux-2.6.21-rc5-mm1/arch/x86_64/kernel/vsyscall.c
+++ linux-2.6.21-rc5-mm1-ed/arch/x86_64/kernel/vsyscall.c
@@ -147,15 +147,15 @@ int __vsyscall(0) vgettimeofday(struct t
 	return 0;
 }
 
-/* This will break when the xtime seconds get inaccurate, but that is
- * unlikely */
 time_t __vsyscall(1) vtime(time_t *t)
 {
+	time_t result;
 	if (!__vsyscall_gtod_data.sysctl_enabled)
 		return time_syscall(t);
-	else if (t)
-		*t = __vsyscall_gtod_data.wall_time_tv.tv_sec;
-	return __vsyscall_gtod_data.wall_time_tv.tv_sec;
+	result = __vsyscall_gtod_data.wall_time_tv.tv_sec;
+	if (t)
+		*t = result;
+	return result;
 }
 
 /* Fast way to get current CPU and node.

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2007-03-28  6:22 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-03-28  6:22 [PATCH] x86_64 : fix vtime() vsyscall Eric Dumazet

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.