aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/exit.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/exit.c')
-rw-r--r--kernel/exit.c26
1 files changed, 15 insertions, 11 deletions
diff --git a/kernel/exit.c b/kernel/exit.c
index 3f45e3cf931d..6f50ef55a6f3 100644
--- a/kernel/exit.c
+++ b/kernel/exit.c
@@ -111,9 +111,9 @@ static void __exit_signal(struct task_struct *tsk)
111 * We won't ever get here for the group leader, since it 111 * We won't ever get here for the group leader, since it
112 * will have been the last reference on the signal_struct. 112 * will have been the last reference on the signal_struct.
113 */ 113 */
114 sig->utime = cputime_add(sig->utime, task_utime(tsk)); 114 sig->utime = cputime_add(sig->utime, tsk->utime);
115 sig->stime = cputime_add(sig->stime, task_stime(tsk)); 115 sig->stime = cputime_add(sig->stime, tsk->stime);
116 sig->gtime = cputime_add(sig->gtime, task_gtime(tsk)); 116 sig->gtime = cputime_add(sig->gtime, tsk->gtime);
117 sig->min_flt += tsk->min_flt; 117 sig->min_flt += tsk->min_flt;
118 sig->maj_flt += tsk->maj_flt; 118 sig->maj_flt += tsk->maj_flt;
119 sig->nvcsw += tsk->nvcsw; 119 sig->nvcsw += tsk->nvcsw;
@@ -971,7 +971,7 @@ NORET_TYPE void do_exit(long code)
971 exit_thread(); 971 exit_thread();
972 cgroup_exit(tsk, 1); 972 cgroup_exit(tsk, 1);
973 973
974 if (group_dead && tsk->signal->leader) 974 if (group_dead)
975 disassociate_ctty(1); 975 disassociate_ctty(1);
976 976
977 module_put(task_thread_info(tsk)->exec_domain->module); 977 module_put(task_thread_info(tsk)->exec_domain->module);
@@ -1009,7 +1009,7 @@ NORET_TYPE void do_exit(long code)
1009 tsk->flags |= PF_EXITPIDONE; 1009 tsk->flags |= PF_EXITPIDONE;
1010 1010
1011 if (tsk->io_context) 1011 if (tsk->io_context)
1012 exit_io_context(); 1012 exit_io_context(tsk);
1013 1013
1014 if (tsk->splice_pipe) 1014 if (tsk->splice_pipe)
1015 __free_pipe_info(tsk->splice_pipe); 1015 __free_pipe_info(tsk->splice_pipe);
@@ -1210,6 +1210,7 @@ static int wait_task_zombie(struct wait_opts *wo, struct task_struct *p)
1210 struct signal_struct *psig; 1210 struct signal_struct *psig;
1211 struct signal_struct *sig; 1211 struct signal_struct *sig;
1212 unsigned long maxrss; 1212 unsigned long maxrss;
1213 cputime_t tgutime, tgstime;
1213 1214
1214 /* 1215 /*
1215 * The resource counters for the group leader are in its 1216 * The resource counters for the group leader are in its
@@ -1225,20 +1226,23 @@ static int wait_task_zombie(struct wait_opts *wo, struct task_struct *p)
1225 * need to protect the access to parent->signal fields, 1226 * need to protect the access to parent->signal fields,
1226 * as other threads in the parent group can be right 1227 * as other threads in the parent group can be right
1227 * here reaping other children at the same time. 1228 * here reaping other children at the same time.
1229 *
1230 * We use thread_group_times() to get times for the thread
1231 * group, which consolidates times for all threads in the
1232 * group including the group leader.
1228 */ 1233 */
1234 thread_group_times(p, &tgutime, &tgstime);
1229 spin_lock_irq(&p->real_parent->sighand->siglock); 1235 spin_lock_irq(&p->real_parent->sighand->siglock);
1230 psig = p->real_parent->signal; 1236 psig = p->real_parent->signal;
1231 sig = p->signal; 1237 sig = p->signal;
1232 psig->cutime = 1238 psig->cutime =
1233 cputime_add(psig->cutime, 1239 cputime_add(psig->cutime,
1234 cputime_add(p->utime, 1240 cputime_add(tgutime,
1235 cputime_add(sig->utime, 1241 sig->cutime));
1236 sig->cutime)));
1237 psig->cstime = 1242 psig->cstime =
1238 cputime_add(psig->cstime, 1243 cputime_add(psig->cstime,
1239 cputime_add(p->stime, 1244 cputime_add(tgstime,
1240 cputime_add(sig->stime, 1245 sig->cstime));
1241 sig->cstime)));
1242 psig->cgtime = 1246 psig->cgtime =
1243 cputime_add(psig->cgtime, 1247 cputime_add(psig->cgtime,
1244 cputime_add(p->gtime, 1248 cputime_add(p->gtime,