ms: fix compatible sys32 syscalls on x86_64 platform

This patch is a commit e412ac49 from Andi Kleen <ak@suse.de>
"x86_64: Fix readahead/sync_file_range/fadvise64 compat calls.

   > Correctly convert the u64 arguments from 32bit to 64bit.
   >
   > Pointed out by Heiko Carstens.
   >
   > I guess this proves Linus' theory that nobody uses the more exotic Linux
   > specific syscalls.  It wasn't discovered by a user.

Bug https://bugzilla.sw.ru/show_bug.cgi?id=465900

Signed-off-by: Vitaliy Gusev <vgusev@openvz.org>

---
diff -up linux-2.6.9.fv/arch/x86_64/ia32/ia32entry.S.~1~ linux-2.6.9.fv/arch/x86_64/ia32/ia32entry.S
--- linux-2.6.9.fv/arch/x86_64/ia32/ia32entry.S.~1~	2010-02-09 15:02:23.000000000 +0300
+++ linux-2.6.9.fv/arch/x86_64/ia32/ia32entry.S	2010-02-09 15:38:59.000000000 +0300
@@ -553,7 +553,7 @@ ia32_sys_call_table:
 #endif
 	.quad quiet_ni_syscall    	/* security */
 	.quad sys_gettid	
-	.quad sys_readahead	/* 225 */
+	.quad sys32_readahead	/* 225 */
 	.quad sys_setxattr
 	.quad sys_lsetxattr
 	.quad sys_fsetxattr
@@ -578,7 +578,7 @@ ia32_sys_call_table:
 	.quad sys32_io_getevents
 	.quad sys32_io_submit
 	.quad sys_io_cancel
-	.quad sys_fadvise64		/* 250 */
+	.quad sys32_fadvise64		/* 250 */
 	.quad quiet_ni_syscall 	/* free_huge_pages */
 	.quad sys_exit_group
 	.quad sys32_lookup_dcookie
diff -up linux-2.6.9.fv/arch/x86_64/ia32/ia32entry-xen.S.~1~ linux-2.6.9.fv/arch/x86_64/ia32/ia32entry-xen.S
--- linux-2.6.9.fv/arch/x86_64/ia32/ia32entry-xen.S.~1~	2010-02-09 15:02:23.000000000 +0300
+++ linux-2.6.9.fv/arch/x86_64/ia32/ia32entry-xen.S	2010-02-09 15:38:59.000000000 +0300
@@ -578,7 +578,7 @@ ia32_sys_call_table:
 #endif
 	.quad quiet_ni_syscall    	/* security */
 	.quad sys_gettid	
-	.quad sys_readahead	/* 225 */
+	.quad sys32_readahead	/* 225 */
 	.quad sys_setxattr
 	.quad sys_lsetxattr
 	.quad sys_fsetxattr
@@ -603,7 +603,7 @@ ia32_sys_call_table:
 	.quad sys32_io_getevents
 	.quad sys32_io_submit
 	.quad sys_io_cancel
-	.quad sys_fadvise64		/* 250 */
+	.quad sys32_fadvise64		/* 250 */
 	.quad quiet_ni_syscall 	/* free_huge_pages */
 	.quad sys_exit_group
 	.quad sys32_lookup_dcookie
diff -up linux-2.6.9.fv/arch/x86_64/ia32/sys_ia32.c.~1~ linux-2.6.9.fv/arch/x86_64/ia32/sys_ia32.c
--- linux-2.6.9.fv/arch/x86_64/ia32/sys_ia32.c.~1~	2010-02-09 15:02:23.000000000 +0300
+++ linux-2.6.9.fv/arch/x86_64/ia32/sys_ia32.c	2010-02-09 15:47:29.000000000 +0300
@@ -883,6 +883,18 @@ sys32_pause(void)
 	return -ERESTARTNOHAND;
 }
 
+asmlinkage ssize_t sys32_readahead(int fd, unsigned off_lo, unsigned off_hi, size_t count)
+{
+	return sys_readahead(fd, ((u64)off_hi << 32) | off_lo, count);
+}
+
+asmlinkage long sys32_fadvise64(int fd, unsigned offset_lo, unsigned offset_hi, size_t len,
+		     int advice)
+{
+	return sys_fadvise64_64(fd, ((u64)offset_hi << 32) | offset_lo,
+				len, advice);
+}
+
 
 struct sysctl_ia32 {
 	unsigned int	name;

