| From fecf6c32cc42bc1adce81cf4aedc1dbeaad93da4 Mon Sep 17 00:00:00 2001 |
| From: Thomas Gleixner <tglx@linutronix.de> |
| Date: Tue, 7 Jun 2011 11:25:03 +0200 |
| Subject: [PATCH 129/274] sched-cond-resched.patch |
| |
| Signed-off-by: Thomas Gleixner <tglx@linutronix.de> |
| --- |
| kernel/sched/core.c | 14 +++++++++++--- |
| 1 file changed, 11 insertions(+), 3 deletions(-) |
| |
| diff --git a/kernel/sched/core.c b/kernel/sched/core.c |
| index eb9ff52..e7bd476 100644 |
| --- a/kernel/sched/core.c |
| +++ b/kernel/sched/core.c |
| @@ -4691,9 +4691,17 @@ static inline int should_resched(void) |
| |
| static void __cond_resched(void) |
| { |
| - add_preempt_count(PREEMPT_ACTIVE); |
| - __schedule(); |
| - sub_preempt_count(PREEMPT_ACTIVE); |
| + do { |
| + add_preempt_count(PREEMPT_ACTIVE); |
| + __schedule(); |
| + sub_preempt_count(PREEMPT_ACTIVE); |
| + /* |
| + * Check again in case we missed a preemption |
| + * opportunity between schedule and now. |
| + */ |
| + barrier(); |
| + |
| + } while (need_resched()); |
| } |
| |
| int __sched _cond_resched(void) |
| -- |
| 1.7.10.4 |
| |