]> rtime.felk.cvut.cz Git - hercules2020/jailhouse-build.git/commitdiff
memguard-test: Do not intermix test results from prallel threads
authorMichal Sojka <michal.sojka@cvut.cz>
Tue, 6 Nov 2018 13:11:42 +0000 (14:11 +0100)
committerMichal Sojka <michal.sojka@cvut.cz>
Tue, 6 Nov 2018 13:11:42 +0000 (14:11 +0100)
test/memguard-test.c

index 1a88f88044c3f06216df2f0a301878a3df15797b..934e1bfd0cb99c12933bd23064cd3571a3d7f21d 100644 (file)
@@ -143,16 +143,21 @@ static void print_test_info(uint64_t timeout_us, uint64_t mem_budget, uint64_t f
        WVPASS((retval & MGRET_ERROR_MASK) == 0);
 }
 
-#define MGTEST(timeout_us, mem_budget, flags, code)                    \
+pthread_mutex_t wvtest_lock = PTHREAD_MUTEX_INITIALIZER;
+
+#define MGTEST(timeout_us, mem_budget, flags, code)                    \
        ({                                                              \
                long retval;                                            \
                retval = memguard(timeout_us, mem_budget, flags);       \
                code;                                                   \
                retval = memguard(0, 0, 0);                             \
+               pthread_mutex_lock(&wvtest_lock);                       \
                print_test_info(timeout_us, mem_budget, flags, retval, #code); \
                mgret(retval);                                          \
        })
 
+#define MGTESTEND() pthread_mutex_unlock(&wvtest_lock)
+
 void *test_thread(void *ptr)
 {
        cpu_set_t set;
@@ -176,69 +181,85 @@ void *test_thread(void *ptr)
                r = MGTEST(5000, 10000, flags, compute_kernel(1000));
                WVPASS(!r.time_ovf);
                WVPASS(r.time > 900);
+               MGTESTEND();
 
                r = MGTEST(500, 10000, flags, compute_kernel(1000));
                WVPASS(r.time_ovf);
                WVPASS(r.time > 900);
+               MGTESTEND();
 
                r = MGTEST(5000, 10000, flags, compute_kernel(2000));
                WVPASS(!r.time_ovf);
                WVPASS(r.time > 1900);
+               MGTESTEND();
 
                r = MGTEST(500, 10000, flags, compute_kernel(2000));
                WVPASS(r.time_ovf);
                WVPASS(r.time > 1900);
+               MGTESTEND();
 
                ///////////////////////////////////////////////////////
                r = MGTEST(100000, 500000, flags, read_memory(100000));
                WVPASS(!r.mem_ovf);
                WVPASS(r.mem >= 90000);
+               MGTESTEND();
 
                r = MGTEST(100000, 50000,  flags, read_memory(100000));
                WVPASS(r.mem_ovf);
                WVPASS(r.mem >= 90000);
+               MGTESTEND();
 
                r = MGTEST(100000, 500000, flags, read_memory_rnd(100000));
                WVPASS(!r.mem_ovf);
                WVPASS(r.mem >= 90000);
+               MGTESTEND();
 
                r = MGTEST(100000, 50000,  flags, read_memory_rnd(100000));
                WVPASS(r.mem_ovf);
                WVPASS(r.mem >= 90000);
+               MGTESTEND();
 
                r = MGTEST(100000, 500000, flags, write_memory(100000));
                WVPASS(!r.mem_ovf);
                WVPASS(r.mem >= 90000);
+               MGTESTEND();
 
                r = MGTEST(100000, 50000,  flags, write_memory(100000));
                WVPASS(r.mem_ovf);
                WVPASS(r.mem >= 90000);
+               MGTESTEND();
 
 
                ///////////////////////////////////////////////////////
                r = MGTEST(100000, 5000000, flags, read_memory(1000000));
                WVPASS(!r.mem_ovf);
                WVPASS(r.mem >= 900000);
+               MGTESTEND();
 
                r = MGTEST(100000, 500000,  flags, read_memory(1000000));
                WVPASS(r.mem_ovf);
                WVPASS(r.mem >= 900000);
+               MGTESTEND();
 
                r = MGTEST(100000, 5000000, flags, read_memory_rnd(1000000));
                WVPASS(!r.mem_ovf);
                WVPASS(r.mem >= 900000);
+               MGTESTEND();
 
                r = MGTEST(100000, 500000,  flags, read_memory_rnd(1000000));
                WVPASS(r.mem_ovf);
                WVPASS(r.mem >= 900000);
+               MGTESTEND();
 
                r = MGTEST(100000, 5000000, flags, write_memory(1000000));
                WVPASS(!r.mem_ovf);
                WVPASS(r.mem >= 900000);
+               MGTESTEND();
 
                r = MGTEST(100000, 500000,  flags, write_memory(1000000));
                WVPASS(r.mem_ovf);
                WVPASS(r.mem >= 900000);
+               MGTESTEND();
 
                printf("\n");
        }
@@ -247,10 +268,15 @@ void *test_thread(void *ptr)
        struct mg_ret r1, r2, r3;
        r1 = MGTEST(10000, 9000, MGF_PERIODIC | MGF_MASK_INT, read_memory(100000));
        WVPASS(r1.time > 100*1000);
+       MGTESTEND();
+
        r2 = MGTEST(10000, 3000, MGF_PERIODIC | MGF_MASK_INT, read_memory(100000));
        WVPASS(r2.time > 2 * r1.time);
+       MGTESTEND();
+
        r3 = MGTEST(10000, 1000, MGF_PERIODIC | MGF_MASK_INT, read_memory(100000));
        WVPASS(r3.time > 2 * r2.time);
+       MGTESTEND();
 
        return NULL;
 }