diff options
Diffstat (limited to 'litmus/sched_edf_hsb.c')
-rw-r--r-- | litmus/sched_edf_hsb.c | 15 |
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; |