bool write;\r
unsigned ofs;\r
bool use_cycles; /* instead of ns */\r
+ unsigned repeats;\r
};\r
\r
struct s {\r
}\r
\r
#ifdef JAILHOUSE\r
+const void * image_end;\r
+\r
void inmate_main(void)\r
#else //Linux\r
int main(int argc, char *argv[])\r
.write = false,\r
.ofs = 0,\r
.use_cycles = false, // i.e. use nanoseconds /\r
+ .repeats = 1\r
};\r
#ifdef JAILHOUSE\r
//initialize UART\r
\r
printk("cmdline opts: '%s'\n", cmdline);\r
comm_region->pm_timer_address = 0x408;\r
+\r
//parse cmdline\r
cfg.read_count = cmdline_parse_int("-c", cfg.read_count);\r
+ cfg.repeats = cmdline_parse_int("-R", cfg.repeats);\r
cfg.ofs = cmdline_parse_int("-o", cfg.ofs);\r
cfg.sequential = !cmdline_parse_bool("-r");\r
cfg.size = cmdline_parse_int("-s", cfg.size);\r
tsc_freq % 1000);\r
\r
u8 * start_memreg = (u8 *) array;\r
-\r
- while ( ((u64) start_memreg )< 0x4000000) {\r
+ u64 end_memreg_addr = (u64) &image_end;\r
+ while ( ((u64) start_memreg )< end_memreg_addr) {\r
//printk("%p\n",start_memreg);\r
map_range(start_memreg, HUGE_PAGE_SIZE, MAP_CACHED);\r
start_memreg += HUGE_PAGE_SIZE;\r
CPU_ZERO(&cfg.cpu_set);\r
\r
int opt;\r
- while ((opt = getopt(argc, argv, "c:C:o:rs:t:wy")) != -1) {\r
+ while ((opt = getopt(argc, argv, "c:C:o:rs:t:wyR:")) != -1) {\r
switch (opt) {\r
case 'c':\r
cfg.read_count = atol(optarg);\r
case 'y':\r
cfg.use_cycles = true;\r
break;\r
+ case 'R':\r
+ cfg.repeats = atol(optarg);\r
+ break;\r
default: // '?' //\r
fprintf(stderr, "Usage: %s ... TODO\n", argv[0]);\r
exit(1);\r
if (cfg.use_cycles)\r
ccntr_init();\r
\r
- if (cfg.size != 0) {\r
- run_benchmark(&cfg);\r
- } else {\r
- unsigned order, size, step;\r
- for (order = 10; order <= 24; order++) {\r
- for (step = 0; step < 2; step++) {\r
- size = 1 << order;\r
- if (step == 1)\r
- size += size / 2;\r
-\r
- cfg.size = size;\r
- run_benchmark(&cfg);\r
+ for (;cfg.repeats > 0; cfg.repeats--) {\r
+ if (cfg.size != 0) {\r
+ run_benchmark(&cfg);\r
+ } else {\r
+ unsigned order, size, step;\r
+ for (order = 10; order <= 24; order++) {\r
+ for (step = 0; step < 2; step++) {\r
+ size = 1 << order;\r
+ if (step == 1)\r
+ size += size / 2;\r
+\r
+ cfg.size = size;\r
+ run_benchmark(&cfg);\r
+ }\r
}\r
+ cfg.size = 0;\r
}\r
}\r
\r
+\r
#ifndef JAILHOUSE\r
return 0;\r
#else\r
comm_region->cell_state = JAILHOUSE_CELL_SHUT_DOWN;\r
- printk("done!");\r
+ printk("done!\n");\r
#endif\r
}\r