aboutsummaryrefslogtreecommitdiffstats
path: root/litmus/sched_cedf.c
diff options
context:
space:
mode:
Diffstat (limited to 'litmus/sched_cedf.c')
-rw-r--r--litmus/sched_cedf.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/litmus/sched_cedf.c b/litmus/sched_cedf.c
index e9422077f9dd..00dabbf65af7 100644
--- a/litmus/sched_cedf.c
+++ b/litmus/sched_cedf.c
@@ -779,7 +779,7 @@ static enum hrtimer_restart cedf_simple_io_on_exhausted(struct task_struct *t, i
779 else { 779 else {
780 lt_t remaining; 780 lt_t remaining;
781 cedf_domain_t *cluster; 781 cedf_domain_t *cluster;
782 unsigned long flags; 782 unsigned long flags, kludge_flags;
783 783
784 BUG_ON(in_schedule); 784 BUG_ON(in_schedule);
785 785
@@ -792,6 +792,8 @@ static enum hrtimer_restart cedf_simple_io_on_exhausted(struct task_struct *t, i
792 /* force job completion */ 792 /* force job completion */
793 TRACE_TASK(t, "blocked, postponing deadline\n"); 793 TRACE_TASK(t, "blocked, postponing deadline\n");
794 794
795 local_irq_save(kludge_flags);
796
795 /* Outermost lock of the cluster. Recursive lock calls are 797 /* Outermost lock of the cluster. Recursive lock calls are
796 * possible on this code path. This should be the _ONLY_ 798 * possible on this code path. This should be the _ONLY_
797 * scenario where recursive calls are made. */ 799 * scenario where recursive calls are made. */
@@ -866,6 +868,8 @@ static enum hrtimer_restart cedf_simple_io_on_exhausted(struct task_struct *t, i
866#else 868#else
867 raw_readyq_unlock_irqrestore(&cluster->cluster_lock, flags); 869 raw_readyq_unlock_irqrestore(&cluster->cluster_lock, flags);
868#endif 870#endif
871 flush_pending_wakes();
872 local_irq_restore(kludge_flags);
869 873
870 /* we need to set up the budget timer since we're within the callback. */ 874 /* we need to set up the budget timer since we're within the callback. */
871 hrtimer_forward_now(&get_budget_timer(t).timer.timer, 875 hrtimer_forward_now(&get_budget_timer(t).timer.timer,
@@ -971,7 +975,7 @@ static enum hrtimer_restart cedf_sobliv_on_exhausted(struct task_struct *t, int
971 else { 975 else {
972 lt_t remaining; 976 lt_t remaining;
973 cedf_domain_t *cluster; 977 cedf_domain_t *cluster;
974 unsigned long flags; 978 unsigned long flags, kludge_flags;
975 979
976 BUG_ON(in_schedule); 980 BUG_ON(in_schedule);
977 981
@@ -984,6 +988,8 @@ static enum hrtimer_restart cedf_sobliv_on_exhausted(struct task_struct *t, int
984 /* force job completion */ 988 /* force job completion */
985 TRACE_TASK(t, "blocked, postponing deadline\n"); 989 TRACE_TASK(t, "blocked, postponing deadline\n");
986 990
991 local_irq_save(kludge_flags);
992
987 /* Outermost lock of the cluster. Recursive lock calls are 993 /* Outermost lock of the cluster. Recursive lock calls are
988 * possible on this code path. This should be the _ONLY_ 994 * possible on this code path. This should be the _ONLY_
989 * scenario where recursive calls are made. */ 995 * scenario where recursive calls are made. */
@@ -1061,6 +1067,8 @@ static enum hrtimer_restart cedf_sobliv_on_exhausted(struct task_struct *t, int
1061#else 1067#else
1062 raw_readyq_unlock_irqrestore(&cluster->cluster_lock, flags); 1068 raw_readyq_unlock_irqrestore(&cluster->cluster_lock, flags);
1063#endif 1069#endif
1070 flush_pending_wakes();
1071 local_irq_restore(kludge_flags);
1064 1072
1065 /* we need to set up the budget timer since we're within the callback. */ 1073 /* we need to set up the budget timer since we're within the callback. */
1066 if (bt_flag_is_set(t, BTF_IS_TOP_M)) { 1074 if (bt_flag_is_set(t, BTF_IS_TOP_M)) {
@@ -2816,6 +2824,8 @@ static long cedf_activate_plugin(void)
2816#ifdef CONFIG_LITMUS_NVIDIA 2824#ifdef CONFIG_LITMUS_NVIDIA
2817 init_nvidia_info(); 2825 init_nvidia_info();
2818#endif 2826#endif
2827
2828 init_wake_queues();
2819 2829
2820 free_cpumask_var(mask); 2830 free_cpumask_var(mask);
2821 clusters_allocated = 1; 2831 clusters_allocated = 1;