diff options
author | Jonathan Herman <hermanjl@cs.unc.edu> | 2012-04-08 15:54:30 -0400 |
---|---|---|
committer | Jonathan Herman <hermanjl@cs.unc.edu> | 2012-04-08 15:54:30 -0400 |
commit | bffbb34c86e0d14aac65207aa55c5b769b2e4128 (patch) | |
tree | 384fe8ff2a9986bfeeed1305ab2ce5fe4aeb3c5d | |
parent | 7bcc57e302810ba4ad9f77588fbacc3e02385b45 (diff) |
Bespin can now be partitioned
-rw-r--r-- | bin/bespin.c | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/bin/bespin.c b/bin/bespin.c index f3b7e20..5c98a1f 100644 --- a/bin/bespin.c +++ b/bin/bespin.c | |||
@@ -40,7 +40,8 @@ static void usage(char *error) { | |||
40 | fprintf(stderr, "Error: %s\n", error); | 40 | fprintf(stderr, "Error: %s\n", error); |
41 | fprintf(stderr, | 41 | fprintf(stderr, |
42 | "Usage:\n" | 42 | "Usage:\n" |
43 | " bespin [-w] [-o] [-n] [-s seed] [-f res-time file] OS_TYPE DURATION\n" | 43 | " bespin [-w] [-o] [-n] [-p partition] " |
44 | "[-s seed] [-f res-time file] OS_TYPE DURATION\n" | ||
44 | "OS_TYPE is litmus or linux\n" | 45 | "OS_TYPE is litmus or linux\n" |
45 | "DURATION is milliseconds.\n"); | 46 | "DURATION is milliseconds.\n"); |
46 | exit(EXIT_FAILURE); | 47 | exit(EXIT_FAILURE); |
@@ -228,13 +229,13 @@ static int job(const lt_t exec_mean, const lt_t ia_mean, FILE *out_f, | |||
228 | } | 229 | } |
229 | } | 230 | } |
230 | 231 | ||
231 | static void setup_litmus_task(const double phase_ms) | 232 | static void setup_litmus_task(const double phase_ms, const int cpu) |
232 | { | 233 | { |
233 | const lt_t phase = phase_ms * __NS_PER_MS; | 234 | const lt_t phase = phase_ms * __NS_PER_MS; |
234 | int ret; | 235 | int ret; |
235 | 236 | ||
236 | /* Best-Effort task has no WCET or period, just use one */ | 237 | /* Best-Effort task has no WCET or period, just use one */ |
237 | ret = sporadic_task_ns(1, 1, phase, 0, RT_CLASS_BEST_EFFORT, | 238 | ret = sporadic_task_ns(1, 1, phase, cpu, RT_CLASS_BEST_EFFORT, |
238 | NO_ENFORCEMENT, 0); | 239 | NO_ENFORCEMENT, 0); |
239 | if (ret < 0) | 240 | if (ret < 0) |
240 | bail_out("could not setup rt task params"); | 241 | bail_out("could not setup rt task params"); |
@@ -246,7 +247,7 @@ static void setup_litmus_task(const double phase_ms) | |||
246 | bail_out("could not become RT task"); | 247 | bail_out("could not become RT task"); |
247 | } | 248 | } |
248 | 249 | ||
249 | #define OPTSTR "wnos:f:" | 250 | #define OPTSTR "p:wnos:f:" |
250 | 251 | ||
251 | int main(int argc, char** argv) | 252 | int main(int argc, char** argv) |
252 | { | 253 | { |
@@ -261,6 +262,8 @@ int main(int argc, char** argv) | |||
261 | int wait = 0; | 262 | int wait = 0; |
262 | int nice = 0; | 263 | int nice = 0; |
263 | int fifo = 0; | 264 | int fifo = 0; |
265 | int cpu = 0; | ||
266 | int migrate = 0; | ||
264 | struct sched_param param; | 267 | struct sched_param param; |
265 | 268 | ||
266 | progname = argv[0]; | 269 | progname = argv[0]; |
@@ -270,6 +273,10 @@ int main(int argc, char** argv) | |||
270 | case 'w': | 273 | case 'w': |
271 | wait = 1; | 274 | wait = 1; |
272 | break; | 275 | break; |
276 | case 'p': | ||
277 | cpu = atoi(optarg); | ||
278 | migrate = 1; | ||
279 | break; | ||
273 | case 'n': | 280 | case 'n': |
274 | nice = 1; | 281 | nice = 1; |
275 | break; | 282 | break; |
@@ -345,7 +352,14 @@ int main(int argc, char** argv) | |||
345 | setup_rng(seed); | 352 | setup_rng(seed); |
346 | 353 | ||
347 | if (using_os(LITMUS_STR, os_type)) { | 354 | if (using_os(LITMUS_STR, os_type)) { |
348 | setup_litmus_task(phase_ms); | 355 | |
356 | if (migrate) { | ||
357 | ret = be_migrate_to(cpu); | ||
358 | if (ret < 0) | ||
359 | bail_out("could not migrate to target partition"); | ||
360 | } | ||
361 | |||
362 | setup_litmus_task(phase_ms, cpu); | ||
349 | 363 | ||
350 | if (wait) { | 364 | if (wait) { |
351 | ret = wait_for_ts_release(); | 365 | ret = wait_for_ts_release(); |