kernel: add c++ support
This commit is contained in:
12
vm/cache.c
12
vm/cache.c
@@ -106,11 +106,12 @@ static vm_slab_t *alloc_slab(vm_cache_t *cache, vm_flags_t flags)
|
||||
slab_hdr->s_obj_allocated = 0;
|
||||
slab_hdr->s_free = 0;
|
||||
|
||||
unsigned int *freelist = (unsigned int *)(slab_hdr + 1);
|
||||
for (unsigned int i = 0; i < cache->c_obj_count; i++) {
|
||||
slab_hdr->s_freelist[i] = i + 1;
|
||||
freelist[i] = i + 1;
|
||||
}
|
||||
|
||||
slab_hdr->s_freelist[cache->c_obj_count - 1] = FREELIST_END;
|
||||
freelist[cache->c_obj_count - 1] = FREELIST_END;
|
||||
|
||||
vm_page_foreach (slab_page, i) {
|
||||
i->p_slab = slab_hdr;
|
||||
@@ -131,7 +132,8 @@ static unsigned int slab_allocate_slot(vm_slab_t *slab)
|
||||
}
|
||||
|
||||
unsigned int slot = slab->s_free;
|
||||
slab->s_free = slab->s_freelist[slab->s_free];
|
||||
unsigned int *freelist = (unsigned int *)(slab + 1);
|
||||
slab->s_free = freelist[slab->s_free];
|
||||
slab->s_obj_allocated++;
|
||||
|
||||
return slot;
|
||||
@@ -140,8 +142,10 @@ static unsigned int slab_allocate_slot(vm_slab_t *slab)
|
||||
static void slab_free_slot(vm_slab_t *slab, unsigned int slot)
|
||||
{
|
||||
unsigned int next = slab->s_free;
|
||||
unsigned int *freelist = (unsigned int *)(slab + 1);
|
||||
|
||||
slab->s_free = slot;
|
||||
slab->s_freelist[slot] = next;
|
||||
freelist[slot] = next;
|
||||
slab->s_obj_allocated--;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user