From f8428ba547bd70398f2fe0379a4fc5e2c2983066 Mon Sep 17 00:00:00 2001 From: Andrea Bastoni Date: Tue, 15 Jun 2010 16:35:17 -0400 Subject: [EDF-fm] Add rt_launch_edffm and support for edffm task creation --- src/task.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'src/task.c') diff --git a/src/task.c b/src/task.c index 4d237bd..905ab9c 100644 --- a/src/task.c +++ b/src/task.c @@ -40,6 +40,35 @@ int __launch_rt_task(rt_fn_t rt_prog, void *rt_arg, rt_setup_fn_t setup, return rt_task; } +int __create_rt_task_edffm(rt_fn_t rt_prog, void *arg, int cpu, int wcet, + int period, lt_t *frac1, lt_t *frac2, + int cpu1, int cpu2, task_class_t class) +{ + struct rt_task params; + params.cpu = cpu; + params.period = period; + params.exec_cost = wcet; + params.cls = class; + params.phase = 0; + /* enforce budget for tasks that might not use sleep_next_period() */ + params.budget_policy = QUANTUM_ENFORCEMENT; + + /* edf-fm check on denominators for migratory tasks */ + if (frac1[1] != 0 && frac2[1] != 0) { + /* edf-fm migrat task */ + params.nr_cpus = 1; + params.cpus[0] = cpu1; + params.cpus[1] = cpu2; + params.fraction[0][0] = frac1[0]; + params.fraction[1][0] = frac1[1]; + params.fraction[0][1] = frac2[0]; + params.fraction[1][1] = frac2[1]; + } + + return __launch_rt_task(rt_prog, arg, + (rt_setup_fn_t) set_rt_task_param, ¶ms); +} + int __create_rt_task(rt_fn_t rt_prog, void *arg, int cpu, int wcet, int period, task_class_t class) { -- cgit v1.2.2