aboutsummaryrefslogtreecommitdiffstats
path: root/src
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
parent82ad501859febc4285882d8268982a21c40e84d9 (diff)
Add library support for creating EDF-os tasks
Diffstat (limited to 'src')
-rw-r--r--src/litmus.c28
-rw-r--r--src/task.c30
2 files changed, 58 insertions, 0 deletions
diff --git a/src/litmus.c b/src/litmus.c
index c0dae95..b0416c4 100644
--- a/src/litmus.c
+++ b/src/litmus.c
@@ -107,6 +107,34 @@ int sporadic_task_ns_edffm(lt_t e, lt_t p, lt_t phase, int cpu,
107 return set_rt_task_param(gettid(), &param); 107 return set_rt_task_param(gettid(), &param);
108} 108}
109 109
110int sporadic_task_ns_edfos(lt_t e, lt_t p, lt_t phase,
111 lt_t fracs[][2], task_class_t cls,
112 budget_policy_t budget_policy)
113{
114 struct rt_task param;
115 struct edfos_params os;
116 int ret, i;
117 os.migrat = 0;
118 os.first_cpu = UINT_MAX;
119 param.exec_cost = e;
120 param.period = p;
121 for (i = 0; i < NR_CPUS; i++) {
122 if (fracs[i][0] > 0) {
123 os.migrat++;
124 if (os.first_cpu == UINT_MAX)
125 os.first_cpu = i;
126 }
127 os.fraction[i][0] = fracs[i][0];
128 os.fraction[i][1] = fracs[i][1];
129 }
130 param.semi_part.os = os;
131 param.cls = cls;
132 param.phase = phase;
133 param.budget_policy = budget_policy;
134
135 return set_rt_task_param(gettid(), &param);
136}
137
110int sporadic_task_ns_npsf(lt_t e, lt_t p, lt_t phase, 138int sporadic_task_ns_npsf(lt_t e, lt_t p, lt_t phase,
111 int cpu, task_class_t cls, int npsf_id, 139 int cpu, task_class_t cls, int npsf_id,
112 budget_policy_t budget_policy, int set_cpu_set) 140 budget_policy_t budget_policy, int set_cpu_set)
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{