From 47e2b0889359877cb9a86c02c4bdf862fbd87338 Mon Sep 17 00:00:00 2001 From: Nathan Binkert Date: Wed, 3 Dec 2008 04:57:54 -0800 Subject: [PATCH] util/m5: Add a new function called pin to bind a program to a set of cores. This is not m5 specific and this currently only works in linux. --- util/m5/m5.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/util/m5/m5.c b/util/m5/m5.c index 5eb69ea36..7747fc0bc 100644 --- a/util/m5/m5.c +++ b/util/m5/m5.c @@ -28,6 +28,11 @@ * Authors: Nathan Binkert */ +#ifdef linux +#define _GNU_SOURCE +#include +#endif + #include #include #include @@ -168,6 +173,31 @@ do_sw99param(int argc, char *argv[]) (param >> 12) & 0xfff, (param >> 0) & 0xfff); } +#ifdef linux +void +do_pin(int argc, char *argv[]) +{ + if (argc < 2) + usage(); + + cpu_set_t mask; + CPU_ZERO(&mask); + + const char *sep = ","; + char *target = strtok(argv[0], sep); + while (target) { + CPU_SET(atoi(target), &mask); + target = strtok(NULL, sep); + } + + if (sched_setaffinity(0, sizeof(cpu_set_t), &mask) < 0) + err(1, "setaffinity"); + + execvp(argv[1], &argv[1]); + err(1, "execvp failed!"); +} +#endif + struct MainFunc { char *name; @@ -186,6 +216,9 @@ struct MainFunc mainfuncs[] = { { "loadsymbol", do_load_symbol, "
" }, { "initparam", do_initparam, "" }, { "sw99param", do_sw99param, "" }, +#ifdef linux + { "pin", do_pin, " [args ...]" } +#endif }; int numfuncs = sizeof(mainfuncs) / sizeof(mainfuncs[0]); -- 2.30.2