diff options
author | Jeremy Erickson <jerickso@cs.unc.edu> | 2013-05-02 17:20:07 -0400 |
---|---|---|
committer | Jeremy Erickson <jerickso@cs.unc.edu> | 2013-05-02 17:20:07 -0400 |
commit | c622ef53527c961a83c5c2dd0dc9b8c9c450a0be (patch) | |
tree | 664b8a6d097ffa7bf683a26f466ed96b35ffb7c4 | |
parent | be1e926439953fc3ba403c28c37c0c8128567a4e (diff) |
Change ordering of fraction array and add first_cpu back
-rw-r--r-- | include/litmus/rt_param.h | 4 | ||||
-rw-r--r-- | litmus/sched_edf_os.c | 22 |
2 files changed, 14 insertions, 12 deletions
diff --git a/include/litmus/rt_param.h b/include/litmus/rt_param.h index 74210f3b362e..d250e538a63e 100644 --- a/include/litmus/rt_param.h +++ b/include/litmus/rt_param.h | |||
@@ -62,6 +62,8 @@ struct edffm_params { | |||
62 | }; | 62 | }; |
63 | 63 | ||
64 | struct edfos_params { | 64 | struct edfos_params { |
65 | /* The first CPU.*/ | ||
66 | unsigned int first_cpu; | ||
65 | /* Whether this task is a migrating task*/ | 67 | /* Whether this task is a migrating task*/ |
66 | unsigned int migrat; | 68 | unsigned int migrat; |
67 | /* Time of next subtask release or deadline */ | 69 | /* Time of next subtask release or deadline */ |
@@ -72,7 +74,7 @@ struct edfos_params { | |||
72 | * The first column is the numerator of the fraction. | 74 | * The first column is the numerator of the fraction. |
73 | * The second column is the denominator. | 75 | * The second column is the denominator. |
74 | */ | 76 | */ |
75 | lt_t fraction[2][NR_CPUS]; | 77 | lt_t fraction[NR_CPUS][2]; |
76 | struct bheap release_queue; | 78 | struct bheap release_queue; |
77 | struct bheap ready_queue; | 79 | struct bheap ready_queue; |
78 | }; | 80 | }; |
diff --git a/litmus/sched_edf_os.c b/litmus/sched_edf_os.c index 1c633b591412..ba049adc8154 100644 --- a/litmus/sched_edf_os.c +++ b/litmus/sched_edf_os.c | |||
@@ -40,8 +40,8 @@ DEFINE_PER_CPU(edfos_domain_t, edfos_domains); | |||
40 | #define wrong_cpu(t) is_migrat_task((t)) \ | 40 | #define wrong_cpu(t) is_migrat_task((t)) \ |
41 | && task_cpu((t)) != get_partition((t)) | 41 | && task_cpu((t)) != get_partition((t)) |
42 | /* Manipulate share for current cpu */ | 42 | /* Manipulate share for current cpu */ |
43 | #define cur_cpu_fract_num(t) edfos_params(t).fraction[0][get_partition(t)] | 43 | #define cur_cpu_fract_num(t) edfos_params(t).fraction[get_partition(t)][0] |
44 | #define cur_cpu_fract_den(t) edfos_params(t).fraction[1][get_partition(t)] | 44 | #define cur_cpu_fract_den(t) edfos_params(t).fraction[get_partition(t)][1] |
45 | /* Get job number for current cpu */ | 45 | /* Get job number for current cpu */ |
46 | #define cur_cpu_job_no(t) \ | 46 | #define cur_cpu_job_no(t) \ |
47 | tsk_rt(t)->semi_part.cpu_job_no[get_partition(t)] | 47 | tsk_rt(t)->semi_part.cpu_job_no[get_partition(t)] |
@@ -293,8 +293,8 @@ static int next_cpu_for_job(struct task_struct *t) | |||
293 | &edfos_params(t).release_queue); | 293 | &edfos_params(t).release_queue); |
294 | cpu = ((int*)node->value) - edfos_params(t).heap_data; | 294 | cpu = ((int*)node->value) - edfos_params(t).heap_data; |
295 | *((int*)node->value) = compute_pfair_deadline( | 295 | *((int*)node->value) = compute_pfair_deadline( |
296 | edfos_params(t).fraction[0][cpu], | 296 | edfos_params(t).fraction[cpu][0], |
297 | edfos_params(t).fraction[1][cpu], | 297 | edfos_params(t).fraction[cpu][1], |
298 | tsk_rt(t)->semi_part.cpu_job_no[cpu] + 1); | 298 | tsk_rt(t)->semi_part.cpu_job_no[cpu] + 1); |
299 | bheap_insert(fakepfair_ready_order, | 299 | bheap_insert(fakepfair_ready_order, |
300 | &edfos_params(t).ready_queue, node); | 300 | &edfos_params(t).ready_queue, node); |
@@ -307,16 +307,16 @@ static int next_cpu_for_job(struct task_struct *t) | |||
307 | &edfos_params(t).ready_queue); | 307 | &edfos_params(t).ready_queue); |
308 | cpu = ((int*)node->value) - edfos_params(t).heap_data; | 308 | cpu = ((int*)node->value) - edfos_params(t).heap_data; |
309 | 309 | ||
310 | next_rel = compute_pfair_release(edfos_params(t).fraction[0][cpu], | 310 | next_rel = compute_pfair_release(edfos_params(t).fraction[cpu][0], |
311 | edfos_params(t).fraction[1][cpu], | 311 | edfos_params(t).fraction[cpu][1], |
312 | tsk_rt(t)->semi_part.cpu_job_no[cpu] | 312 | tsk_rt(t)->semi_part.cpu_job_no[cpu] |
313 | + 1); | 313 | + 1); |
314 | if (next_rel <= tsk_rt(t)->job_params.job_no) | 314 | if (next_rel <= tsk_rt(t)->job_params.job_no) |
315 | { | 315 | { |
316 | /* Next subtask already released. */ | 316 | /* Next subtask already released. */ |
317 | (*(int*)node->value) = compute_pfair_deadline( | 317 | (*(int*)node->value) = compute_pfair_deadline( |
318 | edfos_params(t).fraction[0][cpu], | 318 | edfos_params(t).fraction[cpu][0], |
319 | edfos_params(t).fraction[1][cpu], | 319 | edfos_params(t).fraction[cpu][1], |
320 | tsk_rt(t)->semi_part.cpu_job_no[cpu] + | 320 | tsk_rt(t)->semi_part.cpu_job_no[cpu] + |
321 | 1); | 321 | 1); |
322 | bheap_insert(fakepfair_ready_order, | 322 | bheap_insert(fakepfair_ready_order, |
@@ -485,11 +485,11 @@ static void edfos_task_new(struct task_struct * t, int on_rq, int running) | |||
485 | 485 | ||
486 | for (i = 0; i < NR_CPUS; i++) | 486 | for (i = 0; i < NR_CPUS; i++) |
487 | { | 487 | { |
488 | if (edfos_params(t).fraction[0][i] > 0) | 488 | if (edfos_params(t).fraction[i][0] > 0) |
489 | { | 489 | { |
490 | edfos_params(t).heap_data[i] = compute_pfair_deadline( | 490 | edfos_params(t).heap_data[i] = compute_pfair_deadline( |
491 | edfos_params(t).fraction[0][i], | 491 | edfos_params(t).fraction[i][0], |
492 | edfos_params(t).fraction[1][i], 0); | 492 | edfos_params(t).fraction[i][1], 0); |
493 | bheap_add(fakepfair_ready_order, | 493 | bheap_add(fakepfair_ready_order, |
494 | &edfos_params(t).ready_queue, | 494 | &edfos_params(t).ready_queue, |
495 | &edfos_params(t).heap_data[i], GFP_ATOMIC); | 495 | &edfos_params(t).heap_data[i], GFP_ATOMIC); |