On Thu, Jul 02, 2020 at 11:01:30AM +0800, Jingyi Wang wrote: > For some test in micro-bench can be time consuming, we add a > micro-bench test parameter to allow each individual test to specify > its running times. > > Signed-off-by: Jingyi Wang <wangjingyi11@xxxxxxxxxx> > --- > arm/micro-bench.c | 25 ++++++++++++++----------- > 1 file changed, 14 insertions(+), 11 deletions(-) > > diff --git a/arm/micro-bench.c b/arm/micro-bench.c > index aeb60a7..506d2f9 100644 > --- a/arm/micro-bench.c > +++ b/arm/micro-bench.c > @@ -223,17 +223,18 @@ struct exit_test { > const char *name; > bool (*prep)(void); > void (*exec)(void); > + u32 times; > bool run; > }; > > static struct exit_test tests[] = { > - {"hvc", NULL, hvc_exec, true}, > - {"mmio_read_user", NULL, mmio_read_user_exec, true}, > - {"mmio_read_vgic", NULL, mmio_read_vgic_exec, true}, > - {"eoi", NULL, eoi_exec, true}, > - {"ipi", ipi_prep, ipi_exec, true}, > - {"ipi_hw", ipi_hw_prep, ipi_exec, true}, > - {"lpi", lpi_prep, lpi_exec, true}, > + {"hvc", NULL, hvc_exec, NTIMES, true}, > + {"mmio_read_user", NULL, mmio_read_user_exec, NTIMES, true}, > + {"mmio_read_vgic", NULL, mmio_read_vgic_exec, NTIMES, true}, > + {"eoi", NULL, eoi_exec, NTIMES, true}, > + {"ipi", ipi_prep, ipi_exec, NTIMES, true}, > + {"ipi_hw", ipi_hw_prep, ipi_exec, NTIMES, true}, > + {"lpi", lpi_prep, lpi_exec, NTIMES, true}, Now that we no longer use 'NTIMES' in functions we don't really need the define at all. We can just put 65536 directly into the table here for each test that needs 65536 times. Thanks, drew > }; > > struct ns_time { > @@ -254,7 +255,7 @@ static void ticks_to_ns_time(uint64_t ticks, struct ns_time *ns_time) > > static void loop_test(struct exit_test *test) > { > - uint64_t start, end, total_ticks, ntimes = NTIMES; > + uint64_t start, end, total_ticks, ntimes = 0; > struct ns_time total_ns, avg_ns; > > if (test->prep) { > @@ -265,15 +266,17 @@ static void loop_test(struct exit_test *test) > } > isb(); > start = read_sysreg(cntpct_el0); > - while (ntimes--) > + while (ntimes < test->times) { > test->exec(); > + ntimes++; > + } > 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; > + avg_ns.ns = total_ns.ns / ntimes; > + avg_ns.ns_frac = total_ns.ns_frac / ntimes; > > printf("%-30s%15" PRId64 ".%-15" PRId64 "%15" PRId64 ".%-15" PRId64 "\n", > test->name, total_ns.ns, total_ns.ns_frac, avg_ns.ns, avg_ns.ns_frac); > -- > 2.19.1 > >