diff options
author | ztong <ztong@cs.unc.edu> | 2020-12-22 14:09:38 -0500 |
---|---|---|
committer | ztong <ztong@cs.unc.edu> | 2020-12-22 14:09:38 -0500 |
commit | b00f787062c73c972df42f82e566554357652e92 (patch) | |
tree | afd981428735edfd713fc23ebb11bd3e22cd73c8 /litmus/reservations | |
parent | cc27759fe1f148dbe19be727e5c7cbe441500e50 (diff) |
Diffstat (limited to 'litmus/reservations')
-rw-r--r-- | litmus/reservations/gedf_reservation.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/litmus/reservations/gedf_reservation.c b/litmus/reservations/gedf_reservation.c index a08373e28469..40c1ce412891 100644 --- a/litmus/reservations/gedf_reservation.c +++ b/litmus/reservations/gedf_reservation.c | |||
@@ -260,6 +260,9 @@ static void gedf_task_replenish_budget( | |||
260 | res->priority = ULLONG_MAX - res->replenishment_time - get_rt_relative_deadline(t); | 260 | res->priority = ULLONG_MAX - res->replenishment_time - get_rt_relative_deadline(t); |
261 | TRACE_TASK(t, "overrun budget!\n"); | 261 | TRACE_TASK(t, "overrun budget!\n"); |
262 | } | 262 | } |
263 | //TODO: hacky. reset exec_time so arm_enforcement_timer doesn't | ||
264 | // yell at us for trying to set timer while overrun budget | ||
265 | tsk_rt(t)->job_params.exec_time = 0; | ||
263 | res->budget_consumed = 0; | 266 | res->budget_consumed = 0; |
264 | res->cur_budget = get_exec_cost(t); | 267 | res->cur_budget = get_exec_cost(t); |
265 | } | 268 | } |
@@ -287,7 +290,8 @@ static void gedf_task_drain_budget( | |||
287 | { | 290 | { |
288 | struct task_struct* t = ((struct gedf_task_reservation*)res)->task; | 291 | struct task_struct* t = ((struct gedf_task_reservation*)res)->task; |
289 | 292 | ||
290 | if (how_much > res->cur_budget || is_completed(t)) | 293 | if (how_much > res->cur_budget || is_completed(t) || |
294 | (budget_enforced(t) && budget_exhausted(t))) | ||
291 | res->cur_budget = 0; | 295 | res->cur_budget = 0; |
292 | else | 296 | else |
293 | res->cur_budget -= how_much; | 297 | res->cur_budget -= how_much; |