diff options
author | Andrew Waterman <andrew@sifive.com> | 2017-10-19 17:29:14 -0700 |
---|---|---|
committer | Andrew Waterman <andrew@sifive.com> | 2017-10-19 17:29:14 -0700 |
commit | 4c64de3213e7a08e4097970b26a14ad835cabfab (patch) | |
tree | 1b108db2e29ddd62ea4374fb468ec48210927369 | |
parent | fb4e31229fb072297dad9fcdf2c67b053c5d0322 (diff) | |
download | pk-4c64de3213e7a08e4097970b26a14ad835cabfab.zip pk-4c64de3213e7a08e4097970b26a14ad835cabfab.tar.gz pk-4c64de3213e7a08e4097970b26a14ad835cabfab.tar.bz2 |
Order __page_alloc before writing vmrs
-rw-r--r-- | pk/mmap.c | 8 |
1 files changed, 6 insertions, 2 deletions
@@ -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) { |