aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoshua Bakita <jbakita@cs.unc.edu>2020-03-07 17:09:03 -0500
committerJoshua Bakita <jbakita@cs.unc.edu>2020-03-07 17:09:03 -0500
commit81afc562527873bad51d12256cb8880dec0b7f1d (patch)
tree164b276db1f2fee293dc68947f9aa13d69b2c7d5
parent1624739afa2d2e74b77e91b4a9524b69d05d04c0 (diff)
Make sure to re-run cschedule if we decide to continue running a container
This fixes the issue where deadlines and releases were not being updated. As of this commit, multiple real-time tasks can be created, run simultaneously, be killed, and more tasks can be started and killed on a multicore system - all without crashing or freezing.
-rw-r--r--litmus/sched_edfsc.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/litmus/sched_edfsc.c b/litmus/sched_edfsc.c
index 17a7d1f5bca0..9dd30eb60599 100644
--- a/litmus/sched_edfsc.c
+++ b/litmus/sched_edfsc.c
@@ -822,8 +822,12 @@ static struct task_struct *edfsc_gschedule(struct task_struct *prev)
822 entry->scheduled->rt_param.scheduled_on = NO_CPU; 822 entry->scheduled->rt_param.scheduled_on = NO_CPU;
823 TRACE_TASK(entry->scheduled, "scheduled_on = NO_CPU\n"); 823 TRACE_TASK(entry->scheduled, "scheduled_on = NO_CPU\n");
824 } 824 }
825 } else { 825 } else if (entry->scheduled) {
826 if (exists) 826 // If we've been running a container, make sure that it has nothing new to schedule
827 if (is_container(entry->scheduled))
828 next = entry->scheduled;
829 // Otherwise we can keep running any tasks we previously scheduled
830 else if (is_realtime(prev))
827 next = prev; 831 next = prev;
828 } 832 }
829 833