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 /include | |
| 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 'include')
| -rw-r--r-- | include/litmus/litmus.h | 1 | ||||
| -rw-r--r-- | include/litmus/rt_param.h | 3 |
2 files changed, 4 insertions, 0 deletions
diff --git a/include/litmus/litmus.h b/include/litmus/litmus.h index 512efef341..8fc9f630c8 100644 --- a/include/litmus/litmus.h +++ b/include/litmus/litmus.h | |||
| @@ -200,5 +200,6 @@ static inline lt_t litmus_clock(void) | |||
| 200 | #define make_np(t) do {t->rt_param.kernel_np++;} while(0); | 200 | #define make_np(t) do {t->rt_param.kernel_np++;} while(0); |
| 201 | #define take_np(t) do {t->rt_param.kernel_np--;} while(0); | 201 | #define take_np(t) do {t->rt_param.kernel_np--;} while(0); |
| 202 | 202 | ||
| 203 | void srp_ceiling_block(void); | ||
| 203 | 204 | ||
| 204 | #endif | 205 | #endif |
diff --git a/include/litmus/rt_param.h b/include/litmus/rt_param.h index 118e8590fd..933c1961cb 100644 --- a/include/litmus/rt_param.h +++ b/include/litmus/rt_param.h | |||
| @@ -73,6 +73,9 @@ struct rt_param { | |||
| 73 | /* is the task sleeping? */ | 73 | /* is the task sleeping? */ |
| 74 | unsigned int flags:8; | 74 | unsigned int flags:8; |
| 75 | 75 | ||
| 76 | /* do we need to check for srp blocking? */ | ||
| 77 | unsigned int srp_non_recurse:1; | ||
| 78 | |||
| 76 | /* user controlled parameters */ | 79 | /* user controlled parameters */ |
| 77 | struct rt_task task_params; | 80 | struct rt_task task_params; |
| 78 | 81 | ||
