aboutsummaryrefslogtreecommitdiffstats
path: root/src/task.c
diff options
context:
space:
mode:
authorAndrea Bastoni <bastoni@cs.unc.edu>2010-06-15 16:35:17 -0400
committerBjoern B. Brandenburg <bbb@cs.unc.edu>2011-01-26 18:20:23 -0500
commitf8428ba547bd70398f2fe0379a4fc5e2c2983066 (patch)
tree212910d8954e44401b48fa4cd26ac6683d4c354a /src/task.c
parent0a06230478a52a18d433735305c2cb6fc6de68da (diff)
[EDF-fm] Add rt_launch_edffm and support for edffm task creation
Diffstat (limited to 'src/task.c')
-rw-r--r--src/task.c29
1 files changed, 29 insertions, 0 deletions
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,
40 return rt_task; 40 return rt_task;
41} 41}
42 42
43int __create_rt_task_edffm(rt_fn_t rt_prog, void *arg, int cpu, int wcet,
44 int period, lt_t *frac1, lt_t *frac2,
45 int cpu1, int cpu2, task_class_t class)
46{
47 struct rt_task params;
48 params.cpu = cpu;
49 params.period = period;
50 params.exec_cost = wcet;
51 params.cls = class;
52 params.phase = 0;
53 /* enforce budget for tasks that might not use sleep_next_period() */
54 params.budget_policy = QUANTUM_ENFORCEMENT;
55
56 /* edf-fm check on denominators for migratory tasks */
57 if (frac1[1] != 0 && frac2[1] != 0) {
58 /* edf-fm migrat task */
59 params.nr_cpus = 1;
60 params.cpus[0] = cpu1;
61 params.cpus[1] = cpu2;
62 params.fraction[0][0] = frac1[0];
63 params.fraction[1][0] = frac1[1];
64 params.fraction[0][1] = frac2[0];
65 params.fraction[1][1] = frac2[1];
66 }
67
68 return __launch_rt_task(rt_prog, arg,
69 (rt_setup_fn_t) set_rt_task_param, &params);
70}
71
43int __create_rt_task(rt_fn_t rt_prog, void *arg, int cpu, int wcet, int period, 72int __create_rt_task(rt_fn_t rt_prog, void *arg, int cpu, int wcet, int period,
44 task_class_t class) 73 task_class_t class)
45{ 74{