diff options
| author | Zelin Tong <ztong@ludwig.cs.unc.edu> | 2020-09-23 16:57:41 -0400 |
|---|---|---|
| committer | Zelin Tong <ztong@ludwig.cs.unc.edu> | 2020-09-23 16:57:41 -0400 |
| commit | 5903638399a1f983cfacf3a62355bec594757d4f (patch) | |
| tree | 3222fb7bf2c5b6e67b52e90b47238422719d5f5b | |
| parent | c98651d6dfdee7eba0134354583919dd9d2afbcf (diff) | |
Fixed Period Skipping Issue on Tasks that Overrun WCET
| -rw-r--r-- | litmus/reservations/gedf_reservation.c | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/litmus/reservations/gedf_reservation.c b/litmus/reservations/gedf_reservation.c index 95bc1bab28f4..5951963e03ec 100644 --- a/litmus/reservations/gedf_reservation.c +++ b/litmus/reservations/gedf_reservation.c | |||
| @@ -229,15 +229,21 @@ static void gedf_task_replenish_budget( | |||
| 229 | int cpu) | 229 | int cpu) |
| 230 | { | 230 | { |
| 231 | struct task_struct* t = ((struct gedf_task_reservation*)res)->task; | 231 | struct task_struct* t = ((struct gedf_task_reservation*)res)->task; |
| 232 | sched_trace_task_completion(t, !is_completed(t)); | 232 | if (is_completed(t)) { |
| 233 | BUG_ON(get_exec_time(t) > 110000000); | 233 | sched_trace_task_completion(t, 0); |
| 234 | tsk_rt(t)->completed = 0; | 234 | prepare_for_next_period(t); |
| 235 | prepare_for_next_period(t); | 235 | tsk_rt(t)->completed = 0; |
| 236 | sched_trace_task_release(t); | 236 | sched_trace_task_release(t); |
| 237 | res->priority = get_deadline(t); | ||
| 238 | res->replenishment_time = get_release(t); | ||
| 239 | } else { | ||
| 240 | sched_trace_task_completion(t, 1); | ||
| 241 | res->replenishment_time += get_rt_period(t); | ||
| 242 | res->priority = res->replenishment_time + get_rt_relative_deadline(t); | ||
| 243 | TRACE_TASK(t, "overrun budget!\n"); | ||
| 244 | } | ||
| 237 | res->budget_consumed = 0; | 245 | res->budget_consumed = 0; |
| 238 | res->cur_budget = get_exec_cost(t); | 246 | res->cur_budget = get_exec_cost(t); |
| 239 | res->priority = get_deadline(t); | ||
| 240 | res->replenishment_time = get_release(t); | ||
| 241 | } | 247 | } |
| 242 | 248 | ||
| 243 | static void gedf_drain_budget( | 249 | static void gedf_drain_budget( |
