diff options
author | Dominik Brodowski <linux@dominikbrodowski.net> | 2018-03-11 06:34:46 -0400 |
---|---|---|
committer | Dominik Brodowski <linux@dominikbrodowski.net> | 2018-04-02 14:16:11 -0400 |
commit | a90f590a1bee36fc2129cfb38ceec24a555bb12d (patch) | |
tree | 42e18715d5070d0f428464ba40b4ed136363f6e2 | |
parent | 9d5b7c956b09daab955fb2a42447d5d89ff15093 (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.c | 2 | ||||
-rw-r--r-- | arch/arm64/kernel/sys.c | 2 | ||||
-rw-r--r-- | arch/ia64/kernel/sys_ia64.c | 4 | ||||
-rw-r--r-- | arch/m68k/kernel/sys_m68k.c | 2 | ||||
-rw-r--r-- | arch/microblaze/kernel/sys_microblaze.c | 6 | ||||
-rw-r--r-- | arch/mips/kernel/linux32.c | 4 | ||||
-rw-r--r-- | arch/mips/kernel/syscall.c | 6 | ||||
-rw-r--r-- | arch/parisc/kernel/sys_parisc.c | 6 | ||||
-rw-r--r-- | arch/powerpc/kernel/syscalls.c | 2 | ||||
-rw-r--r-- | arch/riscv/kernel/sys_riscv.c | 4 | ||||
-rw-r--r-- | arch/s390/kernel/compat_linux.c | 6 | ||||
-rw-r--r-- | arch/s390/kernel/sys_s390.c | 2 | ||||
-rw-r--r-- | arch/sh/kernel/sys_sh.c | 4 | ||||
-rw-r--r-- | arch/sparc/kernel/sys_sparc_32.c | 6 | ||||
-rw-r--r-- | arch/sparc/kernel/sys_sparc_64.c | 2 | ||||
-rw-r--r-- | arch/um/kernel/syscall.c | 2 | ||||
-rw-r--r-- | arch/x86/ia32/sys_ia32.c | 2 | ||||
-rw-r--r-- | arch/x86/kernel/sys_x86_64.c | 2 | ||||
-rw-r--r-- | include/linux/syscalls.h | 3 | ||||
-rw-r--r-- | mm/mmap.c | 17 | ||||
-rw-r--r-- | mm/nommu.c | 17 |
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 | ||
40 | SYSCALL_DEFINE1(arm64_personality, unsigned int, personality) | 40 | SYSCALL_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, | |||
139 | asmlinkage unsigned long | 139 | asmlinkage unsigned long |
140 | sys_mmap2 (unsigned long addr, unsigned long len, int prot, int flags, int fd, long pgoff) | 140 | sys_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 | ||
46 | SYSCALL_DEFINE6(mmap2, unsigned long, addr, unsigned long, len, | 46 | SYSCALL_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 | ||
69 | SYSCALL_DEFINE6(mips_mmap2, unsigned long, addr, unsigned long, len, | 70 | SYSCALL_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 | ||
79 | save_static_function(sys_fork); | 81 | save_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 | ||
277 | asmlinkage unsigned long sys_mmap(unsigned long addr, unsigned long len, | 277 | asmlinkage 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); |
61 | out: | 61 | out: |
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 | ||
449 | COMPAT_SYSCALL_DEFINE1(s390_mmap2, struct mmap_arg_struct_emu31 __user *, arg) | 449 | COMPAT_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 | ||
458 | COMPAT_SYSCALL_DEFINE3(s390_read, unsigned int, fd, char __user *, buf, compat_size_t, count) | 458 | COMPAT_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); |
57 | out: | 57 | out: |
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 | ||
41 | asmlinkage long sys_mmap2(unsigned long addr, unsigned long len, | 41 | asmlinkage 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 | ||
111 | asmlinkage long sys_mmap(unsigned long addr, unsigned long len, | 111 | asmlinkage 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 | ||
119 | long sparc_remap_file_pages(unsigned long start, unsigned long size, | 119 | long 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); |
462 | out: | 462 | out: |
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); |
101 | out: | 101 | out: |
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 |
982 | unsigned 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 |
@@ -1488,9 +1488,9 @@ unsigned long do_mmap(struct file *file, unsigned long addr, | |||
1488 | return addr; | 1488 | return addr; |
1489 | } | 1489 | } |
1490 | 1490 | ||
1491 | SYSCALL_DEFINE6(mmap_pgoff, unsigned long, addr, unsigned long, len, | 1491 | unsigned 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 | ||
1540 | SYSCALL_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 |
1541 | struct mmap_arg_struct { | 1548 | struct 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 | ||
1426 | SYSCALL_DEFINE6(mmap_pgoff, unsigned long, addr, unsigned long, len, | 1426 | unsigned 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 | ||
1450 | SYSCALL_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 |
1451 | struct mmap_arg_struct { | 1458 | struct 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 | ||