aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Waterman <andrew@sifive.com>2017-10-19 17:29:14 -0700
committerAndrew Waterman <andrew@sifive.com>2017-10-19 17:29:14 -0700
commit4c64de3213e7a08e4097970b26a14ad835cabfab (patch)
tree1b108db2e29ddd62ea4374fb468ec48210927369
parentfb4e31229fb072297dad9fcdf2c67b053c5d0322 (diff)
downloadriscv-pk-4c64de3213e7a08e4097970b26a14ad835cabfab.zip
riscv-pk-4c64de3213e7a08e4097970b26a14ad835cabfab.tar.gz
riscv-pk-4c64de3213e7a08e4097970b26a14ad835cabfab.tar.bz2
Order __page_alloc before writing vmrs
-rw-r--r--pk/mmap.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/pk/mmap.c b/pk/mmap.c
index 94fecdd..1b995f4 100644
--- a/pk/mmap.c
+++ b/pk/mmap.c
@@ -40,10 +40,14 @@ static vmr_t* __vmr_alloc(uintptr_t addr, size_t length, file_t* file,
{
if (!vmrs) {
spinlock_lock(&vm_lock);
- if (!vmrs)
- vmrs = (vmr_t*)__page_alloc();
+ if (!vmrs) {
+ vmr_t* page = (vmr_t*)__page_alloc();
+ mb();
+ vmrs = page;
+ }
spinlock_unlock(&vm_lock);
}
+ mb();
for (vmr_t* v = vmrs; v < vmrs + MAX_VMR; v++) {
if (v->refcnt == 0) {