aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorztong <ztong@cs.unc.edu>2020-12-15 03:47:26 -0500
committerztong <ztong@cs.unc.edu>2020-12-15 03:47:26 -0500
commitcc27759fe1f148dbe19be727e5c7cbe441500e50 (patch)
treec919a1a82bbea22f9a99779da61bacbbcadcc314
parent687f818cf6f6724bd5621fe52fb54e6f85028b18 (diff)
Fixed Problem of Processes suddenly gets "lost" by gedf_reservation
When budgets are not enforced and is exhausted, gedf_task_replenish_budget will not actually call prepare_for_next_period, which means it will always be in a state of budget exhaustion, therefore never being dispatched by the reservation.
-rw-r--r--litmus/reservations/gedf_reservation.c7
1 files changed, 2 insertions, 5 deletions
diff --git a/litmus/reservations/gedf_reservation.c b/litmus/reservations/gedf_reservation.c
index 65ca2b8c9fd6..a08373e28469 100644
--- a/litmus/reservations/gedf_reservation.c
+++ b/litmus/reservations/gedf_reservation.c
@@ -226,10 +226,7 @@ static struct task_struct* gedf_task_dispatch_client(
226 int cpu) 226 int cpu)
227{ 227{
228 struct gedf_task_reservation* tmp = (struct gedf_task_reservation*)res; 228 struct gedf_task_reservation* tmp = (struct gedf_task_reservation*)res;
229 if (budget_exhausted(tmp->task)) 229 return tmp->task;
230 return NULL;
231 else
232 return tmp->task;
233} 230}
234 231
235static void gedf_replenish_budget( 232static void gedf_replenish_budget(
@@ -250,7 +247,7 @@ static void gedf_task_replenish_budget(
250{ 247{
251 struct task_struct* t = ((struct gedf_task_reservation*)res)->task; 248 struct task_struct* t = ((struct gedf_task_reservation*)res)->task;
252 249
253 if (is_completed(t) || (budget_enforced(t) && budget_exhausted(t))) { 250 if (is_completed(t)) {
254 sched_trace_task_completion(t, 0); 251 sched_trace_task_completion(t, 0);
255 prepare_for_next_period(t); 252 prepare_for_next_period(t);
256 tsk_rt(t)->completed = 0; 253 tsk_rt(t)->completed = 0;