* [PATCH 1/2] sched_exit: fix parent->time_slice calculation
@ 2006-06-23 3:17 Oleg Nesterov
0 siblings, 0 replies; only message in thread
From: Oleg Nesterov @ 2006-06-23 3:17 UTC (permalink / raw)
To: Ingo Molnar; +Cc: Andrew Morton, linux-kernel
sched_exit:
if (parent->time_slice > task_timeslice(p)))
parent->time_slice = task_timeslice(p)
I think it should use task_timeslice(parent) instead.
The patch looks complicated, but it is not. It just caches the value
of 'p->parent'.
Signed-off-by: Oleg Nesterov <oleg@tv-sign.ru>
--- 2.6.17-rc6/kernel/sched.c~SCEX 2006-06-22 06:16:05.000000000 +0400
+++ 2.6.17-rc6/kernel/sched.c 2006-06-23 04:48:48.000000000 +0400
@@ -1479,6 +1479,7 @@ void fastcall wake_up_new_task(task_t *p
*/
void fastcall sched_exit(task_t *p)
{
+ task_t *parent = p->parent;
unsigned long flags;
runqueue_t *rq;
@@ -1486,14 +1487,14 @@ void fastcall sched_exit(task_t *p)
* If the child was a (relative-) CPU hog then decrease
* the sleep_avg of the parent as well.
*/
- rq = task_rq_lock(p->parent, &flags);
- if (p->first_time_slice && task_cpu(p) == task_cpu(p->parent)) {
- p->parent->time_slice += p->time_slice;
- if (unlikely(p->parent->time_slice > task_timeslice(p)))
- p->parent->time_slice = task_timeslice(p);
+ rq = task_rq_lock(parent, &flags);
+ if (p->first_time_slice && task_cpu(p) == task_cpu(parent)) {
+ parent->time_slice += p->time_slice;
+ if (unlikely(parent->time_slice > task_timeslice(parent)))
+ parent->time_slice = task_timeslice(parent);
}
- if (p->sleep_avg < p->parent->sleep_avg)
- p->parent->sleep_avg = p->parent->sleep_avg /
+ if (p->sleep_avg < parent->sleep_avg)
+ parent->sleep_avg = parent->sleep_avg /
(EXIT_WEIGHT + 1) * EXIT_WEIGHT + p->sleep_avg /
(EXIT_WEIGHT + 1);
task_rq_unlock(rq, &flags);
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2006-06-22 23:17 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-06-23 3:17 [PATCH 1/2] sched_exit: fix parent->time_slice calculation Oleg Nesterov
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.