aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/sched_stats.h
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/sched_stats.h')
-rw-r--r--kernel/sched_stats.h18
1 files changed, 13 insertions, 5 deletions
diff --git a/kernel/sched_stats.h b/kernel/sched_stats.h
index ee71bec1da66..5fcf0e184586 100644
--- a/kernel/sched_stats.h
+++ b/kernel/sched_stats.h
@@ -42,7 +42,8 @@ static int show_schedstat(struct seq_file *seq, void *v)
42 for_each_domain(cpu, sd) { 42 for_each_domain(cpu, sd) {
43 enum cpu_idle_type itype; 43 enum cpu_idle_type itype;
44 44
45 cpumask_scnprintf(mask_str, mask_len, sd->span); 45 cpumask_scnprintf(mask_str, mask_len,
46 sched_domain_span(sd));
46 seq_printf(seq, "domain%d %s", dcount++, mask_str); 47 seq_printf(seq, "domain%d %s", dcount++, mask_str);
47 for (itype = CPU_IDLE; itype < CPU_MAX_IDLE_TYPES; 48 for (itype = CPU_IDLE; itype < CPU_MAX_IDLE_TYPES;
48 itype++) { 49 itype++) {
@@ -298,9 +299,11 @@ static inline void account_group_user_time(struct task_struct *tsk,
298{ 299{
299 struct signal_struct *sig; 300 struct signal_struct *sig;
300 301
301 sig = tsk->signal; 302 /* tsk == current, ensure it is safe to use ->signal */
302 if (unlikely(!sig)) 303 if (unlikely(tsk->exit_state))
303 return; 304 return;
305
306 sig = tsk->signal;
304 if (sig->cputime.totals) { 307 if (sig->cputime.totals) {
305 struct task_cputime *times; 308 struct task_cputime *times;
306 309
@@ -325,9 +328,11 @@ static inline void account_group_system_time(struct task_struct *tsk,
325{ 328{
326 struct signal_struct *sig; 329 struct signal_struct *sig;
327 330
328 sig = tsk->signal; 331 /* tsk == current, ensure it is safe to use ->signal */
329 if (unlikely(!sig)) 332 if (unlikely(tsk->exit_state))
330 return; 333 return;
334
335 sig = tsk->signal;
331 if (sig->cputime.totals) { 336 if (sig->cputime.totals) {
332 struct task_cputime *times; 337 struct task_cputime *times;
333 338
@@ -353,8 +358,11 @@ static inline void account_group_exec_runtime(struct task_struct *tsk,
353 struct signal_struct *sig; 358 struct signal_struct *sig;
354 359
355 sig = tsk->signal; 360 sig = tsk->signal;
361 /* see __exit_signal()->task_rq_unlock_wait() */
362 barrier();
356 if (unlikely(!sig)) 363 if (unlikely(!sig))
357 return; 364 return;
365
358 if (sig->cputime.totals) { 366 if (sig->cputime.totals) {
359 struct task_cputime *times; 367 struct task_cputime *times;
360 368