VMM: check if the entry is already present
This commit is contained in:
parent
682be58d97
commit
b334e1cd50
@ -275,13 +275,19 @@ void VMM::install_kernel_page_directory_into_address_space(AddressSpace& space)
|
|||||||
PageTable* kernel_last_pdp = (PageTable*)kernel_pml4->entries[511].get_address();
|
PageTable* kernel_last_pdp = (PageTable*)kernel_pml4->entries[511].get_address();
|
||||||
PageTable* kernel_last_pd = (PageTable*)kernel_last_pdp->entries[511].get_address();
|
PageTable* kernel_last_pd = (PageTable*)kernel_last_pdp->entries[511].get_address();
|
||||||
|
|
||||||
PageTable* space_last_pdp = (PageTable*)PMM::request_page();
|
|
||||||
|
|
||||||
PageDirectoryEntry& space_last_pdp_pde = space_pml4->entries[511];
|
PageDirectoryEntry& space_last_pdp_pde = space_pml4->entries[511];
|
||||||
|
|
||||||
|
PageTable* space_last_pdp;
|
||||||
|
|
||||||
|
if (!space_last_pdp_pde.present)
|
||||||
|
{
|
||||||
|
space_last_pdp = (PageTable*)PMM::request_page();
|
||||||
|
|
||||||
space_last_pdp_pde.present = true;
|
space_last_pdp_pde.present = true;
|
||||||
space_last_pdp_pde.read_write = true;
|
space_last_pdp_pde.read_write = true;
|
||||||
space_last_pdp_pde.set_address((uint64_t)space_last_pdp);
|
space_last_pdp_pde.set_address((uint64_t)space_last_pdp);
|
||||||
|
}
|
||||||
|
else { space_last_pdp = (PageTable*)space_last_pdp_pde.get_address(); }
|
||||||
|
|
||||||
PageDirectoryEntry& space_last_pd_pde = space_last_pdp->entries[511];
|
PageDirectoryEntry& space_last_pd_pde = space_last_pdp->entries[511];
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user