[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[tyndur-devel] [PATCH 05/11] kernel2: Erstellen von mm-Kontexten



* mmc_create: einfach nur die Page Map als Kontext reicht nicht aus

Signed-off-by: Andreas Freimuth <m.nemo@xxxxxxx>
---
 src/kernel2/src/arch/amd64/mm/mm_context.c |   26 +++++++++++++-------------
 1 files changed, 13 insertions(+), 13 deletions(-)

diff --git a/src/kernel2/src/arch/amd64/mm/mm_context.c b/src/kernel2/src/arch/amd64/mm/mm_context.c
index fed401d..7d4670b 100644
--- a/src/kernel2/src/arch/amd64/mm/mm_context.c
+++ b/src/kernel2/src/arch/amd64/mm/mm_context.c
@@ -51,25 +51,26 @@
 /// Bestimmt ob das NX-Bit benutzt werden soll.
 bool mmc_use_no_exec = false;
 
-
 /**
- * Erstellt einen neuen MM-Kontext (Page Directory) f� Kernel.
- * Diese Funktion wird nur zur Initialisierung benutzt, solange Paging
- * noch nicht aktiviert ist.
+ * Erstellt einen neuen MM-Kontext (PM) für einen Prozess
  *
- * @return Pointer auf die physikalische Adresse des Kontexts
+ * @return neuer MM-Kontext
  */
 mmc_context_t mmc_create()
 {
-    // Die Pagemap initialisieren
-    paddr_t phys_page_map = pmm_alloc(1);
-    mmc_context_t page_map =
-        vmm_kernel_automap(phys_page_map, PAGE_SIZE);
+    mmc_context_t context;
+
+    context.version = 0;
+    context.lock = LOCK_UNLOCKED;
+
+    // Die Page Map Level 4 initialisieren
+    context.pml4 = pmm_alloc(1);
+    memset(MAPPED_PHYS_MEM_GET(context.pml4), 0, PAGE_SIZE);
 
-    memset(page_map, 0, PAGE_SIZE);
-    vmm_kernel_unmap(page_map, PAGE_SIZE);
+    // Kernel-Bereich mappen
+    mmc_sync(&context);
 
-    return phys_page_map;
+    return context;
 }
 
 /**
@@ -509,4 +510,3 @@ bool mmc_unmap(mmc_context_t context, vaddr_t vaddr, size_t count)
     return true;
 }
 
-
-- 
1.7.3.4