From: Stephen Rothwell Signed-off-by: Stephen Rothwell Signed-off-by: Andrew Morton --- arch/alpha/kernel/osf_sys.c | 16 ---------------- arch/alpha/kernel/systbls.S | 2 +- arch/arm/kernel/sys_arm.c | 12 ------------ arch/ia64/kernel/entry.S | 2 +- arch/ia64/kernel/sys_ia64.c | 14 -------------- arch/mips/kernel/syscall.c | 16 ---------------- arch/parisc/kernel/sys_parisc.c | 11 ----------- arch/parisc/kernel/syscall_table.S | 2 +- arch/sh64/kernel/sys_sh64.c | 15 --------------- arch/sh64/kernel/syscalls.S | 2 +- arch/um/include/sysdep-x86_64/syscalls.h | 1 - arch/um/sys-x86_64/syscalls.c | 8 -------- arch/x86_64/kernel/sys_x86_64.c | 6 ------ include/asm-x86_64/unistd.h | 2 +- include/linux/syscalls.h | 3 +-- ipc/shm.c | 14 ++++++++++++++ kernel/sys_ni.c | 1 + 17 files changed, 21 insertions(+), 106 deletions(-) diff -puN arch/alpha/kernel/osf_sys.c~consolidate-sys_shmat arch/alpha/kernel/osf_sys.c --- 25/arch/alpha/kernel/osf_sys.c~consolidate-sys_shmat 2005-04-29 18:54:57.381420696 -0700 +++ 25-akpm/arch/alpha/kernel/osf_sys.c 2005-04-29 18:54:57.411416136 -0700 @@ -457,22 +457,6 @@ osf_getdomainname(char __user *name, int return 0; } -asmlinkage long -osf_shmat(int shmid, void __user *shmaddr, int shmflg) -{ - unsigned long raddr; - long err; - - err = do_shmat(shmid, shmaddr, shmflg, &raddr); - - /* - * This works because all user-level addresses are - * non-negative longs! - */ - return err ? err : (long)raddr; -} - - /* * The following stuff should move into a header file should it ever * be labeled "officially supported." Right now, there is just enough diff -puN arch/alpha/kernel/systbls.S~consolidate-sys_shmat arch/alpha/kernel/systbls.S --- 25/arch/alpha/kernel/systbls.S~consolidate-sys_shmat 2005-04-29 18:54:57.383420392 -0700 +++ 25-akpm/arch/alpha/kernel/systbls.S 2005-04-29 18:54:57.411416136 -0700 @@ -227,7 +227,7 @@ sys_call_table: .quad sys_semop .quad osf_utsname .quad sys_lchown - .quad osf_shmat + .quad sys_shmat .quad sys_shmctl /* 210 */ .quad sys_shmdt .quad sys_shmget diff -puN arch/arm/kernel/sys_arm.c~consolidate-sys_shmat arch/arm/kernel/sys_arm.c --- 25/arch/arm/kernel/sys_arm.c~consolidate-sys_shmat 2005-04-29 18:54:57.385420088 -0700 +++ 25-akpm/arch/arm/kernel/sys_arm.c 2005-04-29 18:54:57.412415984 -0700 @@ -227,18 +227,6 @@ asmlinkage int sys_ipc(uint call, int fi } } -asmlinkage long sys_shmat(int shmid, char __user *shmaddr, int shmflg, - unsigned long __user *addr) -{ - unsigned long ret; - long err; - - err = do_shmat(shmid, shmaddr, shmflg, &ret); - if (err == 0) - err = put_user(ret, addr); - return err; -} - /* Fork a new task - this creates a new program thread. * This is called indirectly via a small wrapper */ diff -puN arch/ia64/kernel/entry.S~consolidate-sys_shmat arch/ia64/kernel/entry.S --- 25/arch/ia64/kernel/entry.S~consolidate-sys_shmat 2005-04-29 18:54:57.387419784 -0700 +++ 25-akpm/arch/ia64/kernel/entry.S 2005-04-29 18:54:57.413415832 -0700 @@ -1411,7 +1411,7 @@ sys_call_table: data8 sys_msgrcv data8 sys_msgctl data8 sys_shmget - data8 ia64_shmat + data8 sys_shmat data8 sys_shmdt // 1115 data8 sys_shmctl data8 sys_syslog diff -puN arch/ia64/kernel/sys_ia64.c~consolidate-sys_shmat arch/ia64/kernel/sys_ia64.c --- 25/arch/ia64/kernel/sys_ia64.c~consolidate-sys_shmat 2005-04-29 18:54:57.388419632 -0700 +++ 25-akpm/arch/ia64/kernel/sys_ia64.c 2005-04-29 18:54:57.413415832 -0700 @@ -93,20 +93,6 @@ sys_getpagesize (void) } asmlinkage unsigned long -ia64_shmat (int shmid, void __user *shmaddr, int shmflg) -{ - unsigned long raddr; - int retval; - - retval = do_shmat(shmid, shmaddr, shmflg, &raddr); - if (retval < 0) - return retval; - - force_successful_syscall_return(); - return raddr; -} - -asmlinkage unsigned long ia64_brk (unsigned long brk) { unsigned long rlim, retval, newbrk, oldbrk; diff -puN arch/mips/kernel/syscall.c~consolidate-sys_shmat arch/mips/kernel/syscall.c --- 25/arch/mips/kernel/syscall.c~consolidate-sys_shmat 2005-04-29 18:54:57.390419328 -0700 +++ 25-akpm/arch/mips/kernel/syscall.c 2005-04-29 18:54:57.414415680 -0700 @@ -374,22 +374,6 @@ asmlinkage int sys_ipc (uint call, int f } /* - * Native ABI that is O32 or N64 version - */ -asmlinkage long sys_shmat(int shmid, char __user *shmaddr, - int shmflg, unsigned long *addr) -{ - unsigned long raddr; - int err; - - err = do_shmat(shmid, shmaddr, shmflg, &raddr); - if (err) - return err; - - return put_user(raddr, addr); -} - -/* * No implemented yet ... */ asmlinkage int sys_cachectl(char *addr, int nbytes, int op) diff -puN arch/parisc/kernel/syscall_table.S~consolidate-sys_shmat arch/parisc/kernel/syscall_table.S --- 25/arch/parisc/kernel/syscall_table.S~consolidate-sys_shmat 2005-04-29 18:54:57.392419024 -0700 +++ 25-akpm/arch/parisc/kernel/syscall_table.S 2005-04-29 18:54:57.414415680 -0700 @@ -297,7 +297,7 @@ ENTRY_DIFF(msgrcv) ENTRY_SAME(msgget) /* 190 */ ENTRY_SAME(msgctl) - ENTRY_SAME(shmat_wrapper) + ENTRY_SAME(shmat) ENTRY_SAME(shmdt) ENTRY_SAME(shmget) ENTRY_SAME(shmctl) /* 195 */ diff -puN arch/parisc/kernel/sys_parisc.c~consolidate-sys_shmat arch/parisc/kernel/sys_parisc.c --- 25/arch/parisc/kernel/sys_parisc.c~consolidate-sys_shmat 2005-04-29 18:54:57.394418720 -0700 +++ 25-akpm/arch/parisc/kernel/sys_parisc.c 2005-04-29 18:54:57.415415528 -0700 @@ -161,17 +161,6 @@ asmlinkage unsigned long sys_mmap(unsign } } -long sys_shmat_wrapper(int shmid, char __user *shmaddr, int shmflag) -{ - unsigned long raddr; - int r; - - r = do_shmat(shmid, shmaddr, shmflag, &raddr); - if (r < 0) - return r; - return raddr; -} - /* Fucking broken ABI */ #ifdef CONFIG_64BIT diff -puN arch/sh64/kernel/syscalls.S~consolidate-sys_shmat arch/sh64/kernel/syscalls.S --- 25/arch/sh64/kernel/syscalls.S~consolidate-sys_shmat 2005-04-29 18:54:57.395418568 -0700 +++ 25-akpm/arch/sh64/kernel/syscalls.S 2005-04-29 18:54:57.415415528 -0700 @@ -268,7 +268,7 @@ sys_call_table: .long sys_msgrcv .long sys_msgget .long sys_msgctl - .long sys_shmatcall + .long sys_shmat .long sys_shmdt /* 245 */ .long sys_shmget .long sys_shmctl diff -puN arch/sh64/kernel/sys_sh64.c~consolidate-sys_shmat arch/sh64/kernel/sys_sh64.c --- 25/arch/sh64/kernel/sys_sh64.c~consolidate-sys_shmat 2005-04-29 18:54:57.397418264 -0700 +++ 25-akpm/arch/sh64/kernel/sys_sh64.c 2005-04-29 18:54:57.416415376 -0700 @@ -283,18 +283,3 @@ asmlinkage int sys_uname(struct old_utsn up_read(&uts_sem); return err?-EFAULT:0; } - -/* Copy from mips version */ -asmlinkage long sys_shmatcall(int shmid, char __user *shmaddr, - int shmflg) -{ - unsigned long raddr; - int err; - - err = do_shmat(shmid, shmaddr, shmflg, &raddr); - if (err) - return err; - - err = raddr; - return err; -} diff -puN arch/um/include/sysdep-x86_64/syscalls.h~consolidate-sys_shmat arch/um/include/sysdep-x86_64/syscalls.h --- 25/arch/um/include/sysdep-x86_64/syscalls.h~consolidate-sys_shmat 2005-04-29 18:54:57.398418112 -0700 +++ 25-akpm/arch/um/include/sysdep-x86_64/syscalls.h 2005-04-29 18:54:57.416415376 -0700 @@ -26,7 +26,6 @@ extern syscall_handler_t *ia32_sys_call_ extern long old_mmap(unsigned long addr, unsigned long len, unsigned long prot, unsigned long flags, unsigned long fd, unsigned long pgoff); -extern syscall_handler_t wrap_sys_shmat; extern syscall_handler_t sys_modify_ldt; extern syscall_handler_t sys_arch_prctl; diff -puN arch/um/sys-x86_64/syscalls.c~consolidate-sys_shmat arch/um/sys-x86_64/syscalls.c --- 25/arch/um/sys-x86_64/syscalls.c~consolidate-sys_shmat 2005-04-29 18:54:57.400417808 -0700 +++ 25-akpm/arch/um/sys-x86_64/syscalls.c 2005-04-29 18:54:57.417415224 -0700 @@ -14,14 +14,6 @@ #include "asm/prctl.h" /* XXX This should get the constants from libc */ #include "choose-mode.h" -/* XXX: copied from x86-64: arch/x86_64/kernel/sys_x86_64.c */ -asmlinkage long wrap_sys_shmat(int shmid, char __user *shmaddr, int shmflg) -{ - unsigned long raddr; - - return do_shmat(shmid, shmaddr, shmflg, &raddr) ?: (long) raddr; -} - asmlinkage long sys_uname64(struct new_utsname __user * name) { int err; diff -puN arch/x86_64/kernel/sys_x86_64.c~consolidate-sys_shmat arch/x86_64/kernel/sys_x86_64.c --- 25/arch/x86_64/kernel/sys_x86_64.c~consolidate-sys_shmat 2005-04-29 18:54:57.401417656 -0700 +++ 25-akpm/arch/x86_64/kernel/sys_x86_64.c 2005-04-29 18:54:57.418415072 -0700 @@ -152,12 +152,6 @@ asmlinkage long sys_uname(struct new_uts return err ? -EFAULT : 0; } -asmlinkage long wrap_sys_shmat(int shmid, char __user *shmaddr, int shmflg) -{ - unsigned long raddr; - return do_shmat(shmid,shmaddr,shmflg,&raddr) ?: (long)raddr; -} - asmlinkage long sys_time64(long __user * tloc) { struct timeval now; diff -puN include/asm-x86_64/unistd.h~consolidate-sys_shmat include/asm-x86_64/unistd.h --- 25/include/asm-x86_64/unistd.h~consolidate-sys_shmat 2005-04-29 18:54:57.403417352 -0700 +++ 25-akpm/include/asm-x86_64/unistd.h 2005-04-29 18:54:57.418415072 -0700 @@ -76,7 +76,7 @@ __SYSCALL(__NR_madvise, sys_madvise) #define __NR_shmget 29 __SYSCALL(__NR_shmget, sys_shmget) #define __NR_shmat 30 -__SYSCALL(__NR_shmat, wrap_sys_shmat) +__SYSCALL(__NR_shmat, sys_shmat) #define __NR_shmctl 31 __SYSCALL(__NR_shmctl, sys_shmctl) diff -puN include/linux/syscalls.h~consolidate-sys_shmat include/linux/syscalls.h --- 25/include/linux/syscalls.h~consolidate-sys_shmat 2005-04-29 18:54:57.404417200 -0700 +++ 25-akpm/include/linux/syscalls.h 2005-04-29 18:54:57.419414920 -0700 @@ -456,8 +456,7 @@ asmlinkage long sys_semctl(int semid, in asmlinkage long sys_semtimedop(int semid, struct sembuf __user *sops, unsigned nsops, const struct timespec __user *timeout); -asmlinkage long sys_shmat(int shmid, char __user *shmaddr, - int shmflg, unsigned long __user *addr); +asmlinkage long sys_shmat(int shmid, char __user *shmaddr, int shmflg); asmlinkage long sys_shmget(key_t key, size_t size, int flag); asmlinkage long sys_shmdt(char __user *shmaddr); asmlinkage long sys_shmctl(int shmid, int cmd, struct shmid_ds __user *buf); diff -puN ipc/shm.c~consolidate-sys_shmat ipc/shm.c --- 25/ipc/shm.c~consolidate-sys_shmat 2005-04-29 18:54:57.406416896 -0700 +++ 25-akpm/ipc/shm.c 2005-04-29 18:54:57.421414616 -0700 @@ -28,6 +28,8 @@ #include #include #include +#include + #include #include "util.h" @@ -771,6 +773,18 @@ out: return err; } +asmlinkage long sys_shmat(int shmid, char __user *shmaddr, int shmflg) +{ + unsigned long ret; + long err; + + err = do_shmat(shmid, shmaddr, shmflg, &ret); + if (err) + return err; + force_successful_syscall_return(); + return (long)ret; +} + /* * detach and kill segment if marked destroyed. * The work is done in shm_close. diff -puN kernel/sys_ni.c~consolidate-sys_shmat kernel/sys_ni.c --- 25/kernel/sys_ni.c~consolidate-sys_shmat 2005-04-29 18:54:57.407416744 -0700 +++ 25-akpm/kernel/sys_ni.c 2005-04-29 18:54:57.421414616 -0700 @@ -52,6 +52,7 @@ cond_syscall(sys_msgsnd); cond_syscall(sys_msgrcv); cond_syscall(sys_msgctl); cond_syscall(sys_shmget); +cond_syscall(sys_shmat); cond_syscall(sys_shmdt); cond_syscall(sys_shmctl); cond_syscall(sys_mq_open); _