Message ID | 1227259869.5224.123.camel@gentoo-jocke.transmode.se (mailing list archive) |
---|---|
State | Superseded, archived |
Delegated to: | Paul Mackerras |
Headers | show |
Joakim Tjernlund writes: > > + force_successful_syscall_return(); > > return (long) jiffies_64_to_clock_t(get_jiffies_64()); > > Why is 64 bits ops used here when you only use 32 bits? If HZ is 1000, jiffies_64_to_clock_t is going to divide jiffies by 10, so we need to start with 64 bits in order to get the top few bits of a 32-bit result correct. > BTW, I think time(2) needs this: In principle you are correct, but it's only going to matter for a little over an hour some time in the year 2106. :) Paul.
On Fri, 2008-11-21 at 20:51 +1100, Paul Mackerras wrote: > Joakim Tjernlund writes: > > > > + force_successful_syscall_return(); > > > return (long) jiffies_64_to_clock_t(get_jiffies_64()); > > > > Why is 64 bits ops used here when you only use 32 bits? > > If HZ is 1000, jiffies_64_to_clock_t is going to divide jiffies by 10, > so we need to start with 64 bits in order to get the top few bits > of a 32-bit result correct. I see, thanks. > > > BTW, I think time(2) needs this: > > In principle you are correct, but it's only going to matter for a > little over an hour some time in the year 2106. :) I know, but I figured it should be fixed to serve as an template for other similar sys calls(not that I know of any offhand). Perhaps add it commented? Jocke
diff --git a/kernel/time.c b/kernel/time.c index 6a08660..1627910 100644 --- a/kernel/time.c +++ b/kernel/time.c @@ -37,6 +37,7 @@ #include <linux/fs.h> #include <linux/slab.h> #include <linux/math64.h> +#include <linux/ptrace.h> #include <asm/uaccess.h> #include <asm/unistd.h> @@ -65,8 +66,9 @@ asmlinkage long sys_time(time_t __user * tloc) if (tloc) { if (put_user(i,tloc)) - i = -EFAULT; + return -EFAULT; } + force_successful_syscall_return(); return i; }