summaryrefslogtreecommitdiffstats
path: root/sys/vm/vm_map.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/vm/vm_map.c')
-rw-r--r--sys/vm/vm_map.c20
1 files changed, 19 insertions, 1 deletions
diff --git a/sys/vm/vm_map.c b/sys/vm/vm_map.c
index 752354a..8493478 100644
--- a/sys/vm/vm_map.c
+++ b/sys/vm/vm_map.c
@@ -318,6 +318,7 @@ static void
vmspace_container_reset(struct proc *p)
{
+#ifdef RACCT
PROC_LOCK(p);
racct_set(p, RACCT_DATA, 0);
racct_set(p, RACCT_STACK, 0);
@@ -325,6 +326,7 @@ vmspace_container_reset(struct proc *p)
racct_set(p, RACCT_MEMLOCK, 0);
racct_set(p, RACCT_VMEM, 0);
PROC_UNLOCK(p);
+#endif
}
static inline void
@@ -2708,7 +2710,15 @@ vm_map_entry_delete(vm_map_t map, vm_map_entry_t entry)
((object->flags & (OBJ_NOSPLIT|OBJ_ONEMAPPING)) == OBJ_ONEMAPPING ||
object == kernel_object || object == kmem_object)) {
vm_object_collapse(object);
- vm_object_page_remove(object, offidxstart, offidxend, FALSE);
+
+ /*
+ * The option OBJPR_NOTMAPPED can be passed here
+ * because vm_map_delete() already performed
+ * pmap_remove() on the only mapping to this range
+ * of pages.
+ */
+ vm_object_page_remove(object, offidxstart, offidxend,
+ OBJPR_NOTMAPPED);
if (object->type == OBJT_SWAP)
swap_pager_freespace(object, offidxstart, count);
if (offidxend >= object->size &&
@@ -3297,7 +3307,9 @@ vm_map_growstack(struct proc *p, vm_offset_t addr)
#ifdef notyet
uint64_t limit;
#endif
+#ifdef RACCT
int error;
+#endif
Retry:
PROC_LOCK(p);
@@ -3396,6 +3408,7 @@ Retry:
vm_map_unlock_read(map);
return (KERN_NO_SPACE);
}
+#ifdef RACCT
PROC_LOCK(p);
if (is_procstack &&
racct_set(p, RACCT_STACK, ctob(vm->vm_ssize) + grow_amount)) {
@@ -3404,6 +3417,7 @@ Retry:
return (KERN_NO_SPACE);
}
PROC_UNLOCK(p);
+#endif
/* Round up the grow amount modulo SGROWSIZ */
grow_amount = roundup (grow_amount, sgrowsiz);
@@ -3427,6 +3441,7 @@ Retry:
rv = KERN_NO_SPACE;
goto out;
}
+#ifdef RACCT
PROC_LOCK(p);
if (racct_set(p, RACCT_VMEM, map->size + grow_amount)) {
PROC_UNLOCK(p);
@@ -3435,6 +3450,7 @@ Retry:
goto out;
}
PROC_UNLOCK(p);
+#endif
if (vm_map_lock_upgrade(map))
goto Retry;
@@ -3534,6 +3550,7 @@ Retry:
}
out:
+#ifdef RACCT
if (rv != KERN_SUCCESS) {
PROC_LOCK(p);
error = racct_set(p, RACCT_VMEM, map->size);
@@ -3542,6 +3559,7 @@ out:
KASSERT(error == 0, ("decreasing RACCT_STACK failed"));
PROC_UNLOCK(p);
}
+#endif
return (rv);
}
OpenPOWER on IntegriCloud