diff options
author | Kirill Tkhai <tkhai@yandex.ru> | 2013-01-30 07:50:36 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2013-01-31 04:31:13 -0500 |
commit | fc79e240be5aa379dd36a62158be5a5ee0e4aec7 (patch) | |
tree | 84e29ffa57509f586aff6a31ed0b0461f830fdaa /kernel/sched/rt.c | |
parent | 62188451f0d63add7ad0cd2a1ae269d600c1663d (diff) |
sched/rt: Do not account zero delta_exec in update_curr_rt()
There are several places of consecutive calls of
dequeue_task_rt() and put_prev_task_rt() in the scheduler.
For example, function rt_mutex_setprio() does it.
The both calls lead to update_curr_rt(), the second of it
receives zeroed delta_exec. The only effective action in this
case is call of sched_rt_avg_update(), which can change
rq->age_stamp and rq->rt_avg. But it is possible in case of
""floating"" rq->clock. This fact is not reasonable to be
accounted. Another actions do nothing.
Signed-off-by: Kirill V Tkhai <tkhai@yandex.ru>
Acked-by: Steven Rostedt <rostedt@goodmis.org>
Cc: Peter Zijlstra <peterz@infradead.org>
CC: linux-rt-users <linux-rt-users@vger.kernel.org>
Link: http://lkml.kernel.org/r/931541359550236@web1g.yandex.ru
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'kernel/sched/rt.c')
-rw-r--r-- | kernel/sched/rt.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c index 2f69ca997826..94abca4d9cf5 100644 --- a/kernel/sched/rt.c +++ b/kernel/sched/rt.c | |||
@@ -925,8 +925,8 @@ static void update_curr_rt(struct rq *rq) | |||
925 | return; | 925 | return; |
926 | 926 | ||
927 | delta_exec = rq->clock_task - curr->se.exec_start; | 927 | delta_exec = rq->clock_task - curr->se.exec_start; |
928 | if (unlikely((s64)delta_exec < 0)) | 928 | if (unlikely((s64)delta_exec <= 0)) |
929 | delta_exec = 0; | 929 | return; |
930 | 930 | ||
931 | schedstat_set(curr->se.statistics.exec_max, | 931 | schedstat_set(curr->se.statistics.exec_max, |
932 | max(curr->se.statistics.exec_max, delta_exec)); | 932 | max(curr->se.statistics.exec_max, delta_exec)); |