aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJonathan Herman <hermanjl@cs.unc.edu>2012-04-08 15:54:30 -0400
committerJonathan Herman <hermanjl@cs.unc.edu>2012-04-08 15:54:30 -0400
commitbffbb34c86e0d14aac65207aa55c5b769b2e4128 (patch)
tree384fe8ff2a9986bfeeed1305ab2ce5fe4aeb3c5d
parent7bcc57e302810ba4ad9f77588fbacc3e02385b45 (diff)
Bespin can now be partitioned
-rw-r--r--bin/bespin.c24
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
231static void setup_litmus_task(const double phase_ms) 232static 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
251int main(int argc, char** argv) 252int 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();