diff --git a/sandbox/vm/cache.c b/sandbox/vm/cache.c index fa87849..1925dbc 100644 --- a/sandbox/vm/cache.c +++ b/sandbox/vm/cache.c @@ -16,9 +16,9 @@ vm_cache_t *vm_cache_create(const char *name, size_t objsz, vm_cache_flags_t fla new_cache->c_name = name; new_cache->c_obj_size = objsz; new_cache->c_flags = flags; - + vm_cache_init(new_cache); - + return new_cache; } @@ -31,7 +31,7 @@ void vm_cache_init(vm_cache_t *cache) size_t available = vm_page_order_to_bytes(cache->c_page_order); size_t space_per_item = cache->c_obj_size; - + /* align to 16-byte boundary */ if (space_per_item & 0xF) { space_per_item &= ~0xF; @@ -43,7 +43,7 @@ void vm_cache_init(vm_cache_t *cache) if (!(cache->c_flags & VM_CACHE_OFFSLAB)) { available -= sizeof(vm_slab_t); } - + /* one entry in the freelist per object slot */ space_per_item += sizeof(unsigned int); @@ -51,6 +51,8 @@ void vm_cache_init(vm_cache_t *cache) cache->c_slabs_full = QUEUE_INIT; cache->c_slabs_partial = QUEUE_INIT; cache->c_slabs_empty = QUEUE_INIT; + + cache->c_hdr_size = sizeof(vm_slab_t) + (sizeof(unsigned int) * cache->c_obj_count); } void vm_cache_destroy(vm_cache_t *cache)