reserve_user_space(): mutual exclusion on mmap
This commit is contained in:
@@ -64,6 +64,8 @@ reserve_user_space(struct mcctrl_usrdata *usrdata, unsigned long *startp, unsign
|
|||||||
unsigned long start = 0L;
|
unsigned long start = 0L;
|
||||||
unsigned long end;
|
unsigned long end;
|
||||||
|
|
||||||
|
mutex_lock(&usrdata->reserve_lock);
|
||||||
|
|
||||||
#define DESIRED_USER_END 0x800000000000
|
#define DESIRED_USER_END 0x800000000000
|
||||||
#define GAP_FOR_MCEXEC 0x008000000000UL
|
#define GAP_FOR_MCEXEC 0x008000000000UL
|
||||||
end = DESIRED_USER_END;
|
end = DESIRED_USER_END;
|
||||||
@@ -81,6 +83,8 @@ reserve_user_space(struct mcctrl_usrdata *usrdata, unsigned long *startp, unsign
|
|||||||
up_write(¤t->mm->mmap_sem);
|
up_write(¤t->mm->mmap_sem);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
mutex_unlock(&usrdata->reserve_lock);
|
||||||
|
|
||||||
if (IS_ERR_VALUE(start)) {
|
if (IS_ERR_VALUE(start)) {
|
||||||
return start;
|
return start;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -289,6 +289,7 @@ int prepare_ikc_channels(ihk_os_t os)
|
|||||||
memcpy(&usrdata->listen_param2, &listen_param2, sizeof listen_param2);
|
memcpy(&usrdata->listen_param2, &listen_param2, sizeof listen_param2);
|
||||||
ihk_ikc_listen_port(os, &usrdata->listen_param2);
|
ihk_ikc_listen_port(os, &usrdata->listen_param2);
|
||||||
init_waitqueue_head(&usrdata->wq_procfs);
|
init_waitqueue_head(&usrdata->wq_procfs);
|
||||||
|
mutex_init(&usrdata->reserve_lock);
|
||||||
|
|
||||||
for (i = 0; i < MCCTRL_PER_PROC_DATA_HASH_SIZE; ++i) {
|
for (i = 0; i < MCCTRL_PER_PROC_DATA_HASH_SIZE; ++i) {
|
||||||
INIT_LIST_HEAD(&usrdata->per_proc_data_hash[i]);
|
INIT_LIST_HEAD(&usrdata->per_proc_data_hash[i]);
|
||||||
|
|||||||
@@ -283,6 +283,7 @@ struct mcctrl_usrdata {
|
|||||||
int base_cpu;
|
int base_cpu;
|
||||||
int job_pos;
|
int job_pos;
|
||||||
int mcctrl_dma_abort;
|
int mcctrl_dma_abort;
|
||||||
|
struct mutex reserve_lock;
|
||||||
unsigned long last_thread_exec;
|
unsigned long last_thread_exec;
|
||||||
wait_queue_head_t wq_procfs;
|
wait_queue_head_t wq_procfs;
|
||||||
struct list_head per_proc_data_hash[MCCTRL_PER_PROC_DATA_HASH_SIZE];
|
struct list_head per_proc_data_hash[MCCTRL_PER_PROC_DATA_HASH_SIZE];
|
||||||
|
|||||||
Reference in New Issue
Block a user