diff --git a/kernel/mm/mm.cc b/kernel/mm/mm.cc index d0d8ad8..ba15fec 100644 --- a/kernel/mm/mm.cc +++ b/kernel/mm/mm.cc @@ -134,6 +134,9 @@ void mm_bootstrap() mm_map(page_base, page_base - KERNEL_OFFSET, 0, 1); } + /* set the page directory base register */ + set_cr3(&page_directory); + mm_use_virtual_offset = false; } diff --git a/kernel/mm/mm.h b/kernel/mm/mm.h index 626111e..a7ef217 100644 --- a/kernel/mm/mm.h +++ b/kernel/mm/mm.h @@ -29,5 +29,8 @@ int mm_map(u32_t virtual_address, u32_t physical_address, u32_t mm_page_alloc(); +#define set_cr3(address) \ + __asm__ __volatile__ ("movl %0, %%cr3" : : "r" (address)); + #endif