diff options
Diffstat (limited to 'mem/slab.c')
-rw-r--r-- | mem/slab.c | 18 |
1 files changed, 13 insertions, 5 deletions
@@ -17,7 +17,15 @@ s_next_free(size_t width) { uintptr_t ret = s_addr_next_free; s_addr_next_free += width; - mem_ensure_range(ret, s_addr_next_free, true, false); + mem_ensure_range( + ret, + s_addr_next_free, + (page_flags_t) { + .present = true, + .writeable = true, + .useraccess = false, + .executable = false + }); return ret; } @@ -36,7 +44,7 @@ s_get_free_listw(size_t slabw, size_t objw) static struct SlabDescriptor *s_slab_new(struct SlabCache *cache, struct SlabDescriptor *last) { - size_t slab_width = (cache->slab_pages * PAGESIZE); + size_t slab_width = (cache->slab_pages << PAGE_SHIFT); uintptr_t descr_base = s_next_free(slab_width); struct SlabDescriptor *descr = (struct SlabDescriptor*)descr_base; @@ -122,7 +130,7 @@ mem_slab_free(struct SlabCache *cache, void *ptr) { uintptr_t base = (uintptr_t)slab->obj_base; uintptr_t limit = ((uintptr_t)slab->slab_base) - + (cache->slab_pages * PAGESIZE); + + (cache->slab_pages << PAGE_SHIFT); if(addr > limit || addr < base) continue; if((addr - base) % cache->obj_size != 0) { klogf("Tried to free offset pointer %#016X in slab %s\n", @@ -142,7 +150,7 @@ mem_slab_free(struct SlabCache *cache, void *ptr) { uintptr_t base = (uintptr_t)slab->obj_base; uintptr_t limit = ((uintptr_t)slab->slab_base) - + (cache->slab_pages * PAGESIZE); + + (cache->slab_pages << PAGE_SHIFT); if(addr > limit || addr < base) continue; if((addr - base) % cache->obj_size != 0) { klogf("Tried to free offset pointer %#016X in slab %s\n", @@ -189,7 +197,7 @@ mem_slab_setup(void) { s_addr_next_free = (uintptr_t)&_kernel_end; s_addr_next_free = ((s_addr_next_free >> 12) + 1) << 12; - s_get_free_listw(PAGESIZE - sizeof(struct SlabDescriptor), 32); + s_get_free_listw(PAGE_SIZE - sizeof(struct SlabDescriptor), 32); for(int i = 0; i < GENERIC_CACHEC; i++) { |