aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDominik Brodowski <linux@dominikbrodowski.net>2018-03-11 06:34:46 -0400
committerDominik Brodowski <linux@dominikbrodowski.net>2018-04-02 14:16:11 -0400
commita90f590a1bee36fc2129cfb38ceec24a555bb12d (patch)
tree42e18715d5070d0f428464ba40b4ed136363f6e2
parent9d5b7c956b09daab955fb2a42447d5d89ff15093 (diff)
mm: add ksys_mmap_pgoff() helper; remove in-kernel calls to sys_mmap_pgoff()
Using this helper allows us to avoid the in-kernel calls to the sys_mmap_pgoff() syscall. The ksys_ prefix denotes that this function is meant as a drop-in replacement for the syscall. In particular, it uses the same calling convention as sys_mmap_pgoff(). This patch is part of a series which removes in-kernel calls to syscalls. On this basis, the syscall entry path can be streamlined. For details, see http://lkml.kernel.org/r/20180325162527.GA17492@light.dominikbrodowski.net Cc: Andrew Morton <akpm@linux-foundation.org> Cc: linux-mm@kvack.org Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
-rw-r--r--arch/alpha/kernel/osf_sys.c2
-rw-r--r--arch/arm64/kernel/sys.c2
-rw-r--r--arch/ia64/kernel/sys_ia64.c4
-rw-r--r--arch/m68k/kernel/sys_m68k.c2
-rw-r--r--arch/microblaze/kernel/sys_microblaze.c6
-rw-r--r--arch/mips/kernel/linux32.c4
-rw-r--r--arch/mips/kernel/syscall.c6
-rw-r--r--arch/parisc/kernel/sys_parisc.c6
-rw-r--r--arch/powerpc/kernel/syscalls.c2
-rw-r--r--arch/riscv/kernel/sys_riscv.c4
-rw-r--r--arch/s390/kernel/compat_linux.c6
-rw-r--r--arch/s390/kernel/sys_s390.c2
-rw-r--r--arch/sh/kernel/sys_sh.c4
-rw-r--r--arch/sparc/kernel/sys_sparc_32.c6
-rw-r--r--arch/sparc/kernel/sys_sparc_64.c2
-rw-r--r--arch/um/kernel/syscall.c2
-rw-r--r--arch/x86/ia32/sys_ia32.c2
-rw-r--r--arch/x86/kernel/sys_x86_64.c2
-rw-r--r--include/linux/syscalls.h3
-rw-r--r--mm/mmap.c17
-rw-r--r--mm/nommu.c17
21 files changed, 60 insertions, 41 deletions
diff --git a/arch/alpha/kernel/osf_sys.c b/arch/alpha/kernel/osf_sys.c
index fa1a392ca9a2..89faa6f4de47 100644
--- a/arch/alpha/kernel/osf_sys.c
+++ b/arch/alpha/kernel/osf_sys.c
@@ -189,7 +189,7 @@ SYSCALL_DEFINE6(osf_mmap, unsigned long, addr, unsigned long, len,
189 goto out; 189 goto out;
190 if (off & ~PAGE_MASK) 190 if (off & ~PAGE_MASK)
191 goto out; 191 goto out;
192 ret = sys_mmap_pgoff(addr, len, prot, flags, fd, off >> PAGE_SHIFT); 192 ret = ksys_mmap_pgoff(addr, len, prot, flags, fd, off >> PAGE_SHIFT);
193 out: 193 out:
194 return ret; 194 return ret;
195} 195}
diff --git a/arch/arm64/kernel/sys.c b/arch/arm64/kernel/sys.c
index 26fe8ea93ea2..72981bae10eb 100644
--- a/arch/arm64/kernel/sys.c
+++ b/arch/arm64/kernel/sys.c
@@ -34,7 +34,7 @@ asmlinkage long sys_mmap(unsigned long addr, unsigned long len,
34 if (offset_in_page(off) != 0) 34 if (offset_in_page(off) != 0)
35 return -EINVAL; 35 return -EINVAL;
36 36
37 return sys_mmap_pgoff(addr, len, prot, flags, fd, off >> PAGE_SHIFT); 37 return ksys_mmap_pgoff(addr, len, prot, flags, fd, off >> PAGE_SHIFT);
38} 38}
39 39
40SYSCALL_DEFINE1(arm64_personality, unsigned int, personality) 40SYSCALL_DEFINE1(arm64_personality, unsigned int, personality)
diff --git a/arch/ia64/kernel/sys_ia64.c b/arch/ia64/kernel/sys_ia64.c
index 085adfcc74a4..9ebe1d633abc 100644
--- a/arch/ia64/kernel/sys_ia64.c
+++ b/arch/ia64/kernel/sys_ia64.c
@@ -139,7 +139,7 @@ int ia64_mmap_check(unsigned long addr, unsigned long len,
139asmlinkage unsigned long 139asmlinkage unsigned long
140sys_mmap2 (unsigned long addr, unsigned long len, int prot, int flags, int fd, long pgoff) 140sys_mmap2 (unsigned long addr, unsigned long len, int prot, int flags, int fd, long pgoff)
141{ 141{
142 addr = sys_mmap_pgoff(addr, len, prot, flags, fd, pgoff); 142 addr = ksys_mmap_pgoff(addr, len, prot, flags, fd, pgoff);
143 if (!IS_ERR((void *) addr)) 143 if (!IS_ERR((void *) addr))
144 force_successful_syscall_return(); 144 force_successful_syscall_return();
145 return addr; 145 return addr;
@@ -151,7 +151,7 @@ sys_mmap (unsigned long addr, unsigned long len, int prot, int flags, int fd, lo
151 if (offset_in_page(off) != 0) 151 if (offset_in_page(off) != 0)
152 return -EINVAL; 152 return -EINVAL;
153 153
154 addr = sys_mmap_pgoff(addr, len, prot, flags, fd, off >> PAGE_SHIFT); 154 addr = ksys_mmap_pgoff(addr, len, prot, flags, fd, off >> PAGE_SHIFT);
155 if (!IS_ERR((void *) addr)) 155 if (!IS_ERR((void *) addr))
156 force_successful_syscall_return(); 156 force_successful_syscall_return();
157 return addr; 157 return addr;
diff --git a/arch/m68k/kernel/sys_m68k.c b/arch/m68k/kernel/sys_m68k.c
index 27e10af5153a..6363ec83a290 100644
--- a/arch/m68k/kernel/sys_m68k.c
+++ b/arch/m68k/kernel/sys_m68k.c
@@ -46,7 +46,7 @@ asmlinkage long sys_mmap2(unsigned long addr, unsigned long len,
46 * so we need to shift the argument down by 1; m68k mmap64(3) 46 * so we need to shift the argument down by 1; m68k mmap64(3)
47 * (in libc) expects the last argument of mmap2 in 4Kb units. 47 * (in libc) expects the last argument of mmap2 in 4Kb units.
48 */ 48 */
49 return sys_mmap_pgoff(addr, len, prot, flags, fd, pgoff); 49 return ksys_mmap_pgoff(addr, len, prot, flags, fd, pgoff);
50} 50}
51 51
52/* Convert virtual (user) address VADDR to physical address PADDR */ 52/* Convert virtual (user) address VADDR to physical address PADDR */
diff --git a/arch/microblaze/kernel/sys_microblaze.c b/arch/microblaze/kernel/sys_microblaze.c
index f1e1f666ddde..ed9f34da1a2a 100644
--- a/arch/microblaze/kernel/sys_microblaze.c
+++ b/arch/microblaze/kernel/sys_microblaze.c
@@ -40,7 +40,7 @@ SYSCALL_DEFINE6(mmap, unsigned long, addr, unsigned long, len,
40 if (pgoff & ~PAGE_MASK) 40 if (pgoff & ~PAGE_MASK)
41 return -EINVAL; 41 return -EINVAL;
42 42
43 return sys_mmap_pgoff(addr, len, prot, flags, fd, pgoff >> PAGE_SHIFT); 43 return ksys_mmap_pgoff(addr, len, prot, flags, fd, pgoff >> PAGE_SHIFT);
44} 44}
45 45
46SYSCALL_DEFINE6(mmap2, unsigned long, addr, unsigned long, len, 46SYSCALL_DEFINE6(mmap2, unsigned long, addr, unsigned long, len,
@@ -50,6 +50,6 @@ SYSCALL_DEFINE6(mmap2, unsigned long, addr, unsigned long, len,
50 if (pgoff & (~PAGE_MASK >> 12)) 50 if (pgoff & (~PAGE_MASK >> 12))
51 return -EINVAL; 51 return -EINVAL;
52 52
53 return sys_mmap_pgoff(addr, len, prot, flags, fd, 53 return ksys_mmap_pgoff(addr, len, prot, flags, fd,
54 pgoff >> (PAGE_SHIFT - 12)); 54 pgoff >> (PAGE_SHIFT - 12));
55} 55}
diff --git a/arch/mips/kernel/linux32.c b/arch/mips/kernel/linux32.c
index 1c5785e72db4..0571ab7b68b0 100644
--- a/arch/mips/kernel/linux32.c
+++ b/arch/mips/kernel/linux32.c
@@ -67,8 +67,8 @@ SYSCALL_DEFINE6(32_mmap2, unsigned long, addr, unsigned long, len,
67{ 67{
68 if (pgoff & (~PAGE_MASK >> 12)) 68 if (pgoff & (~PAGE_MASK >> 12))
69 return -EINVAL; 69 return -EINVAL;
70 return sys_mmap_pgoff(addr, len, prot, flags, fd, 70 return ksys_mmap_pgoff(addr, len, prot, flags, fd,
71 pgoff >> (PAGE_SHIFT-12)); 71 pgoff >> (PAGE_SHIFT-12));
72} 72}
73 73
74#define RLIM_INFINITY32 0x7fffffff 74#define RLIM_INFINITY32 0x7fffffff
diff --git a/arch/mips/kernel/syscall.c b/arch/mips/kernel/syscall.c
index 58c6f634b550..69c17b549fd3 100644
--- a/arch/mips/kernel/syscall.c
+++ b/arch/mips/kernel/syscall.c
@@ -63,7 +63,8 @@ SYSCALL_DEFINE6(mips_mmap, unsigned long, addr, unsigned long, len,
63{ 63{
64 if (offset & ~PAGE_MASK) 64 if (offset & ~PAGE_MASK)
65 return -EINVAL; 65 return -EINVAL;
66 return sys_mmap_pgoff(addr, len, prot, flags, fd, offset >> PAGE_SHIFT); 66 return ksys_mmap_pgoff(addr, len, prot, flags, fd,
67 offset >> PAGE_SHIFT);
67} 68}
68 69
69SYSCALL_DEFINE6(mips_mmap2, unsigned long, addr, unsigned long, len, 70SYSCALL_DEFINE6(mips_mmap2, unsigned long, addr, unsigned long, len,
@@ -73,7 +74,8 @@ SYSCALL_DEFINE6(mips_mmap2, unsigned long, addr, unsigned long, len,
73 if (pgoff & (~PAGE_MASK >> 12)) 74 if (pgoff & (~PAGE_MASK >> 12))
74 return -EINVAL; 75 return -EINVAL;
75 76
76 return sys_mmap_pgoff(addr, len, prot, flags, fd, pgoff >> (PAGE_SHIFT-12)); 77 return ksys_mmap_pgoff(addr, len, prot, flags, fd,
78 pgoff >> (PAGE_SHIFT - 12));
77} 79}
78 80
79save_static_function(sys_fork); 81save_static_function(sys_fork);
diff --git a/arch/parisc/kernel/sys_parisc.c b/arch/parisc/kernel/sys_parisc.c
index f36ab1f09595..080d566654ea 100644
--- a/arch/parisc/kernel/sys_parisc.c
+++ b/arch/parisc/kernel/sys_parisc.c
@@ -270,8 +270,8 @@ asmlinkage unsigned long sys_mmap2(unsigned long addr, unsigned long len,
270{ 270{
271 /* Make sure the shift for mmap2 is constant (12), no matter what PAGE_SIZE 271 /* Make sure the shift for mmap2 is constant (12), no matter what PAGE_SIZE
272 we have. */ 272 we have. */
273 return sys_mmap_pgoff(addr, len, prot, flags, fd, 273 return ksys_mmap_pgoff(addr, len, prot, flags, fd,
274 pgoff >> (PAGE_SHIFT - 12)); 274 pgoff >> (PAGE_SHIFT - 12));
275} 275}
276 276
277asmlinkage unsigned long sys_mmap(unsigned long addr, unsigned long len, 277asmlinkage unsigned long sys_mmap(unsigned long addr, unsigned long len,
@@ -279,7 +279,7 @@ asmlinkage unsigned long sys_mmap(unsigned long addr, unsigned long len,
279 unsigned long offset) 279 unsigned long offset)
280{ 280{
281 if (!(offset & ~PAGE_MASK)) { 281 if (!(offset & ~PAGE_MASK)) {
282 return sys_mmap_pgoff(addr, len, prot, flags, fd, 282 return ksys_mmap_pgoff(addr, len, prot, flags, fd,
283 offset >> PAGE_SHIFT); 283 offset >> PAGE_SHIFT);
284 } else { 284 } else {
285 return -EINVAL; 285 return -EINVAL;
diff --git a/arch/powerpc/kernel/syscalls.c b/arch/powerpc/kernel/syscalls.c
index ecb981eea74b..1ef3b80b62a6 100644
--- a/arch/powerpc/kernel/syscalls.c
+++ b/arch/powerpc/kernel/syscalls.c
@@ -57,7 +57,7 @@ static inline long do_mmap2(unsigned long addr, size_t len,
57 off >>= shift; 57 off >>= shift;
58 } 58 }
59 59
60 ret = sys_mmap_pgoff(addr, len, prot, flags, fd, off); 60 ret = ksys_mmap_pgoff(addr, len, prot, flags, fd, off);
61out: 61out:
62 return ret; 62 return ret;
63} 63}
diff --git a/arch/riscv/kernel/sys_riscv.c b/arch/riscv/kernel/sys_riscv.c
index 79c78668258e..f7181ed8aafc 100644
--- a/arch/riscv/kernel/sys_riscv.c
+++ b/arch/riscv/kernel/sys_riscv.c
@@ -24,8 +24,8 @@ static long riscv_sys_mmap(unsigned long addr, unsigned long len,
24{ 24{
25 if (unlikely(offset & (~PAGE_MASK >> page_shift_offset))) 25 if (unlikely(offset & (~PAGE_MASK >> page_shift_offset)))
26 return -EINVAL; 26 return -EINVAL;
27 return sys_mmap_pgoff(addr, len, prot, flags, fd, 27 return ksys_mmap_pgoff(addr, len, prot, flags, fd,
28 offset >> (PAGE_SHIFT - page_shift_offset)); 28 offset >> (PAGE_SHIFT - page_shift_offset));
29} 29}
30 30
31#ifdef CONFIG_64BIT 31#ifdef CONFIG_64BIT
diff --git a/arch/s390/kernel/compat_linux.c b/arch/s390/kernel/compat_linux.c
index 9bb897e443a6..da5ef7718254 100644
--- a/arch/s390/kernel/compat_linux.c
+++ b/arch/s390/kernel/compat_linux.c
@@ -442,8 +442,8 @@ COMPAT_SYSCALL_DEFINE1(s390_old_mmap, struct mmap_arg_struct_emu31 __user *, arg
442 return -EFAULT; 442 return -EFAULT;
443 if (a.offset & ~PAGE_MASK) 443 if (a.offset & ~PAGE_MASK)
444 return -EINVAL; 444 return -EINVAL;
445 return sys_mmap_pgoff(a.addr, a.len, a.prot, a.flags, a.fd, 445 return ksys_mmap_pgoff(a.addr, a.len, a.prot, a.flags, a.fd,
446 a.offset >> PAGE_SHIFT); 446 a.offset >> PAGE_SHIFT);
447} 447}
448 448
449COMPAT_SYSCALL_DEFINE1(s390_mmap2, struct mmap_arg_struct_emu31 __user *, arg) 449COMPAT_SYSCALL_DEFINE1(s390_mmap2, struct mmap_arg_struct_emu31 __user *, arg)
@@ -452,7 +452,7 @@ COMPAT_SYSCALL_DEFINE1(s390_mmap2, struct mmap_arg_struct_emu31 __user *, arg)
452 452
453 if (copy_from_user(&a, arg, sizeof(a))) 453 if (copy_from_user(&a, arg, sizeof(a)))
454 return -EFAULT; 454 return -EFAULT;
455 return sys_mmap_pgoff(a.addr, a.len, a.prot, a.flags, a.fd, a.offset); 455 return ksys_mmap_pgoff(a.addr, a.len, a.prot, a.flags, a.fd, a.offset);
456} 456}
457 457
458COMPAT_SYSCALL_DEFINE3(s390_read, unsigned int, fd, char __user *, buf, compat_size_t, count) 458COMPAT_SYSCALL_DEFINE3(s390_read, unsigned int, fd, char __user *, buf, compat_size_t, count)
diff --git a/arch/s390/kernel/sys_s390.c b/arch/s390/kernel/sys_s390.c
index 0090037ab148..31cefe0c28c0 100644
--- a/arch/s390/kernel/sys_s390.c
+++ b/arch/s390/kernel/sys_s390.c
@@ -53,7 +53,7 @@ SYSCALL_DEFINE1(mmap2, struct s390_mmap_arg_struct __user *, arg)
53 53
54 if (copy_from_user(&a, arg, sizeof(a))) 54 if (copy_from_user(&a, arg, sizeof(a)))
55 goto out; 55 goto out;
56 error = sys_mmap_pgoff(a.addr, a.len, a.prot, a.flags, a.fd, a.offset); 56 error = ksys_mmap_pgoff(a.addr, a.len, a.prot, a.flags, a.fd, a.offset);
57out: 57out:
58 return error; 58 return error;
59} 59}
diff --git a/arch/sh/kernel/sys_sh.c b/arch/sh/kernel/sys_sh.c
index 724911c59e7d..f8afc014e084 100644
--- a/arch/sh/kernel/sys_sh.c
+++ b/arch/sh/kernel/sys_sh.c
@@ -35,7 +35,7 @@ asmlinkage int old_mmap(unsigned long addr, unsigned long len,
35{ 35{
36 if (off & ~PAGE_MASK) 36 if (off & ~PAGE_MASK)
37 return -EINVAL; 37 return -EINVAL;
38 return sys_mmap_pgoff(addr, len, prot, flags, fd, off>>PAGE_SHIFT); 38 return ksys_mmap_pgoff(addr, len, prot, flags, fd, off>>PAGE_SHIFT);
39} 39}
40 40
41asmlinkage long sys_mmap2(unsigned long addr, unsigned long len, 41asmlinkage long sys_mmap2(unsigned long addr, unsigned long len,
@@ -51,7 +51,7 @@ asmlinkage long sys_mmap2(unsigned long addr, unsigned long len,
51 51
52 pgoff >>= PAGE_SHIFT - 12; 52 pgoff >>= PAGE_SHIFT - 12;
53 53
54 return sys_mmap_pgoff(addr, len, prot, flags, fd, pgoff); 54 return ksys_mmap_pgoff(addr, len, prot, flags, fd, pgoff);
55} 55}
56 56
57/* sys_cacheflush -- flush (part of) the processor cache. */ 57/* sys_cacheflush -- flush (part of) the processor cache. */
diff --git a/arch/sparc/kernel/sys_sparc_32.c b/arch/sparc/kernel/sys_sparc_32.c
index 990703b7cf4d..d980da4ffd7b 100644
--- a/arch/sparc/kernel/sys_sparc_32.c
+++ b/arch/sparc/kernel/sys_sparc_32.c
@@ -104,8 +104,8 @@ asmlinkage long sys_mmap2(unsigned long addr, unsigned long len,
104{ 104{
105 /* Make sure the shift for mmap2 is constant (12), no matter what PAGE_SIZE 105 /* Make sure the shift for mmap2 is constant (12), no matter what PAGE_SIZE
106 we have. */ 106 we have. */
107 return sys_mmap_pgoff(addr, len, prot, flags, fd, 107 return ksys_mmap_pgoff(addr, len, prot, flags, fd,
108 pgoff >> (PAGE_SHIFT - 12)); 108 pgoff >> (PAGE_SHIFT - 12));
109} 109}
110 110
111asmlinkage long sys_mmap(unsigned long addr, unsigned long len, 111asmlinkage long sys_mmap(unsigned long addr, unsigned long len,
@@ -113,7 +113,7 @@ asmlinkage long sys_mmap(unsigned long addr, unsigned long len,
113 unsigned long off) 113 unsigned long off)
114{ 114{
115 /* no alignment check? */ 115 /* no alignment check? */
116 return sys_mmap_pgoff(addr, len, prot, flags, fd, off >> PAGE_SHIFT); 116 return ksys_mmap_pgoff(addr, len, prot, flags, fd, off >> PAGE_SHIFT);
117} 117}
118 118
119long sparc_remap_file_pages(unsigned long start, unsigned long size, 119long sparc_remap_file_pages(unsigned long start, unsigned long size,
diff --git a/arch/sparc/kernel/sys_sparc_64.c b/arch/sparc/kernel/sys_sparc_64.c
index 55416db482ad..ebb84dc8a5a7 100644
--- a/arch/sparc/kernel/sys_sparc_64.c
+++ b/arch/sparc/kernel/sys_sparc_64.c
@@ -458,7 +458,7 @@ SYSCALL_DEFINE6(mmap, unsigned long, addr, unsigned long, len,
458 goto out; 458 goto out;
459 if (off & ~PAGE_MASK) 459 if (off & ~PAGE_MASK)
460 goto out; 460 goto out;
461 retval = sys_mmap_pgoff(addr, len, prot, flags, fd, off >> PAGE_SHIFT); 461 retval = ksys_mmap_pgoff(addr, len, prot, flags, fd, off >> PAGE_SHIFT);
462out: 462out:
463 return retval; 463 return retval;
464} 464}
diff --git a/arch/um/kernel/syscall.c b/arch/um/kernel/syscall.c
index 6258676bed85..35f7047bdebc 100644
--- a/arch/um/kernel/syscall.c
+++ b/arch/um/kernel/syscall.c
@@ -22,7 +22,7 @@ long old_mmap(unsigned long addr, unsigned long len,
22 if (offset & ~PAGE_MASK) 22 if (offset & ~PAGE_MASK)
23 goto out; 23 goto out;
24 24
25 err = sys_mmap_pgoff(addr, len, prot, flags, fd, offset >> PAGE_SHIFT); 25 err = ksys_mmap_pgoff(addr, len, prot, flags, fd, offset >> PAGE_SHIFT);
26 out: 26 out:
27 return err; 27 return err;
28} 28}
diff --git a/arch/x86/ia32/sys_ia32.c b/arch/x86/ia32/sys_ia32.c
index 401bd8ec9cf0..bff71b9ae3f5 100644
--- a/arch/x86/ia32/sys_ia32.c
+++ b/arch/x86/ia32/sys_ia32.c
@@ -166,7 +166,7 @@ COMPAT_SYSCALL_DEFINE1(x86_mmap, struct mmap_arg_struct32 __user *, arg)
166 if (a.offset & ~PAGE_MASK) 166 if (a.offset & ~PAGE_MASK)
167 return -EINVAL; 167 return -EINVAL;
168 168
169 return sys_mmap_pgoff(a.addr, a.len, a.prot, a.flags, a.fd, 169 return ksys_mmap_pgoff(a.addr, a.len, a.prot, a.flags, a.fd,
170 a.offset>>PAGE_SHIFT); 170 a.offset>>PAGE_SHIFT);
171} 171}
172 172
diff --git a/arch/x86/kernel/sys_x86_64.c b/arch/x86/kernel/sys_x86_64.c
index 676774b9bb8d..a3f15ed545b5 100644
--- a/arch/x86/kernel/sys_x86_64.c
+++ b/arch/x86/kernel/sys_x86_64.c
@@ -97,7 +97,7 @@ SYSCALL_DEFINE6(mmap, unsigned long, addr, unsigned long, len,
97 if (off & ~PAGE_MASK) 97 if (off & ~PAGE_MASK)
98 goto out; 98 goto out;
99 99
100 error = sys_mmap_pgoff(addr, len, prot, flags, fd, off >> PAGE_SHIFT); 100 error = ksys_mmap_pgoff(addr, len, prot, flags, fd, off >> PAGE_SHIFT);
101out: 101out:
102 return error; 102 return error;
103} 103}
diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h
index 466d408deefd..ec866c959e7d 100644
--- a/include/linux/syscalls.h
+++ b/include/linux/syscalls.h
@@ -979,6 +979,9 @@ static inline int ksys_fadvise64_64(int fd, loff_t offset, loff_t len,
979 return -EINVAL; 979 return -EINVAL;
980} 980}
981#endif 981#endif
982unsigned long ksys_mmap_pgoff(unsigned long addr, unsigned long len,
983 unsigned long prot, unsigned long flags,
984 unsigned long fd, unsigned long pgoff);
982 985
983/* 986/*
984 * The following kernel syscall equivalents are just wrappers to fs-internal 987 * The following kernel syscall equivalents are just wrappers to fs-internal
diff --git a/mm/mmap.c b/mm/mmap.c
index 9efdc021ad22..aa0dc8231c0d 100644
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -1488,9 +1488,9 @@ unsigned long do_mmap(struct file *file, unsigned long addr,
1488 return addr; 1488 return addr;
1489} 1489}
1490 1490
1491SYSCALL_DEFINE6(mmap_pgoff, unsigned long, addr, unsigned long, len, 1491unsigned long ksys_mmap_pgoff(unsigned long addr, unsigned long len,
1492 unsigned long, prot, unsigned long, flags, 1492 unsigned long prot, unsigned long flags,
1493 unsigned long, fd, unsigned long, pgoff) 1493 unsigned long fd, unsigned long pgoff)
1494{ 1494{
1495 struct file *file = NULL; 1495 struct file *file = NULL;
1496 unsigned long retval; 1496 unsigned long retval;
@@ -1537,6 +1537,13 @@ out_fput:
1537 return retval; 1537 return retval;
1538} 1538}
1539 1539
1540SYSCALL_DEFINE6(mmap_pgoff, unsigned long, addr, unsigned long, len,
1541 unsigned long, prot, unsigned long, flags,
1542 unsigned long, fd, unsigned long, pgoff)
1543{
1544 return ksys_mmap_pgoff(addr, len, prot, flags, fd, pgoff);
1545}
1546
1540#ifdef __ARCH_WANT_SYS_OLD_MMAP 1547#ifdef __ARCH_WANT_SYS_OLD_MMAP
1541struct mmap_arg_struct { 1548struct mmap_arg_struct {
1542 unsigned long addr; 1549 unsigned long addr;
@@ -1556,8 +1563,8 @@ SYSCALL_DEFINE1(old_mmap, struct mmap_arg_struct __user *, arg)
1556 if (offset_in_page(a.offset)) 1563 if (offset_in_page(a.offset))
1557 return -EINVAL; 1564 return -EINVAL;
1558 1565
1559 return sys_mmap_pgoff(a.addr, a.len, a.prot, a.flags, a.fd, 1566 return ksys_mmap_pgoff(a.addr, a.len, a.prot, a.flags, a.fd,
1560 a.offset >> PAGE_SHIFT); 1567 a.offset >> PAGE_SHIFT);
1561} 1568}
1562#endif /* __ARCH_WANT_SYS_OLD_MMAP */ 1569#endif /* __ARCH_WANT_SYS_OLD_MMAP */
1563 1570
diff --git a/mm/nommu.c b/mm/nommu.c
index ebb6e618dade..cad329629530 100644
--- a/mm/nommu.c
+++ b/mm/nommu.c
@@ -1423,9 +1423,9 @@ error_getting_region:
1423 return -ENOMEM; 1423 return -ENOMEM;
1424} 1424}
1425 1425
1426SYSCALL_DEFINE6(mmap_pgoff, unsigned long, addr, unsigned long, len, 1426unsigned long ksys_mmap_pgoff(unsigned long addr, unsigned long len,
1427 unsigned long, prot, unsigned long, flags, 1427 unsigned long prot, unsigned long flags,
1428 unsigned long, fd, unsigned long, pgoff) 1428 unsigned long fd, unsigned long pgoff)
1429{ 1429{
1430 struct file *file = NULL; 1430 struct file *file = NULL;
1431 unsigned long retval = -EBADF; 1431 unsigned long retval = -EBADF;
@@ -1447,6 +1447,13 @@ out:
1447 return retval; 1447 return retval;
1448} 1448}
1449 1449
1450SYSCALL_DEFINE6(mmap_pgoff, unsigned long, addr, unsigned long, len,
1451 unsigned long, prot, unsigned long, flags,
1452 unsigned long, fd, unsigned long, pgoff)
1453{
1454 return ksys_mmap_pgoff(addr, len, prot, flags, fd, pgoff);
1455}
1456
1450#ifdef __ARCH_WANT_SYS_OLD_MMAP 1457#ifdef __ARCH_WANT_SYS_OLD_MMAP
1451struct mmap_arg_struct { 1458struct mmap_arg_struct {
1452 unsigned long addr; 1459 unsigned long addr;
@@ -1466,8 +1473,8 @@ SYSCALL_DEFINE1(old_mmap, struct mmap_arg_struct __user *, arg)
1466 if (offset_in_page(a.offset)) 1473 if (offset_in_page(a.offset))
1467 return -EINVAL; 1474 return -EINVAL;
1468 1475
1469 return sys_mmap_pgoff(a.addr, a.len, a.prot, a.flags, a.fd, 1476 return ksys_mmap_pgoff(a.addr, a.len, a.prot, a.flags, a.fd,
1470 a.offset >> PAGE_SHIFT); 1477 a.offset >> PAGE_SHIFT);
1471} 1478}
1472#endif /* __ARCH_WANT_SYS_OLD_MMAP */ 1479#endif /* __ARCH_WANT_SYS_OLD_MMAP */
1473 1480