added test for new buddy malloc implementation
This commit is contained in:
parent
7a3e77c82d
commit
60f8f53169
1 changed files with 57 additions and 0 deletions
|
@ -24,6 +24,7 @@
|
|||
#include <metalsvm/time.h>
|
||||
#include <metalsvm/tasks.h>
|
||||
#include <metalsvm/vma.h>
|
||||
#include <metalsvm/malloc.h>
|
||||
|
||||
#include <asm/page.h>
|
||||
#include <asm/processor.h>
|
||||
|
@ -53,6 +54,16 @@ static void test(size_t expr, char *fmt, ...)
|
|||
abort();
|
||||
}
|
||||
|
||||
/** @brief Linear feedback shift register PRNG */
|
||||
static uint16_t rand()
|
||||
{
|
||||
static uint16_t lfsr = 0xACE1u;
|
||||
static uint16_t bit;
|
||||
|
||||
bit = ((lfsr >> 0) ^ (lfsr >> 2) ^ (lfsr >> 3) ^ (lfsr >> 5) ) & 1;
|
||||
return lfsr = (lfsr >> 1) | (bit << 15);
|
||||
}
|
||||
|
||||
/** @brief BSD sum algorithm ('sum' Unix command) and used by QEmu */
|
||||
uint16_t checksum(size_t start, size_t end) {
|
||||
size_t addr;
|
||||
|
@ -211,14 +222,60 @@ static void vma(void)
|
|||
vma_dump();
|
||||
}
|
||||
|
||||
/** @brief Test of the kernel malloc allocator */
|
||||
static void malloc(void)
|
||||
{
|
||||
int i;
|
||||
int* p[20];
|
||||
int* a;
|
||||
|
||||
// kmalloc() test
|
||||
buddy_dump();
|
||||
a = kmalloc(SIZE);
|
||||
test(a != NULL, "kmalloc(%lu) = %p", SIZE, a);
|
||||
buddy_dump();
|
||||
|
||||
// simple write/read test
|
||||
for (i=0; i<SIZE/sizeof(int); i++)
|
||||
a[i] = i;
|
||||
|
||||
for (i=0; i<SIZE/sizeof(int); i++) {
|
||||
if (a[i] != i)
|
||||
test(0, "data mismatch: *(%p) != %lu", &a[i], i);
|
||||
}
|
||||
test(1, "data is equal");
|
||||
|
||||
// kfree() test
|
||||
kfree(a);
|
||||
test(1, "kfree(%p)", a);
|
||||
buddy_dump();
|
||||
|
||||
// some random malloc/free patterns to stress the buddy system
|
||||
for (i=0; i<20; i++) {
|
||||
uint16_t sz = rand();
|
||||
p[i] = kmalloc(sz);
|
||||
test(p[i], "kmalloc(%u) = %p", sz, p[i]);
|
||||
}
|
||||
buddy_dump();
|
||||
|
||||
for (i=0; i<20; i++) {
|
||||
kfree(p[i]);
|
||||
test(1, "kfree(%p)", p[i]);
|
||||
}
|
||||
buddy_dump();
|
||||
}
|
||||
|
||||
/** @brief This is a simple procedure to test memory management subsystem */
|
||||
int memory(void* arg)
|
||||
{
|
||||
kprintf("======== PAGING: test started...\n");
|
||||
paging();
|
||||
|
||||
kprintf("======== VMA: test started...\n");
|
||||
vma();
|
||||
|
||||
kprintf("======== MALLOC: test started...\n");
|
||||
malloc();
|
||||
|
||||
kprintf("======== All tests finished successfull...\n");
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue