diff options
author | Bjoern B. Brandenburg <bbb@cs.unc.edu> | 2008-10-06 11:37:11 -0400 |
---|---|---|
committer | Bjoern B. Brandenburg <bbb@cs.unc.edu> | 2008-10-06 11:37:11 -0400 |
commit | 43d4369f57f6c6a3316329246e9aba8c59af7b3c (patch) | |
tree | 60c3a4c84ea518ed695e8d9fdd6308b6ae9bbde1 | |
parent | 32a53a4274c3cee072604869a8db5b761c8ea5c0 (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.c | 14 |
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 | ||
512 | long litmus_admit_task(struct task_struct* tsk) | 512 | long 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 | ||