summaryrefslogtreecommitdiff
path: root/v/vm.c
diff options
context:
space:
mode:
authorAndrew Waterman <waterman@cs.berkeley.edu>2016-06-15 18:34:30 -0700
committerAndrew Waterman <waterman@cs.berkeley.edu>2016-06-15 18:59:39 -0700
commit260b6fff32036dcfc8299aa21dd7cd443b18bb6a (patch)
tree1795e3eab96364b622af81f98272fb512231116e /v/vm.c
parent4944be4d45cafabce0519f223124d2934b9dcac5 (diff)
downloadenv-260b6fff32036dcfc8299aa21dd7cd443b18bb6a.zip
env-260b6fff32036dcfc8299aa21dd7cd443b18bb6a.tar.gz
env-260b6fff32036dcfc8299aa21dd7cd443b18bb6a.tar.bz2
Speed up VM tests
Diffstat (limited to 'v/vm.c')
-rw-r--r--v/vm.c20
1 files changed, 12 insertions, 8 deletions
diff --git a/v/vm.c b/v/vm.c
index 9fc2ea4..2524363 100644
--- a/v/vm.c
+++ b/v/vm.c
@@ -59,18 +59,22 @@ void wtf()
terminate(3); \
} while(0)
-typedef struct { pte_t addr; void* next; } freelist_t;
-
-pte_t l1pt[PTES_PER_PT] __attribute__((aligned(PGSIZE)));
-pte_t user_l2pt[PTES_PER_PT] __attribute__((aligned(PGSIZE)));
-pte_t kernel_l2pt[PTES_PER_PT] __attribute__((aligned(PGSIZE)));
+#define l1pt pt[0]
+#define user_l2pt pt[1]
+#define kernel_l2pt pt[2]
#ifdef __riscv64
-pte_t user_l3pt[PTES_PER_PT] __attribute__((aligned(PGSIZE)));
-pte_t kernel_l3pt[PTES_PER_PT] __attribute__((aligned(PGSIZE)));
+# define NPT 5
+# define user_l3pt pt[3]
+# define kernel_l3pt pt[4]
#else
+# define NPT 3
# define user_l3pt user_l2pt
# define kernel_l3pt kernel_l2pt
#endif
+pte_t pt[NPT][PTES_PER_PT] __attribute__((aligned(PGSIZE)));
+
+typedef struct { pte_t addr; void* next; } freelist_t;
+
freelist_t user_mapping[MAX_TEST_PAGES];
freelist_t freelist_nodes[MAX_TEST_PAGES];
freelist_t *freelist_head, *freelist_tail;
@@ -88,7 +92,7 @@ void printhex(uint64_t x)
cputstring(str);
}
-void evict(unsigned long addr)
+static void evict(unsigned long addr)
{
assert(addr >= PGSIZE && addr < MAX_TEST_PAGES * PGSIZE);
addr = addr/PGSIZE*PGSIZE;