[PATCH] ppc64: fix time syscall
Anton Blanchard
anton at samba.org
Sat Jan 7 00:49:49 EST 2006
ppc64 has its own version of sys_time. It looks pretty scary, touching
a whole bunch of variables without any locking or memory ordering.
In fact, a recent bugreport has shown it can actually go backwards. Time
to remove it and just use the generic sys_time, which is implemented on
top of do_gettimeofday.
Signed-off-by: Anton Blanchard <anton at samba.org>
---
Index: build/arch/powerpc/kernel/syscalls.c
===================================================================
--- build.orig/arch/powerpc/kernel/syscalls.c 2005-12-20 19:08:01.000000000 +1100
+++ build/arch/powerpc/kernel/syscalls.c 2006-01-07 00:37:26.000000000 +1100
@@ -43,9 +43,6 @@
#include <asm/time.h>
#include <asm/unistd.h>
-extern unsigned long wall_jiffies;
-
-
/*
* sys_ipc() is the de-multiplexer for the SysV IPC calls..
*
@@ -311,31 +308,6 @@
return error? -EFAULT: 0;
}
-#ifdef CONFIG_PPC64
-time_t sys64_time(time_t __user * tloc)
-{
- time_t secs;
- time_t usecs;
-
- long tb_delta = tb_ticks_since(tb_last_stamp);
- tb_delta += (jiffies - wall_jiffies) * tb_ticks_per_jiffy;
-
- secs = xtime.tv_sec;
- usecs = (xtime.tv_nsec/1000) + tb_delta / tb_ticks_per_usec;
- while (usecs >= USEC_PER_SEC) {
- ++secs;
- usecs -= USEC_PER_SEC;
- }
-
- if (tloc) {
- if (put_user(secs,tloc))
- secs = -EFAULT;
- }
-
- return secs;
-}
-#endif
-
long ppc_fadvise64_64(int fd, int advice, u32 offset_high, u32 offset_low,
u32 len_high, u32 len_low)
{
Index: build/arch/powerpc/kernel/systbl.S
===================================================================
--- build.orig/arch/powerpc/kernel/systbl.S 2005-11-05 20:51:08.000000000 +1100
+++ build/arch/powerpc/kernel/systbl.S 2006-01-07 00:37:26.000000000 +1100
@@ -54,7 +54,7 @@
SYSCALL(unlink)
COMPAT_SYS(execve)
SYSCALL(chdir)
-SYSX(sys64_time,compat_sys_time,sys_time)
+COMPAT_SYS(time)
SYSCALL(mknod)
SYSCALL(chmod)
SYSCALL(lchown)
More information about the Linuxppc64-dev
mailing list