aboutsummaryrefslogtreecommitdiffstats
path: root/src/task.c
diff options
context:
space:
mode:
authorJeremy Erickson <jerickso@cs.unc.edu>2013-05-02 17:21:47 -0400
committerJeremy Erickson <jerickso@cs.unc.edu>2013-05-02 17:21:47 -0400
commitece0c6e7b111f2761066b66ea1b34cb2854b3752 (patch)
treeaddbd65616d41d1d367d6a2f588ec14bcbc9343a /src/task.c
parent82ad501859febc4285882d8268982a21c40e84d9 (diff)
Add library support for creating EDF-os tasks
Diffstat (limited to 'src/task.c')
-rw-r--r--src/task.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/task.c b/src/task.c
index daf95ca..e618d9e 100644
--- a/src/task.c
+++ b/src/task.c
@@ -71,6 +71,36 @@ int __create_rt_task_edffm(rt_fn_t rt_prog, void *arg, int cpu, int wcet,
71 (rt_setup_fn_t) set_rt_task_param, &params); 71 (rt_setup_fn_t) set_rt_task_param, &params);
72} 72}
73 73
74int __create_rt_task_edfos(rt_fn_t rt_prog, void *arg, int wcet,
75 int period, lt_t fracs[][2], task_class_t class)
76{
77 struct rt_task params;
78 struct edfos_params os;
79 int i;
80 params.period = period;
81 params.exec_cost = wcet;
82 params.cls = class;
83 params.phase = 0;
84 /* enforce budget for tasks that might not use sleep_next_period() */
85 params.budget_policy = QUANTUM_ENFORCEMENT;
86
87 os.migrat = 0;
88 os.first_cpu = UINT_MAX;
89 for (i = 0; i < NR_CPUS; i++) {
90 if (fracs[i][0] > 0) {
91 os.migrat++;
92 if (os.first_cpu == UINT_MAX)
93 os.first_cpu = i;
94 }
95 os.fraction[i][0] = fracs[i][0];
96 os.fraction[i][1] = fracs[i][1];
97 }
98 params.semi_part.os = os;
99
100 return __launch_rt_task(rt_prog, arg,
101 (rt_setup_fn_t) set_rt_task_param, &params);
102}
103
74int __create_rt_task_npsf(rt_fn_t rt_prog, void *arg, int cpu, int wcet, 104int __create_rt_task_npsf(rt_fn_t rt_prog, void *arg, int cpu, int wcet,
75 int period, int npsf_id, task_class_t class) 105 int period, int npsf_id, task_class_t class)
76{ 106{