There is no reason for thread_group_cputime() in wait_task_zombie(),
there must be no other threads.
This call was previously needed to collect the per-cpu data which
we do not have any longer.
Signed-off-by: Oleg Nesterov <[email protected]>
--- PTRACE/kernel/exit.c~2_WAIT_NO_TG 2009-06-15 22:26:02.000000000 +0200
+++ PTRACE/kernel/exit.c 2009-06-15 23:06:45.000000000 +0200
@@ -1192,7 +1192,6 @@ static int wait_task_zombie(struct wait_
if (likely(!traced) && likely(!task_detached(p))) {
struct signal_struct *psig;
struct signal_struct *sig;
- struct task_cputime cputime;
/*
* The resource counters for the group leader are in its
@@ -1208,23 +1207,20 @@ static int wait_task_zombie(struct wait_
* need to protect the access to parent->signal fields,
* as other threads in the parent group can be right
* here reaping other children at the same time.
- *
- * We use thread_group_cputime() to get times for the thread
- * group, which consolidates times for all threads in the
- * group including the group leader.
*/
- thread_group_cputime(p, &cputime);
spin_lock_irq(&p->real_parent->sighand->siglock);
psig = p->real_parent->signal;
sig = p->signal;
psig->cutime =
cputime_add(psig->cutime,
- cputime_add(cputime.utime,
- sig->cutime));
+ cputime_add(p->utime,
+ cputime_add(sig->utime,
+ sig->cutime)));
psig->cstime =
cputime_add(psig->cstime,
- cputime_add(cputime.stime,
- sig->cstime));
+ cputime_add(p->stime,
+ cputime_add(sig->stime,
+ sig->cstime)));
psig->cgtime =
cputime_add(psig->cgtime,
cputime_add(p->gtime,
Acked-by: Roland McGrath <[email protected]>
On Mon, 15 Jun 2009 23:26:51 +0200
Oleg Nesterov <[email protected]> wrote:
> There is no reason for thread_group_cputime() in wait_task_zombie(),
> there must be no other threads.
>
> This call was previously needed to collect the per-cpu data which
> we do not have any longer.
Is similar change for posix_cpu_timers_exit_group() correct and worthwhile ?
void posix_cpu_timers_exit_group(struct task_struct *tsk)
{
- struct task_cputime cputime;
+ struct signal_struct *const sig = tsk->signal;
- thread_group_cputimer(tsk, &cputime);
cleanup_timers(tsk->signal->cpu_timers,
- cputime.utime, cputime.stime, cputime.sum_exec_runtime);
+ cputime_add(tsk->utime, sig->utime),
+ cputime_add(tsk->stime, sig->stime),
+ tsk->se.sum_exec_runtime + sig->sum_sched_runtime);
}
Regards
Stanislaw
On 06/17, Stanislaw Gruszka wrote:
>
> On Mon, 15 Jun 2009 23:26:51 +0200
> Oleg Nesterov <[email protected]> wrote:
>
> > There is no reason for thread_group_cputime() in wait_task_zombie(),
> > there must be no other threads.
> >
> > This call was previously needed to collect the per-cpu data which
> > we do not have any longer.
>
> Is similar change for posix_cpu_timers_exit_group() correct and worthwhile ?
>
> void posix_cpu_timers_exit_group(struct task_struct *tsk)
> {
> - struct task_cputime cputime;
> + struct signal_struct *const sig = tsk->signal;
>
> - thread_group_cputimer(tsk, &cputime);
> cleanup_timers(tsk->signal->cpu_timers,
> - cputime.utime, cputime.stime, cputime.sum_exec_runtime);
> + cputime_add(tsk->utime, sig->utime),
> + cputime_add(tsk->stime, sig->stime),
> + tsk->se.sum_exec_runtime + sig->sum_sched_runtime);
> }
Yes, I think you are right.
And I think thread_group_cputimer() was never needed, it should be
thread_group_cputime(). Which in turn is not needed any longer too.
Please re-send with changelog/subject ?
Oleg.