diff options
author | Jonathan Herman <hermanjl@cs.unc.edu> | 2011-04-21 08:24:02 -0400 |
---|---|---|
committer | Jonathan Herman <hermanjl@cs.unc.edu> | 2011-04-21 08:24:02 -0400 |
commit | a1dcb10eb16d6e71a755124376de16e2bba44339 (patch) | |
tree | 4660da52b08c5b87334d9639a5c8cacd68973115 | |
parent | 213d8bdc508cbc4775b4d19f15da157c94b4cf5f (diff) |
BE servers will periodically donate slack when there are no BE tasks in the system.
-rw-r--r-- | litmus/sched_edf_hsb.c | 11 |
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 | } |