diff options
Diffstat (limited to 'kernel/fork.c')
| -rw-r--r-- | kernel/fork.c | 8 | 
1 files changed, 7 insertions, 1 deletions
diff --git a/kernel/fork.c b/kernel/fork.c index 997ac1d584f7..7377f414f3ce 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -229,7 +229,7 @@ static inline void free_thread_stack(struct task_struct *tsk)  		}  		local_irq_restore(flags); -		vfree(tsk->stack); +		vfree_atomic(tsk->stack);  		return;  	}  #endif @@ -354,6 +354,8 @@ void free_task(struct task_struct *tsk)  	ftrace_graph_exit_task(tsk);  	put_seccomp_filter(tsk);  	arch_release_task_struct(tsk); +	if (tsk->flags & PF_KTHREAD) +		free_kthread_struct(tsk);  	free_task_struct(tsk);  }  EXPORT_SYMBOL(free_task); @@ -1345,8 +1347,10 @@ static int copy_signal(unsigned long clone_flags, struct task_struct *tsk)  	seqlock_init(&sig->stats_lock);  	prev_cputime_init(&sig->prev_cputime); +#ifdef CONFIG_POSIX_TIMERS  	hrtimer_init(&sig->real_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);  	sig->real_timer.function = it_real_fn; +#endif  	task_lock(current->group_leader);  	memcpy(sig->rlim, current->signal->rlim, sizeof sig->rlim); @@ -1551,7 +1555,9 @@ static __latent_entropy struct task_struct *copy_process(  	init_sigpending(&p->pending);  	p->utime = p->stime = p->gtime = 0; +#ifdef CONFIG_ARCH_HAS_SCALED_CPUTIME  	p->utimescaled = p->stimescaled = 0; +#endif  	prev_cputime_init(&p->prev_cputime);  #ifdef CONFIG_VIRT_CPU_ACCOUNTING_GEN  |