aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJonathan Herman <hermanjl@cs.unc.edu>2011-04-21 08:24:02 -0400
committerJonathan Herman <hermanjl@cs.unc.edu>2011-04-21 08:24:02 -0400
commita1dcb10eb16d6e71a755124376de16e2bba44339 (patch)
tree4660da52b08c5b87334d9639a5c8cacd68973115
parent213d8bdc508cbc4775b4d19f15da157c94b4cf5f (diff)
BE servers will periodically donate slack when there are no BE tasks in the system.
-rw-r--r--litmus/sched_edf_hsb.c11
1 files changed, 5 insertions, 6 deletions
diff --git a/litmus/sched_edf_hsb.c b/litmus/sched_edf_hsb.c
index fc533502f5ac..7fd3d545234d 100644
--- a/litmus/sched_edf_hsb.c
+++ b/litmus/sched_edf_hsb.c
@@ -379,11 +379,8 @@ static void check_slack_candidate(struct task_struct *task)
379 if (is_srt(task) && 379 if (is_srt(task) &&
380 /* The task has been synchronously released */ 380 /* The task has been synchronously released */
381 task_job_no(task) > 2 && 381 task_job_no(task) > 2 &&
382 /* The SRT task is not ahead of its server */ 382 /* The SRT task is behind its server */
383 task_srt_server(task)->job_no >= task_job_no(task) && 383 task_srt_server(task)->job_no > task_job_no(task) &&
384 /* The task didn't just complete */
385 !(get_rt_flags(task) == RT_F_SLEEP && task_srt_server(task)->job_no ==
386 task_job_no(task)) &&
387 /* The task hasn't already been added to the list */ 384 /* The task hasn't already been added to the list */
388 !head_in_list(&task_data(task)->candidate_list)) { 385 !head_in_list(&task_data(task)->candidate_list)) {
389 386
@@ -1129,7 +1126,7 @@ static noinline server_t* next_eligible_be_server(void)
1129 catchup_server(be_server, now); 1126 catchup_server(be_server, now);
1130 bheap_insert(server_order, &be_ready_servers, 1127 bheap_insert(server_order, &be_ready_servers,
1131 be_server->hn); 1128 be_server->hn);
1132 1129 check_donate_slack(be_server, NULL);
1133 be_server = next_be_server(); 1130 be_server = next_be_server();
1134 TRACE_SERVER_SUB(be_server, "catching up BE server"); 1131 TRACE_SERVER_SUB(be_server, "catching up BE server");
1135 sched_trace_action(NULL, SERVER_RELEASED_ACTION); /* Release */ 1132 sched_trace_action(NULL, SERVER_RELEASED_ACTION); /* Release */
@@ -1143,6 +1140,7 @@ static noinline server_t* next_eligible_be_server(void)
1143 TRACE_SERVER_SUB(be_server, "dead: %llu, rel: %llu, budget: %llu", 1140 TRACE_SERVER_SUB(be_server, "dead: %llu, rel: %llu, budget: %llu",
1144 be_server->deadline, be_server->release, 1141 be_server->deadline, be_server->release,
1145 be_server->budget); 1142 be_server->budget);
1143
1146 } 1144 }
1147 1145
1148 return be_server; 1146 return be_server;
@@ -1822,6 +1820,7 @@ static void servers_released(struct list_head *servers)
1822 TRACE_SERVER_SUB(server, "inserting BE server"); 1820 TRACE_SERVER_SUB(server, "inserting BE server");
1823 bheap_insert(server_order, &be_ready_servers, 1821 bheap_insert(server_order, &be_ready_servers,
1824 server->hn); 1822 server->hn);
1823 check_donate_slack(server);
1825 } else { /* HRT server */ 1824 } else { /* HRT server */
1826 hrt_server_released(server); 1825 hrt_server_released(server);
1827 } 1826 }