diff options
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/sched.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/kernel/sched.c b/kernel/sched.c index 41a571806ce0..de440b220b4c 100644 --- a/kernel/sched.c +++ b/kernel/sched.c | |||
@@ -4456,9 +4456,9 @@ asmlinkage long sys_sched_yield(void) | |||
4456 | return 0; | 4456 | return 0; |
4457 | } | 4457 | } |
4458 | 4458 | ||
4459 | static inline int __resched_legal(void) | 4459 | static inline int __resched_legal(int expected_preempt_count) |
4460 | { | 4460 | { |
4461 | if (unlikely(preempt_count())) | 4461 | if (unlikely(preempt_count() != expected_preempt_count)) |
4462 | return 0; | 4462 | return 0; |
4463 | if (unlikely(system_state != SYSTEM_RUNNING)) | 4463 | if (unlikely(system_state != SYSTEM_RUNNING)) |
4464 | return 0; | 4464 | return 0; |
@@ -4484,7 +4484,7 @@ static void __cond_resched(void) | |||
4484 | 4484 | ||
4485 | int __sched cond_resched(void) | 4485 | int __sched cond_resched(void) |
4486 | { | 4486 | { |
4487 | if (need_resched() && __resched_legal()) { | 4487 | if (need_resched() && __resched_legal(0)) { |
4488 | __cond_resched(); | 4488 | __cond_resched(); |
4489 | return 1; | 4489 | return 1; |
4490 | } | 4490 | } |
@@ -4510,7 +4510,7 @@ int cond_resched_lock(spinlock_t *lock) | |||
4510 | ret = 1; | 4510 | ret = 1; |
4511 | spin_lock(lock); | 4511 | spin_lock(lock); |
4512 | } | 4512 | } |
4513 | if (need_resched() && __resched_legal()) { | 4513 | if (need_resched() && __resched_legal(1)) { |
4514 | spin_release(&lock->dep_map, 1, _THIS_IP_); | 4514 | spin_release(&lock->dep_map, 1, _THIS_IP_); |
4515 | _raw_spin_unlock(lock); | 4515 | _raw_spin_unlock(lock); |
4516 | preempt_enable_no_resched(); | 4516 | preempt_enable_no_resched(); |
@@ -4526,7 +4526,7 @@ int __sched cond_resched_softirq(void) | |||
4526 | { | 4526 | { |
4527 | BUG_ON(!in_softirq()); | 4527 | BUG_ON(!in_softirq()); |
4528 | 4528 | ||
4529 | if (need_resched() && __resched_legal()) { | 4529 | if (need_resched() && __resched_legal(0)) { |
4530 | raw_local_irq_disable(); | 4530 | raw_local_irq_disable(); |
4531 | _local_bh_enable(); | 4531 | _local_bh_enable(); |
4532 | raw_local_irq_enable(); | 4532 | raw_local_irq_enable(); |