From 40f2abf7c30f07a5ab3adfe1bb70b57466bd2908 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Thu, 11 Mar 2021 13:02:01 +0100 Subject: [PATCH] Kernel: Allow kmalloc_aligned() alignment up to 4096 This allows us to get kmalloc() memory aligned to the VM page size. --- Kernel/Heap/kmalloc.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Kernel/Heap/kmalloc.h b/Kernel/Heap/kmalloc.h index b71b027716..7acc5f018a 100644 --- a/Kernel/Heap/kmalloc.h +++ b/Kernel/Heap/kmalloc.h @@ -58,18 +58,18 @@ inline void* operator new[](size_t, void* p) { return p; } template [[gnu::malloc, gnu::returns_nonnull, gnu::alloc_size(1)]] inline void* kmalloc_aligned(size_t size) { - static_assert(ALIGNMENT > 1); - static_assert(ALIGNMENT < 255); - void* ptr = kmalloc(size + ALIGNMENT + sizeof(u8)); + static_assert(ALIGNMENT > sizeof(ptrdiff_t)); + static_assert(ALIGNMENT <= 4096); + void* ptr = kmalloc(size + ALIGNMENT + sizeof(ptrdiff_t)); size_t max_addr = (size_t)ptr + ALIGNMENT; void* aligned_ptr = (void*)(max_addr - (max_addr % ALIGNMENT)); - ((u8*)aligned_ptr)[-1] = (u8)((u8*)aligned_ptr - (u8*)ptr); + ((ptrdiff_t*)aligned_ptr)[-1] = (ptrdiff_t)((u8*)aligned_ptr - (u8*)ptr); return aligned_ptr; } inline void kfree_aligned(void* ptr) { - kfree((u8*)ptr - ((u8*)ptr)[-1]); + kfree((u8*)ptr - ((const ptrdiff_t*)ptr)[-1]); } void kmalloc_enable_expand();