diff options
author | Frank Mayhar <fmayhar@google.com> | 2008-09-12 12:54:39 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-09-23 07:38:44 -0400 |
commit | bb34d92f643086d546b49cef680f6f305ed84414 (patch) | |
tree | 275887040c96971e133fa20d99517c1fcea76415 /kernel/fork.c | |
parent | 5ce73a4a5a4893a1aa4cdeed1b1a5a6de42c43b6 (diff) |
timers: fix itimer/many thread hang, v2
This is the second resubmission of the posix timer rework patch, posted
a few days ago.
This includes the changes from the previous resubmittion, which addressed
Oleg Nesterov's comments, removing the RCU stuff from the patch and
un-inlining the thread_group_cputime() function for SMP.
In addition, per Ingo Molnar it simplifies the UP code, consolidating much
of it with the SMP version and depending on lower-level SMP/UP handling to
take care of the differences.
It also cleans up some UP compile errors, moves the scheduler stats-related
macros into kernel/sched_stats.h, cleans up a merge error in
kernel/fork.c and has a few other minor fixes and cleanups as suggested
by Oleg and Ingo. Thanks for the review, guys.
Signed-off-by: Frank Mayhar <fmayhar@google.com>
Cc: Roland McGrath <roland@redhat.com>
Cc: Alexey Dobriyan <adobriyan@gmail.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'kernel/fork.c')
-rw-r--r-- | kernel/fork.c | 5 |
1 files changed, 1 insertions, 4 deletions
diff --git a/kernel/fork.c b/kernel/fork.c index 1181b9aac48e..021ae012cc75 100644 --- a/kernel/fork.c +++ b/kernel/fork.c | |||
@@ -791,7 +791,7 @@ static int copy_signal(unsigned long clone_flags, struct task_struct *tsk) | |||
791 | int ret; | 791 | int ret; |
792 | 792 | ||
793 | if (clone_flags & CLONE_THREAD) { | 793 | if (clone_flags & CLONE_THREAD) { |
794 | ret = thread_group_cputime_clone_thread(current, tsk); | 794 | ret = thread_group_cputime_clone_thread(current); |
795 | if (likely(!ret)) { | 795 | if (likely(!ret)) { |
796 | atomic_inc(¤t->signal->count); | 796 | atomic_inc(¤t->signal->count); |
797 | atomic_inc(¤t->signal->live); | 797 | atomic_inc(¤t->signal->live); |
@@ -834,9 +834,6 @@ static int copy_signal(unsigned long clone_flags, struct task_struct *tsk) | |||
834 | sig->min_flt = sig->maj_flt = sig->cmin_flt = sig->cmaj_flt = 0; | 834 | sig->min_flt = sig->maj_flt = sig->cmin_flt = sig->cmaj_flt = 0; |
835 | sig->inblock = sig->oublock = sig->cinblock = sig->coublock = 0; | 835 | sig->inblock = sig->oublock = sig->cinblock = sig->coublock = 0; |
836 | task_io_accounting_init(&sig->ioac); | 836 | task_io_accounting_init(&sig->ioac); |
837 | INIT_LIST_HEAD(&sig->cpu_timers[0]); | ||
838 | INIT_LIST_HEAD(&sig->cpu_timers[1]); | ||
839 | INIT_LIST_HEAD(&sig->cpu_timers[2]); | ||
840 | taskstats_tgid_init(sig); | 837 | taskstats_tgid_init(sig); |
841 | 838 | ||
842 | task_lock(current->group_leader); | 839 | task_lock(current->group_leader); |