Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/signal
authorLinus Torvalds <torvalds@linux-foundation.org>
Wed, 1 May 2013 14:21:43 +0000 (07:21 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 1 May 2013 14:21:43 +0000 (07:21 -0700)
Pull compat cleanup from Al Viro:
 "Mostly about syscall wrappers this time; there will be another pile
  with patches in the same general area from various people, but I'd
  rather push those after both that and vfs.git pile are in."

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/signal:
  syscalls.h: slightly reduce the jungles of macros
  get rid of union semop in sys_semctl(2) arguments
  make do_mremap() static
  sparc: no need to sign-extend in sync_file_range() wrapper
  ppc compat wrappers for add_key(2) and request_key(2) are pointless
  x86: trim sys_ia32.h
  x86: sys32_kill and sys32_mprotect are pointless
  get rid of compat_sys_semctl() and friends in case of ARCH_WANT_OLD_COMPAT_IPC
  merge compat sys_ipc instances
  consolidate compat lookup_dcookie()
  convert vmsplice to COMPAT_SYSCALL_DEFINE
  switch getrusage() to COMPAT_SYSCALL_DEFINE
  switch epoll_pwait to COMPAT_SYSCALL_DEFINE
  convert sendfile{,64} to COMPAT_SYSCALL_DEFINE
  switch signalfd{,4}() to COMPAT_SYSCALL_DEFINE
  make SYSCALL_DEFINE<n>-generated wrappers do asmlinkage_protect
  make HAVE_SYSCALL_WRAPPERS unconditional
  consolidate cond_syscall and SYSCALL_ALIAS declarations
  teach SYSCALL_DEFINE<n> how to deal with long long/unsigned long long
  get rid of duplicate logics in __SC_....[1-6] definitions

87 files changed:
arch/Kconfig
arch/alpha/Kconfig
arch/alpha/include/asm/linkage.h
arch/alpha/include/asm/unistd.h
arch/arm/include/asm/unistd.h
arch/arm64/kernel/sys32.S
arch/avr32/include/asm/unistd.h
arch/blackfin/include/asm/unistd.h
arch/cris/include/asm/unistd.h
arch/frv/include/asm/unistd.h
arch/h8300/include/asm/linkage.h
arch/h8300/include/asm/unistd.h
arch/ia64/include/asm/linkage.h
arch/ia64/include/asm/unistd.h
arch/m32r/include/asm/unistd.h
arch/m68k/include/asm/unistd.h
arch/microblaze/include/asm/unistd.h
arch/mips/Kconfig
arch/mips/include/asm/linkage.h
arch/mips/include/asm/unistd.h
arch/mips/kernel/linux32.c
arch/mips/kernel/scall64-n32.S
arch/mips/kernel/scall64-o32.S
arch/mn10300/include/asm/unistd.h
arch/parisc/include/asm/unistd.h
arch/parisc/kernel/sys_parisc32.c
arch/parisc/kernel/syscall_table.S
arch/powerpc/Kconfig
arch/powerpc/include/asm/linkage.h [new file with mode: 0644]
arch/powerpc/include/asm/systbl.h
arch/powerpc/include/asm/unistd.h
arch/powerpc/include/uapi/asm/linkage.h [deleted file]
arch/powerpc/kernel/sys_ppc32.c
arch/s390/Kconfig
arch/s390/include/asm/unistd.h
arch/s390/kernel/compat_linux.c
arch/s390/kernel/compat_linux.h
arch/s390/kernel/compat_wrapper.S
arch/s390/kernel/sys_s390.c
arch/s390/kernel/syscalls.S
arch/sh/include/asm/unistd.h
arch/sparc/Kconfig
arch/sparc/include/asm/unistd.h
arch/sparc/kernel/sys32.S
arch/sparc/kernel/sys_sparc32.c
arch/sparc/kernel/sys_sparc_64.c
arch/sparc/kernel/systbls_64.S
arch/tile/Kconfig
arch/tile/kernel/compat.c
arch/x86/ia32/Makefile
arch/x86/ia32/ipc32.c [deleted file]
arch/x86/ia32/sys_ia32.c
arch/x86/include/asm/sys_ia32.h
arch/x86/include/asm/syscalls.h
arch/x86/include/asm/unistd.h
arch/x86/kernel/tls.c
arch/x86/syscalls/syscall_32.tbl
arch/x86/um/tls_32.c
arch/xtensa/include/asm/unistd.h
fs/aio.c
fs/compat.c
fs/dcookies.c
fs/eventpoll.c
fs/notify/fanotify/fanotify_user.c
fs/open.c
fs/read_write.c
fs/read_write.h
fs/signalfd.c
fs/splice.c
fs/sync.c
include/asm-generic/unistd.h
include/linux/compat.h
include/linux/linkage.h
include/linux/mm.h
include/linux/syscalls.h
ipc/compat.c
ipc/sem.c
ipc/syscall.c
kernel/compat.c
kernel/exit.c
kernel/fork.c
kernel/sys.c
kernel/sys_ni.c
kernel/uid16.c
mm/fadvise.c
mm/nommu.c
mm/readahead.c

index 1455579..99f0e17 100644 (file)
@@ -157,9 +157,6 @@ config ARCH_USE_BUILTIN_BSWAP
         instructions should set this. And it shouldn't hurt to set it
         on architectures that don't have such instructions.
 
-config HAVE_SYSCALL_WRAPPERS
-       bool
-
 config KRETPROBES
        def_bool y
        depends on KPROBES && HAVE_KRETPROBES
index 8a33ba0..8629127 100644 (file)
@@ -4,7 +4,6 @@ config ALPHA
        select HAVE_AOUT
        select HAVE_IDE
        select HAVE_OPROFILE
-       select HAVE_SYSCALL_WRAPPERS
        select HAVE_PCSPKR_PLATFORM
        select HAVE_PERF_EVENTS
        select HAVE_DMA_ATTRS
index 291c2d0..7cfd06e 100644 (file)
@@ -1,6 +1,8 @@
 #ifndef __ASM_LINKAGE_H
 #define __ASM_LINKAGE_H
 
-/* Nothing to see here... */
+#define cond_syscall(x)  asm(".weak\t" #x "\n" #x " = sys_ni_syscall")
+#define SYSCALL_ALIAS(alias, name)                                     \
+       asm ( #alias " = " #name "\n\t.globl " #alias)
 
 #endif
index 6d6fe7a..43baee1 100644 (file)
 #define __ARCH_WANT_SYS_VFORK
 #define __ARCH_WANT_SYS_CLONE
 
-/* "Conditional" syscalls.  What we want is
-
-       __attribute__((weak,alias("sys_ni_syscall")))
-
-   but that raises the problem of what type to give the symbol.  If we use
-   a prototype, it'll conflict with the definition given in this file and
-   others.  If we use __typeof, we discover that not all symbols actually
-   have declarations.  If we use no prototype, then we get warnings from
-   -Wstrict-prototypes.  Ho hum.  */
-
-#define cond_syscall(x)  asm(".weak\t" #x "\n" #x " = sys_ni_syscall")
-
 #endif /* _ALPHA_UNISTD_H */
index e4ddfb3..141baa3 100644 (file)
 #define __ARCH_WANT_SYS_VFORK
 #define __ARCH_WANT_SYS_CLONE
 
-/*
- * "Conditional" syscalls
- *
- * What we want is __attribute__((weak,alias("sys_ni_syscall"))),
- * but it doesn't work on all toolchains, so we just do it by hand
- */
-#define cond_syscall(x) asm(".weak\t" #x "\n\t.set\t" #x ",sys_ni_syscall")
-
 /*
  * Unimplemented (or alternatively implemented) syscalls
  */
index 9416d04..db01aa9 100644 (file)
@@ -84,13 +84,6 @@ compat_sys_readahead_wrapper:
        b       sys_readahead
 ENDPROC(compat_sys_readahead_wrapper)
 
-compat_sys_lookup_dcookie:
-       orr     x0, x0, x1, lsl #32
-       mov     w1, w2
-       mov     w2, w3
-       b       sys_lookup_dcookie
-ENDPROC(compat_sys_lookup_dcookie)
-
 compat_sys_fadvise64_64_wrapper:
        mov     w6, w1
        orr     x1, x2, x3, lsl #32
index dc4d5a9..c1eb080 100644 (file)
 #define __ARCH_WANT_SYS_VFORK
 #define __ARCH_WANT_SYS_CLONE
 
-/*
- * "Conditional" syscalls
- *
- * What we want is __attribute__((weak,alias("sys_ni_syscall"))),
- * but it doesn't work on all toolchains, so we just do it by hand
- */
-#define cond_syscall(x) asm(".weak\t" #x "\n\t.set\t" #x ",sys_ni_syscall");
-
 #endif /* __ASM_AVR32_UNISTD_H */
index 04e83ea..c35414b 100644 (file)
 #define __ARCH_WANT_SYS_NICE
 #define __ARCH_WANT_SYS_VFORK
 
-/*
- * "Conditional" syscalls
- *
- * What we want is __attribute__((weak,alias("sys_ni_syscall"))),
- * but it doesn't work on all toolchains, so we just do it by hand
- */
-#define cond_syscall(x) asm(".weak\t_" #x "\n\t.set\t_" #x ",_sys_ni_syscall");
-
 #endif                         /* __ASM_BFIN_UNISTD_H */
index be57a98..0ff3f68 100644 (file)
 #define __ARCH_WANT_SYS_VFORK
 #define __ARCH_WANT_SYS_CLONE
 
-/*
- * "Conditional" syscalls
- *
- * What we want is __attribute__((weak,alias("sys_ni_syscall"))),
- * but it doesn't work on all toolchains, so we just do it by hand
- */
-#define cond_syscall(x) asm(".weak\t" #x "\n\t.set\t" #x ",sys_ni_syscall")
-
 #endif /* _ASM_CRIS_UNISTD_H_ */
index 4cfcc7b..70ec729 100644 (file)
 #define __ARCH_WANT_SYS_VFORK
 #define __ARCH_WANT_SYS_CLONE
 
-/*
- * "Conditional" syscalls
- *
- * What we want is __attribute__((weak,alias("sys_ni_syscall"))),
- * but it doesn't work on all toolchains, so we just do it by hand
- */
-#ifndef cond_syscall
-#define cond_syscall(x) asm(".weak\t" #x "\n\t.set\t" #x ",sys_ni_syscall")
-#endif
-
 #endif /* _ASM_UNISTD_H_ */
index 6f4df7d..1d81604 100644 (file)
@@ -2,7 +2,5 @@
 #define _H8300_LINKAGE_H
 
 #undef SYMBOL_NAME_LABEL
-#undef SYMBOL_NAME
 #define SYMBOL_NAME_LABEL(_name_) _##_name_##:
-#define SYMBOL_NAME(_name_) _##_name_
 #endif
index 6721856..ab671ec 100644 (file)
 #define __ARCH_WANT_SYS_VFORK
 #define __ARCH_WANT_SYS_CLONE
 
-/*
- * "Conditional" syscalls
- */
-#define cond_syscall(name)                                             \
-  asm (".weak\t_" #name "\n"                           \
-       ".set\t_" #name ",_sys_ni_syscall");
-
 #endif /* _ASM_H8300_UNISTD_H_ */
index ef22a45..7875757 100644 (file)
@@ -11,4 +11,8 @@
 
 #endif
 
+#define cond_syscall(x) asm(".weak\t" #x "#\n" #x "#\t=\tsys_ni_syscall#")
+#define SYSCALL_ALIAS(alias, name)                                     \
+       asm ( #alias "# = " #name "#\n\t.globl " #alias "#")
+
 #endif
index 0963738..afd45e0 100644 (file)
@@ -46,15 +46,5 @@ asmlinkage unsigned long sys_mmap2(
 struct pt_regs;
 asmlinkage long sys_ia64_pipe(void);
 
-/*
- * "Conditional" syscalls
- *
- * Note, this macro can only be used in the file which defines sys_ni_syscall, i.e., in
- * kernel/sys_ni.c.  This version causes warnings because the declaration isn't a
- * proper prototype, but we can't use __typeof__ either, because not all cond_syscall()
- * declarations have prototypes at the moment.
- */
-#define cond_syscall(x) asmlinkage long x (void) __attribute__((weak,alias("sys_ni_syscall")))
-
 #endif /* !__ASSEMBLY__ */
 #endif /* _ASM_IA64_UNISTD_H */
index 555629b..59db801 100644 (file)
 #define __IGNORE_getresgid
 #define __IGNORE_chown
 
-/*
- * "Conditional" syscalls
- *
- * What we want is __attribute__((weak,alias("sys_ni_syscall"))),
- * but it doesn't work on all toolchains, so we just do it by hand
- */
-#ifndef cond_syscall
-#define cond_syscall(x) asm(".weak\t" #x "\n\t.set\t" #x ",sys_ni_syscall")
-#endif
-
 #endif /* _ASM_M32R_UNISTD_H */
index 6cd9267..014f288 100644 (file)
 #define __ARCH_WANT_SYS_FORK
 #define __ARCH_WANT_SYS_VFORK
 
-/*
- * "Conditional" syscalls
- *
- * What we want is __attribute__((weak,alias("sys_ni_syscall"))),
- * but it doesn't work on all toolchains, so we just do it by hand
- */
-#define cond_syscall(x) asm(".weak\t" #x "\n\t.set\t" #x ",sys_ni_syscall")
-
 #endif /* _ASM_M68K_UNISTD_H_ */
index b377839..6dece2d 100644 (file)
 #define __ARCH_WANT_SYS_VFORK
 #define __ARCH_WANT_SYS_FORK
 
-/*
- * "Conditional" syscalls
- *
- * What we want is __attribute__((weak,alias("sys_ni_syscall"))),
- * but it doesn't work on all toolchains, so we just do it by hand
- */
-#define cond_syscall(x) asm(".weak\t" #x "\n\t.set\t" #x ",sys_ni_syscall");
-
 #endif /* __ASSEMBLY__ */
 #endif /* _ASM_MICROBLAZE_UNISTD_H */
index 007a917..e5f3794 100644 (file)
@@ -1739,7 +1739,6 @@ config 32BIT
 config 64BIT
        bool "64-bit kernel"
        depends on CPU_SUPPORTS_64BIT_KERNEL && SYS_SUPPORTS_64BIT_KERNEL
-       select HAVE_SYSCALL_WRAPPERS
        help
          Select this option if you want to build a 64-bit kernel.
 
index e9a940d..2767dda 100644 (file)
@@ -6,5 +6,8 @@
 #endif
 
 #define __weak __attribute__((weak))
+#define cond_syscall(x) asm(".weak\t" #x "\n" #x "\t=\tsys_ni_syscall")
+#define SYSCALL_ALIAS(alias, name)                                     \
+       asm ( #alias " = " #name "\n\t.globl " #alias)
 
 #endif
index 64f661e..63c9c88 100644 (file)
 
 #endif /* !__ASSEMBLY__ */
 
-/*
- * "Conditional" syscalls
- *
- * What we want is __attribute__((weak,alias("sys_ni_syscall"))),
- * but it doesn't work on all toolchains, so we just do it by hand
- */
-#define cond_syscall(x) asm(".weak\t" #x "\n" #x "\t=\tsys_ni_syscall")
-
 #endif /* _ASM_UNISTD_H */
index db9655f..d1d576b 100644 (file)
@@ -119,99 +119,6 @@ SYSCALL_DEFINE6(32_pwrite, unsigned int, fd, const char __user *, buf,
        return sys_pwrite64(fd, buf, count, merge_64(a4, a5));
 }
 
-#ifdef CONFIG_SYSVIPC
-
-SYSCALL_DEFINE6(32_ipc, u32, call, long, first, long, second, long, third,
-       unsigned long, ptr, unsigned long, fifth)
-{
-       int version, err;
-
-       version = call >> 16; /* hack for backward compatibility */
-       call &= 0xffff;
-
-       switch (call) {
-       case SEMOP:
-               /* struct sembuf is the same on 32 and 64bit :)) */
-               err = sys_semtimedop(first, compat_ptr(ptr), second, NULL);
-               break;
-       case SEMTIMEDOP:
-               err = compat_sys_semtimedop(first, compat_ptr(ptr), second,
-                                           compat_ptr(fifth));
-               break;
-       case SEMGET:
-               err = sys_semget(first, second, third);
-               break;
-       case SEMCTL:
-               err = compat_sys_semctl(first, second, third, compat_ptr(ptr));
-               break;
-       case MSGSND:
-               err = compat_sys_msgsnd(first, second, third, compat_ptr(ptr));
-               break;
-       case MSGRCV:
-               err = compat_sys_msgrcv(first, second, fifth, third,
-                                       version, compat_ptr(ptr));
-               break;
-       case MSGGET:
-               err = sys_msgget((key_t) first, second);
-               break;
-       case MSGCTL:
-               err = compat_sys_msgctl(first, second, compat_ptr(ptr));
-               break;
-       case SHMAT:
-               err = compat_sys_shmat(first, second, third, version,
-                                      compat_ptr(ptr));
-               break;
-       case SHMDT:
-               err = sys_shmdt(compat_ptr(ptr));
-               break;
-       case SHMGET:
-               err = sys_shmget(first, (unsigned)second, third);
-               break;
-       case SHMCTL:
-               err = compat_sys_shmctl(first, second, compat_ptr(ptr));
-               break;
-       default:
-               err = -ENOSYS;
-               break;
-       }
-
-       return err;
-}
-
-#else
-
-SYSCALL_DEFINE6(32_ipc, u32, call, int, first, int, second, int, third,
-       u32, ptr, u32, fifth)
-{
-       return -ENOSYS;
-}
-
-#endif /* CONFIG_SYSVIPC */
-
-#ifdef CONFIG_MIPS32_N32
-SYSCALL_DEFINE4(n32_semctl, int, semid, int, semnum, int, cmd, u32, arg)
-{
-       /* compat_sys_semctl expects a pointer to union semun */
-       u32 __user *uptr = compat_alloc_user_space(sizeof(u32));
-       if (put_user(arg, uptr))
-               return -EFAULT;
-       return compat_sys_semctl(semid, semnum, cmd, uptr);
-}
-
-SYSCALL_DEFINE4(n32_msgsnd, int, msqid, u32, msgp, unsigned int, msgsz,
-       int, msgflg)
-{
-       return compat_sys_msgsnd(msqid, msgsz, msgflg, compat_ptr(msgp));
-}
-
-SYSCALL_DEFINE5(n32_msgrcv, int, msqid, u32, msgp, size_t, msgsz,
-       int, msgtyp, int, msgflg)
-{
-       return compat_sys_msgrcv(msqid, msgsz, msgtyp, msgflg, IPC_64,
-                                compat_ptr(msgp));
-}
-#endif
-
 SYSCALL_DEFINE1(32_personality, unsigned long, personality)
 {
        unsigned int p = personality & 0xffffffff;
@@ -226,26 +133,6 @@ SYSCALL_DEFINE1(32_personality, unsigned long, personality)
        return ret;
 }
 
-SYSCALL_DEFINE4(32_sendfile, long, out_fd, long, in_fd,
-       compat_off_t __user *, offset, s32, count)
-{
-       mm_segment_t old_fs = get_fs();
-       int ret;
-       off_t of;
-
-       if (offset && get_user(of, offset))
-               return -EFAULT;
-
-       set_fs(KERNEL_DS);
-       ret = sys_sendfile(out_fd, in_fd, offset ? (off_t __user *)&of : NULL, count);
-       set_fs(old_fs);
-
-       if (offset && put_user(of, offset))
-               return -EFAULT;
-
-       return ret;
-}
-
 asmlinkage ssize_t sys32_readahead(int fd, u32 pad0, u64 a2, u64 a3,
                                   size_t count)
 {
@@ -279,12 +166,6 @@ asmlinkage long sys32_fallocate(int fd, int mode, unsigned offset_a2,
                             merge_64(len_a4, len_a5));
 }
 
-asmlinkage long sys32_lookup_dcookie(u32 a0, u32 a1, char __user *buf,
-       size_t len)
-{
-       return sys_lookup_dcookie(merge_64(a0, a1), buf, len);
-}
-
 SYSCALL_DEFINE6(32_fanotify_mark, int, fanotify_fd, unsigned int, flags,
                u64, a3, u64, a4, int, dfd, const char  __user *, pathname)
 {
index 693d60b..edcb659 100644 (file)
@@ -143,7 +143,7 @@ EXPORT(sysn32_call_table)
        PTR     compat_sys_setitimer
        PTR     sys_alarm
        PTR     sys_getpid
-       PTR     sys_32_sendfile
+       PTR     compat_sys_sendfile
        PTR     sys_socket                      /* 6040 */
        PTR     sys_connect
        PTR     sys_accept
@@ -168,11 +168,11 @@ EXPORT(sysn32_call_table)
        PTR     sys_newuname
        PTR     sys_semget
        PTR     sys_semop
-       PTR     sys_n32_semctl
+       PTR     compat_sys_semctl
        PTR     sys_shmdt                       /* 6065 */
        PTR     sys_msgget
-       PTR     sys_n32_msgsnd
-       PTR     sys_n32_msgrcv
+       PTR     compat_sys_msgsnd
+       PTR     compat_sys_msgrcv
        PTR     compat_sys_msgctl
        PTR     compat_sys_fcntl                /* 6070 */
        PTR     sys_flock
index af8887f..103bfe5 100644 (file)
@@ -309,7 +309,7 @@ sys_call_table:
        PTR     compat_sys_wait4
        PTR     sys_swapoff                     /* 4115 */
        PTR     compat_sys_sysinfo
-       PTR     sys_32_ipc
+       PTR     compat_sys_ipc
        PTR     sys_fsync
        PTR     sys32_sigreturn
        PTR     __sys_clone                     /* 4120 */
@@ -399,7 +399,7 @@ sys_call_table:
        PTR     sys_capget
        PTR     sys_capset                      /* 4205 */
        PTR     compat_sys_sigaltstack
-       PTR     sys_32_sendfile
+       PTR     compat_sys_sendfile
        PTR     sys_ni_syscall
        PTR     sys_ni_syscall
        PTR     sys_mips_mmap2                  /* 4210 */
@@ -439,7 +439,7 @@ sys_call_table:
        PTR     compat_sys_io_submit
        PTR     sys_io_cancel                   /* 4245 */
        PTR     sys_exit_group
-       PTR     sys32_lookup_dcookie
+       PTR     compat_sys_lookup_dcookie
        PTR     sys_epoll_create
        PTR     sys_epoll_ctl
        PTR     sys_epoll_wait                  /* 4250 */
index 7f9d9ad..9d4e2d1 100644 (file)
 #define __ARCH_WANT_SYS_VFORK
 #define __ARCH_WANT_SYS_CLONE
 
-/*
- * "Conditional" syscalls
- *
- * What we want is __attribute__((weak,alias("sys_ni_syscall"))),
- * but it doesn't work on all toolchains, so we just do it by hand
- */
-#ifndef cond_syscall
-#define cond_syscall(x) asm(".weak\t" #x "\n\t.set\t" #x ",sys_ni_syscall");
-#endif
-
 #endif /* _ASM_UNISTD_H */
index ae9a46c..74d8358 100644 (file)
@@ -170,12 +170,4 @@ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5)      \
 
 #undef STR
 
-/*
- * "Conditional" syscalls
- *
- * What we want is __attribute__((weak,alias("sys_ni_syscall"))),
- * but it doesn't work on all toolchains, so we just do it by hand
- */
-#define cond_syscall(x) asm(".weak\t" #x "\n\t.set\t" #x ",sys_ni_syscall")
-
 #endif /* _ASM_PARISC_UNISTD_H_ */
index 051c8b9..f517e08 100644 (file)
@@ -60,47 +60,6 @@ asmlinkage long sys32_unimplemented(int r26, int r25, int r24, int r23,
     return -ENOSYS;
 }
 
-/* Note: it is necessary to treat out_fd and in_fd as unsigned ints, with the
- * corresponding cast to a signed int to insure that the proper conversion
- * (sign extension) between the register representation of a signed int (msr in
- * 32-bit mode) and the register representation of a signed int (msr in 64-bit
- * mode) is performed.
- */
-asmlinkage long sys32_sendfile(u32 out_fd, u32 in_fd,
-                              compat_off_t __user *offset, compat_size_t count)
-{
-       return compat_sys_sendfile((int)out_fd, (int)in_fd, offset, count);
-}
-
-asmlinkage long sys32_sendfile64(u32 out_fd, u32 in_fd,
-                                compat_loff_t __user *offset, compat_size_t count)
-{
-       return sys_sendfile64((int)out_fd, (int)in_fd,
-                               (loff_t __user *)offset, count);
-}
-
-asmlinkage long sys32_semctl(int semid, int semnum, int cmd, union semun arg)
-{
-        union semun u;
-       
-        if (cmd == SETVAL) {
-                /* Ugh.  arg is a union of int,ptr,ptr,ptr, so is 8 bytes.
-                 * The int should be in the first 4, but our argument
-                 * frobbing has left it in the last 4.
-                 */
-                u.val = *((int *)&arg + 1);
-                return sys_semctl (semid, semnum, cmd, u);
-       }
-       return sys_semctl (semid, semnum, cmd, arg);
-}
-
-long sys32_lookup_dcookie(u32 cookie_high, u32 cookie_low, char __user *buf,
-                         size_t len)
-{
-       return sys_lookup_dcookie((u64)cookie_high << 32 | cookie_low,
-                                 buf, len);
-}
-
 asmlinkage long compat_sys_fanotify_mark(int fan_fd, int flags, u32 mask_hi,
                                         u32 mask_lo, int fd,
                                         const char __user *pathname)
index f57dc13..0c91072 100644 (file)
        ENTRY_SAME(madvise)
        ENTRY_SAME(clone_wrapper)       /* 120 */
        ENTRY_SAME(setdomainname)
-       ENTRY_DIFF(sendfile)
+       ENTRY_COMP(sendfile)
        /* struct sockaddr... */
        ENTRY_SAME(recvfrom)
        /* struct timex contains longs */
        ENTRY_COMP(recvmsg)
        ENTRY_SAME(semop)               /* 185 */
        ENTRY_SAME(semget)
-       ENTRY_DIFF(semctl)
+       ENTRY_COMP(semctl)
        ENTRY_COMP(msgsnd)
        ENTRY_COMP(msgrcv)
        ENTRY_SAME(msgget)              /* 190 */
        ENTRY_SAME(gettid)
        ENTRY_OURS(readahead)
        ENTRY_SAME(tkill)
-       ENTRY_DIFF(sendfile64)
+       ENTRY_COMP(sendfile64)
        ENTRY_COMP(futex)               /* 210 */
        ENTRY_COMP(sched_setaffinity)
        ENTRY_COMP(sched_getaffinity)
        ENTRY_SAME(alloc_hugepages)     /* 220 */
        ENTRY_SAME(free_hugepages)
        ENTRY_SAME(exit_group)
-       ENTRY_DIFF(lookup_dcookie)
+       ENTRY_COMP(lookup_dcookie)
        ENTRY_SAME(epoll_create)
        ENTRY_SAME(epoll_ctl)           /* 225 */
        ENTRY_SAME(epoll_wait)
index ea5bb04..a0259ed 100644 (file)
@@ -114,7 +114,6 @@ config PPC
        select USE_GENERIC_SMP_HELPERS if SMP
        select HAVE_OPROFILE
        select HAVE_DEBUG_KMEMLEAK
-       select HAVE_SYSCALL_WRAPPERS if PPC64
        select GENERIC_ATOMIC64 if PPC32
        select ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE
        select HAVE_PERF_EVENTS
diff --git a/arch/powerpc/include/asm/linkage.h b/arch/powerpc/include/asm/linkage.h
new file mode 100644 (file)
index 0000000..b36f650
--- /dev/null
@@ -0,0 +1,13 @@
+#ifndef _ASM_POWERPC_LINKAGE_H
+#define _ASM_POWERPC_LINKAGE_H
+
+#ifdef CONFIG_PPC64
+#define cond_syscall(x) \
+       asm ("\t.weak " #x "\n\t.set " #x ", sys_ni_syscall\n"          \
+            "\t.weak ." #x "\n\t.set ." #x ", .sys_ni_syscall\n")
+#define SYSCALL_ALIAS(alias, name)                                     \
+       asm ("\t.globl " #alias "\n\t.set " #alias ", " #name "\n"      \
+            "\t.globl ." #alias "\n\t.set ." #alias ", ." #name)
+#endif
+
+#endif /* _ASM_POWERPC_LINKAGE_H */
index ebbec52..43523fe 100644 (file)
@@ -190,7 +190,7 @@ SYSCALL_SPU(getcwd)
 SYSCALL_SPU(capget)
 SYSCALL_SPU(capset)
 COMPAT_SYS(sigaltstack)
-SYSX_SPU(sys_sendfile,compat_sys_sendfile_wrapper,sys_sendfile)
+COMPAT_SYS_SPU(sendfile)
 SYSCALL(ni_syscall)
 SYSCALL(ni_syscall)
 PPC_SYS(vfork)
@@ -230,7 +230,7 @@ COMPAT_SYS_SPU(sched_setaffinity)
 COMPAT_SYS_SPU(sched_getaffinity)
 SYSCALL(ni_syscall)
 SYSCALL(ni_syscall)
-SYSX(sys_ni_syscall,compat_sys_sendfile64_wrapper,sys_sendfile64)
+SYS32ONLY(sendfile64)
 COMPAT_SYS_SPU(io_setup)
 SYSCALL_SPU(io_destroy)
 COMPAT_SYS_SPU(io_getevents)
@@ -239,7 +239,7 @@ SYSCALL_SPU(io_cancel)
 SYSCALL(set_tid_address)
 SYSX_SPU(sys_fadvise64,ppc32_fadvise64,sys_fadvise64)
 SYSCALL(exit_group)
-SYSX(sys_lookup_dcookie,ppc32_lookup_dcookie,sys_lookup_dcookie)
+COMPAT_SYS(lookup_dcookie)
 SYSCALL_SPU(epoll_create)
 SYSCALL_SPU(epoll_ctl)
 SYSCALL_SPU(epoll_wait)
@@ -273,8 +273,8 @@ COMPAT_SYS(mq_timedreceive)
 COMPAT_SYS(mq_notify)
 COMPAT_SYS(mq_getsetattr)
 COMPAT_SYS(kexec_load)
-COMPAT_SYS(add_key)
-COMPAT_SYS(request_key)
+SYSCALL(add_key)
+SYSCALL(request_key)
 COMPAT_SYS(keyctl)
 COMPAT_SYS(waitid)
 SYSCALL(ioprio_set)
index 1487f0f..3ca819f 100644 (file)
 #define __ARCH_WANT_SYS_VFORK
 #define __ARCH_WANT_SYS_CLONE
 
-/*
- * "Conditional" syscalls
- */
-#define cond_syscall(x) \
-       asmlinkage long x (void) __attribute__((weak,alias("sys_ni_syscall")))
-
 #endif         /* __ASSEMBLY__ */
 #endif /* _ASM_POWERPC_UNISTD_H_ */
diff --git a/arch/powerpc/include/uapi/asm/linkage.h b/arch/powerpc/include/uapi/asm/linkage.h
deleted file mode 100644 (file)
index e1c4ac1..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-#ifndef _ASM_POWERPC_LINKAGE_H
-#define _ASM_POWERPC_LINKAGE_H
-
-/* Nothing to see here... */
-
-#endif /* _ASM_POWERPC_LINKAGE_H */
index d0bafc0..cd6e19d 100644 (file)
@@ -61,91 +61,6 @@ asmlinkage long ppc32_select(u32 n, compat_ulong_t __user *inp,
        return compat_sys_select((int)n, inp, outp, exp, compat_ptr(tvp_x));
 }
 
-#ifdef CONFIG_SYSVIPC
-long compat_sys_ipc(u32 call, u32 first, u32 second, u32 third, compat_uptr_t ptr,
-              u32 fifth)
-{
-       int version;
-
-       version = call >> 16; /* hack for backward compatibility */
-       call &= 0xffff;
-
-       switch (call) {
-
-       case SEMTIMEDOP:
-               if (fifth)
-                       /* sign extend semid */
-                       return compat_sys_semtimedop((int)first,
-                                                    compat_ptr(ptr), second,
-                                                    compat_ptr(fifth));
-               /* else fall through for normal semop() */
-       case SEMOP:
-               /* struct sembuf is the same on 32 and 64bit :)) */
-               /* sign extend semid */
-               return sys_semtimedop((int)first, compat_ptr(ptr), second,
-                                     NULL);
-       case SEMGET:
-               /* sign extend key, nsems */
-               return sys_semget((int)first, (int)second, third);
-       case SEMCTL:
-               /* sign extend semid, semnum */
-               return compat_sys_semctl((int)first, (int)second, third,
-                                        compat_ptr(ptr));
-
-       case MSGSND:
-               /* sign extend msqid */
-               return compat_sys_msgsnd((int)first, (int)second, third,
-                                        compat_ptr(ptr));
-       case MSGRCV:
-               /* sign extend msqid, msgtyp */
-               return compat_sys_msgrcv((int)first, second, (int)fifth,
-                                        third, version, compat_ptr(ptr));
-       case MSGGET:
-               /* sign extend key */
-               return sys_msgget((int)first, second);
-       case MSGCTL:
-               /* sign extend msqid */
-               return compat_sys_msgctl((int)first, second, compat_ptr(ptr));
-
-       case SHMAT:
-               /* sign extend shmid */
-               return compat_sys_shmat((int)first, second, third, version,
-                                       compat_ptr(ptr));
-       case SHMDT:
-               return sys_shmdt(compat_ptr(ptr));
-       case SHMGET:
-               /* sign extend key_t */
-               return sys_shmget((int)first, second, third);
-       case SHMCTL:
-               /* sign extend shmid */
-               return compat_sys_shmctl((int)first, second, compat_ptr(ptr));
-
-       default:
-               return -ENOSYS;
-       }
-
-       return -ENOSYS;
-}
-#endif
-
-/* Note: it is necessary to treat out_fd and in_fd as unsigned ints, 
- * with the corresponding cast to a signed int to insure that the 
- * proper conversion (sign extension) between the register representation of a signed int (msr in 32-bit mode)
- * and the register representation of a signed int (msr in 64-bit mode) is performed.
- */
-asmlinkage long compat_sys_sendfile_wrapper(u32 out_fd, u32 in_fd,
-                                           compat_off_t __user *offset, u32 count)
-{
-       return compat_sys_sendfile((int)out_fd, (int)in_fd, offset, count);
-}
-
-asmlinkage long compat_sys_sendfile64_wrapper(u32 out_fd, u32 in_fd,
-                                             compat_loff_t __user *offset, u32 count)
-{
-       return sys_sendfile((int)out_fd, (int)in_fd,
-                           (off_t __user *)offset, count);
-}
-
 unsigned long compat_sys_mmap2(unsigned long addr, size_t len,
                          unsigned long prot, unsigned long flags,
                          unsigned long fd, unsigned long pgoff)
@@ -195,13 +110,6 @@ asmlinkage int compat_sys_ftruncate64(unsigned int fd, u32 reg4, unsigned long h
        return sys_ftruncate(fd, (high << 32) | low);
 }
 
-long ppc32_lookup_dcookie(u32 cookie_high, u32 cookie_low, char __user *buf,
-                         size_t len)
-{
-       return sys_lookup_dcookie((u64)cookie_high << 32 | cookie_low,
-                                 buf, len);
-}
-
 long ppc32_fadvise64(int fd, u32 unused, u32 offset_high, u32 offset_low,
                     size_t len, int advice)
 {
@@ -209,23 +117,6 @@ long ppc32_fadvise64(int fd, u32 unused, u32 offset_high, u32 offset_low,
                             advice);
 }
 
-asmlinkage long compat_sys_add_key(const char __user *_type,
-                             const char __user *_description,
-                             const void __user *_payload,
-                             u32 plen,
-                             u32 ringid)
-{
-       return sys_add_key(_type, _description, _payload, plen, ringid);
-}
-
-asmlinkage long compat_sys_request_key(const char __user *_type,
-                                 const char __user *_description,
-                                 const char __user *_callout_info,
-                                 u32 destringid)
-{
-       return sys_request_key(_type, _description, _callout_info, destringid);
-}
-
 asmlinkage long compat_sys_sync_file_range2(int fd, unsigned int flags,
                                   unsigned offset_hi, unsigned offset_lo,
                                   unsigned nbytes_hi, unsigned nbytes_lo)
index ce640af..2c9789d 100644 (file)
@@ -132,7 +132,6 @@ config S390
        select HAVE_PERF_EVENTS
        select HAVE_REGS_AND_STACK_ACCESS_API
        select HAVE_SYSCALL_TRACEPOINTS
-       select HAVE_SYSCALL_WRAPPERS
        select HAVE_UID16 if 32BIT
        select HAVE_VIRT_CPU_ACCOUNTING
        select VIRT_TO_BUS
index a6667a9..6518863 100644 (file)
 #define __ARCH_WANT_SYS_VFORK
 #define __ARCH_WANT_SYS_CLONE
 
-/*
- * "Conditional" syscalls
- *
- * What we want is __attribute__((weak,alias("sys_ni_syscall"))),
- * but it doesn't work on all toolchains, so we just do it by hand
- */
-#define cond_syscall(x) asm(".weak\t" #x "\n\t.set\t" #x ",sys_ni_syscall")
-
 #endif /* _ASM_S390_UNISTD_H_ */
index 19f26de..8b6e4f5 100644 (file)
@@ -288,51 +288,13 @@ asmlinkage long sys32_getegid16(void)
        return high2lowgid(from_kgid_munged(current_user_ns(), current_egid()));
 }
 
-/*
- * sys32_ipc() is the de-multiplexer for the SysV IPC calls in 32bit emulation.
- *
- * This is really horribly ugly.
- */
 #ifdef CONFIG_SYSVIPC
-asmlinkage long sys32_ipc(u32 call, int first, int second, int third, u32 ptr)
+COMPAT_SYSCALL_DEFINE5(s390_ipc, uint, call, int, first, unsigned long, second,
+               unsigned long, third, compat_uptr_t, ptr)
 {
        if (call >> 16)         /* hack for backward compatibility */
                return -EINVAL;
-       switch (call) {
-       case SEMTIMEDOP:
-               return compat_sys_semtimedop(first, compat_ptr(ptr),
-                                            second, compat_ptr(third));
-       case SEMOP:
-               /* struct sembuf is the same on 32 and 64bit :)) */
-               return sys_semtimedop(first, compat_ptr(ptr),
-                                     second, NULL);
-       case SEMGET:
-               return sys_semget(first, second, third);
-       case SEMCTL:
-               return compat_sys_semctl(first, second, third,
-                                        compat_ptr(ptr));
-       case MSGSND:
-               return compat_sys_msgsnd(first, second, third,
-                                        compat_ptr(ptr));
-       case MSGRCV:
-               return compat_sys_msgrcv(first, second, 0, third,
-                                        0, compat_ptr(ptr));
-       case MSGGET:
-               return sys_msgget((key_t) first, second);
-       case MSGCTL:
-               return compat_sys_msgctl(first, second, compat_ptr(ptr));
-       case SHMAT:
-               return compat_sys_shmat(first, second, third,
-                                       0, compat_ptr(ptr));
-       case SHMDT:
-               return sys_shmdt(compat_ptr(ptr));
-       case SHMGET:
-               return sys_shmget(first, (unsigned)second, third);
-       case SHMCTL:
-               return compat_sys_shmctl(first, second, compat_ptr(ptr));
-       }
-
-       return -ENOSYS;
+       return compat_sys_ipc(call, first, second, third, ptr, third);
 }
 #endif
 
@@ -373,48 +335,6 @@ asmlinkage compat_ssize_t sys32_readahead(int fd, u32 offhi, u32 offlo, s32 coun
        return sys_readahead(fd, ((loff_t)AA(offhi) << 32) | AA(offlo), count);
 }
 
-asmlinkage long sys32_sendfile(int out_fd, int in_fd, compat_off_t __user *offset, size_t count)
-{
-       mm_segment_t old_fs = get_fs();
-       int ret;
-       off_t of;
-       
-       if (offset && get_user(of, offset))
-               return -EFAULT;
-               
-       set_fs(KERNEL_DS);
-       ret = sys_sendfile(out_fd, in_fd,
-                          offset ? (off_t __force __user *) &of : NULL, count);
-       set_fs(old_fs);
-       
-       if (offset && put_user(of, offset))
-               return -EFAULT;
-               
-       return ret;
-}
-
-asmlinkage long sys32_sendfile64(int out_fd, int in_fd,
-                               compat_loff_t __user *offset, s32 count)
-{
-       mm_segment_t old_fs = get_fs();
-       int ret;
-       loff_t lof;
-       
-       if (offset && get_user(lof, offset))
-               return -EFAULT;
-               
-       set_fs(KERNEL_DS);
-       ret = sys_sendfile64(out_fd, in_fd,
-                            offset ? (loff_t __force __user *) &lof : NULL,
-                            count);
-       set_fs(old_fs);
-       
-       if (offset && put_user(lof, offset))
-               return -EFAULT;
-               
-       return ret;
-}
-
 struct stat64_emu31 {
        unsigned long long  st_dev;
        unsigned int    __pad1;
index 00d92a5..976518c 100644 (file)
@@ -94,7 +94,6 @@ long sys32_getuid16(void);
 long sys32_geteuid16(void);
 long sys32_getgid16(void);
 long sys32_getegid16(void);
-long sys32_ipc(u32 call, int first, int second, int third, u32 ptr);
 long sys32_truncate64(const char __user * path, unsigned long high,
                      unsigned long low);
 long sys32_ftruncate64(unsigned int fd, unsigned long high, unsigned long low);
@@ -106,10 +105,6 @@ long sys32_pread64(unsigned int fd, char __user *ubuf, size_t count,
 long sys32_pwrite64(unsigned int fd, const char __user *ubuf,
                    size_t count, u32 poshi, u32 poslo);
 compat_ssize_t sys32_readahead(int fd, u32 offhi, u32 offlo, s32 count);
-long sys32_sendfile(int out_fd, int in_fd, compat_off_t __user *offset,
-                   size_t count);
-long sys32_sendfile64(int out_fd, int in_fd, compat_loff_t __user *offset,
-                     s32 count);
 long sys32_stat64(const char __user * filename, struct stat64_emu31 __user * statbuf);
 long sys32_lstat64(const char __user * filename,
                   struct stat64_emu31 __user * statbuf);
index 3c98c4d..17644c8 100644 (file)
@@ -258,11 +258,6 @@ ENTRY(sys32_mmap2_wrapper)
        llgtr   %r2,%r2                 # struct mmap_arg_struct_emu31 *
        jg      sys32_mmap2                     # branch to system call
 
-ENTRY(compat_sys_getrusage_wrapper)
-       lgfr    %r2,%r2                 # int
-       llgtr   %r3,%r3                 # struct rusage_emu31 *
-       jg      compat_sys_getrusage    # branch to system call
-
 ENTRY(compat_sys_gettimeofday_wrapper)
        llgtr   %r2,%r2                 # struct timeval_emu31 *
        llgtr   %r3,%r3                 # struct timezone *
@@ -393,14 +388,6 @@ ENTRY(compat_sys_sysinfo_wrapper)
        llgtr   %r2,%r2                 # struct sysinfo_emu31 *
        jg      compat_sys_sysinfo      # branch to system call
 
-ENTRY(sys32_ipc_wrapper)
-       llgfr   %r2,%r2                 # uint
-       lgfr    %r3,%r3                 # int
-       lgfr    %r4,%r4                 # int
-       lgfr    %r5,%r5                 # int
-       llgfr   %r6,%r6                 # u32
-       jg      sys32_ipc               # branch to system call
-
 ENTRY(sys32_fsync_wrapper)
        llgfr   %r2,%r2                 # unsigned int
        jg      sys_fsync               # branch to system call
@@ -666,13 +653,6 @@ ENTRY(sys32_capset_wrapper)
        llgtr   %r3,%r3                 # const cap_user_data_t
        jg      sys_capset              # branch to system call
 
-ENTRY(sys32_sendfile_wrapper)
-       lgfr    %r2,%r2                 # int
-       lgfr    %r3,%r3                 # int
-       llgtr   %r4,%r4                 # __kernel_off_emu31_t *
-       llgfr   %r5,%r5                 # size_t
-       jg      sys32_sendfile          # branch to system call
-
 #sys32_vfork_wrapper                   # done in vfork_glue
 
 ENTRY(sys32_truncate64_wrapper)
@@ -938,13 +918,6 @@ ENTRY(sys_epoll_wait_wrapper)
        lgfr    %r5,%r5                 # int
        jg      sys_epoll_wait          # branch to system call
 
-ENTRY(sys32_lookup_dcookie_wrapper)
-       sllg    %r2,%r2,32              # get high word of 64bit dcookie
-       or      %r2,%r3                 # get low word of 64bit dcookie
-       llgtr   %r3,%r4                 # char *
-       llgfr   %r4,%r5                 # size_t
-       jg      sys_lookup_dcookie
-
 ENTRY(sys32_fadvise64_wrapper)
        lgfr    %r2,%r2                 # int
        sllg    %r3,%r3,32              # get high word of 64bit loff_t
@@ -1264,29 +1237,12 @@ ENTRY(sys_tee_wrapper)
        llgfr   %r5,%r5                 # unsigned int
        jg      sys_tee
 
-ENTRY(compat_sys_vmsplice_wrapper)
-       lgfr    %r2,%r2                 # int
-       llgtr   %r3,%r3                 # compat_iovec *
-       llgfr   %r4,%r4                 # unsigned int
-       llgfr   %r5,%r5                 # unsigned int
-       jg      compat_sys_vmsplice
-
 ENTRY(sys_getcpu_wrapper)
        llgtr   %r2,%r2                 # unsigned *
        llgtr   %r3,%r3                 # unsigned *
        llgtr   %r4,%r4                 # struct getcpu_cache *
        jg      sys_getcpu
 
-ENTRY(compat_sys_epoll_pwait_wrapper)
-       lgfr    %r2,%r2                 # int
-       llgtr   %r3,%r3                 # struct compat_epoll_event *
-       lgfr    %r4,%r4                 # int
-       lgfr    %r5,%r5                 # int
-       llgtr   %r6,%r6                 # compat_sigset_t *
-       llgf    %r0,164(%r15)           # compat_size_t
-       stg     %r0,160(%r15)
-       jg      compat_sys_epoll_pwait
-
 ENTRY(compat_sys_utimes_wrapper)
        llgtr   %r2,%r2                 # char *
        llgtr   %r3,%r3                 # struct compat_timeval *
@@ -1299,12 +1255,6 @@ ENTRY(compat_sys_utimensat_wrapper)
        lgfr    %r5,%r5                 # int
        jg      compat_sys_utimensat
 
-ENTRY(compat_sys_signalfd_wrapper)
-       lgfr    %r2,%r2                 # int
-       llgtr   %r3,%r3                 # compat_sigset_t *
-       llgfr   %r4,%r4                 # compat_size_t
-       jg      compat_sys_signalfd
-
 ENTRY(sys_eventfd_wrapper)
        llgfr   %r2,%r2                 # unsigned int
        jg      sys_eventfd
@@ -1323,13 +1273,6 @@ ENTRY(sys_timerfd_create_wrapper)
        lgfr    %r3,%r3                 # int
        jg      sys_timerfd_create
 
-ENTRY(compat_sys_signalfd4_wrapper)
-       lgfr    %r2,%r2                 # int
-       llgtr   %r3,%r3                 # compat_sigset_t *
-       llgfr   %r4,%r4                 # compat_size_t
-       lgfr    %r5,%r5                 # int
-       jg      compat_sys_signalfd4
-
 ENTRY(sys_eventfd2_wrapper)
        llgfr   %r2,%r2                 # unsigned int
        lgfr    %r3,%r3                 # int
@@ -1361,13 +1304,6 @@ ENTRY(sys32_readahead_wrapper)
        lgfr    %r5,%r5                 # s32
        jg      sys32_readahead         # branch to system call
 
-ENTRY(sys32_sendfile64_wrapper)
-       lgfr    %r2,%r2                 # int
-       lgfr    %r3,%r3                 # int
-       llgtr   %r4,%r4                 # compat_loff_t *
-       lgfr    %r5,%r5                 # s32
-       jg      sys32_sendfile64        # branch to system call
-
 ENTRY(sys_tkill_wrapper)
        lgfr    %r2,%r2                 # pid_t
        lgfr    %r3,%r3                 # int
index d0964d2..23eb222 100644 (file)
@@ -132,19 +132,9 @@ SYSCALL_DEFINE1(s390_fadvise64_64, struct fadvise64_64_args __user *, args)
  * to
  *   %r2: fd, %r3: mode, %r4/%r5: offset, 96(%r15)-103(%r15): len
  */
-SYSCALL_DEFINE(s390_fallocate)(int fd, int mode, loff_t offset,
-                              u32 len_high, u32 len_low)
+SYSCALL_DEFINE5(s390_fallocate, int, fd, int, mode, loff_t, offset,
+                              u32, len_high, u32, len_low)
 {
        return sys_fallocate(fd, mode, offset, ((u64)len_high << 32) | len_low);
 }
-#ifdef CONFIG_HAVE_SYSCALL_WRAPPERS
-asmlinkage long SyS_s390_fallocate(long fd, long mode, loff_t offset,
-                                  long len_high, long len_low)
-{
-       return SYSC_s390_fallocate((int) fd, (int) mode, offset,
-                                  (u32) len_high, (u32) len_low);
-}
-SYSCALL_ALIAS(sys_s390_fallocate, SyS_s390_fallocate);
-#endif
-
 #endif
index 630b935..d2baabe 100644 (file)
@@ -85,7 +85,7 @@ SYSCALL(sys_sigpending,sys_sigpending,compat_sys_sigpending_wrapper)
 SYSCALL(sys_sethostname,sys_sethostname,sys32_sethostname_wrapper)
 SYSCALL(sys_setrlimit,sys_setrlimit,compat_sys_setrlimit_wrapper)      /* 75 */
 SYSCALL(sys_old_getrlimit,sys_getrlimit,compat_sys_old_getrlimit_wrapper)
-SYSCALL(sys_getrusage,sys_getrusage,compat_sys_getrusage_wrapper)
+SYSCALL(sys_getrusage,sys_getrusage,compat_sys_getrusage)
 SYSCALL(sys_gettimeofday,sys_gettimeofday,compat_sys_gettimeofday_wrapper)
 SYSCALL(sys_settimeofday,sys_settimeofday,compat_sys_settimeofday_wrapper)
 SYSCALL(sys_getgroups16,sys_ni_syscall,sys32_getgroups16_wrapper)      /* 80 old getgroups16 syscall */
@@ -118,14 +118,14 @@ SYSCALL(sys_newstat,sys_newstat,compat_sys_newstat_wrapper)
 SYSCALL(sys_newlstat,sys_newlstat,compat_sys_newlstat_wrapper)
 SYSCALL(sys_newfstat,sys_newfstat,compat_sys_newfstat_wrapper)
 NI_SYSCALL                                                     /* old uname syscall */
-SYSCALL(sys_lookup_dcookie,sys_lookup_dcookie,sys32_lookup_dcookie_wrapper)    /* 110 */
+SYSCALL(sys_lookup_dcookie,sys_lookup_dcookie,compat_sys_lookup_dcookie)       /* 110 */
 SYSCALL(sys_vhangup,sys_vhangup,sys_vhangup)
 NI_SYSCALL                                                     /* old "idle" system call */
 NI_SYSCALL                                                     /* vm86old for i386 */
 SYSCALL(sys_wait4,sys_wait4,compat_sys_wait4)
 SYSCALL(sys_swapoff,sys_swapoff,sys32_swapoff_wrapper)         /* 115 */
 SYSCALL(sys_sysinfo,sys_sysinfo,compat_sys_sysinfo_wrapper)
-SYSCALL(sys_s390_ipc,sys_s390_ipc,sys32_ipc_wrapper)
+SYSCALL(sys_s390_ipc,sys_s390_ipc,compat_sys_s390_ipc)
 SYSCALL(sys_fsync,sys_fsync,sys32_fsync_wrapper)
 SYSCALL(sys_sigreturn,sys_sigreturn,sys32_sigreturn)
 SYSCALL(sys_clone,sys_clone,sys_clone_wrapper)                 /* 120 */
@@ -195,7 +195,7 @@ SYSCALL(sys_getcwd,sys_getcwd,sys32_getcwd_wrapper)
 SYSCALL(sys_capget,sys_capget,sys32_capget_wrapper)
 SYSCALL(sys_capset,sys_capset,sys32_capset_wrapper)            /* 185 */
 SYSCALL(sys_sigaltstack,sys_sigaltstack,compat_sys_sigaltstack)
-SYSCALL(sys_sendfile,sys_sendfile64,sys32_sendfile_wrapper)
+SYSCALL(sys_sendfile,sys_sendfile64,compat_sys_sendfile)
 NI_SYSCALL                                                     /* streams1 */
 NI_SYSCALL                                                     /* streams2 */
 SYSCALL(sys_vfork,sys_vfork,sys_vfork)                         /* 190 */
@@ -231,7 +231,7 @@ SYSCALL(sys_madvise,sys_madvise,sys32_madvise_wrapper)
 SYSCALL(sys_getdents64,sys_getdents64,sys32_getdents64_wrapper)        /* 220 */
 SYSCALL(sys_fcntl64,sys_ni_syscall,compat_sys_fcntl64_wrapper)
 SYSCALL(sys_readahead,sys_readahead,sys32_readahead_wrapper)
-SYSCALL(sys_sendfile64,sys_ni_syscall,sys32_sendfile64_wrapper)
+SYSCALL(sys_sendfile64,sys_ni_syscall,compat_sys_sendfile64)
 SYSCALL(sys_setxattr,sys_setxattr,sys32_setxattr_wrapper)
 SYSCALL(sys_lsetxattr,sys_lsetxattr,sys32_lsetxattr_wrapper)   /* 225 */
 SYSCALL(sys_fsetxattr,sys_fsetxattr,sys32_fsetxattr_wrapper)
@@ -317,20 +317,20 @@ SYSCALL(sys_get_robust_list,sys_get_robust_list,compat_sys_get_robust_list)
 SYSCALL(sys_splice,sys_splice,sys_splice_wrapper)
 SYSCALL(sys_sync_file_range,sys_sync_file_range,sys_sync_file_range_wrapper)
 SYSCALL(sys_tee,sys_tee,sys_tee_wrapper)
-SYSCALL(sys_vmsplice,sys_vmsplice,compat_sys_vmsplice_wrapper)
+SYSCALL(sys_vmsplice,sys_vmsplice,compat_sys_vmsplice)
 NI_SYSCALL                                                     /* 310 sys_move_pages */
 SYSCALL(sys_getcpu,sys_getcpu,sys_getcpu_wrapper)
-SYSCALL(sys_epoll_pwait,sys_epoll_pwait,compat_sys_epoll_pwait_wrapper)
+SYSCALL(sys_epoll_pwait,sys_epoll_pwait,compat_sys_epoll_pwait)
 SYSCALL(sys_utimes,sys_utimes,compat_sys_utimes_wrapper)
 SYSCALL(sys_s390_fallocate,sys_fallocate,sys_fallocate_wrapper)
 SYSCALL(sys_utimensat,sys_utimensat,compat_sys_utimensat_wrapper)      /* 315 */
-SYSCALL(sys_signalfd,sys_signalfd,compat_sys_signalfd_wrapper)
+SYSCALL(sys_signalfd,sys_signalfd,compat_sys_signalfd)
 NI_SYSCALL                                             /* 317 old sys_timer_fd */
 SYSCALL(sys_eventfd,sys_eventfd,sys_eventfd_wrapper)
 SYSCALL(sys_timerfd_create,sys_timerfd_create,sys_timerfd_create_wrapper)
 SYSCALL(sys_timerfd_settime,sys_timerfd_settime,compat_sys_timerfd_settime) /* 320 */
 SYSCALL(sys_timerfd_gettime,sys_timerfd_gettime,compat_sys_timerfd_gettime)
-SYSCALL(sys_signalfd4,sys_signalfd4,compat_sys_signalfd4_wrapper)
+SYSCALL(sys_signalfd4,sys_signalfd4,compat_sys_signalfd4)
 SYSCALL(sys_eventfd2,sys_eventfd2,sys_eventfd2_wrapper)
 SYSCALL(sys_inotify_init1,sys_inotify_init1,sys_inotify_init1_wrapper)
 SYSCALL(sys_pipe2,sys_pipe2,sys_pipe2_wrapper) /* 325 */
index 5e90fa2..e77816c 100644 (file)
 # define __ARCH_WANT_SYS_VFORK
 # define __ARCH_WANT_SYS_CLONE
 
-/*
- * "Conditional" syscalls
- *
- * What we want is __attribute__((weak,alias("sys_ni_syscall"))),
- * but it doesn't work on all toolchains, so we just do it by hand
- */
-# define cond_syscall(x) asm(".weak\t" #x "\n\t.set\t" #x ",sys_ni_syscall")
-
 #include <uapi/asm/unistd.h>
index e564115..f5041d7 100644 (file)
@@ -62,7 +62,6 @@ config SPARC64
        select HAVE_RCU_TABLE_FREE if SMP
        select HAVE_MEMBLOCK
        select HAVE_MEMBLOCK_NODE_MAP
-       select HAVE_SYSCALL_WRAPPERS
        select HAVE_ARCH_TRANSPARENT_HUGEPAGE
        select HAVE_DYNAMIC_FTRACE
        select HAVE_FTRACE_MCOUNT_RECORD
index 5356810..dfa53fd 100644 (file)
 #define __ARCH_WANT_COMPAT_SYS_SENDFILE
 #endif
 
-/*
- * "Conditional" syscalls
- *
- * What we want is __attribute__((weak,alias("sys_ni_syscall"))),
- * but it doesn't work on all toolchains, so we just do it by hand
- */
-#define cond_syscall(x) asm(".weak\t" #x "\n\t.set\t" #x ",sys_ni_syscall")
-
 #endif /* _SPARC_UNISTD_H */
index 240a3ce..2e680b5 100644 (file)
@@ -36,7 +36,6 @@ STUB: sra     REG1, 0, REG1; \
        jmpl    %g1 + %lo(SYSCALL), %g0; \
        sra     REG3, 0, REG3
 
-SIGN1(sys32_getrusage, compat_sys_getrusage, %o0)
 SIGN1(sys32_readahead, compat_sys_readahead, %o0)
 SIGN2(sys32_fadvise64, compat_sys_fadvise64, %o0, %o4)
 SIGN2(sys32_fadvise64_64, compat_sys_fadvise64_64, %o0, %o5)
@@ -46,12 +45,9 @@ SIGN1(sys32_io_submit, compat_sys_io_submit, %o1)
 SIGN1(sys32_mq_open, compat_sys_mq_open, %o1)
 SIGN1(sys32_select, compat_sys_select, %o0)
 SIGN3(sys32_futex, compat_sys_futex, %o1, %o2, %o5)
-SIGN2(sys32_sendfile, compat_sys_sendfile, %o0, %o1)
 SIGN1(sys32_recvfrom, compat_sys_recvfrom, %o0)
 SIGN1(sys32_recvmsg, compat_sys_recvmsg, %o0)
 SIGN1(sys32_sendmsg, compat_sys_sendmsg, %o0)
-SIGN2(sys32_sync_file_range, compat_sync_file_range, %o0, %o5)
-SIGN1(sys32_vmsplice, compat_sys_vmsplice, %o0)
 
        .globl          sys32_mmap2
 sys32_mmap2:
index f38f228..3d0ddbc 100644 (file)
 #include <asm/mmu_context.h>
 #include <asm/compat_signal.h>
 
-#ifdef CONFIG_SYSVIPC                                                        
-asmlinkage long compat_sys_ipc(u32 call, u32 first, u32 second, u32 third, compat_uptr_t ptr, u32 fifth)
-{
-       int version;
-
-       version = call >> 16; /* hack for backward compatibility */
-       call &= 0xffff;
-
-       switch (call) {
-       case SEMTIMEDOP:
-               if (fifth)
-                       /* sign extend semid */
-                       return compat_sys_semtimedop((int)first,
-                                                    compat_ptr(ptr), second,
-                                                    compat_ptr(fifth));
-               /* else fall through for normal semop() */
-       case SEMOP:
-               /* struct sembuf is the same on 32 and 64bit :)) */
-               /* sign extend semid */
-               return sys_semtimedop((int)first, compat_ptr(ptr), second,
-                                     NULL);
-       case SEMGET:
-               /* sign extend key, nsems */
-               return sys_semget((int)first, (int)second, third);
-       case SEMCTL:
-               /* sign extend semid, semnum */
-               return compat_sys_semctl((int)first, (int)second, third,
-                                        compat_ptr(ptr));
-
-       case MSGSND:
-               /* sign extend msqid */
-               return compat_sys_msgsnd((int)first, (int)second, third,
-                                        compat_ptr(ptr));
-       case MSGRCV:
-               /* sign extend msqid, msgtyp */
-               return compat_sys_msgrcv((int)first, second, (int)fifth,
-                                        third, version, compat_ptr(ptr));
-       case MSGGET:
-               /* sign extend key */
-               return sys_msgget((int)first, second);
-       case MSGCTL:
-               /* sign extend msqid */
-               return compat_sys_msgctl((int)first, second, compat_ptr(ptr));
-
-       case SHMAT:
-               /* sign extend shmid */
-               return compat_sys_shmat((int)first, second, third, version,
-                                       compat_ptr(ptr));
-       case SHMDT:
-               return sys_shmdt(compat_ptr(ptr));
-       case SHMGET:
-               /* sign extend key_t */
-               return sys_shmget((int)first, second, third);
-       case SHMCTL:
-               /* sign extend shmid */
-               return compat_sys_shmctl((int)first, second, compat_ptr(ptr));
-
-       default:
-               return -ENOSYS;
-       }
-
-       return -ENOSYS;
-}
-#endif
-
 asmlinkage long sys32_truncate64(const char __user * path, unsigned long high, unsigned long low)
 {
        if ((int)high < 0)
@@ -303,15 +238,7 @@ long compat_sys_fadvise64_64(int fd,
                                advice);
 }
 
-long sys32_lookup_dcookie(unsigned long cookie_high,
-                         unsigned long cookie_low,
-                         char __user *buf, size_t len)
-{
-       return sys_lookup_dcookie((cookie_high << 32) | cookie_low,
-                                 buf, len);
-}
-
-long compat_sync_file_range(int fd, unsigned long off_high, unsigned long off_low, unsigned long nb_high, unsigned long nb_low, int flags)
+long sys32_sync_file_range(unsigned int fd, unsigned long off_high, unsigned long off_low, unsigned long nb_high, unsigned long nb_low, unsigned int flags)
 {
        return sys_sync_file_range(fd,
                                   (off_high << 32) | off_low,
index 708bc29..2daaaa6 100644 (file)
@@ -353,7 +353,7 @@ SYSCALL_DEFINE6(sparc_ipc, unsigned int, call, int, first, unsigned long, second
                case SEMCTL: {
                        err = sys_semctl(first, second,
                                         (int)third | IPC_64,
-                                        (union semun) ptr);
+                                        (unsigned long) ptr);
                        goto out;
                }
                default:
@@ -470,10 +470,6 @@ SYSCALL_DEFINE2(64_munmap, unsigned long, addr, size_t, len)
 
        return vm_munmap(addr, len);
 }
-
-extern unsigned long do_mremap(unsigned long addr,
-       unsigned long old_len, unsigned long new_len,
-       unsigned long flags, unsigned long new_addr);
                 
 SYSCALL_DEFINE5(64_mremap, unsigned long, addr,        unsigned long, old_len,
                unsigned long, new_len, unsigned long, flags,
index 0881348..8fd9320 100644 (file)
@@ -23,9 +23,9 @@ sys_call_table32:
 /*10*/  .word sys_unlink, sunos_execv, sys_chdir, sys_chown16, sys_mknod
 /*15*/ .word sys_chmod, sys_lchown16, sys_brk, sys_nis_syscall, compat_sys_lseek
 /*20*/ .word sys_getpid, sys_capget, sys_capset, sys_setuid16, sys_getuid16
-/*25*/ .word sys32_vmsplice, compat_sys_ptrace, sys_alarm, compat_sys_sigaltstack, sys_pause
+/*25*/ .word compat_sys_vmsplice, compat_sys_ptrace, sys_alarm, compat_sys_sigaltstack, sys_pause
 /*30*/ .word compat_sys_utime, sys_lchown, sys_fchown, sys_access, sys_nice
-       .word sys_chown, sys_sync, sys_kill, compat_sys_newstat, sys32_sendfile
+       .word sys_chown, sys_sync, sys_kill, compat_sys_newstat, compat_sys_sendfile
 /*40*/ .word compat_sys_newlstat, sys_dup, sys_sparc_pipe, compat_sys_times, sys_getuid
        .word sys_umount, sys_setgid16, sys_getgid16, sys_signal, sys_geteuid16
 /*50*/ .word sys_getegid16, sys_acct, sys_nis_syscall, sys_getgid, compat_sys_ioctl
@@ -41,7 +41,7 @@ sys_call_table32:
 /*100*/ .word sys_getpriority, sys32_rt_sigreturn, compat_sys_rt_sigaction, compat_sys_rt_sigprocmask, compat_sys_rt_sigpending
        .word compat_sys_rt_sigtimedwait, compat_sys_rt_sigqueueinfo, compat_sys_rt_sigsuspend, sys_setresuid, sys_getresuid
 /*110*/        .word sys_setresgid, sys_getresgid, sys_setregid, sys_nis_syscall, sys_nis_syscall
-       .word sys_getgroups, compat_sys_gettimeofday, sys32_getrusage, sys_nis_syscall, sys_getcwd
+       .word sys_getgroups, compat_sys_gettimeofday, compat_sys_getrusage, sys_nis_syscall, sys_getcwd
 /*120*/        .word compat_sys_readv, compat_sys_writev, compat_sys_settimeofday, sys_fchown16, sys_fchmod
        .word sys_nis_syscall, sys_setreuid16, sys_setregid16, sys_rename, compat_sys_truncate
 /*130*/        .word compat_sys_ftruncate, sys_flock, compat_sys_lstat64, sys_nis_syscall, sys_nis_syscall
@@ -59,7 +59,7 @@ sys_call_table32:
 /*190*/        .word sys_init_module, sys_sparc64_personality, sys_remap_file_pages, sys_epoll_create, sys_epoll_ctl
        .word sys_epoll_wait, sys_ioprio_set, sys_getppid, compat_sys_sparc_sigaction, sys_sgetmask
 /*200*/        .word sys_ssetmask, sys_sigsuspend, compat_sys_newlstat, sys_uselib, compat_sys_old_readdir
-       .word sys32_readahead, sys32_socketcall, sys_syslog, sys32_lookup_dcookie, sys32_fadvise64
+       .word sys32_readahead, sys32_socketcall, sys_syslog, compat_sys_lookup_dcookie, sys32_fadvise64
 /*210*/        .word sys32_fadvise64_64, sys_tgkill, sys_waitpid, sys_swapoff, compat_sys_sysinfo
        .word compat_sys_ipc, sys32_sigreturn, sys_clone, sys_ioprio_get, compat_sys_adjtimex
 /*220*/        .word compat_sys_sigprocmask, sys_ni_syscall, sys_delete_module, sys_ni_syscall, sys_getpgid
index 0f712f4..0e53439 100644 (file)
@@ -16,7 +16,6 @@ config TILE
        select GENERIC_PENDING_IRQ if SMP
        select GENERIC_IRQ_SHOW
        select HAVE_DEBUG_BUGVERBOSE
-       select HAVE_SYSCALL_WRAPPERS if TILEGX
        select VIRT_TO_BUS
        select SYS_HYPERVISOR
        select ARCH_HAS_DEBUG_STRICT_USER_COPY_CHECKS
index 6ea4cdb..ed37841 100644 (file)
@@ -56,12 +56,6 @@ COMPAT_SYSCALL_DEFINE6(pwrite64, unsigned int, fd, char __user *, ubuf,
        return sys_pwrite64(fd, ubuf, count, ((loff_t)high << 32) | low);
 }
 
-COMPAT_SYSCALL_DEFINE4(lookup_dcookie, u32, low, u32, high,
-                       char __user *, buf, size_t, len)
-{
-       return sys_lookup_dcookie(((loff_t)high << 32) | low, buf, len);
-}
-
 COMPAT_SYSCALL_DEFINE6(sync_file_range2, int, fd, unsigned int, flags,
                        u32, offset_lo, u32, offset_hi,
                        u32, nbytes_lo, u32, nbytes_hi)
index 455646e..e785b42 100644 (file)
@@ -5,9 +5,6 @@
 obj-$(CONFIG_IA32_EMULATION) := ia32entry.o sys_ia32.o ia32_signal.o
 obj-$(CONFIG_IA32_EMULATION) += nosyscall.o syscall_ia32.o
 
-sysv-$(CONFIG_SYSVIPC) := ipc32.o
-obj-$(CONFIG_IA32_EMULATION) += $(sysv-y)
-
 obj-$(CONFIG_IA32_AOUT) += ia32_aout.o
 
 audit-class-$(CONFIG_AUDIT) := audit.o
diff --git a/arch/x86/ia32/ipc32.c b/arch/x86/ia32/ipc32.c
deleted file mode 100644 (file)
index 29cdcd0..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-#include <linux/kernel.h>
-#include <linux/spinlock.h>
-#include <linux/list.h>
-#include <linux/syscalls.h>
-#include <linux/time.h>
-#include <linux/sem.h>
-#include <linux/msg.h>
-#include <linux/shm.h>
-#include <linux/ipc.h>
-#include <linux/compat.h>
-#include <asm/sys_ia32.h>
-
-asmlinkage long sys32_ipc(u32 call, int first, int second, int third,
-                         compat_uptr_t ptr, u32 fifth)
-{
-       int version;
-
-       version = call >> 16; /* hack for backward compatibility */
-       call &= 0xffff;
-
-       switch (call) {
-       case SEMOP:
-               /* struct sembuf is the same on 32 and 64bit :)) */
-               return sys_semtimedop(first, compat_ptr(ptr), second, NULL);
-       case SEMTIMEDOP:
-               return compat_sys_semtimedop(first, compat_ptr(ptr), second,
-                                               compat_ptr(fifth));
-       case SEMGET:
-               return sys_semget(first, second, third);
-       case SEMCTL:
-               return compat_sys_semctl(first, second, third, compat_ptr(ptr));
-
-       case MSGSND:
-               return compat_sys_msgsnd(first, second, third, compat_ptr(ptr));
-       case MSGRCV:
-               return compat_sys_msgrcv(first, second, fifth, third,
-                                        version, compat_ptr(ptr));
-       case MSGGET:
-               return sys_msgget((key_t) first, second);
-       case MSGCTL:
-               return compat_sys_msgctl(first, second, compat_ptr(ptr));
-
-       case SHMAT:
-               return compat_sys_shmat(first, second, third, version,
-                                       compat_ptr(ptr));
-       case SHMDT:
-               return sys_shmdt(compat_ptr(ptr));
-       case SHMGET:
-               return sys_shmget(first, (unsigned)second, third);
-       case SHMCTL:
-               return compat_sys_shmctl(first, second, compat_ptr(ptr));
-       }
-       return -ENOSYS;
-}
index ad7a20c..4e4907c 100644 (file)
@@ -166,12 +166,6 @@ asmlinkage long sys32_mmap(struct mmap_arg_struct32 __user *arg)
                               a.offset>>PAGE_SHIFT);
 }
 
-asmlinkage long sys32_mprotect(unsigned long start, size_t len,
-                              unsigned long prot)
-{
-       return sys_mprotect(start, len, prot);
-}
-
 asmlinkage long sys32_waitpid(compat_pid_t pid, unsigned int __user *stat_addr,
                              int options)
 {
@@ -194,35 +188,10 @@ asmlinkage long sys32_pwrite(unsigned int fd, const char __user *ubuf,
 }
 
 
-asmlinkage long sys32_sendfile(int out_fd, int in_fd,
-                              compat_off_t __user *offset, s32 count)
-{
-       mm_segment_t old_fs = get_fs();
-       int ret;
-       off_t of;
-
-       if (offset && get_user(of, offset))
-               return -EFAULT;
-
-       set_fs(KERNEL_DS);
-       ret = sys_sendfile(out_fd, in_fd, offset ? (off_t __user *)&of : NULL,
-                          count);
-       set_fs(old_fs);
-
-       if (offset && put_user(of, offset))
-               return -EFAULT;
-       return ret;
-}
-
 /*
  * Some system calls that need sign extended arguments. This could be
  * done by a generic wrapper.
  */
-long sys32_kill(int pid, int sig)
-{
-       return sys_kill(pid, sig);
-}
-
 long sys32_fadvise64_64(int fd, __u32 offset_low, __u32 offset_high,
                        __u32 len_low, __u32 len_high, int advice)
 {
@@ -246,12 +215,6 @@ long sys32_vm86_warning(void)
        return -ENOSYS;
 }
 
-long sys32_lookup_dcookie(u32 addr_low, u32 addr_high,
-                         char __user *buf, size_t len)
-{
-       return sys_lookup_dcookie(((u64)addr_high << 32) | addr_low, buf, len);
-}
-
 asmlinkage ssize_t sys32_readahead(int fd, unsigned off_lo, unsigned off_hi,
                                   size_t count)
 {
index 8459efc..0ef202e 100644 (file)
@@ -30,23 +30,14 @@ asmlinkage long sys32_fstatat(unsigned int, const char __user *,
                              struct stat64 __user *, int);
 struct mmap_arg_struct32;
 asmlinkage long sys32_mmap(struct mmap_arg_struct32 __user *);
-asmlinkage long sys32_mprotect(unsigned long, size_t, unsigned long);
-
-asmlinkage long sys32_alarm(unsigned int);
 
 asmlinkage long sys32_waitpid(compat_pid_t, unsigned int __user *, int);
-asmlinkage long sys32_sysfs(int, u32, u32);
 
 asmlinkage long sys32_pread(unsigned int, char __user *, u32, u32, u32);
 asmlinkage long sys32_pwrite(unsigned int, const char __user *, u32, u32, u32);
 
-asmlinkage long sys32_personality(unsigned long);
-asmlinkage long sys32_sendfile(int, int, compat_off_t __user *, s32);
-
-long sys32_kill(int, int);
 long sys32_fadvise64_64(int, __u32, __u32, __u32, __u32, int);
 long sys32_vm86_warning(void);
-long sys32_lookup_dcookie(u32, u32, char __user *, size_t);
 
 asmlinkage ssize_t sys32_readahead(int, unsigned, unsigned, size_t);
 asmlinkage long sys32_sync_file_range(int, unsigned, unsigned,
@@ -59,9 +50,6 @@ asmlinkage long sys32_fallocate(int, int, unsigned,
 asmlinkage long sys32_sigreturn(void);
 asmlinkage long sys32_rt_sigreturn(void);
 
-/* ia32/ipc32.c */
-asmlinkage long sys32_ipc(u32, int, int, int, compat_uptr_t, u32);
-
 asmlinkage long sys32_fanotify_mark(int, unsigned int, u32, u32, int,
                                    const char __user *);
 
index 6cf0a9c..5f87b35 100644 (file)
@@ -27,8 +27,8 @@ asmlinkage int sys_modify_ldt(int, void __user *, unsigned long);
 long sys_rt_sigreturn(void);
 
 /* kernel/tls.c */
-asmlinkage int sys_set_thread_area(struct user_desc __user *);
-asmlinkage int sys_get_thread_area(struct user_desc __user *);
+asmlinkage long sys_set_thread_area(struct user_desc __user *);
+asmlinkage long sys_get_thread_area(struct user_desc __user *);
 
 /* X86_32 only */
 #ifdef CONFIG_X86_32
index 3d5df1c..c2a4813 100644 (file)
 # define __ARCH_WANT_SYS_VFORK
 # define __ARCH_WANT_SYS_CLONE
 
-/*
- * "Conditional" syscalls
- *
- * What we want is __attribute__((weak,alias("sys_ni_syscall"))),
- * but it doesn't work on all toolchains, so we just do it by hand
- */
-# define cond_syscall(x) asm(".weak\t" #x "\n\t.set\t" #x ",sys_ni_syscall")
-
 #endif /* _ASM_X86_UNISTD_H */
index 9d9d2f9..f7fec09 100644 (file)
@@ -3,13 +3,13 @@
 #include <linux/sched.h>
 #include <linux/user.h>
 #include <linux/regset.h>
+#include <linux/syscalls.h>
 
 #include <asm/uaccess.h>
 #include <asm/desc.h>
 #include <asm/ldt.h>
 #include <asm/processor.h>
 #include <asm/proto.h>
-#include <asm/syscalls.h>
 
 #include "tls.h"
 
@@ -89,11 +89,9 @@ int do_set_thread_area(struct task_struct *p, int idx,
        return 0;
 }
 
-asmlinkage int sys_set_thread_area(struct user_desc __user *u_info)
+SYSCALL_DEFINE1(set_thread_area, struct user_desc __user *, u_info)
 {
-       int ret = do_set_thread_area(current, -1, u_info, 1);
-       asmlinkage_protect(1, ret, u_info);
-       return ret;
+       return do_set_thread_area(current, -1, u_info, 1);
 }
 
 
@@ -139,11 +137,9 @@ int do_get_thread_area(struct task_struct *p, int idx,
        return 0;
 }
 
-asmlinkage int sys_get_thread_area(struct user_desc __user *u_info)
+SYSCALL_DEFINE1(get_thread_area, struct user_desc __user *, u_info)
 {
-       int ret = do_get_thread_area(current, -1, u_info);
-       asmlinkage_protect(1, ret, u_info);
-       return ret;
+       return do_get_thread_area(current, -1, u_info);
 }
 
 int regset_tls_active(struct task_struct *target,
index e6d55f0..d0d59bf 100644 (file)
@@ -43,7 +43,7 @@
 34     i386    nice                    sys_nice
 35     i386    ftime
 36     i386    sync                    sys_sync
-37     i386    kill                    sys_kill                        sys32_kill
+37     i386    kill                    sys_kill
 38     i386    rename                  sys_rename
 39     i386    mkdir                   sys_mkdir
 40     i386    rmdir                   sys_rmdir
 114    i386    wait4                   sys_wait4                       compat_sys_wait4
 115    i386    swapoff                 sys_swapoff
 116    i386    sysinfo                 sys_sysinfo                     compat_sys_sysinfo
-117    i386    ipc                     sys_ipc                         sys32_ipc
+117    i386    ipc                     sys_ipc                         compat_sys_ipc
 118    i386    fsync                   sys_fsync
 119    i386    sigreturn               sys_sigreturn                   stub32_sigreturn
 120    i386    clone                   sys_clone                       stub32_clone
 122    i386    uname                   sys_newuname
 123    i386    modify_ldt              sys_modify_ldt
 124    i386    adjtimex                sys_adjtimex                    compat_sys_adjtimex
-125    i386    mprotect                sys_mprotect                    sys32_mprotect
+125    i386    mprotect                sys_mprotect
 126    i386    sigprocmask             sys_sigprocmask                 compat_sys_sigprocmask
 127    i386    create_module
 128    i386    init_module             sys_init_module
 184    i386    capget                  sys_capget
 185    i386    capset                  sys_capset
 186    i386    sigaltstack             sys_sigaltstack                 compat_sys_sigaltstack
-187    i386    sendfile                sys_sendfile                    sys32_sendfile
+187    i386    sendfile                sys_sendfile                    compat_sys_sendfile
 188    i386    getpmsg
 189    i386    putpmsg
 190    i386    vfork                   sys_vfork                       stub32_vfork
 250    i386    fadvise64               sys_fadvise64                   sys32_fadvise64
 # 251 is available for reuse (was briefly sys_set_zone_reclaim)
 252    i386    exit_group              sys_exit_group
-253    i386    lookup_dcookie          sys_lookup_dcookie              sys32_lookup_dcookie
+253    i386    lookup_dcookie          sys_lookup_dcookie              compat_sys_lookup_dcookie
 254    i386    epoll_create            sys_epoll_create
 255    i386    epoll_ctl               sys_epoll_ctl
 256    i386    epoll_wait              sys_epoll_wait
index 5f5feff..80ffa5b 100644 (file)
@@ -5,6 +5,7 @@
 
 #include <linux/percpu.h>
 #include <linux/sched.h>
+#include <linux/syscalls.h>
 #include <asm/uaccess.h>
 #include <os.h>
 #include <skas.h>
@@ -274,7 +275,7 @@ clear:
        goto out;
 }
 
-int sys_set_thread_area(struct user_desc __user *user_desc)
+SYSCALL_DEFINE1(set_thread_area, struct user_desc __user *, user_desc)
 {
        struct user_desc info;
        int idx, ret;
@@ -322,7 +323,7 @@ int ptrace_set_thread_area(struct task_struct *child, int idx,
        return set_tls_entry(child, &info, idx, 0);
 }
 
-int sys_get_thread_area(struct user_desc __user *user_desc)
+SYSCALL_DEFINE1(get_thread_area, struct user_desc __user *, user_desc)
 {
        struct user_desc info;
        int idx, ret;
index c38834d..cb4c2ce 100644 (file)
@@ -4,14 +4,6 @@
 #define __ARCH_WANT_SYS_CLONE
 #include <uapi/asm/unistd.h>
 
-/*
- * "Conditional" syscalls
- *
- * What we want is __attribute__((weak,alias("sys_ni_syscall"))),
- * but it doesn't work on all toolchains, so we just do it by hand
- */
-#define cond_syscall(x) asm(".weak\t" #x "\n\t.set\t" #x ",sys_ni_syscall");
-
 #define __ARCH_WANT_STAT64
 #define __ARCH_WANT_SYS_UTIME
 #define __ARCH_WANT_SYS_LLSEEK
index 1dc8786..6db8745 100644 (file)
--- a/fs/aio.c
+++ b/fs/aio.c
@@ -1790,7 +1790,5 @@ SYSCALL_DEFINE5(io_getevents, aio_context_t, ctx_id,
                        ret = read_events(ioctx, min_nr, nr, events, timeout);
                put_ioctx(ioctx);
        }
-
-       asmlinkage_protect(5, ret, ctx_id, min_nr, nr, events, timeout);
        return ret;
 }
index d487985..5f83ffa 100644 (file)
@@ -44,7 +44,6 @@
 #include <linux/signal.h>
 #include <linux/poll.h>
 #include <linux/mm.h>
-#include <linux/eventpoll.h>
 #include <linux/fs_struct.h>
 #include <linux/slab.h>
 #include <linux/pagemap.h>
@@ -1253,26 +1252,6 @@ compat_sys_pwritev(unsigned long fd, const struct compat_iovec __user *vec,
        return compat_sys_pwritev64(fd, vec, vlen, pos);
 }
 
-asmlinkage long
-compat_sys_vmsplice(int fd, const struct compat_iovec __user *iov32,
-                   unsigned int nr_segs, unsigned int flags)
-{
-       unsigned i;
-       struct iovec __user *iov;
-       if (nr_segs > UIO_MAXIOV)
-               return -EINVAL;
-       iov = compat_alloc_user_space(nr_segs * sizeof(struct iovec));
-       for (i = 0; i < nr_segs; i++) {
-               struct compat_iovec v;
-               if (get_user(v.iov_base, &iov32[i].iov_base) ||
-                   get_user(v.iov_len, &iov32[i].iov_len) ||
-                   put_user(compat_ptr(v.iov_base), &iov[i].iov_base) ||
-                   put_user(v.iov_len, &iov[i].iov_len))
-                       return -EFAULT;
-       }
-       return sys_vmsplice(fd, iov, nr_segs, flags);
-}
-
 /*
  * Exactly like fs/open.c:sys_open(), except that it doesn't set the
  * O_LARGEFILE flag.
@@ -1658,84 +1637,6 @@ asmlinkage long compat_sys_ppoll(struct pollfd __user *ufds,
        return ret;
 }
 
-#ifdef CONFIG_EPOLL
-
-asmlinkage long compat_sys_epoll_pwait(int epfd,
-                       struct compat_epoll_event __user *events,
-                       int maxevents, int timeout,
-                       const compat_sigset_t __user *sigmask,
-                       compat_size_t sigsetsize)
-{
-       long err;
-       compat_sigset_t csigmask;
-       sigset_t ksigmask, sigsaved;
-
-       /*
-        * If the caller wants a certain signal mask to be set during the wait,
-        * we apply it here.
-        */
-       if (sigmask) {
-               if (sigsetsize != sizeof(compat_sigset_t))
-                       return -EINVAL;
-               if (copy_from_user(&csigmask, sigmask, sizeof(csigmask)))
-                       return -EFAULT;
-               sigset_from_compat(&ksigmask, &csigmask);
-               sigdelsetmask(&ksigmask, sigmask(SIGKILL) | sigmask(SIGSTOP));
-               sigprocmask(SIG_SETMASK, &ksigmask, &sigsaved);
-       }
-
-       err = sys_epoll_wait(epfd, events, maxevents, timeout);
-
-       /*
-        * If we changed the signal mask, we need to restore the original one.
-        * In case we've got a signal while waiting, we do not restore the
-        * signal mask yet, and we allow do_signal() to deliver the signal on
-        * the way back to userspace, before the signal mask is restored.
-        */
-       if (sigmask) {
-               if (err == -EINTR) {
-                       memcpy(&current->saved_sigmask, &sigsaved,
-                              sizeof(sigsaved));
-                       set_restore_sigmask();
-               } else
-                       sigprocmask(SIG_SETMASK, &sigsaved, NULL);
-       }
-
-       return err;
-}
-
-#endif /* CONFIG_EPOLL */
-
-#ifdef CONFIG_SIGNALFD
-
-asmlinkage long compat_sys_signalfd4(int ufd,
-                                    const compat_sigset_t __user *sigmask,
-                                    compat_size_t sigsetsize, int flags)
-{
-       compat_sigset_t ss32;
-       sigset_t tmp;
-       sigset_t __user *ksigmask;
-
-       if (sigsetsize != sizeof(compat_sigset_t))
-               return -EINVAL;
-       if (copy_from_user(&ss32, sigmask, sizeof(ss32)))
-               return -EFAULT;
-       sigset_from_compat(&tmp, &ss32);
-       ksigmask = compat_alloc_user_space(sizeof(sigset_t));
-       if (copy_to_user(ksigmask, &tmp, sizeof(sigset_t)))
-               return -EFAULT;
-
-       return sys_signalfd4(ufd, ksigmask, sizeof(sigset_t), flags);
-}
-
-asmlinkage long compat_sys_signalfd(int ufd,
-                                   const compat_sigset_t __user *sigmask,
-                                   compat_size_t sigsetsize)
-{
-       return compat_sys_signalfd4(ufd, sigmask, sigsetsize, 0);
-}
-#endif /* CONFIG_SIGNALFD */
-
 #ifdef CONFIG_FHANDLE
 /*
  * Exactly like fs/open.c:sys_open_by_handle_at(), except that it
@@ -1747,25 +1648,3 @@ COMPAT_SYSCALL_DEFINE3(open_by_handle_at, int, mountdirfd,
        return do_handle_open(mountdirfd, handle, flags);
 }
 #endif
-
-#ifdef __ARCH_WANT_COMPAT_SYS_SENDFILE
-asmlinkage long compat_sys_sendfile(int out_fd, int in_fd,
-                                   compat_off_t __user *offset, compat_size_t count)
-{
-       loff_t pos;
-       off_t off;
-       ssize_t ret;
-
-       if (offset) {
-               if (unlikely(get_user(off, offset)))
-                       return -EFAULT;
-               pos = off;
-               ret = do_sendfile(out_fd, in_fd, &pos, count, MAX_NON_LFS);
-               if (unlikely(put_user(pos, offset)))
-                       return -EFAULT;
-               return ret;
-       }
-
-       return do_sendfile(out_fd, in_fd, NULL, count, 0);
-}
-#endif /* __ARCH_WANT_COMPAT_SYS_SENDFILE */
index 17c7799..ab5954b 100644 (file)
@@ -25,6 +25,7 @@
 #include <linux/dcookies.h>
 #include <linux/mutex.h>
 #include <linux/path.h>
+#include <linux/compat.h>
 #include <asm/uaccess.h>
 
 /* The dcookies are allocated from a kmem_cache and
@@ -145,7 +146,7 @@ out:
 /* And here is where the userspace process can look up the cookie value
  * to retrieve the path.
  */
-SYSCALL_DEFINE(lookup_dcookie)(u64 cookie64, char __user * buf, size_t len)
+SYSCALL_DEFINE3(lookup_dcookie, u64, cookie64, char __user *, buf, size_t, len)
 {
        unsigned long cookie = (unsigned long)cookie64;
        int err = -EINVAL;
@@ -201,12 +202,16 @@ out:
        mutex_unlock(&dcookie_mutex);
        return err;
 }
-#ifdef CONFIG_HAVE_SYSCALL_WRAPPERS
-asmlinkage long SyS_lookup_dcookie(u64 cookie64, long buf, long len)
+
+#ifdef CONFIG_COMPAT
+COMPAT_SYSCALL_DEFINE4(lookup_dcookie, u32, w0, u32, w1, char __user *, buf, size_t, len)
 {
-       return SYSC_lookup_dcookie(cookie64, (char __user *) buf, (size_t) len);
+#ifdef __BIG_ENDIAN
+       return sys_lookup_dcookie(((u64)w0 << 32) | w1, buf, len);
+#else
+       return sys_lookup_dcookie(((u64)w1 << 32) | w0, buf, len);
+#endif
 }
-SYSCALL_ALIAS(sys_lookup_dcookie, SyS_lookup_dcookie);
 #endif
 
 static int dcookie_init(void)
index 277cc38..deecc72 100644 (file)
@@ -40,6 +40,7 @@
 #include <linux/atomic.h>
 #include <linux/proc_fs.h>
 #include <linux/seq_file.h>
+#include <linux/compat.h>
 
 /*
  * LOCKING:
@@ -1998,6 +1999,52 @@ SYSCALL_DEFINE6(epoll_pwait, int, epfd, struct epoll_event __user *, events,
        return error;
 }
 
+#ifdef CONFIG_COMPAT
+COMPAT_SYSCALL_DEFINE6(epoll_pwait, int, epfd,
+                       struct epoll_event __user *, events,
+                       int, maxevents, int, timeout,
+                       const compat_sigset_t __user *, sigmask,
+                       compat_size_t, sigsetsize)
+{
+       long err;
+       compat_sigset_t csigmask;
+       sigset_t ksigmask, sigsaved;
+
+       /*
+        * If the caller wants a certain signal mask to be set during the wait,
+        * we apply it here.
+        */
+       if (sigmask) {
+               if (sigsetsize != sizeof(compat_sigset_t))
+                       return -EINVAL;
+               if (copy_from_user(&csigmask, sigmask, sizeof(csigmask)))
+                       return -EFAULT;
+               sigset_from_compat(&ksigmask, &csigmask);
+               sigdelsetmask(&ksigmask, sigmask(SIGKILL) | sigmask(SIGSTOP));
+               sigprocmask(SIG_SETMASK, &ksigmask, &sigsaved);
+       }
+
+       err = sys_epoll_wait(epfd, events, maxevents, timeout);
+
+       /*
+        * If we changed the signal mask, we need to restore the original one.
+        * In case we've got a signal while waiting, we do not restore the
+        * signal mask yet, and we allow do_signal() to deliver the signal on
+        * the way back to userspace, before the signal mask is restored.
+        */
+       if (sigmask) {
+               if (err == -EINTR) {
+                       memcpy(&current->saved_sigmask, &sigsaved,
+                              sizeof(sigsaved));
+                       set_restore_sigmask();
+               } else
+                       sigprocmask(SIG_SETMASK, &sigsaved, NULL);
+       }
+
+       return err;
+}
+#endif
+
 static int __init eventpoll_init(void)
 {
        struct sysinfo si;
index 5d84442..d0be29f 100644 (file)
@@ -755,9 +755,9 @@ out_destroy_group:
        return fd;
 }
 
-SYSCALL_DEFINE(fanotify_mark)(int fanotify_fd, unsigned int flags,
-                             __u64 mask, int dfd,
-                             const char  __user * pathname)
+SYSCALL_DEFINE5(fanotify_mark, int, fanotify_fd, unsigned int, flags,
+                             __u64, mask, int, dfd,
+                             const char  __user *, pathname)
 {
        struct inode *inode = NULL;
        struct vfsmount *mnt = NULL;
@@ -857,17 +857,6 @@ fput_and_out:
        return ret;
 }
 
-#ifdef CONFIG_HAVE_SYSCALL_WRAPPERS
-asmlinkage long SyS_fanotify_mark(long fanotify_fd, long flags, __u64 mask,
-                                 long dfd, long pathname)
-{
-       return SYSC_fanotify_mark((int) fanotify_fd, (unsigned int) flags,
-                                 mask, (int) dfd,
-                                 (const char  __user *) pathname);
-}
-SYSCALL_ALIAS(sys_fanotify_mark, SyS_fanotify_mark);
-#endif
-
 /*
  * fanotify_user_setup - Our initialization function.  Note that we cannot return
  * error because we have compiled-in VFS hooks.  So an (unlikely) failure here
index 6835446..8c74100 100644 (file)
--- a/fs/open.c
+++ b/fs/open.c
@@ -197,10 +197,7 @@ out:
 
 SYSCALL_DEFINE2(ftruncate, unsigned int, fd, unsigned long, length)
 {
-       long ret = do_sys_ftruncate(fd, length, 1);
-       /* avoid REGPARM breakage on x86: */
-       asmlinkage_protect(2, ret, fd, length);
-       return ret;
+       return do_sys_ftruncate(fd, length, 1);
 }
 
 #ifdef CONFIG_COMPAT
@@ -212,32 +209,15 @@ COMPAT_SYSCALL_DEFINE2(ftruncate, unsigned int, fd, compat_ulong_t, length)
 
 /* LFS versions of truncate are only needed on 32 bit machines */
 #if BITS_PER_LONG == 32
-SYSCALL_DEFINE(truncate64)(const char __user * path, loff_t length)
+SYSCALL_DEFINE2(truncate64, const char __user *, path, loff_t, length)
 {
        return do_sys_truncate(path, length);
 }
-#ifdef CONFIG_HAVE_SYSCALL_WRAPPERS
-asmlinkage long SyS_truncate64(long path, loff_t length)
-{
-       return SYSC_truncate64((const char __user *) path, length);
-}
-SYSCALL_ALIAS(sys_truncate64, SyS_truncate64);
-#endif
 
-SYSCALL_DEFINE(ftruncate64)(unsigned int fd, loff_t length)
+SYSCALL_DEFINE2(ftruncate64, unsigned int, fd, loff_t, length)
 {
-       long ret = do_sys_ftruncate(fd, length, 0);
-       /* avoid REGPARM breakage on x86: */
-       asmlinkage_protect(2, ret, fd, length);
-       return ret;
-}
-#ifdef CONFIG_HAVE_SYSCALL_WRAPPERS
-asmlinkage long SyS_ftruncate64(long fd, loff_t length)
-{
-       return SYSC_ftruncate64((unsigned int) fd, length);
+       return do_sys_ftruncate(fd, length, 0);
 }
-SYSCALL_ALIAS(sys_ftruncate64, SyS_ftruncate64);
-#endif
 #endif /* BITS_PER_LONG == 32 */
 
 
@@ -299,7 +279,7 @@ int do_fallocate(struct file *file, int mode, loff_t offset, loff_t len)
        return ret;
 }
 
-SYSCALL_DEFINE(fallocate)(int fd, int mode, loff_t offset, loff_t len)
+SYSCALL_DEFINE4(fallocate, int, fd, int, mode, loff_t, offset, loff_t, len)
 {
        struct fd f = fdget(fd);
        int error = -EBADF;
@@ -311,14 +291,6 @@ SYSCALL_DEFINE(fallocate)(int fd, int mode, loff_t offset, loff_t len)
        return error;
 }
 
-#ifdef CONFIG_HAVE_SYSCALL_WRAPPERS
-asmlinkage long SyS_fallocate(long fd, long mode, loff_t offset, loff_t len)
-{
-       return SYSC_fallocate((int)fd, (int)mode, offset, len);
-}
-SYSCALL_ALIAS(sys_fallocate, SyS_fallocate);
-#endif
-
 /*
  * access() needs to use the real uid/gid, not the effective uid/gid.
  * We do this by temporarily clearing all FS-related capabilities and
@@ -983,29 +955,19 @@ long do_sys_open(int dfd, const char __user *filename, int flags, umode_t mode)
 
 SYSCALL_DEFINE3(open, const char __user *, filename, int, flags, umode_t, mode)
 {
-       long ret;
-
        if (force_o_largefile())
                flags |= O_LARGEFILE;
 
-       ret = do_sys_open(AT_FDCWD, filename, flags, mode);
-       /* avoid REGPARM breakage on x86: */
-       asmlinkage_protect(3, ret, filename, flags, mode);
-       return ret;
+       return do_sys_open(AT_FDCWD, filename, flags, mode);
 }
 
 SYSCALL_DEFINE4(openat, int, dfd, const char __user *, filename, int, flags,
                umode_t, mode)
 {
-       long ret;
-
        if (force_o_largefile())
                flags |= O_LARGEFILE;
 
-       ret = do_sys_open(dfd, filename, flags, mode);
-       /* avoid REGPARM breakage on x86: */
-       asmlinkage_protect(4, ret, dfd, filename, flags, mode);
-       return ret;
+       return do_sys_open(dfd, filename, flags, mode);
 }
 
 #ifndef __alpha__
index 7a64891..8274a79 100644 (file)
@@ -515,8 +515,8 @@ SYSCALL_DEFINE3(write, unsigned int, fd, const char __user *, buf,
        return ret;
 }
 
-SYSCALL_DEFINE(pread64)(unsigned int fd, char __user *buf,
-                       size_t count, loff_t pos)
+SYSCALL_DEFINE4(pread64, unsigned int, fd, char __user *, buf,
+                       size_t, count, loff_t, pos)
 {
        struct fd f;
        ssize_t ret = -EBADF;
@@ -534,17 +534,9 @@ SYSCALL_DEFINE(pread64)(unsigned int fd, char __user *buf,
 
        return ret;
 }
-#ifdef CONFIG_HAVE_SYSCALL_WRAPPERS
-asmlinkage long SyS_pread64(long fd, long buf, long count, loff_t pos)
-{
-       return SYSC_pread64((unsigned int) fd, (char __user *) buf,
-                           (size_t) count, pos);
-}
-SYSCALL_ALIAS(sys_pread64, SyS_pread64);
-#endif
 
-SYSCALL_DEFINE(pwrite64)(unsigned int fd, const char __user *buf,
-                        size_t count, loff_t pos)
+SYSCALL_DEFINE4(pwrite64, unsigned int, fd, const char __user *, buf,
+                        size_t, count, loff_t, pos)
 {
        struct fd f;
        ssize_t ret = -EBADF;
@@ -562,14 +554,6 @@ SYSCALL_DEFINE(pwrite64)(unsigned int fd, const char __user *buf,
 
        return ret;
 }
-#ifdef CONFIG_HAVE_SYSCALL_WRAPPERS
-asmlinkage long SyS_pwrite64(long fd, long buf, long count, loff_t pos)
-{
-       return SYSC_pwrite64((unsigned int) fd, (const char __user *) buf,
-                            (size_t) count, pos);
-}
-SYSCALL_ALIAS(sys_pwrite64, SyS_pwrite64);
-#endif
 
 /*
  * Reduce an iovec's length in-place.  Return the resulting number of segments
@@ -897,8 +881,8 @@ SYSCALL_DEFINE5(pwritev, unsigned long, fd, const struct iovec __user *, vec,
        return ret;
 }
 
-ssize_t do_sendfile(int out_fd, int in_fd, loff_t *ppos, size_t count,
-                   loff_t max)
+static ssize_t do_sendfile(int out_fd, int in_fd, loff_t *ppos,
+                          size_t count, loff_t max)
 {
        struct fd in, out;
        struct inode *in_inode, *out_inode;
@@ -1022,3 +1006,43 @@ SYSCALL_DEFINE4(sendfile64, int, out_fd, int, in_fd, loff_t __user *, offset, si
 
        return do_sendfile(out_fd, in_fd, NULL, count, 0);
 }
+
+#ifdef CONFIG_COMPAT
+COMPAT_SYSCALL_DEFINE4(sendfile, int, out_fd, int, in_fd,
+               compat_off_t __user *, offset, compat_size_t, count)
+{
+       loff_t pos;
+       off_t off;
+       ssize_t ret;
+
+       if (offset) {
+               if (unlikely(get_user(off, offset)))
+                       return -EFAULT;
+               pos = off;
+               ret = do_sendfile(out_fd, in_fd, &pos, count, MAX_NON_LFS);
+               if (unlikely(put_user(pos, offset)))
+                       return -EFAULT;
+               return ret;
+       }
+
+       return do_sendfile(out_fd, in_fd, NULL, count, 0);
+}
+
+COMPAT_SYSCALL_DEFINE4(sendfile64, int, out_fd, int, in_fd,
+               compat_loff_t __user *, offset, compat_size_t, count)
+{
+       loff_t pos;
+       ssize_t ret;
+
+       if (offset) {
+               if (unlikely(copy_from_user(&pos, offset, sizeof(loff_t))))
+                       return -EFAULT;
+               ret = do_sendfile(out_fd, in_fd, &pos, count, 0);
+               if (unlikely(put_user(pos, offset)))
+                       return -EFAULT;
+               return ret;
+       }
+
+       return do_sendfile(out_fd, in_fd, NULL, count, 0);
+}
+#endif
index d3e00ef..d07b954 100644 (file)
@@ -12,5 +12,3 @@ ssize_t do_sync_readv_writev(struct file *filp, const struct iovec *iov,
                unsigned long nr_segs, size_t len, loff_t *ppos, iov_fn_t fn);
 ssize_t do_loop_readv_writev(struct file *filp, struct iovec *iov,
                unsigned long nr_segs, loff_t *ppos, io_fn_t fn);
-ssize_t do_sendfile(int out_fd, int in_fd, loff_t *ppos, size_t count,
-                   loff_t max);
index b534869..424b7b6 100644 (file)
@@ -30,6 +30,7 @@
 #include <linux/signalfd.h>
 #include <linux/syscalls.h>
 #include <linux/proc_fs.h>
+#include <linux/compat.h>
 
 void signalfd_cleanup(struct sighand_struct *sighand)
 {
@@ -311,3 +312,33 @@ SYSCALL_DEFINE3(signalfd, int, ufd, sigset_t __user *, user_mask,
 {
        return sys_signalfd4(ufd, user_mask, sizemask, 0);
 }
+
+#ifdef CONFIG_COMPAT
+COMPAT_SYSCALL_DEFINE4(signalfd4, int, ufd,
+                    const compat_sigset_t __user *,sigmask,
+                    compat_size_t, sigsetsize,
+                    int, flags)
+{
+       compat_sigset_t ss32;
+       sigset_t tmp;
+       sigset_t __user *ksigmask;
+
+       if (sigsetsize != sizeof(compat_sigset_t))
+               return -EINVAL;
+       if (copy_from_user(&ss32, sigmask, sizeof(ss32)))
+               return -EFAULT;
+       sigset_from_compat(&tmp, &ss32);
+       ksigmask = compat_alloc_user_space(sizeof(sigset_t));
+       if (copy_to_user(ksigmask, &tmp, sizeof(sigset_t)))
+               return -EFAULT;
+
+       return sys_signalfd4(ufd, ksigmask, sizeof(sigset_t), flags);
+}
+
+COMPAT_SYSCALL_DEFINE3(signalfd, int, ufd,
+                    const compat_sigset_t __user *,sigmask,
+                    compat_size_t, sigsetsize)
+{
+       return compat_sys_signalfd4(ufd, sigmask, sigsetsize, 0);
+}
+#endif
index 29e394e..6b485b8 100644 (file)
@@ -31,6 +31,7 @@
 #include <linux/security.h>
 #include <linux/gfp.h>
 #include <linux/socket.h>
+#include <linux/compat.h>
 #include "internal.h"
 
 /*
@@ -1690,6 +1691,27 @@ SYSCALL_DEFINE4(vmsplice, int, fd, const struct iovec __user *, iov,
        return error;
 }
 
+#ifdef CONFIG_COMPAT
+COMPAT_SYSCALL_DEFINE4(vmsplice, int, fd, const struct compat_iovec __user *, iov32,
+                   unsigned int, nr_segs, unsigned int, flags)
+{
+       unsigned i;
+       struct iovec __user *iov;
+       if (nr_segs > UIO_MAXIOV)
+               return -EINVAL;
+       iov = compat_alloc_user_space(nr_segs * sizeof(struct iovec));
+       for (i = 0; i < nr_segs; i++) {
+               struct compat_iovec v;
+               if (get_user(v.iov_base, &iov32[i].iov_base) ||
+                   get_user(v.iov_len, &iov32[i].iov_len) ||
+                   put_user(compat_ptr(v.iov_base), &iov[i].iov_base) ||
+                   put_user(v.iov_len, &iov[i].iov_len))
+                       return -EFAULT;
+       }
+       return sys_vmsplice(fd, iov, nr_segs, flags);
+}
+#endif
+
 SYSCALL_DEFINE6(splice, int, fd_in, loff_t __user *, off_in,
                int, fd_out, loff_t __user *, off_out,
                size_t, len, unsigned int, flags)
index 2c5d663..905f3f6 100644 (file)
--- a/fs/sync.c
+++ b/fs/sync.c
@@ -283,8 +283,8 @@ EXPORT_SYMBOL(generic_write_sync);
  * already-instantiated disk blocks, there are no guarantees here that the data
  * will be available after a crash.
  */
-SYSCALL_DEFINE(sync_file_range)(int fd, loff_t offset, loff_t nbytes,
-                               unsigned int flags)
+SYSCALL_DEFINE4(sync_file_range, int, fd, loff_t, offset, loff_t, nbytes,
+                               unsigned int, flags)
 {
        int ret;
        struct fd f;
@@ -365,29 +365,11 @@ out_put:
 out:
        return ret;
 }
-#ifdef CONFIG_HAVE_SYSCALL_WRAPPERS
-asmlinkage long SyS_sync_file_range(long fd, loff_t offset, loff_t nbytes,
-                                   long flags)
-{
-       return SYSC_sync_file_range((int) fd, offset, nbytes,
-                                   (unsigned int) flags);
-}
-SYSCALL_ALIAS(sys_sync_file_range, SyS_sync_file_range);
-#endif
 
 /* It would be nice if people remember that not all the world's an i386
    when they introduce new system calls */
-SYSCALL_DEFINE(sync_file_range2)(int fd, unsigned int flags,
-                                loff_t offset, loff_t nbytes)
+SYSCALL_DEFINE4(sync_file_range2, int, fd, unsigned int, flags,
+                                loff_t, offset, loff_t, nbytes)
 {
        return sys_sync_file_range(fd, offset, nbytes, flags);
 }
-#ifdef CONFIG_HAVE_SYSCALL_WRAPPERS
-asmlinkage long SyS_sync_file_range2(long fd, long flags,
-                                    loff_t offset, loff_t nbytes)
-{
-       return SYSC_sync_file_range2((int) fd, (unsigned int) flags,
-                                    offset, nbytes);
-}
-SYSCALL_ALIAS(sys_sync_file_range2, SyS_sync_file_range2);
-#endif
index 4077b5d..0501fa3 100644 (file)
@@ -9,20 +9,3 @@
 #define __ARCH_WANT_STAT64
 #define __ARCH_WANT_SYS_LLSEEK
 #endif
-
-/*
- * "Conditional" syscalls
- *
- * What we want is __attribute__((weak,alias("sys_ni_syscall"))),
- * but it doesn't work on all toolchains, so we just do it by hand
- */
-#ifndef cond_syscall
-#ifdef CONFIG_SYMBOL_PREFIX
-#define __SYMBOL_PREFIX CONFIG_SYMBOL_PREFIX
-#else
-#define __SYMBOL_PREFIX
-#endif
-#define cond_syscall(x) asm(".weak\t" __SYMBOL_PREFIX #x "\n\t" \
-                           ".set\t" __SYMBOL_PREFIX #x "," \
-                           __SYMBOL_PREFIX "sys_ni_syscall")
-#endif
index 377cd8c..d53c353 100644 (file)
 #define __SC_DELOUSE(t,v) ((t)(unsigned long)(v))
 #endif
 
-#define __SC_CCAST1(t1, a1)      __SC_DELOUSE(t1,a1)
-#define __SC_CCAST2(t2, a2, ...) __SC_DELOUSE(t2,a2), __SC_CCAST1(__VA_ARGS__)
-#define __SC_CCAST3(t3, a3, ...) __SC_DELOUSE(t3,a3), __SC_CCAST2(__VA_ARGS__)
-#define __SC_CCAST4(t4, a4, ...) __SC_DELOUSE(t4,a4), __SC_CCAST3(__VA_ARGS__)
-#define __SC_CCAST5(t5, a5, ...) __SC_DELOUSE(t5,a5), __SC_CCAST4(__VA_ARGS__)
-#define __SC_CCAST6(t6, a6, ...) __SC_DELOUSE(t6,a6), __SC_CCAST5(__VA_ARGS__)
 #define COMPAT_SYSCALL_DEFINE1(name, ...) \
         COMPAT_SYSCALL_DEFINEx(1, _##name, __VA_ARGS__)
 #define COMPAT_SYSCALL_DEFINE2(name, ...) \
 #define COMPAT_SYSCALL_DEFINE6(name, ...) \
        COMPAT_SYSCALL_DEFINEx(6, _##name, __VA_ARGS__)
 
-#ifdef CONFIG_HAVE_SYSCALL_WRAPPERS
-
 #define COMPAT_SYSCALL_DEFINEx(x, name, ...)                           \
-       asmlinkage long compat_sys##name(__SC_DECL##x(__VA_ARGS__));    \
-       static inline long C_SYSC##name(__SC_DECL##x(__VA_ARGS__));     \
-       asmlinkage long compat_SyS##name(__SC_LONG##x(__VA_ARGS__))     \
+       asmlinkage long compat_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__));\
+       static inline long C_SYSC##name(__MAP(x,__SC_DECL,__VA_ARGS__));\
+       asmlinkage long compat_SyS##name(__MAP(x,__SC_LONG,__VA_ARGS__))\
        {                                                               \
-               return (long) C_SYSC##name(__SC_CCAST##x(__VA_ARGS__)); \
+               return C_SYSC##name(__MAP(x,__SC_DELOUSE,__VA_ARGS__)); \
        }                                                               \
        SYSCALL_ALIAS(compat_sys##name, compat_SyS##name);              \
-       static inline long C_SYSC##name(__SC_DECL##x(__VA_ARGS__))
-
-#else /* CONFIG_HAVE_SYSCALL_WRAPPERS */
-
-#define COMPAT_SYSCALL_DEFINEx(x, name, ...)                           \
-       asmlinkage long compat_sys##name(__SC_DECL##x(__VA_ARGS__))
-
-#endif /* CONFIG_HAVE_SYSCALL_WRAPPERS */
+       static inline long C_SYSC##name(__MAP(x,__SC_DECL,__VA_ARGS__))
 
 #ifndef compat_user_stack_pointer
 #define compat_user_stack_pointer() current_user_stack_pointer()
@@ -326,21 +311,13 @@ asmlinkage long
 compat_sys_get_robust_list(int pid, compat_uptr_t __user *head_ptr,
                           compat_size_t __user *len_ptr);
 
-#ifdef CONFIG_ARCH_WANT_OLD_COMPAT_IPC
-long compat_sys_semctl(int first, int second, int third, void __user *uptr);
-long compat_sys_msgsnd(int first, int second, int third, void __user *uptr);
-long compat_sys_msgrcv(int first, int second, int msgtyp, int third,
-               int version, void __user *uptr);
-long compat_sys_shmat(int first, int second, compat_uptr_t third, int version,
-               void __user *uptr);
-#else
-long compat_sys_semctl(int semid, int semnum, int cmd, int arg);
-long compat_sys_msgsnd(int msqid, struct compat_msgbuf __user *msgp,
+asmlinkage long compat_sys_ipc(u32, int, int, u32, compat_uptr_t, u32);
+asmlinkage long compat_sys_shmat(int shmid, compat_uptr_t shmaddr, int shmflg);
+asmlinkage long compat_sys_semctl(int semid, int semnum, int cmd, int arg);
+asmlinkage long compat_sys_msgsnd(int msqid, compat_uptr_t msgp,
                compat_ssize_t msgsz, int msgflg);
-long compat_sys_msgrcv(int msqid, struct compat_msgbuf __user *msgp,
+asmlinkage long compat_sys_msgrcv(int msqid, compat_uptr_t msgp,
                compat_ssize_t msgsz, long msgtyp, int msgflg);
-long compat_sys_shmat(int shmid, compat_uptr_t shmaddr, int shmflg);
-#endif
 long compat_sys_msgctl(int first, int second, void __user *uptr);
 long compat_sys_shmctl(int first, int second, void __user *uptr);
 long compat_sys_semtimedop(int semid, struct sembuf __user *tsems,
@@ -444,13 +421,13 @@ extern long compat_arch_ptrace(struct task_struct *child, compat_long_t request,
 asmlinkage long compat_sys_ptrace(compat_long_t request, compat_long_t pid,
                                  compat_long_t addr, compat_long_t data);
 
+asmlinkage long compat_sys_lookup_dcookie(u32, u32, char __user *, size_t);
 /*
  * epoll (fs/eventpoll.c) compat bits follow ...
  */
-struct epoll_event;
-#define compat_epoll_event     epoll_event
+struct epoll_event;    /* fortunately, this one is fixed-layout */
 asmlinkage long compat_sys_epoll_pwait(int epfd,
-                       struct compat_epoll_event __user *events,
+                       struct epoll_event __user *events,
                        int maxevents, int timeout,
                        const compat_sigset_t __user *sigmask,
                        compat_size_t sigsetsize);
@@ -685,6 +662,8 @@ asmlinkage ssize_t compat_sys_process_vm_writev(compat_pid_t pid,
 
 asmlinkage long compat_sys_sendfile(int out_fd, int in_fd,
                                    compat_off_t __user *offset, compat_size_t count);
+asmlinkage long compat_sys_sendfile64(int out_fd, int in_fd,
+                                   compat_loff_t __user *offset, compat_size_t count);
 asmlinkage long compat_sys_sigaltstack(const compat_stack_t __user *uss_ptr,
                                       compat_stack_t __user *uoss_ptr);
 
index 807f1e5..829d66c 100644 (file)
@@ -2,6 +2,7 @@
 #define _LINUX_LINKAGE_H
 
 #include <linux/compiler.h>
+#include <linux/stringify.h>
 #include <asm/linkage.h>
 
 #ifdef __cplusplus
 #define asmlinkage CPP_ASMLINKAGE
 #endif
 
+#ifndef SYMBOL_NAME
+#ifdef CONFIG_SYMBOL_PREFIX
+#define SYMBOL_NAME(x) CONFIG_SYMBOL_PREFIX ## x
+#else
+#define SYMBOL_NAME(x) x
+#endif
+#endif
+#define __SYMBOL_NAME(x) __stringify(SYMBOL_NAME(x))
+
+#ifndef cond_syscall
+#define cond_syscall(x) asm(".weak\t" __SYMBOL_NAME(x) \
+       "\n\t.set\t" __SYMBOL_NAME(x) "," __SYMBOL_NAME(sys_ni_syscall));
+#endif
+
+#ifndef SYSCALL_ALIAS
+#define SYSCALL_ALIAS(alias, name)                             \
+       asm ("\t.globl " __SYMBOL_NAME(alias)                   \
+       "\n\t.set\t" __SYMBOL_NAME(alias) "," __SYMBOL_NAME(name))
+#endif
+
 #define __page_aligned_data    __section(.data..page_aligned) __aligned(PAGE_SIZE)
 #define __page_aligned_bss     __section(.bss..page_aligned) __aligned(PAGE_SIZE)
 
index c05d7cf..1a7f19e 100644 (file)
@@ -1082,9 +1082,6 @@ extern unsigned long move_page_tables(struct vm_area_struct *vma,
                unsigned long old_addr, struct vm_area_struct *new_vma,
                unsigned long new_addr, unsigned long len,
                bool need_rmap_locks);
-extern unsigned long do_mremap(unsigned long addr,
-                              unsigned long old_len, unsigned long new_len,
-                              unsigned long flags, unsigned long new_addr);
 extern unsigned long change_protection(struct vm_area_struct *vma, unsigned long start,
                              unsigned long end, pgprot_t newprot,
                              int dirty_accountable, int prot_numa);
index 313a8e0..4147d70 100644 (file)
@@ -78,49 +78,34 @@ struct sigaltstack;
 #include <linux/key.h>
 #include <trace/syscall.h>
 
-#define __SC_DECL1(t1, a1)     t1 a1
-#define __SC_DECL2(t2, a2, ...) t2 a2, __SC_DECL1(__VA_ARGS__)
-#define __SC_DECL3(t3, a3, ...) t3 a3, __SC_DECL2(__VA_ARGS__)
-#define __SC_DECL4(t4, a4, ...) t4 a4, __SC_DECL3(__VA_ARGS__)
-#define __SC_DECL5(t5, a5, ...) t5 a5, __SC_DECL4(__VA_ARGS__)
-#define __SC_DECL6(t6, a6, ...) t6 a6, __SC_DECL5(__VA_ARGS__)
-
-#define __SC_LONG1(t1, a1)     long a1
-#define __SC_LONG2(t2, a2, ...) long a2, __SC_LONG1(__VA_ARGS__)
-#define __SC_LONG3(t3, a3, ...) long a3, __SC_LONG2(__VA_ARGS__)
-#define __SC_LONG4(t4, a4, ...) long a4, __SC_LONG3(__VA_ARGS__)
-#define __SC_LONG5(t5, a5, ...) long a5, __SC_LONG4(__VA_ARGS__)
-#define __SC_LONG6(t6, a6, ...) long a6, __SC_LONG5(__VA_ARGS__)
-
-#define __SC_CAST1(t1, a1)     (t1) a1
-#define __SC_CAST2(t2, a2, ...) (t2) a2, __SC_CAST1(__VA_ARGS__)
-#define __SC_CAST3(t3, a3, ...) (t3) a3, __SC_CAST2(__VA_ARGS__)
-#define __SC_CAST4(t4, a4, ...) (t4) a4, __SC_CAST3(__VA_ARGS__)
-#define __SC_CAST5(t5, a5, ...) (t5) a5, __SC_CAST4(__VA_ARGS__)
-#define __SC_CAST6(t6, a6, ...) (t6) a6, __SC_CAST5(__VA_ARGS__)
-
-#define __SC_TEST(type)                BUILD_BUG_ON(sizeof(type) > sizeof(long))
-#define __SC_TEST1(t1, a1)     __SC_TEST(t1)
-#define __SC_TEST2(t2, a2, ...)        __SC_TEST(t2); __SC_TEST1(__VA_ARGS__)
-#define __SC_TEST3(t3, a3, ...)        __SC_TEST(t3); __SC_TEST2(__VA_ARGS__)
-#define __SC_TEST4(t4, a4, ...)        __SC_TEST(t4); __SC_TEST3(__VA_ARGS__)
-#define __SC_TEST5(t5, a5, ...)        __SC_TEST(t5); __SC_TEST4(__VA_ARGS__)
-#define __SC_TEST6(t6, a6, ...)        __SC_TEST(t6); __SC_TEST5(__VA_ARGS__)
+/*
+ * __MAP - apply a macro to syscall arguments
+ * __MAP(n, m, t1, a1, t2, a2, ..., tn, an) will expand to
+ *    m(t1, a1), m(t2, a2), ..., m(tn, an)
+ * The first argument must be equal to the amount of type/name
+ * pairs given.  Note that this list of pairs (i.e. the arguments
+ * of __MAP starting at the third one) is in the same format as
+ * for SYSCALL_DEFINE<n>/COMPAT_SYSCALL_DEFINE<n>
+ */
+#define __MAP0(m,...)
+#define __MAP1(m,t,a) m(t,a)
+#define __MAP2(m,t,a,...) m(t,a), __MAP1(m,__VA_ARGS__)
+#define __MAP3(m,t,a,...) m(t,a), __MAP2(m,__VA_ARGS__)
+#define __MAP4(m,t,a,...) m(t,a), __MAP3(m,__VA_ARGS__)
+#define __MAP5(m,t,a,...) m(t,a), __MAP4(m,__VA_ARGS__)
+#define __MAP6(m,t,a,...) m(t,a), __MAP5(m,__VA_ARGS__)
+#define __MAP(n,...) __MAP##n(__VA_ARGS__)
+
+#define __SC_DECL(t, a)        t a
+#define __TYPE_IS_LL(t) (__same_type((t)0, 0LL) || __same_type((t)0, 0ULL))
+#define __SC_LONG(t, a) __typeof(__builtin_choose_expr(__TYPE_IS_LL(t), 0LL, 0L)) a
+#define __SC_CAST(t, a)        (t) a
+#define __SC_ARGS(t, a)        a
+#define __SC_TEST(t, a) (void)BUILD_BUG_ON_ZERO(!__TYPE_IS_LL(t) && sizeof(t) > sizeof(long))
 
 #ifdef CONFIG_FTRACE_SYSCALLS
-#define __SC_STR_ADECL1(t, a)          #a
-#define __SC_STR_ADECL2(t, a, ...)     #a, __SC_STR_ADECL1(__VA_ARGS__)
-#define __SC_STR_ADECL3(t, a, ...)     #a, __SC_STR_ADECL2(__VA_ARGS__)
-#define __SC_STR_ADECL4(t, a, ...)     #a, __SC_STR_ADECL3(__VA_ARGS__)
-#define __SC_STR_ADECL5(t, a, ...)     #a, __SC_STR_ADECL4(__VA_ARGS__)
-#define __SC_STR_ADECL6(t, a, ...)     #a, __SC_STR_ADECL5(__VA_ARGS__)
-
-#define __SC_STR_TDECL1(t, a)          #t
-#define __SC_STR_TDECL2(t, a, ...)     #t, __SC_STR_TDECL1(__VA_ARGS__)
-#define __SC_STR_TDECL3(t, a, ...)     #t, __SC_STR_TDECL2(__VA_ARGS__)
-#define __SC_STR_TDECL4(t, a, ...)     #t, __SC_STR_TDECL3(__VA_ARGS__)
-#define __SC_STR_TDECL5(t, a, ...)     #t, __SC_STR_TDECL4(__VA_ARGS__)
-#define __SC_STR_TDECL6(t, a, ...)     #t, __SC_STR_TDECL5(__VA_ARGS__)
+#define __SC_STR_ADECL(t, a)   #a
+#define __SC_STR_TDECL(t, a)   #t
 
 extern struct ftrace_event_class event_class_syscall_enter;
 extern struct ftrace_event_class event_class_syscall_exit;
@@ -155,7 +140,13 @@ extern struct trace_event_functions exit_syscall_print_funcs;
          __attribute__((section("_ftrace_events")))                    \
        *__event_exit_##sname = &event_exit_##sname;
 
-#define SYSCALL_METADATA(sname, nb)                            \
+#define SYSCALL_METADATA(sname, nb, ...)                       \
+       static const char *types_##sname[] = {                  \
+               __MAP(nb,__SC_STR_TDECL,__VA_ARGS__)            \
+       };                                                      \
+       static const char *args_##sname[] = {                   \
+               __MAP(nb,__SC_STR_ADECL,__VA_ARGS__)            \
+       };                                                      \
        SYSCALL_TRACE_ENTER_EVENT(sname);                       \
        SYSCALL_TRACE_EXIT_EVENT(sname);                        \
        static struct syscall_metadata __used                   \
@@ -163,8 +154,8 @@ extern struct trace_event_functions exit_syscall_print_funcs;
                .name           = "sys"#sname,                  \
                .syscall_nr     = -1,   /* Filled in at boot */ \
                .nb_args        = nb,                           \
-               .types          = types_##sname,                \
-               .args           = args_##sname,                 \
+               .types          = nb ? types_##sname : NULL,    \
+               .args           = nb ? args_##sname : NULL,     \
                .enter_event    = &event_enter_##sname,         \
                .exit_event     = &event_exit_##sname,          \
                .enter_fields   = LIST_HEAD_INIT(__syscall_meta_##sname.enter_fields), \
@@ -172,26 +163,13 @@ extern struct trace_event_functions exit_syscall_print_funcs;
        static struct syscall_metadata __used                   \
          __attribute__((section("__syscalls_metadata")))       \
         *__p_syscall_meta_##sname = &__syscall_meta_##sname;
+#else
+#define SYSCALL_METADATA(sname, nb, ...)
+#endif
 
 #define SYSCALL_DEFINE0(sname)                                 \
-       SYSCALL_TRACE_ENTER_EVENT(_##sname);                    \
-       SYSCALL_TRACE_EXIT_EVENT(_##sname);                     \
-       static struct syscall_metadata __used                   \
-         __syscall_meta__##sname = {                           \
-               .name           = "sys_"#sname,                 \
-               .syscall_nr     = -1,   /* Filled in at boot */ \
-               .nb_args        = 0,                            \
-               .enter_event    = &event_enter__##sname,        \
-               .exit_event     = &event_exit__##sname,         \
-               .enter_fields   = LIST_HEAD_INIT(__syscall_meta__##sname.enter_fields), \
-       };                                                      \
-       static struct syscall_metadata __used                   \
-         __attribute__((section("__syscalls_metadata")))       \
-        *__p_syscall_meta_##sname = &__syscall_meta__##sname;  \
+       SYSCALL_METADATA(_##sname, 0);                          \
        asmlinkage long sys_##sname(void)
-#else
-#define SYSCALL_DEFINE0(name)     asmlinkage long sys_##name(void)
-#endif
 
 #define SYSCALL_DEFINE1(name, ...) SYSCALL_DEFINEx(1, _##name, __VA_ARGS__)
 #define SYSCALL_DEFINE2(name, ...) SYSCALL_DEFINEx(2, _##name, __VA_ARGS__)
@@ -200,57 +178,23 @@ extern struct trace_event_functions exit_syscall_print_funcs;
 #define SYSCALL_DEFINE5(name, ...) SYSCALL_DEFINEx(5, _##name, __VA_ARGS__)
 #define SYSCALL_DEFINE6(name, ...) SYSCALL_DEFINEx(6, _##name, __VA_ARGS__)
 
-#ifdef CONFIG_PPC64
-#define SYSCALL_ALIAS(alias, name)                                     \
-       asm ("\t.globl " #alias "\n\t.set " #alias ", " #name "\n"      \
-            "\t.globl ." #alias "\n\t.set ." #alias ", ." #name)
-#else
-#if defined(CONFIG_ALPHA) || defined(CONFIG_MIPS)
-#define SYSCALL_ALIAS(alias, name)                                     \
-       asm ( #alias " = " #name "\n\t.globl " #alias)
-#else
-#define SYSCALL_ALIAS(alias, name)                                     \
-       asm ("\t.globl " #alias "\n\t.set " #alias ", " #name)
-#endif
-#endif
-
-#ifdef CONFIG_FTRACE_SYSCALLS
 #define SYSCALL_DEFINEx(x, sname, ...)                         \
-       static const char *types_##sname[] = {                  \
-               __SC_STR_TDECL##x(__VA_ARGS__)                  \
-       };                                                      \
-       static const char *args_##sname[] = {                   \
-               __SC_STR_ADECL##x(__VA_ARGS__)                  \
-       };                                                      \
-       SYSCALL_METADATA(sname, x);                             \
+       SYSCALL_METADATA(sname, x, __VA_ARGS__)                 \
        __SYSCALL_DEFINEx(x, sname, __VA_ARGS__)
-#else
-#define SYSCALL_DEFINEx(x, sname, ...)                         \
-       __SYSCALL_DEFINEx(x, sname, __VA_ARGS__)
-#endif
-
-#ifdef CONFIG_HAVE_SYSCALL_WRAPPERS
-
-#define SYSCALL_DEFINE(name) static inline long SYSC_##name
 
+#define __PROTECT(...) asmlinkage_protect(__VA_ARGS__)
 #define __SYSCALL_DEFINEx(x, name, ...)                                        \
-       asmlinkage long sys##name(__SC_DECL##x(__VA_ARGS__));           \
-       static inline long SYSC##name(__SC_DECL##x(__VA_ARGS__));       \
-       asmlinkage long SyS##name(__SC_LONG##x(__VA_ARGS__))            \
+       asmlinkage long sys##name(__MAP(x,__SC_DECL,__VA_ARGS__));      \
+       static inline long SYSC##name(__MAP(x,__SC_DECL,__VA_ARGS__));  \
+       asmlinkage long SyS##name(__MAP(x,__SC_LONG,__VA_ARGS__))       \
        {                                                               \
-               __SC_TEST##x(__VA_ARGS__);                              \
-               return (long) SYSC##name(__SC_CAST##x(__VA_ARGS__));    \
+               long ret = SYSC##name(__MAP(x,__SC_CAST,__VA_ARGS__));  \
+               __MAP(x,__SC_TEST,__VA_ARGS__);                         \
+               __PROTECT(x, ret,__MAP(x,__SC_ARGS,__VA_ARGS__));       \
+               return ret;                                             \
        }                                                               \
        SYSCALL_ALIAS(sys##name, SyS##name);                            \
-       static inline long SYSC##name(__SC_DECL##x(__VA_ARGS__))
-
-#else /* CONFIG_HAVE_SYSCALL_WRAPPERS */
-
-#define SYSCALL_DEFINE(name) asmlinkage long sys_##name
-#define __SYSCALL_DEFINEx(x, name, ...)                                        \
-       asmlinkage long sys##name(__SC_DECL##x(__VA_ARGS__))
-
-#endif /* CONFIG_HAVE_SYSCALL_WRAPPERS */
+       static inline long SYSC##name(__MAP(x,__SC_DECL,__VA_ARGS__))
 
 asmlinkage long sys_time(time_t __user *tloc);
 asmlinkage long sys_stime(time_t __user *tptr);
@@ -694,7 +638,7 @@ asmlinkage long sys_msgctl(int msqid, int cmd, struct msqid_ds __user *buf);
 asmlinkage long sys_semget(key_t key, int nsems, int semflg);
 asmlinkage long sys_semop(int semid, struct sembuf __user *sops,
                                unsigned nsops);
-asmlinkage long sys_semctl(int semid, int semnum, int cmd, union semun arg);
+asmlinkage long sys_semctl(int semid, int semnum, int cmd, unsigned long arg);
 asmlinkage long sys_semtimedop(int semid, struct sembuf __user *sops,
                                unsigned nsops,
                                const struct timespec __user *timeout);
index 2547f29..892f658 100644 (file)
@@ -240,7 +240,7 @@ static inline int put_compat_semid_ds(struct semid64_ds *s,
 
 static long do_compat_semctl(int first, int second, int third, u32 pad)
 {
-       union semun fourth;
+       unsigned long fourth;
        int err, err2;
        struct semid64_ds s64;
        struct semid64_ds __user *up64;
@@ -249,9 +249,13 @@ static long do_compat_semctl(int first, int second, int third, u32 pad)
        memset(&s64, 0, sizeof(s64));
 
        if ((third & (~IPC_64)) == SETVAL)
-               fourth.val = (int) pad;
+#ifdef __BIG_ENDIAN
+               fourth = (unsigned long)pad << 32;
+#else
+               fourth = pad;
+#endif
        else
-               fourth.__pad = compat_ptr(pad);
+               fourth = (unsigned long)compat_ptr(pad);
        switch (third & (~IPC_64)) {
        case IPC_INFO:
        case IPC_RMID:
@@ -269,7 +273,7 @@ static long do_compat_semctl(int first, int second, int third, u32 pad)
        case IPC_STAT:
        case SEM_STAT:
                up64 = compat_alloc_user_space(sizeof(s64));
-               fourth.__pad = up64;
+               fourth = (unsigned long)up64;
                err = sys_semctl(first, second, third, fourth);
                if (err < 0)
                        break;
@@ -295,7 +299,7 @@ static long do_compat_semctl(int first, int second, int third, u32 pad)
                if (err)
                        break;
 
-               fourth.__pad = up64;
+               fourth = (unsigned long)up64;
                err = sys_semctl(first, second, third, fourth);
                break;
 
@@ -306,7 +310,7 @@ static long do_compat_semctl(int first, int second, int third, u32 pad)
        return err;
 }
 
-long compat_do_msg_fill(void __user *dest, struct msg_msg *msg, size_t bufsz)
+static long compat_do_msg_fill(void __user *dest, struct msg_msg *msg, size_t bufsz)
 {
        struct compat_msgbuf __user *msgp = dest;
        size_t msgsz;
@@ -320,77 +324,117 @@ long compat_do_msg_fill(void __user *dest, struct msg_msg *msg, size_t bufsz)
        return msgsz;
 }
 
+#ifndef COMPAT_SHMLBA
+#define COMPAT_SHMLBA  SHMLBA
+#endif
+
 #ifdef CONFIG_ARCH_WANT_OLD_COMPAT_IPC
-long compat_sys_semctl(int first, int second, int third, void __user *uptr)
+COMPAT_SYSCALL_DEFINE6(ipc, u32, call, int, first, int, second,
+       u32, third, compat_uptr_t, ptr, u32, fifth)
 {
+       int version;
        u32 pad;
 
-       if (!uptr)
-               return -EINVAL;
-       if (get_user(pad, (u32 __user *) uptr))
-               return -EFAULT;
-       return do_compat_semctl(first, second, third, pad);
-}
+       version = call >> 16; /* hack for backward compatibility */
+       call &= 0xffff;
+
+       switch (call) {
+       case SEMOP:
+               /* struct sembuf is the same on 32 and 64bit :)) */
+               return sys_semtimedop(first, compat_ptr(ptr), second, NULL);
+       case SEMTIMEDOP:
+               return compat_sys_semtimedop(first, compat_ptr(ptr), second,
+                                               compat_ptr(fifth));
+       case SEMGET:
+               return sys_semget(first, second, third);
+       case SEMCTL:
+               if (!ptr)
+                       return -EINVAL;
+               if (get_user(pad, (u32 __user *) compat_ptr(ptr)))
+                       return -EFAULT;
+               return do_compat_semctl(first, second, third, pad);
 
-long compat_sys_msgsnd(int first, int second, int third, void __user *uptr)
-{
-       struct compat_msgbuf __user *up = uptr;
-       long type;
+       case MSGSND: {
+               struct compat_msgbuf __user *up = compat_ptr(ptr);
+               compat_long_t type;
 
-       if (first < 0)
-               return -EINVAL;
-       if (second < 0)
-               return -EINVAL;
+               if (first < 0 || second < 0)
+                       return -EINVAL;
 
-       if (get_user(type, &up->mtype))
-               return -EFAULT;
+               if (get_user(type, &up->mtype))
+                       return -EFAULT;
 
-       return do_msgsnd(first, type, up->mtext, second, third);
-}
+               return do_msgsnd(first, type, up->mtext, second, third);
+       }
+       case MSGRCV: {
+               void __user *uptr = compat_ptr(ptr);
 
-long compat_sys_msgrcv(int first, int second, int msgtyp, int third,
-                          int version, void __user *uptr)
-{
-       if (first < 0)
-               return -EINVAL;
-       if (second < 0)
-               return -EINVAL;
-
-       if (!version) {
-               struct compat_ipc_kludge ipck;
-               if (!uptr)
+               if (first < 0 || second < 0)
                        return -EINVAL;
-               if (copy_from_user (&ipck, uptr, sizeof(ipck)))
-                       return -EFAULT;
-               uptr = compat_ptr(ipck.msgp);
-               msgtyp = ipck.msgtyp;
+
+               if (!version) {
+                       struct compat_ipc_kludge ipck;
+                       if (!uptr)
+                               return -EINVAL;
+                       if (copy_from_user (&ipck, uptr, sizeof(ipck)))
+                               return -EFAULT;
+                       uptr = compat_ptr(ipck.msgp);
+                       fifth = ipck.msgtyp;
+               }
+               return do_msgrcv(first, uptr, second, fifth, third,
+                                compat_do_msg_fill);
        }
-       return do_msgrcv(first, uptr, second, msgtyp, third,
-                        compat_do_msg_fill);
+       case MSGGET:
+               return sys_msgget(first, second);
+       case MSGCTL:
+               return compat_sys_msgctl(first, second, compat_ptr(ptr));
+
+       case SHMAT: {
+               int err;
+               unsigned long raddr;
+
+               if (version == 1)
+                       return -EINVAL;
+               err = do_shmat(first, compat_ptr(ptr), second, &raddr,
+                              COMPAT_SHMLBA);
+               if (err < 0)
+                       return err;
+               return put_user(raddr, (compat_ulong_t *)compat_ptr(third));
+       }
+       case SHMDT:
+               return sys_shmdt(compat_ptr(ptr));
+       case SHMGET:
+               return sys_shmget(first, (unsigned)second, third);
+       case SHMCTL:
+               return compat_sys_shmctl(first, second, compat_ptr(ptr));
+       }
+
+       return -ENOSYS;
 }
-#else
-long compat_sys_semctl(int semid, int semnum, int cmd, int arg)
+#endif
+
+COMPAT_SYSCALL_DEFINE4(semctl, int, semid, int, semnum, int, cmd, int, arg)
 {
        return do_compat_semctl(semid, semnum, cmd, arg);
 }
 
-long compat_sys_msgsnd(int msqid, struct compat_msgbuf __user *msgp,
-                      compat_ssize_t msgsz, int msgflg)
+COMPAT_SYSCALL_DEFINE4(msgsnd, int, msqid, compat_uptr_t, msgp,
+                      compat_ssize_t, msgsz, int, msgflg)
 {
+       struct compat_msgbuf __user *up = compat_ptr(msgp);
        compat_long_t mtype;
 
-       if (get_user(mtype, &msgp->mtype))
+       if (get_user(mtype, &up->mtype))
                return -EFAULT;
-       return do_msgsnd(msqid, mtype, msgp->mtext, (ssize_t)msgsz, msgflg);
+       return do_msgsnd(msqid, mtype, up->mtext, (ssize_t)msgsz, msgflg);
 }
 
-long compat_sys_msgrcv(int msqid, struct compat_msgbuf __user *msgp,
-                      compat_ssize_t msgsz, long msgtyp, int msgflg)
+COMPAT_SYSCALL_DEFINE5(msgrcv, int, msqid, compat_uptr_t, msgp,
+                      compat_ssize_t, msgsz, long, msgtyp, int, msgflg)
 {
-       return do_msgrcv(msqid, msgp, (ssize_t)msgsz, msgtyp, msgflg,
-                        compat_do_msg_fill);
+       return do_msgrcv(msqid, compat_ptr(msgp), (ssize_t)msgsz, msgtyp,
+                        msgflg, compat_do_msg_fill);
 }
-#endif
 
 static inline int get_compat_msqid64(struct msqid64_ds *m64,
                                     struct compat_msqid64_ds __user *up64)
@@ -508,28 +552,7 @@ long compat_sys_msgctl(int first, int second, void __user *uptr)
        return err;
 }
 
-#ifndef COMPAT_SHMLBA
-#define COMPAT_SHMLBA  SHMLBA
-#endif
-
-#ifdef CONFIG_ARCH_WANT_OLD_COMPAT_IPC
-long compat_sys_shmat(int first, int second, compat_uptr_t third, int version,
-                       void __user *uptr)
-{
-       int err;
-       unsigned long raddr;
-       compat_ulong_t __user *uaddr;
-
-       if (version == 1)
-               return -EINVAL;
-       err = do_shmat(first, uptr, second, &raddr, COMPAT_SHMLBA);
-       if (err < 0)
-               return err;
-       uaddr = compat_ptr(third);
-       return put_user(raddr, uaddr);
-}
-#else
-long compat_sys_shmat(int shmid, compat_uptr_t shmaddr, int shmflg)
+COMPAT_SYSCALL_DEFINE3(shmat, int, shmid, compat_uptr_t, shmaddr, int, shmflg)
 {
        unsigned long ret;
        long err;
@@ -540,7 +563,6 @@ long compat_sys_shmat(int shmid, compat_uptr_t shmaddr, int shmflg)
        force_successful_syscall_return();
        return (long)ret;
 }
-#endif
 
 static inline int get_compat_shmid64_ds(struct shmid64_ds *s64,
                                        struct compat_shmid64_ds __user *up64)
index 58d31f1..5b167d0 100644 (file)
--- a/ipc/sem.c
+++ b/ipc/sem.c
@@ -799,7 +799,7 @@ static unsigned long copy_semid_to_user(void __user *buf, struct semid64_ds *in,
 }
 
 static int semctl_nolock(struct ipc_namespace *ns, int semid,
-                        int cmd, int version, union semun arg)
+                        int cmd, int version, void __user *p)
 {
        int err;
        struct sem_array *sma;
@@ -834,7 +834,7 @@ static int semctl_nolock(struct ipc_namespace *ns, int semid,
                }
                max_id = ipc_get_maxid(&sem_ids(ns));
                up_read(&sem_ids(ns).rw_mutex);
-               if (copy_to_user (arg.__buf, &seminfo, sizeof(struct seminfo))) 
+               if (copy_to_user(p, &seminfo, sizeof(struct seminfo))) 
                        return -EFAULT;
                return (max_id < 0) ? 0: max_id;
        }
@@ -871,7 +871,7 @@ static int semctl_nolock(struct ipc_namespace *ns, int semid,
                tbuf.sem_ctime  = sma->sem_ctime;
                tbuf.sem_nsems  = sma->sem_nsems;
                sem_unlock(sma);
-               if (copy_semid_to_user (arg.buf, &tbuf, version))
+               if (copy_semid_to_user(p, &tbuf, version))
                        return -EFAULT;
                return id;
        }
@@ -883,8 +883,67 @@ out_unlock:
        return err;
 }
 
+static int semctl_setval(struct ipc_namespace *ns, int semid, int semnum,
+               unsigned long arg)
+{
+       struct sem_undo *un;
+       struct sem_array *sma;
+       struct sem* curr;
+       int err;
+       int nsems;
+       struct list_head tasks;
+       int val;
+#if defined(CONFIG_64BIT) && defined(__BIG_ENDIAN)
+       /* big-endian 64bit */
+       val = arg >> 32;
+#else
+       /* 32bit or little-endian 64bit */
+       val = arg;
+#endif
+
+       sma = sem_lock_check(ns, semid);
+       if (IS_ERR(sma))
+               return PTR_ERR(sma);
+
+       INIT_LIST_HEAD(&tasks);
+       nsems = sma->sem_nsems;
+
+       err = -EACCES;
+       if (ipcperms(ns, &sma->sem_perm, S_IWUGO))
+               goto out_unlock;
+
+       err = security_sem_semctl(sma, SETVAL);
+       if (err)
+               goto out_unlock;
+
+       err = -EINVAL;
+       if(semnum < 0 || semnum >= nsems)
+               goto out_unlock;
+
+       curr = &sma->sem_base[semnum];
+
+       err = -ERANGE;
+       if (val > SEMVMX || val < 0)
+               goto out_unlock;
+
+       assert_spin_locked(&sma->sem_perm.lock);
+       list_for_each_entry(un, &sma->list_id, list_id)
+               un->semadj[semnum] = 0;
+
+       curr->semval = val;
+       curr->sempid = task_tgid_vnr(current);
+       sma->sem_ctime = get_seconds();
+       /* maybe some queued-up processes were waiting for this */
+       do_smart_update(sma, NULL, 0, 0, &tasks);
+       err = 0;
+out_unlock:
+       sem_unlock(sma);
+       wake_up_sem_queue_do(&tasks);
+       return err;
+}
+
 static int semctl_main(struct ipc_namespace *ns, int semid, int semnum,
-               int cmd, int version, union semun arg)
+               int cmd, void __user *p)
 {
        struct sem_array *sma;
        struct sem* curr;
@@ -903,7 +962,7 @@ static int semctl_main(struct ipc_namespace *ns, int semid, int semnum,
 
        err = -EACCES;
        if (ipcperms(ns, &sma->sem_perm,
-                       (cmd == SETVAL || cmd == SETALL) ? S_IWUGO : S_IRUGO))
+                       cmd == SETALL ? S_IWUGO : S_IRUGO))
                goto out_unlock;
 
        err = security_sem_semctl(sma, cmd);
@@ -914,7 +973,7 @@ static int semctl_main(struct ipc_namespace *ns, int semid, int semnum,
        switch (cmd) {
        case GETALL:
        {
-               ushort __user *array = arg.array;
+               ushort __user *array = p;
                int i;
 
                if(nsems > SEMMSL_FAST) {
@@ -957,7 +1016,7 @@ static int semctl_main(struct ipc_namespace *ns, int semid, int semnum,
                        }
                }
 
-               if (copy_from_user (sem_io, arg.array, nsems*sizeof(ushort))) {
+               if (copy_from_user (sem_io, p, nsems*sizeof(ushort))) {
                        sem_putref(sma);
                        err = -EFAULT;
                        goto out_free;
@@ -991,7 +1050,7 @@ static int semctl_main(struct ipc_namespace *ns, int semid, int semnum,
                err = 0;
                goto out_unlock;
        }
-       /* GETVAL, GETPID, GETNCTN, GETZCNT, SETVAL: fall-through */
+       /* GETVAL, GETPID, GETNCTN, GETZCNT: fall-through */
        }
        err = -EINVAL;
        if(semnum < 0 || semnum >= nsems)
@@ -1012,27 +1071,6 @@ static int semctl_main(struct ipc_namespace *ns, int semid, int semnum,
        case GETZCNT:
                err = count_semzcnt(sma,semnum);
                goto out_unlock;
-       case SETVAL:
-       {
-               int val = arg.val;
-               struct sem_undo *un;
-
-               err = -ERANGE;
-               if (val > SEMVMX || val < 0)
-                       goto out_unlock;
-
-               assert_spin_locked(&sma->sem_perm.lock);
-               list_for_each_entry(un, &sma->list_id, list_id)
-                       un->semadj[semnum] = 0;
-
-               curr->semval = val;
-               curr->sempid = task_tgid_vnr(current);
-               sma->sem_ctime = get_seconds();
-               /* maybe some queued-up processes were waiting for this */
-               do_smart_update(sma, NULL, 0, 0, &tasks);
-               err = 0;
-               goto out_unlock;
-       }
        }
 out_unlock:
        sem_unlock(sma);
@@ -1076,7 +1114,7 @@ copy_semid_from_user(struct semid64_ds *out, void __user *buf, int version)
  * NOTE: no locks must be held, the rw_mutex is taken inside this function.
  */
 static int semctl_down(struct ipc_namespace *ns, int semid,
-                      int cmd, int version, union semun arg)
+                      int cmd, int version, void __user *p)
 {
        struct sem_array *sma;
        int err;
@@ -1084,7 +1122,7 @@ static int semctl_down(struct ipc_namespace *ns, int semid,
        struct kern_ipc_perm *ipcp;
 
        if(cmd == IPC_SET) {
-               if (copy_semid_from_user(&semid64, arg.buf, version))
+               if (copy_semid_from_user(&semid64, p, version))
                        return -EFAULT;
        }
 
@@ -1120,11 +1158,11 @@ out_up:
        return err;
 }
 
-SYSCALL_DEFINE(semctl)(int semid, int semnum, int cmd, union semun arg)
+SYSCALL_DEFINE4(semctl, int, semid, int, semnum, int, cmd, unsigned long, arg)
 {
-       int err = -EINVAL;
        int version;
        struct ipc_namespace *ns;
+       void __user *p = (void __user *)arg;
 
        if (semid < 0)
                return -EINVAL;
@@ -1137,32 +1175,23 @@ SYSCALL_DEFINE(semctl)(int semid, int semnum, int cmd, union semun arg)
        case SEM_INFO:
        case IPC_STAT:
        case SEM_STAT:
-               err = semctl_nolock(ns, semid, cmd, version, arg);
-               return err;
+               return semctl_nolock(ns, semid, cmd, version, p);
        case GETALL:
        case GETVAL:
        case GETPID:
        case GETNCNT:
        case GETZCNT:
-       case SETVAL:
        case SETALL:
-               err = semctl_main(ns,semid,semnum,cmd,version,arg);
-               return err;
+               return semctl_main(ns, semid, semnum, cmd, p);
+       case SETVAL:
+               return semctl_setval(ns, semid, semnum, arg);
        case IPC_RMID:
        case IPC_SET:
-               err = semctl_down(ns, semid, cmd, version, arg);
-               return err;
+               return semctl_down(ns, semid, cmd, version, p);
        default:
                return -EINVAL;
        }
 }
-#ifdef CONFIG_HAVE_SYSCALL_WRAPPERS
-asmlinkage long SyS_semctl(int semid, int semnum, int cmd, union semun arg)
-{
-       return SYSC_semctl((int) semid, (int) semnum, (int) cmd, arg);
-}
-SYSCALL_ALIAS(sys_semctl, SyS_semctl);
-#endif
 
 /* If the task doesn't already have a undo_list, then allocate one
  * here.  We guarantee there is only one thread using this undo list,
index 0d1e32c..5242948 100644 (file)
@@ -33,12 +33,12 @@ SYSCALL_DEFINE6(ipc, unsigned int, call, int, first, unsigned long, second,
        case SEMGET:
                return sys_semget(first, second, third);
        case SEMCTL: {
-               union semun fourth;
+               unsigned long arg;
                if (!ptr)
                        return -EINVAL;
-               if (get_user(fourth.__pad, (void __user * __user *) ptr))
+               if (get_user(arg, (unsigned long __user *) ptr))
                        return -EFAULT;
-               return sys_semctl(first, second, third, fourth);
+               return sys_semctl(first, second, third, arg);
        }
 
        case MSGSND:
index 1e8f145..0a09e48 100644 (file)
@@ -516,25 +516,6 @@ int put_compat_rusage(const struct rusage *r, struct compat_rusage __user *ru)
        return 0;
 }
 
-asmlinkage long compat_sys_getrusage(int who, struct compat_rusage __user *ru)
-{
-       struct rusage r;
-       int ret;
-       mm_segment_t old_fs = get_fs();
-
-       set_fs(KERNEL_DS);
-       ret = sys_getrusage(who, (struct rusage __user *) &r);
-       set_fs(old_fs);
-
-       if (ret)
-               return ret;
-
-       if (put_compat_rusage(&r, ru))
-               return -EFAULT;
-
-       return 0;
-}
-
 COMPAT_SYSCALL_DEFINE4(wait4,
        compat_pid_t, pid,
        compat_uint_t __user *, stat_addr,
index 60bc027..6e3151e 100644 (file)
@@ -1629,9 +1629,6 @@ SYSCALL_DEFINE5(waitid, int, which, pid_t, upid, struct siginfo __user *,
        }
 
        put_pid(pid);
-
-       /* avoid REGPARM breakage on x86: */
-       asmlinkage_protect(5, ret, which, upid, infop, options, ru);
        return ret;
 }
 
@@ -1669,8 +1666,6 @@ SYSCALL_DEFINE4(wait4, pid_t, upid, int __user *, stat_addr,
        ret = do_wait(&wo);
        put_pid(pid);
 
-       /* avoid REGPARM breakage on x86: */
-       asmlinkage_protect(4, ret, upid, stat_addr, options, ru);
        return ret;
 }
 
index 339f60d..7d40687 100644 (file)
@@ -1677,10 +1677,7 @@ SYSCALL_DEFINE5(clone, unsigned long, clone_flags, unsigned long, newsp,
                 int, tls_val)
 #endif
 {
-       long ret = do_fork(clone_flags, newsp, 0, parent_tidptr, child_tidptr);
-       asmlinkage_protect(5, ret, clone_flags, newsp,
-                       parent_tidptr, child_tidptr, tls_val);
-       return ret;
+       return do_fork(clone_flags, newsp, 0, parent_tidptr, child_tidptr);
 }
 #endif
 
index afd0f7e..b95d3c7 100644 (file)
@@ -1851,6 +1851,20 @@ SYSCALL_DEFINE2(getrusage, int, who, struct rusage __user *, ru)
        return getrusage(current, who, ru);
 }
 
+#ifdef CONFIG_COMPAT
+COMPAT_SYSCALL_DEFINE2(getrusage, int, who, struct compat_rusage __user *, ru)
+{
+       struct rusage r;
+
+       if (who != RUSAGE_SELF && who != RUSAGE_CHILDREN &&
+           who != RUSAGE_THREAD)
+               return -EINVAL;
+
+       k_getrusage(current, who, &r);
+       return put_compat_rusage(&r, ru);
+}
+#endif
+
 SYSCALL_DEFINE1(umask, int, mask)
 {
        mask = xchg(&current->fs->umask, mask & S_IRWXUGO);
index 395084d..bfd6787 100644 (file)
@@ -20,6 +20,7 @@ cond_syscall(sys_quotactl);
 cond_syscall(sys32_quotactl);
 cond_syscall(sys_acct);
 cond_syscall(sys_lookup_dcookie);
+cond_syscall(compat_sys_lookup_dcookie);
 cond_syscall(sys_swapon);
 cond_syscall(sys_swapoff);
 cond_syscall(sys_kexec_load);
@@ -155,7 +156,7 @@ cond_syscall(compat_sys_process_vm_writev);
 cond_syscall(sys_pciconfig_read);
 cond_syscall(sys_pciconfig_write);
 cond_syscall(sys_pciconfig_iobase);
-cond_syscall(sys32_ipc);
+cond_syscall(compat_sys_s390_ipc);
 cond_syscall(ppc_rtas);
 cond_syscall(sys_spu_run);
 cond_syscall(sys_spu_create);
index d7948eb..f6c83d7 100644 (file)
 
 SYSCALL_DEFINE3(chown16, const char __user *, filename, old_uid_t, user, old_gid_t, group)
 {
-       long ret = sys_chown(filename, low2highuid(user), low2highgid(group));
-       /* avoid REGPARM breakage on x86: */
-       asmlinkage_protect(3, ret, filename, user, group);
-       return ret;
+       return sys_chown(filename, low2highuid(user), low2highgid(group));
 }
 
 SYSCALL_DEFINE3(lchown16, const char __user *, filename, old_uid_t, user, old_gid_t, group)
 {
-       long ret = sys_lchown(filename, low2highuid(user), low2highgid(group));
-       /* avoid REGPARM breakage on x86: */
-       asmlinkage_protect(3, ret, filename, user, group);
-       return ret;
+       return sys_lchown(filename, low2highuid(user), low2highgid(group));
 }
 
 SYSCALL_DEFINE3(fchown16, unsigned int, fd, old_uid_t, user, old_gid_t, group)
 {
-       long ret = sys_fchown(fd, low2highuid(user), low2highgid(group));
-       /* avoid REGPARM breakage on x86: */
-       asmlinkage_protect(3, ret, fd, user, group);
-       return ret;
+       return sys_fchown(fd, low2highuid(user), low2highgid(group));
 }
 
 SYSCALL_DEFINE2(setregid16, old_gid_t, rgid, old_gid_t, egid)
 {
-       long ret = sys_setregid(low2highgid(rgid), low2highgid(egid));
-       /* avoid REGPARM breakage on x86: */
-       asmlinkage_protect(2, ret, rgid, egid);
-       return ret;
+       return sys_setregid(low2highgid(rgid), low2highgid(egid));
 }
 
 SYSCALL_DEFINE1(setgid16, old_gid_t, gid)
 {
-       long ret = sys_setgid(low2highgid(gid));
-       /* avoid REGPARM breakage on x86: */
-       asmlinkage_protect(1, ret, gid);
-       return ret;
+       return sys_setgid(low2highgid(gid));
 }
 
 SYSCALL_DEFINE2(setreuid16, old_uid_t, ruid, old_uid_t, euid)
 {
-       long ret = sys_setreuid(low2highuid(ruid), low2highuid(euid));
-       /* avoid REGPARM breakage on x86: */
-       asmlinkage_protect(2, ret, ruid, euid);
-       return ret;
+       return sys_setreuid(low2highuid(ruid), low2highuid(euid));
 }
 
 SYSCALL_DEFINE1(setuid16, old_uid_t, uid)
 {
-       long ret = sys_setuid(low2highuid(uid));
-       /* avoid REGPARM breakage on x86: */
-       asmlinkage_protect(1, ret, uid);
-       return ret;
+       return sys_setuid(low2highuid(uid));
 }
 
 SYSCALL_DEFINE3(setresuid16, old_uid_t, ruid, old_uid_t, euid, old_uid_t, suid)
 {
-       long ret = sys_setresuid(low2highuid(ruid), low2highuid(euid),
+       return sys_setresuid(low2highuid(ruid), low2highuid(euid),
                                 low2highuid(suid));
-       /* avoid REGPARM breakage on x86: */
-       asmlinkage_protect(3, ret, ruid, euid, suid);
-       return ret;
 }
 
 SYSCALL_DEFINE3(getresuid16, old_uid_t __user *, ruidp, old_uid_t __user *, euidp, old_uid_t __user *, suidp)
@@ -100,11 +76,8 @@ SYSCALL_DEFINE3(getresuid16, old_uid_t __user *, ruidp, old_uid_t __user *, euid
 
 SYSCALL_DEFINE3(setresgid16, old_gid_t, rgid, old_gid_t, egid, old_gid_t, sgid)
 {
-       long ret = sys_setresgid(low2highgid(rgid), low2highgid(egid),
+       return sys_setresgid(low2highgid(rgid), low2highgid(egid),
                                 low2highgid(sgid));
-       /* avoid REGPARM breakage on x86: */
-       asmlinkage_protect(3, ret, rgid, egid, sgid);
-       return ret;
 }
 
 
@@ -127,18 +100,12 @@ SYSCALL_DEFINE3(getresgid16, old_gid_t __user *, rgidp, old_gid_t __user *, egid
 
 SYSCALL_DEFINE1(setfsuid16, old_uid_t, uid)
 {
-       long ret = sys_setfsuid(low2highuid(uid));
-       /* avoid REGPARM breakage on x86: */
-       asmlinkage_protect(1, ret, uid);
-       return ret;
+       return sys_setfsuid(low2highuid(uid));
 }
 
 SYSCALL_DEFINE1(setfsgid16, old_gid_t, gid)
 {
-       long ret = sys_setfsgid(low2highgid(gid));
-       /* avoid REGPARM breakage on x86: */
-       asmlinkage_protect(1, ret, gid);
-       return ret;
+       return sys_setfsgid(low2highgid(gid));
 }
 
 static int groups16_to_user(old_gid_t __user *grouplist,
index 7e09268..3bcfd81 100644 (file)
@@ -25,7 +25,7 @@
  * POSIX_FADV_WILLNEED could set PG_Referenced, and POSIX_FADV_NOREUSE could
  * deactivate the pages and clear PG_Referenced.
  */
-SYSCALL_DEFINE(fadvise64_64)(int fd, loff_t offset, loff_t len, int advice)
+SYSCALL_DEFINE4(fadvise64_64, int, fd, loff_t, offset, loff_t, len, int, advice)
 {
        struct fd f = fdget(fd);
        struct address_space *mapping;
@@ -145,26 +145,12 @@ out:
        fdput(f);
        return ret;
 }
-#ifdef CONFIG_HAVE_SYSCALL_WRAPPERS
-asmlinkage long SyS_fadvise64_64(long fd, loff_t offset, loff_t len, long advice)
-{
-       return SYSC_fadvise64_64((int) fd, offset, len, (int) advice);
-}
-SYSCALL_ALIAS(sys_fadvise64_64, SyS_fadvise64_64);
-#endif
 
 #ifdef __ARCH_WANT_SYS_FADVISE64
 
-SYSCALL_DEFINE(fadvise64)(int fd, loff_t offset, size_t len, int advice)
+SYSCALL_DEFINE4(fadvise64, int, fd, loff_t, offset, size_t, len, int, advice)
 {
        return sys_fadvise64_64(fd, offset, len, advice);
 }
-#ifdef CONFIG_HAVE_SYSCALL_WRAPPERS
-asmlinkage long SyS_fadvise64(long fd, loff_t offset, long len, long advice)
-{
-       return SYSC_fadvise64((int) fd, offset, (size_t)len, (int)advice);
-}
-SYSCALL_ALIAS(sys_fadvise64, SyS_fadvise64);
-#endif
 
 #endif
index fbe3e2f..298884d 100644 (file)
@@ -1771,7 +1771,7 @@ unsigned long vm_brk(unsigned long addr, unsigned long len)
  *
  * MREMAP_FIXED is not supported under NOMMU conditions
  */
-unsigned long do_mremap(unsigned long addr,
+static unsigned long do_mremap(unsigned long addr,
                        unsigned long old_len, unsigned long new_len,
                        unsigned long flags, unsigned long new_addr)
 {
@@ -1806,7 +1806,6 @@ unsigned long do_mremap(unsigned long addr,
        vma->vm_end = vma->vm_start + new_len;
        return vma->vm_start;
 }
-EXPORT_SYMBOL(do_mremap);
 
 SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len,
                unsigned long, new_len, unsigned long, flags,
index 7963f23..daed28d 100644 (file)
@@ -576,7 +576,7 @@ do_readahead(struct address_space *mapping, struct file *filp,
        return 0;
 }
 
-SYSCALL_DEFINE(readahead)(int fd, loff_t offset, size_t count)
+SYSCALL_DEFINE3(readahead, int, fd, loff_t, offset, size_t, count)
 {
        ssize_t ret;
        struct fd f;
@@ -595,10 +595,3 @@ SYSCALL_DEFINE(readahead)(int fd, loff_t offset, size_t count)
        }
        return ret;
 }
-#ifdef CONFIG_HAVE_SYSCALL_WRAPPERS
-asmlinkage long SyS_readahead(long fd, loff_t offset, long count)
-{
-       return SYSC_readahead((int) fd, offset, (size_t) count);
-}
-SYSCALL_ALIAS(sys_readahead, SyS_readahead);
-#endif