mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
VM: add "vm_mmap()" helper function
This continues the theme started with vm_brk() and vm_munmap(): vm_mmap() does the same thing as do_mmap(), but additionally does the required VM locking. This uninlines (and rewrites it to be clearer) do_mmap(), which sadly duplicates it in mm/mmap.c and mm/nommu.c. But that way we don't have to export our internal do_mmap_pgoff() function. Some day we hopefully don't have to export do_mmap() either, if all modular users can become the simpler vm_mmap() instead. We're actually very close to that already, with the notable exception of the (broken) use in i810, and a couple of stragglers in binfmt_elf. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
a46ef99d80
commit
6be5ceb02e
15 changed files with 87 additions and 97 deletions
|
@ -958,10 +958,8 @@ static int load_elf_binary(struct linux_binprm *bprm, struct pt_regs *regs)
|
|||
and some applications "depend" upon this behavior.
|
||||
Since we do not have the power to recompile these, we
|
||||
emulate the SVr4 behavior. Sigh. */
|
||||
down_write(¤t->mm->mmap_sem);
|
||||
error = do_mmap(NULL, 0, PAGE_SIZE, PROT_READ | PROT_EXEC,
|
||||
error = vm_mmap(NULL, 0, PAGE_SIZE, PROT_READ | PROT_EXEC,
|
||||
MAP_FIXED | MAP_PRIVATE, 0);
|
||||
up_write(¤t->mm->mmap_sem);
|
||||
}
|
||||
|
||||
#ifdef ELF_PLAT_INIT
|
||||
|
@ -1046,8 +1044,7 @@ static int load_elf_library(struct file *file)
|
|||
eppnt++;
|
||||
|
||||
/* Now use mmap to map the library into memory. */
|
||||
down_write(¤t->mm->mmap_sem);
|
||||
error = do_mmap(file,
|
||||
error = vm_mmap(file,
|
||||
ELF_PAGESTART(eppnt->p_vaddr),
|
||||
(eppnt->p_filesz +
|
||||
ELF_PAGEOFFSET(eppnt->p_vaddr)),
|
||||
|
@ -1055,7 +1052,6 @@ static int load_elf_library(struct file *file)
|
|||
MAP_FIXED | MAP_PRIVATE | MAP_DENYWRITE,
|
||||
(eppnt->p_offset -
|
||||
ELF_PAGEOFFSET(eppnt->p_vaddr)));
|
||||
up_write(¤t->mm->mmap_sem);
|
||||
if (error != ELF_PAGESTART(eppnt->p_vaddr))
|
||||
goto out_free_ph;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue