check CLONE_VM in clone_flags for determining whether clone()/fork() is requested
This commit is contained in:
@ -145,9 +145,22 @@ struct process *clone_process(struct process *org, unsigned long pc,
|
||||
|
||||
proc->rlimit_stack = org->rlimit_stack;
|
||||
|
||||
/* TODO: do this check properly!
|
||||
* fork() */
|
||||
if (clone_flags == 0x1200011) {
|
||||
/* clone() */
|
||||
if (clone_flags & CLONE_VM) {
|
||||
ihk_atomic_inc(&org->vm->refcount);
|
||||
proc->vm = org->vm;
|
||||
|
||||
proc->sighandler = org->sighandler;
|
||||
ihk_atomic_inc(&org->sighandler->use);
|
||||
|
||||
proc->sigshared = org->sigshared;
|
||||
ihk_atomic_inc(&org->sigshared->use);
|
||||
|
||||
ihk_mc_spinlock_init(&proc->sigpendinglock);
|
||||
INIT_LIST_HEAD(&proc->sigpending);
|
||||
}
|
||||
/* fork() */
|
||||
else {
|
||||
dkprintf("fork(): sighandler\n");
|
||||
proc->sighandler = kmalloc(sizeof(struct sig_handler),
|
||||
IHK_MC_AP_NOWAIT);
|
||||
@ -190,20 +203,6 @@ struct process *clone_process(struct process *org, unsigned long pc,
|
||||
|
||||
dkprintf("fork(): copy_user_ranges() OK\n");
|
||||
}
|
||||
/* clone() */
|
||||
else {
|
||||
ihk_atomic_inc(&org->vm->refcount);
|
||||
proc->vm = org->vm;
|
||||
|
||||
proc->sighandler = org->sighandler;
|
||||
ihk_atomic_inc(&org->sighandler->use);
|
||||
|
||||
proc->sigshared = org->sigshared;
|
||||
ihk_atomic_inc(&org->sigshared->use);
|
||||
|
||||
ihk_mc_spinlock_init(&proc->sigpendinglock);
|
||||
INIT_LIST_HEAD(&proc->sigpending);
|
||||
}
|
||||
|
||||
ihk_mc_spinlock_init(&proc->spin_sleep_lock);
|
||||
proc->spin_sleep = 0;
|
||||
|
||||
@ -979,9 +979,11 @@ SYSCALL_DECLARE(clone)
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
if (clone_flags & CLONE_VM) {
|
||||
new->pid = cpu_local_var(current)->pid;
|
||||
}
|
||||
/* fork() a new process on the host */
|
||||
/* TODO: do this check properly! */
|
||||
if (clone_flags == 0x1200011) {
|
||||
else {
|
||||
request1.number = __NR_fork;
|
||||
new->pid = do_syscall(&request1, &ctx1, ihk_mc_get_processor_id(), 0);
|
||||
|
||||
@ -1009,9 +1011,6 @@ SYSCALL_DECLARE(clone)
|
||||
kprintf("ERROR: clearing PTEs in host process\n");
|
||||
}
|
||||
}
|
||||
else {
|
||||
new->pid = cpu_local_var(current)->pid;
|
||||
}
|
||||
|
||||
request1.number = __NR_gettid;
|
||||
new->tid = do_syscall(&request1, &ctx1, cpuid, new->pid);
|
||||
|
||||
Reference in New Issue
Block a user