[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