version 1.65.6.1, 2012/02/18 07:35:33 |
version 1.65.6.2, 2012/03/06 18:26:48 |
Line 248 static LIST_HEAD(, vmem) vmem_list = LIS |
|
Line 248 static LIST_HEAD(, vmem) vmem_list = LIS |
|
#define BT_MAXFREE 64 |
#define BT_MAXFREE 64 |
#define STATIC_VMEM_COUNT 5 |
#define STATIC_VMEM_COUNT 5 |
#define STATIC_BT_COUNT 200 |
#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 struct vmem static_vmems[STATIC_VMEM_COUNT]; |
static int static_vmem_count = STATIC_VMEM_COUNT; |
static int static_vmem_count = STATIC_VMEM_COUNT; |
Line 474 bt_rembusy(vmem_t *vm, bt_t *bt) |
|
Line 475 bt_rembusy(vmem_t *vm, bt_t *bt) |
|
{ |
{ |
|
|
KASSERT(vm->vm_nbusytag > 0); |
KASSERT(vm->vm_nbusytag > 0); |
|
vm->vm_inuse -= bt->bt_size; |
vm->vm_nbusytag--; |
vm->vm_nbusytag--; |
LIST_REMOVE(bt, bt_hashlist); |
LIST_REMOVE(bt, bt_hashlist); |
} |
} |
Line 488 bt_insbusy(vmem_t *vm, bt_t *bt) |
|
Line 490 bt_insbusy(vmem_t *vm, bt_t *bt) |
|
list = bt_hashhead(vm, bt->bt_start); |
list = bt_hashhead(vm, bt->bt_start); |
LIST_INSERT_HEAD(list, bt, bt_hashlist); |
LIST_INSERT_HEAD(list, bt, bt_hashlist); |
vm->vm_nbusytag++; |
vm->vm_nbusytag++; |
|
vm->vm_inuse += bt->bt_size; |
} |
} |
|
|
/* ---- boundary tag list */ |
/* ---- boundary tag list */ |
|
|
KASSERT(bt->bt_size >= size); |
KASSERT(bt->bt_size >= size); |
bt_remfree(vm, bt); |
bt_remfree(vm, bt); |
vmem_check(vm); |
vmem_check(vm); |
vm->vm_inuse += size; |
|
if (bt->bt_start != start) { |
if (bt->bt_start != start) { |
btnew2->bt_type = BT_TYPE_FREE; |
btnew2->bt_type = BT_TYPE_FREE; |
btnew2->bt_start = bt->bt_start; |
btnew2->bt_start = bt->bt_start; |
Line 1357 vmem_xfree(vmem_t *vm, vmem_addr_t addr, |
|
Line 1359 vmem_xfree(vmem_t *vm, vmem_addr_t addr, |
|
bt_rembusy(vm, bt); |
bt_rembusy(vm, bt); |
bt->bt_type = BT_TYPE_FREE; |
bt->bt_type = BT_TYPE_FREE; |
|
|
vm->vm_inuse -= bt->bt_size; |
|
|
|
/* coalesce */ |
/* coalesce */ |
t = CIRCLEQ_NEXT(bt, bt_seglist); |
t = CIRCLEQ_NEXT(bt, bt_seglist); |
if (t != NULL && t->bt_type == BT_TYPE_FREE) { |
if (t != NULL && t->bt_type == BT_TYPE_FREE) { |