aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--litmus/sched_edf_os.c24
1 files changed, 16 insertions, 8 deletions
diff --git a/litmus/sched_edf_os.c b/litmus/sched_edf_os.c
index dac2f0e8ca3b..e021d22b5129 100644
--- a/litmus/sched_edf_os.c
+++ b/litmus/sched_edf_os.c
@@ -350,7 +350,6 @@ static void change_migrat_cpu_if_needed(struct task_struct *t)
350 * and the next release 350 * and the next release
351 */ 351 */
352 cpu = next_cpu_for_job(t); 352 cpu = next_cpu_for_job(t);
353 BUG();
354 if (unlikely(cpu != get_partition(t))) { 353 if (unlikely(cpu != get_partition(t))) {
355 tsk_rt(t)->task_params.cpu = cpu; 354 tsk_rt(t)->task_params.cpu = cpu;
356 TRACE_TASK(t, "EDF-os: will migrate job %d -> %d\n", 355 TRACE_TASK(t, "EDF-os: will migrate job %d -> %d\n",
@@ -484,27 +483,36 @@ static void edfos_task_new(struct task_struct * t, int on_rq, int running)
484 edfos_domain_t* edfos = task_edfos(t); 483 edfos_domain_t* edfos = task_edfos(t);
485 unsigned long flags; 484 unsigned long flags;
486 unsigned int i; 485 unsigned int i;
487 unsigned int has_cpu = 0;
488 486
489 if (edfos_params(t).migrat) { 487 if (edfos_params(t).migrat) {
490 bheap_init(&edfos_params(t).release_queue); 488 bheap_init(&edfos_params(t).release_queue);
491 bheap_init(&edfos_params(t).ready_queue); 489 bheap_init(&edfos_params(t).ready_queue);
492 for (i = 0; i < NR_CPUS_EDF_OS; i++) { 490 for (i = 0; i < NR_CPUS_EDF_OS; i++) {
493 if (edfos_params(t).fraction[i][0] > 0) { 491 if (i == t->rt_param.task_params.cpu) {
494 has_cpu = 1; 492 /* Initial CPU - setup next release. */
493 edfos_params(t).heap_data[i] =
494 compute_pfair_release(
495 edfos_params(t).fraction[i][0],
496 edfos_params(t).fraction[i][1], 2);
497 bheap_add(fakepfair_ready_order,
498 &edfos_params(t).release_queue,
499 &edfos_params(t).heap_data[i],
500 GFP_ATOMIC);
501 }
502 else if (edfos_params(t).fraction[i][0] > 0) {
503 /* Non-initial CPU - already released, setup
504 * deadline.
505 */
495 edfos_params(t).heap_data[i] = 506 edfos_params(t).heap_data[i] =
496 compute_pfair_deadline( 507 compute_pfair_deadline(
497 edfos_params(t).fraction[i][0], 508 edfos_params(t).fraction[i][0],
498 edfos_params(t).fraction[i][1], 0); 509 edfos_params(t).fraction[i][1], 1);
499 bheap_add(fakepfair_ready_order, 510 bheap_add(fakepfair_ready_order,
500 &edfos_params(t).ready_queue, 511 &edfos_params(t).ready_queue,
501 &edfos_params(t).heap_data[i], 512 &edfos_params(t).heap_data[i],
502 GFP_ATOMIC); 513 GFP_ATOMIC);
503 } 514 }
504 } 515 }
505 BUG_ON(!has_cpu);
506 /* Pick the first CPU to execute on. */
507 change_migrat_cpu_if_needed(t);
508 } 516 }
509 517
510 TRACE_TASK(t, "EDF-os: task new, cpu = %d\n", 518 TRACE_TASK(t, "EDF-os: task new, cpu = %d\n",