[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