Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

mm: mlock: add new mlock system call

With the refactored mlock code, introduce a new system call for mlock.
The new call will allow the user to specify what lock states are being
added. mlock2 is trivial at the moment, but a follow on patch will add a
new mlock state making it useful.

Signed-off-by: Eric B Munson <emunson@akamai.com>
Acked-by: Michal Hocko <mhocko@suse.com>
Acked-by: Vlastimil Babka <vbabka@suse.cz>
Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
Cc: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Stephen Rothwell <sfr@canb.auug.org.au>
Cc: Guenter Roeck <linux@roeck-us.net>
Cc: Jonathan Corbet <corbet@lwn.net>
Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Cc: Michael Kerrisk <mtk.manpages@gmail.com>
Cc: Ralf Baechle <ralf@linux-mips.org>
Cc: Shuah Khan <shuahkh@osg.samsung.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

authored by

Eric B Munson and committed by
Linus Torvalds
a8ca5d0e 1aab92ec

+16 -1
+1
arch/x86/entry/syscalls/syscall_32.tbl
··· 382 382 373 i386 shutdown sys_shutdown 383 383 374 i386 userfaultfd sys_userfaultfd 384 384 375 i386 membarrier sys_membarrier 385 + 376 i386 mlock2 sys_mlock2
+1
arch/x86/entry/syscalls/syscall_64.tbl
··· 331 331 322 64 execveat stub_execveat 332 332 323 common userfaultfd sys_userfaultfd 333 333 324 common membarrier sys_membarrier 334 + 325 common mlock2 sys_mlock2 334 335 335 336 # 336 337 # x32-specific system call numbers start at 512 to avoid cache impact
+2
include/linux/syscalls.h
··· 887 887 888 888 asmlinkage long sys_membarrier(int cmd, int flags); 889 889 890 + asmlinkage long sys_mlock2(unsigned long start, size_t len, int flags); 891 + 890 892 #endif
+3 -1
include/uapi/asm-generic/unistd.h
··· 713 713 __SYSCALL(__NR_userfaultfd, sys_userfaultfd) 714 714 #define __NR_membarrier 283 715 715 __SYSCALL(__NR_membarrier, sys_membarrier) 716 + #define __NR_mlock2 284 717 + __SYSCALL(__NR_mlock2, sys_mlock2) 716 718 717 719 #undef __NR_syscalls 718 - #define __NR_syscalls 284 720 + #define __NR_syscalls 285 719 721 720 722 /* 721 723 * All syscalls below here should go away really,
+1
kernel/sys_ni.c
··· 194 194 cond_syscall(sys_munlock); 195 195 cond_syscall(sys_mlockall); 196 196 cond_syscall(sys_munlockall); 197 + cond_syscall(sys_mlock2); 197 198 cond_syscall(sys_mincore); 198 199 cond_syscall(sys_madvise); 199 200 cond_syscall(sys_mremap);
+8
mm/mlock.c
··· 644 644 return do_mlock(start, len, VM_LOCKED); 645 645 } 646 646 647 + SYSCALL_DEFINE3(mlock2, unsigned long, start, size_t, len, int, flags) 648 + { 649 + if (flags) 650 + return -EINVAL; 651 + 652 + return do_mlock(start, len, VM_LOCKED); 653 + } 654 + 647 655 SYSCALL_DEFINE2(munlock, unsigned long, start, size_t, len) 648 656 { 649 657 int ret;