diff options
Diffstat (limited to 'litmus/sched_cedf.c')
-rw-r--r-- | litmus/sched_cedf.c | 14 |
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; |