diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2011-06-07 09:25:03 (GMT) |
---|---|---|
committer | Scott Wood <scottwood@freescale.com> | 2015-02-13 22:20:32 (GMT) |
commit | 01046732fdd201580f3795edab789a74bd44aa9b (patch) | |
tree | 57c9c99668f7fe5eaf56c83cbaf8007941fe6abf /kernel/sched/core.c | |
parent | 6afb59e234ec3c4a5fc7eaf4099b296b988a61dc (diff) | |
download | linux-fsl-qoriq-01046732fdd201580f3795edab789a74bd44aa9b.tar.xz |
sched-cond-resched.patch
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'kernel/sched/core.c')
-rw-r--r-- | kernel/sched/core.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/kernel/sched/core.c b/kernel/sched/core.c index fac1bd3..5f1e7c6 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -3903,9 +3903,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) |