On Wed, 14 May 2014, Arnd Bergmann wrote: > On Tuesday 13 May 2014 22:35:08 Geert Uytterhoeven wrote: > > > > On Tue, May 13, 2014 at 9:32 PM, Arnd Bergmann <arnd@xxxxxxxx> wrote: > > > I think we have three categories: > > > > Thanks for the list! > > > > > a) interfaces that uses relative time_t/timespec/timeval: > > > b) interfaces that don't make sense for times in the past: > > > > > c) interfaces that require absolute times: > > > - stat/lstat/fstatat/ > > > - utime/utimes/futimesat > > > > > > These absolutely have to use something better than time_t > > > both in user space and in the kernel so we can deal with > > > old files. A lot of file systems need to be fixed as well so > > > we can actually store the times, regardless of whether we > > > are running a 32 or 64 bit kernel. > > > > So these are the ones we have to worry about. > > It looks like they all involve I/O? Apart from the case of using block data > > from the buffer cache, the 64-bit operations should disappear in the > > actual I/O noise, right? > > Right. Also there have been proposals for a better 'stat' replacement > for years, which would solve half of the interface problem for the > file system interfaces. > > However, we also need to find a solution for category b), I only put > them into a different category above because we can treat them > differently in the kernel. For instance, we could use ktime_t for > the kernel code in category b) and a new struct timespec64 for > the times in struct inode. > On the user interface side, using timespec64 would be a reasonable > choice for both categories, because we already have two implementations > of all those syscalls in order to handle 32-on-64 compat tasks, > and we could use the same set of syscall implementations for time64-on-32. So in the 32-on-64 case we'll have two compat variants: SYSCALL_DEFINE6(futex, u32 __user *, uaddr, int, op, u32, val, struct timespec __user *, utime, u32 __user *, uaddr2, u32, val3) COMPAT_SYSCALL_DEFINE6(futex, u32 __user *, uaddr, int, op, u32, val, struct compat_timespec __user *, utime, u32 __user *, uaddr2, u32, val3) COMPAT_SYSCALL_DEFINE6(futex64, u32 __user *, uaddr, int, op, u32, val, struct timespec64 __user *, utime, u32 __user *, uaddr2, u32, val3) The native 64bit futex64 syscall is mapped to futex. And for a 32bit kernel you have two SYSCALL_DEFINE6(futex, u32 __user *, uaddr, int, op, u32, val, struct timespec __user *, utime, u32 __user *, uaddr2, u32, val3) SYSCALL_DEFINE6(futex64, u32 __user *, uaddr, int, op, u32, val, struct timespec64 __user *, utime, u32 __user *, uaddr2, u32, val3) Fine with me, but we really need to discuss the timespec64 with user space folks. I'm curious, whether quite some code, like high frequency timestamps wouldn't be better of with a strict 64 bit nanosecond granular time represenation. I often enough cursed timespec for clock_nanosleep on an absolute timeline. I need to go through all that normalizing stuff instead of just doing next_event += 500000; Thanks, tglx -- To unsubscribe from this list: send the line "unsubscribe linux-arch" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html