diff options
author | Frederic Weisbecker <fweisbec@gmail.com> | 2009-07-16 09:44:29 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-07-18 09:51:38 -0400 |
commit | e7aaaa6934636d7a6cadd9e2a05250fbb6a34f65 (patch) | |
tree | 8eabe708f83346910eb9a6c539d85d7b8f29b396 | |
parent | 5304d5fc74a269cc6c3e70f9713684ca729abdf0 (diff) |
sched: Drop the need_resched() loop from cond_resched()
The schedule() function is a loop that reschedules the current
task while the TIF_NEED_RESCHED flag is set:
void schedule(void)
{
need_resched:
/* schedule code */
if (need_resched())
goto need_resched;
}
And cond_resched() repeat this loop:
do {
add_preempt_count(PREEMPT_ACTIVE);
schedule();
sub_preempt_count(PREEMPT_ACTIVE);
} while(need_resched());
This loop is needless because schedule() already did the check
and nothing can set TIF_NEED_RESCHED between schedule() exit
and the loop check in need_resched().
Then remove this needless loop.
Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
Acked-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
LKML-Reference: <1247725694-6082-1-git-send-email-fweisbec@gmail.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
-rw-r--r-- | kernel/sched.c | 8 |
1 files changed, 3 insertions, 5 deletions
diff --git a/kernel/sched.c b/kernel/sched.c index 03f7e3fd80b5..4c5ee843d57f 100644 --- a/kernel/sched.c +++ b/kernel/sched.c | |||
@@ -6618,11 +6618,9 @@ static void __cond_resched(void) | |||
6618 | * PREEMPT_ACTIVE, which could trigger a second | 6618 | * PREEMPT_ACTIVE, which could trigger a second |
6619 | * cond_resched() call. | 6619 | * cond_resched() call. |
6620 | */ | 6620 | */ |
6621 | do { | 6621 | add_preempt_count(PREEMPT_ACTIVE); |
6622 | add_preempt_count(PREEMPT_ACTIVE); | 6622 | schedule(); |
6623 | schedule(); | 6623 | sub_preempt_count(PREEMPT_ACTIVE); |
6624 | sub_preempt_count(PREEMPT_ACTIVE); | ||
6625 | } while (need_resched()); | ||
6626 | } | 6624 | } |
6627 | 6625 | ||
6628 | int __sched _cond_resched(void) | 6626 | int __sched _cond_resched(void) |