From 03201b0f6d2b3f5ba9e4fe48be6b995ddd58a2d5 Mon Sep 17 00:00:00 2001 From: "Bjoern B. Brandenburg" Date: Tue, 8 Apr 2008 13:15:48 -0400 Subject: 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. --- include/litmus/litmus.h | 1 + include/litmus/rt_param.h | 3 +++ 2 files changed, 4 insertions(+) (limited to 'include') 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) #define make_np(t) do {t->rt_param.kernel_np++;} while(0); #define take_np(t) do {t->rt_param.kernel_np--;} while(0); +void srp_ceiling_block(void); #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 { /* is the task sleeping? */ unsigned int flags:8; + /* do we need to check for srp blocking? */ + unsigned int srp_non_recurse:1; + /* user controlled parameters */ struct rt_task task_params; -- cgit v1.2.2