PMM -- Make sure stuff works even with V2P and P2V

This commit is contained in:
Thomas Lovén 2017-12-29 21:46:00 +01:00
parent acf9a43980
commit f78500d603
2 changed files with 12 additions and 12 deletions

View File

@ -13,6 +13,6 @@ uintptr_t pmm_alloc()
{
uintptr_t page = first;
first = page?*(uintptr_t *)page:0;
page = (uintptr_t)V2P(page);
page = (uintptr_t)(page?V2P(page):0);
return page;
}

View File

@ -3,9 +3,9 @@
#include <memory.h>
#undef P2V
#define P2V(addr) (void *)((uintptr_t)(addr))
#define P2V(addr) ((void *)((uintptr_t)(addr)+1))
#undef V2P
#define V2P(addr) (void *)((uintptr_t)(addr))
#define V2P(addr) ((uintptr_t)(addr)-1)
#include "pmm.c"
struct {
@ -14,9 +14,9 @@ struct {
TEST(alloc_returns_freed_page)
{
pmm_free((uintptr_t)&mem[0]);
pmm_free(V2P(&mem[0]));
uintptr_t a = pmm_alloc();
ASSERT_EQ_PTR(a, &mem[0]);
ASSERT_EQ_PTR(a, V2P(&mem[0]));
}
TEST(alloc_returns_0_if_no_free_pages)
{
@ -25,7 +25,7 @@ TEST(alloc_returns_0_if_no_free_pages)
}
TEST(alloc_zero_after_all_free_pages)
{
pmm_free((uintptr_t)&mem[0]);
pmm_free(V2P(&mem[0]));
pmm_alloc();
uintptr_t a = pmm_alloc();
ASSERT_EQ_PTR(a, 0);
@ -33,24 +33,24 @@ TEST(alloc_zero_after_all_free_pages)
TEST(alloc_two_pages___first_page_is_not_zero)
{
pmm_free((uintptr_t)&mem[0]);
pmm_free((uintptr_t)&mem[1]);
pmm_free(V2P(&mem[0]));
pmm_free(V2P(&mem[1]));
uintptr_t a = pmm_alloc();
pmm_alloc();
ASSERT_NEQ_PTR(a, 0);
}
TEST(alloc_two_pages___second_page_is_not_zero)
{
pmm_free((uintptr_t)&mem[0]);
pmm_free((uintptr_t)&mem[1]);
pmm_free(V2P(&mem[0]));
pmm_free(V2P(&mem[1]));
pmm_alloc();
uintptr_t a = pmm_alloc();
ASSERT_NEQ_PTR(a, 0);
}
TEST(alloc_two_pages___doesnt_return_same_page_twice)
{
pmm_free((uintptr_t)&mem[0]);
pmm_free((uintptr_t)&mem[1]);
pmm_free(V2P(&mem[0]));
pmm_free(V2P(&mem[1]));
uintptr_t a = pmm_alloc();
uintptr_t b = pmm_alloc();
ASSERT_NEQ_PTR(a, b);