1f5f95486329eac31845c272a6a38dc9196b7996
[barrelfish] / usr / tests / large_page / malloc_test.c
1 /**
2  * \file
3  * \brief Test program for large page code
4  */
5
6 /*
7  * Copyright (c) 2014, HP Labs.
8  * All rights reserved.
9  *
10  * This file is distributed under the terms in the attached LICENSE file.
11  * If you do not find this file, copies can be found by writing to:
12  * ETH Zurich D-INFK, Universitaetstr. 6, CH-8092 Zurich. Attn: Systems Group.
13  */
14
15 #include <barrelfish/barrelfish.h>
16 #include <barrelfish/sys_debug.h>
17
18 #define RUNS 2
19 // 128MB buffer
20 #define BUFSIZE (128UL*1024*1024)
21
22 int main(void)
23 {
24     void *bufs[RUNS];
25     for (int k = 0; k < RUNS; k++) {
26         // touch every 4k page in region
27         bufs[k] = malloc(BUFSIZE);
28         if (!bufs[k]) {
29             debug_printf("malloc %d FAILED\n", k);
30             break;
31         }
32         uint8_t *buf = bufs[k];
33         for (int i = 0; i < BUFSIZE / BASE_PAGE_SIZE; i++) {
34             buf[i*BASE_PAGE_SIZE] = i % 256;
35         }
36         // clear out caches
37         sys_debug_flush_cache();
38         int errors = 0;
39         for (int i = 0; i < BUFSIZE / BASE_PAGE_SIZE; i++) {
40             if (buf[i*BASE_PAGE_SIZE] != i % 256) {
41                 debug_printf("mismatch in page %d: expected %d, was %d\n",
42                         i, i % 256, buf[i*BASE_PAGE_SIZE]);
43                 errors++;
44             }
45         }
46         debug_printf("test %s\n", errors ? "FAILED" : "PASSED");
47         if (errors) {
48             debug_printf("  %d errors\n", errors);
49         }
50     }
51     for (int k = 0; k < RUNS; k++) {
52         debug_printf("bufs[%d] = %p\n", k, bufs[k]);
53     }
54     debug_dump_hw_ptables();
55     for (int k = 0; k < RUNS; k++) {
56         free(bufs[k]);
57     }
58     return 0;
59 }