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) {