Module Name: src
Committed By: para
Date: Sun Mar 4 14:28:49 UTC 2012
Modified Files:
src/sys/kern: subr_vmem.c
Log Message:
make accounting for vm_inuse sane
while here don't statically allocated for more caches then required
To generate a diff of this commit:
cvs rdiff -u -r1.72 -r1.73 src/sys/kern/subr_vmem.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/kern/subr_vmem.c
diff -u src/sys/kern/subr_vmem.c:1.72 src/sys/kern/subr_vmem.c:1.73
--- src/sys/kern/subr_vmem.c:1.72 Fri Feb 10 17:35:47 2012
+++ src/sys/kern/subr_vmem.c Sun Mar 4 14:28:49 2012
@@ -1,4 +1,4 @@
-/* $NetBSD: subr_vmem.c,v 1.72 2012/02/10 17:35:47 para Exp $ */
+/* $NetBSD: subr_vmem.c,v 1.73 2012/03/04 14:28:49 para Exp $ */
/*-
* Copyright (c)2006,2007,2008,2009 YAMAMOTO Takashi,
@@ -34,7 +34,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: subr_vmem.c,v 1.72 2012/02/10 17:35:47 para Exp $");
+__KERNEL_RCSID(0, "$NetBSD: subr_vmem.c,v 1.73 2012/03/04 14:28:49 para Exp $");
#if defined(_KERNEL)
#include "opt_ddb.h"
@@ -248,7 +248,8 @@ static LIST_HEAD(, vmem) vmem_list = LIS
#define BT_MAXFREE 64
#define STATIC_VMEM_COUNT 5
#define STATIC_BT_COUNT 200
-#define STATIC_QC_POOL_COUNT (VMEM_QCACHE_IDX_MAX + 1)
+/* must be equal or greater then qcache multiplier for kmem_va_arena */
+#define STATIC_QC_POOL_COUNT 8
static struct vmem static_vmems[STATIC_VMEM_COUNT];
static int static_vmem_count = STATIC_VMEM_COUNT;
@@ -474,6 +475,7 @@ bt_rembusy(vmem_t *vm, bt_t *bt)
{
KASSERT(vm->vm_nbusytag > 0);
+ vm->vm_inuse -= bt->bt_size;
vm->vm_nbusytag--;
LIST_REMOVE(bt, bt_hashlist);
}
@@ -488,6 +490,7 @@ bt_insbusy(vmem_t *vm, bt_t *bt)
list = bt_hashhead(vm, bt->bt_start);
LIST_INSERT_HEAD(list, bt, bt_hashlist);
vm->vm_nbusytag++;
+ vm->vm_inuse += bt->bt_size;
}
/* ---- boundary tag list */
@@ -1265,7 +1268,6 @@ gotit:
KASSERT(bt->bt_size >= size);
bt_remfree(vm, bt);
vmem_check(vm);
- vm->vm_inuse += size;
if (bt->bt_start != start) {
btnew2->bt_type = BT_TYPE_FREE;
btnew2->bt_start = bt->bt_start;
@@ -1357,8 +1359,6 @@ vmem_xfree(vmem_t *vm, vmem_addr_t addr,
bt_rembusy(vm, bt);
bt->bt_type = BT_TYPE_FREE;
- vm->vm_inuse -= bt->bt_size;
-
/* coalesce */
t = CIRCLEQ_NEXT(bt, bt_seglist);
if (t != NULL && t->bt_type == BT_TYPE_FREE) {