aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjoern B. Brandenburg <bbb@cs.unc.edu>2008-10-06 11:37:11 -0400
committerBjoern B. Brandenburg <bbb@cs.unc.edu>2008-10-06 11:37:11 -0400
commit43d4369f57f6c6a3316329246e9aba8c59af7b3c (patch)
tree60c3a4c84ea518ed695e8d9fdd6308b6ae9bbde1
parent32a53a4274c3cee072604869a8db5b761c8ea5c0 (diff)
litmus: error out in ENOMEM case
If we can't allocate heap nodes then we can't admit RT tasks.
-rw-r--r--litmus/litmus.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/litmus/litmus.c b/litmus/litmus.c
index c64a8f6aaa..3d903c526d 100644
--- a/litmus/litmus.c
+++ b/litmus/litmus.c
@@ -511,7 +511,7 @@ static void reinit_litmus_state(struct task_struct* p, int restore)
511 511
512long litmus_admit_task(struct task_struct* tsk) 512long litmus_admit_task(struct task_struct* tsk)
513{ 513{
514 long retval; 514 long retval = 0;
515 long flags; 515 long flags;
516 516
517 BUG_ON(is_realtime(tsk)); 517 BUG_ON(is_realtime(tsk));
@@ -535,17 +535,23 @@ long litmus_admit_task(struct task_struct* tsk)
535 535
536 /* avoid scheduler plugin changing underneath us */ 536 /* avoid scheduler plugin changing underneath us */
537 spin_lock_irqsave(&task_transition_lock, flags); 537 spin_lock_irqsave(&task_transition_lock, flags);
538 retval = litmus->admit_task(tsk);
539 538
540 /* allocate heap node for this task */ 539 /* allocate heap node for this task */
541 tsk_rt(tsk)->heap_node = kmem_cache_alloc(heap_node_cache, GFP_ATOMIC); 540 tsk_rt(tsk)->heap_node = kmem_cache_alloc(heap_node_cache, GFP_ATOMIC);
542 if (!tsk_rt(tsk)->heap_node) 541 if (!tsk_rt(tsk)->heap_node) {
542 printk(KERN_WARNING "litmus: no more heap node memory!?\n");
543 retval = -ENOMEM; 543 retval = -ENOMEM;
544 else 544 } else
545 heap_node_init(&tsk_rt(tsk)->heap_node, tsk); 545 heap_node_init(&tsk_rt(tsk)->heap_node, tsk);
546 546
547 if (!retval) 547 if (!retval)
548 retval = litmus->admit_task(tsk);
549
550 if (!retval) {
551 sched_trace_task_name(tsk);
552 sched_trace_task_param(tsk);
548 atomic_inc(&rt_task_count); 553 atomic_inc(&rt_task_count);
554 }
549 555
550 spin_unlock_irqrestore(&task_transition_lock, flags); 556 spin_unlock_irqrestore(&task_transition_lock, flags);
551 557