aboutsummaryrefslogtreecommitdiffstats
path: root/litmus/sched_edf_hsb.c
diff options
context:
space:
mode:
Diffstat (limited to 'litmus/sched_edf_hsb.c')
-rw-r--r--litmus/sched_edf_hsb.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/litmus/sched_edf_hsb.c b/litmus/sched_edf_hsb.c
index d89364fdb582..d176efca648b 100644
--- a/litmus/sched_edf_hsb.c
+++ b/litmus/sched_edf_hsb.c
@@ -340,6 +340,9 @@ static noinline void check_donate_slack(server_t *donator, struct task_struct *w
340 340
341 TRACE_SERVER_SUB(donator, "checking donation"); 341 TRACE_SERVER_SUB(donator, "checking donation");
342 342
343 if (!slack)
344 return;
345
343 /* Donating small amounts of slack will result in excess migrations */ 346 /* Donating small amounts of slack will result in excess migrations */
344 if (donator->budget < SLACK_MIN) 347 if (donator->budget < SLACK_MIN)
345 return; 348 return;
@@ -1330,8 +1333,7 @@ static void remove_from_ready(server_t *server, struct task_struct *task,
1330 } 1333 }
1331 } else { 1334 } else {
1332 slack = server_slack(server); 1335 slack = server_slack(server);
1333 BUG_ON(!slack); 1336 if (slack && head_in_list(&slack->list)) {
1334 if (head_in_list(&slack->list)) {
1335 remove_slack(slack); 1337 remove_slack(slack);
1336 } 1338 }
1337 if (server->type == S_BE) { 1339 if (server->type == S_BE) {
@@ -1456,7 +1458,7 @@ static noinline void check_for_slack_preempt(struct task_struct *task,
1456 } 1458 }
1457 1459
1458 /* The server's slack is currently being run */ 1460 /* The server's slack is currently being run */
1459 if (is_server_linked(slack)) { 1461 if (slack && is_server_linked(slack)) {
1460 entry = &per_cpu(cpu_entries, slack->cpu); 1462 entry = &per_cpu(cpu_entries, slack->cpu);
1461 slack_task = server_task(slack); 1463 slack_task = server_task(slack);
1462 1464
@@ -2466,11 +2468,12 @@ static int __init init_edf_hsb(void)
2466 idle_slack = server_alloc(GFP_ATOMIC); 2468 idle_slack = server_alloc(GFP_ATOMIC);
2467 server_init(idle_slack, &server_domain, 2469 server_init(idle_slack, &server_domain,
2468 IDLE_SLACK_BASE + cpu, 2470 IDLE_SLACK_BASE + cpu,
2469 ULLONG_MAX, ULLONG_MAX, 1); 2471 LLONG_MAX, LLONG_MAX, 1);
2470 idle_slack->deadline = ULLONG_MAX; 2472 idle_slack->deadline = LLONG_MAX;
2471 idle_slack->budget = ULLONG_MAX; 2473 idle_slack->budget = LLONG_MAX;
2472 idle_slack->job_no = 1; 2474 idle_slack->job_no = 1;
2473 idle_slack->release = 1; 2475 idle_slack->release = 1;
2476 idle_slack->type = S_SLACK;
2474 add_slack(idle_slack); 2477 add_slack(idle_slack);
2475 2478
2476 entry->cpu = cpu; 2479 entry->cpu = cpu;