[RT] fix delay in do_vgettimeofday() in arch/x86_64/kernel/vsyscall.c

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




There are occasional very very long (30..60 sec) delays happening when calling
gettimeofday() vsyscall on x86_64 with 2.6.14-rt22 kernel.

These delays come from while() looping over invalid data that are
going to be discarded by seqlock.



 arch/x86_64/kernel/vsyscall.c |   15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)

Index: linux/arch/x86_64/kernel/vsyscall.c
===================================================================
--- linux.orig/arch/x86_64/kernel/vsyscall.c
+++ linux/arch/x86_64/kernel/vsyscall.c
@@ -111,14 +111,15 @@ static force_inline void do_vgettimeofda
 
 		/* add nsec offset to wall_time_tv */
 		*tv = __vsyscall_gtod_data.wall_time_tv;
-		do_div(nsec_delta, NSEC_PER_USEC);
-		tv->tv_usec += (unsigned long) nsec_delta;
-
-		while (tv->tv_usec > USEC_PER_SEC) {
-			tv->tv_sec += 1;
-			tv->tv_usec -= USEC_PER_SEC;
-		}
 	} while (read_seqretry(&__vsyscall_gtod_lock, seq));
+
+	do_div(nsec_delta, NSEC_PER_USEC);
+	tv->tv_usec += (unsigned long) nsec_delta;
+
+	while (tv->tv_usec > USEC_PER_SEC) {
+		tv->tv_sec += 1;
+		tv->tv_usec -= USEC_PER_SEC;
+	}
 }
 
 /*
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux