aboutsummaryrefslogtreecommitdiffstats
path: root/litmus/budget.c
diff options
context:
space:
mode:
authorGlenn Elliott <gelliott@cs.unc.edu>2013-04-09 15:02:28 -0400
committerGlenn Elliott <gelliott@cs.unc.edu>2013-04-09 16:04:07 -0400
commit202a0410c911d9f9522d76db6405b0f6001aed5b (patch)
tree9f1372be13bfe6264e0bd8214e6a4153f59813fb /litmus/budget.c
parent63a043514200704c9f2f288075bf4e9b268f57bd (diff)
IKGLP virtual unlock and MAJOR BUG FIX
Fixed a major bug where a scheduled task with and exhausted budget does not recheck its priority inheritance upon deadline postponement. Postponment may enable priority inheritance relations, as the priority of the lock holder decreases.
Diffstat (limited to 'litmus/budget.c')
-rw-r--r--litmus/budget.c9
1 files changed, 2 insertions, 7 deletions
diff --git a/litmus/budget.c b/litmus/budget.c
index aa254349a85e..f7d690c77226 100644
--- a/litmus/budget.c
+++ b/litmus/budget.c
@@ -183,7 +183,8 @@ void sobliv_on_blocked(struct task_struct* t)
183 * trigger another exhaustion signal since signals are controled by 183 * trigger another exhaustion signal since signals are controled by
184 * BTF_SIG_BUDGET_SENT. */ 184 * BTF_SIG_BUDGET_SENT. */
185 int exhausted = bt_flag_test_and_clear(t, BTF_BUDGET_EXHAUSTED); 185 int exhausted = bt_flag_test_and_clear(t, BTF_BUDGET_EXHAUSTED);
186 BUG_ON(!exhausted); 186 //BUG_ON(!exhausted);
187 WARN_ON(!exhausted);
187 188
188 TRACE_TASK(t, "budget timer not armed. " 189 TRACE_TASK(t, "budget timer not armed. "
189 "Raced with exhaustion-resched? Re-arming.\n"); 190 "Raced with exhaustion-resched? Re-arming.\n");
@@ -317,12 +318,6 @@ void sobliv_revaluate_task(struct task_struct* t)
317 "on Litmus lock without " 318 "on Litmus lock without "
318 "CONFIG_LITMUS_NESTED_LOCKING enabled.\n"); 319 "CONFIG_LITMUS_NESTED_LOCKING enabled.\n");
319#endif 320#endif
320
321 /* Move a waiter onto a FIFO queue to simulate an unlock call. */
322 if (tsk_rt(t)->outermost_lock &&
323 tsk_rt(t)->outermost_lock->ops->is_omlp_family) {
324 tsk_rt(t)->outermost_lock->ops->omlp_virtual_unlock(tsk_rt(t)->outermost_lock, t);
325 }
326} 321}
327 322
328 323