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 <wangjingy...@huawei.com>
---
 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},
 };
 
 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


_______________________________________________
kvmarm mailing list
kvmarm@lists.cs.columbia.edu
https://lists.cs.columbia.edu/mailman/listinfo/kvmarm

Reply via email to