aboutsummaryrefslogtreecommitdiffstats
path: root/litmus/rt_domain.c
diff options
context:
space:
mode:
authorJonathan Herman <hermanjl@cs.unc.edu>2011-09-30 10:42:54 -0400
committerJonathan Herman <hermanjl@cs.unc.edu>2011-09-30 10:42:54 -0400
commit17a40d7ea17014b7a615b9f91facc16c6d9072e3 (patch)
tree01b2609a1fbce58782fde9b3552bd5f9aa0df4e4 /litmus/rt_domain.c
parenta9ff1e57ac0ead518444c6960a2e799d8defc5bd (diff)
parentcd5685b6483df2f1ba8affc0ff8a0679f4044db8 (diff)
Merge branch 'wip-mc' of ssh://cvs.cs.unc.edu/cvs/proj/litmus/repo/litmus2010 into wip-mc
Diffstat (limited to 'litmus/rt_domain.c')
-rw-r--r--litmus/rt_domain.c19
1 files changed, 13 insertions, 6 deletions
diff --git a/litmus/rt_domain.c b/litmus/rt_domain.c
index db92e849f084..fbd91c829619 100644
--- a/litmus/rt_domain.c
+++ b/litmus/rt_domain.c
@@ -166,7 +166,7 @@ static void reinit_release_heap(rt_domain_t *rt, struct task_struct* t)
166 166
167#ifdef CONFIG_MERGE_TIMERS 167#ifdef CONFIG_MERGE_TIMERS
168 rh->event.prio = rt->prio; 168 rh->event.prio = rt->prio;
169 cancel_event(rt->event_group, &rh->event); 169 cancel_event(&rh->event);
170#else 170#else
171 /* Make sure it is safe to use. The timer callback could still 171 /* Make sure it is safe to use. The timer callback could still
172 * be executing on another CPU; hrtimer_cancel() will wait 172 * be executing on another CPU; hrtimer_cancel() will wait
@@ -188,7 +188,11 @@ static void reinit_release_heap(rt_domain_t *rt, struct task_struct* t)
188 188
189} 189}
190 190
191#ifdef CONFIG_RELEASE_MASTER
192static void arm_release_timer_on(struct release_heap *rh, int target_cpu)
193#else
191static void arm_release_timer(struct release_heap *rh) 194static void arm_release_timer(struct release_heap *rh)
195#endif
192{ 196{
193#ifdef CONFIG_MERGE_TIMERS 197#ifdef CONFIG_MERGE_TIMERS
194 add_event(rh->dom->event_group, &rh->event, rh->release_time); 198 add_event(rh->dom->event_group, &rh->event, rh->release_time);
@@ -200,8 +204,7 @@ static void arm_release_timer(struct release_heap *rh)
200 */ 204 */
201 205
202#ifdef CONFIG_RELEASE_MASTER 206#ifdef CONFIG_RELEASE_MASTER
203 if (rt->release_master == NO_CPU && 207 if (rh->dom->release_master == NO_CPU && target_cpu == NO_CPU)
204 target_cpu == NO_CPU)
205#endif 208#endif
206 __hrtimer_start_range_ns(&rh->timer, 209 __hrtimer_start_range_ns(&rh->timer,
207 ns_to_ktime(rh->release_time), 210 ns_to_ktime(rh->release_time),
@@ -210,7 +213,7 @@ static void arm_release_timer(struct release_heap *rh)
210 else 213 else
211 hrtimer_start_on(/* target_cpu overrides release master */ 214 hrtimer_start_on(/* target_cpu overrides release master */
212 (target_cpu != NO_CPU ? 215 (target_cpu != NO_CPU ?
213 target_cpu : rt->release_master), 216 target_cpu : rh->dom->release_master),
214 &rh->info, &rh->timer, 217 &rh->info, &rh->timer,
215 ns_to_ktime(rh->release_time), 218 ns_to_ktime(rh->release_time),
216 HRTIMER_MODE_ABS_PINNED); 219 HRTIMER_MODE_ABS_PINNED);
@@ -278,9 +281,13 @@ static void setup_release(rt_domain_t *_rt)
278 * owner do the arming (which is the "first" task to reference 281 * owner do the arming (which is the "first" task to reference
279 * this release_heap anyway). 282 * this release_heap anyway).
280 */ 283 */
281 if (rh == tsk_rt(t)->rel_heap) 284 if (rh == tsk_rt(t)->rel_heap) {
285#ifdef CONFIG_RELEASE_MASTER
286 arm_release_timer_on(rh, target_cpu);
287#else
282 arm_release_timer(rh); 288 arm_release_timer(rh);
283 else 289#endif
290 } else
284 VTRACE_TASK(t, "0x%p is not my timer\n", &rh->timer); 291 VTRACE_TASK(t, "0x%p is not my timer\n", &rh->timer);
285 } 292 }
286} 293}