added some helper functions to for the recursive mapping structures

This commit is contained in:
Steffen Vogel 2013-11-14 12:25:07 +01:00
parent 4b485f5733
commit 14938ef7e1

View file

@ -69,6 +69,38 @@ int create_page_map(task_t* task, int copy)
task->page_map = get_boot_page_map();
return 0;
static inline size_t canonicalize(size_t addr)
{
if (addr & (1UL<<47))
return addr;
else
return addr & ((1UL<<48) - 1);
}
static inline int map_to_level(size_t addr)
{
if (addr >= PAGE_PML4)
return 4;
else if (addr >= PAGE_PDPT)
return 3;
else if (addr >= PAGE_PGD)
return 2;
else if (addr >= PAGE_PGT)
return 1;
else
return -EINVAL;
}
static inline const char * map_to_lvlname(size_t addr)
{
const char* names[] = {"(none)", "PGT", "PGD", "PDPT", "PML4"};
return names[map_to_level(addr)];
}
static inline size_t map_to_virt(size_t addr)
{
return canonicalize(addr << (map_to_level(addr) * PAGE_MAP_SHIFT));
}
}
int drop_page_map(void)