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

[tyndur-devel] [PATCH] kernel2: page_directory_current anpassen bei mmc_destroy()



! kernel2: Bisher kann es passieren, dass page_directory_current nach
           einem mmc_destroy() auf ein freigegebenes PD zeigt, was
           wiederum dazu fuehrt, dass es beim naechsten mmc_sync()
           knallt.

Signed-off-by: Antoine Kaufmann <toni@xxxxxxxxxx>
---
 src/kernel2/src/arch/i386/mm/mm_context.c |    9 +++++++++
 1 files changed, 9 insertions(+), 0 deletions(-)

diff --git a/src/kernel2/src/arch/i386/mm/mm_context.c b/src/kernel2/src/arch/i386/mm/mm_context.c
index ad91567..3fdce23 100644
--- a/src/kernel2/src/arch/i386/mm/mm_context.c
+++ b/src/kernel2/src/arch/i386/mm/mm_context.c
@@ -129,6 +129,11 @@ static void mmc_sync(mmc_context_t* context)
         memcpy(context->page_directory_virt, page_directory_current, 0x3FC);
         context->version = page_directory_version;
     }
+
+    // Wenn wir hier das neu synchronisierte PD setzen, können wir Probleme
+    // beim zerstoeren von Kontexten umgehen, falls der zu loeschende
+    // Kontext auch der aktuellste war.
+    page_directory_current = context->page_directory_virt;
 }
 
 /**
@@ -158,6 +163,10 @@ void mmc_destroy(mmc_context_t* context)
     page_table_t page_table;
     int i, n;
 
+    // Sicherstellen, dass page_directory_current nicht auf das PD des zu
+    // loeschenden Kontexts zeigt.
+    mmc_sync(&mmc_current_context());
+
     for (i = (MM_USER_START >> PGDIR_SHIFT);
          i < (MM_USER_END >> PGDIR_SHIFT);
          i++)
-- 
1.6.4.4