(memory): alignment checks, clean up, and tests

This commit is contained in:
Liam Kerr 2026-02-11 01:37:31 +00:00
parent a8e1bbc3a8
commit 3c7b927abf
2 changed files with 26 additions and 2 deletions

View file

@ -31,12 +31,34 @@ void page_init()
page_free((void *)addr); page_free((void *)addr);
} }
kputs("OK"); kputs("OK");
// test_memory_integrity();
// test_memory_alignment();
// test_memory_stress();
// page_free((void *)23);
}
int is_aligned_to(size_t value, size_t size)
{
return value % size == 0;
}
size_t align_up(size_t value, size_t size)
{
return (value + size - 1) & ~(size - 1);
}
size_t align_down(size_t value, size_t size)
{
return value & ~(size - 1);
} }
void page_free(void *addr) void page_free(void *addr)
{ {
if (addr == NULL) if (addr == NULL)
return; return;
if (!is_aligned_to((size_t)addr, PAGE_SIZE))
kpanic("page_free: address not aligned to PAGE_SIZE: %p", addr);
struct Page *p = (struct Page *)addr; struct Page *p = (struct Page *)addr;
p->next = free_list; p->next = free_list;
@ -63,8 +85,7 @@ void *kmalloc(size_t size)
if (size == 0) if (size == 0)
return NULL; return NULL;
// Align size to 8 bytes size = align_up(size, 8);
size = (size + 7) & ~7;
if (heap_free_list == NULL) if (heap_free_list == NULL)
{ {

View file

@ -17,6 +17,9 @@ typedef struct HeapHeader
} HeapHeader; } HeapHeader;
void zero_bss(); void zero_bss();
int is_aligned_to(size_t value, size_t size);
size_t align_up(size_t value, size_t size);
size_t align_down(size_t value, size_t size);
void page_init(); void page_init();
void page_free(void *addr); void page_free(void *addr);
void *page_alloc(); void *page_alloc();