From 8f6fb1be46ae4c56d85010f320372d61ceda034a Mon Sep 17 00:00:00 2001 From: Samuel Thibault Date: Mon, 21 Aug 2023 20:38:46 +0200 Subject: slab: Optimize non-slab PAGE_SIZE allocations In case there is no slab for PAGE_SIZE allocations, we can use direct physical allocation rather than consuming the kernel virtual space. --- kern/slab.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/kern/slab.c b/kern/slab.c index ee51f9e9..545c7019 100644 --- a/kern/slab.c +++ b/kern/slab.c @@ -1398,6 +1398,8 @@ vm_offset_t kalloc(vm_size_t size) if ((buf != 0) && (cache->flags & KMEM_CF_VERIFY)) kalloc_verify(cache, buf, size); + } else if (size <= PAGE_SIZE) { + buf = (void *)kmem_pagealloc_physmem(PAGE_SIZE); } else { buf = (void *)kmem_pagealloc_virtual(size, 0); } @@ -1440,6 +1442,8 @@ void kfree(vm_offset_t data, vm_size_t size) kfree_verify(cache, (void *)data, size); kmem_cache_free(cache, data); + } else if (size <= PAGE_SIZE) { + kmem_pagefree_physmem(data, PAGE_SIZE); } else { kmem_pagefree_virtual(data, size); } -- cgit v1.2.3