aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjoern B. Brandenburg <bbb@cs.unc.edu>2009-04-23 08:35:15 -0400
committerBjoern B. Brandenburg <bbb@cs.unc.edu>2009-04-23 08:35:15 -0400
commitf957276cf4ee163f74b669f81c5fc10c6f517f44 (patch)
treec4824a597ab39f268a486bc17c8f3e6d902d4997
parentbf32cbddd585d1cbc7ab7dd2f96bd72d6a2c2173 (diff)
fixup commit: missing rtdomain pieces
-rw-r--r--litmus/rt_domain.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/litmus/rt_domain.c b/litmus/rt_domain.c
index 09b486c13f..f2e77f828d 100644
--- a/litmus/rt_domain.c
+++ b/litmus/rt_domain.c
@@ -95,12 +95,12 @@ static struct release_heap* get_release_heap(rt_domain_t *rt, struct task_struct
95 if (!heap) { 95 if (!heap) {
96 /* use pre-allocated release heap */ 96 /* use pre-allocated release heap */
97 rh = tsk_rt(t)->rel_heap; 97 rh = tsk_rt(t)->rel_heap;
98 98
99 /* initialize */ 99 /* initialize */
100 rh->release_time = release_time; 100 rh->release_time = release_time;
101 rh->dom = rt; 101 rh->dom = rt;
102 heap_init(&rh->heap); 102 heap_init(&rh->heap);
103 103
104 /* initialize timer */ 104 /* initialize timer */
105 hrtimer_init(&rh->timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS); 105 hrtimer_init(&rh->timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS);
106 rh->timer.function = on_release_timer; 106 rh->timer.function = on_release_timer;
@@ -108,6 +108,7 @@ static struct release_heap* get_release_heap(rt_domain_t *rt, struct task_struct
108 rh->timer.cb_mode = HRTIMER_CB_IRQSAFE; 108 rh->timer.cb_mode = HRTIMER_CB_IRQSAFE;
109#endif 109#endif
110 110
111 atomic_set(&rh->info.state, HRTIMER_START_ON_INACTIVE);
111 /* add to release queue */ 112 /* add to release queue */
112 list_add(&rh->list, pos->prev); 113 list_add(&rh->list, pos->prev);
113 heap = rh; 114 heap = rh;
@@ -126,15 +127,14 @@ static void arm_release_timer(unsigned long _rt)
126 int armed; 127 int armed;
127 lt_t release = 0; 128 lt_t release = 0;
128 129
129 local_irq_save(flags);
130 TRACE("arm_release_timer() at %llu\n", litmus_clock());
131 spin_lock(&rt->tobe_lock);
132 list_replace_init(&rt->tobe_released, &list);
133 spin_unlock(&rt->tobe_lock);
134
135 /* We only have to defend against the ISR since norq callbacks 130 /* We only have to defend against the ISR since norq callbacks
136 * are serialized. 131 * are serialized.
137 */ 132 */
133 TRACE("arm_release_timer() at %llu\n", litmus_clock());
134 spin_lock_irqsave(&rt->tobe_lock, flags);
135 list_replace_init(&rt->tobe_released, &list);
136 spin_unlock_irqrestore(&rt->tobe_lock, flags);
137
138 list_for_each_safe(pos, safe, &list) { 138 list_for_each_safe(pos, safe, &list) {
139 /* pick task of work list */ 139 /* pick task of work list */
140 t = list_entry(pos, struct task_struct, rt_param.list); 140 t = list_entry(pos, struct task_struct, rt_param.list);
@@ -188,6 +188,8 @@ void rt_domain_init(rt_domain_t *rt,
188 if (!order) 188 if (!order)
189 order = dummy_order; 189 order = dummy_order;
190 190
191 rt->release_master = NO_CPU;
192
191 heap_init(&rt->ready_queue); 193 heap_init(&rt->ready_queue);
192 INIT_LIST_HEAD(&rt->tobe_released); 194 INIT_LIST_HEAD(&rt->tobe_released);
193 for (i = 0; i < RELEASE_QUEUE_SLOTS; i++) 195 for (i = 0; i < RELEASE_QUEUE_SLOTS; i++)