diff options
| -rw-r--r-- | kernel/posix-cpu-timers.c | 35 |
1 files changed, 1 insertions, 34 deletions
diff --git a/kernel/posix-cpu-timers.c b/kernel/posix-cpu-timers.c index 3b7df8653913..c5d1ef530268 100644 --- a/kernel/posix-cpu-timers.c +++ b/kernel/posix-cpu-timers.c | |||
| @@ -453,23 +453,6 @@ void posix_cpu_timers_exit_group(struct task_struct *tsk) | |||
| 453 | tsk->se.sum_exec_runtime + sig->sum_sched_runtime); | 453 | tsk->se.sum_exec_runtime + sig->sum_sched_runtime); |
| 454 | } | 454 | } |
| 455 | 455 | ||
| 456 | static void clear_dead_task(struct k_itimer *itimer, unsigned long long now) | ||
| 457 | { | ||
| 458 | struct cpu_timer_list *timer = &itimer->it.cpu; | ||
| 459 | |||
| 460 | /* | ||
| 461 | * That's all for this thread or process. | ||
| 462 | * We leave our residual in expires to be reported. | ||
| 463 | */ | ||
| 464 | put_task_struct(timer->task); | ||
| 465 | timer->task = NULL; | ||
| 466 | if (timer->expires < now) { | ||
| 467 | timer->expires = 0; | ||
| 468 | } else { | ||
| 469 | timer->expires -= now; | ||
| 470 | } | ||
| 471 | } | ||
| 472 | |||
| 473 | static inline int expires_gt(cputime_t expires, cputime_t new_exp) | 456 | static inline int expires_gt(cputime_t expires, cputime_t new_exp) |
| 474 | { | 457 | { |
| 475 | return expires == 0 || expires > new_exp; | 458 | return expires == 0 || expires > new_exp; |
| @@ -832,16 +815,6 @@ static void posix_cpu_timer_get(struct k_itimer *timer, struct itimerspec *itp) | |||
| 832 | goto dead; | 815 | goto dead; |
| 833 | } else { | 816 | } else { |
| 834 | cpu_timer_sample_group(timer->it_clock, p, &now); | 817 | cpu_timer_sample_group(timer->it_clock, p, &now); |
| 835 | if (unlikely(p->exit_state) && thread_group_empty(p)) { | ||
| 836 | read_unlock(&tasklist_lock); | ||
| 837 | /* | ||
| 838 | * We've noticed that the thread is dead, but | ||
| 839 | * not yet reaped. Take this opportunity to | ||
| 840 | * drop our task ref. | ||
| 841 | */ | ||
| 842 | clear_dead_task(timer, now); | ||
| 843 | goto dead; | ||
| 844 | } | ||
| 845 | } | 818 | } |
| 846 | read_unlock(&tasklist_lock); | 819 | read_unlock(&tasklist_lock); |
| 847 | } | 820 | } |
| @@ -1092,14 +1065,8 @@ void posix_cpu_timer_schedule(struct k_itimer *timer) | |||
| 1092 | read_unlock(&tasklist_lock); | 1065 | read_unlock(&tasklist_lock); |
| 1093 | goto out; | 1066 | goto out; |
| 1094 | } else if (unlikely(p->exit_state) && thread_group_empty(p)) { | 1067 | } else if (unlikely(p->exit_state) && thread_group_empty(p)) { |
| 1095 | /* | ||
| 1096 | * We've noticed that the thread is dead, but | ||
| 1097 | * not yet reaped. Take this opportunity to | ||
| 1098 | * drop our task ref. | ||
| 1099 | */ | ||
| 1100 | cpu_timer_sample_group(timer->it_clock, p, &now); | ||
| 1101 | clear_dead_task(timer, now); | ||
| 1102 | read_unlock(&tasklist_lock); | 1068 | read_unlock(&tasklist_lock); |
| 1069 | /* Optimizations: if the process is dying, no need to rearm */ | ||
| 1103 | goto out; | 1070 | goto out; |
| 1104 | } | 1071 | } |
| 1105 | spin_lock(&p->sighand->siglock); | 1072 | spin_lock(&p->sighand->siglock); |
