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.
Unified · Split
| @@ -382,3 +382,4 @@ · 381 unmodified lines | |||
| 382 | 373 i386 shutdown sys_shutdown | 382 | 373 i386 shutdown sys_shutdown |
| 383 | 374 i386 userfaultfd sys_userfaultfd | 383 | 374 i386 userfaultfd sys_userfaultfd |
| 384 | 375 i386 membarrier sys_membarrier | 384 | 375 i386 membarrier sys_membarrier |
| 385 | 376 i386 mlock2 sys_mlock2 | ||
| @@ -331,6 +331,7 @@ · 330 unmodified lines | |||
| 331 | 322 64 execveat stub_execveat | 331 | 322 64 execveat stub_execveat |
| 332 | 323 common userfaultfd sys_userfaultfd | 332 | 323 common userfaultfd sys_userfaultfd |
| 333 | 324 common membarrier sys_membarrier | 333 | 324 common membarrier sys_membarrier |
| 334 | 325 common mlock2 sys_mlock2 | ||
| 334 | 335 | ||
| 335 | # | 336 | # |
| 336 | # x32-specific system call numbers start at 512 to avoid cache impact | 337 | # x32-specific system call numbers start at 512 to avoid cache impact |
| @@ -887,4 +887,6 @@ asmlinkage long sys_execveat(int dfd, const char __user *filename, · 886 unmodified lines | |||
| 887 | 887 | ||
| 888 | asmlinkage long sys_membarrier(int cmd, int flags); | 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 | #endif | 892 | #endif |
| @@ -713,9 +713,11 @@ __SC_COMP(__NR_execveat, sys_execveat, compat_sys_execveat) · 712 unmodified lines | |||
| 713 | __SYSCALL(__NR_userfaultfd, sys_userfaultfd) | 713 | __SYSCALL(__NR_userfaultfd, sys_userfaultfd) |
| 714 | #define __NR_membarrier 283 | 714 | #define __NR_membarrier 283 |
| 715 | __SYSCALL(__NR_membarrier, sys_membarrier) | 715 | __SYSCALL(__NR_membarrier, sys_membarrier) |
| 716 | #define __NR_mlock2 284 | ||
| 717 | __SYSCALL(__NR_mlock2, sys_mlock2) | ||
| 716 | 718 | ||
| 717 | #undef __NR_syscalls | 719 | #undef __NR_syscalls |
| 718 | #define __NR_syscalls 284 | 720 | #define __NR_syscalls 285 |
| 719 | 721 | ||
| 720 | /* | 722 | /* |
| 721 | * All syscalls below here should go away really, | 723 | * All syscalls below here should go away really, |
| @@ -194,6 +194,7 @@ cond_syscall(sys_mlock); · 193 unmodified lines | |||
| 194 | cond_syscall(sys_munlock); | 194 | cond_syscall(sys_munlock); |
| 195 | cond_syscall(sys_mlockall); | 195 | cond_syscall(sys_mlockall); |
| 196 | cond_syscall(sys_munlockall); | 196 | cond_syscall(sys_munlockall); |
| 197 | cond_syscall(sys_mlock2); | ||
| 197 | cond_syscall(sys_mincore); | 198 | cond_syscall(sys_mincore); |
| 198 | cond_syscall(sys_madvise); | 199 | cond_syscall(sys_madvise); |
| 199 | cond_syscall(sys_mremap); | 200 | cond_syscall(sys_mremap); |
| @@ -644,6 +644,14 @@ SYSCALL_DEFINE2(mlock, unsigned long, start, size_t, len) · 643 unmodified lines | |||
| 644 | return do_mlock(start, len, VM_LOCKED); | 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 | SYSCALL_DEFINE2(munlock, unsigned long, start, size_t, len) | 655 | SYSCALL_DEFINE2(munlock, unsigned long, start, size_t, len) |
| 648 | { | 656 | { |
| 649 | int ret; | 657 | int ret; |