|
@@ -127,6 +127,7 @@ static void __exit_signal(struct task_struct *tsk)
|
|
* the signal_struct.
|
|
* the signal_struct.
|
|
*/
|
|
*/
|
|
task_cputime(tsk, &utime, &stime);
|
|
task_cputime(tsk, &utime, &stime);
|
|
|
|
+ write_seqlock(&sig->stats_lock);
|
|
sig->utime += utime;
|
|
sig->utime += utime;
|
|
sig->stime += stime;
|
|
sig->stime += stime;
|
|
sig->gtime += task_gtime(tsk);
|
|
sig->gtime += task_gtime(tsk);
|
|
@@ -140,6 +141,7 @@ static void __exit_signal(struct task_struct *tsk)
|
|
sig->sum_sched_runtime += tsk->se.sum_exec_runtime;
|
|
sig->sum_sched_runtime += tsk->se.sum_exec_runtime;
|
|
sig->nr_threads--;
|
|
sig->nr_threads--;
|
|
__unhash_process(tsk, group_dead);
|
|
__unhash_process(tsk, group_dead);
|
|
|
|
+ write_sequnlock(&sig->stats_lock);
|
|
|
|
|
|
/*
|
|
/*
|
|
* Do this under ->siglock, we can race with another thread
|
|
* Do this under ->siglock, we can race with another thread
|
|
@@ -1042,6 +1044,7 @@ static int wait_task_zombie(struct wait_opts *wo, struct task_struct *p)
|
|
spin_lock_irq(&p->real_parent->sighand->siglock);
|
|
spin_lock_irq(&p->real_parent->sighand->siglock);
|
|
psig = p->real_parent->signal;
|
|
psig = p->real_parent->signal;
|
|
sig = p->signal;
|
|
sig = p->signal;
|
|
|
|
+ write_seqlock(&psig->stats_lock);
|
|
psig->cutime += tgutime + sig->cutime;
|
|
psig->cutime += tgutime + sig->cutime;
|
|
psig->cstime += tgstime + sig->cstime;
|
|
psig->cstime += tgstime + sig->cstime;
|
|
psig->cgtime += task_gtime(p) + sig->gtime + sig->cgtime;
|
|
psig->cgtime += task_gtime(p) + sig->gtime + sig->cgtime;
|
|
@@ -1064,6 +1067,7 @@ static int wait_task_zombie(struct wait_opts *wo, struct task_struct *p)
|
|
psig->cmaxrss = maxrss;
|
|
psig->cmaxrss = maxrss;
|
|
task_io_accounting_add(&psig->ioac, &p->ioac);
|
|
task_io_accounting_add(&psig->ioac, &p->ioac);
|
|
task_io_accounting_add(&psig->ioac, &sig->ioac);
|
|
task_io_accounting_add(&psig->ioac, &sig->ioac);
|
|
|
|
+ write_sequnlock(&psig->stats_lock);
|
|
spin_unlock_irq(&p->real_parent->sighand->siglock);
|
|
spin_unlock_irq(&p->real_parent->sighand->siglock);
|
|
}
|
|
}
|
|
|
|
|