diff --git a/kernel/include/process.h b/kernel/include/process.h index c3ffd457..41a25e7c 100644 --- a/kernel/include/process.h +++ b/kernel/include/process.h @@ -28,6 +28,7 @@ #define VR_REMOTE 0x200 #define VR_DEMAND_PAGING 0x1000 #define VR_PRIVATE 0x2000 +#define VR_LOCKED 0x4000 #define VR_PROT_NONE 0x00000000 #define VR_PROT_READ 0x00010000 #define VR_PROT_WRITE 0x00020000 diff --git a/kernel/syscall.c b/kernel/syscall.c index 7c38a89b..5a4dfb74 100644 --- a/kernel/syscall.c +++ b/kernel/syscall.c @@ -404,6 +404,7 @@ SYSCALL_DECLARE(mmap) | MAP_PRIVATE // 02 | MAP_FIXED // 10 | MAP_ANONYMOUS // 20 + | MAP_LOCKED // 2000 | MAP_POPULATE // 8000 ; const int ignored_flags = 0 @@ -420,7 +421,6 @@ SYSCALL_DECLARE(mmap) #endif /* ndef USE_NOCACHE_MMAP */ | MAP_GROWSDOWN // 0100 | MAP_EXECUTABLE // 1000 - | MAP_LOCKED // 2000 | MAP_NONBLOCK // 00010000 | MAP_HUGETLB // 00040000 ; @@ -524,6 +524,7 @@ SYSCALL_DECLARE(mmap) vrflags = VR_NONE; vrflags |= PROT_TO_VR_FLAG(prot); vrflags |= (flags & MAP_PRIVATE)? VR_PRIVATE: 0; + vrflags |= (flags & MAP_LOCKED)? VR_LOCKED: 0; if (flags & MAP_ANONYMOUS) { if (0) { /* dummy */ @@ -612,7 +613,7 @@ out: } ihk_mc_spinlock_unlock_noirq(&proc->vm->memory_range_lock); - if (!error && (flags & MAP_POPULATE)) { + if (!error && (flags & (MAP_POPULATE | MAP_LOCKED))) { error = populate_process_memory(proc, (void *)addr, len); if (error) { ekprintf("sys_mmap:populate_process_memory"