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> Reviewed-by: Eric Auger <eric.auger@xxxxxxxxxx> --- arm/micro-bench.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/arm/micro-bench.c b/arm/micro-bench.c index 93bd855..09d9d53 100644 --- a/arm/micro-bench.c +++ b/arm/micro-bench.c @@ -22,6 +22,7 @@ #include <asm/gic.h> #include <asm/gic-v3-its.h> +#define NS_5_SECONDS (5 * 1000 * 1000 * 1000UL) static u32 cntfrq; static volatile bool irq_ready, irq_received; @@ -267,23 +268,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 < NS_5_SECONDS) { + 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