aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeremy Erickson <jerickso@cs.unc.edu>2013-05-02 17:20:07 -0400
committerJeremy Erickson <jerickso@cs.unc.edu>2013-05-02 17:20:07 -0400
commitc622ef53527c961a83c5c2dd0dc9b8c9c450a0be (patch)
tree664b8a6d097ffa7bf683a26f466ed96b35ffb7c4
parentbe1e926439953fc3ba403c28c37c0c8128567a4e (diff)
Change ordering of fraction array and add first_cpu back
-rw-r--r--include/litmus/rt_param.h4
-rw-r--r--litmus/sched_edf_os.c22
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
64struct edfos_params { 64struct 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);