diff options
author | Zelin Tong <ztong@ludwig.cs.unc.edu> | 2020-10-24 00:17:10 -0400 |
---|---|---|
committer | Zelin Tong <ztong@ludwig.cs.unc.edu> | 2020-10-24 00:17:10 -0400 |
commit | 9e0f6ba040ab9f9a6d1e2b1dbd0beca8ef4754cc (patch) | |
tree | a7b54e4e88e81f718d2338175afce9f059b0e484 | |
parent | 4786ef1a164fd94b402968afa1955aedf41de304 (diff) |
Added support for early releasing
-rw-r--r-- | include/litmus/reservations/gedf_reservation.h | 1 | ||||
-rw-r--r-- | litmus/reservations/gedf_reservation.c | 5 |
2 files changed, 5 insertions, 1 deletions
diff --git a/include/litmus/reservations/gedf_reservation.h b/include/litmus/reservations/gedf_reservation.h index 578b9cad5838..17965c89846c 100644 --- a/include/litmus/reservations/gedf_reservation.h +++ b/include/litmus/reservations/gedf_reservation.h | |||
@@ -15,6 +15,7 @@ struct gedf_reservation { | |||
15 | lt_t cur_budget; | 15 | lt_t cur_budget; |
16 | int will_remove; | 16 | int will_remove; |
17 | int blocked; | 17 | int blocked; |
18 | int allow_early_release; | ||
18 | }; | 19 | }; |
19 | 20 | ||
20 | struct gedf_cpu_entry { | 21 | struct gedf_cpu_entry { |
diff --git a/litmus/reservations/gedf_reservation.c b/litmus/reservations/gedf_reservation.c index 1649eaf026d7..deb0c9e6e3ef 100644 --- a/litmus/reservations/gedf_reservation.c +++ b/litmus/reservations/gedf_reservation.c | |||
@@ -92,7 +92,8 @@ static void requeue( | |||
92 | BUG_ON(!gedf_res); | 92 | BUG_ON(!gedf_res); |
93 | BUG_ON(is_queued_res(&gedf_res->res)); | 93 | BUG_ON(is_queued_res(&gedf_res->res)); |
94 | 94 | ||
95 | if (lt_before_eq(gedf_res->res.replenishment_time, litmus_clock())) | 95 | if (gedf_res->allow_early_release || |
96 | lt_before_eq(gedf_res->res.replenishment_time, litmus_clock())) | ||
96 | __add_ready_res(&gedf_env->domain, &gedf_res->res); | 97 | __add_ready_res(&gedf_env->domain, &gedf_res->res); |
97 | else | 98 | else |
98 | __add_release_res(&gedf_env->domain, &gedf_res->res); | 99 | __add_release_res(&gedf_env->domain, &gedf_res->res); |
@@ -331,6 +332,7 @@ long alloc_gedf_task_reservation( | |||
331 | gedf_task_res->task = task; | 332 | gedf_task_res->task = task; |
332 | gedf_task_res->gedf_res.res.priority = ULLONG_MAX - get_rt_relative_deadline(task); | 333 | gedf_task_res->gedf_res.res.priority = ULLONG_MAX - get_rt_relative_deadline(task); |
333 | gedf_task_res->gedf_res.res.cur_budget = get_exec_cost(task); | 334 | gedf_task_res->gedf_res.res.cur_budget = get_exec_cost(task); |
335 | gedf_task_res->gedf_res.allow_early_release = is_early_releasing(task); | ||
334 | 336 | ||
335 | *_res = gedf_task_res; | 337 | *_res = gedf_task_res; |
336 | return 0; | 338 | return 0; |
@@ -353,6 +355,7 @@ long alloc_gedf_container_reservation( | |||
353 | gedf_cont_res->max_budget = max_budget; | 355 | gedf_cont_res->max_budget = max_budget; |
354 | gedf_cont_res->period = period; | 356 | gedf_cont_res->period = period; |
355 | gedf_cont_res->relative_deadline = relative_deadline; | 357 | gedf_cont_res->relative_deadline = relative_deadline; |
358 | gedf_cont_res->gedf_res.allow_early_release = 0; | ||
356 | 359 | ||
357 | *_res = gedf_cont_res; | 360 | *_res = gedf_cont_res; |
358 | return 0; | 361 | return 0; |