Besides using separate running times parameter, we add time limit for loop_test to make sure each test should be done in a certain time(5 sec here). Signed-off-by: Jingyi Wang <wangjingyi11@xxxxxxxxxx> --- arm/micro-bench.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/arm/micro-bench.c b/arm/micro-bench.c index 506d2f9..4c962b7 100644 --- a/arm/micro-bench.c +++ b/arm/micro-bench.c @@ -23,6 +23,7 @@ #include <asm/gic-v3-its.h> #define NTIMES (1U << 16) +#define MAX_NS (5 * 1000 * 1000 * 1000UL) static u32 cntfrq; @@ -258,22 +259,26 @@ static void loop_test(struct exit_test *test) uint64_t start, end, total_ticks, ntimes = 0; struct ns_time total_ns, avg_ns; + total_ticks = 0; if (test->prep) { if(!test->prep()) { printf("%s test skipped\n", test->name); return; } } - isb(); - start = read_sysreg(cntpct_el0); - while (ntimes < test->times) { + + while (ntimes < test->times && total_ns.ns < MAX_NS) { + isb(); + start = read_sysreg(cntpct_el0); test->exec(); + isb(); + end = read_sysreg(cntpct_el0); + ntimes++; + total_ticks += (end - start); + ticks_to_ns_time(total_ticks, &total_ns); } - isb(); - end = read_sysreg(cntpct_el0); - total_ticks = end - start; ticks_to_ns_time(total_ticks, &total_ns); avg_ns.ns = total_ns.ns / ntimes; avg_ns.ns_frac = total_ns.ns_frac / ntimes; -- 2.19.1