aboutsummaryrefslogtreecommitdiff
path: root/sys/vm
diff options
context:
space:
mode:
authorKonstantin Belousov <kib@FreeBSD.org>2018-03-24 13:51:27 +0000
committerKonstantin Belousov <kib@FreeBSD.org>2018-03-24 13:51:27 +0000
commited9e8bc4681f06db333ea9d4a301de3e18f79ac1 (patch)
tree5395b7ee10496b75e070eea943a4c07d04a19942 /sys/vm
parent63b5d112b6d1fe36adf2f1c12e98df2c35117086 (diff)
Notes
Diffstat (limited to 'sys/vm')
-rw-r--r--sys/vm/vm_glue.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/sys/vm/vm_glue.c b/sys/vm/vm_glue.c
index 5546822e3a58..25db4ad18a4b 100644
--- a/sys/vm/vm_glue.c
+++ b/sys/vm/vm_glue.c
@@ -196,11 +196,16 @@ vslock(void *addr, size_t len)
#endif
error = vm_map_wire(&curproc->p_vmspace->vm_map, start, end,
VM_MAP_WIRE_SYSTEM | VM_MAP_WIRE_NOHOLES);
+ if (error == KERN_SUCCESS) {
+ curthread->td_vslock_sz += len;
+ return (0);
+ }
+
/*
* Return EFAULT on error to match copy{in,out}() behaviour
* rather than returning ENOMEM like mlock() would.
*/
- return (error == KERN_SUCCESS ? 0 : EFAULT);
+ return (EFAULT);
}
void
@@ -208,6 +213,8 @@ vsunlock(void *addr, size_t len)
{
/* Rely on the parameter sanity checks performed by vslock(). */
+ MPASS(curthread->td_vslock_sz >= len);
+ curthread->td_vslock_sz -= len;
(void)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);