diff options
| author | Bjoern B. Brandenburg <bbb@cs.unc.edu> | 2008-04-08 13:15:48 -0400 |
|---|---|---|
| committer | Bjoern B. Brandenburg <bbb@cs.unc.edu> | 2008-05-01 12:03:10 -0400 |
| commit | 03201b0f6d2b3f5ba9e4fe48be6b995ddd58a2d5 (patch) | |
| tree | 21ec5e6d3ac6f551fa6e570735daa62d6940ba31 /kernel | |
| parent | 7ff99e881f4c237e817f51b273c8eeb23660e0e8 (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.c | 2 |
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 | } |
| 3692 | EXPORT_SYMBOL(schedule); | 3694 | EXPORT_SYMBOL(schedule); |
| 3693 | 3695 | ||
