diff options
author | Bjoern B. Brandenburg <bbb@cs.unc.edu> | 2009-04-23 08:35:15 -0400 |
---|---|---|
committer | Bjoern B. Brandenburg <bbb@cs.unc.edu> | 2009-04-23 08:35:15 -0400 |
commit | f957276cf4ee163f74b669f81c5fc10c6f517f44 (patch) | |
tree | c4824a597ab39f268a486bc17c8f3e6d902d4997 | |
parent | bf32cbddd585d1cbc7ab7dd2f96bd72d6a2c2173 (diff) |
fixup commit: missing rtdomain pieces
-rw-r--r-- | litmus/rt_domain.c | 18 |
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++) |