From b334e1cd50d35a41876ea4f1c303b72eeb895fe4 Mon Sep 17 00:00:00 2001 From: apio Date: Mon, 17 Oct 2022 17:26:16 +0200 Subject: [PATCH] VMM: check if the entry is already present --- kernel/src/memory/VMM.cpp | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/kernel/src/memory/VMM.cpp b/kernel/src/memory/VMM.cpp index 3932a742..90c00f2c 100644 --- a/kernel/src/memory/VMM.cpp +++ b/kernel/src/memory/VMM.cpp @@ -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_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]; - space_last_pdp_pde.present = true; - space_last_pdp_pde.read_write = true; - space_last_pdp_pde.set_address((uint64_t)space_last_pdp); + 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.read_write = true; + 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];