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( |