summaryrefslogtreecommitdiffstats
path: root/mem/slab.c
diff options
context:
space:
mode:
Diffstat (limited to 'mem/slab.c')
-rw-r--r--mem/slab.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/mem/slab.c b/mem/slab.c
index 75b8302..30bc23a 100644
--- a/mem/slab.c
+++ b/mem/slab.c
@@ -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++)
{