aboutsummaryrefslogtreecommitdiffstats
path: root/include
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 /include
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 'include')
-rw-r--r--include/litmus/litmus.h1
-rw-r--r--include/litmus/rt_param.h3
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
203void 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