aboutsummaryrefslogtreecommitdiffstats
path: root/litmus/sched_mc.c
diff options
context:
space:
mode:
Diffstat (limited to 'litmus/sched_mc.c')
-rw-r--r--litmus/sched_mc.c21
1 files changed, 10 insertions, 11 deletions
diff --git a/litmus/sched_mc.c b/litmus/sched_mc.c
index 3d311505f437..53c24ac2172c 100644
--- a/litmus/sched_mc.c
+++ b/litmus/sched_mc.c
@@ -16,6 +16,7 @@
16#include <linux/pid.h> 16#include <linux/pid.h>
17 17
18#include <litmus/litmus.h> 18#include <litmus/litmus.h>
19#include <litmus/trace.h>
19#include <litmus/jobs.h> 20#include <litmus/jobs.h>
20#include <litmus/sched_plugin.h> 21#include <litmus/sched_plugin.h>
21#include <litmus/edf_common.h> 22#include <litmus/edf_common.h>
@@ -534,8 +535,6 @@ static void remove_from_all(struct task_struct* task)
534 struct crit_entry *ce; 535 struct crit_entry *ce;
535 struct domain *dom = get_task_domain(task); 536 struct domain *dom = get_task_domain(task);
536 537
537 QT_START;
538
539 TRACE_MC_TASK(task, "Removing from everything\n"); 538 TRACE_MC_TASK(task, "Removing from everything\n");
540 BUG_ON(!task); 539 BUG_ON(!task);
541 540
@@ -572,7 +571,6 @@ static void remove_from_all(struct task_struct* task)
572 571
573 BUG_ON(is_queued(task)); 572 BUG_ON(is_queued(task));
574 raw_spin_unlock(dom->lock); 573 raw_spin_unlock(dom->lock);
575 QT_END;
576} 574}
577 575
578/** 576/**
@@ -670,7 +668,6 @@ static lt_t __ce_timer_function(struct ce_dom_data *ce_data)
670 struct domain *dom = ce->domain; 668 struct domain *dom = ce->domain;
671 struct task_struct *old_link = NULL; 669 struct task_struct *old_link = NULL;
672 lt_t next_timer_abs; 670 lt_t next_timer_abs;
673 QT_START;
674 671
675 TRACE("MC level-A timer callback for CPU %d\n", ce_data->cpu); 672 TRACE("MC level-A timer callback for CPU %d\n", ce_data->cpu);
676 673
@@ -700,7 +697,6 @@ static lt_t __ce_timer_function(struct ce_dom_data *ce_data)
700 raw_spin_unlock(dom->lock); 697 raw_spin_unlock(dom->lock);
701 check_for_preempt(dom); 698 check_for_preempt(dom);
702 } 699 }
703 QT_END;
704 return next_timer_abs; 700 return next_timer_abs;
705} 701}
706 702
@@ -712,10 +708,14 @@ static void ce_timer_function(struct rt_event *e)
712 unsigned long flags; 708 unsigned long flags;
713 lt_t next_timer_abs; 709 lt_t next_timer_abs;
714 710
711 TS_LVLA_RELEASE_START;
712
715 local_irq_save(flags); 713 local_irq_save(flags);
716 next_timer_abs = __ce_timer_function(ce_data); 714 next_timer_abs = __ce_timer_function(ce_data);
717 add_event(per_cpu(cpus, ce_data->cpu).event_group, e, next_timer_abs); 715 add_event(per_cpu(cpus, ce_data->cpu).event_group, e, next_timer_abs);
718 local_irq_restore(flags); 716 local_irq_restore(flags);
717
718 TS_LVLA_RELEASE_END;
719} 719}
720#else /* else to CONFIG_MERGE_TIMERS */ 720#else /* else to CONFIG_MERGE_TIMERS */
721static enum hrtimer_restart ce_timer_function(struct hrtimer *timer) 721static enum hrtimer_restart ce_timer_function(struct hrtimer *timer)
@@ -725,10 +725,15 @@ static enum hrtimer_restart ce_timer_function(struct hrtimer *timer)
725 unsigned long flags; 725 unsigned long flags;
726 lt_t next_timer_abs; 726 lt_t next_timer_abs;
727 727
728 TS_LVLA_RELEASE_START;
729
728 local_irq_save(flags); 730 local_irq_save(flags);
729 next_timer_abs = __ce_timer_function(ce_data); 731 next_timer_abs = __ce_timer_function(ce_data);
730 hrtimer_set_expires(timer, ns_to_ktime(next_timer_abs)); 732 hrtimer_set_expires(timer, ns_to_ktime(next_timer_abs));
731 local_irq_restore(flags); 733 local_irq_restore(flags);
734
735 TS_LVLA_RELEASE_END;
736
732 return HRTIMER_RESTART; 737 return HRTIMER_RESTART;
733} 738}
734#endif /* CONFIG_MERGE_TIMERS */ 739#endif /* CONFIG_MERGE_TIMERS */
@@ -743,15 +748,11 @@ static void mc_release_jobs(rt_domain_t* rt, struct bheap* tasks)
743 struct task_struct *first = bheap_peek(rt->order, tasks)->value; 748 struct task_struct *first = bheap_peek(rt->order, tasks)->value;
744 struct domain *dom = get_task_domain(first); 749 struct domain *dom = get_task_domain(first);
745 750
746 QT_START;
747
748 raw_spin_lock_irqsave(dom->lock, flags); 751 raw_spin_lock_irqsave(dom->lock, flags);
749 TRACE(TS "Jobs released\n", TA(first)); 752 TRACE(TS "Jobs released\n", TA(first));
750 __merge_ready(rt, tasks); 753 __merge_ready(rt, tasks);
751 check_for_preempt(dom); 754 check_for_preempt(dom);
752 raw_spin_unlock_irqrestore(dom->lock, flags); 755 raw_spin_unlock_irqrestore(dom->lock, flags);
753
754 QT_END;
755} 756}
756 757
757/** 758/**
@@ -890,7 +891,6 @@ static struct task_struct* mc_schedule(struct task_struct* prev)
890 struct cpu_entry* entry = &__get_cpu_var(cpus); 891 struct cpu_entry* entry = &__get_cpu_var(cpus);
891 int i, out_of_time, sleep, preempt, exists, blocks, global, lower; 892 int i, out_of_time, sleep, preempt, exists, blocks, global, lower;
892 struct task_struct *dtask = NULL, *ready_task = NULL, *next = NULL; 893 struct task_struct *dtask = NULL, *ready_task = NULL, *next = NULL;
893 QT_START;
894 894
895 local_irq_save(flags); 895 local_irq_save(flags);
896 896
@@ -1004,7 +1004,6 @@ static struct task_struct* mc_schedule(struct task_struct* prev)
1004 TRACE_MC_TASK(next, "Picked this task\n"); 1004 TRACE_MC_TASK(next, "Picked this task\n");
1005 } else if (exists && !next) 1005 } else if (exists && !next)
1006 TRACE_ENTRY(entry, "Becomes idle at %llu\n", litmus_clock()); 1006 TRACE_ENTRY(entry, "Becomes idle at %llu\n", litmus_clock());
1007 QT_END;
1008 return next; 1007 return next;
1009} 1008}
1010 1009