diff options
author | Glenn Elliott <gelliott@cs.unc.edu> | 2012-09-17 19:31:04 -0400 |
---|---|---|
committer | Glenn Elliott <gelliott@cs.unc.edu> | 2012-09-17 19:31:04 -0400 |
commit | ba54b1096870fba6e3bbb99aafc713e76b747353 (patch) | |
tree | 26727a7f89ca520392fec0b559f09500cb9934ac /include | |
parent | ef0974bf8e768b38d728f3bba147332ddea1e11b (diff) |
Fixed three bugs with aux threads and nested locks
Fixes two bugs with nested locks:
1) List of aux threads could become corrupted.
-- moved modifications to be within scheduler lock.
2) Fixed bad EDF comparison ordering that could lead
to schedule thrashing in an infinite loop.
3) Prevent aux threads from inheriting a priority from
a task that is blocked on a real-time litmus lock.
(since the aux threads can't possibly hold these locks,
we don't have to worry about inheritance.)
Diffstat (limited to 'include')
-rw-r--r-- | include/litmus/locking.h | 3 | ||||
-rw-r--r-- | include/litmus/rt_param.h | 1 |
2 files changed, 4 insertions, 0 deletions
diff --git a/include/litmus/locking.h b/include/litmus/locking.h index 296bbf6f7af0..4a5f198a0407 100644 --- a/include/litmus/locking.h +++ b/include/litmus/locking.h | |||
@@ -156,5 +156,8 @@ struct litmus_lock_ops { | |||
156 | #endif | 156 | #endif |
157 | 157 | ||
158 | 158 | ||
159 | void suspend_for_lock(void); | ||
160 | |||
161 | |||
159 | #endif | 162 | #endif |
160 | 163 | ||
diff --git a/include/litmus/rt_param.h b/include/litmus/rt_param.h index 8b9e14c461dc..44f85a366574 100644 --- a/include/litmus/rt_param.h +++ b/include/litmus/rt_param.h | |||
@@ -288,6 +288,7 @@ struct rt_param { | |||
288 | #ifdef CONFIG_REALTIME_AUX_TASKS | 288 | #ifdef CONFIG_REALTIME_AUX_TASKS |
289 | unsigned int is_aux_task:1; | 289 | unsigned int is_aux_task:1; |
290 | unsigned int has_aux_tasks:1; | 290 | unsigned int has_aux_tasks:1; |
291 | unsigned int hide_from_aux_tasks:1; | ||
291 | 292 | ||
292 | struct list_head aux_task_node; | 293 | struct list_head aux_task_node; |
293 | struct binheap_node aux_task_owner_node; | 294 | struct binheap_node aux_task_owner_node; |