aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
authorBjoern B. Brandenburg <bbb@cs.unc.edu>2008-04-08 13:15:48 -0400
committerBjoern B. Brandenburg <bbb@cs.unc.edu>2008-05-01 12:03:10 -0400
commit03201b0f6d2b3f5ba9e4fe48be6b995ddd58a2d5 (patch)
tree21ec5e6d3ac6f551fa6e570735daa62d6940ba31 /kernel
parent7ff99e881f4c237e817f51b273c8eeb23660e0e8 (diff)
SRP: improve robustness
The SRP implementation did not correctly address various suspension-related scenarios correctly. Now the need for SRP blocking is tested on each scheduling event. This ensures mutual exclusion under the SRP even in the face of unexpected suspensions, for example due to IO.
Diffstat (limited to 'kernel')
-rw-r--r--kernel/sched.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/kernel/sched.c b/kernel/sched.c
index 5d31bc9d56..00097dea89 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -3688,6 +3688,8 @@ need_resched_nonpreemptible:
3688 preempt_enable_no_resched(); 3688 preempt_enable_no_resched();
3689 if (unlikely(test_thread_flag(TIF_NEED_RESCHED))) 3689 if (unlikely(test_thread_flag(TIF_NEED_RESCHED)))
3690 goto need_resched; 3690 goto need_resched;
3691 if (srp_active())
3692 srp_ceiling_block();
3691} 3693}
3692EXPORT_SYMBOL(schedule); 3694EXPORT_SYMBOL(schedule);
3693 3695