diff options
author | Ralf Baechle <ralf@linux-mips.org> | 1998-08-25 09:12:35 +0000 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 1998-08-25 09:12:35 +0000 |
commit | c7fc24dc4420057f103afe8fc64524ebc25c5d37 (patch) | |
tree | 3682407a599b8f9f03fc096298134cafba1c9b2f /mm/mlock.c | |
parent | 1d793fade8b063fde3cf275bf1a5c2d381292cd9 (diff) |
o Merge with Linux 2.1.116.
o New Newport console code.
o New G364 console code.
Diffstat (limited to 'mm/mlock.c')
-rw-r--r-- | mm/mlock.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/mm/mlock.c b/mm/mlock.c index 3a322f8a5..527443946 100644 --- a/mm/mlock.c +++ b/mm/mlock.c @@ -126,14 +126,7 @@ static int mlock_fixup(struct vm_area_struct * vma, if (!(newflags & VM_LOCKED)) pages = -pages; vma->vm_mm->locked_vm += pages; - - if (newflags & VM_LOCKED) - while (start < end) { - char c; - get_user(c,(char *) start); - __asm__ __volatile__("": :"r" (c)); - start += PAGE_SIZE; - } + make_pages_present(start, end); } return retval; } @@ -192,6 +185,7 @@ asmlinkage int sys_mlock(unsigned long start, size_t len) unsigned long lock_limit; int error = -ENOMEM; + down(¤t->mm->mmap_sem); lock_kernel(); len = (len + (start & ~PAGE_MASK) + ~PAGE_MASK) & PAGE_MASK; start &= PAGE_MASK; @@ -214,6 +208,7 @@ asmlinkage int sys_mlock(unsigned long start, size_t len) error = do_mlock(start, len, 1); out: unlock_kernel(); + up(¤t->mm->mmap_sem); return error; } @@ -221,11 +216,13 @@ asmlinkage int sys_munlock(unsigned long start, size_t len) { int ret; + down(¤t->mm->mmap_sem); lock_kernel(); len = (len + (start & ~PAGE_MASK) + ~PAGE_MASK) & PAGE_MASK; start &= PAGE_MASK; ret = do_mlock(start, len, 0); unlock_kernel(); + up(¤t->mm->mmap_sem); return ret; } @@ -263,6 +260,7 @@ asmlinkage int sys_mlockall(int flags) unsigned long lock_limit; int ret = -EINVAL; + down(¤t->mm->mmap_sem); lock_kernel(); if (!flags || (flags & ~(MCL_CURRENT | MCL_FUTURE))) goto out; @@ -282,6 +280,7 @@ asmlinkage int sys_mlockall(int flags) ret = do_mlockall(flags); out: unlock_kernel(); + up(¤t->mm->mmap_sem); return ret; } @@ -289,8 +288,10 @@ asmlinkage int sys_munlockall(void) { int ret; + down(¤t->mm->mmap_sem); lock_kernel(); ret = do_mlockall(0); unlock_kernel(); + up(¤t->mm->mmap_sem); return ret; } |