aboutsummaryrefslogtreecommitdiffstats
path: root/litmus/rt_domain.c
diff options
context:
space:
mode:
authorJonathan Herman <hermanjl@cs.unc.edu>2011-09-21 18:25:30 -0400
committerJonathan Herman <hermanjl@cs.unc.edu>2011-09-21 18:25:30 -0400
commitd27d5ce8b5fcd8408e995d13608d8993cb720aab (patch)
tree99f3163bc76c74234c9001a9388d91afb8584ab2 /litmus/rt_domain.c
parent313bcb226f88d17b193f9e7db7ecb4f57320a596 (diff)
Now with fine grained locking
Diffstat (limited to 'litmus/rt_domain.c')
-rw-r--r--litmus/rt_domain.c14
1 files changed, 6 insertions, 8 deletions
diff --git a/litmus/rt_domain.c b/litmus/rt_domain.c
index 65c6e5c02f1e..3e419d7c9ae7 100644
--- a/litmus/rt_domain.c
+++ b/litmus/rt_domain.c
@@ -20,7 +20,7 @@
20 20
21 21
22/* Uncomment when debugging timer races... */ 22/* Uncomment when debugging timer races... */
23#if 1 23#if 0
24#define VTRACE_TASK TRACE_TASK 24#define VTRACE_TASK TRACE_TASK
25#define VTRACE TRACE 25#define VTRACE TRACE
26#else 26#else
@@ -371,8 +371,12 @@ static void pd_requeue(domain_t *dom, struct task_struct *task)
371 371
372 if (is_released(task, litmus_clock())) { 372 if (is_released(task, litmus_clock())) {
373 __add_ready(domain, task); 373 __add_ready(domain, task);
374 TRACE("rt: adding %s/%d (%llu, %llu) rel=%llu to ready queue at %llu\n",
375 task->comm, task->pid, get_exec_cost(task), get_rt_period(task),
376 get_release(task), litmus_clock());
374 } else { 377 } else {
375 /* task has to wait for next release */ 378 /* task has to wait for next release */
379 TRACE_TASK(task, "add release(), rel=%llu\n", get_release(task));
376 add_release(domain, task); 380 add_release(domain, task);
377 } 381 }
378} 382}
@@ -398,22 +402,16 @@ static struct task_struct* pd_peek_ready(domain_t *dom)
398/* pd_domain_init - create a generic domain wrapper for an rt_domain 402/* pd_domain_init - create a generic domain wrapper for an rt_domain
399 */ 403 */
400void pd_domain_init(domain_t *dom, 404void pd_domain_init(domain_t *dom,
405 rt_domain_t *domain,
401 bheap_prio_t order, 406 bheap_prio_t order,
402 check_resched_needed_t check, 407 check_resched_needed_t check,
403 release_jobs_t release, 408 release_jobs_t release,
404 preempt_needed_t preempt_needed, 409 preempt_needed_t preempt_needed,
405 task_prio_t priority) 410 task_prio_t priority)
406{ 411{
407 rt_domain_t *domain = kmalloc(sizeof(rt_domain_t), GFP_ATOMIC);
408
409 rt_domain_init(domain, order, check, release); 412 rt_domain_init(domain, order, check, release);
410 domain_init(dom, &domain->ready_lock, 413 domain_init(dom, &domain->ready_lock,
411 pd_requeue, pd_peek_ready, pd_take_ready, 414 pd_requeue, pd_peek_ready, pd_take_ready,
412 preempt_needed, priority); 415 preempt_needed, priority);
413 dom->data = domain; 416 dom->data = domain;
414} 417}
415
416void pd_domain_free(domain_t *dom)
417{
418 kfree(dom->data);
419}