From f1488635864918e35f4ed16bc0ad5e76619614fc Mon Sep 17 00:00:00 2001 From: Balazs Gerofi Date: Thu, 7 Jun 2018 07:12:41 +0900 Subject: [PATCH] pager_req_map(): do not take mmap_sem if not needed --- executer/kernel/mcctrl/syscall.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/executer/kernel/mcctrl/syscall.c b/executer/kernel/mcctrl/syscall.c index 270fbc98..f06ec042 100644 --- a/executer/kernel/mcctrl/syscall.c +++ b/executer/kernel/mcctrl/syscall.c @@ -1673,20 +1673,22 @@ static int pager_req_map(ihk_os_t os, int fd, size_t len, off_t off, maxprot |= PROT_EXEC; } - down_write(¤t->mm->mmap_sem); + prot_and_flags = MAP_SHARED | + (prot_and_flags & (MAP_POPULATE | MAP_LOCKED)); + #define ANY_WHERE 0 if (prot_and_flags & MAP_LOCKED) prot_and_flags |= MAP_POPULATE; #if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0) + down_write(¤t->mm->mmap_sem); + va = do_mmap_pgoff(file, ANY_WHERE, len, maxprot, - MAP_SHARED | (prot_and_flags & (MAP_POPULATE | MAP_LOCKED)), pgoff); -#endif + prot_and_flags, pgoff); up_write(¤t->mm->mmap_sem); - -#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0) - va = vm_mmap(file, ANY_WHERE, len, maxprot, MAP_SHARED | - (prot_and_flags & (MAP_POPULATE | MAP_LOCKED)), pgoff << PAGE_SHIFT); +#else + va = vm_mmap(file, ANY_WHERE, len, maxprot, + prot_and_flags, pgoff << PAGE_SHIFT); #endif if (IS_ERR_VALUE(va)) {