aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/posix-cpu-timers.c
diff options
context:
space:
mode:
authorFrederic Weisbecker <fweisbec@gmail.com>2013-10-10 10:55:57 -0400
committerFrederic Weisbecker <fweisbec@gmail.com>2013-12-09 10:53:49 -0500
commitd430b9173a9a50a83e10d1c70baead3e625b522f (patch)
tree8648b3c7b737b00b233314074ca2b310958b08f4 /kernel/posix-cpu-timers.c
parent724a371396e8162cc883a40cd8e525dfc7e5f3ff (diff)
posix-timers: Remove dead process posix cpu timers caching
Now that we removed dead thread posix cpu timers caching, lets remove the dead process wide version. This caching is similar to the per thread version but it should be even more rare: * If the process id dead, we are not reading its timers status from a thread belonging to its group since they are all dead. So this caching only concern remote process timers reads. Now posix cpu timers using itimers or timer_settime() can't do remote process timers anyway so it's not even clear if there is actually a user for this caching. * Unlike per thread timers caching, this only applies to zombies targets. Buried targets' process wide timers return 0 values. But then again, timer_gettime() can't read remote process timers, so if the process is dead, there can't be any reader left anyway. Then again this caching seem to complicate the code for corner cases that are probably not worth it. So lets get rid of it. Also remove the sample snapshot on dying process timer that is now useless, as suggested by Kosaki. Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Ingo Molnar <mingo@kernel.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Oleg Nesterov <oleg@redhat.com> Cc: Kosaki Motohiro <kosaki.motohiro@jp.fujitsu.com> Cc: Andrew Morton <akpm@linux-foundation.org>
Diffstat (limited to 'kernel/posix-cpu-timers.c')
-rw-r--r--kernel/posix-cpu-timers.c35
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
456static 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
473static inline int expires_gt(cputime_t expires, cputime_t new_exp) 456static 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);