MM: facility for deferred munmap()

Conflicts:
	kernel/process.c
This commit is contained in:
Balazs Gerofi
2017-12-05 17:05:39 +09:00
parent 521e0dc707
commit 96b8b30516
2 changed files with 30 additions and 0 deletions

View File

@ -712,9 +712,35 @@ struct thread {
#define VM_RANGE_CACHE_SIZE 4
struct deferred_unmap_range {
struct process_vm *vm;
void *addr;
size_t len;
struct list_head list;
/*
* List operations as well as the refcnt are protected
* by vm->vm_deferred_unmap_lock.
*/
int refcnt;
};
static void init_deferred_unmap_range(
struct deferred_unmap_range *range,
struct process_vm *vm,
void *addr, size_t len)
{
range->vm = vm;
range->addr = addr;
range->len = len;
INIT_LIST_HEAD(&range->list);
range->refcnt = 0;
}
struct process_vm {
struct address_space *address_space;
struct rb_root vm_range_tree;
struct list_head vm_deferred_unmap_range_list;
struct vm_regions region;
struct process *proc; /* process that reside on the same page */
void *opt;
@ -724,6 +750,7 @@ struct process_vm {
ihk_spinlock_t page_table_lock;
ihk_spinlock_t memory_range_lock;
ihk_spinlock_t vm_deferred_unmap_lock;
// to protect the followings:
// 1. addition of process "memory range" (extend_process_region, add_process_memory_range)
// 2. addition of process page table (allocate_pages, update_process_page_table)

View File

@ -261,10 +261,13 @@ init_process_vm(struct process *owner, struct address_space *asp, struct process
int i;
ihk_mc_spinlock_init(&vm->memory_range_lock);
ihk_mc_spinlock_init(&vm->page_table_lock);
ihk_mc_spinlock_init(&vm->vm_deferred_unmap_lock);
ihk_atomic_set(&vm->refcount, 1);
vm->vm_range_tree = RB_ROOT;
vm->vm_range_numa_policy_tree = RB_ROOT;
INIT_LIST_HEAD(&vm->vm_deferred_unmap_range_list);
INIT_LIST_HEAD(&vm->vm_range_numa_policy_list);
vm->address_space = asp;
vm->proc = owner;
vm->exiting = 0;