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

[tyndur-devel] [PATCH 10/11] kernel2: mm-Kontext aktivieren



+ mmc_activate: aktiviert einen mm-Kontext

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

diff --git a/src/kernel2/src/arch/amd64/cpu.c b/src/kernel2/src/arch/amd64/cpu.c
index fe1e2b8..b618272 100644
--- a/src/kernel2/src/arch/amd64/cpu.c
+++ b/src/kernel2/src/arch/amd64/cpu.c
@@ -183,25 +183,3 @@ void cpu_dump(machine_state_t* machine_state)
     kprintf("CR4=0x%016x  CR8=0x%016x  EFR=0x%016x\n", cr[4], cr[1],
         cpu_read_msr(0xC0000080));
 }
-
-/**
- * Pointer auf den aktuellen Kontext von der CPU auslesen
- *
- * @return Kontext
- */
-mmc_context_t cpu_get_context()
-{
-    uintptr_t context;
-    asm("movq %%cr3, %0" : "=A" (context));
-    return (mmc_context_t) (context  & (~0xFFF));
-}
-
-/**
- *
- * @param context Neuer Kontext
- */
-void cpu_set_context(mmc_context_t context)
-{
-    asm("movq %0, %%cr3" : : "A" (context));
-}
-
diff --git a/src/kernel2/src/arch/amd64/mm/mm_context.c b/src/kernel2/src/arch/amd64/mm/mm_context.c
index 82115af..adc105c 100644
--- a/src/kernel2/src/arch/amd64/mm/mm_context.c
+++ b/src/kernel2/src/arch/amd64/mm/mm_context.c
@@ -219,6 +219,19 @@ void mmc_destroy(mmc_context_t* context)
 }
 
 /**
+ * Den Kontext aktivieren indem die Adresse der zugehörigen Page Map in
+ * cr3 geladen wird.
+ *
+ * @param context Kontext
+ */
+void mmc_activate(mmc_context_t* context)
+{
+    mmc_sync(context);
+    cpu_get_current()->mm_context = context;
+    asm("mov %0, %%cr3" : : "r" (context->pml4));
+}
+
+/**
  * Pointer auf die Pagemap eines Kontexts holen. Der Pointer ist eine virtuelle
  * Adresse und darf direkt benutzt werden. Wenn er nicht mehr gebraucht wird,
  * muss er per pm_free freigegeben werden.
-- 
1.7.3.4