diff options
author | Andrea Bastoni <bastoni@cs.unc.edu> | 2010-09-22 13:41:43 -0400 |
---|---|---|
committer | Bjoern B. Brandenburg <bbb@cs.unc.edu> | 2011-01-26 18:20:24 -0500 |
commit | 128da49ce7b85ea02f98618706a52c5f73a3f1d0 (patch) | |
tree | 7e2ea270047a03ddb1e8b70dbc450198609f1cdd | |
parent | 2fbbb7df71d6502dd229772b7ca8d577086e5349 (diff) |
Correclty invoking set_rt_param syscall.
-rw-r--r-- | bin/rt_launch_edfwm.c | 46 | ||||
-rw-r--r-- | bin/rtspin_edfwm.c | 42 |
2 files changed, 43 insertions, 45 deletions
diff --git a/bin/rt_launch_edfwm.c b/bin/rt_launch_edfwm.c index 9ef3880..b5a972c 100644 --- a/bin/rt_launch_edfwm.c +++ b/bin/rt_launch_edfwm.c | |||
@@ -70,7 +70,7 @@ int parse_edfwm_slice(FILE *ts, int slices_no, int task_id, | |||
70 | return -1; | 70 | return -1; |
71 | } | 71 | } |
72 | } | 72 | } |
73 | return 1; | 73 | return 0; |
74 | } | 74 | } |
75 | 75 | ||
76 | /* Custom format to read parameters for tasks from a plain text file: | 76 | /* Custom format to read parameters for tasks from a plain text file: |
@@ -93,30 +93,29 @@ int parse_edfwm_ts_file(FILE *ts, struct rt_task *rt) | |||
93 | ret = fscanf(ts, "%d %lf %lf %lf %d %d\n", | 93 | ret = fscanf(ts, "%d %lf %lf %lf %d %d\n", |
94 | &task_id, &fwcet, &fperiod, &fphase, &cpu, &sliceno); | 94 | &task_id, &fwcet, &fperiod, &fphase, &cpu, &sliceno); |
95 | 95 | ||
96 | if (ret != EOF) { | 96 | if (ferror(ts)) |
97 | goto err; | ||
97 | 98 | ||
98 | rt->exec_cost = fms_to_ns(fwcet); | 99 | rt->exec_cost = fms_to_ns(fwcet); |
99 | rt->period = fms_to_ns(fperiod); | 100 | rt->period = fms_to_ns(fperiod); |
100 | rt->phase = fms_to_ns(fphase); | 101 | rt->phase = fms_to_ns(fphase); |
101 | rt->cpu = cpu; | 102 | rt->cpu = cpu; |
102 | rt->cls = RT_CLASS_HARD; | 103 | rt->cls = RT_CLASS_HARD; |
103 | rt->budget_policy = PRECISE_ENFORCEMENT; | 104 | rt->budget_policy = PRECISE_ENFORCEMENT; |
104 | 105 | ||
105 | printf("(tid, wcet, period, ph, cpu, slices) = " | 106 | printf("(tid, wcet, period, ph, cpu, slices) = " |
106 | "(%d, %llu, %llu, %llu, %u, %u)\n", | 107 | "(%d, %llu, %llu, %llu, %u, %u)\n", |
107 | task_id, rt->exec_cost, rt->period, rt->phase, cpu, sliceno); | 108 | task_id, rt->exec_cost, rt->period, rt->phase, cpu, sliceno); |
108 | if (sliceno > 0) { | 109 | |
109 | memset(&rt->semi_part, 0, sizeof(struct edf_wm_params)); | 110 | if (sliceno > 0) { |
110 | ret = parse_edfwm_slice(ts, sliceno, task_id, | 111 | memset(&rt->semi_part, 0, sizeof(struct edf_wm_params)); |
112 | ret = parse_edfwm_slice(ts, sliceno, task_id, | ||
111 | (struct edf_wm_params*) &rt->semi_part); | 113 | (struct edf_wm_params*) &rt->semi_part); |
112 | if (ret < 0) | 114 | if (ret < 0) |
113 | goto err; | 115 | goto err; |
114 | } | ||
115 | } | 116 | } |
116 | if (ferror(ts)) | ||
117 | goto err; | ||
118 | 117 | ||
119 | return EOF; | 118 | return 0; |
120 | 119 | ||
121 | err: | 120 | err: |
122 | fprintf(stderr, "Error parsing file\n"); | 121 | fprintf(stderr, "Error parsing file\n"); |
@@ -125,7 +124,7 @@ err: | |||
125 | 124 | ||
126 | #define OPTSTR "w" | 125 | #define OPTSTR "w" |
127 | 126 | ||
128 | int main(int argc, char** argv) | 127 | int main(int argc, char** argv) |
129 | { | 128 | { |
130 | int ret; | 129 | int ret; |
131 | int wait = 0; | 130 | int wait = 0; |
@@ -162,11 +161,11 @@ int main(int argc, char** argv) | |||
162 | 161 | ||
163 | memset(&rt, 0, sizeof(struct rt_task)); | 162 | memset(&rt, 0, sizeof(struct rt_task)); |
164 | 163 | ||
165 | while (parse_edfwm_ts_file(file, &rt) != EOF) { | 164 | if (parse_edfwm_ts_file(file, &rt) < 0) |
165 | bail_out("Could not parse file\n"); | ||
166 | 166 | ||
167 | if (sporadic_task_ns_semi(&rt) < 0) | 167 | if (sporadic_task_ns_semi(&rt) < 0) |
168 | bail_out("could not setup rt task params"); | 168 | bail_out("could not setup rt task params"); |
169 | } | ||
170 | 169 | ||
171 | fclose(file); | 170 | fclose(file); |
172 | 171 | ||
@@ -181,3 +180,4 @@ int main(int argc, char** argv) | |||
181 | 180 | ||
182 | return 0; | 181 | return 0; |
183 | } | 182 | } |
183 | |||
diff --git a/bin/rtspin_edfwm.c b/bin/rtspin_edfwm.c index 11216fe..200fb4c 100644 --- a/bin/rtspin_edfwm.c +++ b/bin/rtspin_edfwm.c | |||
@@ -168,7 +168,7 @@ int parse_edfwm_slice(FILE *ts, int slices_no, int task_id, | |||
168 | return -1; | 168 | return -1; |
169 | } | 169 | } |
170 | } | 170 | } |
171 | return 1; | 171 | return 0; |
172 | } | 172 | } |
173 | 173 | ||
174 | /* Custom format to read parameters for tasks from a plain text file: | 174 | /* Custom format to read parameters for tasks from a plain text file: |
@@ -191,30 +191,28 @@ int parse_edfwm_ts_file(FILE *ts, struct rt_task *rt) | |||
191 | ret = fscanf(ts, "%d %lf %lf %lf %d %d\n", | 191 | ret = fscanf(ts, "%d %lf %lf %lf %d %d\n", |
192 | &task_id, &fwcet, &fperiod, &fphase, &cpu, &sliceno); | 192 | &task_id, &fwcet, &fperiod, &fphase, &cpu, &sliceno); |
193 | 193 | ||
194 | if (ret != EOF) { | 194 | if (ferror(ts)) |
195 | goto err; | ||
195 | 196 | ||
196 | rt->exec_cost = fms_to_ns(fwcet); | 197 | rt->exec_cost = fms_to_ns(fwcet); |
197 | rt->period = fms_to_ns(fperiod); | 198 | rt->period = fms_to_ns(fperiod); |
198 | rt->phase = fms_to_ns(fphase); | 199 | rt->phase = fms_to_ns(fphase); |
199 | rt->cpu = cpu; | 200 | rt->cpu = cpu; |
200 | rt->cls = RT_CLASS_HARD; | 201 | rt->cls = RT_CLASS_HARD; |
201 | rt->budget_policy = PRECISE_ENFORCEMENT; | 202 | rt->budget_policy = PRECISE_ENFORCEMENT; |
202 | 203 | ||
203 | printf("(tid, wcet, period, ph, cpu, slices) = " | 204 | printf("(tid, wcet, period, ph, cpu, slices) = " |
204 | "(%d, %llu, %llu, %llu, %u, %u)\n", | 205 | "(%d, %llu, %llu, %llu, %u, %u)\n", |
205 | task_id, rt->exec_cost, rt->period, rt->phase, cpu, sliceno); | 206 | task_id, rt->exec_cost, rt->period, rt->phase, cpu, sliceno); |
206 | if (sliceno > 0) { | 207 | if (sliceno > 0) { |
207 | memset(&rt->semi_part, 0, sizeof(struct edf_wm_params)); | 208 | memset(&rt->semi_part, 0, sizeof(struct edf_wm_params)); |
208 | ret = parse_edfwm_slice(ts, sliceno, task_id, | 209 | ret = parse_edfwm_slice(ts, sliceno, task_id, |
209 | (struct edf_wm_params*) &rt->semi_part); | 210 | (struct edf_wm_params*) &rt->semi_part); |
210 | if (ret < 0) | 211 | if (ret < 0) |
211 | goto err; | 212 | goto err; |
212 | } | ||
213 | } | 213 | } |
214 | if (ferror(ts)) | ||
215 | goto err; | ||
216 | 214 | ||
217 | return EOF; | 215 | return 0; |
218 | 216 | ||
219 | err: | 217 | err: |
220 | fprintf(stderr, "Error parsing file\n"); | 218 | fprintf(stderr, "Error parsing file\n"); |
@@ -287,11 +285,11 @@ int main(int argc, char** argv) | |||
287 | 285 | ||
288 | memset(&rt, 0, sizeof(struct rt_task)); | 286 | memset(&rt, 0, sizeof(struct rt_task)); |
289 | 287 | ||
290 | while (parse_edfwm_ts_file(file, &rt) != EOF) { | 288 | if (parse_edfwm_ts_file(file, &rt) < 0) |
289 | bail_out("Could not parse file\n"); | ||
291 | 290 | ||
292 | if (sporadic_task_ns_semi(&rt) < 0) | 291 | if (sporadic_task_ns_semi(&rt) < 0) |
293 | bail_out("could not setup rt task params"); | 292 | bail_out("could not setup rt task params"); |
294 | } | ||
295 | 293 | ||
296 | fclose(file); | 294 | fclose(file); |
297 | 295 | ||