diff options
| author | ztong <ztong@cs.unc.edu> | 2020-12-15 03:47:26 -0500 |
|---|---|---|
| committer | ztong <ztong@cs.unc.edu> | 2020-12-15 03:47:26 -0500 |
| commit | cc27759fe1f148dbe19be727e5c7cbe441500e50 (patch) | |
| tree | c919a1a82bbea22f9a99779da61bacbbcadcc314 | |
| parent | 687f818cf6f6724bd5621fe52fb54e6f85028b18 (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.c | 7 |
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 | ||
| 235 | static void gedf_replenish_budget( | 232 | static 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; |
