implement mmap(MAP_LOCKED)
This commit is contained in:
@ -28,6 +28,7 @@
|
|||||||
#define VR_REMOTE 0x200
|
#define VR_REMOTE 0x200
|
||||||
#define VR_DEMAND_PAGING 0x1000
|
#define VR_DEMAND_PAGING 0x1000
|
||||||
#define VR_PRIVATE 0x2000
|
#define VR_PRIVATE 0x2000
|
||||||
|
#define VR_LOCKED 0x4000
|
||||||
#define VR_PROT_NONE 0x00000000
|
#define VR_PROT_NONE 0x00000000
|
||||||
#define VR_PROT_READ 0x00010000
|
#define VR_PROT_READ 0x00010000
|
||||||
#define VR_PROT_WRITE 0x00020000
|
#define VR_PROT_WRITE 0x00020000
|
||||||
|
|||||||
@ -404,6 +404,7 @@ SYSCALL_DECLARE(mmap)
|
|||||||
| MAP_PRIVATE // 02
|
| MAP_PRIVATE // 02
|
||||||
| MAP_FIXED // 10
|
| MAP_FIXED // 10
|
||||||
| MAP_ANONYMOUS // 20
|
| MAP_ANONYMOUS // 20
|
||||||
|
| MAP_LOCKED // 2000
|
||||||
| MAP_POPULATE // 8000
|
| MAP_POPULATE // 8000
|
||||||
;
|
;
|
||||||
const int ignored_flags = 0
|
const int ignored_flags = 0
|
||||||
@ -420,7 +421,6 @@ SYSCALL_DECLARE(mmap)
|
|||||||
#endif /* ndef USE_NOCACHE_MMAP */
|
#endif /* ndef USE_NOCACHE_MMAP */
|
||||||
| MAP_GROWSDOWN // 0100
|
| MAP_GROWSDOWN // 0100
|
||||||
| MAP_EXECUTABLE // 1000
|
| MAP_EXECUTABLE // 1000
|
||||||
| MAP_LOCKED // 2000
|
|
||||||
| MAP_NONBLOCK // 00010000
|
| MAP_NONBLOCK // 00010000
|
||||||
| MAP_HUGETLB // 00040000
|
| MAP_HUGETLB // 00040000
|
||||||
;
|
;
|
||||||
@ -524,6 +524,7 @@ SYSCALL_DECLARE(mmap)
|
|||||||
vrflags = VR_NONE;
|
vrflags = VR_NONE;
|
||||||
vrflags |= PROT_TO_VR_FLAG(prot);
|
vrflags |= PROT_TO_VR_FLAG(prot);
|
||||||
vrflags |= (flags & MAP_PRIVATE)? VR_PRIVATE: 0;
|
vrflags |= (flags & MAP_PRIVATE)? VR_PRIVATE: 0;
|
||||||
|
vrflags |= (flags & MAP_LOCKED)? VR_LOCKED: 0;
|
||||||
if (flags & MAP_ANONYMOUS) {
|
if (flags & MAP_ANONYMOUS) {
|
||||||
if (0) {
|
if (0) {
|
||||||
/* dummy */
|
/* dummy */
|
||||||
@ -612,7 +613,7 @@ out:
|
|||||||
}
|
}
|
||||||
ihk_mc_spinlock_unlock_noirq(&proc->vm->memory_range_lock);
|
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);
|
error = populate_process_memory(proc, (void *)addr, len);
|
||||||
if (error) {
|
if (error) {
|
||||||
ekprintf("sys_mmap:populate_process_memory"
|
ekprintf("sys_mmap:populate_process_memory"
|
||||||
|
|||||||
Reference in New Issue
Block a user