summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/vm/vm_extern.h2
-rw-r--r--sys/vm/vm_glue.c29
2 files changed, 31 insertions, 0 deletions
diff --git a/sys/vm/vm_extern.h b/sys/vm/vm_extern.h
index ee71f81..07f28fa 100644
--- a/sys/vm/vm_extern.h
+++ b/sys/vm/vm_extern.h
@@ -88,6 +88,8 @@ void vmspace_unshare(struct proc *);
void vmspace_free(struct vmspace *);
void vmspace_exitfree(struct proc *);
void vnode_pager_setsize(struct vnode *, vm_ooffset_t);
+void vslock(void *, u_int);
+void vsunlock(void *, u_int);
void vm_object_print(/* db_expr_t */ long, boolean_t, /* db_expr_t */ long,
char *);
int vm_fault_quick(caddr_t v, int prot);
diff --git a/sys/vm/vm_glue.c b/sys/vm/vm_glue.c
index b1e1cdf..6e2872f 100644
--- a/sys/vm/vm_glue.c
+++ b/sys/vm/vm_glue.c
@@ -180,6 +180,35 @@ useracc(addr, len, rw)
}
/*
+ * MPSAFE
+ */
+void
+vslock(addr, len)
+ void *addr;
+ u_int len;
+{
+
+ vm_map_wire(&curproc->p_vmspace->vm_map, trunc_page((vm_offset_t)addr),
+ round_page((vm_offset_t)addr + len),
+ VM_MAP_WIRE_SYSTEM|VM_MAP_WIRE_NOHOLES);
+}
+
+/*
+ * MPSAFE
+ */
+void
+vsunlock(addr, len)
+ void *addr;
+ u_int len;
+{
+
+ vm_map_unwire(&curproc->p_vmspace->vm_map,
+ trunc_page((vm_offset_t)addr),
+ round_page((vm_offset_t)addr + len),
+ VM_MAP_WIRE_SYSTEM|VM_MAP_WIRE_NOHOLES);
+}
+
+/*
* Create the U area for a new process.
* This routine directly affects the fork perf for a process.
*/
OpenPOWER on IntegriCloud