[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