[kernel] r12577 - in dists/trunk/linux-2.6/debian: . patches/bugfix/all/stable patches/series

Maximilian Attems maks at alioth.debian.org
Sun Jan 18 20:17:59 UTC 2009


Author: maks
Date: Sun Jan 18 20:17:58 2009
New Revision: 12577

Log:
add stable 2.6.28.1

libusb still known broken.

Added:
   dists/trunk/linux-2.6/debian/patches/bugfix/all/stable/patch-2.6.28.1
Modified:
   dists/trunk/linux-2.6/debian/changelog
   dists/trunk/linux-2.6/debian/patches/series/1~experimental.1

Modified: dists/trunk/linux-2.6/debian/changelog
==============================================================================
--- dists/trunk/linux-2.6/debian/changelog	(original)
+++ dists/trunk/linux-2.6/debian/changelog	Sun Jan 18 20:17:58 2009
@@ -18,7 +18,7 @@
     EDAC_I5100, RTC_DRV_M41T94, RTC_DRV_DS1305, UBIFS.
   * [x86] set MOUSE_BCM5974, X86_RESERVE_LOW_64K.
   * [x86_64] set AMD_IOMMU, MTRR_SANITIZER.
-  * Add stable releases 2.6.27.1-2.6.27.10.
+  * Add stable release 2.6.28.1
 
   [ Martin Michlmayr ]
   * [mips/r4k-ip22, mips/sb1-bcm91250a] Don't build in ISO9660.

Added: dists/trunk/linux-2.6/debian/patches/bugfix/all/stable/patch-2.6.28.1
==============================================================================
--- (empty file)
+++ dists/trunk/linux-2.6/debian/patches/bugfix/all/stable/patch-2.6.28.1	Sun Jan 18 20:17:58 2009
@@ -0,0 +1,6746 @@
+diff --git a/arch/Kconfig b/arch/Kconfig
+index 471e72d..a05bc22 100644
+--- a/arch/Kconfig
++++ b/arch/Kconfig
+@@ -60,6 +60,9 @@ config HAVE_EFFICIENT_UNALIGNED_ACCESS
+ 	  See Documentation/unaligned-memory-access.txt for more
+ 	  information on the topic of unaligned memory accesses.
+ 
++config HAVE_SYSCALL_WRAPPERS
++	bool
++
+ config KRETPROBES
+ 	def_bool y
+ 	depends on KPROBES && HAVE_KRETPROBES
+diff --git a/arch/alpha/kernel/entry.S b/arch/alpha/kernel/entry.S
+index 5fc61e2..36a93f8 100644
+--- a/arch/alpha/kernel/entry.S
++++ b/arch/alpha/kernel/entry.S
+@@ -894,9 +894,9 @@ sys_getxpid:
+ .end sys_getxpid
+ 
+ 	.align	4
+-	.globl	sys_pipe
+-	.ent	sys_pipe
+-sys_pipe:
++	.globl	sys_alpha_pipe
++	.ent	sys_alpha_pipe
++sys_alpha_pipe:
+ 	lda	$sp, -16($sp)
+ 	stq	$26, 0($sp)
+ 	.prologue 0
+@@ -914,7 +914,7 @@ sys_pipe:
+ 	stq	$1, 80+16($sp)
+ 1:	lda	$sp, 16($sp)
+ 	ret
+-.end sys_pipe
++.end sys_alpha_pipe
+ 
+ 	.align	4
+ 	.globl	sys_execve
+diff --git a/arch/alpha/kernel/systbls.S b/arch/alpha/kernel/systbls.S
+index ba914af..9d9e3a9 100644
+--- a/arch/alpha/kernel/systbls.S
++++ b/arch/alpha/kernel/systbls.S
+@@ -52,7 +52,7 @@ sys_call_table:
+ 	.quad sys_setpgid
+ 	.quad alpha_ni_syscall			/* 40 */
+ 	.quad sys_dup
+-	.quad sys_pipe
++	.quad sys_alpha_pipe
+ 	.quad osf_set_program_attributes
+ 	.quad alpha_ni_syscall
+ 	.quad sys_open				/* 45 */
+diff --git a/arch/arm/kernel/calls.S b/arch/arm/kernel/calls.S
+index 09a061c..9ca8d13 100644
+--- a/arch/arm/kernel/calls.S
++++ b/arch/arm/kernel/calls.S
+@@ -98,7 +98,7 @@
+ 		CALL(sys_uselib)
+ 		CALL(sys_swapon)
+ 		CALL(sys_reboot)
+-		CALL(OBSOLETE(old_readdir))	/* used by libc4 */
++		CALL(OBSOLETE(sys_old_readdir))	/* used by libc4 */
+ /* 90 */	CALL(OBSOLETE(old_mmap))	/* used by libc4 */
+ 		CALL(sys_munmap)
+ 		CALL(sys_truncate)
+diff --git a/arch/cris/arch-v10/kernel/entry.S b/arch/cris/arch-v10/kernel/entry.S
+index ed171d3..72f5cd3 100644
+--- a/arch/cris/arch-v10/kernel/entry.S
++++ b/arch/cris/arch-v10/kernel/entry.S
+@@ -691,7 +691,7 @@ sys_call_table:
+ 	.long sys_uselib
+ 	.long sys_swapon
+ 	.long sys_reboot
+-	.long old_readdir
++	.long sys_old_readdir
+ 	.long old_mmap		/* 90 */
+ 	.long sys_munmap
+ 	.long sys_truncate
+diff --git a/arch/cris/arch-v32/kernel/entry.S b/arch/cris/arch-v32/kernel/entry.S
+index 7f6f93e..5e674c8 100644
+--- a/arch/cris/arch-v32/kernel/entry.S
++++ b/arch/cris/arch-v32/kernel/entry.S
+@@ -614,7 +614,7 @@ sys_call_table:
+ 	.long sys_uselib
+ 	.long sys_swapon
+ 	.long sys_reboot
+-	.long old_readdir
++	.long sys_old_readdir
+ 	.long old_mmap		/* 90 */
+ 	.long sys_munmap
+ 	.long sys_truncate
+diff --git a/arch/h8300/kernel/syscalls.S b/arch/h8300/kernel/syscalls.S
+index 54e21c3..4eb67fa 100644
+--- a/arch/h8300/kernel/syscalls.S
++++ b/arch/h8300/kernel/syscalls.S
+@@ -103,7 +103,7 @@ SYMBOL_NAME_LABEL(sys_call_table)
+ 	.long SYMBOL_NAME(sys_uselib)
+ 	.long SYMBOL_NAME(sys_swapon)
+ 	.long SYMBOL_NAME(sys_reboot)
+-	.long SYMBOL_NAME(old_readdir)
++	.long SYMBOL_NAME(sys_old_readdir)
+ 	.long SYMBOL_NAME(old_mmap)		/* 90 */
+ 	.long SYMBOL_NAME(sys_munmap)
+ 	.long SYMBOL_NAME(sys_truncate)
+diff --git a/arch/ia64/ia32/ia32_entry.S b/arch/ia64/ia32/ia32_entry.S
+index a8cf199..a46f839 100644
+--- a/arch/ia64/ia32/ia32_entry.S
++++ b/arch/ia64/ia32/ia32_entry.S
+@@ -220,7 +220,7 @@ ia32_syscall_table:
+ 	data8 sys_mkdir
+ 	data8 sys_rmdir		  /* 40 */
+ 	data8 sys_dup
+-	data8 sys_pipe
++	data8 sys_ia64_pipe
+ 	data8 compat_sys_times
+ 	data8 sys_ni_syscall	  /* old prof syscall holder */
+ 	data8 sys32_brk		  /* 45 */
+diff --git a/arch/ia64/include/asm/unistd.h b/arch/ia64/include/asm/unistd.h
+index f791576..9015979 100644
+--- a/arch/ia64/include/asm/unistd.h
++++ b/arch/ia64/include/asm/unistd.h
+@@ -364,7 +364,7 @@ struct pt_regs;
+ struct sigaction;
+ long sys_execve(char __user *filename, char __user * __user *argv,
+ 			   char __user * __user *envp, struct pt_regs *regs);
+-asmlinkage long sys_pipe(void);
++asmlinkage long sys_ia64_pipe(void);
+ asmlinkage long sys_rt_sigaction(int sig,
+ 				 const struct sigaction __user *act,
+ 				 struct sigaction __user *oact,
+diff --git a/arch/ia64/kernel/entry.S b/arch/ia64/kernel/entry.S
+index d435f4a..e5341e2 100644
+--- a/arch/ia64/kernel/entry.S
++++ b/arch/ia64/kernel/entry.S
+@@ -1442,7 +1442,7 @@ sys_call_table:
+ 	data8 sys_mkdir				// 1055
+ 	data8 sys_rmdir
+ 	data8 sys_dup
+-	data8 sys_pipe
++	data8 sys_ia64_pipe
+ 	data8 sys_times
+ 	data8 ia64_brk				// 1060
+ 	data8 sys_setgid
+diff --git a/arch/ia64/kernel/sys_ia64.c b/arch/ia64/kernel/sys_ia64.c
+index bcbb6d8..92ed83f 100644
+--- a/arch/ia64/kernel/sys_ia64.c
++++ b/arch/ia64/kernel/sys_ia64.c
+@@ -154,7 +154,7 @@ out:
+  * and r9) as this is faster than doing a copy_to_user().
+  */
+ asmlinkage long
+-sys_pipe (void)
++sys_ia64_pipe (void)
+ {
+ 	struct pt_regs *regs = task_pt_regs(current);
+ 	int fd[2];
+diff --git a/arch/m68k/kernel/entry.S b/arch/m68k/kernel/entry.S
+index f28404d..25b2176 100644
+--- a/arch/m68k/kernel/entry.S
++++ b/arch/m68k/kernel/entry.S
+@@ -513,7 +513,7 @@ sys_call_table:
+ 	.long sys_uselib
+ 	.long sys_swapon
+ 	.long sys_reboot
+-	.long old_readdir
++	.long sys_old_readdir
+ 	.long old_mmap		/* 90 */
+ 	.long sys_munmap
+ 	.long sys_truncate
+diff --git a/arch/m68knommu/kernel/syscalltable.S b/arch/m68knommu/kernel/syscalltable.S
+index 812f8d8..5c3e3f6 100644
+--- a/arch/m68knommu/kernel/syscalltable.S
++++ b/arch/m68knommu/kernel/syscalltable.S
+@@ -107,7 +107,7 @@ ENTRY(sys_call_table)
+ 	.long sys_uselib
+ 	.long sys_ni_syscall	/* sys_swapon */
+ 	.long sys_reboot
+-	.long old_readdir
++	.long sys_old_readdir
+ 	.long old_mmap		/* 90 */
+ 	.long sys_munmap
+ 	.long sys_truncate
+diff --git a/arch/mips/kernel/scall32-o32.S b/arch/mips/kernel/scall32-o32.S
+index d0916a5..51d1ba4 100644
+--- a/arch/mips/kernel/scall32-o32.S
++++ b/arch/mips/kernel/scall32-o32.S
+@@ -398,7 +398,7 @@ einval:	li	v0, -ENOSYS
+ 	sys	sys_uselib		1
+ 	sys	sys_swapon		2
+ 	sys	sys_reboot		3
+-	sys	old_readdir		3
++	sys	sys_old_readdir		3
+ 	sys	old_mmap		6	/* 4090 */
+ 	sys	sys_munmap		2
+ 	sys	sys_truncate		2
+diff --git a/arch/mn10300/kernel/entry.S b/arch/mn10300/kernel/entry.S
+index 62fba8a..ceeaaaa 100644
+--- a/arch/mn10300/kernel/entry.S
++++ b/arch/mn10300/kernel/entry.S
+@@ -478,7 +478,7 @@ ENTRY(sys_call_table)
+ 	.long sys_uselib
+ 	.long sys_swapon
+ 	.long sys_reboot
+-	.long old_readdir
++	.long sys_old_readdir
+ 	.long old_mmap		/* 90 */
+ 	.long sys_munmap
+ 	.long sys_truncate
+diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
+index 525c13a..de93c07 100644
+--- a/arch/powerpc/Kconfig
++++ b/arch/powerpc/Kconfig
+@@ -121,6 +121,7 @@ config PPC
+ 	select HAVE_DMA_ATTRS if PPC64
+ 	select USE_GENERIC_SMP_HELPERS if SMP
+ 	select HAVE_OPROFILE
++	select HAVE_SYSCALL_WRAPPERS if PPC64
+ 
+ config EARLY_PRINTK
+ 	bool
+diff --git a/arch/powerpc/include/asm/systbl.h b/arch/powerpc/include/asm/systbl.h
+index 803def2..72353f6 100644
+--- a/arch/powerpc/include/asm/systbl.h
++++ b/arch/powerpc/include/asm/systbl.h
+@@ -92,7 +92,7 @@ COMPAT_SYS_SPU(readlink)
+ SYSCALL(uselib)
+ SYSCALL(swapon)
+ SYSCALL(reboot)
+-SYSX(sys_ni_syscall,compat_sys_old_readdir,old_readdir)
++SYSX(sys_ni_syscall,compat_sys_old_readdir,sys_old_readdir)
+ SYSCALL_SPU(mmap)
+ SYSCALL_SPU(munmap)
+ SYSCALL_SPU(truncate)
+diff --git a/arch/powerpc/platforms/pseries/Kconfig b/arch/powerpc/platforms/pseries/Kconfig
+index 97619fd..ddc2a30 100644
+--- a/arch/powerpc/platforms/pseries/Kconfig
++++ b/arch/powerpc/platforms/pseries/Kconfig
+@@ -54,7 +54,7 @@ config PPC_SMLPAR
+ 
+ config CMM
+ 	tristate "Collaborative memory management"
+-	depends on PPC_SMLPAR
++	depends on PPC_SMLPAR && !CRASH_DUMP
+ 	default y
+ 	help
+ 	  Select this option, if you want to enable the kernel interface
+diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig
+index 8116a33..e3d58e1 100644
+--- a/arch/s390/Kconfig
++++ b/arch/s390/Kconfig
+@@ -70,6 +70,7 @@ mainmenu "Linux Kernel Configuration"
+ 
+ config S390
+ 	def_bool y
++	select HAVE_SYSCALL_WRAPPERS
+ 	select HAVE_OPROFILE
+ 	select HAVE_KPROBES
+ 	select HAVE_KRETPROBES
+diff --git a/arch/s390/kernel/compat_wrapper.S b/arch/s390/kernel/compat_wrapper.S
+index fc2c971..6035cd2 100644
+--- a/arch/s390/kernel/compat_wrapper.S
++++ b/arch/s390/kernel/compat_wrapper.S
+@@ -547,7 +547,7 @@ sys32_setdomainname_wrapper:
+ 	.globl	sys32_newuname_wrapper
+ sys32_newuname_wrapper:
+ 	llgtr	%r2,%r2			# struct new_utsname *
+-	jg	s390x_newuname		# branch to system call
++	jg	sys_s390_newuname	# branch to system call
+ 
+ 	.globl	compat_sys_adjtimex_wrapper
+ compat_sys_adjtimex_wrapper:
+@@ -615,7 +615,7 @@ sys32_sysfs_wrapper:
+ 	.globl	sys32_personality_wrapper
+ sys32_personality_wrapper:
+ 	llgfr	%r2,%r2			# unsigned long
+-	jg	s390x_personality	# branch to system call
++	jg	sys_s390_personality	# branch to system call
+ 
+ 	.globl	sys32_setfsuid16_wrapper
+ sys32_setfsuid16_wrapper:
+diff --git a/arch/s390/kernel/entry.h b/arch/s390/kernel/entry.h
+index 6b18963..df0a813 100644
+--- a/arch/s390/kernel/entry.h
++++ b/arch/s390/kernel/entry.h
+@@ -30,23 +30,23 @@ struct fadvise64_64_args;
+ struct old_sigaction;
+ struct sel_arg_struct;
+ 
+-long sys_pipe(unsigned long __user *fildes);
+ long sys_mmap2(struct mmap_arg_struct __user  *arg);
+-long old_mmap(struct mmap_arg_struct __user *arg);
++long sys_s390_old_mmap(struct mmap_arg_struct __user *arg);
+ long sys_ipc(uint call, int first, unsigned long second,
+ 	     unsigned long third, void __user *ptr);
+-long s390x_newuname(struct new_utsname __user *name);
+-long s390x_personality(unsigned long personality);
+-long s390_fadvise64(int fd, u32 offset_high, u32 offset_low,
++long sys_s390_newuname(struct new_utsname __user *name);
++long sys_s390_personality(unsigned long personality);
++long sys_s390_fadvise64(int fd, u32 offset_high, u32 offset_low,
+ 		    size_t len, int advice);
+-long s390_fadvise64_64(struct fadvise64_64_args __user *args);
+-long s390_fallocate(int fd, int mode, loff_t offset, u32 len_high, u32 len_low);
++long sys_s390_fadvise64_64(struct fadvise64_64_args __user *args);
++long sys_s390_fallocate(int fd, int mode, loff_t offset, u32 len_high,
++			u32 len_low);
+ long sys_fork(void);
+ long sys_clone(void);
+ long sys_vfork(void);
+ void execve_tail(void);
+ long sys_execve(void);
+-int sys_sigsuspend(int history0, int history1, old_sigset_t mask);
++long sys_sigsuspend(int history0, int history1, old_sigset_t mask);
+ long sys_sigaction(int sig, const struct old_sigaction __user *act,
+ 		   struct old_sigaction __user *oact);
+ long sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss);
+diff --git a/arch/s390/kernel/process.c b/arch/s390/kernel/process.c
+index 04f8c67..7ccd974 100644
+--- a/arch/s390/kernel/process.c
++++ b/arch/s390/kernel/process.c
+@@ -38,6 +38,7 @@
+ #include <linux/utsname.h>
+ #include <linux/tick.h>
+ #include <linux/elfcore.h>
++#include <linux/syscalls.h>
+ #include <asm/uaccess.h>
+ #include <asm/pgtable.h>
+ #include <asm/system.h>
+@@ -260,13 +261,13 @@ int copy_thread(int nr, unsigned long clone_flags, unsigned long new_stackp,
+         return 0;
+ }
+ 
+-asmlinkage long sys_fork(void)
++SYSCALL_DEFINE0(fork)
+ {
+ 	struct pt_regs *regs = task_pt_regs(current);
+ 	return do_fork(SIGCHLD, regs->gprs[15], regs, 0, NULL, NULL);
+ }
+ 
+-asmlinkage long sys_clone(void)
++SYSCALL_DEFINE0(clone)
+ {
+ 	struct pt_regs *regs = task_pt_regs(current);
+ 	unsigned long clone_flags;
+@@ -293,7 +294,7 @@ asmlinkage long sys_clone(void)
+  * do not have enough call-clobbered registers to hold all
+  * the information you need.
+  */
+-asmlinkage long sys_vfork(void)
++SYSCALL_DEFINE0(vfork)
+ {
+ 	struct pt_regs *regs = task_pt_regs(current);
+ 	return do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD,
+@@ -313,7 +314,7 @@ asmlinkage void execve_tail(void)
+ /*
+  * sys_execve() executes a new program.
+  */
+-asmlinkage long sys_execve(void)
++SYSCALL_DEFINE0(execve)
+ {
+ 	struct pt_regs *regs = task_pt_regs(current);
+ 	char *filename;
+diff --git a/arch/s390/kernel/signal.c b/arch/s390/kernel/signal.c
+index 8e6812a..3cf74c3 100644
+--- a/arch/s390/kernel/signal.c
++++ b/arch/s390/kernel/signal.c
+@@ -25,6 +25,7 @@
+ #include <linux/personality.h>
+ #include <linux/binfmts.h>
+ #include <linux/tracehook.h>
++#include <linux/syscalls.h>
+ #include <asm/ucontext.h>
+ #include <asm/uaccess.h>
+ #include <asm/lowcore.h>
+@@ -53,8 +54,7 @@ typedef struct
+ /*
+  * Atomically swap in the new signal mask, and wait for a signal.
+  */
+-asmlinkage int
+-sys_sigsuspend(int history0, int history1, old_sigset_t mask)
++SYSCALL_DEFINE3(sigsuspend, int, history0, int, history1, old_sigset_t, mask)
+ {
+ 	mask &= _BLOCKABLE;
+ 	spin_lock_irq(&current->sighand->siglock);
+@@ -70,9 +70,8 @@ sys_sigsuspend(int history0, int history1, old_sigset_t mask)
+ 	return -ERESTARTNOHAND;
+ }
+ 
+-asmlinkage long
+-sys_sigaction(int sig, const struct old_sigaction __user *act,
+-	      struct old_sigaction __user *oact)
++SYSCALL_DEFINE3(sigaction, int, sig, const struct old_sigaction __user *, act,
++		struct old_sigaction __user *, oact)
+ {
+ 	struct k_sigaction new_ka, old_ka;
+ 	int ret;
+@@ -102,15 +101,13 @@ sys_sigaction(int sig, const struct old_sigaction __user *act,
+ 	return ret;
+ }
+ 
+-asmlinkage long
+-sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss)
++SYSCALL_DEFINE2(sigaltstack, const stack_t __user *, uss,
++		stack_t __user *, uoss)
+ {
+ 	struct pt_regs *regs = task_pt_regs(current);
+ 	return do_sigaltstack(uss, uoss, regs->gprs[15]);
+ }
+ 
+-
+-
+ /* Returns non-zero on fault. */
+ static int save_sigregs(struct pt_regs *regs, _sigregs __user *sregs)
+ {
+@@ -164,7 +161,7 @@ static int restore_sigregs(struct pt_regs *regs, _sigregs __user *sregs)
+ 	return 0;
+ }
+ 
+-asmlinkage long sys_sigreturn(void)
++SYSCALL_DEFINE0(sigreturn)
+ {
+ 	struct pt_regs *regs = task_pt_regs(current);
+ 	sigframe __user *frame = (sigframe __user *)regs->gprs[15];
+@@ -191,7 +188,7 @@ badframe:
+ 	return 0;
+ }
+ 
+-asmlinkage long sys_rt_sigreturn(void)
++SYSCALL_DEFINE0(rt_sigreturn)
+ {
+ 	struct pt_regs *regs = task_pt_regs(current);
+ 	rt_sigframe __user *frame = (rt_sigframe __user *)regs->gprs[15];
+diff --git a/arch/s390/kernel/sys_s390.c b/arch/s390/kernel/sys_s390.c
+index 4fe952e..286d717 100644
+--- a/arch/s390/kernel/sys_s390.c
++++ b/arch/s390/kernel/sys_s390.c
+@@ -29,6 +29,7 @@
+ #include <linux/personality.h>
+ #include <linux/unistd.h>
+ #include <linux/ipc.h>
++#include <linux/syscalls.h>
+ #include <asm/uaccess.h>
+ #include "entry.h"
+ 
+@@ -74,7 +75,7 @@ struct mmap_arg_struct {
+ 	unsigned long offset;
+ };
+ 
+-asmlinkage long sys_mmap2(struct mmap_arg_struct __user  *arg)
++SYSCALL_DEFINE1(mmap2, struct mmap_arg_struct __user *, arg)
+ {
+ 	struct mmap_arg_struct a;
+ 	int error = -EFAULT;
+@@ -86,7 +87,7 @@ out:
+ 	return error;
+ }
+ 
+-asmlinkage long old_mmap(struct mmap_arg_struct __user *arg)
++SYSCALL_DEFINE1(s390_old_mmap, struct mmap_arg_struct __user *, arg)
+ {
+ 	struct mmap_arg_struct a;
+ 	long error = -EFAULT;
+@@ -127,8 +128,8 @@ asmlinkage long old_select(struct sel_arg_struct __user *arg)
+  *
+  * This is really horribly ugly.
+  */
+-asmlinkage long sys_ipc(uint call, int first, unsigned long second,
+-				  unsigned long third, void __user *ptr)
++SYSCALL_DEFINE5(ipc, uint, call, int, first, unsigned long, second,
++		unsigned long, third, void __user *, ptr)
+ {
+         struct ipc_kludge tmp;
+ 	int ret;
+@@ -194,7 +195,7 @@ asmlinkage long sys_ipc(uint call, int first, unsigned long second,
+ }
+ 
+ #ifdef CONFIG_64BIT
+-asmlinkage long s390x_newuname(struct new_utsname __user *name)
++SYSCALL_DEFINE1(s390_newuname, struct new_utsname __user *, name)
+ {
+ 	int ret = sys_newuname(name);
+ 
+@@ -205,7 +206,7 @@ asmlinkage long s390x_newuname(struct new_utsname __user *name)
+ 	return ret;
+ }
+ 
+-asmlinkage long s390x_personality(unsigned long personality)
++SYSCALL_DEFINE1(s390_personality, unsigned long, personality)
+ {
+ 	int ret;
+ 
+@@ -224,15 +225,13 @@ asmlinkage long s390x_personality(unsigned long personality)
+  */
+ #ifndef CONFIG_64BIT
+ 
+-asmlinkage long
+-s390_fadvise64(int fd, u32 offset_high, u32 offset_low, size_t len, int advice)
++SYSCALL_DEFINE5(s390_fadvise64, int, fd, u32, offset_high, u32, offset_low,
++		size_t, len, int, advice)
+ {
+ 	return sys_fadvise64(fd, (u64) offset_high << 32 | offset_low,
+ 			len, advice);
+ }
+ 
+-#endif
+-
+ struct fadvise64_64_args {
+ 	int fd;
+ 	long long offset;
+@@ -240,8 +239,7 @@ struct fadvise64_64_args {
+ 	int advice;
+ };
+ 
+-asmlinkage long
+-s390_fadvise64_64(struct fadvise64_64_args __user *args)
++SYSCALL_DEFINE1(s390_fadvise64_64, struct fadvise64_64_args __user *, args)
+ {
+ 	struct fadvise64_64_args a;
+ 
+@@ -250,7 +248,6 @@ s390_fadvise64_64(struct fadvise64_64_args __user *args)
+ 	return sys_fadvise64_64(a.fd, a.offset, a.len, a.advice);
+ }
+ 
+-#ifndef CONFIG_64BIT
+ /*
+  * This is a wrapper to call sys_fallocate(). For 31 bit s390 the last
+  * 64 bit argument "len" is split into the upper and lower 32 bits. The
+@@ -263,9 +260,19 @@ s390_fadvise64_64(struct fadvise64_64_args __user *args)
+  * to
+  *   %r2: fd, %r3: mode, %r4/%r5: offset, 96(%r15)-103(%r15): len
+  */
+-asmlinkage long s390_fallocate(int fd, int mode, loff_t offset,
++SYSCALL_DEFINE(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
+diff --git a/arch/s390/kernel/syscalls.S b/arch/s390/kernel/syscalls.S
+index 2d61787..76d16e0 100644
+--- a/arch/s390/kernel/syscalls.S
++++ b/arch/s390/kernel/syscalls.S
+@@ -98,7 +98,7 @@ SYSCALL(sys_uselib,sys_uselib,sys32_uselib_wrapper)
+ SYSCALL(sys_swapon,sys_swapon,sys32_swapon_wrapper)
+ SYSCALL(sys_reboot,sys_reboot,sys32_reboot_wrapper)
+ SYSCALL(sys_ni_syscall,sys_ni_syscall,old32_readdir_wrapper)	/* old readdir syscall */
+-SYSCALL(old_mmap,old_mmap,old32_mmap_wrapper)			/* 90 */
++SYSCALL(sys_s390_old_mmap,sys_s390_old_mmap,old32_mmap_wrapper)	/* 90 */
+ SYSCALL(sys_munmap,sys_munmap,sys32_munmap_wrapper)
+ SYSCALL(sys_truncate,sys_truncate,sys32_truncate_wrapper)
+ SYSCALL(sys_ftruncate,sys_ftruncate,sys32_ftruncate_wrapper)
+@@ -130,7 +130,7 @@ SYSCALL(sys_fsync,sys_fsync,sys32_fsync_wrapper)
+ SYSCALL(sys_sigreturn,sys_sigreturn,sys32_sigreturn)
+ SYSCALL(sys_clone,sys_clone,sys32_clone)			/* 120 */
+ SYSCALL(sys_setdomainname,sys_setdomainname,sys32_setdomainname_wrapper)
+-SYSCALL(sys_newuname,s390x_newuname,sys32_newuname_wrapper)
++SYSCALL(sys_newuname,sys_s390_newuname,sys32_newuname_wrapper)
+ NI_SYSCALL							/* modify_ldt for i386 */
+ SYSCALL(sys_adjtimex,sys_adjtimex,compat_sys_adjtimex_wrapper)
+ SYSCALL(sys_mprotect,sys_mprotect,sys32_mprotect_wrapper)	/* 125 */
+@@ -144,7 +144,7 @@ SYSCALL(sys_getpgid,sys_getpgid,sys32_getpgid_wrapper)
+ SYSCALL(sys_fchdir,sys_fchdir,sys32_fchdir_wrapper)
+ SYSCALL(sys_bdflush,sys_bdflush,sys32_bdflush_wrapper)
+ SYSCALL(sys_sysfs,sys_sysfs,sys32_sysfs_wrapper)		/* 135 */
+-SYSCALL(sys_personality,s390x_personality,sys32_personality_wrapper)
++SYSCALL(sys_personality,sys_s390_personality,sys32_personality_wrapper)
+ NI_SYSCALL							/* for afs_syscall */
+ SYSCALL(sys_setfsuid16,sys_ni_syscall,sys32_setfsuid16_wrapper)	/* old setfsuid16 syscall */
+ SYSCALL(sys_setfsgid16,sys_ni_syscall,sys32_setfsgid16_wrapper)	/* old setfsgid16 syscall */
+@@ -261,7 +261,7 @@ SYSCALL(sys_epoll_create,sys_epoll_create,sys_epoll_create_wrapper)
+ SYSCALL(sys_epoll_ctl,sys_epoll_ctl,sys_epoll_ctl_wrapper)	/* 250 */
+ SYSCALL(sys_epoll_wait,sys_epoll_wait,sys_epoll_wait_wrapper)
+ SYSCALL(sys_set_tid_address,sys_set_tid_address,sys32_set_tid_address_wrapper)
+-SYSCALL(s390_fadvise64,sys_fadvise64_64,sys32_fadvise64_wrapper)
++SYSCALL(sys_s390_fadvise64,sys_fadvise64_64,sys32_fadvise64_wrapper)
+ SYSCALL(sys_timer_create,sys_timer_create,sys32_timer_create_wrapper)
+ SYSCALL(sys_timer_settime,sys_timer_settime,sys32_timer_settime_wrapper)	/* 255 */
+ SYSCALL(sys_timer_gettime,sys_timer_gettime,sys32_timer_gettime_wrapper)
+@@ -272,7 +272,7 @@ SYSCALL(sys_clock_gettime,sys_clock_gettime,sys32_clock_gettime_wrapper)	/* 260
+ SYSCALL(sys_clock_getres,sys_clock_getres,sys32_clock_getres_wrapper)
+ SYSCALL(sys_clock_nanosleep,sys_clock_nanosleep,sys32_clock_nanosleep_wrapper)
+ NI_SYSCALL							/* reserved for vserver */
+-SYSCALL(s390_fadvise64_64,sys_ni_syscall,sys32_fadvise64_64_wrapper)
++SYSCALL(sys_s390_fadvise64_64,sys_ni_syscall,sys32_fadvise64_64_wrapper)
+ SYSCALL(sys_statfs64,sys_statfs64,compat_sys_statfs64_wrapper)
+ SYSCALL(sys_fstatfs64,sys_fstatfs64,compat_sys_fstatfs64_wrapper)
+ SYSCALL(sys_remap_file_pages,sys_remap_file_pages,sys32_remap_file_pages_wrapper)
+@@ -322,7 +322,7 @@ 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_utimes,sys_utimes,compat_sys_utimes_wrapper)
+-SYSCALL(s390_fallocate,sys_fallocate,sys_fallocate_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)
+ NI_SYSCALL						/* 317 old sys_timer_fd */
+diff --git a/arch/sh/include/asm/syscalls_32.h b/arch/sh/include/asm/syscalls_32.h
+index 104c5e6..8b30200 100644
+--- a/arch/sh/include/asm/syscalls_32.h
++++ b/arch/sh/include/asm/syscalls_32.h
+@@ -36,9 +36,9 @@ asmlinkage int sys_sigreturn(unsigned long r4, unsigned long r5,
+ asmlinkage int sys_rt_sigreturn(unsigned long r4, unsigned long r5,
+ 				unsigned long r6, unsigned long r7,
+ 				struct pt_regs __regs);
+-asmlinkage int sys_pipe(unsigned long r4, unsigned long r5,
+-			unsigned long r6, unsigned long r7,
+-			struct pt_regs __regs);
++asmlinkage int sys_sh_pipe(unsigned long r4, unsigned long r5,
++			   unsigned long r6, unsigned long r7,
++			   struct pt_regs __regs);
+ asmlinkage ssize_t sys_pread_wrapper(unsigned int fd, char __user *buf,
+ 				     size_t count, long dummy, loff_t pos);
+ asmlinkage ssize_t sys_pwrite_wrapper(unsigned int fd, const char __user *buf,
+diff --git a/arch/sh/kernel/sys_sh32.c b/arch/sh/kernel/sys_sh32.c
+index dbba1e1..63ba128 100644
+--- a/arch/sh/kernel/sys_sh32.c
++++ b/arch/sh/kernel/sys_sh32.c
+@@ -22,7 +22,7 @@
+  * sys_pipe() is the normal C calling standard for creating
+  * a pipe. It's not the way Unix traditionally does this, though.
+  */
+-asmlinkage int sys_pipe(unsigned long r4, unsigned long r5,
++asmlinkage int sys_sh_pipe(unsigned long r4, unsigned long r5,
+ 	unsigned long r6, unsigned long r7,
+ 	struct pt_regs __regs)
+ {
+diff --git a/arch/sh/kernel/syscalls_32.S b/arch/sh/kernel/syscalls_32.S
+index 0af693e..e67c173 100644
+--- a/arch/sh/kernel/syscalls_32.S
++++ b/arch/sh/kernel/syscalls_32.S
+@@ -58,7 +58,7 @@ ENTRY(sys_call_table)
+ 	.long sys_mkdir
+ 	.long sys_rmdir		/* 40 */
+ 	.long sys_dup
+-	.long sys_pipe
++	.long sys_sh_pipe
+ 	.long sys_times
+ 	.long sys_ni_syscall	/* old prof syscall holder */
+ 	.long sys_brk		/* 45 */
+@@ -105,7 +105,7 @@ ENTRY(sys_call_table)
+ 	.long sys_uselib
+ 	.long sys_swapon
+ 	.long sys_reboot
+-	.long old_readdir
++	.long sys_old_readdir
+ 	.long old_mmap		/* 90 */
+ 	.long sys_munmap
+ 	.long sys_truncate
+diff --git a/arch/sh/kernel/syscalls_64.S b/arch/sh/kernel/syscalls_64.S
+index 0b436aa..557cb91 100644
+--- a/arch/sh/kernel/syscalls_64.S
++++ b/arch/sh/kernel/syscalls_64.S
+@@ -109,7 +109,7 @@ sys_call_table:
+ 	.long sys_uselib
+ 	.long sys_swapon
+ 	.long sys_reboot
+-	.long old_readdir
++	.long sys_old_readdir
+ 	.long old_mmap			/* 90 */
+ 	.long sys_munmap
+ 	.long sys_truncate
+diff --git a/arch/sparc/kernel/entry.S b/arch/sparc/kernel/entry.S
+index faf9ccd..f41ecc5 100644
+--- a/arch/sparc/kernel/entry.S
++++ b/arch/sparc/kernel/entry.S
+@@ -1088,8 +1088,8 @@ sunos_execv:
+ 	 ld	[%sp + STACKFRAME_SZ + PT_I0], %o0
+ 
+ 	.align	4
+-	.globl	sys_pipe
+-sys_pipe:
++	.globl	sys_sparc_pipe
++sys_sparc_pipe:
+ 	mov	%o7, %l5
+ 	add	%sp, STACKFRAME_SZ, %o0		! pt_regs *regs arg
+ 	call	sparc_pipe
+diff --git a/arch/sparc/kernel/systbls.S b/arch/sparc/kernel/systbls.S
+index 7d08075..dccc95d 100644
+--- a/arch/sparc/kernel/systbls.S
++++ b/arch/sparc/kernel/systbls.S
+@@ -24,7 +24,7 @@ sys_call_table:
+ /*25*/	.long sys_vmsplice, sys_ptrace, sys_alarm, sys_sigaltstack, sys_pause
+ /*30*/	.long sys_utime, sys_lchown, sys_fchown, sys_access, sys_nice
+ /*35*/	.long sys_chown, sys_sync, sys_kill, sys_newstat, sys_sendfile
+-/*40*/	.long sys_newlstat, sys_dup, sys_pipe, sys_times, sys_getuid
++/*40*/	.long sys_newlstat, sys_dup, sys_sparc_pipe, sys_times, sys_getuid
+ /*45*/	.long sys_umount, sys_setgid16, sys_getgid16, sys_signal, sys_geteuid16
+ /*50*/	.long sys_getegid16, sys_acct, sys_nis_syscall, sys_getgid, sys_ioctl
+ /*55*/	.long sys_reboot, sys_mmap2, sys_symlink, sys_readlink, sys_execve
+@@ -56,7 +56,7 @@ sys_call_table:
+ /*185*/	.long sys_setpgid, sys_fremovexattr, sys_tkill, sys_exit_group, sys_newuname
+ /*190*/	.long sys_init_module, sys_personality, sparc_remap_file_pages, sys_epoll_create, sys_epoll_ctl
+ /*195*/	.long sys_epoll_wait, sys_ioprio_set, sys_getppid, sparc_sigaction, sys_sgetmask
+-/*200*/	.long sys_ssetmask, sys_sigsuspend, sys_newlstat, sys_uselib, old_readdir
++/*200*/	.long sys_ssetmask, sys_sigsuspend, sys_newlstat, sys_uselib, sys_old_readdir
+ /*205*/	.long sys_readahead, sys_socketcall, sys_syslog, sys_lookup_dcookie, sys_fadvise64
+ /*210*/	.long sys_fadvise64_64, sys_tgkill, sys_waitpid, sys_swapoff, sys_sysinfo
+ /*215*/	.long sys_ipc, sys_sigreturn, sys_clone, sys_ioprio_get, sys_adjtimex
+diff --git a/arch/sparc64/kernel/syscalls.S b/arch/sparc64/kernel/syscalls.S
+index 7a6786a..87f5a3b 100644
+--- a/arch/sparc64/kernel/syscalls.S
++++ b/arch/sparc64/kernel/syscalls.S
+@@ -20,7 +20,7 @@ execve_merge:
+ 	 add	%sp, PTREGS_OFF, %o0
+ 
+ 	.align	32
+-sys_pipe:
++sys_sparc_pipe:
+ 	ba,pt	%xcc, sparc_pipe
+ 	 add	%sp, PTREGS_OFF, %o0
+ sys_nis_syscall:
+diff --git a/arch/sparc64/kernel/systbls.S b/arch/sparc64/kernel/systbls.S
+index 9fc78cf..e6007bb 100644
+--- a/arch/sparc64/kernel/systbls.S
++++ b/arch/sparc64/kernel/systbls.S
+@@ -26,7 +26,7 @@ sys_call_table32:
+ /*25*/	.word sys32_vmsplice, compat_sys_ptrace, sys_alarm, sys32_sigaltstack, sys_pause
+ /*30*/	.word compat_sys_utime, sys_lchown, sys_fchown, sys32_access, sys32_nice
+ 	.word sys_chown, sys_sync, sys32_kill, compat_sys_newstat, sys32_sendfile
+-/*40*/	.word compat_sys_newlstat, sys_dup, sys_pipe, compat_sys_times, sys_getuid
++/*40*/	.word compat_sys_newlstat, sys_dup, sys_sparc_pipe, compat_sys_times, sys_getuid
+ 	.word sys32_umount, sys_setgid16, sys_getgid16, sys32_signal, sys_geteuid16
+ /*50*/	.word sys_getegid16, sys_acct, sys_nis_syscall, sys_getgid, compat_sys_ioctl
+ 	.word sys32_reboot, sys32_mmap2, sys_symlink, sys32_readlink, sys32_execve
+@@ -100,7 +100,7 @@ sys_call_table:
+ /*25*/	.word sys_vmsplice, sys_ptrace, sys_alarm, sys_sigaltstack, sys_nis_syscall
+ /*30*/	.word sys_utime, sys_nis_syscall, sys_nis_syscall, sys_access, sys_nice
+ 	.word sys_nis_syscall, sys_sync, sys_kill, sys_newstat, sys_sendfile64
+-/*40*/	.word sys_newlstat, sys_dup, sys_pipe, sys_times, sys_nis_syscall
++/*40*/	.word sys_newlstat, sys_dup, sys_sparc_pipe, sys_times, sys_nis_syscall
+ 	.word sys_umount, sys_setgid, sys_getgid, sys_signal, sys_geteuid
+ /*50*/	.word sys_getegid, sys_acct, sys_memory_ordering, sys_nis_syscall, sys_ioctl
+ 	.word sys_reboot, sys_nis_syscall, sys_symlink, sys_readlink, sys_execve
+diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
+index ac22bb7..2187c60 100644
+--- a/arch/x86/Kconfig
++++ b/arch/x86/Kconfig
+@@ -569,7 +569,7 @@ config AMD_IOMMU
+ 
+ # need this always selected by IOMMU for the VIA workaround
+ config SWIOTLB
+-	bool
++	def_bool y if X86_64
+ 	help
+ 	  Support for software bounce buffers used on x86-64 systems
+ 	  which don't have a hardware IOMMU (e.g. the current generation
+diff --git a/arch/x86/kernel/cpu/addon_cpuid_features.c b/arch/x86/kernel/cpu/addon_cpuid_features.c
+index ef8f831..2cf2363 100644
+--- a/arch/x86/kernel/cpu/addon_cpuid_features.c
++++ b/arch/x86/kernel/cpu/addon_cpuid_features.c
+@@ -120,9 +120,17 @@ void __cpuinit detect_extended_topology(struct cpuinfo_x86 *c)
+ 	c->cpu_core_id = phys_pkg_id(c->initial_apicid, ht_mask_width)
+ 						 & core_select_mask;
+ 	c->phys_proc_id = phys_pkg_id(c->initial_apicid, core_plus_mask_width);
++	/*
++	 * Reinit the apicid, now that we have extended initial_apicid.
++	 */
++	c->apicid = phys_pkg_id(c->initial_apicid, 0);
+ #else
+ 	c->cpu_core_id = phys_pkg_id(ht_mask_width) & core_select_mask;
+ 	c->phys_proc_id = phys_pkg_id(core_plus_mask_width);
++	/*
++	 * Reinit the apicid, now that we have extended initial_apicid.
++	 */
++	c->apicid = phys_pkg_id(0);
+ #endif
+ 	c->x86_max_cores = (core_level_siblings / smp_num_siblings);
+ 
+diff --git a/arch/x86/kernel/cpu/intel.c b/arch/x86/kernel/cpu/intel.c
+index cce0b61..57e3fba 100644
+--- a/arch/x86/kernel/cpu/intel.c
++++ b/arch/x86/kernel/cpu/intel.c
+@@ -242,6 +242,13 @@ static void __cpuinit init_intel(struct cpuinfo_x86 *c)
+ 
+ 	intel_workarounds(c);
+ 
++	/*
++	 * Detect the extended topology information if available. This
++	 * will reinitialise the initial_apicid which will be used
++	 * in init_intel_cacheinfo()
++	 */
++	detect_extended_topology(c);
++
+ 	l2 = init_intel_cacheinfo(c);
+ 	if (c->cpuid_level > 9) {
+ 		unsigned eax = cpuid_eax(10);
+@@ -313,7 +320,6 @@ static void __cpuinit init_intel(struct cpuinfo_x86 *c)
+ 
+ #endif
+ 
+-	detect_extended_topology(c);
+ 	if (!cpu_has(c, X86_FEATURE_XTOPOLOGY)) {
+ 		/*
+ 		 * let's use the legacy cpuid vector 0x1 and 0x4 for topology
+diff --git a/arch/x86/kernel/head64.c b/arch/x86/kernel/head64.c
+index d16084f..9461dc3 100644
+--- a/arch/x86/kernel/head64.c
++++ b/arch/x86/kernel/head64.c
+@@ -26,7 +26,7 @@
+ #include <asm/bios_ebda.h>
+ 
+ /* boot cpu pda */
+-static struct x8664_pda _boot_cpu_pda __read_mostly;
++static struct x8664_pda _boot_cpu_pda;
+ 
+ #ifdef CONFIG_SMP
+ /*
+diff --git a/arch/x86/kernel/head_64.S b/arch/x86/kernel/head_64.S
+index 26cfdc1..0e275d4 100644
+--- a/arch/x86/kernel/head_64.S
++++ b/arch/x86/kernel/head_64.S
+@@ -305,7 +305,7 @@ ENTRY(early_idt_handler)
+ 	call dump_stack
+ #ifdef CONFIG_KALLSYMS	
+ 	leaq early_idt_ripmsg(%rip),%rdi
+-	movq 8(%rsp),%rsi	# get rip again
++	movq 0(%rsp),%rsi	# get rip again
+ 	call __print_symbol
+ #endif
+ #endif /* EARLY_PRINTK */
+diff --git a/arch/x86/kernel/syscall_table_32.S b/arch/x86/kernel/syscall_table_32.S
+index d44395f..e2e86a0 100644
+--- a/arch/x86/kernel/syscall_table_32.S
++++ b/arch/x86/kernel/syscall_table_32.S
+@@ -88,7 +88,7 @@ ENTRY(sys_call_table)
+ 	.long sys_uselib
+ 	.long sys_swapon
+ 	.long sys_reboot
+-	.long old_readdir
++	.long sys_old_readdir
+ 	.long old_mmap		/* 90 */
+ 	.long sys_munmap
+ 	.long sys_truncate
+diff --git a/arch/x86/kernel/tlb_uv.c b/arch/x86/kernel/tlb_uv.c
+index 04431f3..ef493a0 100644
+--- a/arch/x86/kernel/tlb_uv.c
++++ b/arch/x86/kernel/tlb_uv.c
+@@ -586,7 +586,6 @@ static int __init uv_ptc_init(void)
+ static struct bau_control * __init uv_table_bases_init(int blade, int node)
+ {
+ 	int i;
+-	int *ip;
+ 	struct bau_msg_status *msp;
+ 	struct bau_control *bau_tabp;
+ 
+@@ -603,13 +602,6 @@ static struct bau_control * __init uv_table_bases_init(int blade, int node)
+ 		bau_cpubits_clear(&msp->seen_by, (int)
+ 				  uv_blade_nr_possible_cpus(blade));
+ 
+-	bau_tabp->watching =
+-	    kmalloc_node(sizeof(int) * DEST_NUM_RESOURCES, GFP_KERNEL, node);
+-	BUG_ON(!bau_tabp->watching);
+-
+-	for (i = 0, ip = bau_tabp->watching; i < DEST_Q_SIZE; i++, ip++)
+-		*ip = 0;
+-
+ 	uv_bau_table_bases[blade] = bau_tabp;
+ 
+ 	return bau_tabp;
+@@ -632,7 +624,6 @@ uv_table_bases_finish(int blade, int node, int cur_cpu,
+ 		bcp->bau_msg_head	= bau_tablesp->va_queue_first;
+ 		bcp->va_queue_first	= bau_tablesp->va_queue_first;
+ 		bcp->va_queue_last	= bau_tablesp->va_queue_last;
+-		bcp->watching		= bau_tablesp->watching;
+ 		bcp->msg_statuses	= bau_tablesp->msg_statuses;
+ 		bcp->descriptor_base	= adp;
+ 	}
+diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c
+index 31e8730..46f4cb1 100644
+--- a/arch/x86/mm/fault.c
++++ b/arch/x86/mm/fault.c
+@@ -533,7 +533,7 @@ static int vmalloc_fault(unsigned long address)
+ 	   happen within a race in page table update. In the later
+ 	   case just flush. */
+ 
+-	pgd = pgd_offset(current->mm ?: &init_mm, address);
++	pgd = pgd_offset(current->active_mm, address);
+ 	pgd_ref = pgd_offset_k(address);
+ 	if (pgd_none(*pgd_ref))
+ 		return -1;
+diff --git a/drivers/dma/ioat_dma.c b/drivers/dma/ioat_dma.c
+index 6607fdd..f2ed033 100644
+--- a/drivers/dma/ioat_dma.c
++++ b/drivers/dma/ioat_dma.c
+@@ -1341,12 +1341,11 @@ static void ioat_dma_start_null_desc(struct ioat_dma_chan *ioat_chan)
+  */
+ #define IOAT_TEST_SIZE 2000
+ 
+-DECLARE_COMPLETION(test_completion);
+ static void ioat_dma_test_callback(void *dma_async_param)
+ {
+-	printk(KERN_ERR "ioatdma: ioat_dma_test_callback(%p)\n",
+-		dma_async_param);
+-	complete(&test_completion);
++	struct completion *cmp = dma_async_param;
++
++	complete(cmp);
+ }
+ 
+ /**
+@@ -1363,6 +1362,7 @@ static int ioat_dma_self_test(struct ioatdma_device *device)
+ 	dma_addr_t dma_dest, dma_src;
+ 	dma_cookie_t cookie;
+ 	int err = 0;
++	struct completion cmp;
+ 
+ 	src = kzalloc(sizeof(u8) * IOAT_TEST_SIZE, GFP_KERNEL);
+ 	if (!src)
+@@ -1402,8 +1402,9 @@ static int ioat_dma_self_test(struct ioatdma_device *device)
+ 	}
+ 
+ 	async_tx_ack(tx);
++	init_completion(&cmp);
+ 	tx->callback = ioat_dma_test_callback;
+-	tx->callback_param = (void *)0x8086;
++	tx->callback_param = &cmp;
+ 	cookie = tx->tx_submit(tx);
+ 	if (cookie < 0) {
+ 		dev_err(&device->pdev->dev,
+@@ -1413,7 +1414,7 @@ static int ioat_dma_self_test(struct ioatdma_device *device)
+ 	}
+ 	device->common.device_issue_pending(dma_chan);
+ 
+-	wait_for_completion_timeout(&test_completion, msecs_to_jiffies(3000));
++	wait_for_completion_timeout(&cmp, msecs_to_jiffies(3000));
+ 
+ 	if (device->common.device_is_tx_complete(dma_chan, cookie, NULL, NULL)
+ 					!= DMA_SUCCESS) {
+diff --git a/drivers/hid/hid-sony.c b/drivers/hid/hid-sony.c
+index 86e563b..dd5a397 100644
+--- a/drivers/hid/hid-sony.c
++++ b/drivers/hid/hid-sony.c
+@@ -102,7 +102,7 @@ static int sony_probe(struct hid_device *hdev, const struct hid_device_id *id)
+ 	}
+ 
+ 	ret = sony_set_operational(hdev);
+-	if (ret)
++	if (ret < 0)
+ 		goto err_stop;
+ 
+ 	return 0;
+diff --git a/drivers/ide/tx4938ide.c b/drivers/ide/tx4938ide.c
+index 9120063..13b63e7 100644
+--- a/drivers/ide/tx4938ide.c
++++ b/drivers/ide/tx4938ide.c
+@@ -181,7 +181,7 @@ static void tx4938ide_input_data_swap(ide_drive_t *drive, struct request *rq,
+ 
+ 	while (count--)
+ 		*ptr++ = cpu_to_le16(__raw_readw((void __iomem *)port));
+-	__ide_flush_dcache_range((unsigned long)buf, count * 2);
++	__ide_flush_dcache_range((unsigned long)buf, roundup(len, 2));
+ }
+ 
+ static void tx4938ide_output_data_swap(ide_drive_t *drive, struct request *rq,
+@@ -195,7 +195,7 @@ static void tx4938ide_output_data_swap(ide_drive_t *drive, struct request *rq,
+ 		__raw_writew(le16_to_cpu(*ptr), (void __iomem *)port);
+ 		ptr++;
+ 	}
+-	__ide_flush_dcache_range((unsigned long)buf, count * 2);
++	__ide_flush_dcache_range((unsigned long)buf, roundup(len, 2));
+ }
+ 
+ static const struct ide_tp_ops tx4938ide_tp_ops = {
+diff --git a/drivers/ide/tx4939ide.c b/drivers/ide/tx4939ide.c
+index bafb7d1..97cd9e0 100644
+--- a/drivers/ide/tx4939ide.c
++++ b/drivers/ide/tx4939ide.c
+@@ -259,6 +259,12 @@ static int tx4939ide_build_dmatable(ide_drive_t *drive, struct request *rq)
+ 			bcount = 0x10000 - (cur_addr & 0xffff);
+ 			if (bcount > cur_len)
+ 				bcount = cur_len;
++			/*
++			 * This workaround for zero count seems required.
++			 * (standard ide_build_dmatable do it too)
++			 */
++			if ((bcount & 0xffff) == 0x0000)
++				bcount = 0x8000;
+ 			*table++ = bcount & 0xffff;
+ 			*table++ = cur_addr;
+ 			cur_addr += bcount;
+@@ -558,7 +564,7 @@ static void tx4939ide_input_data_swap(ide_drive_t *drive, struct request *rq,
+ 
+ 	while (count--)
+ 		*ptr++ = cpu_to_le16(__raw_readw((void __iomem *)port));
+-	__ide_flush_dcache_range((unsigned long)buf, count * 2);
++	__ide_flush_dcache_range((unsigned long)buf, roundup(len, 2));
+ }
+ 
+ static void tx4939ide_output_data_swap(ide_drive_t *drive, struct request *rq,
+@@ -572,7 +578,7 @@ static void tx4939ide_output_data_swap(ide_drive_t *drive, struct request *rq,
+ 		__raw_writew(le16_to_cpu(*ptr), (void __iomem *)port);
+ 		ptr++;
+ 	}
+-	__ide_flush_dcache_range((unsigned long)buf, count * 2);
++	__ide_flush_dcache_range((unsigned long)buf, roundup(len, 2));
+ }
+ 
+ static const struct ide_tp_ops tx4939ide_tp_ops = {
+diff --git a/drivers/md/bitmap.c b/drivers/md/bitmap.c
+index ab7c8e4..666b7ba 100644
+--- a/drivers/md/bitmap.c
++++ b/drivers/md/bitmap.c
+@@ -964,9 +964,11 @@ static int bitmap_init_from_disk(struct bitmap *bitmap, sector_t start)
+ 				 */
+ 				page = bitmap->sb_page;
+ 				offset = sizeof(bitmap_super_t);
+-				read_sb_page(bitmap->mddev, bitmap->offset,
+-					     page,
+-					     index, count);
++				if (!file)
++					read_sb_page(bitmap->mddev,
++						     bitmap->offset,
++						     page,
++						     index, count);
+ 			} else if (file) {
+ 				page = read_page(file, index, bitmap, count);
+ 				offset = 0;
+diff --git a/drivers/md/dm-log.c b/drivers/md/dm-log.c
+index a8c0fc7..13e2a1a 100644
+--- a/drivers/md/dm-log.c
++++ b/drivers/md/dm-log.c
+@@ -467,6 +467,7 @@ static int create_log_context(struct dm_dirty_log *log, struct dm_target *ti,
+ 		lc->disk_header = vmalloc(buf_size);
+ 		if (!lc->disk_header) {
+ 			DMWARN("couldn't allocate disk log buffer");
++			dm_io_client_destroy(lc->io_req.client);
+ 			kfree(lc);
+ 			return -ENOMEM;
+ 		}
+@@ -482,6 +483,8 @@ static int create_log_context(struct dm_dirty_log *log, struct dm_target *ti,
+ 		DMWARN("couldn't allocate sync bitset");
+ 		if (!dev)
+ 			vfree(lc->clean_bits);
++		else
++			dm_io_client_destroy(lc->io_req.client);
+ 		vfree(lc->disk_header);
+ 		kfree(lc);
+ 		return -ENOMEM;
+@@ -495,6 +498,8 @@ static int create_log_context(struct dm_dirty_log *log, struct dm_target *ti,
+ 		vfree(lc->sync_bits);
+ 		if (!dev)
+ 			vfree(lc->clean_bits);
++		else
++			dm_io_client_destroy(lc->io_req.client);
+ 		vfree(lc->disk_header);
+ 		kfree(lc);
+ 		return -ENOMEM;
+diff --git a/drivers/md/dm-raid1.c b/drivers/md/dm-raid1.c
+index ec43f9f..d0fed2b 100644
+--- a/drivers/md/dm-raid1.c
++++ b/drivers/md/dm-raid1.c
+@@ -197,9 +197,6 @@ static void fail_mirror(struct mirror *m, enum dm_raid1_error error_type)
+ 	struct mirror_set *ms = m->ms;
+ 	struct mirror *new;
+ 
+-	if (!errors_handled(ms))
+-		return;
+-
+ 	/*
+ 	 * error_count is used for nothing more than a
+ 	 * simple way to tell if a device has encountered
+@@ -210,6 +207,9 @@ static void fail_mirror(struct mirror *m, enum dm_raid1_error error_type)
+ 	if (test_and_set_bit(error_type, &m->error_type))
+ 		return;
+ 
++	if (!errors_handled(ms))
++		return;
++
+ 	if (m != get_default_mirror(ms))
+ 		goto out;
+ 
+diff --git a/drivers/net/wireless/ath5k/phy.c b/drivers/net/wireless/ath5k/phy.c
+index e43f656..35c7eb1 100644
+--- a/drivers/net/wireless/ath5k/phy.c
++++ b/drivers/net/wireless/ath5k/phy.c
+@@ -2195,9 +2195,7 @@ static int ath5k_hw_rf5110_calibrate(struct ath5k_hw *ah,
+ 		return ret;
+ 	}
+ 
+-	ret = ath5k_hw_noise_floor_calibration(ah, channel->center_freq);
+-	if (ret)
+-		return ret;
++	ath5k_hw_noise_floor_calibration(ah, channel->center_freq);
+ 
+ 	/*
+ 	 * Re-enable RX/TX and beacons
+diff --git a/drivers/net/wireless/ath5k/reset.c b/drivers/net/wireless/ath5k/reset.c
+index 1b6d45b..adcadae 100644
+--- a/drivers/net/wireless/ath5k/reset.c
++++ b/drivers/net/wireless/ath5k/reset.c
+@@ -842,9 +842,7 @@ int ath5k_hw_reset(struct ath5k_hw *ah, enum nl80211_iftype op_mode,
+ 	 *
+ 	 * XXX: Find an interval that's OK for all cards...
+ 	 */
+-	ret = ath5k_hw_noise_floor_calibration(ah, channel->center_freq);
+-	if (ret)
+-		return ret;
++	ath5k_hw_noise_floor_calibration(ah, channel->center_freq);
+ 
+ 	/*
+ 	 * Reset queues and start beacon timers at the end of the reset routine
+diff --git a/drivers/net/wireless/ath9k/recv.c b/drivers/net/wireless/ath9k/recv.c
+index 504a044..b9b36cb 100644
+--- a/drivers/net/wireless/ath9k/recv.c
++++ b/drivers/net/wireless/ath9k/recv.c
+@@ -627,9 +627,8 @@ u32 ath_calcrxfilter(struct ath_softc *sc)
+ 		rfilt &= ~ATH9K_RX_FILTER_UCAST;
+ 	}
+ 
+-	if (((sc->sc_ah->ah_opmode == ATH9K_M_STA) &&
+-	     (sc->rx_filter & FIF_BCN_PRBRESP_PROMISC)) ||
+-	    (sc->sc_ah->ah_opmode == ATH9K_M_IBSS))
++	if (sc->sc_ah->ah_opmode == ATH9K_M_STA ||
++			sc->sc_ah->ah_opmode == ATH9K_M_IBSS)
+ 		rfilt |= ATH9K_RX_FILTER_BEACON;
+ 
+ 	/* If in HOSTAP mode, want to enable reception of PSPOLL frames
+diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c
+index c4c0371..5f8c52b 100644
+--- a/drivers/net/wireless/iwlwifi/iwl-agn.c
++++ b/drivers/net/wireless/iwlwifi/iwl-agn.c
+@@ -1334,16 +1334,6 @@ static void iwl_setup_rx_handlers(struct iwl_priv *priv)
+ 	priv->cfg->ops->lib->rx_handler_setup(priv);
+ }
+ 
+-/*
+- * this should be called while priv->lock is locked
+-*/
+-static void __iwl_rx_replenish(struct iwl_priv *priv)
+-{
+-	iwl_rx_allocate(priv);
+-	iwl_rx_queue_restock(priv);
+-}
+-
+-
+ /**
+  * iwl_rx_handle - Main entry function for receiving responses from uCode
+  *
+@@ -1451,7 +1441,7 @@ void iwl_rx_handle(struct iwl_priv *priv)
+ 			count++;
+ 			if (count >= 8) {
+ 				priv->rxq.read = i;
+-				__iwl_rx_replenish(priv);
++				iwl_rx_queue_restock(priv);
+ 				count = 0;
+ 			}
+ 		}
+diff --git a/drivers/net/wireless/iwlwifi/iwl-rx.c b/drivers/net/wireless/iwlwifi/iwl-rx.c
+index 0509c16..bd30af6 100644
+--- a/drivers/net/wireless/iwlwifi/iwl-rx.c
++++ b/drivers/net/wireless/iwlwifi/iwl-rx.c
+@@ -245,25 +245,31 @@ void iwl_rx_allocate(struct iwl_priv *priv)
+ 	struct list_head *element;
+ 	struct iwl_rx_mem_buffer *rxb;
+ 	unsigned long flags;
+-	spin_lock_irqsave(&rxq->lock, flags);
+-	while (!list_empty(&rxq->rx_used)) {
++
++	while (1) {
++		spin_lock_irqsave(&rxq->lock, flags);
++
++		if (list_empty(&rxq->rx_used)) {
++			spin_unlock_irqrestore(&rxq->lock, flags);
++			return;
++		}
+ 		element = rxq->rx_used.next;
+ 		rxb = list_entry(element, struct iwl_rx_mem_buffer, list);
++		list_del(element);
++
++		spin_unlock_irqrestore(&rxq->lock, flags);
+ 
+ 		/* Alloc a new receive buffer */
+ 		rxb->skb = alloc_skb(priv->hw_params.rx_buf_size + 256,
+-				__GFP_NOWARN | GFP_ATOMIC);
++				     GFP_KERNEL);
+ 		if (!rxb->skb) {
+-			if (net_ratelimit())
+-				printk(KERN_CRIT DRV_NAME
+-				       ": Can not allocate SKB buffers\n");
++			printk(KERN_CRIT DRV_NAME
++				   "Can not allocate SKB buffers\n");
+ 			/* We don't reschedule replenish work here -- we will
+ 			 * call the restock method and if it still needs
+ 			 * more buffers it will schedule replenish */
+ 			break;
+ 		}
+-		priv->alloc_rxb_skb++;
+-		list_del(element);
+ 
+ 		/* Get physical address of RB/SKB */
+ 		rxb->real_dma_addr = pci_map_single(
+@@ -277,12 +283,15 @@ void iwl_rx_allocate(struct iwl_priv *priv)
+ 		rxb->aligned_dma_addr = ALIGN(rxb->real_dma_addr, 256);
+ 		skb_reserve(rxb->skb, rxb->aligned_dma_addr - rxb->real_dma_addr);
+ 
++		spin_lock_irqsave(&rxq->lock, flags);
++
+ 		list_add_tail(&rxb->list, &rxq->rx_free);
+ 		rxq->free_count++;
++		priv->alloc_rxb_skb++;
++
++		spin_unlock_irqrestore(&rxq->lock, flags);
+ 	}
+-	spin_unlock_irqrestore(&rxq->lock, flags);
+ }
+-EXPORT_SYMBOL(iwl_rx_allocate);
+ 
+ void iwl_rx_replenish(struct iwl_priv *priv)
+ {
+diff --git a/drivers/pci/syscall.c b/drivers/pci/syscall.c
+index 645d7a6..ec22284 100644
+--- a/drivers/pci/syscall.c
++++ b/drivers/pci/syscall.c
+@@ -14,10 +14,8 @@
+ #include <asm/uaccess.h>
+ #include "pci.h"
+ 
+-asmlinkage long
+-sys_pciconfig_read(unsigned long bus, unsigned long dfn,
+-		   unsigned long off, unsigned long len,
+-		   void __user *buf)
++SYSCALL_DEFINE5(pciconfig_read, unsigned long, bus, unsigned long, dfn,
++		unsigned long, off, unsigned long, len, void __user *, buf)
+ {
+ 	struct pci_dev *dev;
+ 	u8 byte;
+@@ -86,10 +84,8 @@ error:
+ 	return err;
+ }
+ 
+-asmlinkage long
+-sys_pciconfig_write(unsigned long bus, unsigned long dfn,
+-		    unsigned long off, unsigned long len,
+-		    void __user *buf)
++SYSCALL_DEFINE5(pciconfig_write, unsigned long, bus, unsigned long, dfn,
++		unsigned long, off, unsigned long, len, void __user *, buf)
+ {
+ 	struct pci_dev *dev;
+ 	u8 byte;
+diff --git a/drivers/scsi/eata.c b/drivers/scsi/eata.c
+index a73a6bb..976cdd5 100644
+--- a/drivers/scsi/eata.c
++++ b/drivers/scsi/eata.c
+@@ -1626,8 +1626,15 @@ static void map_dma(unsigned int i, struct hostdata *ha)
+ 
+ 	cpp->sense_len = SCSI_SENSE_BUFFERSIZE;
+ 
+-	count = scsi_dma_map(SCpnt);
+-	BUG_ON(count < 0);
++	if (!scsi_sg_count(SCpnt)) {
++		cpp->data_len = 0;
++		return;
++	}
++
++	count = pci_map_sg(ha->pdev, scsi_sglist(SCpnt), scsi_sg_count(SCpnt),
++			   pci_dir);
++	BUG_ON(!count);
++
+ 	scsi_for_each_sg(SCpnt, sg, count, k) {
+ 		cpp->sglist[k].address = H2DEV(sg_dma_address(sg));
+ 		cpp->sglist[k].num_bytes = H2DEV(sg_dma_len(sg));
+@@ -1655,7 +1662,9 @@ static void unmap_dma(unsigned int i, struct hostdata *ha)
+ 		pci_unmap_single(ha->pdev, DEV2H(cpp->sense_addr),
+ 				 DEV2H(cpp->sense_len), PCI_DMA_FROMDEVICE);
+ 
+-	scsi_dma_unmap(SCpnt);
++	if (scsi_sg_count(SCpnt))
++		pci_unmap_sg(ha->pdev, scsi_sglist(SCpnt), scsi_sg_count(SCpnt),
++			     pci_dir);
+ 
+ 	if (!DEV2H(cpp->data_len))
+ 		pci_dir = PCI_DMA_BIDIRECTIONAL;
+diff --git a/drivers/scsi/ibmvscsi/ibmvfc.c b/drivers/scsi/ibmvscsi/ibmvfc.c
+index 7650707..189be8c 100644
+--- a/drivers/scsi/ibmvscsi/ibmvfc.c
++++ b/drivers/scsi/ibmvscsi/ibmvfc.c
+@@ -566,7 +566,7 @@ static void ibmvfc_init_host(struct ibmvfc_host *vhost, int relogin)
+ 	struct ibmvfc_target *tgt;
+ 
+ 	if (vhost->action == IBMVFC_HOST_ACTION_INIT_WAIT) {
+-		if (++vhost->init_retries > IBMVFC_MAX_INIT_RETRIES) {
++		if (++vhost->init_retries > IBMVFC_MAX_HOST_INIT_RETRIES) {
+ 			dev_err(vhost->dev,
+ 				"Host initialization retries exceeded. Taking adapter offline\n");
+ 			ibmvfc_link_down(vhost, IBMVFC_HOST_OFFLINE);
+@@ -847,11 +847,12 @@ static void ibmvfc_reset_host(struct ibmvfc_host *vhost)
+ static void ibmvfc_retry_host_init(struct ibmvfc_host *vhost)
+ {
+ 	if (vhost->action == IBMVFC_HOST_ACTION_INIT_WAIT) {
+-		if (++vhost->init_retries > IBMVFC_MAX_INIT_RETRIES) {
++		vhost->delay_init = 1;
++		if (++vhost->init_retries > IBMVFC_MAX_HOST_INIT_RETRIES) {
+ 			dev_err(vhost->dev,
+ 				"Host initialization retries exceeded. Taking adapter offline\n");
+ 			ibmvfc_link_down(vhost, IBMVFC_HOST_OFFLINE);
+-		} else if (vhost->init_retries == IBMVFC_MAX_INIT_RETRIES)
++		} else if (vhost->init_retries == IBMVFC_MAX_HOST_INIT_RETRIES)
+ 			__ibmvfc_reset_host(vhost);
+ 		else
+ 			ibmvfc_set_host_action(vhost, IBMVFC_HOST_ACTION_INIT);
+@@ -2089,15 +2090,17 @@ static void ibmvfc_handle_async(struct ibmvfc_async_crq *crq,
+ 	case IBMVFC_AE_LINK_UP:
+ 	case IBMVFC_AE_RESUME:
+ 		vhost->events_to_log |= IBMVFC_AE_LINKUP;
+-		ibmvfc_init_host(vhost, 1);
++		vhost->delay_init = 1;
++		__ibmvfc_reset_host(vhost);
+ 		break;
+ 	case IBMVFC_AE_SCN_FABRIC:
++	case IBMVFC_AE_SCN_DOMAIN:
+ 		vhost->events_to_log |= IBMVFC_AE_RSCN;
+-		ibmvfc_init_host(vhost, 1);
++		vhost->delay_init = 1;
++		__ibmvfc_reset_host(vhost);
+ 		break;
+ 	case IBMVFC_AE_SCN_NPORT:
+ 	case IBMVFC_AE_SCN_GROUP:
+-	case IBMVFC_AE_SCN_DOMAIN:
+ 		vhost->events_to_log |= IBMVFC_AE_RSCN;
+ 	case IBMVFC_AE_ELS_LOGO:
+ 	case IBMVFC_AE_ELS_PRLO:
+@@ -2669,7 +2672,7 @@ static void ibmvfc_init_tgt(struct ibmvfc_target *tgt,
+ static void ibmvfc_retry_tgt_init(struct ibmvfc_target *tgt,
+ 				  void (*job_step) (struct ibmvfc_target *))
+ {
+-	if (++tgt->init_retries > IBMVFC_MAX_INIT_RETRIES) {
++	if (++tgt->init_retries > IBMVFC_MAX_TGT_INIT_RETRIES) {
+ 		ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_DEL_RPORT);
+ 		wake_up(&tgt->vhost->work_wait_q);
+ 	} else
+@@ -3519,7 +3522,13 @@ static void ibmvfc_do_work(struct ibmvfc_host *vhost)
+ 		break;
+ 	case IBMVFC_HOST_ACTION_INIT:
+ 		BUG_ON(vhost->state != IBMVFC_INITIALIZING);
+-		vhost->job_step(vhost);
++		if (vhost->delay_init) {
++			vhost->delay_init = 0;
++			spin_unlock_irqrestore(vhost->host->host_lock, flags);
++			ssleep(15);
++			return;
++		} else
++			vhost->job_step(vhost);
+ 		break;
+ 	case IBMVFC_HOST_ACTION_QUERY:
+ 		list_for_each_entry(tgt, &vhost->targets, queue)
+diff --git a/drivers/scsi/ibmvscsi/ibmvfc.h b/drivers/scsi/ibmvscsi/ibmvfc.h
+index fb3177a..d0e76d5 100644
+--- a/drivers/scsi/ibmvscsi/ibmvfc.h
++++ b/drivers/scsi/ibmvscsi/ibmvfc.h
+@@ -33,7 +33,7 @@
+ #define IBMVFC_DRIVER_DATE		"(August 14, 2008)"
+ 
+ #define IBMVFC_DEFAULT_TIMEOUT	15
+-#define IBMVFC_INIT_TIMEOUT		30
++#define IBMVFC_INIT_TIMEOUT		120
+ #define IBMVFC_MAX_REQUESTS_DEFAULT	100
+ 
+ #define IBMVFC_DEBUG			0
+@@ -43,7 +43,8 @@
+ #define IBMVFC_MAX_DISC_THREADS	4
+ #define IBMVFC_TGT_MEMPOOL_SZ		64
+ #define IBMVFC_MAX_CMDS_PER_LUN	64
+-#define IBMVFC_MAX_INIT_RETRIES	3
++#define IBMVFC_MAX_HOST_INIT_RETRIES	6
++#define IBMVFC_MAX_TGT_INIT_RETRIES		3
+ #define IBMVFC_DEV_LOSS_TMO		(5 * 60)
+ #define IBMVFC_DEFAULT_LOG_LEVEL	2
+ #define IBMVFC_MAX_CDB_LEN		16
+@@ -671,6 +672,7 @@ struct ibmvfc_host {
+ 	int discovery_threads;
+ 	int client_migrated;
+ 	int reinit;
++	int delay_init;
+ 	int events_to_log;
+ #define IBMVFC_AE_LINKUP	0x0001
+ #define IBMVFC_AE_LINKDOWN	0x0002
+diff --git a/drivers/scsi/mvsas.c b/drivers/scsi/mvsas.c
+index 1dd70d7..23e5a87 100644
+--- a/drivers/scsi/mvsas.c
++++ b/drivers/scsi/mvsas.c
+@@ -2959,7 +2959,7 @@ static int __devinit mvs_hw_init(struct mvs_info *mvi)
+ 
+ 	/* enable auto port detection */
+ 	mw32(GBL_PORT_TYPE, MODE_AUTO_DET_EN);
+-	msleep(100);
++	msleep(1100);
+ 	/* init and reset phys */
+ 	for (i = 0; i < mvi->chip->n_phy; i++) {
+ 		u32 lo = be32_to_cpu(*(u32 *)&mvi->sas_addr[4]);
+diff --git a/drivers/scsi/pcmcia/aha152x_stub.c b/drivers/scsi/pcmcia/aha152x_stub.c
+index 165ff88..67cde01 100644
+--- a/drivers/scsi/pcmcia/aha152x_stub.c
++++ b/drivers/scsi/pcmcia/aha152x_stub.c
+@@ -114,7 +114,7 @@ static int aha152x_probe(struct pcmcia_device *link)
+     link->io.NumPorts1 = 0x20;
+     link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
+     link->io.IOAddrLines = 10;
+-    link->irq.Attributes = IRQ_TYPE_EXCLUSIVE;
++    link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
+     link->irq.IRQInfo1 = IRQ_LEVEL_ID;
+     link->conf.Attributes = CONF_ENABLE_IRQ;
+     link->conf.IntType = INT_MEMORY_AND_IO;
+diff --git a/drivers/usb/host/isp1760-if.c b/drivers/usb/host/isp1760-if.c
+index b87ca7c..2545306 100644
+--- a/drivers/usb/host/isp1760-if.c
++++ b/drivers/usb/host/isp1760-if.c
+@@ -129,23 +129,23 @@ static struct of_platform_driver isp1760_of_driver = {
+ #endif
+ 
+ #ifdef CONFIG_PCI
+-static u32 nxp_pci_io_base;
+-static u32 iolength;
+-static u32 pci_mem_phy0;
+-static u32 length;
+-static u8 __iomem *chip_addr;
+-static u8 __iomem *iobase;
+-
+ static int __devinit isp1761_pci_probe(struct pci_dev *dev,
+ 		const struct pci_device_id *id)
+ {
+ 	u8 latency, limit;
+ 	__u32 reg_data;
+ 	int retry_count;
+-	int length;
+-	int status = 1;
+ 	struct usb_hcd *hcd;
+ 	unsigned int devflags = 0;
++	int ret_status = 0;
++
++	resource_size_t pci_mem_phy0;
++	resource_size_t memlength;
++
++	u8 __iomem *chip_addr;
++	u8 __iomem *iobase;
++	resource_size_t nxp_pci_io_base;
++	resource_size_t iolength;
+ 
+ 	if (usb_disabled())
+ 		return -ENODEV;
+@@ -168,26 +168,30 @@ static int __devinit isp1761_pci_probe(struct pci_dev *dev,
+ 	iobase = ioremap_nocache(nxp_pci_io_base, iolength);
+ 	if (!iobase) {
+ 		printk(KERN_ERR "ioremap #1\n");
+-		release_mem_region(nxp_pci_io_base, iolength);
+-		return -ENOMEM;
++		ret_status = -ENOMEM;
++		goto cleanup1;
+ 	}
+ 	/* Grab the PLX PCI shared memory of the ISP 1761 we need  */
+ 	pci_mem_phy0 = pci_resource_start(dev, 3);
+-	length = pci_resource_len(dev, 3);
+-
+-	if (length < 0xffff) {
+-		printk(KERN_ERR "memory length for this resource is less than "
+-				"required\n");
+-		release_mem_region(nxp_pci_io_base, iolength);
+-		iounmap(iobase);
+-		return  -ENOMEM;
++	memlength = pci_resource_len(dev, 3);
++	if (memlength < 0xffff) {
++		printk(KERN_ERR "memory length for this resource is wrong\n");
++		ret_status = -ENOMEM;
++		goto cleanup2;
+ 	}
+ 
+-	if (!request_mem_region(pci_mem_phy0, length, "ISP-PCI")) {
++	if (!request_mem_region(pci_mem_phy0, memlength, "ISP-PCI")) {
+ 		printk(KERN_ERR "host controller already in use\n");
+-		release_mem_region(nxp_pci_io_base, iolength);
+-		iounmap(iobase);
+-		return -EBUSY;
++		ret_status = -EBUSY;
++		goto cleanup2;
++	}
++
++	/* map available memory */
++	chip_addr = ioremap_nocache(pci_mem_phy0,memlength);
++	if (!chip_addr) {
++		printk(KERN_ERR "Error ioremap failed\n");
++		ret_status = -ENOMEM;
++		goto cleanup3;
+ 	}
+ 
+ 	/* bad pci latencies can contribute to overruns */
+@@ -210,39 +214,54 @@ static int __devinit isp1761_pci_probe(struct pci_dev *dev,
+ 		 * */
+ 		writel(0xface, chip_addr + HC_SCRATCH_REG);
+ 		udelay(100);
+-		reg_data = readl(chip_addr + HC_SCRATCH_REG);
++		reg_data = readl(chip_addr + HC_SCRATCH_REG) & 0x0000ffff;
+ 		retry_count--;
+ 	}
+ 
++	iounmap(chip_addr);
++
+ 	/* Host Controller presence is detected by writing to scratch register
+ 	 * and reading back and checking the contents are same or not
+ 	 */
+ 	if (reg_data != 0xFACE) {
+ 		dev_err(&dev->dev, "scratch register mismatch %x\n", reg_data);
+-		goto clean;
++		ret_status = -ENOMEM;
++		goto cleanup3;
+ 	}
+ 
+ 	pci_set_master(dev);
+ 
+-	status = readl(iobase + 0x68);
+-	status |= 0x900;
+-	writel(status, iobase + 0x68);
++	/* configure PLX PCI chip to pass interrupts */
++#define PLX_INT_CSR_REG 0x68
++	reg_data = readl(iobase + PLX_INT_CSR_REG);
++	reg_data |= 0x900;
++	writel(reg_data, iobase + PLX_INT_CSR_REG);
+ 
+ 	dev->dev.dma_mask = NULL;
+-	hcd = isp1760_register(pci_mem_phy0, length, dev->irq,
++	hcd = isp1760_register(pci_mem_phy0, memlength, dev->irq,
+ 		IRQF_SHARED | IRQF_DISABLED, &dev->dev, dev_name(&dev->dev),
+ 		devflags);
+-	if (!IS_ERR(hcd)) {
+-		pci_set_drvdata(dev, hcd);
+-		return 0;
++	if (IS_ERR(hcd)) {
++		ret_status = -ENODEV;
++		goto cleanup3;
+ 	}
+-clean:
+-	status = -ENODEV;
++
++	/* done with PLX IO access */
+ 	iounmap(iobase);
+-	release_mem_region(pci_mem_phy0, length);
+ 	release_mem_region(nxp_pci_io_base, iolength);
+-	return status;
++
++	pci_set_drvdata(dev, hcd);
++	return 0;
++
++cleanup3:
++	release_mem_region(pci_mem_phy0, memlength);
++cleanup2:
++	iounmap(iobase);
++cleanup1:
++	release_mem_region(nxp_pci_io_base, iolength);
++	return ret_status;
+ }
++
+ static void isp1761_pci_remove(struct pci_dev *dev)
+ {
+ 	struct usb_hcd *hcd;
+@@ -255,12 +274,6 @@ static void isp1761_pci_remove(struct pci_dev *dev)
+ 	usb_put_hcd(hcd);
+ 
+ 	pci_disable_device(dev);
+-
+-	iounmap(iobase);
+-	iounmap(chip_addr);
+-
+-	release_mem_region(nxp_pci_io_base, iolength);
+-	release_mem_region(pci_mem_phy0, length);
+ }
+ 
+ static void isp1761_pci_shutdown(struct pci_dev *dev)
+@@ -268,12 +281,16 @@ static void isp1761_pci_shutdown(struct pci_dev *dev)
+ 	printk(KERN_ERR "ips1761_pci_shutdown\n");
+ }
+ 
+-static const struct pci_device_id isp1760_plx [] = { {
+-	/* handle any USB 2.0 EHCI controller */
+-	PCI_DEVICE_CLASS(((PCI_CLASS_BRIDGE_OTHER << 8) | (0x06 << 16)), ~0),
+-		.driver_data = 0,
+-},
+-{ /* end: all zeroes */ }
++static const struct pci_device_id isp1760_plx [] = {
++	{
++		.class          = PCI_CLASS_BRIDGE_OTHER << 8,
++		.class_mask     = ~0,
++		.vendor		= PCI_VENDOR_ID_PLX,
++		.device		= 0x5406,
++		.subvendor	= PCI_VENDOR_ID_PLX,
++		.subdevice	= 0x9054,
++	},
++	{ }
+ };
+ MODULE_DEVICE_TABLE(pci, isp1760_plx);
+ 
+diff --git a/drivers/usb/misc/emi26.c b/drivers/usb/misc/emi26.c
+index e762beb..879a980 100644
+--- a/drivers/usb/misc/emi26.c
++++ b/drivers/usb/misc/emi26.c
+@@ -160,7 +160,7 @@ static int emi26_load_firmware (struct usb_device *dev)
+ 			err("%s - error loading firmware: error = %d", __func__, err);
+ 			goto wraperr;
+ 		}
+-	} while (i > 0);
++	} while (rec);
+ 
+ 	/* Assert reset (stop the CPU in the EMI) */
+ 	err = emi26_set_reset(dev,1);
+diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h
+index bfcc1fe..a078540 100644
+--- a/drivers/usb/storage/unusual_devs.h
++++ b/drivers/usb/storage/unusual_devs.h
+@@ -260,6 +260,13 @@ UNUSUAL_DEV(  0x0421, 0x04b9, 0x0500, 0x0551,
+ 		US_SC_DEVICE, US_PR_DEVICE, NULL,
+ 		US_FL_FIX_CAPACITY ),
+ 
++/* Reported by Paulo Fessel <pfessel at gmail.com> */
++UNUSUAL_DEV(  0x0421, 0x04bd, 0x0000, 0x9999,
++		"Nokia",
++		"5200",
++		US_SC_DEVICE, US_PR_DEVICE, NULL,
++		US_FL_FIX_CAPACITY ),
++
+ /* Reported by Richard Nauber <RichardNauber at web.de> */
+ UNUSUAL_DEV(  0x0421, 0x04fa, 0x0550, 0x0660,
+ 		"Nokia",
+@@ -1040,7 +1047,7 @@ UNUSUAL_DEV( 0x067b, 0x2507, 0x0100, 0x0100,
+ 		US_FL_FIX_CAPACITY | US_FL_GO_SLOW ),
+ 
+ /* Reported by Alex Butcher <alex.butcher at assursys.co.uk> */
+-UNUSUAL_DEV( 0x067b, 0x3507, 0x0001, 0x0001,
++UNUSUAL_DEV( 0x067b, 0x3507, 0x0001, 0x0101,
+ 		"Prolific Technology Inc.",
+ 		"ATAPI-6 Bridge Controller",
+ 		US_SC_DEVICE, US_PR_DEVICE, NULL,
+@@ -1320,6 +1327,13 @@ UNUSUAL_DEV( 0x0840, 0x0082, 0x0001, 0x0001,
+ 		US_SC_DEVICE, US_PR_DEVICE, NULL,
+ 		US_FL_FIX_CAPACITY),
+ 
++/* Reported and patched by Nguyen Anh Quynh <aquynh at gmail.com> */
++UNUSUAL_DEV( 0x0840, 0x0084, 0x0001, 0x0001,
++		"Argosy",
++		"Storage",
++		US_SC_DEVICE, US_PR_DEVICE, NULL,
++		US_FL_FIX_CAPACITY),
++
+ /* Entry and supporting patch by Theodore Kilgore <kilgota at auburn.edu>.
+  * Flag will support Bulk devices which use a standards-violating 32-byte
+  * Command Block Wrapper. Here, the "DC2MEGA" cameras (several brands) with
+@@ -1425,6 +1439,13 @@ UNUSUAL_DEV( 0x0a17, 0x006, 0x0000, 0xffff,
+ 		US_SC_DEVICE, US_PR_DEVICE, NULL,
+ 		US_FL_FIX_INQUIRY ),
+ 
++/* Reported by Jaak Ristioja <Ristioja at gmail.com> */
++UNUSUAL_DEV( 0x0a17, 0x006e, 0x0100, 0x0100,
++		"Pentax",
++		"K10D",
++		US_SC_DEVICE, US_PR_DEVICE, NULL,
++		US_FL_FIX_CAPACITY ),
++
+ /* These are virtual windows driver CDs, which the zd1211rw driver
+  * automatically converts into WLAN devices. */
+ UNUSUAL_DEV( 0x0ace, 0x2011, 0x0101, 0x0101,
+diff --git a/fs/affs/file.c b/fs/affs/file.c
+index 1377b12..9246cb4 100644
+--- a/fs/affs/file.c
++++ b/fs/affs/file.c
+@@ -628,7 +628,7 @@ static int affs_write_begin_ofs(struct file *file, struct address_space *mapping
+ 	}
+ 
+ 	index = pos >> PAGE_CACHE_SHIFT;
+-	page = __grab_cache_page(mapping, index);
++	page = grab_cache_page_write_begin(mapping, index, flags);
+ 	if (!page)
+ 		return -ENOMEM;
+ 	*pagep = page;
+diff --git a/fs/afs/write.c b/fs/afs/write.c
+index d6b85da..3fb36d4 100644
+--- a/fs/afs/write.c
++++ b/fs/afs/write.c
+@@ -144,7 +144,7 @@ int afs_write_begin(struct file *file, struct address_space *mapping,
+ 	candidate->state = AFS_WBACK_PENDING;
+ 	init_waitqueue_head(&candidate->waitq);
+ 
+-	page = __grab_cache_page(mapping, index);
++	page = grab_cache_page_write_begin(mapping, index, flags);
+ 	if (!page) {
+ 		kfree(candidate);
+ 		return -ENOMEM;
+diff --git a/fs/aio.c b/fs/aio.c
+index f658441..048648d 100644
+--- a/fs/aio.c
++++ b/fs/aio.c
+@@ -1258,7 +1258,7 @@ static void io_destroy(struct kioctx *ioctx)
+  *	pointer is passed for ctxp.  Will fail with -ENOSYS if not
+  *	implemented.
+  */
+-asmlinkage long sys_io_setup(unsigned nr_events, aio_context_t __user *ctxp)
++SYSCALL_DEFINE2(io_setup, unsigned, nr_events, aio_context_t __user *, ctxp)
+ {
+ 	struct kioctx *ioctx = NULL;
+ 	unsigned long ctx;
+@@ -1296,7 +1296,7 @@ out:
+  *	implemented.  May fail with -EFAULT if the context pointed to
+  *	is invalid.
+  */
+-asmlinkage long sys_io_destroy(aio_context_t ctx)
++SYSCALL_DEFINE1(io_destroy, aio_context_t, ctx)
+ {
+ 	struct kioctx *ioctx = lookup_ioctx(ctx);
+ 	if (likely(NULL != ioctx)) {
+@@ -1650,8 +1650,8 @@ out_put_req:
+  *	are available to queue any iocbs.  Will return 0 if nr is 0.  Will
+  *	fail with -ENOSYS if not implemented.
+  */
+-asmlinkage long sys_io_submit(aio_context_t ctx_id, long nr,
+-			      struct iocb __user * __user *iocbpp)
++SYSCALL_DEFINE3(io_submit, aio_context_t, ctx_id, long, nr,
++		struct iocb __user * __user *, iocbpp)
+ {
+ 	struct kioctx *ctx;
+ 	long ret = 0;
+@@ -1725,8 +1725,8 @@ static struct kiocb *lookup_kiocb(struct kioctx *ctx, struct iocb __user *iocb,
+  *	invalid.  May fail with -EAGAIN if the iocb specified was not
+  *	cancelled.  Will fail with -ENOSYS if not implemented.
+  */
+-asmlinkage long sys_io_cancel(aio_context_t ctx_id, struct iocb __user *iocb,
+-			      struct io_event __user *result)
++SYSCALL_DEFINE3(io_cancel, aio_context_t, ctx_id, struct iocb __user *, iocb,
++		struct io_event __user *, result)
+ {
+ 	int (*cancel)(struct kiocb *iocb, struct io_event *res);
+ 	struct kioctx *ctx;
+@@ -1787,11 +1787,11 @@ asmlinkage long sys_io_cancel(aio_context_t ctx_id, struct iocb __user *iocb,
+  *	will be updated if not NULL and the operation blocks.  Will fail
+  *	with -ENOSYS if not implemented.
+  */
+-asmlinkage long sys_io_getevents(aio_context_t ctx_id,
+-				 long min_nr,
+-				 long nr,
+-				 struct io_event __user *events,
+-				 struct timespec __user *timeout)
++SYSCALL_DEFINE5(io_getevents, aio_context_t, ctx_id,
++		long, min_nr,
++		long, nr,
++		struct io_event __user *, events,
++		struct timespec __user *, timeout)
+ {
+ 	struct kioctx *ioctx = lookup_ioctx(ctx_id);
+ 	long ret = -EINVAL;
+diff --git a/fs/buffer.c b/fs/buffer.c
+index 10179cf..5e62011 100644
+--- a/fs/buffer.c
++++ b/fs/buffer.c
+@@ -1988,7 +1988,7 @@ int block_write_begin(struct file *file, struct address_space *mapping,
+ 	page = *pagep;
+ 	if (page == NULL) {
+ 		ownpage = 1;
+-		page = __grab_cache_page(mapping, index);
++		page = grab_cache_page_write_begin(mapping, index, flags);
+ 		if (!page) {
+ 			status = -ENOMEM;
+ 			goto out;
+@@ -2494,7 +2494,7 @@ int nobh_write_begin(struct file *file, struct address_space *mapping,
+ 	from = pos & (PAGE_CACHE_SIZE - 1);
+ 	to = from + len;
+ 
+-	page = __grab_cache_page(mapping, index);
++	page = grab_cache_page_write_begin(mapping, index, flags);
+ 	if (!page)
+ 		return -ENOMEM;
+ 	*pagep = page;
+@@ -3177,7 +3177,7 @@ void block_sync_page(struct page *page)
+  * Use of bdflush() is deprecated and will be removed in a future kernel.
+  * The `pdflush' kernel threads fully replace bdflush daemons and this call.
+  */
+-asmlinkage long sys_bdflush(int func, long data)
++SYSCALL_DEFINE2(bdflush, int, func, long, data)
+ {
+ 	static int msg_count;
+ 
+diff --git a/fs/cifs/cifs_dfs_ref.c b/fs/cifs/cifs_dfs_ref.c
+index e1c1836..85c0a74 100644
+--- a/fs/cifs/cifs_dfs_ref.c
++++ b/fs/cifs/cifs_dfs_ref.c
+@@ -122,7 +122,7 @@ static char *compose_mount_options(const char *sb_mountdata,
+ 				   char **devname)
+ {
+ 	int rc;
+-	char *mountdata;
++	char *mountdata = NULL;
+ 	int md_len;
+ 	char *tkn_e;
+ 	char *srvIP = NULL;
+@@ -136,10 +136,9 @@ static char *compose_mount_options(const char *sb_mountdata,
+ 	*devname = cifs_get_share_name(ref->node_name);
+ 	rc = dns_resolve_server_name_to_ip(*devname, &srvIP);
+ 	if (rc != 0) {
+-		cERROR(1, ("%s: Failed to resolve server part of %s to IP",
+-			  __func__, *devname));
+-		mountdata = ERR_PTR(rc);
+-		goto compose_mount_options_out;
++		cERROR(1, ("%s: Failed to resolve server part of %s to IP: %d",
++			  __func__, *devname, rc));;
++		goto compose_mount_options_err;
+ 	}
+ 	/* md_len = strlen(...) + 12 for 'sep+prefixpath='
+ 	 * assuming that we have 'unc=' and 'ip=' in
+@@ -149,8 +148,8 @@ static char *compose_mount_options(const char *sb_mountdata,
+ 		strlen(ref->node_name) + 12;
+ 	mountdata = kzalloc(md_len+1, GFP_KERNEL);
+ 	if (mountdata == NULL) {
+-		mountdata = ERR_PTR(-ENOMEM);
+-		goto compose_mount_options_out;
++		rc = -ENOMEM;
++		goto compose_mount_options_err;
+ 	}
+ 
+ 	/* copy all options except of unc,ip,prefixpath */
+@@ -197,18 +196,32 @@ static char *compose_mount_options(const char *sb_mountdata,
+ 
+ 	/* find & copy prefixpath */
+ 	tkn_e = strchr(ref->node_name + 2, '\\');
+-	if (tkn_e == NULL) /* invalid unc, missing share name*/
+-		goto compose_mount_options_out;
++	if (tkn_e == NULL) {
++		/* invalid unc, missing share name*/
++		rc = -EINVAL;
++		goto compose_mount_options_err;
++	}
+ 
++	/*
++	 * this function gives us a path with a double backslash prefix. We
++	 * require a single backslash for DFS. Temporarily increment fullpath
++	 * to put it in the proper form and decrement before freeing it.
++	 */
+ 	fullpath = build_path_from_dentry(dentry);
++	if (!fullpath) {
++		rc = -ENOMEM;
++		goto compose_mount_options_err;
++	}
++	++fullpath;
+ 	tkn_e = strchr(tkn_e + 1, '\\');
+-	if (tkn_e || strlen(fullpath) - (ref->path_consumed)) {
++	if (tkn_e || (strlen(fullpath) - ref->path_consumed)) {
+ 		strncat(mountdata, &sep, 1);
+ 		strcat(mountdata, "prefixpath=");
+ 		if (tkn_e)
+ 			strcat(mountdata, tkn_e + 1);
+-		strcat(mountdata, fullpath + (ref->path_consumed));
++		strcat(mountdata, fullpath + ref->path_consumed);
+ 	}
++	--fullpath;
+ 	kfree(fullpath);
+ 
+ 	/*cFYI(1,("%s: parent mountdata: %s", __func__,sb_mountdata));*/
+@@ -217,6 +230,11 @@ static char *compose_mount_options(const char *sb_mountdata,
+ compose_mount_options_out:
+ 	kfree(srvIP);
+ 	return mountdata;
++
++compose_mount_options_err:
++	kfree(mountdata);
++	mountdata = ERR_PTR(rc);
++	goto compose_mount_options_out;
+ }
+ 
+ 
+@@ -309,13 +327,19 @@ cifs_dfs_follow_mountpoint(struct dentry *dentry, struct nameidata *nd)
+ 		goto out_err;
+ 	}
+ 
++	/*
++	 * The MSDFS spec states that paths in DFS referral requests and
++	 * responses must be prefixed by a single '\' character instead of
++	 * the double backslashes usually used in the UNC. This function
++	 * gives us the latter, so we must adjust the result.
++	 */
+ 	full_path = build_path_from_dentry(dentry);
+ 	if (full_path == NULL) {
+ 		rc = -ENOMEM;
+ 		goto out_err;
+ 	}
+ 
+-	rc = get_dfs_path(xid, ses , full_path, cifs_sb->local_nls,
++	rc = get_dfs_path(xid, ses , full_path + 1, cifs_sb->local_nls,
+ 		&num_referrals, &referrals,
+ 		cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MAP_SPECIAL_CHR);
+ 
+diff --git a/fs/cifs/file.c b/fs/cifs/file.c
+index f0a81e6..586d2be 100644
+--- a/fs/cifs/file.c
++++ b/fs/cifs/file.c
+@@ -2073,7 +2073,7 @@ static int cifs_write_begin(struct file *file, struct address_space *mapping,
+ 
+ 	cFYI(1, ("write_begin from %lld len %d", (long long)pos, len));
+ 
+-	page = __grab_cache_page(mapping, index);
++	page = grab_cache_page_write_begin(mapping, index, flags);
+ 	if (!page) {
+ 		rc = -ENOMEM;
+ 		goto out;
+diff --git a/fs/compat.c b/fs/compat.c
+index e5f49f5..ce35592 100644
+--- a/fs/compat.c
++++ b/fs/compat.c
+@@ -1697,7 +1697,7 @@ asmlinkage long compat_sys_select(int n, compat_ulong_t __user *inp,
+ }
+ 
+ #ifdef HAVE_SET_RESTORE_SIGMASK
+-asmlinkage long compat_sys_pselect7(int n, compat_ulong_t __user *inp,
++static long do_compat_pselect(int n, compat_ulong_t __user *inp,
+ 	compat_ulong_t __user *outp, compat_ulong_t __user *exp,
+ 	struct compat_timespec __user *tsp, compat_sigset_t __user *sigmask,
+ 	compat_size_t sigsetsize)
+@@ -1763,8 +1763,8 @@ asmlinkage long compat_sys_pselect6(int n, compat_ulong_t __user *inp,
+ 				(compat_size_t __user *)(sig+sizeof(up))))
+ 			return -EFAULT;
+ 	}
+-	return compat_sys_pselect7(n, inp, outp, exp, tsp, compat_ptr(up),
+-					sigsetsize);
++	return do_compat_pselect(n, inp, outp, exp, tsp, compat_ptr(up),
++				 sigsetsize);
+ }
+ 
+ asmlinkage long compat_sys_ppoll(struct pollfd __user *ufds,
+diff --git a/fs/dcache.c b/fs/dcache.c
+index a1d86c7..ca1fd3b 100644
+--- a/fs/dcache.c
++++ b/fs/dcache.c
+@@ -1620,8 +1620,11 @@ static void switch_names(struct dentry *dentry, struct dentry *target)
+ 			 */
+ 			memcpy(dentry->d_iname, target->d_name.name,
+ 					target->d_name.len + 1);
++			dentry->d_name.len = target->d_name.len;
++			return;
+ 		}
+ 	}
++	do_switch(dentry->d_name.len, target->d_name.len);
+ }
+ 
+ /*
+@@ -1681,7 +1684,6 @@ already_unhashed:
+ 
+ 	/* Switch the names.. */
+ 	switch_names(dentry, target);
+-	do_switch(dentry->d_name.len, target->d_name.len);
+ 	do_switch(dentry->d_name.hash, target->d_name.hash);
+ 
+ 	/* ... and switch the parents */
+@@ -1791,7 +1793,6 @@ static void __d_materialise_dentry(struct dentry *dentry, struct dentry *anon)
+ 	struct dentry *dparent, *aparent;
+ 
+ 	switch_names(dentry, anon);
+-	do_switch(dentry->d_name.len, anon->d_name.len);
+ 	do_switch(dentry->d_name.hash, anon->d_name.hash);
+ 
+ 	dparent = dentry->d_parent;
+@@ -2095,7 +2096,7 @@ Elong:
+  *		return NULL;
+  *	}
+  */
+-asmlinkage long sys_getcwd(char __user *buf, unsigned long size)
++SYSCALL_DEFINE2(getcwd, char __user *, buf, unsigned long, size)
+ {
+ 	int error;
+ 	struct path pwd, root;
+diff --git a/fs/dcookies.c b/fs/dcookies.c
+index 855d4b1..f0da95b 100644
+--- a/fs/dcookies.c
++++ b/fs/dcookies.c
+@@ -140,7 +140,7 @@ out:
+ /* And here is where the userspace process can look up the cookie value
+  * to retrieve the path.
+  */
+-asmlinkage long sys_lookup_dcookie(u64 cookie64, char __user * buf, size_t len)
++SYSCALL_DEFINE(lookup_dcookie)(u64 cookie64, char __user * buf, size_t len)
+ {
+ 	unsigned long cookie = (unsigned long)cookie64;
+ 	int err = -EINVAL;
+@@ -193,7 +193,13 @@ out:
+ 	mutex_unlock(&dcookie_mutex);
+ 	return err;
+ }
+-
++#ifdef CONFIG_HAVE_SYSCALL_WRAPPERS
++asmlinkage long SyS_lookup_dcookie(u64 cookie64, long buf, long len)
++{
++	return SYSC_lookup_dcookie(cookie64, (char __user *) buf, (size_t) len);
++}
++SYSCALL_ALIAS(sys_lookup_dcookie, SyS_lookup_dcookie);
++#endif
+ 
+ static int dcookie_init(void)
+ {
+diff --git a/fs/ecryptfs/inode.c b/fs/ecryptfs/inode.c
+index 89209f0..5e78fc1 100644
+--- a/fs/ecryptfs/inode.c
++++ b/fs/ecryptfs/inode.c
+@@ -673,10 +673,11 @@ static void *ecryptfs_follow_link(struct dentry *dentry, struct nameidata *nd)
+ 	ecryptfs_printk(KERN_DEBUG, "Calling readlink w/ "
+ 			"dentry->d_name.name = [%s]\n", dentry->d_name.name);
+ 	rc = dentry->d_inode->i_op->readlink(dentry, (char __user *)buf, len);
+-	buf[rc] = '\0';
+ 	set_fs(old_fs);
+ 	if (rc < 0)
+ 		goto out_free;
++	else
++		buf[rc] = '\0';
+ 	rc = 0;
+ 	nd_set_link(nd, buf);
+ 	goto out;
+diff --git a/fs/ecryptfs/mmap.c b/fs/ecryptfs/mmap.c
+index 04d7b3f..46cec2b 100644
+--- a/fs/ecryptfs/mmap.c
++++ b/fs/ecryptfs/mmap.c
+@@ -288,7 +288,7 @@ static int ecryptfs_write_begin(struct file *file,
+ 	loff_t prev_page_end_size;
+ 	int rc = 0;
+ 
+-	page = __grab_cache_page(mapping, index);
++	page = grab_cache_page_write_begin(mapping, index, flags);
+ 	if (!page)
+ 		return -ENOMEM;
+ 	*pagep = page;
+diff --git a/fs/eventfd.c b/fs/eventfd.c
+index 08bf558..5de2c2d 100644
+--- a/fs/eventfd.c
++++ b/fs/eventfd.c
+@@ -198,7 +198,7 @@ struct file *eventfd_fget(int fd)
+ 	return file;
+ }
+ 
+-asmlinkage long sys_eventfd2(unsigned int count, int flags)
++SYSCALL_DEFINE2(eventfd2, unsigned int, count, int, flags)
+ {
+ 	int fd;
+ 	struct eventfd_ctx *ctx;
+@@ -228,8 +228,7 @@ asmlinkage long sys_eventfd2(unsigned int count, int flags)
+ 	return fd;
+ }
+ 
+-asmlinkage long sys_eventfd(unsigned int count)
++SYSCALL_DEFINE1(eventfd, unsigned int, count)
+ {
+ 	return sys_eventfd2(count, 0);
+ }
+-
+diff --git a/fs/eventpoll.c b/fs/eventpoll.c
+index 96355d5..ba2f9ec 100644
+--- a/fs/eventpoll.c
++++ b/fs/eventpoll.c
+@@ -1110,7 +1110,7 @@ retry:
+ /*
+  * Open an eventpoll file descriptor.
+  */
+-asmlinkage long sys_epoll_create1(int flags)
++SYSCALL_DEFINE1(epoll_create1, int, flags)
+ {
+ 	int error, fd = -1;
+ 	struct eventpoll *ep;
+@@ -1150,7 +1150,7 @@ error_return:
+ 	return fd;
+ }
+ 
+-asmlinkage long sys_epoll_create(int size)
++SYSCALL_DEFINE1(epoll_create, int, size)
+ {
+ 	if (size < 0)
+ 		return -EINVAL;
+@@ -1163,8 +1163,8 @@ asmlinkage long sys_epoll_create(int size)
+  * the eventpoll file that enables the insertion/removal/change of
+  * file descriptors inside the interest set.
+  */
+-asmlinkage long sys_epoll_ctl(int epfd, int op, int fd,
+-			      struct epoll_event __user *event)
++SYSCALL_DEFINE4(epoll_ctl, int, epfd, int, op, int, fd,
++		struct epoll_event __user *, event)
+ {
+ 	int error;
+ 	struct file *file, *tfile;
+@@ -1261,8 +1261,8 @@ error_return:
+  * Implement the event wait interface for the eventpoll file. It is the kernel
+  * part of the user space epoll_wait(2).
+  */
+-asmlinkage long sys_epoll_wait(int epfd, struct epoll_event __user *events,
+-			       int maxevents, int timeout)
++SYSCALL_DEFINE4(epoll_wait, int, epfd, struct epoll_event __user *, events,
++		int, maxevents, int, timeout)
+ {
+ 	int error;
+ 	struct file *file;
+@@ -1319,9 +1319,9 @@ error_return:
+  * Implement the event wait interface for the eventpoll file. It is the kernel
+  * part of the user space epoll_pwait(2).
+  */
+-asmlinkage long sys_epoll_pwait(int epfd, struct epoll_event __user *events,
+-		int maxevents, int timeout, const sigset_t __user *sigmask,
+-		size_t sigsetsize)
++SYSCALL_DEFINE6(epoll_pwait, int, epfd, struct epoll_event __user *, events,
++		int, maxevents, int, timeout, const sigset_t __user *, sigmask,
++		size_t, sigsetsize)
+ {
+ 	int error;
+ 	sigset_t ksigmask, sigsaved;
+diff --git a/fs/exec.c b/fs/exec.c
+index ec5df9a..c9f22cb 100644
+--- a/fs/exec.c
++++ b/fs/exec.c
+@@ -102,7 +102,7 @@ static inline void put_binfmt(struct linux_binfmt * fmt)
+  *
+  * Also note that we take the address to load from from the file itself.
+  */
+-asmlinkage long sys_uselib(const char __user * library)
++SYSCALL_DEFINE1(uselib, const char __user *, library)
+ {
+ 	struct file *file;
+ 	struct nameidata nd;
+diff --git a/fs/ext3/inode.c b/fs/ext3/inode.c
+index f8424ad..846e8ca 100644
+--- a/fs/ext3/inode.c
++++ b/fs/ext3/inode.c
+@@ -1160,7 +1160,7 @@ static int ext3_write_begin(struct file *file, struct address_space *mapping,
+ 	to = from + len;
+ 
+ retry:
+-	page = __grab_cache_page(mapping, index);
++	page = grab_cache_page_write_begin(mapping, index, flags);
+ 	if (!page)
+ 		return -ENOMEM;
+ 	*pagep = page;
+diff --git a/fs/ext3/namei.c b/fs/ext3/namei.c
+index 3e5edc9..a48e965 100644
+--- a/fs/ext3/namei.c
++++ b/fs/ext3/namei.c
+@@ -2170,8 +2170,7 @@ retry:
+ 		 * We have a transaction open.  All is sweetness.  It also sets
+ 		 * i_size in generic_commit_write().
+ 		 */
+-		err = __page_symlink(inode, symname, l,
+-				mapping_gfp_mask(inode->i_mapping) & ~__GFP_FS);
++		err = __page_symlink(inode, symname, l, 1);
+ 		if (err) {
+ 			drop_nlink(inode);
+ 			ext3_mark_inode_dirty(handle, inode);
+diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
+index be21a5a..8e46b19 100644
+--- a/fs/ext4/inode.c
++++ b/fs/ext4/inode.c
+@@ -1345,7 +1345,7 @@ retry:
+ 		goto out;
+ 	}
+ 
+-	page = __grab_cache_page(mapping, index);
++	page = grab_cache_page_write_begin(mapping, index, flags);
+ 	if (!page) {
+ 		ext4_journal_stop(handle);
+ 		ret = -ENOMEM;
+@@ -2549,7 +2549,7 @@ retry:
+ 		goto out;
+ 	}
+ 
+-	page = __grab_cache_page(mapping, index);
++	page = grab_cache_page_write_begin(mapping, index, flags);
+ 	if (!page) {
+ 		ext4_journal_stop(handle);
+ 		ret = -ENOMEM;
+diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c
+index 63adcb7..92c8397 100644
+--- a/fs/ext4/namei.c
++++ b/fs/ext4/namei.c
+@@ -2208,8 +2208,7 @@ retry:
+ 		 * We have a transaction open.  All is sweetness.  It also sets
+ 		 * i_size in generic_commit_write().
+ 		 */
+-		err = __page_symlink(inode, symname, l,
+-				mapping_gfp_mask(inode->i_mapping) & ~__GFP_FS);
++		err = __page_symlink(inode, symname, l, 1);
+ 		if (err) {
+ 			clear_nlink(inode);
+ 			ext4_mark_inode_dirty(handle, inode);
+diff --git a/fs/fcntl.c b/fs/fcntl.c
+index 549daf8..08a109b 100644
+--- a/fs/fcntl.c
++++ b/fs/fcntl.c
+@@ -50,7 +50,7 @@ static int get_close_on_exec(unsigned int fd)
+ 	return res;
+ }
+ 
+-asmlinkage long sys_dup3(unsigned int oldfd, unsigned int newfd, int flags)
++SYSCALL_DEFINE3(dup3, unsigned int, oldfd, unsigned int, newfd, int, flags)
+ {
+ 	int err = -EBADF;
+ 	struct file * file, *tofree;
+@@ -113,7 +113,7 @@ out_unlock:
+ 	return err;
+ }
+ 
+-asmlinkage long sys_dup2(unsigned int oldfd, unsigned int newfd)
++SYSCALL_DEFINE2(dup2, unsigned int, oldfd, unsigned int, newfd)
+ {
+ 	if (unlikely(newfd == oldfd)) { /* corner case */
+ 		struct files_struct *files = current->files;
+@@ -126,7 +126,7 @@ asmlinkage long sys_dup2(unsigned int oldfd, unsigned int newfd)
+ 	return sys_dup3(oldfd, newfd, 0);
+ }
+ 
+-asmlinkage long sys_dup(unsigned int fildes)
++SYSCALL_DEFINE1(dup, unsigned int, fildes)
+ {
+ 	int ret = -EBADF;
+ 	struct file *file = fget(fildes);
+@@ -334,7 +334,7 @@ static long do_fcntl(int fd, unsigned int cmd, unsigned long arg,
+ 	return err;
+ }
+ 
+-asmlinkage long sys_fcntl(unsigned int fd, unsigned int cmd, unsigned long arg)
++SYSCALL_DEFINE3(fcntl, unsigned int, fd, unsigned int, cmd, unsigned long, arg)
+ {	
+ 	struct file *filp;
+ 	long err = -EBADF;
+@@ -357,7 +357,8 @@ out:
+ }
+ 
+ #if BITS_PER_LONG == 32
+-asmlinkage long sys_fcntl64(unsigned int fd, unsigned int cmd, unsigned long arg)
++SYSCALL_DEFINE3(fcntl64, unsigned int, fd, unsigned int, cmd,
++		unsigned long, arg)
+ {	
+ 	struct file * filp;
+ 	long err;
+diff --git a/fs/filesystems.c b/fs/filesystems.c
+index d0e20ce..ee44dc8 100644
+--- a/fs/filesystems.c
++++ b/fs/filesystems.c
+@@ -179,7 +179,7 @@ static int fs_maxindex(void)
+ /*
+  * Whee.. Weird sysv syscall. 
+  */
+-asmlinkage long sys_sysfs(int option, unsigned long arg1, unsigned long arg2)
++SYSCALL_DEFINE3(sysfs, int, option, unsigned long, arg1, unsigned long, arg2)
+ {
+ 	int retval = -EINVAL;
+ 
+diff --git a/fs/fuse/file.c b/fs/fuse/file.c
+index 34930a9..4c9ee70 100644
+--- a/fs/fuse/file.c
++++ b/fs/fuse/file.c
+@@ -646,7 +646,7 @@ static int fuse_write_begin(struct file *file, struct address_space *mapping,
+ {
+ 	pgoff_t index = pos >> PAGE_CACHE_SHIFT;
+ 
+-	*pagep = __grab_cache_page(mapping, index);
++	*pagep = grab_cache_page_write_begin(mapping, index, flags);
+ 	if (!*pagep)
+ 		return -ENOMEM;
+ 	return 0;
+@@ -779,7 +779,7 @@ static ssize_t fuse_fill_write_pages(struct fuse_req *req,
+ 			break;
+ 
+ 		err = -ENOMEM;
+-		page = __grab_cache_page(mapping, index);
++		page = grab_cache_page_write_begin(mapping, index, 0);
+ 		if (!page)
+ 			break;
+ 
+diff --git a/fs/gfs2/ops_address.c b/fs/gfs2/ops_address.c
+index 2756381..15f710f 100644
+--- a/fs/gfs2/ops_address.c
++++ b/fs/gfs2/ops_address.c
+@@ -675,7 +675,7 @@ static int gfs2_write_begin(struct file *file, struct address_space *mapping,
+ 		goto out_trans_fail;
+ 
+ 	error = -ENOMEM;
+-	page = __grab_cache_page(mapping, index);
++	page = grab_cache_page_write_begin(mapping, index, flags);
+ 	*pagep = page;
+ 	if (unlikely(!page))
+ 		goto out_endtrans;
+diff --git a/fs/hostfs/hostfs_kern.c b/fs/hostfs/hostfs_kern.c
+index 3a31451..5c538e0 100644
+--- a/fs/hostfs/hostfs_kern.c
++++ b/fs/hostfs/hostfs_kern.c
+@@ -501,7 +501,7 @@ int hostfs_write_begin(struct file *file, struct address_space *mapping,
+ {
+ 	pgoff_t index = pos >> PAGE_CACHE_SHIFT;
+ 
+-	*pagep = __grab_cache_page(mapping, index);
++	*pagep = grab_cache_page_write_begin(mapping, index, flags);
+ 	if (!*pagep)
+ 		return -ENOMEM;
+ 	return 0;
+diff --git a/fs/inotify_user.c b/fs/inotify_user.c
+index d367e9b..a7aea80 100644
+--- a/fs/inotify_user.c
++++ b/fs/inotify_user.c
+@@ -576,7 +576,7 @@ static const struct inotify_operations inotify_user_ops = {
+ 	.destroy_watch	= free_inotify_user_watch,
+ };
+ 
+-asmlinkage long sys_inotify_init1(int flags)
++SYSCALL_DEFINE1(inotify_init1, int, flags)
+ {
+ 	struct inotify_device *dev;
+ 	struct inotify_handle *ih;
+@@ -655,12 +655,13 @@ out_put_fd:
+ 	return ret;
+ }
+ 
+-asmlinkage long sys_inotify_init(void)
++SYSCALL_DEFINE0(inotify_init)
+ {
+ 	return sys_inotify_init1(0);
+ }
+ 
+-asmlinkage long sys_inotify_add_watch(int fd, const char __user *pathname, u32 mask)
++SYSCALL_DEFINE3(inotify_add_watch, int, fd, const char __user *, pathname,
++		u32, mask)
+ {
+ 	struct inode *inode;
+ 	struct inotify_device *dev;
+@@ -704,7 +705,7 @@ fput_and_out:
+ 	return ret;
+ }
+ 
+-asmlinkage long sys_inotify_rm_watch(int fd, u32 wd)
++SYSCALL_DEFINE2(inotify_rm_watch, int, fd, __s32, wd)
+ {
+ 	struct file *filp;
+ 	struct inotify_device *dev;
+diff --git a/fs/ioctl.c b/fs/ioctl.c
+index 43e8b2c..d3e2130 100644
+--- a/fs/ioctl.c
++++ b/fs/ioctl.c
+@@ -472,7 +472,7 @@ int do_vfs_ioctl(struct file *filp, unsigned int fd, unsigned int cmd,
+ 	return error;
+ }
+ 
+-asmlinkage long sys_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg)
++SYSCALL_DEFINE3(ioctl, unsigned int, fd, unsigned int, cmd, unsigned long, arg)
+ {
+ 	struct file *filp;
+ 	int error = -EBADF;
+diff --git a/fs/ioprio.c b/fs/ioprio.c
+index da3cc46..3715d7d 100644
+--- a/fs/ioprio.c
++++ b/fs/ioprio.c
+@@ -65,7 +65,7 @@ static int set_task_ioprio(struct task_struct *task, int ioprio)
+ 	return err;
+ }
+ 
+-asmlinkage long sys_ioprio_set(int which, int who, int ioprio)
++SYSCALL_DEFINE3(ioprio_set, int, which, int, who, int, ioprio)
+ {
+ 	int class = IOPRIO_PRIO_CLASS(ioprio);
+ 	int data = IOPRIO_PRIO_DATA(ioprio);
+@@ -181,7 +181,7 @@ int ioprio_best(unsigned short aprio, unsigned short bprio)
+ 		return aprio;
+ }
+ 
+-asmlinkage long sys_ioprio_get(int which, int who)
++SYSCALL_DEFINE2(ioprio_get, int, which, int, who)
+ {
+ 	struct task_struct *g, *p;
+ 	struct user_struct *user;
+@@ -245,4 +245,3 @@ asmlinkage long sys_ioprio_get(int which, int who)
+ 	read_unlock(&tasklist_lock);
+ 	return ret;
+ }
+-
+diff --git a/fs/jffs2/file.c b/fs/jffs2/file.c
+index 5a98aa8..5edc2bf 100644
+--- a/fs/jffs2/file.c
++++ b/fs/jffs2/file.c
+@@ -132,7 +132,7 @@ static int jffs2_write_begin(struct file *filp, struct address_space *mapping,
+ 	uint32_t pageofs = index << PAGE_CACHE_SHIFT;
+ 	int ret = 0;
+ 
+-	pg = __grab_cache_page(mapping, index);
++	pg = grab_cache_page_write_begin(mapping, index, flags);
+ 	if (!pg)
+ 		return -ENOMEM;
+ 	*pagep = pg;
+diff --git a/fs/libfs.c b/fs/libfs.c
+index e960a83..bdaec17 100644
+--- a/fs/libfs.c
++++ b/fs/libfs.c
+@@ -360,7 +360,7 @@ int simple_write_begin(struct file *file, struct address_space *mapping,
+ 	index = pos >> PAGE_CACHE_SHIFT;
+ 	from = pos & (PAGE_CACHE_SIZE - 1);
+ 
+-	page = __grab_cache_page(mapping, index);
++	page = grab_cache_page_write_begin(mapping, index, flags);
+ 	if (!page)
+ 		return -ENOMEM;
+ 
+diff --git a/fs/locks.c b/fs/locks.c
+index 09062e3..ec45f4d 100644
+--- a/fs/locks.c
++++ b/fs/locks.c
+@@ -1564,7 +1564,7 @@ EXPORT_SYMBOL(flock_lock_file_wait);
+  *	%LOCK_MAND can be combined with %LOCK_READ or %LOCK_WRITE to allow other
+  *	processes read and write access respectively.
+  */
+-asmlinkage long sys_flock(unsigned int fd, unsigned int cmd)
++SYSCALL_DEFINE2(flock, unsigned int, fd, unsigned int, cmd)
+ {
+ 	struct file *filp;
+ 	struct file_lock *lock;
+diff --git a/fs/minix/dir.c b/fs/minix/dir.c
+index f704338..d4946c4 100644
+--- a/fs/minix/dir.c
++++ b/fs/minix/dir.c
+@@ -280,7 +280,7 @@ int minix_add_link(struct dentry *dentry, struct inode *inode)
+ 	return -EINVAL;
+ 
+ got_it:
+-	pos = (page->index >> PAGE_CACHE_SHIFT) + p - (char*)page_address(page);
++	pos = page_offset(page) + p - (char *)page_address(page);
+ 	err = __minix_write_begin(NULL, page->mapping, pos, sbi->s_dirsize,
+ 					AOP_FLAG_UNINTERRUPTIBLE, &page, NULL);
+ 	if (err)
+diff --git a/fs/namei.c b/fs/namei.c
+index d34e0f9..3ca2574 100644
+--- a/fs/namei.c
++++ b/fs/namei.c
+@@ -1969,8 +1969,8 @@ static int may_mknod(mode_t mode)
+ 	}
+ }
+ 
+-asmlinkage long sys_mknodat(int dfd, const char __user *filename, int mode,
+-				unsigned dev)
++SYSCALL_DEFINE4(mknodat, int, dfd, const char __user *, filename, int, mode,
++		unsigned, dev)
+ {
+ 	int error;
+ 	char *tmp;
+@@ -2020,7 +2020,7 @@ out_unlock:
+ 	return error;
+ }
+ 
+-asmlinkage long sys_mknod(const char __user *filename, int mode, unsigned dev)
++SYSCALL_DEFINE3(mknod, const char __user *, filename, int, mode, unsigned, dev)
+ {
+ 	return sys_mknodat(AT_FDCWD, filename, mode, dev);
+ }
+@@ -2047,7 +2047,7 @@ int vfs_mkdir(struct inode *dir, struct dentry *dentry, int mode)
+ 	return error;
+ }
+ 
+-asmlinkage long sys_mkdirat(int dfd, const char __user *pathname, int mode)
++SYSCALL_DEFINE3(mkdirat, int, dfd, const char __user *, pathname, int, mode)
+ {
+ 	int error = 0;
+ 	char * tmp;
+@@ -2080,7 +2080,7 @@ out_err:
+ 	return error;
+ }
+ 
+-asmlinkage long sys_mkdir(const char __user *pathname, int mode)
++SYSCALL_DEFINE2(mkdir, const char __user *, pathname, int, mode)
+ {
+ 	return sys_mkdirat(AT_FDCWD, pathname, mode);
+ }
+@@ -2190,7 +2190,7 @@ exit1:
+ 	return error;
+ }
+ 
+-asmlinkage long sys_rmdir(const char __user *pathname)
++SYSCALL_DEFINE1(rmdir, const char __user *, pathname)
+ {
+ 	return do_rmdir(AT_FDCWD, pathname);
+ }
+@@ -2282,7 +2282,7 @@ slashes:
+ 	goto exit2;
+ }
+ 
+-asmlinkage long sys_unlinkat(int dfd, const char __user *pathname, int flag)
++SYSCALL_DEFINE3(unlinkat, int, dfd, const char __user *, pathname, int, flag)
+ {
+ 	if ((flag & ~AT_REMOVEDIR) != 0)
+ 		return -EINVAL;
+@@ -2293,7 +2293,7 @@ asmlinkage long sys_unlinkat(int dfd, const char __user *pathname, int flag)
+ 	return do_unlinkat(dfd, pathname);
+ }
+ 
+-asmlinkage long sys_unlink(const char __user *pathname)
++SYSCALL_DEFINE1(unlink, const char __user *, pathname)
+ {
+ 	return do_unlinkat(AT_FDCWD, pathname);
+ }
+@@ -2319,8 +2319,8 @@ int vfs_symlink(struct inode *dir, struct dentry *dentry, const char *oldname)
+ 	return error;
+ }
+ 
+-asmlinkage long sys_symlinkat(const char __user *oldname,
+-			      int newdfd, const char __user *newname)
++SYSCALL_DEFINE3(symlinkat, const char __user *, oldname,
++		int, newdfd, const char __user *, newname)
+ {
+ 	int error;
+ 	char *from;
+@@ -2357,7 +2357,7 @@ out_putname:
+ 	return error;
+ }
+ 
+-asmlinkage long sys_symlink(const char __user *oldname, const char __user *newname)
++SYSCALL_DEFINE2(symlink, const char __user *, oldname, const char __user *, newname)
+ {
+ 	return sys_symlinkat(oldname, AT_FDCWD, newname);
+ }
+@@ -2409,9 +2409,8 @@ int vfs_link(struct dentry *old_dentry, struct inode *dir, struct dentry *new_de
+  * with linux 2.0, and to avoid hard-linking to directories
+  * and other special files.  --ADM
+  */
+-asmlinkage long sys_linkat(int olddfd, const char __user *oldname,
+-			   int newdfd, const char __user *newname,
+-			   int flags)
++SYSCALL_DEFINE5(linkat, int, olddfd, const char __user *, oldname,
++		int, newdfd, const char __user *, newname, int, flags)
+ {
+ 	struct dentry *new_dentry;
+ 	struct nameidata nd;
+@@ -2456,7 +2455,7 @@ out:
+ 	return error;
+ }
+ 
+-asmlinkage long sys_link(const char __user *oldname, const char __user *newname)
++SYSCALL_DEFINE2(link, const char __user *, oldname, const char __user *, newname)
+ {
+ 	return sys_linkat(AT_FDCWD, oldname, AT_FDCWD, newname, 0);
+ }
+@@ -2607,8 +2606,8 @@ int vfs_rename(struct inode *old_dir, struct dentry *old_dentry,
+ 	return error;
+ }
+ 
+-asmlinkage long sys_renameat(int olddfd, const char __user *oldname,
+-			     int newdfd, const char __user *newname)
++SYSCALL_DEFINE4(renameat, int, olddfd, const char __user *, oldname,
++		int, newdfd, const char __user *, newname)
+ {
+ 	struct dentry *old_dir, *new_dir;
+ 	struct dentry *old_dentry, *new_dentry;
+@@ -2696,7 +2695,7 @@ exit:
+ 	return error;
+ }
+ 
+-asmlinkage long sys_rename(const char __user *oldname, const char __user *newname)
++SYSCALL_DEFINE2(rename, const char __user *, oldname, const char __user *, newname)
+ {
+ 	return sys_renameat(AT_FDCWD, oldname, AT_FDCWD, newname);
+ }
+@@ -2786,18 +2785,23 @@ void page_put_link(struct dentry *dentry, struct nameidata *nd, void *cookie)
+ 	}
+ }
+ 
+-int __page_symlink(struct inode *inode, const char *symname, int len,
+-		gfp_t gfp_mask)
++/*
++ * The nofs argument instructs pagecache_write_begin to pass AOP_FLAG_NOFS
++ */
++int __page_symlink(struct inode *inode, const char *symname, int len, int nofs)
+ {
+ 	struct address_space *mapping = inode->i_mapping;
+ 	struct page *page;
+ 	void *fsdata;
+ 	int err;
+ 	char *kaddr;
++	unsigned int flags = AOP_FLAG_UNINTERRUPTIBLE;
++	if (nofs)
++		flags |= AOP_FLAG_NOFS;
+ 
+ retry:
+ 	err = pagecache_write_begin(NULL, mapping, 0, len-1,
+-				AOP_FLAG_UNINTERRUPTIBLE, &page, &fsdata);
++				flags, &page, &fsdata);
+ 	if (err)
+ 		goto fail;
+ 
+@@ -2821,7 +2825,7 @@ fail:
+ int page_symlink(struct inode *inode, const char *symname, int len)
+ {
+ 	return __page_symlink(inode, symname, len,
+-			mapping_gfp_mask(inode->i_mapping));
++			!(mapping_gfp_mask(inode->i_mapping) & __GFP_FS));
+ }
+ 
+ const struct inode_operations page_symlink_inode_operations = {
+diff --git a/fs/namespace.c b/fs/namespace.c
+index 65b3dc8..ff3258b 100644
+--- a/fs/namespace.c
++++ b/fs/namespace.c
+@@ -1128,7 +1128,7 @@ static int do_umount(struct vfsmount *mnt, int flags)
+  * unixes. Our API is identical to OSF/1 to avoid making a mess of AMD
+  */
+ 
+-asmlinkage long sys_umount(char __user * name, int flags)
++SYSCALL_DEFINE2(umount, char __user *, name, int, flags)
+ {
+ 	struct path path;
+ 	int retval;
+@@ -1160,7 +1160,7 @@ out:
+ /*
+  *	The 2.0 compatible umount. No flags.
+  */
+-asmlinkage long sys_oldumount(char __user * name)
++SYSCALL_DEFINE1(oldumount, char __user *, name)
+ {
+ 	return sys_umount(name, 0);
+ }
+@@ -2045,9 +2045,8 @@ struct mnt_namespace *copy_mnt_ns(unsigned long flags, struct mnt_namespace *ns,
+ 	return new_ns;
+ }
+ 
+-asmlinkage long sys_mount(char __user * dev_name, char __user * dir_name,
+-			  char __user * type, unsigned long flags,
+-			  void __user * data)
++SYSCALL_DEFINE5(mount, char __user *, dev_name, char __user *, dir_name,
++		char __user *, type, unsigned long, flags, void __user *, data)
+ {
+ 	int retval;
+ 	unsigned long data_page;
+@@ -2172,8 +2171,8 @@ static void chroot_fs_refs(struct path *old_root, struct path *new_root)
+  *    though, so you may need to say mount --bind /nfs/my_root /nfs/my_root
+  *    first.
+  */
+-asmlinkage long sys_pivot_root(const char __user * new_root,
+-			       const char __user * put_old)
++SYSCALL_DEFINE2(pivot_root, const char __user *, new_root,
++		const char __user *, put_old)
+ {
+ 	struct vfsmount *tmp;
+ 	struct path new, old, parent_path, root_parent, root;
+diff --git a/fs/nfs/file.c b/fs/nfs/file.c
+index d319b49..90f292b 100644
+--- a/fs/nfs/file.c
++++ b/fs/nfs/file.c
+@@ -354,7 +354,7 @@ static int nfs_write_begin(struct file *file, struct address_space *mapping,
+ 		file->f_path.dentry->d_name.name,
+ 		mapping->host->i_ino, len, (long long) pos);
+ 
+-	page = __grab_cache_page(mapping, index);
++	page = grab_cache_page_write_begin(mapping, index, flags);
+ 	if (!page)
+ 		return -ENOMEM;
+ 	*pagep = page;
+diff --git a/fs/nfs/read.c b/fs/nfs/read.c
+index 40d1798..f856004 100644
+--- a/fs/nfs/read.c
++++ b/fs/nfs/read.c
+@@ -533,12 +533,6 @@ readpage_async_filler(void *data, struct page *page)
+ 	unsigned int len;
+ 	int error;
+ 
+-	error = nfs_wb_page(inode, page);
+-	if (error)
+-		goto out_unlock;
+-	if (PageUptodate(page))
+-		goto out_unlock;
+-
+ 	len = nfs_page_length(page);
+ 	if (len == 0)
+ 		return nfs_return_empty_page(page);
+diff --git a/fs/nfsctl.c b/fs/nfsctl.c
+index aed8145..bf2cbd9 100644
+--- a/fs/nfsctl.c
++++ b/fs/nfsctl.c
+@@ -82,8 +82,8 @@ static struct {
+ 	},
+ };
+ 
+-long
+-asmlinkage sys_nfsservctl(int cmd, struct nfsctl_arg __user *arg, void __user *res)
++SYSCALL_DEFINE3(nfsservctl, int, cmd, struct nfsctl_arg __user *, arg,
++		void __user *, res)
+ {
+ 	struct file *file;
+ 	void __user *p = &arg->u;
+diff --git a/fs/open.c b/fs/open.c
+index 83cdb9d..ef64264 100644
+--- a/fs/open.c
++++ b/fs/open.c
+@@ -122,7 +122,7 @@ static int vfs_statfs64(struct dentry *dentry, struct statfs64 *buf)
+ 	return 0;
+ }
+ 
+-asmlinkage long sys_statfs(const char __user *pathname, struct statfs __user * buf)
++SYSCALL_DEFINE2(statfs, const char __user *, pathname, struct statfs __user *, buf)
+ {
+ 	struct path path;
+ 	int error;
+@@ -138,8 +138,7 @@ asmlinkage long sys_statfs(const char __user *pathname, struct statfs __user * b
+ 	return error;
+ }
+ 
+-
+-asmlinkage long sys_statfs64(const char __user *pathname, size_t sz, struct statfs64 __user *buf)
++SYSCALL_DEFINE3(statfs64, const char __user *, pathname, size_t, sz, struct statfs64 __user *, buf)
+ {
+ 	struct path path;
+ 	long error;
+@@ -157,8 +156,7 @@ asmlinkage long sys_statfs64(const char __user *pathname, size_t sz, struct stat
+ 	return error;
+ }
+ 
+-
+-asmlinkage long sys_fstatfs(unsigned int fd, struct statfs __user * buf)
++SYSCALL_DEFINE2(fstatfs, unsigned int, fd, struct statfs __user *, buf)
+ {
+ 	struct file * file;
+ 	struct statfs tmp;
+@@ -176,7 +174,7 @@ out:
+ 	return error;
+ }
+ 
+-asmlinkage long sys_fstatfs64(unsigned int fd, size_t sz, struct statfs64 __user *buf)
++SYSCALL_DEFINE3(fstatfs64, unsigned int, fd, size_t, sz, struct statfs64 __user *, buf)
+ {
+ 	struct file * file;
+ 	struct statfs64 tmp;
+@@ -287,7 +285,7 @@ out:
+ 	return error;
+ }
+ 
+-asmlinkage long sys_truncate(const char __user * path, unsigned long length)
++SYSCALL_DEFINE2(truncate, const char __user *, path, unsigned long, length)
+ {
+ 	/* on 32-bit boxen it will cut the range 2^31--2^32-1 off */
+ 	return do_sys_truncate(path, (long)length);
+@@ -336,7 +334,7 @@ out:
+ 	return error;
+ }
+ 
+-asmlinkage long sys_ftruncate(unsigned int fd, unsigned long length)
++SYSCALL_DEFINE2(ftruncate, unsigned int, fd, unsigned long, length)
+ {
+ 	long ret = do_sys_ftruncate(fd, length, 1);
+ 	/* avoid REGPARM breakage on x86: */
+@@ -346,21 +344,35 @@ asmlinkage long sys_ftruncate(unsigned int fd, unsigned long length)
+ 
+ /* LFS versions of truncate are only needed on 32 bit machines */
+ #if BITS_PER_LONG == 32
+-asmlinkage long sys_truncate64(const char __user * path, loff_t length)
++SYSCALL_DEFINE(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
+ 
+-asmlinkage long sys_ftruncate64(unsigned int fd, loff_t length)
++SYSCALL_DEFINE(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);
++}
++SYSCALL_ALIAS(sys_ftruncate64, SyS_ftruncate64);
+ #endif
++#endif /* BITS_PER_LONG == 32 */
+ 
+-asmlinkage long sys_fallocate(int fd, int mode, loff_t offset, loff_t len)
++SYSCALL_DEFINE(fallocate)(int fd, int mode, loff_t offset, loff_t len)
+ {
+ 	struct file *file;
+ 	struct inode *inode;
+@@ -417,13 +429,20 @@ out_fput:
+ out:
+ 	return ret;
+ }
++#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
+  * switching the fsuid/fsgid around to the real ones.
+  */
+-asmlinkage long sys_faccessat(int dfd, const char __user *filename, int mode)
++SYSCALL_DEFINE3(faccessat, int, dfd, const char __user *, filename, int, mode)
+ {
+ 	struct path path;
+ 	struct inode *inode;
+@@ -503,12 +522,12 @@ out:
+ 	return res;
+ }
+ 
+-asmlinkage long sys_access(const char __user *filename, int mode)
++SYSCALL_DEFINE2(access, const char __user *, filename, int, mode)
+ {
+ 	return sys_faccessat(AT_FDCWD, filename, mode);
+ }
+ 
+-asmlinkage long sys_chdir(const char __user * filename)
++SYSCALL_DEFINE1(chdir, const char __user *, filename)
+ {
+ 	struct path path;
+ 	int error;
+@@ -529,7 +548,7 @@ out:
+ 	return error;
+ }
+ 
+-asmlinkage long sys_fchdir(unsigned int fd)
++SYSCALL_DEFINE1(fchdir, unsigned int, fd)
+ {
+ 	struct file *file;
+ 	struct inode *inode;
+@@ -555,7 +574,7 @@ out:
+ 	return error;
+ }
+ 
+-asmlinkage long sys_chroot(const char __user * filename)
++SYSCALL_DEFINE1(chroot, const char __user *, filename)
+ {
+ 	struct path path;
+ 	int error;
+@@ -580,7 +599,7 @@ out:
+ 	return error;
+ }
+ 
+-asmlinkage long sys_fchmod(unsigned int fd, mode_t mode)
++SYSCALL_DEFINE2(fchmod, unsigned int, fd, mode_t, mode)
+ {
+ 	struct inode * inode;
+ 	struct dentry * dentry;
+@@ -614,8 +633,7 @@ out:
+ 	return err;
+ }
+ 
+-asmlinkage long sys_fchmodat(int dfd, const char __user *filename,
+-			     mode_t mode)
++SYSCALL_DEFINE3(fchmodat, int, dfd, const char __user *, filename, mode_t, mode)
+ {
+ 	struct path path;
+ 	struct inode *inode;
+@@ -644,7 +662,7 @@ out:
+ 	return error;
+ }
+ 
+-asmlinkage long sys_chmod(const char __user *filename, mode_t mode)
++SYSCALL_DEFINE2(chmod, const char __user *, filename, mode_t, mode)
+ {
+ 	return sys_fchmodat(AT_FDCWD, filename, mode);
+ }
+@@ -674,7 +692,7 @@ static int chown_common(struct dentry * dentry, uid_t user, gid_t group)
+ 	return error;
+ }
+ 
+-asmlinkage long sys_chown(const char __user * filename, uid_t user, gid_t group)
++SYSCALL_DEFINE3(chown, const char __user *, filename, uid_t, user, gid_t, group)
+ {
+ 	struct path path;
+ 	int error;
+@@ -693,8 +711,8 @@ out:
+ 	return error;
+ }
+ 
+-asmlinkage long sys_fchownat(int dfd, const char __user *filename, uid_t user,
+-			     gid_t group, int flag)
++SYSCALL_DEFINE5(fchownat, int, dfd, const char __user *, filename, uid_t, user,
++		gid_t, group, int, flag)
+ {
+ 	struct path path;
+ 	int error = -EINVAL;
+@@ -718,7 +736,7 @@ out:
+ 	return error;
+ }
+ 
+-asmlinkage long sys_lchown(const char __user * filename, uid_t user, gid_t group)
++SYSCALL_DEFINE3(lchown, const char __user *, filename, uid_t, user, gid_t, group)
+ {
+ 	struct path path;
+ 	int error;
+@@ -737,8 +755,7 @@ out:
+ 	return error;
+ }
+ 
+-
+-asmlinkage long sys_fchown(unsigned int fd, uid_t user, gid_t group)
++SYSCALL_DEFINE3(fchown, unsigned int, fd, uid_t, user, gid_t, group)
+ {
+ 	struct file * file;
+ 	int error = -EBADF;
+@@ -1029,7 +1046,7 @@ long do_sys_open(int dfd, const char __user *filename, int flags, int mode)
+ 	return fd;
+ }
+ 
+-asmlinkage long sys_open(const char __user *filename, int flags, int mode)
++SYSCALL_DEFINE3(open, const char __user *, filename, int, flags, int, mode)
+ {
+ 	long ret;
+ 
+@@ -1042,8 +1059,8 @@ asmlinkage long sys_open(const char __user *filename, int flags, int mode)
+ 	return ret;
+ }
+ 
+-asmlinkage long sys_openat(int dfd, const char __user *filename, int flags,
+-			   int mode)
++SYSCALL_DEFINE4(openat, int, dfd, const char __user *, filename, int, flags,
++		int, mode)
+ {
+ 	long ret;
+ 
+@@ -1062,7 +1079,7 @@ asmlinkage long sys_openat(int dfd, const char __user *filename, int flags,
+  * For backward compatibility?  Maybe this should be moved
+  * into arch/i386 instead?
+  */
+-asmlinkage long sys_creat(const char __user * pathname, int mode)
++SYSCALL_DEFINE2(creat, const char __user *, pathname, int, mode)
+ {
+ 	return sys_open(pathname, O_CREAT | O_WRONLY | O_TRUNC, mode);
+ }
+@@ -1098,7 +1115,7 @@ EXPORT_SYMBOL(filp_close);
+  * releasing the fd. This ensures that one clone task can't release
+  * an fd while another clone is opening it.
+  */
+-asmlinkage long sys_close(unsigned int fd)
++SYSCALL_DEFINE1(close, unsigned int, fd)
+ {
+ 	struct file * filp;
+ 	struct files_struct *files = current->files;
+@@ -1131,14 +1148,13 @@ out_unlock:
+ 	spin_unlock(&files->file_lock);
+ 	return -EBADF;
+ }
+-
+ EXPORT_SYMBOL(sys_close);
+ 
+ /*
+  * This routine simulates a hangup on the tty, to arrange that users
+  * are given clean terminals at login time.
+  */
+-asmlinkage long sys_vhangup(void)
++SYSCALL_DEFINE0(vhangup)
+ {
+ 	if (capable(CAP_SYS_TTY_CONFIG)) {
+ 		tty_vhangup_self();
+diff --git a/fs/pipe.c b/fs/pipe.c
+index 7aea8b8..47b34d2 100644
+--- a/fs/pipe.c
++++ b/fs/pipe.c
+@@ -1048,7 +1048,7 @@ int do_pipe(int *fd)
+  * sys_pipe() is the normal C calling standard for creating
+  * a pipe. It's not the way Unix traditionally does this, though.
+  */
+-asmlinkage long __weak sys_pipe2(int __user *fildes, int flags)
++SYSCALL_DEFINE2(pipe2, int __user *, fildes, int, flags)
+ {
+ 	int fd[2];
+ 	int error;
+@@ -1064,7 +1064,7 @@ asmlinkage long __weak sys_pipe2(int __user *fildes, int flags)
+ 	return error;
+ }
+ 
+-asmlinkage long __weak sys_pipe(int __user *fildes)
++SYSCALL_DEFINE1(pipe, int __user *, fildes)
+ {
+ 	return sys_pipe2(fildes, 0);
+ }
+diff --git a/fs/quota.c b/fs/quota.c
+index 7f4386e..e9851af 100644
+--- a/fs/quota.c
++++ b/fs/quota.c
+@@ -368,7 +368,8 @@ static inline struct super_block *quotactl_block(const char __user *special)
+  * calls. Maybe we need to add the process quotas etc. in the future,
+  * but we probably should use rlimits for that.
+  */
+-asmlinkage long sys_quotactl(unsigned int cmd, const char __user *special, qid_t id, void __user *addr)
++SYSCALL_DEFINE4(quotactl, unsigned int, cmd, const char __user *, special,
++		qid_t, id, void __user *, addr)
+ {
+ 	uint cmds, type;
+ 	struct super_block *sb = NULL;
+diff --git a/fs/read_write.c b/fs/read_write.c
+index 969a6d9..b83f306 100644
+--- a/fs/read_write.c
++++ b/fs/read_write.c
+@@ -134,7 +134,7 @@ loff_t vfs_llseek(struct file *file, loff_t offset, int origin)
+ }
+ EXPORT_SYMBOL(vfs_llseek);
+ 
+-asmlinkage off_t sys_lseek(unsigned int fd, off_t offset, unsigned int origin)
++SYSCALL_DEFINE3(lseek, unsigned int, fd, off_t, offset, unsigned int, origin)
+ {
+ 	off_t retval;
+ 	struct file * file;
+@@ -158,9 +158,9 @@ bad:
+ }
+ 
+ #ifdef __ARCH_WANT_SYS_LLSEEK
+-asmlinkage long sys_llseek(unsigned int fd, unsigned long offset_high,
+-			   unsigned long offset_low, loff_t __user * result,
+-			   unsigned int origin)
++SYSCALL_DEFINE5(llseek, unsigned int, fd, unsigned long, offset_high,
++		unsigned long, offset_low, loff_t __user *, result,
++		unsigned int, origin)
+ {
+ 	int retval;
+ 	struct file * file;
+@@ -356,7 +356,7 @@ static inline void file_pos_write(struct file *file, loff_t pos)
+ 	file->f_pos = pos;
+ }
+ 
+-asmlinkage ssize_t sys_read(unsigned int fd, char __user * buf, size_t count)
++SYSCALL_DEFINE3(read, unsigned int, fd, char __user *, buf, size_t, count)
+ {
+ 	struct file *file;
+ 	ssize_t ret = -EBADF;
+@@ -373,7 +373,8 @@ asmlinkage ssize_t sys_read(unsigned int fd, char __user * buf, size_t count)
+ 	return ret;
+ }
+ 
+-asmlinkage ssize_t sys_write(unsigned int fd, const char __user * buf, size_t count)
++SYSCALL_DEFINE3(write, unsigned int, fd, const char __user *, buf,
++		size_t, count)
+ {
+ 	struct file *file;
+ 	ssize_t ret = -EBADF;
+@@ -390,8 +391,8 @@ asmlinkage ssize_t sys_write(unsigned int fd, const char __user * buf, size_t co
+ 	return ret;
+ }
+ 
+-asmlinkage ssize_t sys_pread64(unsigned int fd, char __user *buf,
+-			     size_t count, loff_t pos)
++SYSCALL_DEFINE(pread64)(unsigned int fd, char __user *buf,
++			size_t count, loff_t pos)
+ {
+ 	struct file *file;
+ 	ssize_t ret = -EBADF;
+@@ -410,9 +411,17 @@ asmlinkage ssize_t sys_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
+ 
+-asmlinkage ssize_t sys_pwrite64(unsigned int fd, const char __user *buf,
+-			      size_t count, loff_t pos)
++SYSCALL_DEFINE(pwrite64)(unsigned int fd, const char __user *buf,
++			 size_t count, loff_t pos)
+ {
+ 	struct file *file;
+ 	ssize_t ret = -EBADF;
+@@ -431,6 +440,14 @@ asmlinkage ssize_t sys_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
+@@ -659,8 +676,8 @@ ssize_t vfs_writev(struct file *file, const struct iovec __user *vec,
+ 
+ EXPORT_SYMBOL(vfs_writev);
+ 
+-asmlinkage ssize_t
+-sys_readv(unsigned long fd, const struct iovec __user *vec, unsigned long vlen)
++SYSCALL_DEFINE3(readv, unsigned long, fd, const struct iovec __user *, vec,
++		unsigned long, vlen)
+ {
+ 	struct file *file;
+ 	ssize_t ret = -EBADF;
+@@ -680,8 +697,8 @@ sys_readv(unsigned long fd, const struct iovec __user *vec, unsigned long vlen)
+ 	return ret;
+ }
+ 
+-asmlinkage ssize_t
+-sys_writev(unsigned long fd, const struct iovec __user *vec, unsigned long vlen)
++SYSCALL_DEFINE3(writev, unsigned long, fd, const struct iovec __user *, vec,
++		unsigned long, vlen)
+ {
+ 	struct file *file;
+ 	ssize_t ret = -EBADF;
+@@ -799,7 +816,7 @@ out:
+ 	return retval;
+ }
+ 
+-asmlinkage ssize_t sys_sendfile(int out_fd, int in_fd, off_t __user *offset, size_t count)
++SYSCALL_DEFINE4(sendfile, int, out_fd, int, in_fd, off_t __user *, offset, size_t, count)
+ {
+ 	loff_t pos;
+ 	off_t off;
+@@ -818,7 +835,7 @@ asmlinkage ssize_t sys_sendfile(int out_fd, int in_fd, off_t __user *offset, siz
+ 	return do_sendfile(out_fd, in_fd, NULL, count, 0);
+ }
+ 
+-asmlinkage ssize_t sys_sendfile64(int out_fd, int in_fd, loff_t __user *offset, size_t count)
++SYSCALL_DEFINE4(sendfile64, int, out_fd, int, in_fd, loff_t __user *, offset, size_t, count)
+ {
+ 	loff_t pos;
+ 	ssize_t ret;
+diff --git a/fs/readdir.c b/fs/readdir.c
+index b318d9b..7723401 100644
+--- a/fs/readdir.c
++++ b/fs/readdir.c
+@@ -102,7 +102,8 @@ efault:
+ 	return -EFAULT;
+ }
+ 
+-asmlinkage long old_readdir(unsigned int fd, struct old_linux_dirent __user * dirent, unsigned int count)
++SYSCALL_DEFINE3(old_readdir, unsigned int, fd,
++		struct old_linux_dirent __user *, dirent, unsigned int, count)
+ {
+ 	int error;
+ 	struct file * file;
+@@ -187,7 +188,8 @@ efault:
+ 	return -EFAULT;
+ }
+ 
+-asmlinkage long sys_getdents(unsigned int fd, struct linux_dirent __user * dirent, unsigned int count)
++SYSCALL_DEFINE3(getdents, unsigned int, fd,
++		struct linux_dirent __user *, dirent, unsigned int, count)
+ {
+ 	struct file * file;
+ 	struct linux_dirent __user * lastdirent;
+@@ -268,7 +270,8 @@ efault:
+ 	return -EFAULT;
+ }
+ 
+-asmlinkage long sys_getdents64(unsigned int fd, struct linux_dirent64 __user * dirent, unsigned int count)
++SYSCALL_DEFINE3(getdents64, unsigned int, fd,
++		struct linux_dirent64 __user *, dirent, unsigned int, count)
+ {
+ 	struct file * file;
+ 	struct linux_dirent64 __user * lastdirent;
+diff --git a/fs/reiserfs/inode.c b/fs/reiserfs/inode.c
+index 6c4c2c6..8a6bfb4 100644
+--- a/fs/reiserfs/inode.c
++++ b/fs/reiserfs/inode.c
+@@ -2556,7 +2556,7 @@ static int reiserfs_write_begin(struct file *file,
+ 	}
+ 
+ 	index = pos >> PAGE_CACHE_SHIFT;
+-	page = __grab_cache_page(mapping, index);
++	page = grab_cache_page_write_begin(mapping, index, flags);
+ 	if (!page)
+ 		return -ENOMEM;
+ 	*pagep = page;
+diff --git a/fs/select.c b/fs/select.c
+index 87df51e..b140f90 100644
+--- a/fs/select.c
++++ b/fs/select.c
+@@ -507,8 +507,8 @@ out_nofds:
+ 	return ret;
+ }
+ 
+-asmlinkage long sys_select(int n, fd_set __user *inp, fd_set __user *outp,
+-			fd_set __user *exp, struct timeval __user *tvp)
++SYSCALL_DEFINE5(select, int, n, fd_set __user *, inp, fd_set __user *, outp,
++		fd_set __user *, exp, struct timeval __user *, tvp)
+ {
+ 	struct timespec end_time, *to = NULL;
+ 	struct timeval tv;
+@@ -532,9 +532,9 @@ asmlinkage long sys_select(int n, fd_set __user *inp, fd_set __user *outp,
+ }
+ 
+ #ifdef HAVE_SET_RESTORE_SIGMASK
+-asmlinkage long sys_pselect7(int n, fd_set __user *inp, fd_set __user *outp,
+-		fd_set __user *exp, struct timespec __user *tsp,
+-		const sigset_t __user *sigmask, size_t sigsetsize)
++static long do_pselect(int n, fd_set __user *inp, fd_set __user *outp,
++		       fd_set __user *exp, struct timespec __user *tsp,
++		       const sigset_t __user *sigmask, size_t sigsetsize)
+ {
+ 	sigset_t ksigmask, sigsaved;
+ 	struct timespec ts, end_time, *to = NULL;
+@@ -560,7 +560,7 @@ asmlinkage long sys_pselect7(int n, fd_set __user *inp, fd_set __user *outp,
+ 		sigprocmask(SIG_SETMASK, &ksigmask, &sigsaved);
+ 	}
+ 
+-	ret = core_sys_select(n, inp, outp, exp, &end_time);
++	ret = core_sys_select(n, inp, outp, exp, to);
+ 	ret = poll_select_copy_remaining(&end_time, tsp, 0, ret);
+ 
+ 	if (ret == -ERESTARTNOHAND) {
+@@ -586,8 +586,9 @@ asmlinkage long sys_pselect7(int n, fd_set __user *inp, fd_set __user *outp,
+  * which has a pointer to the sigset_t itself followed by a size_t containing
+  * the sigset size.
+  */
+-asmlinkage long sys_pselect6(int n, fd_set __user *inp, fd_set __user *outp,
+-	fd_set __user *exp, struct timespec __user *tsp, void __user *sig)
++SYSCALL_DEFINE6(pselect6, int, n, fd_set __user *, inp, fd_set __user *, outp,
++		fd_set __user *, exp, struct timespec __user *, tsp,
++		void __user *, sig)
+ {
+ 	size_t sigsetsize = 0;
+ 	sigset_t __user *up = NULL;
+@@ -600,7 +601,7 @@ asmlinkage long sys_pselect6(int n, fd_set __user *inp, fd_set __user *outp,
+ 			return -EFAULT;
+ 	}
+ 
+-	return sys_pselect7(n, inp, outp, exp, tsp, up, sigsetsize);
++	return do_pselect(n, inp, outp, exp, tsp, up, sigsetsize);
+ }
+ #endif /* HAVE_SET_RESTORE_SIGMASK */
+ 
+@@ -806,8 +807,8 @@ static long do_restart_poll(struct restart_block *restart_block)
+ 	return ret;
+ }
+ 
+-asmlinkage long sys_poll(struct pollfd __user *ufds, unsigned int nfds,
+-			long timeout_msecs)
++SYSCALL_DEFINE3(poll, struct pollfd __user *, ufds, unsigned int, nfds,
++		long, timeout_msecs)
+ {
+ 	struct timespec end_time, *to = NULL;
+ 	int ret;
+@@ -841,9 +842,9 @@ asmlinkage long sys_poll(struct pollfd __user *ufds, unsigned int nfds,
+ }
+ 
+ #ifdef HAVE_SET_RESTORE_SIGMASK
+-asmlinkage long sys_ppoll(struct pollfd __user *ufds, unsigned int nfds,
+-	struct timespec __user *tsp, const sigset_t __user *sigmask,
+-	size_t sigsetsize)
++SYSCALL_DEFINE5(ppoll, struct pollfd __user *, ufds, unsigned int, nfds,
++		struct timespec __user *, tsp, const sigset_t __user *, sigmask,
++		size_t, sigsetsize)
+ {
+ 	sigset_t ksigmask, sigsaved;
+ 	struct timespec ts, end_time, *to = NULL;
+diff --git a/fs/signalfd.c b/fs/signalfd.c
+index 9c39bc7..b07565c 100644
+--- a/fs/signalfd.c
++++ b/fs/signalfd.c
+@@ -205,8 +205,8 @@ static const struct file_operations signalfd_fops = {
+ 	.read		= signalfd_read,
+ };
+ 
+-asmlinkage long sys_signalfd4(int ufd, sigset_t __user *user_mask,
+-			      size_t sizemask, int flags)
++SYSCALL_DEFINE4(signalfd4, int, ufd, sigset_t __user *, user_mask,
++		size_t, sizemask, int, flags)
+ {
+ 	sigset_t sigmask;
+ 	struct signalfd_ctx *ctx;
+@@ -259,8 +259,8 @@ asmlinkage long sys_signalfd4(int ufd, sigset_t __user *user_mask,
+ 	return ufd;
+ }
+ 
+-asmlinkage long sys_signalfd(int ufd, sigset_t __user *user_mask,
+-			     size_t sizemask)
++SYSCALL_DEFINE3(signalfd, int, ufd, sigset_t __user *, user_mask,
++		size_t, sizemask)
+ {
+ 	return sys_signalfd4(ufd, user_mask, sizemask, 0);
+ }
+diff --git a/fs/smbfs/file.c b/fs/smbfs/file.c
+index e4f8d51..92d5e8f 100644
+--- a/fs/smbfs/file.c
++++ b/fs/smbfs/file.c
+@@ -297,7 +297,7 @@ static int smb_write_begin(struct file *file, struct address_space *mapping,
+ 			struct page **pagep, void **fsdata)
+ {
+ 	pgoff_t index = pos >> PAGE_CACHE_SHIFT;
+-	*pagep = __grab_cache_page(mapping, index);
++	*pagep = grab_cache_page_write_begin(mapping, index, flags);
+ 	if (!*pagep)
+ 		return -ENOMEM;
+ 	return 0;
+diff --git a/fs/splice.c b/fs/splice.c
+index 1abab5c..1eaef06 100644
+--- a/fs/splice.c
++++ b/fs/splice.c
+@@ -1434,8 +1434,8 @@ static long vmsplice_to_pipe(struct file *file, const struct iovec __user *iov,
+  * Currently we punt and implement it as a normal copy, see pipe_to_user().
+  *
+  */
+-asmlinkage long sys_vmsplice(int fd, const struct iovec __user *iov,
+-			     unsigned long nr_segs, unsigned int flags)
++SYSCALL_DEFINE4(vmsplice, int, fd, const struct iovec __user *, iov,
++		unsigned long, nr_segs, unsigned int, flags)
+ {
+ 	struct file *file;
+ 	long error;
+@@ -1460,9 +1460,9 @@ asmlinkage long sys_vmsplice(int fd, const struct iovec __user *iov,
+ 	return error;
+ }
+ 
+-asmlinkage long sys_splice(int fd_in, loff_t __user *off_in,
+-			   int fd_out, loff_t __user *off_out,
+-			   size_t len, unsigned int flags)
++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)
+ {
+ 	long error;
+ 	struct file *in, *out;
+@@ -1684,7 +1684,7 @@ static long do_tee(struct file *in, struct file *out, size_t len,
+ 	return ret;
+ }
+ 
+-asmlinkage long sys_tee(int fdin, int fdout, size_t len, unsigned int flags)
++SYSCALL_DEFINE4(tee, int, fdin, int, fdout, size_t, len, unsigned int, flags)
+ {
+ 	struct file *in;
+ 	int error, fput_in;
+diff --git a/fs/stat.c b/fs/stat.c
+index 7c46fbe..4bd85da 100644
+--- a/fs/stat.c
++++ b/fs/stat.c
+@@ -152,7 +152,7 @@ static int cp_old_stat(struct kstat *stat, struct __old_kernel_stat __user * sta
+ 	return copy_to_user(statbuf,&tmp,sizeof(tmp)) ? -EFAULT : 0;
+ }
+ 
+-asmlinkage long sys_stat(char __user * filename, struct __old_kernel_stat __user * statbuf)
++SYSCALL_DEFINE2(stat, char __user *, filename, struct __old_kernel_stat __user *, statbuf)
+ {
+ 	struct kstat stat;
+ 	int error = vfs_stat_fd(AT_FDCWD, filename, &stat);
+@@ -162,7 +162,8 @@ asmlinkage long sys_stat(char __user * filename, struct __old_kernel_stat __user
+ 
+ 	return error;
+ }
+-asmlinkage long sys_lstat(char __user * filename, struct __old_kernel_stat __user * statbuf)
++
++SYSCALL_DEFINE2(lstat, char __user *, filename, struct __old_kernel_stat __user *, statbuf)
+ {
+ 	struct kstat stat;
+ 	int error = vfs_lstat_fd(AT_FDCWD, filename, &stat);
+@@ -172,7 +173,8 @@ asmlinkage long sys_lstat(char __user * filename, struct __old_kernel_stat __use
+ 
+ 	return error;
+ }
+-asmlinkage long sys_fstat(unsigned int fd, struct __old_kernel_stat __user * statbuf)
++
++SYSCALL_DEFINE2(fstat, unsigned int, fd, struct __old_kernel_stat __user *, statbuf)
+ {
+ 	struct kstat stat;
+ 	int error = vfs_fstat(fd, &stat);
+@@ -235,7 +237,7 @@ static int cp_new_stat(struct kstat *stat, struct stat __user *statbuf)
+ 	return copy_to_user(statbuf,&tmp,sizeof(tmp)) ? -EFAULT : 0;
+ }
+ 
+-asmlinkage long sys_newstat(char __user *filename, struct stat __user *statbuf)
++SYSCALL_DEFINE2(newstat, char __user *, filename, struct stat __user *, statbuf)
+ {
+ 	struct kstat stat;
+ 	int error = vfs_stat_fd(AT_FDCWD, filename, &stat);
+@@ -246,7 +248,7 @@ asmlinkage long sys_newstat(char __user *filename, struct stat __user *statbuf)
+ 	return error;
+ }
+ 
+-asmlinkage long sys_newlstat(char __user *filename, struct stat __user *statbuf)
++SYSCALL_DEFINE2(newlstat, char __user *, filename, struct stat __user *, statbuf)
+ {
+ 	struct kstat stat;
+ 	int error = vfs_lstat_fd(AT_FDCWD, filename, &stat);
+@@ -258,8 +260,8 @@ asmlinkage long sys_newlstat(char __user *filename, struct stat __user *statbuf)
+ }
+ 
+ #if !defined(__ARCH_WANT_STAT64) || defined(__ARCH_WANT_SYS_NEWFSTATAT)
+-asmlinkage long sys_newfstatat(int dfd, char __user *filename,
+-				struct stat __user *statbuf, int flag)
++SYSCALL_DEFINE4(newfstatat, int, dfd, char __user *, filename,
++		struct stat __user *, statbuf, int, flag)
+ {
+ 	struct kstat stat;
+ 	int error = -EINVAL;
+@@ -280,7 +282,7 @@ out:
+ }
+ #endif
+ 
+-asmlinkage long sys_newfstat(unsigned int fd, struct stat __user *statbuf)
++SYSCALL_DEFINE2(newfstat, unsigned int, fd, struct stat __user *, statbuf)
+ {
+ 	struct kstat stat;
+ 	int error = vfs_fstat(fd, &stat);
+@@ -291,8 +293,8 @@ asmlinkage long sys_newfstat(unsigned int fd, struct stat __user *statbuf)
+ 	return error;
+ }
+ 
+-asmlinkage long sys_readlinkat(int dfd, const char __user *pathname,
+-				char __user *buf, int bufsiz)
++SYSCALL_DEFINE4(readlinkat, int, dfd, const char __user *, pathname,
++		char __user *, buf, int, bufsiz)
+ {
+ 	struct path path;
+ 	int error;
+@@ -318,8 +320,8 @@ asmlinkage long sys_readlinkat(int dfd, const char __user *pathname,
+ 	return error;
+ }
+ 
+-asmlinkage long sys_readlink(const char __user *path, char __user *buf,
+-				int bufsiz)
++SYSCALL_DEFINE3(readlink, const char __user *, path, char __user *, buf,
++		int, bufsiz)
+ {
+ 	return sys_readlinkat(AT_FDCWD, path, buf, bufsiz);
+ }
+@@ -365,7 +367,7 @@ static long cp_new_stat64(struct kstat *stat, struct stat64 __user *statbuf)
+ 	return copy_to_user(statbuf,&tmp,sizeof(tmp)) ? -EFAULT : 0;
+ }
+ 
+-asmlinkage long sys_stat64(char __user * filename, struct stat64 __user * statbuf)
++SYSCALL_DEFINE2(stat64, char __user *, filename, struct stat64 __user *, statbuf)
+ {
+ 	struct kstat stat;
+ 	int error = vfs_stat(filename, &stat);
+@@ -375,7 +377,8 @@ asmlinkage long sys_stat64(char __user * filename, struct stat64 __user * statbu
+ 
+ 	return error;
+ }
+-asmlinkage long sys_lstat64(char __user * filename, struct stat64 __user * statbuf)
++
++SYSCALL_DEFINE2(lstat64, char __user *, filename, struct stat64 __user *, statbuf)
+ {
+ 	struct kstat stat;
+ 	int error = vfs_lstat(filename, &stat);
+@@ -385,7 +388,8 @@ asmlinkage long sys_lstat64(char __user * filename, struct stat64 __user * statb
+ 
+ 	return error;
+ }
+-asmlinkage long sys_fstat64(unsigned long fd, struct stat64 __user * statbuf)
++
++SYSCALL_DEFINE2(fstat64, unsigned long, fd, struct stat64 __user *, statbuf)
+ {
+ 	struct kstat stat;
+ 	int error = vfs_fstat(fd, &stat);
+@@ -396,8 +400,8 @@ asmlinkage long sys_fstat64(unsigned long fd, struct stat64 __user * statbuf)
+ 	return error;
+ }
+ 
+-asmlinkage long sys_fstatat64(int dfd, char __user *filename,
+-			       struct stat64 __user *statbuf, int flag)
++SYSCALL_DEFINE4(fstatat64, int, dfd, char __user *, filename,
++		struct stat64 __user *, statbuf, int, flag)
+ {
+ 	struct kstat stat;
+ 	int error = -EINVAL;
+diff --git a/fs/super.c b/fs/super.c
+index 400a760..f7d4bd6 100644
+--- a/fs/super.c
++++ b/fs/super.c
+@@ -534,7 +534,7 @@ rescan:
+ 	return NULL;
+ }
+ 
+-asmlinkage long sys_ustat(unsigned dev, struct ustat __user * ubuf)
++SYSCALL_DEFINE2(ustat, unsigned, dev, struct ustat __user *, ubuf)
+ {
+         struct super_block *s;
+         struct ustat tmp;
+diff --git a/fs/sync.c b/fs/sync.c
+index 2967562..6cc8cb4 100644
+--- a/fs/sync.c
++++ b/fs/sync.c
+@@ -36,7 +36,7 @@ static void do_sync(unsigned long wait)
+ 		laptop_sync_completion();
+ }
+ 
+-asmlinkage long sys_sync(void)
++SYSCALL_DEFINE0(sync)
+ {
+ 	do_sync(1);
+ 	return 0;
+@@ -118,12 +118,12 @@ static long __do_fsync(unsigned int fd, int datasync)
+ 	return ret;
+ }
+ 
+-asmlinkage long sys_fsync(unsigned int fd)
++SYSCALL_DEFINE1(fsync, unsigned int, fd)
+ {
+ 	return __do_fsync(fd, 0);
+ }
+ 
+-asmlinkage long sys_fdatasync(unsigned int fd)
++SYSCALL_DEFINE1(fdatasync, unsigned int, fd)
+ {
+ 	return __do_fsync(fd, 1);
+ }
+@@ -175,8 +175,8 @@ asmlinkage long sys_fdatasync(unsigned int fd)
+  * already-instantiated disk blocks, there are no guarantees here that the data
+  * will be available after a crash.
+  */
+-asmlinkage long sys_sync_file_range(int fd, loff_t offset, loff_t nbytes,
+-					unsigned int flags)
++SYSCALL_DEFINE(sync_file_range)(int fd, loff_t offset, loff_t nbytes,
++				unsigned int flags)
+ {
+ 	int ret;
+ 	struct file *file;
+@@ -236,14 +236,32 @@ 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 */
+-asmlinkage long sys_sync_file_range2(int fd, unsigned int flags,
+-				     loff_t offset, loff_t nbytes)
++SYSCALL_DEFINE(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
+ 
+ /*
+  * `endbyte' is inclusive
+diff --git a/fs/timerfd.c b/fs/timerfd.c
+index 0862f0e..6a123b8 100644
+--- a/fs/timerfd.c
++++ b/fs/timerfd.c
+@@ -177,7 +177,7 @@ static struct file *timerfd_fget(int fd)
+ 	return file;
+ }
+ 
+-asmlinkage long sys_timerfd_create(int clockid, int flags)
++SYSCALL_DEFINE2(timerfd_create, int, clockid, int, flags)
+ {
+ 	int ufd;
+ 	struct timerfd_ctx *ctx;
+@@ -208,9 +208,9 @@ asmlinkage long sys_timerfd_create(int clockid, int flags)
+ 	return ufd;
+ }
+ 
+-asmlinkage long sys_timerfd_settime(int ufd, int flags,
+-				    const struct itimerspec __user *utmr,
+-				    struct itimerspec __user *otmr)
++SYSCALL_DEFINE4(timerfd_settime, int, ufd, int, flags,
++		const struct itimerspec __user *, utmr,
++		struct itimerspec __user *, otmr)
+ {
+ 	struct file *file;
+ 	struct timerfd_ctx *ctx;
+@@ -265,7 +265,7 @@ asmlinkage long sys_timerfd_settime(int ufd, int flags,
+ 	return 0;
+ }
+ 
+-asmlinkage long sys_timerfd_gettime(int ufd, struct itimerspec __user *otmr)
++SYSCALL_DEFINE2(timerfd_gettime, int, ufd, struct itimerspec __user *, otmr)
+ {
+ 	struct file *file;
+ 	struct timerfd_ctx *ctx;
+diff --git a/fs/ubifs/file.c b/fs/ubifs/file.c
+index 2624411..b1496f5 100644
+--- a/fs/ubifs/file.c
++++ b/fs/ubifs/file.c
+@@ -219,7 +219,8 @@ static void release_existing_page_budget(struct ubifs_info *c)
+ }
+ 
+ static int write_begin_slow(struct address_space *mapping,
+-			    loff_t pos, unsigned len, struct page **pagep)
++			    loff_t pos, unsigned len, struct page **pagep,
++			    unsigned flags)
+ {
+ 	struct inode *inode = mapping->host;
+ 	struct ubifs_info *c = inode->i_sb->s_fs_info;
+@@ -247,7 +248,7 @@ static int write_begin_slow(struct address_space *mapping,
+ 	if (unlikely(err))
+ 		return err;
+ 
+-	page = __grab_cache_page(mapping, index);
++	page = grab_cache_page_write_begin(mapping, index, flags);
+ 	if (unlikely(!page)) {
+ 		ubifs_release_budget(c, &req);
+ 		return -ENOMEM;
+@@ -438,7 +439,7 @@ static int ubifs_write_begin(struct file *file, struct address_space *mapping,
+ 		return -EROFS;
+ 
+ 	/* Try out the fast-path part first */
+-	page = __grab_cache_page(mapping, index);
++	page = grab_cache_page_write_begin(mapping, index, flags);
+ 	if (unlikely(!page))
+ 		return -ENOMEM;
+ 
+@@ -483,7 +484,7 @@ static int ubifs_write_begin(struct file *file, struct address_space *mapping,
+ 		unlock_page(page);
+ 		page_cache_release(page);
+ 
+-		return write_begin_slow(mapping, pos, len, pagep);
++		return write_begin_slow(mapping, pos, len, pagep, flags);
+ 	}
+ 
+ 	/*
+diff --git a/fs/utimes.c b/fs/utimes.c
+index 6929e3e..e4c75db 100644
+--- a/fs/utimes.c
++++ b/fs/utimes.c
+@@ -24,7 +24,7 @@
+  * must be owner or have write permission.
+  * Else, update from *times, must be owner or super user.
+  */
+-asmlinkage long sys_utime(char __user *filename, struct utimbuf __user *times)
++SYSCALL_DEFINE2(utime, char __user *, filename, struct utimbuf __user *, times)
+ {
+ 	struct timespec tv[2];
+ 
+@@ -170,7 +170,8 @@ out:
+ 	return error;
+ }
+ 
+-asmlinkage long sys_utimensat(int dfd, char __user *filename, struct timespec __user *utimes, int flags)
++SYSCALL_DEFINE4(utimensat, int, dfd, char __user *, filename,
++		struct timespec __user *, utimes, int, flags)
+ {
+ 	struct timespec tstimes[2];
+ 
+@@ -187,7 +188,8 @@ asmlinkage long sys_utimensat(int dfd, char __user *filename, struct timespec __
+ 	return do_utimes(dfd, filename, utimes ? tstimes : NULL, flags);
+ }
+ 
+-asmlinkage long sys_futimesat(int dfd, char __user *filename, struct timeval __user *utimes)
++SYSCALL_DEFINE3(futimesat, int, dfd, char __user *, filename,
++		struct timeval __user *, utimes)
+ {
+ 	struct timeval times[2];
+ 	struct timespec tstimes[2];
+@@ -214,7 +216,8 @@ asmlinkage long sys_futimesat(int dfd, char __user *filename, struct timeval __u
+ 	return do_utimes(dfd, filename, utimes ? tstimes : NULL, 0);
+ }
+ 
+-asmlinkage long sys_utimes(char __user *filename, struct timeval __user *utimes)
++SYSCALL_DEFINE2(utimes, char __user *, filename,
++		struct timeval __user *, utimes)
+ {
+ 	return sys_futimesat(AT_FDCWD, filename, utimes);
+ }
+diff --git a/fs/xattr.c b/fs/xattr.c
+index 468377e..086db06 100644
+--- a/fs/xattr.c
++++ b/fs/xattr.c
+@@ -251,9 +251,9 @@ setxattr(struct dentry *d, const char __user *name, const void __user *value,
+ 	return error;
+ }
+ 
+-asmlinkage long
+-sys_setxattr(const char __user *pathname, const char __user *name,
+-	     const void __user *value, size_t size, int flags)
++SYSCALL_DEFINE5(setxattr, const char __user *, pathname,
++		const char __user *, name, const void __user *, value,
++		size_t, size, int, flags)
+ {
+ 	struct path path;
+ 	int error;
+@@ -270,9 +270,9 @@ sys_setxattr(const char __user *pathname, const char __user *name,
+ 	return error;
+ }
+ 
+-asmlinkage long
+-sys_lsetxattr(const char __user *pathname, const char __user *name,
+-	      const void __user *value, size_t size, int flags)
++SYSCALL_DEFINE5(lsetxattr, const char __user *, pathname,
++		const char __user *, name, const void __user *, value,
++		size_t, size, int, flags)
+ {
+ 	struct path path;
+ 	int error;
+@@ -289,9 +289,8 @@ sys_lsetxattr(const char __user *pathname, const char __user *name,
+ 	return error;
+ }
+ 
+-asmlinkage long
+-sys_fsetxattr(int fd, const char __user *name, const void __user *value,
+-	      size_t size, int flags)
++SYSCALL_DEFINE5(fsetxattr, int, fd, const char __user *, name,
++		const void __user *,value, size_t, size, int, flags)
+ {
+ 	struct file *f;
+ 	struct dentry *dentry;
+@@ -349,9 +348,8 @@ getxattr(struct dentry *d, const char __user *name, void __user *value,
+ 	return error;
+ }
+ 
+-asmlinkage ssize_t
+-sys_getxattr(const char __user *pathname, const char __user *name,
+-	     void __user *value, size_t size)
++SYSCALL_DEFINE4(getxattr, const char __user *, pathname,
++		const char __user *, name, void __user *, value, size_t, size)
+ {
+ 	struct path path;
+ 	ssize_t error;
+@@ -364,9 +362,8 @@ sys_getxattr(const char __user *pathname, const char __user *name,
+ 	return error;
+ }
+ 
+-asmlinkage ssize_t
+-sys_lgetxattr(const char __user *pathname, const char __user *name, void __user *value,
+-	      size_t size)
++SYSCALL_DEFINE4(lgetxattr, const char __user *, pathname,
++		const char __user *, name, void __user *, value, size_t, size)
+ {
+ 	struct path path;
+ 	ssize_t error;
+@@ -379,8 +376,8 @@ sys_lgetxattr(const char __user *pathname, const char __user *name, void __user
+ 	return error;
+ }
+ 
+-asmlinkage ssize_t
+-sys_fgetxattr(int fd, const char __user *name, void __user *value, size_t size)
++SYSCALL_DEFINE4(fgetxattr, int, fd, const char __user *, name,
++		void __user *, value, size_t, size)
+ {
+ 	struct file *f;
+ 	ssize_t error = -EBADF;
+@@ -424,8 +421,8 @@ listxattr(struct dentry *d, char __user *list, size_t size)
+ 	return error;
+ }
+ 
+-asmlinkage ssize_t
+-sys_listxattr(const char __user *pathname, char __user *list, size_t size)
++SYSCALL_DEFINE3(listxattr, const char __user *, pathname, char __user *, list,
++		size_t, size)
+ {
+ 	struct path path;
+ 	ssize_t error;
+@@ -438,8 +435,8 @@ sys_listxattr(const char __user *pathname, char __user *list, size_t size)
+ 	return error;
+ }
+ 
+-asmlinkage ssize_t
+-sys_llistxattr(const char __user *pathname, char __user *list, size_t size)
++SYSCALL_DEFINE3(llistxattr, const char __user *, pathname, char __user *, list,
++		size_t, size)
+ {
+ 	struct path path;
+ 	ssize_t error;
+@@ -452,8 +449,7 @@ sys_llistxattr(const char __user *pathname, char __user *list, size_t size)
+ 	return error;
+ }
+ 
+-asmlinkage ssize_t
+-sys_flistxattr(int fd, char __user *list, size_t size)
++SYSCALL_DEFINE3(flistxattr, int, fd, char __user *, list, size_t, size)
+ {
+ 	struct file *f;
+ 	ssize_t error = -EBADF;
+@@ -485,8 +481,8 @@ removexattr(struct dentry *d, const char __user *name)
+ 	return vfs_removexattr(d, kname);
+ }
+ 
+-asmlinkage long
+-sys_removexattr(const char __user *pathname, const char __user *name)
++SYSCALL_DEFINE2(removexattr, const char __user *, pathname,
++		const char __user *, name)
+ {
+ 	struct path path;
+ 	int error;
+@@ -503,8 +499,8 @@ sys_removexattr(const char __user *pathname, const char __user *name)
+ 	return error;
+ }
+ 
+-asmlinkage long
+-sys_lremovexattr(const char __user *pathname, const char __user *name)
++SYSCALL_DEFINE2(lremovexattr, const char __user *, pathname,
++		const char __user *, name)
+ {
+ 	struct path path;
+ 	int error;
+@@ -521,8 +517,7 @@ sys_lremovexattr(const char __user *pathname, const char __user *name)
+ 	return error;
+ }
+ 
+-asmlinkage long
+-sys_fremovexattr(int fd, const char __user *name)
++SYSCALL_DEFINE2(fremovexattr, int, fd, const char __user *, name)
+ {
+ 	struct file *f;
+ 	struct dentry *dentry;
+diff --git a/fs/xfs/xfs_dir2_block.c b/fs/xfs/xfs_dir2_block.c
+index e2fa0a1..e1f0a06 100644
+--- a/fs/xfs/xfs_dir2_block.c
++++ b/fs/xfs/xfs_dir2_block.c
+@@ -517,9 +517,9 @@ xfs_dir2_block_getdents(
+ 		/*
+ 		 * If it didn't fit, set the final offset to here & return.
+ 		 */
+-		if (filldir(dirent, dep->name, dep->namelen, cook,
++		if (filldir(dirent, dep->name, dep->namelen, cook & 0x7fffffff,
+ 			    ino, DT_UNKNOWN)) {
+-			*offset = cook;
++			*offset = cook & 0x7fffffff;
+ 			xfs_da_brelse(NULL, bp);
+ 			return 0;
+ 		}
+@@ -529,7 +529,8 @@ xfs_dir2_block_getdents(
+ 	 * Reached the end of the block.
+ 	 * Set the offset to a non-existent block 1 and return.
+ 	 */
+-	*offset = xfs_dir2_db_off_to_dataptr(mp, mp->m_dirdatablk + 1, 0);
++	*offset = xfs_dir2_db_off_to_dataptr(mp, mp->m_dirdatablk + 1, 0) &
++			0x7fffffff;
+ 	xfs_da_brelse(NULL, bp);
+ 	return 0;
+ }
+diff --git a/fs/xfs/xfs_dir2_leaf.c b/fs/xfs/xfs_dir2_leaf.c
+index 9353599..ef805a3 100644
+--- a/fs/xfs/xfs_dir2_leaf.c
++++ b/fs/xfs/xfs_dir2_leaf.c
+@@ -1092,7 +1092,7 @@ xfs_dir2_leaf_getdents(
+ 		 * Won't fit.  Return to caller.
+ 		 */
+ 		if (filldir(dirent, dep->name, dep->namelen,
+-			    xfs_dir2_byte_to_dataptr(mp, curoff),
++			    xfs_dir2_byte_to_dataptr(mp, curoff) & 0x7fffffff,
+ 			    ino, DT_UNKNOWN))
+ 			break;
+ 
+@@ -1108,9 +1108,9 @@ xfs_dir2_leaf_getdents(
+ 	 * All done.  Set output offset value to current offset.
+ 	 */
+ 	if (curoff > xfs_dir2_dataptr_to_byte(mp, XFS_DIR2_MAX_DATAPTR))
+-		*offset = XFS_DIR2_MAX_DATAPTR;
++		*offset = XFS_DIR2_MAX_DATAPTR & 0x7fffffff;
+ 	else
+-		*offset = xfs_dir2_byte_to_dataptr(mp, curoff);
++		*offset = xfs_dir2_byte_to_dataptr(mp, curoff) & 0x7fffffff;
+ 	kmem_free(map);
+ 	if (bp)
+ 		xfs_da_brelse(NULL, bp);
+diff --git a/fs/xfs/xfs_dir2_sf.c b/fs/xfs/xfs_dir2_sf.c
+index b46af00..a8a8a6e 100644
+--- a/fs/xfs/xfs_dir2_sf.c
++++ b/fs/xfs/xfs_dir2_sf.c
+@@ -752,8 +752,8 @@ xfs_dir2_sf_getdents(
+ #if XFS_BIG_INUMS
+ 		ino += mp->m_inoadd;
+ #endif
+-		if (filldir(dirent, ".", 1, dot_offset, ino, DT_DIR)) {
+-			*offset = dot_offset;
++		if (filldir(dirent, ".", 1, dot_offset & 0x7fffffff, ino, DT_DIR)) {
++			*offset = dot_offset & 0x7fffffff;
+ 			return 0;
+ 		}
+ 	}
+@@ -766,8 +766,8 @@ xfs_dir2_sf_getdents(
+ #if XFS_BIG_INUMS
+ 		ino += mp->m_inoadd;
+ #endif
+-		if (filldir(dirent, "..", 2, dotdot_offset, ino, DT_DIR)) {
+-			*offset = dotdot_offset;
++		if (filldir(dirent, "..", 2, dotdot_offset & 0x7fffffff, ino, DT_DIR)) {
++			*offset = dotdot_offset & 0x7fffffff;
+ 			return 0;
+ 		}
+ 	}
+@@ -791,14 +791,15 @@ xfs_dir2_sf_getdents(
+ #endif
+ 
+ 		if (filldir(dirent, sfep->name, sfep->namelen,
+-					    off, ino, DT_UNKNOWN)) {
+-			*offset = off;
++			    off & 0x7fffffff, ino, DT_UNKNOWN)) {
++			*offset = off & 0x7fffffff;
+ 			return 0;
+ 		}
+ 		sfep = xfs_dir2_sf_nextentry(sfp, sfep);
+ 	}
+ 
+-	*offset = xfs_dir2_db_off_to_dataptr(mp, mp->m_dirdatablk + 1, 0);
++	*offset = xfs_dir2_db_off_to_dataptr(mp, mp->m_dirdatablk + 1, 0) &
++			0x7fffffff;
+ 	return 0;
+ }
+ 
+diff --git a/include/linux/compat.h b/include/linux/compat.h
+index e88f3ec..3fd2194 100644
+--- a/include/linux/compat.h
++++ b/include/linux/compat.h
+@@ -280,5 +280,18 @@ asmlinkage long compat_sys_timerfd_settime(int ufd, int flags,
+ asmlinkage long compat_sys_timerfd_gettime(int ufd,
+ 				   struct compat_itimerspec __user *otmr);
+ 
++asmlinkage long compat_sys_move_pages(pid_t pid, unsigned long nr_page,
++				      __u32 __user *pages,
++				      const int __user *nodes,
++				      int __user *status,
++				      int flags);
++asmlinkage long compat_sys_futimesat(unsigned int dfd, char __user *filename,
++				     struct compat_timeval __user *t);
++asmlinkage long compat_sys_newfstatat(unsigned int dfd, char __user * filename,
++				      struct compat_stat __user *statbuf,
++				      int flag);
++asmlinkage long compat_sys_openat(unsigned int dfd, const char __user *filename,
++				  int flags, int mode);
++
+ #endif /* CONFIG_COMPAT */
+ #endif /* _LINUX_COMPAT_H */
+diff --git a/include/linux/fs.h b/include/linux/fs.h
+index 4a853ef..efeff3d 100644
+--- a/include/linux/fs.h
++++ b/include/linux/fs.h
+@@ -414,6 +414,9 @@ enum positive_aop_returns {
+ 
+ #define AOP_FLAG_UNINTERRUPTIBLE	0x0001 /* will not do a short write */
+ #define AOP_FLAG_CONT_EXPAND		0x0002 /* called from cont_expand */
++#define AOP_FLAG_NOFS			0x0004 /* used by filesystem to direct
++						* helper code (eg buffer layer)
++						* to clear GFP_FS from alloc */
+ 
+ /*
+  * oh the beauties of C type declarations.
+@@ -2023,7 +2026,7 @@ extern int page_readlink(struct dentry *, char __user *, int);
+ extern void *page_follow_link_light(struct dentry *, struct nameidata *);
+ extern void page_put_link(struct dentry *, struct nameidata *, void *);
+ extern int __page_symlink(struct inode *inode, const char *symname, int len,
+-		gfp_t gfp_mask);
++		int nofs);
+ extern int page_symlink(struct inode *inode, const char *symname, int len);
+ extern const struct inode_operations page_symlink_inode_operations;
+ extern int generic_readlink(struct dentry *, char __user *, int);
+diff --git a/include/linux/mm.h b/include/linux/mm.h
+index ffee2f7..86b836d 100644
+--- a/include/linux/mm.h
++++ b/include/linux/mm.h
+@@ -253,7 +253,6 @@ static inline int put_page_testzero(struct page *page)
+  */
+ static inline int get_page_unless_zero(struct page *page)
+ {
+-	VM_BUG_ON(PageTail(page));
+ 	return atomic_inc_not_zero(&page->_count);
+ }
+ 
+diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h
+index 709742b..01ca085 100644
+--- a/include/linux/pagemap.h
++++ b/include/linux/pagemap.h
+@@ -241,7 +241,8 @@ unsigned find_get_pages_contig(struct address_space *mapping, pgoff_t start,
+ unsigned find_get_pages_tag(struct address_space *mapping, pgoff_t *index,
+ 			int tag, unsigned int nr_pages, struct page **pages);
+ 
+-struct page *__grab_cache_page(struct address_space *mapping, pgoff_t index);
++struct page *grab_cache_page_write_begin(struct address_space *mapping,
++			pgoff_t index, unsigned flags);
+ 
+ /*
+  * Returns locked page at given index in given cache, creating it if needed.
+diff --git a/include/linux/radix-tree.h b/include/linux/radix-tree.h
+index a916c66..355f6e8 100644
+--- a/include/linux/radix-tree.h
++++ b/include/linux/radix-tree.h
+@@ -136,7 +136,7 @@ do {									\
+  */
+ static inline void *radix_tree_deref_slot(void **pslot)
+ {
+-	void *ret = *pslot;
++	void *ret = rcu_dereference(*pslot);
+ 	if (unlikely(radix_tree_is_indirect_ptr(ret)))
+ 		ret = RADIX_TREE_RETRY;
+ 	return ret;
+diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h
+index 04fb47b..16875f8 100644
+--- a/include/linux/syscalls.h
++++ b/include/linux/syscalls.h
+@@ -54,6 +54,7 @@ struct compat_stat;
+ struct compat_timeval;
+ struct robust_list_head;
+ struct getcpu_cache;
++struct old_linux_dirent;
+ 
+ #include <linux/types.h>
+ #include <linux/aio_abi.h>
+@@ -65,6 +66,74 @@ struct getcpu_cache;
+ #include <linux/quota.h>
+ #include <linux/key.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__)
++
++#define SYSCALL_DEFINE0(name)   asmlinkage long sys_##name(void)
++#define SYSCALL_DEFINE1(...)    SYSCALL_DEFINEx(1, __VA_ARGS__)
++#define SYSCALL_DEFINE2(...)    SYSCALL_DEFINEx(2, __VA_ARGS__)
++#define SYSCALL_DEFINE3(...)    SYSCALL_DEFINEx(3, __VA_ARGS__)
++#define SYSCALL_DEFINE4(...)    SYSCALL_DEFINEx(4, __VA_ARGS__)
++#define SYSCALL_DEFINE5(...)    SYSCALL_DEFINEx(5, __VA_ARGS__)
++#define SYSCALL_DEFINE6(...)    SYSCALL_DEFINEx(6, __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
++#define SYSCALL_ALIAS(alias, name)					\
++	asm ("\t.globl " #alias "\n\t.set " #alias ", " #name)
++#endif
++
++#ifdef CONFIG_HAVE_SYSCALL_WRAPPERS
++
++#define SYSCALL_DEFINE(name) static inline long SYSC_##name
++#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__))		\
++	{								\
++		__SC_TEST##x(__VA_ARGS__);				\
++		return (long) SYSC_##name(__SC_CAST##x(__VA_ARGS__));	\
++	}								\
++	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 */
++
+ asmlinkage long sys_time(time_t __user *tloc);
+ asmlinkage long sys_stime(time_t __user *tptr);
+ asmlinkage long sys_gettimeofday(struct timeval __user *tv,
+@@ -77,7 +146,7 @@ asmlinkage long sys_times(struct tms __user *tbuf);
+ 
+ asmlinkage long sys_gettid(void);
+ asmlinkage long sys_nanosleep(struct timespec __user *rqtp, struct timespec __user *rmtp);
+-asmlinkage unsigned long sys_alarm(unsigned int seconds);
++asmlinkage long sys_alarm(unsigned int seconds);
+ asmlinkage long sys_getpid(void);
+ asmlinkage long sys_getppid(void);
+ asmlinkage long sys_getuid(void);
+@@ -166,7 +235,7 @@ asmlinkage long sys_kexec_load(unsigned long entry, unsigned long nr_segments,
+ 				unsigned long flags);
+ 
+ asmlinkage long sys_exit(int error_code);
+-asmlinkage void sys_exit_group(int error_code);
++asmlinkage long sys_exit_group(int error_code);
+ asmlinkage long sys_wait4(pid_t pid, int __user *stat_addr,
+ 				int options, struct rusage __user *ru);
+ asmlinkage long sys_waitid(int which, pid_t pid,
+@@ -196,7 +265,7 @@ asmlinkage long sys_tkill(int pid, int sig);
+ asmlinkage long sys_rt_sigqueueinfo(int pid, int sig, siginfo_t __user *uinfo);
+ asmlinkage long sys_sgetmask(void);
+ asmlinkage long sys_ssetmask(int newmask);
+-asmlinkage unsigned long sys_signal(int sig, __sighandler_t handler);
++asmlinkage long sys_signal(int sig, __sighandler_t handler);
+ asmlinkage long sys_pause(void);
+ 
+ asmlinkage long sys_sync(void);
+@@ -246,29 +315,29 @@ asmlinkage long sys_lsetxattr(const char __user *path, const char __user *name,
+ 			      const void __user *value, size_t size, int flags);
+ asmlinkage long sys_fsetxattr(int fd, const char __user *name,
+ 			      const void __user *value, size_t size, int flags);
+-asmlinkage ssize_t sys_getxattr(const char __user *path, const char __user *name,
+-				void __user *value, size_t size);
+-asmlinkage ssize_t sys_lgetxattr(const char __user *path, const char __user *name,
+-				void __user *value, size_t size);
+-asmlinkage ssize_t sys_fgetxattr(int fd, const char __user *name,
+-				void __user *value, size_t size);
+-asmlinkage ssize_t sys_listxattr(const char __user *path, char __user *list,
+-				size_t size);
+-asmlinkage ssize_t sys_llistxattr(const char __user *path, char __user *list,
+-				size_t size);
+-asmlinkage ssize_t sys_flistxattr(int fd, char __user *list, size_t size);
++asmlinkage long sys_getxattr(const char __user *path, const char __user *name,
++			     void __user *value, size_t size);
++asmlinkage long sys_lgetxattr(const char __user *path, const char __user *name,
++			      void __user *value, size_t size);
++asmlinkage long sys_fgetxattr(int fd, const char __user *name,
++			      void __user *value, size_t size);
++asmlinkage long sys_listxattr(const char __user *path, char __user *list,
++			      size_t size);
++asmlinkage long sys_llistxattr(const char __user *path, char __user *list,
++			       size_t size);
++asmlinkage long sys_flistxattr(int fd, char __user *list, size_t size);
+ asmlinkage long sys_removexattr(const char __user *path,
+ 				const char __user *name);
+ asmlinkage long sys_lremovexattr(const char __user *path,
+ 				 const char __user *name);
+ asmlinkage long sys_fremovexattr(int fd, const char __user *name);
+ 
+-asmlinkage unsigned long sys_brk(unsigned long brk);
++asmlinkage long sys_brk(unsigned long brk);
+ asmlinkage long sys_mprotect(unsigned long start, size_t len,
+ 				unsigned long prot);
+-asmlinkage unsigned long sys_mremap(unsigned long addr,
+-				unsigned long old_len, unsigned long new_len,
+-				unsigned long flags, unsigned long new_addr);
++asmlinkage long sys_mremap(unsigned long addr,
++			   unsigned long old_len, unsigned long new_len,
++			   unsigned long flags, unsigned long new_addr);
+ asmlinkage long sys_remap_file_pages(unsigned long start, unsigned long size,
+ 			unsigned long prot, unsigned long pgoff,
+ 			unsigned long flags);
+@@ -321,10 +390,10 @@ asmlinkage long sys_io_submit(aio_context_t, long,
+ 				struct iocb __user * __user *);
+ asmlinkage long sys_io_cancel(aio_context_t ctx_id, struct iocb __user *iocb,
+ 			      struct io_event __user *result);
+-asmlinkage ssize_t sys_sendfile(int out_fd, int in_fd,
+-				off_t __user *offset, size_t count);
+-asmlinkage ssize_t sys_sendfile64(int out_fd, int in_fd,
+-				loff_t __user *offset, size_t count);
++asmlinkage long sys_sendfile(int out_fd, int in_fd,
++			     off_t __user *offset, size_t count);
++asmlinkage long sys_sendfile64(int out_fd, int in_fd,
++			       loff_t __user *offset, size_t count);
+ asmlinkage long sys_readlink(const char __user *path,
+ 				char __user *buf, int bufsiz);
+ asmlinkage long sys_creat(const char __user *pathname, int mode);
+@@ -368,26 +437,25 @@ asmlinkage long sys_utime(char __user *filename,
+ 				struct utimbuf __user *times);
+ asmlinkage long sys_utimes(char __user *filename,
+ 				struct timeval __user *utimes);
+-asmlinkage off_t sys_lseek(unsigned int fd, off_t offset,
+-				unsigned int origin);
++asmlinkage long sys_lseek(unsigned int fd, off_t offset,
++			  unsigned int origin);
+ asmlinkage long sys_llseek(unsigned int fd, unsigned long offset_high,
+ 			unsigned long offset_low, loff_t __user *result,
+ 			unsigned int origin);
+-asmlinkage ssize_t sys_read(unsigned int fd, char __user *buf,
+-				size_t count);
+-asmlinkage ssize_t sys_readahead(int fd, loff_t offset, size_t count);
+-asmlinkage ssize_t sys_readv(unsigned long fd,
+-				const struct iovec __user *vec,
+-				unsigned long vlen);
+-asmlinkage ssize_t sys_write(unsigned int fd, const char __user *buf,
+-				size_t count);
+-asmlinkage ssize_t sys_writev(unsigned long fd,
+-				const struct iovec __user *vec,
+-				unsigned long vlen);
+-asmlinkage ssize_t sys_pread64(unsigned int fd, char __user *buf,
+-				size_t count, loff_t pos);
+-asmlinkage ssize_t sys_pwrite64(unsigned int fd, const char __user *buf,
+-				size_t count, loff_t pos);
++asmlinkage long sys_read(unsigned int fd, char __user *buf, size_t count);
++asmlinkage long sys_readahead(int fd, loff_t offset, size_t count);
++asmlinkage long sys_readv(unsigned long fd,
++			  const struct iovec __user *vec,
++			  unsigned long vlen);
++asmlinkage long sys_write(unsigned int fd, const char __user *buf,
++			  size_t count);
++asmlinkage long sys_writev(unsigned long fd,
++			   const struct iovec __user *vec,
++			   unsigned long vlen);
++asmlinkage long sys_pread64(unsigned int fd, char __user *buf,
++			    size_t count, loff_t pos);
++asmlinkage long sys_pwrite64(unsigned int fd, const char __user *buf,
++			     size_t count, loff_t pos);
+ asmlinkage long sys_getcwd(char __user *buf, unsigned long size);
+ asmlinkage long sys_mkdir(const char __user *pathname, int mode);
+ asmlinkage long sys_chdir(const char __user *filename);
+@@ -476,7 +544,7 @@ asmlinkage long sys_shmctl(int shmid, int cmd, struct shmid_ds __user *buf);
+ asmlinkage long sys_mq_open(const char __user *name, int oflag, mode_t mode, struct mq_attr __user *attr);
+ asmlinkage long sys_mq_unlink(const char __user *name);
+ asmlinkage long sys_mq_timedsend(mqd_t mqdes, const char __user *msg_ptr, size_t msg_len, unsigned int msg_prio, const struct timespec __user *abs_timeout);
+-asmlinkage ssize_t sys_mq_timedreceive(mqd_t mqdes, char __user *msg_ptr, size_t msg_len, unsigned int __user *msg_prio, const struct timespec __user *abs_timeout);
++asmlinkage long sys_mq_timedreceive(mqd_t mqdes, char __user *msg_ptr, size_t msg_len, unsigned int __user *msg_prio, const struct timespec __user *abs_timeout);
+ asmlinkage long sys_mq_notify(mqd_t mqdes, const struct sigevent __user *notification);
+ asmlinkage long sys_mq_getsetattr(mqd_t mqdes, const struct mq_attr __user *mqstat, struct mq_attr __user *omqstat);
+ 
+@@ -530,11 +598,6 @@ asmlinkage long sys_move_pages(pid_t pid, unsigned long nr_pages,
+ 				const int __user *nodes,
+ 				int __user *status,
+ 				int flags);
+-asmlinkage long compat_sys_move_pages(pid_t pid, unsigned long nr_page,
+-				__u32 __user *pages,
+-				const int __user *nodes,
+-				int __user *status,
+-				int flags);
+ asmlinkage long sys_mbind(unsigned long start, unsigned long len,
+ 				unsigned long mode,
+ 				unsigned long __user *nmask,
+@@ -549,7 +612,7 @@ asmlinkage long sys_inotify_init(void);
+ asmlinkage long sys_inotify_init1(int flags);
+ asmlinkage long sys_inotify_add_watch(int fd, const char __user *path,
+ 					u32 mask);
+-asmlinkage long sys_inotify_rm_watch(int fd, u32 wd);
++asmlinkage long sys_inotify_rm_watch(int fd, __s32 wd);
+ 
+ asmlinkage long sys_spu_run(int fd, __u32 __user *unpc,
+ 				 __u32 __user *ustatus);
+@@ -583,13 +646,6 @@ asmlinkage long sys_readlinkat(int dfd, const char __user *path, char __user *bu
+ 			       int bufsiz);
+ asmlinkage long sys_utimensat(int dfd, char __user *filename,
+ 				struct timespec __user *utimes, int flags);
+-asmlinkage long compat_sys_futimesat(unsigned int dfd, char __user *filename,
+-				     struct compat_timeval __user *t);
+-asmlinkage long compat_sys_newfstatat(unsigned int dfd, char __user * filename,
+-				      struct compat_stat __user *statbuf,
+-				      int flag);
+-asmlinkage long compat_sys_openat(unsigned int dfd, const char __user *filename,
+-				   int flags, int mode);
+ asmlinkage long sys_unshare(unsigned long unshare_flags);
+ 
+ asmlinkage long sys_splice(int fd_in, loff_t __user *off_in,
+@@ -621,6 +677,15 @@ asmlinkage long sys_timerfd_gettime(int ufd, struct itimerspec __user *otmr);
+ asmlinkage long sys_eventfd(unsigned int count);
+ asmlinkage long sys_eventfd2(unsigned int count, int flags);
+ asmlinkage long sys_fallocate(int fd, int mode, loff_t offset, loff_t len);
++asmlinkage long sys_old_readdir(unsigned int, struct old_linux_dirent __user *, unsigned int);
++asmlinkage long sys_pselect6(int, fd_set __user *, fd_set __user *,
++			     fd_set __user *, struct timespec __user *,
++			     void __user *);
++asmlinkage long sys_ppoll(struct pollfd __user *, unsigned int,
++			  struct timespec __user *, const sigset_t __user *,
++			  size_t);
++asmlinkage long sys_pipe2(int __user *, int);
++asmlinkage long sys_pipe(int __user *);
+ 
+ int kernel_execve(const char *filename, char *const argv[], char *const envp[]);
+ 
+diff --git a/include/linux/time.h b/include/linux/time.h
+index ce321ac..fbbd2a1 100644
+--- a/include/linux/time.h
++++ b/include/linux/time.h
+@@ -105,6 +105,7 @@ extern unsigned long read_persistent_clock(void);
+ extern int update_persistent_clock(struct timespec now);
+ extern int no_sync_cmos_clock __read_mostly;
+ void timekeeping_init(void);
++extern int timekeeping_suspended;
+ 
+ unsigned long get_seconds(void);
+ struct timespec current_kernel_time(void);
+diff --git a/ipc/mqueue.c b/ipc/mqueue.c
+index 68eb857..1b3884b 100644
+--- a/ipc/mqueue.c
++++ b/ipc/mqueue.c
+@@ -655,8 +655,8 @@ static int oflag2acc[O_ACCMODE] = { MAY_READ, MAY_WRITE,
+ 	return dentry_open(dentry, mqueue_mnt, oflag);
+ }
+ 
+-asmlinkage long sys_mq_open(const char __user *u_name, int oflag, mode_t mode,
+-				struct mq_attr __user *u_attr)
++SYSCALL_DEFINE4(mq_open, const char __user *, u_name, int, oflag, mode_t, mode,
++		struct mq_attr __user *, u_attr)
+ {
+ 	struct dentry *dentry;
+ 	struct file *filp;
+@@ -723,7 +723,7 @@ out_putname:
+ 	return fd;
+ }
+ 
+-asmlinkage long sys_mq_unlink(const char __user *u_name)
++SYSCALL_DEFINE1(mq_unlink, const char __user *, u_name)
+ {
+ 	int err;
+ 	char *name;
+@@ -816,9 +816,9 @@ static inline void pipelined_receive(struct mqueue_inode_info *info)
+ 	sender->state = STATE_READY;
+ }
+ 
+-asmlinkage long sys_mq_timedsend(mqd_t mqdes, const char __user *u_msg_ptr,
+-	size_t msg_len, unsigned int msg_prio,
+-	const struct timespec __user *u_abs_timeout)
++SYSCALL_DEFINE5(mq_timedsend, mqd_t, mqdes, const char __user *, u_msg_ptr,
++		size_t, msg_len, unsigned int, msg_prio,
++		const struct timespec __user *, u_abs_timeout)
+ {
+ 	struct file *filp;
+ 	struct inode *inode;
+@@ -904,9 +904,9 @@ out:
+ 	return ret;
+ }
+ 
+-asmlinkage ssize_t sys_mq_timedreceive(mqd_t mqdes, char __user *u_msg_ptr,
+-	size_t msg_len, unsigned int __user *u_msg_prio,
+-	const struct timespec __user *u_abs_timeout)
++SYSCALL_DEFINE5(mq_timedreceive, mqd_t, mqdes, char __user *, u_msg_ptr,
++		size_t, msg_len, unsigned int __user *, u_msg_prio,
++		const struct timespec __user *, u_abs_timeout)
+ {
+ 	long timeout;
+ 	ssize_t ret;
+@@ -989,8 +989,8 @@ out:
+  * and he isn't currently owner of notification, will be silently discarded.
+  * It isn't explicitly defined in the POSIX.
+  */
+-asmlinkage long sys_mq_notify(mqd_t mqdes,
+-				const struct sigevent __user *u_notification)
++SYSCALL_DEFINE2(mq_notify, mqd_t, mqdes,
++		const struct sigevent __user *, u_notification)
+ {
+ 	int ret;
+ 	struct file *filp;
+@@ -1115,9 +1115,9 @@ out:
+ 	return ret;
+ }
+ 
+-asmlinkage long sys_mq_getsetattr(mqd_t mqdes,
+-			const struct mq_attr __user *u_mqstat,
+-			struct mq_attr __user *u_omqstat)
++SYSCALL_DEFINE3(mq_getsetattr, mqd_t, mqdes,
++		const struct mq_attr __user *, u_mqstat,
++		struct mq_attr __user *, u_omqstat)
+ {
+ 	int ret;
+ 	struct mq_attr mqstat, omqstat;
+diff --git a/ipc/msg.c b/ipc/msg.c
+index b4eee1c..2ceab7f 100644
+--- a/ipc/msg.c
++++ b/ipc/msg.c
+@@ -309,7 +309,7 @@ static inline int msg_security(struct kern_ipc_perm *ipcp, int msgflg)
+ 	return security_msg_queue_associate(msq, msgflg);
+ }
+ 
+-asmlinkage long sys_msgget(key_t key, int msgflg)
++SYSCALL_DEFINE2(msgget, key_t, key, int, msgflg)
+ {
+ 	struct ipc_namespace *ns;
+ 	struct ipc_ops msg_ops;
+@@ -466,7 +466,7 @@ out_up:
+ 	return err;
+ }
+ 
+-asmlinkage long sys_msgctl(int msqid, int cmd, struct msqid_ds __user *buf)
++SYSCALL_DEFINE3(msgctl, int, msqid, int, cmd, struct msqid_ds __user *, buf)
+ {
+ 	struct msg_queue *msq;
+ 	int err, version;
+@@ -723,8 +723,8 @@ out_free:
+ 	return err;
+ }
+ 
+-asmlinkage long
+-sys_msgsnd(int msqid, struct msgbuf __user *msgp, size_t msgsz, int msgflg)
++SYSCALL_DEFINE4(msgsnd, int, msqid, struct msgbuf __user *, msgp, size_t, msgsz,
++		int, msgflg)
+ {
+ 	long mtype;
+ 
+@@ -904,8 +904,8 @@ out_unlock:
+ 	return msgsz;
+ }
+ 
+-asmlinkage long sys_msgrcv(int msqid, struct msgbuf __user *msgp, size_t msgsz,
+-			   long msgtyp, int msgflg)
++SYSCALL_DEFINE5(msgrcv, int, msqid, struct msgbuf __user *, msgp, size_t, msgsz,
++		long, msgtyp, int, msgflg)
+ {
+ 	long err, mtype;
+ 
+diff --git a/ipc/sem.c b/ipc/sem.c
+index 0821224..4d842a5 100644
+--- a/ipc/sem.c
++++ b/ipc/sem.c
+@@ -308,7 +308,7 @@ static inline int sem_more_checks(struct kern_ipc_perm *ipcp,
+ 	return 0;
+ }
+ 
+-asmlinkage long sys_semget(key_t key, int nsems, int semflg)
++SYSCALL_DEFINE3(semget, key_t, key, int, nsems, int, semflg)
+ {
+ 	struct ipc_namespace *ns;
+ 	struct ipc_ops sem_ops;
+@@ -887,7 +887,7 @@ out_up:
+ 	return err;
+ }
+ 
+-asmlinkage long sys_semctl (int semid, int semnum, int cmd, union semun arg)
++SYSCALL_DEFINE(semctl)(int semid, int semnum, int cmd, union semun arg)
+ {
+ 	int err = -EINVAL;
+ 	int version;
+@@ -923,6 +923,13 @@ asmlinkage long sys_semctl (int semid, int semnum, int cmd, union semun arg)
+ 		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,
+@@ -1048,8 +1055,8 @@ out:
+ 	return un;
+ }
+ 
+-asmlinkage long sys_semtimedop(int semid, struct sembuf __user *tsops,
+-			unsigned nsops, const struct timespec __user *timeout)
++SYSCALL_DEFINE4(semtimedop, int, semid, struct sembuf __user *, tsops,
++		unsigned, nsops, const struct timespec __user *, timeout)
+ {
+ 	int error = -EINVAL;
+ 	struct sem_array *sma;
+@@ -1226,7 +1233,8 @@ out_free:
+ 	return error;
+ }
+ 
+-asmlinkage long sys_semop (int semid, struct sembuf __user *tsops, unsigned nsops)
++SYSCALL_DEFINE3(semop, int, semid, struct sembuf __user *, tsops,
++		unsigned, nsops)
+ {
+ 	return sys_semtimedop(semid, tsops, nsops, NULL);
+ }
+diff --git a/ipc/shm.c b/ipc/shm.c
+index 867e5d6..5afe608 100644
+--- a/ipc/shm.c
++++ b/ipc/shm.c
+@@ -440,7 +440,7 @@ static inline int shm_more_checks(struct kern_ipc_perm *ipcp,
+ 	return 0;
+ }
+ 
+-asmlinkage long sys_shmget (key_t key, size_t size, int shmflg)
++SYSCALL_DEFINE3(shmget, key_t, key, size_t, size, int, shmflg)
+ {
+ 	struct ipc_namespace *ns;
+ 	struct ipc_ops shm_ops;
+@@ -621,7 +621,7 @@ out_up:
+ 	return err;
+ }
+ 
+-asmlinkage long sys_shmctl(int shmid, int cmd, struct shmid_ds __user *buf)
++SYSCALL_DEFINE3(shmctl, int, shmid, int, cmd, struct shmid_ds __user *, buf)
+ {
+ 	struct shmid_kernel *shp;
+ 	int err, version;
+@@ -945,7 +945,7 @@ out_put_dentry:
+ 	goto out_nattch;
+ }
+ 
+-asmlinkage long sys_shmat(int shmid, char __user *shmaddr, int shmflg)
++SYSCALL_DEFINE3(shmat, int, shmid, char __user *, shmaddr, int, shmflg)
+ {
+ 	unsigned long ret;
+ 	long err;
+@@ -961,7 +961,7 @@ asmlinkage long sys_shmat(int shmid, char __user *shmaddr, int shmflg)
+  * detach and kill segment if marked destroyed.
+  * The work is done in shm_close.
+  */
+-asmlinkage long sys_shmdt(char __user *shmaddr)
++SYSCALL_DEFINE1(shmdt, char __user *, shmaddr)
+ {
+ 	struct mm_struct *mm = current->mm;
+ 	struct vm_area_struct *vma, *next;
+diff --git a/kernel/acct.c b/kernel/acct.c
+index f6006a6..8afbb31 100644
+--- a/kernel/acct.c
++++ b/kernel/acct.c
+@@ -277,7 +277,7 @@ static int acct_on(char *name)
+  * should be written. If the filename is NULL, accounting will be
+  * shutdown.
+  */
+-asmlinkage long sys_acct(const char __user *name)
++SYSCALL_DEFINE1(acct, const char __user *, name)
+ {
+ 	int error;
+ 
+diff --git a/kernel/capability.c b/kernel/capability.c
+index 33e51e7..6ec8359 100644
+--- a/kernel/capability.c
++++ b/kernel/capability.c
+@@ -348,7 +348,7 @@ EXPORT_SYMBOL(cap_set_effective);
+  *
+  * Returns 0 on success and < 0 on error.
+  */
+-asmlinkage long sys_capget(cap_user_header_t header, cap_user_data_t dataptr)
++SYSCALL_DEFINE2(capget, cap_user_header_t, header, cap_user_data_t, dataptr)
+ {
+ 	int ret = 0;
+ 	pid_t pid;
+@@ -425,7 +425,7 @@ asmlinkage long sys_capget(cap_user_header_t header, cap_user_data_t dataptr)
+  *
+  * Returns 0 on success and < 0 on error.
+  */
+-asmlinkage long sys_capset(cap_user_header_t header, const cap_user_data_t data)
++SYSCALL_DEFINE2(capset, cap_user_header_t, header, const cap_user_data_t, data)
+ {
+ 	struct __user_cap_data_struct kdata[_KERNEL_CAPABILITY_U32S];
+ 	unsigned i, tocopy;
+diff --git a/kernel/cgroup.c b/kernel/cgroup.c
+index 2606d0f..c882385 100644
+--- a/kernel/cgroup.c
++++ b/kernel/cgroup.c
+@@ -2942,7 +2942,11 @@ int cgroup_clone(struct task_struct *tsk, struct cgroup_subsys *subsys,
+ 	parent = task_cgroup(tsk, subsys->subsys_id);
+ 
+ 	/* Pin the hierarchy */
+-	atomic_inc(&parent->root->sb->s_active);
++	if (!atomic_inc_not_zero(&parent->root->sb->s_active)) {
++		/* We race with the final deactivate_super() */
++		mutex_unlock(&cgroup_mutex);
++		return 0;
++	}
+ 
+ 	/* Keep the cgroup alive */
+ 	get_css_set(cg);
+diff --git a/kernel/exec_domain.c b/kernel/exec_domain.c
+index 0511716..667c841 100644
+--- a/kernel/exec_domain.c
++++ b/kernel/exec_domain.c
+@@ -209,8 +209,7 @@ static int __init proc_execdomains_init(void)
+ module_init(proc_execdomains_init);
+ #endif
+ 
+-asmlinkage long
+-sys_personality(u_long personality)
++SYSCALL_DEFINE1(personality, u_long, personality)
+ {
+ 	u_long old = current->personality;
+ 
+diff --git a/kernel/exit.c b/kernel/exit.c
+index 2d8be7e..10e393b 100644
+--- a/kernel/exit.c
++++ b/kernel/exit.c
+@@ -1143,7 +1143,7 @@ NORET_TYPE void complete_and_exit(struct completion *comp, long code)
+ 
+ EXPORT_SYMBOL(complete_and_exit);
+ 
+-asmlinkage long sys_exit(int error_code)
++SYSCALL_DEFINE1(exit, int, error_code)
+ {
+ 	do_exit((error_code&0xff)<<8);
+ }
+@@ -1184,9 +1184,11 @@ do_group_exit(int exit_code)
+  * wait4()-ing process will get the correct exit code - even if this
+  * thread is not the thread group leader.
+  */
+-asmlinkage void sys_exit_group(int error_code)
++SYSCALL_DEFINE1(exit_group, int, error_code)
+ {
+ 	do_group_exit((error_code & 0xff) << 8);
++	/* NOTREACHED */
++	return 0;
+ }
+ 
+ static struct pid *task_pid_type(struct task_struct *task, enum pid_type type)
+@@ -1753,9 +1755,8 @@ end:
+ 	return retval;
+ }
+ 
+-asmlinkage long sys_waitid(int which, pid_t upid,
+-			   struct siginfo __user *infop, int options,
+-			   struct rusage __user *ru)
++SYSCALL_DEFINE5(waitid, int, which, pid_t, upid, struct siginfo __user *,
++		infop, int, options, struct rusage __user *, ru)
+ {
+ 	struct pid *pid = NULL;
+ 	enum pid_type type;
+@@ -1794,8 +1795,8 @@ asmlinkage long sys_waitid(int which, pid_t upid,
+ 	return ret;
+ }
+ 
+-asmlinkage long sys_wait4(pid_t upid, int __user *stat_addr,
+-			  int options, struct rusage __user *ru)
++SYSCALL_DEFINE4(wait4, pid_t, upid, int __user *, stat_addr,
++		int, options, struct rusage __user *, ru)
+ {
+ 	struct pid *pid = NULL;
+ 	enum pid_type type;
+@@ -1832,7 +1833,7 @@ asmlinkage long sys_wait4(pid_t upid, int __user *stat_addr,
+  * sys_waitpid() remains for compatibility. waitpid() should be
+  * implemented by calling sys_wait4() from libc.a.
+  */
+-asmlinkage long sys_waitpid(pid_t pid, int __user *stat_addr, int options)
++SYSCALL_DEFINE3(waitpid, pid_t, pid, int __user *, stat_addr, int, options)
+ {
+ 	return sys_wait4(pid, stat_addr, options, NULL);
+ }
+diff --git a/kernel/fork.c b/kernel/fork.c
+index 495da2e..f2c9c60 100644
+--- a/kernel/fork.c
++++ b/kernel/fork.c
+@@ -894,7 +894,7 @@ static void copy_flags(unsigned long clone_flags, struct task_struct *p)
+ 	clear_freeze_flag(p);
+ }
+ 
+-asmlinkage long sys_set_tid_address(int __user *tidptr)
++SYSCALL_DEFINE1(set_tid_address, int __user *, tidptr)
+ {
+ 	current->clear_child_tid = tidptr;
+ 
+@@ -1589,7 +1589,7 @@ static int unshare_fd(unsigned long unshare_flags, struct files_struct **new_fdp
+  * constructed. Here we are modifying the current, active,
+  * task_struct.
+  */
+-asmlinkage long sys_unshare(unsigned long unshare_flags)
++SYSCALL_DEFINE1(unshare, unsigned long, unshare_flags)
+ {
+ 	int err = 0;
+ 	struct fs_struct *fs, *new_fs = NULL;
+diff --git a/kernel/futex.c b/kernel/futex.c
+index 8af1002..c14b159 100644
+--- a/kernel/futex.c
++++ b/kernel/futex.c
+@@ -1800,9 +1800,8 @@ pi_faulted:
+  * @head: pointer to the list-head
+  * @len: length of the list-head, as userspace expects
+  */
+-asmlinkage long
+-sys_set_robust_list(struct robust_list_head __user *head,
+-		    size_t len)
++SYSCALL_DEFINE2(set_robust_list, struct robust_list_head __user *, head,
++		size_t, len)
+ {
+ 	if (!futex_cmpxchg_enabled)
+ 		return -ENOSYS;
+@@ -1823,9 +1822,9 @@ sys_set_robust_list(struct robust_list_head __user *head,
+  * @head_ptr: pointer to a list-head pointer, the kernel fills it in
+  * @len_ptr: pointer to a length field, the kernel fills in the header size
+  */
+-asmlinkage long
+-sys_get_robust_list(int pid, struct robust_list_head __user * __user *head_ptr,
+-		    size_t __user *len_ptr)
++SYSCALL_DEFINE3(get_robust_list, int, pid,
++		struct robust_list_head __user * __user *, head_ptr,
++		size_t __user *, len_ptr)
+ {
+ 	struct robust_list_head __user *head;
+ 	unsigned long ret;
+@@ -2039,9 +2038,9 @@ long do_futex(u32 __user *uaddr, int op, u32 val, ktime_t *timeout,
+ }
+ 
+ 
+-asmlinkage long sys_futex(u32 __user *uaddr, int op, u32 val,
+-			  struct timespec __user *utime, u32 __user *uaddr2,
+-			  u32 val3)
++SYSCALL_DEFINE6(futex, u32 __user *, uaddr, int, op, u32, val,
++		struct timespec __user *, utime, u32 __user *, uaddr2,
++		u32, val3)
+ {
+ 	struct timespec ts;
+ 	ktime_t t, *tp = NULL;
+diff --git a/kernel/hrtimer.c b/kernel/hrtimer.c
+index 47e6334..3016911 100644
+--- a/kernel/hrtimer.c
++++ b/kernel/hrtimer.c
+@@ -1628,8 +1628,8 @@ out:
+ 	return ret;
+ }
+ 
+-asmlinkage long
+-sys_nanosleep(struct timespec __user *rqtp, struct timespec __user *rmtp)
++SYSCALL_DEFINE2(nanosleep, struct timespec __user *, rqtp,
++		struct timespec __user *, rmtp)
+ {
+ 	struct timespec tu;
+ 
+diff --git a/kernel/itimer.c b/kernel/itimer.c
+index db7c358..6a5fe93 100644
+--- a/kernel/itimer.c
++++ b/kernel/itimer.c
+@@ -100,7 +100,7 @@ int do_getitimer(int which, struct itimerval *value)
+ 	return 0;
+ }
+ 
+-asmlinkage long sys_getitimer(int which, struct itimerval __user *value)
++SYSCALL_DEFINE2(getitimer, int, which, struct itimerval __user *, value)
+ {
+ 	int error = -EFAULT;
+ 	struct itimerval get_buffer;
+@@ -260,9 +260,8 @@ unsigned int alarm_setitimer(unsigned int seconds)
+ 	return it_old.it_value.tv_sec;
+ }
+ 
+-asmlinkage long sys_setitimer(int which,
+-			      struct itimerval __user *value,
+-			      struct itimerval __user *ovalue)
++SYSCALL_DEFINE3(setitimer, int, which, struct itimerval __user *, value,
++		struct itimerval __user *, ovalue)
+ {
+ 	struct itimerval set_buffer, get_buffer;
+ 	int error;
+diff --git a/kernel/kexec.c b/kernel/kexec.c
+index ac0fde7..ad257a5 100644
+--- a/kernel/kexec.c
++++ b/kernel/kexec.c
+@@ -934,9 +934,8 @@ struct kimage *kexec_crash_image;
+ 
+ static DEFINE_MUTEX(kexec_mutex);
+ 
+-asmlinkage long sys_kexec_load(unsigned long entry, unsigned long nr_segments,
+-				struct kexec_segment __user *segments,
+-				unsigned long flags)
++SYSCALL_DEFINE4(kexec_load, unsigned long, entry, unsigned long, nr_segments,
++		struct kexec_segment __user *, segments, unsigned long, flags)
+ {
+ 	struct kimage **dest_image, *image;
+ 	int result;
+diff --git a/kernel/module.c b/kernel/module.c
+index 1f4cc00..79fd4d2 100644
+--- a/kernel/module.c
++++ b/kernel/module.c
+@@ -743,8 +743,8 @@ static void wait_for_zero_refcount(struct module *mod)
+ 	mutex_lock(&module_mutex);
+ }
+ 
+-asmlinkage long
+-sys_delete_module(const char __user *name_user, unsigned int flags)
++SYSCALL_DEFINE2(delete_module, const char __user *, name_user,
++		unsigned int, flags)
+ {
+ 	struct module *mod;
+ 	char name[MODULE_NAME_LEN];
+@@ -2288,10 +2288,8 @@ static noinline struct module *load_module(void __user *umod,
+ }
+ 
+ /* This is where the real work happens */
+-asmlinkage long
+-sys_init_module(void __user *umod,
+-		unsigned long len,
+-		const char __user *uargs)
++SYSCALL_DEFINE3(init_module, void __user *, umod,
++		unsigned long, len, const char __user *, uargs)
+ {
+ 	struct module *mod;
+ 	int ret = 0;
+diff --git a/kernel/posix-timers.c b/kernel/posix-timers.c
+index a140e44..6c48fc8 100644
+--- a/kernel/posix-timers.c
++++ b/kernel/posix-timers.c
+@@ -470,10 +470,9 @@ static void release_posix_timer(struct k_itimer *tmr, int it_id_set)
+ 
+ /* Create a POSIX.1b interval timer. */
+ 
+-asmlinkage long
+-sys_timer_create(const clockid_t which_clock,
+-		 struct sigevent __user *timer_event_spec,
+-		 timer_t __user * created_timer_id)
++SYSCALL_DEFINE3(timer_create, const clockid_t, which_clock,
++		struct sigevent __user *, timer_event_spec,
++		timer_t __user *, created_timer_id)
+ {
+ 	struct k_itimer *new_timer;
+ 	int error, new_timer_id;
+@@ -659,8 +658,8 @@ common_timer_get(struct k_itimer *timr, struct itimerspec *cur_setting)
+ }
+ 
+ /* Get the time remaining on a POSIX.1b interval timer. */
+-asmlinkage long
+-sys_timer_gettime(timer_t timer_id, struct itimerspec __user *setting)
++SYSCALL_DEFINE2(timer_gettime, timer_t, timer_id,
++		struct itimerspec __user *, setting)
+ {
+ 	struct k_itimer *timr;
+ 	struct itimerspec cur_setting;
+@@ -689,8 +688,7 @@ sys_timer_gettime(timer_t timer_id, struct itimerspec __user *setting)
+  * the call back to do_schedule_next_timer().  So all we need to do is
+  * to pick up the frozen overrun.
+  */
+-asmlinkage long
+-sys_timer_getoverrun(timer_t timer_id)
++SYSCALL_DEFINE1(timer_getoverrun, timer_t, timer_id)
+ {
+ 	struct k_itimer *timr;
+ 	int overrun;
+@@ -758,10 +756,9 @@ common_timer_set(struct k_itimer *timr, int flags,
+ }
+ 
+ /* Set a POSIX.1b interval timer */
+-asmlinkage long
+-sys_timer_settime(timer_t timer_id, int flags,
+-		  const struct itimerspec __user *new_setting,
+-		  struct itimerspec __user *old_setting)
++SYSCALL_DEFINE4(timer_settime, timer_t, timer_id, int, flags,
++		const struct itimerspec __user *, new_setting,
++		struct itimerspec __user *, old_setting)
+ {
+ 	struct k_itimer *timr;
+ 	struct itimerspec new_spec, old_spec;
+@@ -814,8 +811,7 @@ static inline int timer_delete_hook(struct k_itimer *timer)
+ }
+ 
+ /* Delete a POSIX.1b interval timer. */
+-asmlinkage long
+-sys_timer_delete(timer_t timer_id)
++SYSCALL_DEFINE1(timer_delete, timer_t, timer_id)
+ {
+ 	struct k_itimer *timer;
+ 	unsigned long flags;
+@@ -903,8 +899,8 @@ int do_posix_clock_nonanosleep(const clockid_t clock, int flags,
+ }
+ EXPORT_SYMBOL_GPL(do_posix_clock_nonanosleep);
+ 
+-asmlinkage long sys_clock_settime(const clockid_t which_clock,
+-				  const struct timespec __user *tp)
++SYSCALL_DEFINE2(clock_settime, const clockid_t, which_clock,
++		const struct timespec __user *, tp)
+ {
+ 	struct timespec new_tp;
+ 
+@@ -916,8 +912,8 @@ asmlinkage long sys_clock_settime(const clockid_t which_clock,
+ 	return CLOCK_DISPATCH(which_clock, clock_set, (which_clock, &new_tp));
+ }
+ 
+-asmlinkage long
+-sys_clock_gettime(const clockid_t which_clock, struct timespec __user *tp)
++SYSCALL_DEFINE2(clock_gettime, const clockid_t, which_clock,
++		struct timespec __user *,tp)
+ {
+ 	struct timespec kernel_tp;
+ 	int error;
+@@ -933,8 +929,8 @@ sys_clock_gettime(const clockid_t which_clock, struct timespec __user *tp)
+ 
+ }
+ 
+-asmlinkage long
+-sys_clock_getres(const clockid_t which_clock, struct timespec __user *tp)
++SYSCALL_DEFINE2(clock_getres, const clockid_t, which_clock,
++		struct timespec __user *, tp)
+ {
+ 	struct timespec rtn_tp;
+ 	int error;
+@@ -963,10 +959,9 @@ static int common_nsleep(const clockid_t which_clock, int flags,
+ 				 which_clock);
+ }
+ 
+-asmlinkage long
+-sys_clock_nanosleep(const clockid_t which_clock, int flags,
+-		    const struct timespec __user *rqtp,
+-		    struct timespec __user *rmtp)
++SYSCALL_DEFINE4(clock_nanosleep, const clockid_t, which_clock, int, flags,
++		const struct timespec __user *, rqtp,
++		struct timespec __user *, rmtp)
+ {
+ 	struct timespec t;
+ 
+diff --git a/kernel/printk.c b/kernel/printk.c
+index f492f15..b84eec7 100644
+--- a/kernel/printk.c
++++ b/kernel/printk.c
+@@ -382,7 +382,7 @@ out:
+ 	return error;
+ }
+ 
+-asmlinkage long sys_syslog(int type, char __user *buf, int len)
++SYSCALL_DEFINE3(syslog, int, type, char __user *, buf, int, len)
+ {
+ 	return do_syslog(type, buf, len);
+ }
+@@ -742,11 +742,6 @@ EXPORT_SYMBOL(vprintk);
+ 
+ #else
+ 
+-asmlinkage long sys_syslog(int type, char __user *buf, int len)
+-{
+-	return -ENOSYS;
+-}
+-
+ static void call_console_drivers(unsigned start, unsigned end)
+ {
+ }
+diff --git a/kernel/ptrace.c b/kernel/ptrace.c
+index 4c8bcd7..9234a16 100644
+--- a/kernel/ptrace.c
++++ b/kernel/ptrace.c
+@@ -545,7 +545,7 @@ struct task_struct *ptrace_get_task_struct(pid_t pid)
+ #define arch_ptrace_attach(child)	do { } while (0)
+ #endif
+ 
+-asmlinkage long sys_ptrace(long request, long pid, long addr, long data)
++SYSCALL_DEFINE4(ptrace, long, request, long, pid, long, addr, long, data)
+ {
+ 	struct task_struct *child;
+ 	long ret;
+diff --git a/kernel/sched.c b/kernel/sched.c
+index e4bb1dd..2c68ec3 100644
+--- a/kernel/sched.c
++++ b/kernel/sched.c
+@@ -5025,7 +5025,7 @@ int can_nice(const struct task_struct *p, const int nice)
+  * sys_setpriority is a more generic, but much slower function that
+  * does similar things.
+  */
+-asmlinkage long sys_nice(int increment)
++SYSCALL_DEFINE1(nice, int, increment)
+ {
+ 	long nice, retval;
+ 
+@@ -5317,8 +5317,8 @@ do_sched_setscheduler(pid_t pid, int policy, struct sched_param __user *param)
+  * @policy: new policy.
+  * @param: structure containing the new RT priority.
+  */
+-asmlinkage long
+-sys_sched_setscheduler(pid_t pid, int policy, struct sched_param __user *param)
++SYSCALL_DEFINE3(sched_setscheduler, pid_t, pid, int, policy,
++		struct sched_param __user *, param)
+ {
+ 	/* negative values for policy are not valid */
+ 	if (policy < 0)
+@@ -5332,7 +5332,7 @@ sys_sched_setscheduler(pid_t pid, int policy, struct sched_param __user *param)
+  * @pid: the pid in question.
+  * @param: structure containing the new RT priority.
+  */
+-asmlinkage long sys_sched_setparam(pid_t pid, struct sched_param __user *param)
++SYSCALL_DEFINE2(sched_setparam, pid_t, pid, struct sched_param __user *, param)
+ {
+ 	return do_sched_setscheduler(pid, -1, param);
+ }
+@@ -5341,7 +5341,7 @@ asmlinkage long sys_sched_setparam(pid_t pid, struct sched_param __user *param)
+  * sys_sched_getscheduler - get the policy (scheduling class) of a thread
+  * @pid: the pid in question.
+  */
+-asmlinkage long sys_sched_getscheduler(pid_t pid)
++SYSCALL_DEFINE1(sched_getscheduler, pid_t, pid)
+ {
+ 	struct task_struct *p;
+ 	int retval;
+@@ -5366,7 +5366,7 @@ asmlinkage long sys_sched_getscheduler(pid_t pid)
+  * @pid: the pid in question.
+  * @param: structure containing the RT priority.
+  */
+-asmlinkage long sys_sched_getparam(pid_t pid, struct sched_param __user *param)
++SYSCALL_DEFINE2(sched_getparam, pid_t, pid, struct sched_param __user *, param)
+ {
+ 	struct sched_param lp;
+ 	struct task_struct *p;
+@@ -5474,8 +5474,8 @@ static int get_user_cpu_mask(unsigned long __user *user_mask_ptr, unsigned len,
+  * @len: length in bytes of the bitmask pointed to by user_mask_ptr
+  * @user_mask_ptr: user-space pointer to the new cpu mask
+  */
+-asmlinkage long sys_sched_setaffinity(pid_t pid, unsigned int len,
+-				      unsigned long __user *user_mask_ptr)
++SYSCALL_DEFINE3(sched_setaffinity, pid_t, pid, unsigned int, len,
++		unsigned long __user *, user_mask_ptr)
+ {
+ 	cpumask_t new_mask;
+ 	int retval;
+@@ -5519,8 +5519,8 @@ out_unlock:
+  * @len: length in bytes of the bitmask pointed to by user_mask_ptr
+  * @user_mask_ptr: user-space pointer to hold the current cpu mask
+  */
+-asmlinkage long sys_sched_getaffinity(pid_t pid, unsigned int len,
+-				      unsigned long __user *user_mask_ptr)
++SYSCALL_DEFINE3(sched_getaffinity, pid_t, pid, unsigned int, len,
++		unsigned long __user *, user_mask_ptr)
+ {
+ 	int ret;
+ 	cpumask_t mask;
+@@ -5544,7 +5544,7 @@ asmlinkage long sys_sched_getaffinity(pid_t pid, unsigned int len,
+  * This function yields the current CPU to other tasks. If there are no
+  * other threads running on this CPU then this function will return.
+  */
+-asmlinkage long sys_sched_yield(void)
++SYSCALL_DEFINE0(sched_yield)
+ {
+ 	struct rq *rq = this_rq_lock();
+ 
+@@ -5685,7 +5685,7 @@ long __sched io_schedule_timeout(long timeout)
+  * this syscall returns the maximum rt_priority that can be used
+  * by a given scheduling class.
+  */
+-asmlinkage long sys_sched_get_priority_max(int policy)
++SYSCALL_DEFINE1(sched_get_priority_max, int, policy)
+ {
+ 	int ret = -EINVAL;
+ 
+@@ -5710,7 +5710,7 @@ asmlinkage long sys_sched_get_priority_max(int policy)
+  * this syscall returns the minimum rt_priority that can be used
+  * by a given scheduling class.
+  */
+-asmlinkage long sys_sched_get_priority_min(int policy)
++SYSCALL_DEFINE1(sched_get_priority_min, int, policy)
+ {
+ 	int ret = -EINVAL;
+ 
+@@ -5735,8 +5735,8 @@ asmlinkage long sys_sched_get_priority_min(int policy)
+  * this syscall writes the default timeslice value of a given process
+  * into the user-space timespec buffer. A value of '0' means infinity.
+  */
+-asmlinkage
+-long sys_sched_rr_get_interval(pid_t pid, struct timespec __user *interval)
++SYSCALL_DEFINE2(sched_rr_get_interval, pid_t, pid,
++		struct timespec __user *, interval)
+ {
+ 	struct task_struct *p;
+ 	unsigned int time_slice;
+diff --git a/kernel/sched_clock.c b/kernel/sched_clock.c
+index e8ab096..a0b0852 100644
+--- a/kernel/sched_clock.c
++++ b/kernel/sched_clock.c
+@@ -124,7 +124,7 @@ static u64 __update_sched_clock(struct sched_clock_data *scd, u64 now)
+ 
+ 	clock = scd->tick_gtod + delta;
+ 	min_clock = wrap_max(scd->tick_gtod, scd->clock);
+-	max_clock = scd->tick_gtod + TICK_NSEC;
++	max_clock = wrap_max(scd->clock, scd->tick_gtod + TICK_NSEC);
+ 
+ 	clock = wrap_max(clock, min_clock);
+ 	clock = wrap_min(clock, max_clock);
+@@ -227,6 +227,9 @@ EXPORT_SYMBOL_GPL(sched_clock_idle_sleep_event);
+  */
+ void sched_clock_idle_wakeup_event(u64 delta_ns)
+ {
++	if (timekeeping_suspended)
++		return;
++
+ 	sched_clock_tick();
+ 	touch_softlockup_watchdog();
+ }
+diff --git a/kernel/signal.c b/kernel/signal.c
+index 4530fc6..28859a9 100644
+--- a/kernel/signal.c
++++ b/kernel/signal.c
+@@ -1940,7 +1940,7 @@ EXPORT_SYMBOL(unblock_all_signals);
+  * System call entry points.
+  */
+ 
+-asmlinkage long sys_restart_syscall(void)
++SYSCALL_DEFINE0(restart_syscall)
+ {
+ 	struct restart_block *restart = &current_thread_info()->restart_block;
+ 	return restart->fn(restart);
+@@ -1993,8 +1993,8 @@ int sigprocmask(int how, sigset_t *set, sigset_t *oldset)
+ 	return error;
+ }
+ 
+-asmlinkage long
+-sys_rt_sigprocmask(int how, sigset_t __user *set, sigset_t __user *oset, size_t sigsetsize)
++SYSCALL_DEFINE4(rt_sigprocmask, int, how, sigset_t __user *, set,
++		sigset_t __user *, oset, size_t, sigsetsize)
+ {
+ 	int error = -EINVAL;
+ 	sigset_t old_set, new_set;
+@@ -2053,8 +2053,7 @@ out:
+ 	return error;
+ }	
+ 
+-asmlinkage long
+-sys_rt_sigpending(sigset_t __user *set, size_t sigsetsize)
++SYSCALL_DEFINE2(rt_sigpending, sigset_t __user *, set, size_t, sigsetsize)
+ {
+ 	return do_sigpending(set, sigsetsize);
+ }
+@@ -2125,11 +2124,9 @@ int copy_siginfo_to_user(siginfo_t __user *to, siginfo_t *from)
+ 
+ #endif
+ 
+-asmlinkage long
+-sys_rt_sigtimedwait(const sigset_t __user *uthese,
+-		    siginfo_t __user *uinfo,
+-		    const struct timespec __user *uts,
+-		    size_t sigsetsize)
++SYSCALL_DEFINE4(rt_sigtimedwait, const sigset_t __user *, uthese,
++		siginfo_t __user *, uinfo, const struct timespec __user *, uts,
++		size_t, sigsetsize)
+ {
+ 	int ret, sig;
+ 	sigset_t these;
+@@ -2202,8 +2199,7 @@ sys_rt_sigtimedwait(const sigset_t __user *uthese,
+ 	return ret;
+ }
+ 
+-asmlinkage long
+-sys_kill(pid_t pid, int sig)
++SYSCALL_DEFINE2(kill, pid_t, pid, int, sig)
+ {
+ 	struct siginfo info;
+ 
+@@ -2262,7 +2258,7 @@ static int do_tkill(pid_t tgid, pid_t pid, int sig)
+  *  exists but it's not belonging to the target process anymore. This
+  *  method solves the problem of threads exiting and PIDs getting reused.
+  */
+-asmlinkage long sys_tgkill(pid_t tgid, pid_t pid, int sig)
++SYSCALL_DEFINE3(tgkill, pid_t, tgid, pid_t, pid, int, sig)
+ {
+ 	/* This is only valid for single tasks */
+ 	if (pid <= 0 || tgid <= 0)
+@@ -2274,8 +2270,7 @@ asmlinkage long sys_tgkill(pid_t tgid, pid_t pid, int sig)
+ /*
+  *  Send a signal to only one task, even if it's a CLONE_THREAD task.
+  */
+-asmlinkage long
+-sys_tkill(pid_t pid, int sig)
++SYSCALL_DEFINE2(tkill, pid_t, pid, int, sig)
+ {
+ 	/* This is only valid for single tasks */
+ 	if (pid <= 0)
+@@ -2284,8 +2279,8 @@ sys_tkill(pid_t pid, int sig)
+ 	return do_tkill(0, pid, sig);
+ }
+ 
+-asmlinkage long
+-sys_rt_sigqueueinfo(pid_t pid, int sig, siginfo_t __user *uinfo)
++SYSCALL_DEFINE3(rt_sigqueueinfo, pid_t, pid, int, sig,
++		siginfo_t __user *, uinfo)
+ {
+ 	siginfo_t info;
+ 
+@@ -2413,8 +2408,7 @@ out:
+ 
+ #ifdef __ARCH_WANT_SYS_SIGPENDING
+ 
+-asmlinkage long
+-sys_sigpending(old_sigset_t __user *set)
++SYSCALL_DEFINE1(sigpending, old_sigset_t __user *, set)
+ {
+ 	return do_sigpending(set, sizeof(*set));
+ }
+@@ -2425,8 +2419,8 @@ sys_sigpending(old_sigset_t __user *set)
+ /* Some platforms have their own version with special arguments others
+    support only sys_rt_sigprocmask.  */
+ 
+-asmlinkage long
+-sys_sigprocmask(int how, old_sigset_t __user *set, old_sigset_t __user *oset)
++SYSCALL_DEFINE3(sigprocmask, int, how, old_sigset_t __user *, set,
++		old_sigset_t __user *, oset)
+ {
+ 	int error;
+ 	old_sigset_t old_set, new_set;
+@@ -2476,11 +2470,10 @@ out:
+ #endif /* __ARCH_WANT_SYS_SIGPROCMASK */
+ 
+ #ifdef __ARCH_WANT_SYS_RT_SIGACTION
+-asmlinkage long
+-sys_rt_sigaction(int sig,
+-		 const struct sigaction __user *act,
+-		 struct sigaction __user *oact,
+-		 size_t sigsetsize)
++SYSCALL_DEFINE4(rt_sigaction, int, sig,
++		const struct sigaction __user *, act,
++		struct sigaction __user *, oact,
++		size_t, sigsetsize)
+ {
+ 	struct k_sigaction new_sa, old_sa;
+ 	int ret = -EINVAL;
+@@ -2510,15 +2503,13 @@ out:
+ /*
+  * For backwards compatibility.  Functionality superseded by sigprocmask.
+  */
+-asmlinkage long
+-sys_sgetmask(void)
++SYSCALL_DEFINE0(sgetmask)
+ {
+ 	/* SMP safe */
+ 	return current->blocked.sig[0];
+ }
+ 
+-asmlinkage long
+-sys_ssetmask(int newmask)
++SYSCALL_DEFINE1(ssetmask, int, newmask)
+ {
+ 	int old;
+ 
+@@ -2538,8 +2529,7 @@ sys_ssetmask(int newmask)
+ /*
+  * For backwards compatibility.  Functionality superseded by sigaction.
+  */
+-asmlinkage unsigned long
+-sys_signal(int sig, __sighandler_t handler)
++SYSCALL_DEFINE2(signal, int, sig, __sighandler_t, handler)
+ {
+ 	struct k_sigaction new_sa, old_sa;
+ 	int ret;
+@@ -2556,8 +2546,7 @@ sys_signal(int sig, __sighandler_t handler)
+ 
+ #ifdef __ARCH_WANT_SYS_PAUSE
+ 
+-asmlinkage long
+-sys_pause(void)
++SYSCALL_DEFINE0(pause)
+ {
+ 	current->state = TASK_INTERRUPTIBLE;
+ 	schedule();
+@@ -2567,7 +2556,7 @@ sys_pause(void)
+ #endif
+ 
+ #ifdef __ARCH_WANT_SYS_RT_SIGSUSPEND
+-asmlinkage long sys_rt_sigsuspend(sigset_t __user *unewset, size_t sigsetsize)
++SYSCALL_DEFINE2(rt_sigsuspend, sigset_t __user *, unewset, size_t, sigsetsize)
+ {
+ 	sigset_t newset;
+ 
+diff --git a/kernel/sys.c b/kernel/sys.c
+index 31deba8..855eebb 100644
+--- a/kernel/sys.c
++++ b/kernel/sys.c
+@@ -137,7 +137,7 @@ out:
+ 	return error;
+ }
+ 
+-asmlinkage long sys_setpriority(int which, int who, int niceval)
++SYSCALL_DEFINE3(setpriority, int, which, int, who, int, niceval)
+ {
+ 	struct task_struct *g, *p;
+ 	struct user_struct *user;
+@@ -201,7 +201,7 @@ out:
+  * has been offset by 20 (ie it returns 40..1 instead of -20..19)
+  * to stay compatible.
+  */
+-asmlinkage long sys_getpriority(int which, int who)
++SYSCALL_DEFINE2(getpriority, int, which, int, who)
+ {
+ 	struct task_struct *g, *p;
+ 	struct user_struct *user;
+@@ -347,7 +347,8 @@ EXPORT_SYMBOL_GPL(kernel_power_off);
+  *
+  * reboot doesn't sync: do that yourself before calling this.
+  */
+-asmlinkage long sys_reboot(int magic1, int magic2, unsigned int cmd, void __user * arg)
++SYSCALL_DEFINE4(reboot, int, magic1, int, magic2, unsigned int, cmd,
++		void __user *, arg)
+ {
+ 	char buffer[256];
+ 
+@@ -470,7 +471,7 @@ void ctrl_alt_del(void)
+  * SMP: There are not races, the GIDs are checked only by filesystem
+  *      operations (as far as semantic preservation is concerned).
+  */
+-asmlinkage long sys_setregid(gid_t rgid, gid_t egid)
++SYSCALL_DEFINE2(setregid, gid_t, rgid, gid_t, egid)
+ {
+ 	int old_rgid = current->gid;
+ 	int old_egid = current->egid;
+@@ -519,7 +520,7 @@ asmlinkage long sys_setregid(gid_t rgid, gid_t egid)
+  *
+  * SMP: Same implicit races as above.
+  */
+-asmlinkage long sys_setgid(gid_t gid)
++SYSCALL_DEFINE1(setgid, gid_t, gid)
+ {
+ 	int old_egid = current->egid;
+ 	int retval;
+@@ -589,7 +590,7 @@ static int set_user(uid_t new_ruid, int dumpclear)
+  * 100% compatible with BSD.  A program which uses just setuid() will be
+  * 100% compatible with POSIX with saved IDs. 
+  */
+-asmlinkage long sys_setreuid(uid_t ruid, uid_t euid)
++SYSCALL_DEFINE2(setreuid, uid_t, ruid, uid_t, euid)
+ {
+ 	int old_ruid, old_euid, old_suid, new_ruid, new_euid;
+ 	int retval;
+@@ -651,7 +652,7 @@ asmlinkage long sys_setreuid(uid_t ruid, uid_t euid)
+  * will allow a root program to temporarily drop privileges and be able to
+  * regain them by swapping the real and effective uid.  
+  */
+-asmlinkage long sys_setuid(uid_t uid)
++SYSCALL_DEFINE1(setuid, uid_t, uid)
+ {
+ 	int old_euid = current->euid;
+ 	int old_ruid, old_suid, new_suid;
+@@ -690,7 +691,7 @@ asmlinkage long sys_setuid(uid_t uid)
+  * This function implements a generic ability to update ruid, euid,
+  * and suid.  This allows you to implement the 4.4 compatible seteuid().
+  */
+-asmlinkage long sys_setresuid(uid_t ruid, uid_t euid, uid_t suid)
++SYSCALL_DEFINE3(setresuid, uid_t, ruid, uid_t, euid, uid_t, suid)
+ {
+ 	int old_ruid = current->uid;
+ 	int old_euid = current->euid;
+@@ -733,7 +734,7 @@ asmlinkage long sys_setresuid(uid_t ruid, uid_t euid, uid_t suid)
+ 	return security_task_post_setuid(old_ruid, old_euid, old_suid, LSM_SETID_RES);
+ }
+ 
+-asmlinkage long sys_getresuid(uid_t __user *ruid, uid_t __user *euid, uid_t __user *suid)
++SYSCALL_DEFINE3(getresuid, uid_t __user *, ruid, uid_t __user *, euid, uid_t __user *, suid)
+ {
+ 	int retval;
+ 
+@@ -747,7 +748,7 @@ asmlinkage long sys_getresuid(uid_t __user *ruid, uid_t __user *euid, uid_t __us
+ /*
+  * Same as above, but for rgid, egid, sgid.
+  */
+-asmlinkage long sys_setresgid(gid_t rgid, gid_t egid, gid_t sgid)
++SYSCALL_DEFINE3(setresgid, gid_t, rgid, gid_t, egid, gid_t, sgid)
+ {
+ 	int retval;
+ 
+@@ -784,7 +785,7 @@ asmlinkage long sys_setresgid(gid_t rgid, gid_t egid, gid_t sgid)
+ 	return 0;
+ }
+ 
+-asmlinkage long sys_getresgid(gid_t __user *rgid, gid_t __user *egid, gid_t __user *sgid)
++SYSCALL_DEFINE3(getresgid, gid_t __user *, rgid, gid_t __user *, egid, gid_t __user *, sgid)
+ {
+ 	int retval;
+ 
+@@ -802,7 +803,7 @@ asmlinkage long sys_getresgid(gid_t __user *rgid, gid_t __user *egid, gid_t __us
+  * whatever uid it wants to). It normally shadows "euid", except when
+  * explicitly set by setfsuid() or for access..
+  */
+-asmlinkage long sys_setfsuid(uid_t uid)
++SYSCALL_DEFINE1(setfsuid, uid_t, uid)
+ {
+ 	int old_fsuid;
+ 
+@@ -831,7 +832,7 @@ asmlinkage long sys_setfsuid(uid_t uid)
+ /*
+  * Samma på svenska..
+  */
+-asmlinkage long sys_setfsgid(gid_t gid)
++SYSCALL_DEFINE1(setfsgid, gid_t, gid)
+ {
+ 	int old_fsgid;
+ 
+@@ -869,7 +870,7 @@ void do_sys_times(struct tms *tms)
+ 	tms->tms_cstime = cputime_to_clock_t(cstime);
+ }
+ 
+-asmlinkage long sys_times(struct tms __user * tbuf)
++SYSCALL_DEFINE1(times, struct tms __user *, tbuf)
+ {
+ 	if (tbuf) {
+ 		struct tms tmp;
+@@ -893,7 +894,7 @@ asmlinkage long sys_times(struct tms __user * tbuf)
+  * Auch. Had to add the 'did_exec' flag to conform completely to POSIX.
+  * LBT 04.03.94
+  */
+-asmlinkage long sys_setpgid(pid_t pid, pid_t pgid)
++SYSCALL_DEFINE2(setpgid, pid_t, pid, pid_t, pgid)
+ {
+ 	struct task_struct *p;
+ 	struct task_struct *group_leader = current->group_leader;
+@@ -964,7 +965,7 @@ out:
+ 	return err;
+ }
+ 
+-asmlinkage long sys_getpgid(pid_t pid)
++SYSCALL_DEFINE1(getpgid, pid_t, pid)
+ {
+ 	struct task_struct *p;
+ 	struct pid *grp;
+@@ -994,14 +995,14 @@ out:
+ 
+ #ifdef __ARCH_WANT_SYS_GETPGRP
+ 
+-asmlinkage long sys_getpgrp(void)
++SYSCALL_DEFINE0(getpgrp)
+ {
+ 	return sys_getpgid(0);
+ }
+ 
+ #endif
+ 
+-asmlinkage long sys_getsid(pid_t pid)
++SYSCALL_DEFINE1(getsid, pid_t, pid)
+ {
+ 	struct task_struct *p;
+ 	struct pid *sid;
+@@ -1029,7 +1030,7 @@ out:
+ 	return retval;
+ }
+ 
+-asmlinkage long sys_setsid(void)
++SYSCALL_DEFINE0(setsid)
+ {
+ 	struct task_struct *group_leader = current->group_leader;
+ 	struct pid *sid = task_pid(group_leader);
+@@ -1233,7 +1234,7 @@ int set_current_groups(struct group_info *group_info)
+ 
+ EXPORT_SYMBOL(set_current_groups);
+ 
+-asmlinkage long sys_getgroups(int gidsetsize, gid_t __user *grouplist)
++SYSCALL_DEFINE2(getgroups, int, gidsetsize, gid_t __user *, grouplist)
+ {
+ 	int i = 0;
+ 
+@@ -1266,7 +1267,7 @@ out:
+  *	without another task interfering.
+  */
+  
+-asmlinkage long sys_setgroups(int gidsetsize, gid_t __user *grouplist)
++SYSCALL_DEFINE2(setgroups, int, gidsetsize, gid_t __user *, grouplist)
+ {
+ 	struct group_info *group_info;
+ 	int retval;
+@@ -1316,7 +1317,7 @@ EXPORT_SYMBOL(in_egroup_p);
+ 
+ DECLARE_RWSEM(uts_sem);
+ 
+-asmlinkage long sys_newuname(struct new_utsname __user * name)
++SYSCALL_DEFINE1(newuname, struct new_utsname __user *, name)
+ {
+ 	int errno = 0;
+ 
+@@ -1327,7 +1328,7 @@ asmlinkage long sys_newuname(struct new_utsname __user * name)
+ 	return errno;
+ }
+ 
+-asmlinkage long sys_sethostname(char __user *name, int len)
++SYSCALL_DEFINE2(sethostname, char __user *, name, int, len)
+ {
+ 	int errno;
+ 	char tmp[__NEW_UTS_LEN];
+@@ -1351,7 +1352,7 @@ asmlinkage long sys_sethostname(char __user *name, int len)
+ 
+ #ifdef __ARCH_WANT_SYS_GETHOSTNAME
+ 
+-asmlinkage long sys_gethostname(char __user *name, int len)
++SYSCALL_DEFINE2(gethostname, char __user *, name, int, len)
+ {
+ 	int i, errno;
+ 	struct new_utsname *u;
+@@ -1376,7 +1377,7 @@ asmlinkage long sys_gethostname(char __user *name, int len)
+  * Only setdomainname; getdomainname can be implemented by calling
+  * uname()
+  */
+-asmlinkage long sys_setdomainname(char __user *name, int len)
++SYSCALL_DEFINE2(setdomainname, char __user *, name, int, len)
+ {
+ 	int errno;
+ 	char tmp[__NEW_UTS_LEN];
+@@ -1399,7 +1400,7 @@ asmlinkage long sys_setdomainname(char __user *name, int len)
+ 	return errno;
+ }
+ 
+-asmlinkage long sys_getrlimit(unsigned int resource, struct rlimit __user *rlim)
++SYSCALL_DEFINE2(getrlimit, unsigned int, resource, struct rlimit __user *, rlim)
+ {
+ 	if (resource >= RLIM_NLIMITS)
+ 		return -EINVAL;
+@@ -1418,7 +1419,8 @@ asmlinkage long sys_getrlimit(unsigned int resource, struct rlimit __user *rlim)
+  *	Back compatibility for getrlimit. Needed for some apps.
+  */
+  
+-asmlinkage long sys_old_getrlimit(unsigned int resource, struct rlimit __user *rlim)
++SYSCALL_DEFINE2(old_getrlimit, unsigned int, resource,
++		struct rlimit __user *, rlim)
+ {
+ 	struct rlimit x;
+ 	if (resource >= RLIM_NLIMITS)
+@@ -1436,7 +1438,7 @@ asmlinkage long sys_old_getrlimit(unsigned int resource, struct rlimit __user *r
+ 
+ #endif
+ 
+-asmlinkage long sys_setrlimit(unsigned int resource, struct rlimit __user *rlim)
++SYSCALL_DEFINE2(setrlimit, unsigned int, resource, struct rlimit __user *, rlim)
+ {
+ 	struct rlimit new_rlim, *old_rlim;
+ 	int retval;
+@@ -1551,6 +1553,8 @@ static void k_getrusage(struct task_struct *p, int who, struct rusage *r)
+ 	utime = stime = cputime_zero;
+ 
+ 	if (who == RUSAGE_THREAD) {
++		utime = task_utime(current);
++		stime = task_stime(current);
+ 		accumulate_thread_rusage(p, r);
+ 		goto out;
+ 	}
+@@ -1607,7 +1611,7 @@ int getrusage(struct task_struct *p, int who, struct rusage __user *ru)
+ 	return copy_to_user(ru, &r, sizeof(r)) ? -EFAULT : 0;
+ }
+ 
+-asmlinkage long sys_getrusage(int who, struct rusage __user *ru)
++SYSCALL_DEFINE2(getrusage, int, who, struct rusage __user *, ru)
+ {
+ 	if (who != RUSAGE_SELF && who != RUSAGE_CHILDREN &&
+ 	    who != RUSAGE_THREAD)
+@@ -1615,14 +1619,14 @@ asmlinkage long sys_getrusage(int who, struct rusage __user *ru)
+ 	return getrusage(current, who, ru);
+ }
+ 
+-asmlinkage long sys_umask(int mask)
++SYSCALL_DEFINE1(umask, int, mask)
+ {
+ 	mask = xchg(&current->fs->umask, mask & S_IRWXUGO);
+ 	return mask;
+ }
+ 
+-asmlinkage long sys_prctl(int option, unsigned long arg2, unsigned long arg3,
+-			  unsigned long arg4, unsigned long arg5)
++SYSCALL_DEFINE5(prctl, int, option, unsigned long, arg2, unsigned long, arg3,
++		unsigned long, arg4, unsigned long, arg5)
+ {
+ 	long error = 0;
+ 
+@@ -1733,8 +1737,8 @@ asmlinkage long sys_prctl(int option, unsigned long arg2, unsigned long arg3,
+ 	return error;
+ }
+ 
+-asmlinkage long sys_getcpu(unsigned __user *cpup, unsigned __user *nodep,
+-			   struct getcpu_cache __user *unused)
++SYSCALL_DEFINE3(getcpu, unsigned __user *, cpup, unsigned __user *, nodep,
++		struct getcpu_cache __user *, unused)
+ {
+ 	int err = 0;
+ 	int cpu = raw_smp_processor_id();
+diff --git a/kernel/sys_ni.c b/kernel/sys_ni.c
+index e14a232..27dad29 100644
+--- a/kernel/sys_ni.c
++++ b/kernel/sys_ni.c
+@@ -131,6 +131,7 @@ cond_syscall(sys_io_destroy);
+ cond_syscall(sys_io_submit);
+ cond_syscall(sys_io_cancel);
+ cond_syscall(sys_io_getevents);
++cond_syscall(sys_syslog);
+ 
+ /* arch-specific weak syscall entries */
+ cond_syscall(sys_pciconfig_read);
+diff --git a/kernel/sysctl.c b/kernel/sysctl.c
+index 3d56fe7..68fd128 100644
+--- a/kernel/sysctl.c
++++ b/kernel/sysctl.c
+@@ -1623,7 +1623,7 @@ int do_sysctl(int __user *name, int nlen, void __user *oldval, size_t __user *ol
+ 	return error;
+ }
+ 
+-asmlinkage long sys_sysctl(struct __sysctl_args __user *args)
++SYSCALL_DEFINE1(sysctl, struct __sysctl_args __user *, args)
+ {
+ 	struct __sysctl_args tmp;
+ 	int error;
+@@ -2924,7 +2924,7 @@ int sysctl_ms_jiffies(struct ctl_table *table,
+ #else /* CONFIG_SYSCTL_SYSCALL */
+ 
+ 
+-asmlinkage long sys_sysctl(struct __sysctl_args __user *args)
++SYSCALL_DEFINE1(sysctl, struct __sysctl_args __user *, args)
+ {
+ 	struct __sysctl_args tmp;
+ 	int error;
+diff --git a/kernel/time.c b/kernel/time.c
+index d63a433..8a2693a 100644
+--- a/kernel/time.c
++++ b/kernel/time.c
+@@ -59,7 +59,7 @@ EXPORT_SYMBOL(sys_tz);
+  * why not move it into the appropriate arch directory (for those
+  * architectures that need it).
+  */
+-asmlinkage long sys_time(time_t __user * tloc)
++SYSCALL_DEFINE1(time, time_t __user *, tloc)
+ {
+ 	time_t i = get_seconds();
+ 
+@@ -77,7 +77,7 @@ asmlinkage long sys_time(time_t __user * tloc)
+  * architectures that need it).
+  */
+ 
+-asmlinkage long sys_stime(time_t __user *tptr)
++SYSCALL_DEFINE1(stime, time_t __user *, tptr)
+ {
+ 	struct timespec tv;
+ 	int err;
+@@ -97,8 +97,8 @@ asmlinkage long sys_stime(time_t __user *tptr)
+ 
+ #endif /* __ARCH_WANT_SYS_TIME */
+ 
+-asmlinkage long sys_gettimeofday(struct timeval __user *tv,
+-				 struct timezone __user *tz)
++SYSCALL_DEFINE2(gettimeofday, struct timeval __user *, tv,
++		struct timezone __user *, tz)
+ {
+ 	if (likely(tv != NULL)) {
+ 		struct timeval ktv;
+@@ -182,8 +182,8 @@ int do_sys_settimeofday(struct timespec *tv, struct timezone *tz)
+ 	return 0;
+ }
+ 
+-asmlinkage long sys_settimeofday(struct timeval __user *tv,
+-				struct timezone __user *tz)
++SYSCALL_DEFINE2(settimeofday, struct timeval __user *, tv,
++		struct timezone __user *, tz)
+ {
+ 	struct timeval user_tv;
+ 	struct timespec	new_ts;
+@@ -203,7 +203,7 @@ asmlinkage long sys_settimeofday(struct timeval __user *tv,
+ 	return do_sys_settimeofday(tv ? &new_ts : NULL, tz ? &new_tz : NULL);
+ }
+ 
+-asmlinkage long sys_adjtimex(struct timex __user *txc_p)
++SYSCALL_DEFINE1(adjtimex, struct timex __user *, txc_p)
+ {
+ 	struct timex txc;		/* Local copy of parameter */
+ 	int ret;
+diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c
+index fa05e88..900f1b6 100644
+--- a/kernel/time/timekeeping.c
++++ b/kernel/time/timekeeping.c
+@@ -46,6 +46,9 @@ struct timespec xtime __attribute__ ((aligned (16)));
+ struct timespec wall_to_monotonic __attribute__ ((aligned (16)));
+ static unsigned long total_sleep_time;		/* seconds */
+ 
++/* flag for if timekeeping is suspended */
++int __read_mostly timekeeping_suspended;
++
+ static struct timespec xtime_cache __attribute__ ((aligned (16)));
+ void update_xtime_cache(u64 nsec)
+ {
+@@ -92,6 +95,8 @@ void getnstimeofday(struct timespec *ts)
+ 	unsigned long seq;
+ 	s64 nsecs;
+ 
++	WARN_ON(timekeeping_suspended);
++
+ 	do {
+ 		seq = read_seqbegin(&xtime_lock);
+ 
+@@ -299,8 +304,6 @@ void __init timekeeping_init(void)
+ 	write_sequnlock_irqrestore(&xtime_lock, flags);
+ }
+ 
+-/* flag for if timekeeping is suspended */
+-static int timekeeping_suspended;
+ /* time in seconds when suspend began */
+ static unsigned long timekeeping_suspend_time;
+ 
+diff --git a/kernel/timer.c b/kernel/timer.c
+index dbd50fa..a5eaea2 100644
+--- a/kernel/timer.c
++++ b/kernel/timer.c
+@@ -1144,7 +1144,7 @@ void do_timer(unsigned long ticks)
+  * For backwards compatibility?  This can be done in libc so Alpha
+  * and all newer ports shouldn't need it.
+  */
+-asmlinkage unsigned long sys_alarm(unsigned int seconds)
++SYSCALL_DEFINE1(alarm, unsigned int, seconds)
+ {
+ 	return alarm_setitimer(seconds);
+ }
+@@ -1167,7 +1167,7 @@ asmlinkage unsigned long sys_alarm(unsigned int seconds)
+  *
+  * This is SMP safe as current->tgid does not change.
+  */
+-asmlinkage long sys_getpid(void)
++SYSCALL_DEFINE0(getpid)
+ {
+ 	return task_tgid_vnr(current);
+ }
+@@ -1178,7 +1178,7 @@ asmlinkage long sys_getpid(void)
+  * value of ->real_parent under rcu_read_lock(), see
+  * release_task()->call_rcu(delayed_put_task_struct).
+  */
+-asmlinkage long sys_getppid(void)
++SYSCALL_DEFINE0(getppid)
+ {
+ 	int pid;
+ 
+@@ -1189,25 +1189,25 @@ asmlinkage long sys_getppid(void)
+ 	return pid;
+ }
+ 
+-asmlinkage long sys_getuid(void)
++SYSCALL_DEFINE0(getuid)
+ {
+ 	/* Only we change this so SMP safe */
+ 	return current->uid;
+ }
+ 
+-asmlinkage long sys_geteuid(void)
++SYSCALL_DEFINE0(geteuid)
+ {
+ 	/* Only we change this so SMP safe */
+ 	return current->euid;
+ }
+ 
+-asmlinkage long sys_getgid(void)
++SYSCALL_DEFINE0(getgid)
+ {
+ 	/* Only we change this so SMP safe */
+ 	return current->gid;
+ }
+ 
+-asmlinkage long sys_getegid(void)
++SYSCALL_DEFINE0(getegid)
+ {
+ 	/* Only we change this so SMP safe */
+ 	return  current->egid;
+@@ -1323,7 +1323,7 @@ signed long __sched schedule_timeout_uninterruptible(signed long timeout)
+ EXPORT_SYMBOL(schedule_timeout_uninterruptible);
+ 
+ /* Thread ID - the internal kernel "pid" */
+-asmlinkage long sys_gettid(void)
++SYSCALL_DEFINE0(gettid)
+ {
+ 	return task_pid_vnr(current);
+ }
+@@ -1415,7 +1415,7 @@ out:
+ 	return 0;
+ }
+ 
+-asmlinkage long sys_sysinfo(struct sysinfo __user *info)
++SYSCALL_DEFINE1(sysinfo, struct sysinfo __user *, info)
+ {
+ 	struct sysinfo val;
+ 
+diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c
+index 668bbb5..71202ac 100644
+--- a/kernel/trace/ring_buffer.c
++++ b/kernel/trace/ring_buffer.c
+@@ -769,6 +769,7 @@ rb_set_commit_to_write(struct ring_buffer_per_cpu *cpu_buffer)
+ 	 * back to us). This allows us to do a simple loop to
+ 	 * assign the commit to the tail.
+ 	 */
++ again:
+ 	while (cpu_buffer->commit_page != cpu_buffer->tail_page) {
+ 		cpu_buffer->commit_page->commit =
+ 			cpu_buffer->commit_page->write;
+@@ -783,6 +784,17 @@ rb_set_commit_to_write(struct ring_buffer_per_cpu *cpu_buffer)
+ 			cpu_buffer->commit_page->write;
+ 		barrier();
+ 	}
++
++	/* again, keep gcc from optimizing */
++	barrier();
++
++	/*
++	 * If an interrupt came in just after the first while loop
++	 * and pushed the tail page forward, we will be left with
++	 * a dangling commit that will never go forward.
++	 */
++	if (unlikely(cpu_buffer->commit_page != cpu_buffer->tail_page))
++		goto again;
+ }
+ 
+ static void rb_reset_reader_page(struct ring_buffer_per_cpu *cpu_buffer)
+@@ -880,12 +892,15 @@ static struct ring_buffer_event *
+ __rb_reserve_next(struct ring_buffer_per_cpu *cpu_buffer,
+ 		  unsigned type, unsigned long length, u64 *ts)
+ {
+-	struct buffer_page *tail_page, *head_page, *reader_page;
++	struct buffer_page *tail_page, *head_page, *reader_page, *commit_page;
+ 	unsigned long tail, write;
+ 	struct ring_buffer *buffer = cpu_buffer->buffer;
+ 	struct ring_buffer_event *event;
+ 	unsigned long flags;
+ 
++	commit_page = cpu_buffer->commit_page;
++	/* we just need to protect against interrupts */
++	barrier();
+ 	tail_page = cpu_buffer->tail_page;
+ 	write = local_add_return(length, &tail_page->write);
+ 	tail = write - length;
+@@ -909,7 +924,7 @@ __rb_reserve_next(struct ring_buffer_per_cpu *cpu_buffer,
+ 		 * it all the way around the buffer, bail, and warn
+ 		 * about it.
+ 		 */
+-		if (unlikely(next_page == cpu_buffer->commit_page)) {
++		if (unlikely(next_page == commit_page)) {
+ 			WARN_ON_ONCE(1);
+ 			goto out_unlock;
+ 		}
+diff --git a/kernel/uid16.c b/kernel/uid16.c
+index 3e41c16..67bb92c 100644
+--- a/kernel/uid16.c
++++ b/kernel/uid16.c
+@@ -17,7 +17,7 @@
+ 
+ #include <asm/uaccess.h>
+ 
+-asmlinkage long sys_chown16(const char __user * filename, old_uid_t user, old_gid_t group)
++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: */
+@@ -25,7 +25,7 @@ asmlinkage long sys_chown16(const char __user * filename, old_uid_t user, old_gi
+ 	return ret;
+ }
+ 
+-asmlinkage long sys_lchown16(const char __user * filename, old_uid_t user, old_gid_t 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: */
+@@ -33,7 +33,7 @@ asmlinkage long sys_lchown16(const char __user * filename, old_uid_t user, old_g
+ 	return ret;
+ }
+ 
+-asmlinkage long sys_fchown16(unsigned int fd, old_uid_t user, old_gid_t 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: */
+@@ -41,7 +41,7 @@ asmlinkage long sys_fchown16(unsigned int fd, old_uid_t user, old_gid_t group)
+ 	return ret;
+ }
+ 
+-asmlinkage long sys_setregid16(old_gid_t rgid, old_gid_t egid)
++SYSCALL_DEFINE2(setregid16, old_gid_t, rgid, old_gid_t, egid)
+ {
+ 	long ret = sys_setregid(low2highgid(rgid), low2highgid(egid));
+ 	/* avoid REGPARM breakage on x86: */
+@@ -49,7 +49,7 @@ asmlinkage long sys_setregid16(old_gid_t rgid, old_gid_t egid)
+ 	return ret;
+ }
+ 
+-asmlinkage long sys_setgid16(old_gid_t gid)
++SYSCALL_DEFINE1(setgid16, old_gid_t, gid)
+ {
+ 	long ret = sys_setgid(low2highgid(gid));
+ 	/* avoid REGPARM breakage on x86: */
+@@ -57,7 +57,7 @@ asmlinkage long sys_setgid16(old_gid_t gid)
+ 	return ret;
+ }
+ 
+-asmlinkage long sys_setreuid16(old_uid_t ruid, old_uid_t euid)
++SYSCALL_DEFINE2(setreuid16, old_uid_t, ruid, old_uid_t, euid)
+ {
+ 	long ret = sys_setreuid(low2highuid(ruid), low2highuid(euid));
+ 	/* avoid REGPARM breakage on x86: */
+@@ -65,7 +65,7 @@ asmlinkage long sys_setreuid16(old_uid_t ruid, old_uid_t euid)
+ 	return ret;
+ }
+ 
+-asmlinkage long sys_setuid16(old_uid_t uid)
++SYSCALL_DEFINE1(setuid16, old_uid_t, uid)
+ {
+ 	long ret = sys_setuid(low2highuid(uid));
+ 	/* avoid REGPARM breakage on x86: */
+@@ -73,7 +73,7 @@ asmlinkage long sys_setuid16(old_uid_t uid)
+ 	return ret;
+ }
+ 
+-asmlinkage long sys_setresuid16(old_uid_t ruid, old_uid_t euid, old_uid_t suid)
++SYSCALL_DEFINE3(setresuid16, old_uid_t, ruid, old_uid_t, euid, old_uid_t, suid)
+ {
+ 	long ret = sys_setresuid(low2highuid(ruid), low2highuid(euid),
+ 				 low2highuid(suid));
+@@ -82,7 +82,7 @@ asmlinkage long sys_setresuid16(old_uid_t ruid, old_uid_t euid, old_uid_t suid)
+ 	return ret;
+ }
+ 
+-asmlinkage long sys_getresuid16(old_uid_t __user *ruid, old_uid_t __user *euid, old_uid_t __user *suid)
++SYSCALL_DEFINE3(getresuid16, old_uid_t __user *, ruid, old_uid_t __user *, euid, old_uid_t __user *, suid)
+ {
+ 	int retval;
+ 
+@@ -93,7 +93,7 @@ asmlinkage long sys_getresuid16(old_uid_t __user *ruid, old_uid_t __user *euid,
+ 	return retval;
+ }
+ 
+-asmlinkage long sys_setresgid16(old_gid_t rgid, old_gid_t egid, old_gid_t sgid)
++SYSCALL_DEFINE3(setresgid16, old_gid_t, rgid, old_gid_t, egid, old_gid_t, sgid)
+ {
+ 	long ret = sys_setresgid(low2highgid(rgid), low2highgid(egid),
+ 				 low2highgid(sgid));
+@@ -102,7 +102,8 @@ asmlinkage long sys_setresgid16(old_gid_t rgid, old_gid_t egid, old_gid_t sgid)
+ 	return ret;
+ }
+ 
+-asmlinkage long sys_getresgid16(old_gid_t __user *rgid, old_gid_t __user *egid, old_gid_t __user *sgid)
++
++SYSCALL_DEFINE3(getresgid16, old_gid_t __user *, rgid, old_gid_t __user *, egid, old_gid_t __user *, sgid)
+ {
+ 	int retval;
+ 
+@@ -113,7 +114,7 @@ asmlinkage long sys_getresgid16(old_gid_t __user *rgid, old_gid_t __user *egid,
+ 	return retval;
+ }
+ 
+-asmlinkage long sys_setfsuid16(old_uid_t uid)
++SYSCALL_DEFINE1(setfsuid16, old_uid_t, uid)
+ {
+ 	long ret = sys_setfsuid(low2highuid(uid));
+ 	/* avoid REGPARM breakage on x86: */
+@@ -121,7 +122,7 @@ asmlinkage long sys_setfsuid16(old_uid_t uid)
+ 	return ret;
+ }
+ 
+-asmlinkage long sys_setfsgid16(old_gid_t gid)
++SYSCALL_DEFINE1(setfsgid16, old_gid_t, gid)
+ {
+ 	long ret = sys_setfsgid(low2highgid(gid));
+ 	/* avoid REGPARM breakage on x86: */
+@@ -159,7 +160,7 @@ static int groups16_from_user(struct group_info *group_info,
+ 	return 0;
+ }
+ 
+-asmlinkage long sys_getgroups16(int gidsetsize, old_gid_t __user *grouplist)
++SYSCALL_DEFINE2(getgroups16, int, gidsetsize, old_gid_t __user *, grouplist)
+ {
+ 	int i = 0;
+ 
+@@ -183,7 +184,7 @@ out:
+ 	return i;
+ }
+ 
+-asmlinkage long sys_setgroups16(int gidsetsize, old_gid_t __user *grouplist)
++SYSCALL_DEFINE2(setgroups16, int, gidsetsize, old_gid_t __user *, grouplist)
+ {
+ 	struct group_info *group_info;
+ 	int retval;
+@@ -208,22 +209,22 @@ asmlinkage long sys_setgroups16(int gidsetsize, old_gid_t __user *grouplist)
+ 	return retval;
+ }
+ 
+-asmlinkage long sys_getuid16(void)
++SYSCALL_DEFINE0(getuid16)
+ {
+ 	return high2lowuid(current->uid);
+ }
+ 
+-asmlinkage long sys_geteuid16(void)
++SYSCALL_DEFINE0(geteuid16)
+ {
+ 	return high2lowuid(current->euid);
+ }
+ 
+-asmlinkage long sys_getgid16(void)
++SYSCALL_DEFINE0(getgid16)
+ {
+ 	return high2lowgid(current->gid);
+ }
+ 
+-asmlinkage long sys_getegid16(void)
++SYSCALL_DEFINE0(getegid16)
+ {
+ 	return high2lowgid(current->egid);
+ }
+diff --git a/mm/fadvise.c b/mm/fadvise.c
+index a1da969..54a0f80 100644
+--- a/mm/fadvise.c
++++ b/mm/fadvise.c
+@@ -24,7 +24,7 @@
+  * POSIX_FADV_WILLNEED could set PG_Referenced, and POSIX_FADV_NOREUSE could
+  * deactivate the pages and clear PG_Referenced.
+  */
+-asmlinkage long sys_fadvise64_64(int fd, loff_t offset, loff_t len, int advice)
++SYSCALL_DEFINE(fadvise64_64)(int fd, loff_t offset, loff_t len, int advice)
+ {
+ 	struct file *file = fget(fd);
+ 	struct address_space *mapping;
+@@ -126,12 +126,26 @@ out:
+ 	fput(file);
+ 	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
+ 
+-asmlinkage long sys_fadvise64(int fd, loff_t offset, size_t len, int advice)
++SYSCALL_DEFINE(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
+diff --git a/mm/filemap.c b/mm/filemap.c
+index f3e5f89..f65417c 100644
+--- a/mm/filemap.c
++++ b/mm/filemap.c
+@@ -1366,7 +1366,7 @@ do_readahead(struct address_space *mapping, struct file *filp,
+ 	return 0;
+ }
+ 
+-asmlinkage ssize_t sys_readahead(int fd, loff_t offset, size_t count)
++SYSCALL_DEFINE(readahead)(int fd, loff_t offset, size_t count)
+ {
+ 	ssize_t ret;
+ 	struct file *file;
+@@ -1385,6 +1385,13 @@ asmlinkage ssize_t sys_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
+ 
+ #ifdef CONFIG_MMU
+ /**
+@@ -2140,19 +2147,24 @@ EXPORT_SYMBOL(generic_file_direct_write);
+  * Find or create a page at the given pagecache position. Return the locked
+  * page. This function is specifically for buffered writes.
+  */
+-struct page *__grab_cache_page(struct address_space *mapping, pgoff_t index)
++struct page *grab_cache_page_write_begin(struct address_space *mapping,
++					pgoff_t index, unsigned flags)
+ {
+ 	int status;
+ 	struct page *page;
++	gfp_t gfp_notmask = 0;
++	if (flags & AOP_FLAG_NOFS)
++		gfp_notmask = __GFP_FS;
+ repeat:
+ 	page = find_lock_page(mapping, index);
+ 	if (likely(page))
+ 		return page;
+ 
+-	page = page_cache_alloc(mapping);
++	page = __page_cache_alloc(mapping_gfp_mask(mapping) & ~gfp_notmask);
+ 	if (!page)
+ 		return NULL;
+-	status = add_to_page_cache_lru(page, mapping, index, GFP_KERNEL);
++	status = add_to_page_cache_lru(page, mapping, index,
++						GFP_KERNEL & ~gfp_notmask);
+ 	if (unlikely(status)) {
+ 		page_cache_release(page);
+ 		if (status == -EEXIST)
+@@ -2161,7 +2173,7 @@ repeat:
+ 	}
+ 	return page;
+ }
+-EXPORT_SYMBOL(__grab_cache_page);
++EXPORT_SYMBOL(grab_cache_page_write_begin);
+ 
+ static ssize_t generic_perform_write(struct file *file,
+ 				struct iov_iter *i, loff_t pos)
+diff --git a/mm/fremap.c b/mm/fremap.c
+index 7d12ca7..b602c27 100644
+--- a/mm/fremap.c
++++ b/mm/fremap.c
+@@ -120,8 +120,8 @@ static int populate_range(struct mm_struct *mm, struct vm_area_struct *vma,
+  * and the vma's default protection is used. Arbitrary protections
+  * might be implemented in the future.
+  */
+-asmlinkage long sys_remap_file_pages(unsigned long start, unsigned long size,
+-	unsigned long prot, unsigned long pgoff, unsigned long flags)
++SYSCALL_DEFINE5(remap_file_pages, unsigned long, start, unsigned long, size,
++		unsigned long, prot, unsigned long, pgoff, unsigned long, flags)
+ {
+ 	struct mm_struct *mm = current->mm;
+ 	struct address_space *mapping;
+diff --git a/mm/madvise.c b/mm/madvise.c
+index f9349c1..b9ce574 100644
+--- a/mm/madvise.c
++++ b/mm/madvise.c
+@@ -281,7 +281,7 @@ madvise_vma(struct vm_area_struct *vma, struct vm_area_struct **prev,
+  *  -EBADF  - map exists, but area maps something that isn't a file.
+  *  -EAGAIN - a kernel resource was temporarily unavailable.
+  */
+-asmlinkage long sys_madvise(unsigned long start, size_t len_in, int behavior)
++SYSCALL_DEFINE3(madvise, unsigned long, start, size_t, len_in, int, behavior)
+ {
+ 	unsigned long end, tmp;
+ 	struct vm_area_struct * vma, *prev;
+diff --git a/mm/mempolicy.c b/mm/mempolicy.c
+index e9493b1..ac8f8f3 100644
+--- a/mm/mempolicy.c
++++ b/mm/mempolicy.c
+@@ -1068,10 +1068,9 @@ static int copy_nodes_to_user(unsigned long __user *mask, unsigned long maxnode,
+ 	return copy_to_user(mask, nodes_addr(*nodes), copy) ? -EFAULT : 0;
+ }
+ 
+-asmlinkage long sys_mbind(unsigned long start, unsigned long len,
+-			unsigned long mode,
+-			unsigned long __user *nmask, unsigned long maxnode,
+-			unsigned flags)
++SYSCALL_DEFINE6(mbind, unsigned long, start, unsigned long, len,
++		unsigned long, mode, unsigned long __user *, nmask,
++		unsigned long, maxnode, unsigned, flags)
+ {
+ 	nodemask_t nodes;
+ 	int err;
+@@ -1091,8 +1090,8 @@ asmlinkage long sys_mbind(unsigned long start, unsigned long len,
+ }
+ 
+ /* Set the process memory policy */
+-asmlinkage long sys_set_mempolicy(int mode, unsigned long __user *nmask,
+-		unsigned long maxnode)
++SYSCALL_DEFINE3(set_mempolicy, int, mode, unsigned long __user *, nmask,
++		unsigned long, maxnode)
+ {
+ 	int err;
+ 	nodemask_t nodes;
+@@ -1110,9 +1109,9 @@ asmlinkage long sys_set_mempolicy(int mode, unsigned long __user *nmask,
+ 	return do_set_mempolicy(mode, flags, &nodes);
+ }
+ 
+-asmlinkage long sys_migrate_pages(pid_t pid, unsigned long maxnode,
+-		const unsigned long __user *old_nodes,
+-		const unsigned long __user *new_nodes)
++SYSCALL_DEFINE4(migrate_pages, pid_t, pid, unsigned long, maxnode,
++		const unsigned long __user *, old_nodes,
++		const unsigned long __user *, new_nodes)
+ {
+ 	struct mm_struct *mm;
+ 	struct task_struct *task;
+@@ -1180,10 +1179,9 @@ out:
+ 
+ 
+ /* Retrieve NUMA policy */
+-asmlinkage long sys_get_mempolicy(int __user *policy,
+-				unsigned long __user *nmask,
+-				unsigned long maxnode,
+-				unsigned long addr, unsigned long flags)
++SYSCALL_DEFINE5(get_mempolicy, int __user *, policy,
++		unsigned long __user *, nmask, unsigned long, maxnode,
++		unsigned long, addr, unsigned long, flags)
+ {
+ 	int err;
+ 	int uninitialized_var(pval);
+diff --git a/mm/migrate.c b/mm/migrate.c
+index 037b096..7fc57cc 100644
+--- a/mm/migrate.c
++++ b/mm/migrate.c
+@@ -1070,10 +1070,10 @@ out:
+  * Move a list of pages in the address space of the currently executing
+  * process.
+  */
+-asmlinkage long sys_move_pages(pid_t pid, unsigned long nr_pages,
+-			const void __user * __user *pages,
+-			const int __user *nodes,
+-			int __user *status, int flags)
++SYSCALL_DEFINE6(move_pages, pid_t, pid, unsigned long, nr_pages,
++		const void __user * __user *, pages,
++		const int __user *, nodes,
++		int __user *, status, int, flags)
+ {
+ 	struct task_struct *task;
+ 	struct mm_struct *mm;
+diff --git a/mm/mincore.c b/mm/mincore.c
+index 5178800..8cb508f 100644
+--- a/mm/mincore.c
++++ b/mm/mincore.c
+@@ -177,8 +177,8 @@ none_mapped:
+  *		mapped
+  *  -EAGAIN - A kernel resource was temporarily unavailable.
+  */
+-asmlinkage long sys_mincore(unsigned long start, size_t len,
+-	unsigned char __user * vec)
++SYSCALL_DEFINE3(mincore, unsigned long, start, size_t, len,
++		unsigned char __user *, vec)
+ {
+ 	long retval;
+ 	unsigned long pages;
+diff --git a/mm/mlock.c b/mm/mlock.c
+index 1ada366..d35fe89 100644
+--- a/mm/mlock.c
++++ b/mm/mlock.c
+@@ -529,7 +529,7 @@ static int do_mlock(unsigned long start, size_t len, int on)
+ 	return error;
+ }
+ 
+-asmlinkage long sys_mlock(unsigned long start, size_t len)
++SYSCALL_DEFINE2(mlock, unsigned long, start, size_t, len)
+ {
+ 	unsigned long locked;
+ 	unsigned long lock_limit;
+@@ -557,7 +557,7 @@ asmlinkage long sys_mlock(unsigned long start, size_t len)
+ 	return error;
+ }
+ 
+-asmlinkage long sys_munlock(unsigned long start, size_t len)
++SYSCALL_DEFINE2(munlock, unsigned long, start, size_t, len)
+ {
+ 	int ret;
+ 
+@@ -594,7 +594,7 @@ out:
+ 	return 0;
+ }
+ 
+-asmlinkage long sys_mlockall(int flags)
++SYSCALL_DEFINE1(mlockall, int, flags)
+ {
+ 	unsigned long lock_limit;
+ 	int ret = -EINVAL;
+@@ -622,7 +622,7 @@ out:
+ 	return ret;
+ }
+ 
+-asmlinkage long sys_munlockall(void)
++SYSCALL_DEFINE0(munlockall)
+ {
+ 	int ret;
+ 
+diff --git a/mm/mmap.c b/mm/mmap.c
+index d4855a6..937b44f 100644
+--- a/mm/mmap.c
++++ b/mm/mmap.c
+@@ -245,7 +245,7 @@ static struct vm_area_struct *remove_vma(struct vm_area_struct *vma)
+ 	return next;
+ }
+ 
+-asmlinkage unsigned long sys_brk(unsigned long brk)
++SYSCALL_DEFINE1(brk, unsigned long, brk)
+ {
+ 	unsigned long rlim, retval;
+ 	unsigned long newbrk, oldbrk;
+@@ -1949,7 +1949,7 @@ int do_munmap(struct mm_struct *mm, unsigned long start, size_t len)
+ 
+ EXPORT_SYMBOL(do_munmap);
+ 
+-asmlinkage long sys_munmap(unsigned long addr, size_t len)
++SYSCALL_DEFINE2(munmap, unsigned long, addr, size_t, len)
+ {
+ 	int ret;
+ 	struct mm_struct *mm = current->mm;
+diff --git a/mm/mprotect.c b/mm/mprotect.c
+index fded06f..2623e29 100644
+--- a/mm/mprotect.c
++++ b/mm/mprotect.c
+@@ -219,8 +219,8 @@ fail:
+ 	return error;
+ }
+ 
+-asmlinkage long
+-sys_mprotect(unsigned long start, size_t len, unsigned long prot)
++SYSCALL_DEFINE3(mprotect, unsigned long, start, size_t, len,
++		unsigned long, prot)
+ {
+ 	unsigned long vm_flags, nstart, end, tmp, reqprot;
+ 	struct vm_area_struct *vma, *prev;
+diff --git a/mm/mremap.c b/mm/mremap.c
+index 58a2908..4207055 100644
+--- a/mm/mremap.c
++++ b/mm/mremap.c
+@@ -420,9 +420,9 @@ out_nc:
+ 	return ret;
+ }
+ 
+-asmlinkage unsigned long sys_mremap(unsigned long addr,
+-	unsigned long old_len, unsigned long new_len,
+-	unsigned long flags, unsigned long new_addr)
++SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len,
++		unsigned long, new_len, unsigned long, flags,
++		unsigned long, new_addr)
+ {
+ 	unsigned long ret;
+ 
+diff --git a/mm/msync.c b/mm/msync.c
+index 144a757..9e06d2e 100644
+--- a/mm/msync.c
++++ b/mm/msync.c
+@@ -28,7 +28,7 @@
+  * So by _not_ starting I/O in MS_ASYNC we provide complete flexibility to
+  * applications.
+  */
+-asmlinkage long sys_msync(unsigned long start, size_t len, int flags)
++SYSCALL_DEFINE3(msync, unsigned long, start, size_t, len, int, flags)
+ {
+ 	unsigned long end;
+ 	struct mm_struct *mm = current->mm;
+diff --git a/mm/nommu.c b/mm/nommu.c
+index 7695dc8..b8fade4 100644
+--- a/mm/nommu.c
++++ b/mm/nommu.c
+@@ -377,7 +377,7 @@ EXPORT_SYMBOL(vm_insert_page);
+  *  to a regular file.  in this case, the unmapping will need
+  *  to invoke file system routines that need the global lock.
+  */
+-asmlinkage unsigned long sys_brk(unsigned long brk)
++SYSCALL_DEFINE1(brk, unsigned long, brk)
+ {
+ 	struct mm_struct *mm = current->mm;
+ 
+@@ -1192,7 +1192,7 @@ int do_munmap(struct mm_struct *mm, unsigned long addr, size_t len)
+ }
+ EXPORT_SYMBOL(do_munmap);
+ 
+-asmlinkage long sys_munmap(unsigned long addr, size_t len)
++SYSCALL_DEFINE2(munmap, unsigned long, addr, size_t, len)
+ {
+ 	int ret;
+ 	struct mm_struct *mm = current->mm;
+@@ -1283,9 +1283,9 @@ unsigned long do_mremap(unsigned long addr,
+ }
+ EXPORT_SYMBOL(do_mremap);
+ 
+-asmlinkage unsigned long sys_mremap(unsigned long addr,
+-	unsigned long old_len, unsigned long new_len,
+-	unsigned long flags, unsigned long new_addr)
++SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len,
++		unsigned long, new_len, unsigned long, flags,
++		unsigned long, new_addr)
+ {
+ 	unsigned long ret;
+ 
+diff --git a/mm/swapfile.c b/mm/swapfile.c
+index 90cb67a..d06896b 100644
+--- a/mm/swapfile.c
++++ b/mm/swapfile.c
+@@ -1223,7 +1223,7 @@ int page_queue_congested(struct page *page)
+ }
+ #endif
+ 
+-asmlinkage long sys_swapoff(const char __user * specialfile)
++SYSCALL_DEFINE1(swapoff, const char __user *, specialfile)
+ {
+ 	struct swap_info_struct * p = NULL;
+ 	unsigned short *swap_map;
+@@ -1467,7 +1467,7 @@ __initcall(procswaps_init);
+  *
+  * The swapon system call
+  */
+-asmlinkage long sys_swapon(const char __user * specialfile, int swap_flags)
++SYSCALL_DEFINE2(swapon, const char __user *, specialfile, int, swap_flags)
+ {
+ 	struct swap_info_struct * p;
+ 	char *name = NULL;
+diff --git a/mm/vmalloc.c b/mm/vmalloc.c
+index 1ddb77b..7465f22 100644
+--- a/mm/vmalloc.c
++++ b/mm/vmalloc.c
+@@ -151,11 +151,12 @@ static int vmap_pud_range(pgd_t *pgd, unsigned long addr,
+  *
+  * Ie. pte at addr+N*PAGE_SIZE shall point to pfn corresponding to pages[N]
+  */
+-static int vmap_page_range(unsigned long addr, unsigned long end,
++static int vmap_page_range(unsigned long start, unsigned long end,
+ 				pgprot_t prot, struct page **pages)
+ {
+ 	pgd_t *pgd;
+ 	unsigned long next;
++	unsigned long addr = start;
+ 	int err = 0;
+ 	int nr = 0;
+ 
+@@ -167,7 +168,7 @@ static int vmap_page_range(unsigned long addr, unsigned long end,
+ 		if (err)
+ 			break;
+ 	} while (pgd++, addr = next, addr != end);
+-	flush_cache_vmap(addr, end);
++	flush_cache_vmap(start, end);
+ 
+ 	if (unlikely(err))
+ 		return err;
+diff --git a/net/socket.c b/net/socket.c
+index 76ba80a..787a405 100644
+--- a/net/socket.c
++++ b/net/socket.c
+@@ -1215,7 +1215,7 @@ int sock_create_kern(int family, int type, int protocol, struct socket **res)
+ 	return __sock_create(&init_net, family, type, protocol, res, 1);
+ }
+ 
+-asmlinkage long sys_socket(int family, int type, int protocol)
++SYSCALL_DEFINE3(socket, int, family, int, type, int, protocol)
+ {
+ 	int retval;
+ 	struct socket *sock;
+@@ -1256,8 +1256,8 @@ out_release:
+  *	Create a pair of connected sockets.
+  */
+ 
+-asmlinkage long sys_socketpair(int family, int type, int protocol,
+-			       int __user *usockvec)
++SYSCALL_DEFINE4(socketpair, int, family, int, type, int, protocol,
++		int __user *, usockvec)
+ {
+ 	struct socket *sock1, *sock2;
+ 	int fd1, fd2, err;
+@@ -1364,7 +1364,7 @@ out_fd:
+  *	the protocol layer (having also checked the address is ok).
+  */
+ 
+-asmlinkage long sys_bind(int fd, struct sockaddr __user *umyaddr, int addrlen)
++SYSCALL_DEFINE3(bind, int, fd, struct sockaddr __user *, umyaddr, int, addrlen)
+ {
+ 	struct socket *sock;
+ 	struct sockaddr_storage address;
+@@ -1393,7 +1393,7 @@ asmlinkage long sys_bind(int fd, struct sockaddr __user *umyaddr, int addrlen)
+  *	ready for listening.
+  */
+ 
+-asmlinkage long sys_listen(int fd, int backlog)
++SYSCALL_DEFINE2(listen, int, fd, int, backlog)
+ {
+ 	struct socket *sock;
+ 	int err, fput_needed;
+@@ -1426,8 +1426,8 @@ asmlinkage long sys_listen(int fd, int backlog)
+  *	clean when we restucture accept also.
+  */
+ 
+-asmlinkage long sys_accept4(int fd, struct sockaddr __user *upeer_sockaddr,
+-			    int __user *upeer_addrlen, int flags)
++SYSCALL_DEFINE4(accept4, int, fd, struct sockaddr __user *, upeer_sockaddr,
++		int __user *, upeer_addrlen, int, flags)
+ {
+ 	struct socket *sock, *newsock;
+ 	struct file *newfile;
+@@ -1510,8 +1510,8 @@ out_fd:
+ 	goto out_put;
+ }
+ 
+-asmlinkage long sys_accept(int fd, struct sockaddr __user *upeer_sockaddr,
+-			   int __user *upeer_addrlen)
++SYSCALL_DEFINE3(accept, int, fd, struct sockaddr __user *, upeer_sockaddr,
++		int __user *, upeer_addrlen)
+ {
+ 	return sys_accept4(fd, upeer_sockaddr, upeer_addrlen, 0);
+ }
+@@ -1528,8 +1528,8 @@ asmlinkage long sys_accept(int fd, struct sockaddr __user *upeer_sockaddr,
+  *	include the -EINPROGRESS status for such sockets.
+  */
+ 
+-asmlinkage long sys_connect(int fd, struct sockaddr __user *uservaddr,
+-			    int addrlen)
++SYSCALL_DEFINE3(connect, int, fd, struct sockaddr __user *, uservaddr,
++		int, addrlen)
+ {
+ 	struct socket *sock;
+ 	struct sockaddr_storage address;
+@@ -1560,8 +1560,8 @@ out:
+  *	name to user space.
+  */
+ 
+-asmlinkage long sys_getsockname(int fd, struct sockaddr __user *usockaddr,
+-				int __user *usockaddr_len)
++SYSCALL_DEFINE3(getsockname, int, fd, struct sockaddr __user *, usockaddr,
++		int __user *, usockaddr_len)
+ {
+ 	struct socket *sock;
+ 	struct sockaddr_storage address;
+@@ -1591,8 +1591,8 @@ out:
+  *	name to user space.
+  */
+ 
+-asmlinkage long sys_getpeername(int fd, struct sockaddr __user *usockaddr,
+-				int __user *usockaddr_len)
++SYSCALL_DEFINE3(getpeername, int, fd, struct sockaddr __user *, usockaddr,
++		int __user *, usockaddr_len)
+ {
+ 	struct socket *sock;
+ 	struct sockaddr_storage address;
+@@ -1623,9 +1623,9 @@ asmlinkage long sys_getpeername(int fd, struct sockaddr __user *usockaddr,
+  *	the protocol.
+  */
+ 
+-asmlinkage long sys_sendto(int fd, void __user *buff, size_t len,
+-			   unsigned flags, struct sockaddr __user *addr,
+-			   int addr_len)
++SYSCALL_DEFINE6(sendto, int, fd, void __user *, buff, size_t, len,
++		unsigned, flags, struct sockaddr __user *, addr,
++		int, addr_len)
+ {
+ 	struct socket *sock;
+ 	struct sockaddr_storage address;
+@@ -1668,7 +1668,8 @@ out:
+  *	Send a datagram down a socket.
+  */
+ 
+-asmlinkage long sys_send(int fd, void __user *buff, size_t len, unsigned flags)
++SYSCALL_DEFINE4(send, int, fd, void __user *, buff, size_t, len,
++		unsigned, flags)
+ {
+ 	return sys_sendto(fd, buff, len, flags, NULL, 0);
+ }
+@@ -1679,9 +1680,9 @@ asmlinkage long sys_send(int fd, void __user *buff, size_t len, unsigned flags)
+  *	sender address from kernel to user space.
+  */
+ 
+-asmlinkage long sys_recvfrom(int fd, void __user *ubuf, size_t size,
+-			     unsigned flags, struct sockaddr __user *addr,
+-			     int __user *addr_len)
++SYSCALL_DEFINE6(recvfrom, int, fd, void __user *, ubuf, size_t, size,
++		unsigned, flags, struct sockaddr __user *, addr,
++		int __user *, addr_len)
+ {
+ 	struct socket *sock;
+ 	struct iovec iov;
+@@ -1733,8 +1734,8 @@ asmlinkage long sys_recv(int fd, void __user *ubuf, size_t size,
+  *	to pass the user mode parameter for the protocols to sort out.
+  */
+ 
+-asmlinkage long sys_setsockopt(int fd, int level, int optname,
+-			       char __user *optval, int optlen)
++SYSCALL_DEFINE5(setsockopt, int, fd, int, level, int, optname,
++		char __user *, optval, int, optlen)
+ {
+ 	int err, fput_needed;
+ 	struct socket *sock;
+@@ -1767,8 +1768,8 @@ out_put:
+  *	to pass a user mode parameter for the protocols to sort out.
+  */
+ 
+-asmlinkage long sys_getsockopt(int fd, int level, int optname,
+-			       char __user *optval, int __user *optlen)
++SYSCALL_DEFINE5(getsockopt, int, fd, int, level, int, optname,
++		char __user *, optval, int __user *, optlen)
+ {
+ 	int err, fput_needed;
+ 	struct socket *sock;
+@@ -1797,7 +1798,7 @@ out_put:
+  *	Shutdown a socket.
+  */
+ 
+-asmlinkage long sys_shutdown(int fd, int how)
++SYSCALL_DEFINE2(shutdown, int, fd, int, how)
+ {
+ 	int err, fput_needed;
+ 	struct socket *sock;
+@@ -1823,7 +1824,7 @@ asmlinkage long sys_shutdown(int fd, int how)
+  *	BSD sendmsg interface
+  */
+ 
+-asmlinkage long sys_sendmsg(int fd, struct msghdr __user *msg, unsigned flags)
++SYSCALL_DEFINE3(sendmsg, int, fd, struct msghdr __user *, msg, unsigned, flags)
+ {
+ 	struct compat_msghdr __user *msg_compat =
+ 	    (struct compat_msghdr __user *)msg;
+@@ -1929,8 +1930,8 @@ out:
+  *	BSD recvmsg interface
+  */
+ 
+-asmlinkage long sys_recvmsg(int fd, struct msghdr __user *msg,
+-			    unsigned int flags)
++SYSCALL_DEFINE3(recvmsg, int, fd, struct msghdr __user *, msg,
++		unsigned int, flags)
+ {
+ 	struct compat_msghdr __user *msg_compat =
+ 	    (struct compat_msghdr __user *)msg;
+@@ -2053,7 +2054,7 @@ static const unsigned char nargs[19]={
+  *  it is set by the callees.
+  */
+ 
+-asmlinkage long sys_socketcall(int call, unsigned long __user *args)
++SYSCALL_DEFINE2(socketcall, int, call, unsigned long __user *, args)
+ {
+ 	unsigned long a[6];
+ 	unsigned long a0, a1;
+diff --git a/security/device_cgroup.c b/security/device_cgroup.c
+index 5ba7870..df9d491 100644
+--- a/security/device_cgroup.c
++++ b/security/device_cgroup.c
+@@ -513,6 +513,9 @@ int devcgroup_inode_mknod(int mode, dev_t dev)
+ 	struct dev_cgroup *dev_cgroup;
+ 	struct dev_whitelist_item *wh;
+ 
++	if (!S_ISBLK(mode) && !S_ISCHR(mode))
++		return 0;
++
+ 	rcu_read_lock();
+ 
+ 	dev_cgroup = task_devcgroup(current);
+diff --git a/security/keys/keyctl.c b/security/keys/keyctl.c
+index acc9c89..9b4e0e9 100644
+--- a/security/keys/keyctl.c
++++ b/security/keys/keyctl.c
+@@ -54,11 +54,11 @@ static int key_get_type_from_user(char *type,
+  * - returns the new key's serial number
+  * - implements add_key()
+  */
+-asmlinkage long sys_add_key(const char __user *_type,
+-			    const char __user *_description,
+-			    const void __user *_payload,
+-			    size_t plen,
+-			    key_serial_t ringid)
++SYSCALL_DEFINE5(add_key, const char __user *, _type,
++		const char __user *, _description,
++		const void __user *, _payload,
++		size_t, plen,
++		key_serial_t, ringid)
+ {
+ 	key_ref_t keyring_ref, key_ref;
+ 	char type[32], *description;
+@@ -146,10 +146,10 @@ asmlinkage long sys_add_key(const char __user *_type,
+  *   - if the _callout_info string is empty, it will be rendered as "-"
+  * - implements request_key()
+  */
+-asmlinkage long sys_request_key(const char __user *_type,
+-				const char __user *_description,
+-				const char __user *_callout_info,
+-				key_serial_t destringid)
++SYSCALL_DEFINE4(request_key, const char __user *, _type,
++		const char __user *, _description,
++		const char __user *, _callout_info,
++		key_serial_t, destringid)
+ {
+ 	struct key_type *ktype;
+ 	struct key *key;
+@@ -1152,8 +1152,8 @@ long keyctl_get_security(key_serial_t keyid,
+ /*
+  * the key control system call
+  */
+-asmlinkage long sys_keyctl(int option, unsigned long arg2, unsigned long arg3,
+-			   unsigned long arg4, unsigned long arg5)
++SYSCALL_DEFINE5(keyctl, int, option, unsigned long, arg2, unsigned long, arg3,
++		unsigned long, arg4, unsigned long, arg5)
+ {
+ 	switch (option) {
+ 	case KEYCTL_GET_KEYRING_ID:
+diff --git a/sound/pci/hda/patch_analog.c b/sound/pci/hda/patch_analog.c
+index 686c774..2dc976d 100644
+--- a/sound/pci/hda/patch_analog.c
++++ b/sound/pci/hda/patch_analog.c
+@@ -3861,6 +3861,7 @@ static const char *ad1884a_models[AD1884A_MODELS] = {
+ static struct snd_pci_quirk ad1884a_cfg_tbl[] = {
+ 	SND_PCI_QUIRK(0x103c, 0x3030, "HP", AD1884A_MOBILE),
+ 	SND_PCI_QUIRK(0x103c, 0x3056, "HP", AD1884A_MOBILE),
++	SND_PCI_QUIRK(0x103c, 0x30e6, "HP 6730b", AD1884A_LAPTOP),
+ 	SND_PCI_QUIRK(0x103c, 0x30e7, "HP EliteBook 8530p", AD1884A_LAPTOP),
+ 	SND_PCI_QUIRK(0x103c, 0x3614, "HP 6730s", AD1884A_LAPTOP),
+ 	SND_PCI_QUIRK(0x17aa, 0x20ac, "Thinkpad X300", AD1884A_THINKPAD),
+@@ -4221,13 +4222,13 @@ static int patch_ad1882(struct hda_codec *codec)
+ 	spec->num_adc_nids = ARRAY_SIZE(ad1882_adc_nids);
+ 	spec->adc_nids = ad1882_adc_nids;
+ 	spec->capsrc_nids = ad1882_capsrc_nids;
+-	if (codec->vendor_id == 0x11d1882)
++	if (codec->vendor_id == 0x11d41882)
+ 		spec->input_mux = &ad1882_capture_source;
+ 	else
+ 		spec->input_mux = &ad1882a_capture_source;
+ 	spec->num_mixers = 2;
+ 	spec->mixers[0] = ad1882_base_mixers;
+-	if (codec->vendor_id == 0x11d1882)
++	if (codec->vendor_id == 0x11d41882)
+ 		spec->mixers[1] = ad1882_loopback_mixers;
+ 	else
+ 		spec->mixers[1] = ad1882a_loopback_mixers;
+diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c
+index b77f330..24ff2b8 100644
+--- a/sound/pci/hda/patch_sigmatel.c
++++ b/sound/pci/hda/patch_sigmatel.c
+@@ -1720,6 +1720,8 @@ static struct snd_pci_quirk stac92hd71bxx_cfg_tbl[] = {
+ 		      "HP dv5", STAC_HP_M4),
+ 	SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x30f4,
+ 		      "HP dv7", STAC_HP_M4),
++	SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x30fc,
++		      "HP dv7", STAC_HP_M4),
+ 	SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x361a,
+ 				"unknown HP", STAC_HP_M4),
+ 	SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x0233,
+diff --git a/sound/usb/caiaq/caiaq-device.h b/sound/usb/caiaq/caiaq-device.h
+index f9fbdba..ab56e73 100644
+--- a/sound/usb/caiaq/caiaq-device.h
++++ b/sound/usb/caiaq/caiaq-device.h
+@@ -75,6 +75,7 @@ struct snd_usb_caiaqdev {
+ 	wait_queue_head_t ep1_wait_queue;
+ 	wait_queue_head_t prepare_wait_queue;
+ 	int spec_received, audio_parm_answer;
++	int midi_out_active;
+ 
+ 	char vendor_name[CAIAQ_USB_STR_LEN];
+ 	char product_name[CAIAQ_USB_STR_LEN];
+diff --git a/sound/usb/caiaq/caiaq-midi.c b/sound/usb/caiaq/caiaq-midi.c
+index 30b57f9..f19fd36 100644
+--- a/sound/usb/caiaq/caiaq-midi.c
++++ b/sound/usb/caiaq/caiaq-midi.c
+@@ -59,6 +59,11 @@ static int snd_usb_caiaq_midi_output_open(struct snd_rawmidi_substream *substrea
+ 
+ static int snd_usb_caiaq_midi_output_close(struct snd_rawmidi_substream *substream)
+ {
++	struct snd_usb_caiaqdev *dev = substream->rmidi->private_data;
++	if (dev->midi_out_active) {
++		usb_kill_urb(&dev->midi_out_urb);
++		dev->midi_out_active = 0;
++	}
+ 	return 0;
+ }
+ 
+@@ -69,7 +74,8 @@ static void snd_usb_caiaq_midi_send(struct snd_usb_caiaqdev *dev,
+ 	
+ 	dev->midi_out_buf[0] = EP1_CMD_MIDI_WRITE;
+ 	dev->midi_out_buf[1] = 0; /* port */
+-	len = snd_rawmidi_transmit_peek(substream, dev->midi_out_buf+3, EP1_BUFSIZE-3);
++	len = snd_rawmidi_transmit(substream, dev->midi_out_buf + 3,
++				   EP1_BUFSIZE - 3);
+ 	
+ 	if (len <= 0)
+ 		return;
+@@ -79,24 +85,24 @@ static void snd_usb_caiaq_midi_send(struct snd_usb_caiaqdev *dev,
+ 	
+ 	ret = usb_submit_urb(&dev->midi_out_urb, GFP_ATOMIC);
+ 	if (ret < 0)
+-		log("snd_usb_caiaq_midi_send(%p): usb_submit_urb() failed, %d\n",
+-				substream, ret);
++		log("snd_usb_caiaq_midi_send(%p): usb_submit_urb() failed,"
++		    "ret=%d, len=%d\n",
++		    substream, ret, len);
++	else
++		dev->midi_out_active = 1;
+ }
+ 
+ static void snd_usb_caiaq_midi_output_trigger(struct snd_rawmidi_substream *substream, int up)
+ {
+ 	struct snd_usb_caiaqdev *dev = substream->rmidi->private_data;
+ 	
+-	if (dev->midi_out_substream != NULL)
+-		return;
+-	
+-	if (!up) {
++	if (up) {
++		dev->midi_out_substream = substream;
++		if (!dev->midi_out_active)
++			snd_usb_caiaq_midi_send(dev, substream);
++	} else {
+ 		dev->midi_out_substream = NULL;
+-		return;
+ 	}
+-	
+-	dev->midi_out_substream = substream;
+-	snd_usb_caiaq_midi_send(dev, substream);
+ }
+ 
+ 
+@@ -161,16 +167,14 @@ int snd_usb_caiaq_midi_init(struct snd_usb_caiaqdev *device)
+ void snd_usb_caiaq_midi_output_done(struct urb* urb)
+ {
+ 	struct snd_usb_caiaqdev *dev = urb->context;
+-      	char *buf = urb->transfer_buffer;
+ 	
++	dev->midi_out_active = 0;
+ 	if (urb->status != 0)
+ 		return;
+ 
+ 	if (!dev->midi_out_substream)
+ 		return;
+ 
+-	snd_rawmidi_transmit_ack(dev->midi_out_substream, buf[2]);
+-	dev->midi_out_substream = NULL;
+ 	snd_usb_caiaq_midi_send(dev, dev->midi_out_substream);
+ }
+ 

Modified: dists/trunk/linux-2.6/debian/patches/series/1~experimental.1
==============================================================================
--- dists/trunk/linux-2.6/debian/patches/series/1~experimental.1	(original)
+++ dists/trunk/linux-2.6/debian/patches/series/1~experimental.1	Sun Jan 18 20:17:58 2009
@@ -30,3 +30,4 @@
 + features/arm/led-pca9532-mem-leak.patch
 + features/arm/led-pca9532-workqueque.patch
 + features/sparc/video-sunxvr500-intergraph.patch
++ bugfix/all/stable/patch-2.6.28.1



More information about the Kernel-svn-changes mailing list