summaryrefslogtreecommitdiff
path: root/src/sys
diff options
context:
space:
mode:
Diffstat (limited to 'src/sys')
-rw-r--r--src/sys/include/sys/proc.h2
-rw-r--r--src/sys/os/os_proc.c3
-rw-r--r--src/sys/vm/vm_map.c2
3 files changed, 7 insertions, 0 deletions
diff --git a/src/sys/include/sys/proc.h b/src/sys/include/sys/proc.h
index c31cc4c..c5b0fda 100644
--- a/src/sys/include/sys/proc.h
+++ b/src/sys/include/sys/proc.h
@@ -36,6 +36,7 @@
#include <sys/param.h>
#include <sys/queue.h>
#include <os/mac.h>
+#include <os/spinlock.h>
#include <os/filedesc.h>
#include <vm/vm.h>
#include <machine/pcb.h> /* standard */
@@ -66,6 +67,7 @@ struct proc {
struct syscall_domain scdom;
struct filedesc *fdtab[FD_MAX];
mac_level_t level;
+ struct spinlock maplist_lock;
TAILQ_HEAD(, vm_range) maplist;
TAILQ_ENTRY(proc) link;
};
diff --git a/src/sys/os/os_proc.c b/src/sys/os/os_proc.c
index 448402f..ef98ce2 100644
--- a/src/sys/os/os_proc.c
+++ b/src/sys/os/os_proc.c
@@ -127,7 +127,10 @@ proc_add_range(struct proc *procp, vaddr_t va, paddr_t pa, size_t len)
range->pa_base = pa;
range->va_base = va;
range->len = ALIGN_UP(len, PSIZE);
+
+ spinlock_acquire(&procp->maplist_lock);
TAILQ_INSERT_TAIL(&procp->maplist, range, link);
+ spinlock_release(&procp->maplist_lock);
return 0;
}
diff --git a/src/sys/vm/vm_map.c b/src/sys/vm/vm_map.c
index 277ff9a..c724168 100644
--- a/src/sys/vm/vm_map.c
+++ b/src/sys/vm/vm_map.c
@@ -126,7 +126,9 @@ vm_map(struct vm_vas *vas, struct mmu_map *spec, size_t len, int prot)
/* Add the range if we can */
if (self != NULL) {
+ spinlock_acquire(&self->maplist_lock);
proc_add_range(self, spec->va, spec->pa, len);
+ spinlock_release(&self->maplist_lock);
}
/* Place a guard page at the end */