diff options
Diffstat (limited to 'sys/kern/subr_vmem.c')
-rw-r--r-- | sys/kern/subr_vmem.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/sys/kern/subr_vmem.c b/sys/kern/subr_vmem.c index baaee84..8cc020a 100644 --- a/sys/kern/subr_vmem.c +++ b/sys/kern/subr_vmem.c @@ -1319,6 +1319,7 @@ vmem_add(vmem_t *vm, vmem_addr_t addr, vmem_size_t size, int flags) vmem_size_t vmem_size(vmem_t *vm, int typemask) { + int i; switch (typemask) { case VMEM_ALLOC: @@ -1327,6 +1328,17 @@ vmem_size(vmem_t *vm, int typemask) return vm->vm_size - vm->vm_inuse; case VMEM_FREE|VMEM_ALLOC: return vm->vm_size; + case VMEM_MAXFREE: + VMEM_LOCK(vm); + for (i = VMEM_MAXORDER - 1; i >= 0; i--) { + if (LIST_EMPTY(&vm->vm_freelist[i])) + continue; + VMEM_UNLOCK(vm); + return ((vmem_size_t)ORDER2SIZE(i) << + vm->vm_quantum_shift); + } + VMEM_UNLOCK(vm); + return (0); default: panic("vmem_size"); } |