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

[tyndur-devel] [PATCH 3/3] kernel: "Fix" fuer TLB-Problem



! kernel: "Fix" fuer TLB-Problem: Im moment wird beim freigeben von
          Speicherseiten der TLB nicht immer korrekt invalidiert, was zu
          netten kleinen Pagefaults fuehrt. Dieser "Fix" ist allerdings
          nicht wirklich optimal, da er immer invalidiert, auch wenn es
          sich nicht ums aktuelle PD handelt, aber das sauber zu machen,
          lohnt nicht mehr.

Signed-off-by: Antoine Kaufmann <toni@xxxxxxxxxx>
---
 src/kernel/src/mm/paging.c |   10 ++++++----
 1 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/src/kernel/src/mm/paging.c b/src/kernel/src/mm/paging.c
index e431440..30ba46a 100644
--- a/src/kernel/src/mm/paging.c
+++ b/src/kernel/src/mm/paging.c
@@ -263,11 +263,13 @@ bool map_page(page_directory_t page_directory, vaddr_t vaddr, paddr_t paddr, int
             // Falls wir die Page Table extra in den Kerneladressraum gemappt haben,
             // den Speicher wieder freigeben
             unmap_page(kernel_page_directory, page_table);
-        } else {
-            // Und falls es um das aktive Page Directory geht, wäre jetzt ein
-            // guter Zeitpunkt, den TLB zu invalidieren.
-            __asm__ __volatile__("invlpg %0" : : "m" (* (char*) vaddr));
         }
+        // Und falls es um das aktive Page Directory geht, wäre jetzt ein
+        // guter Zeitpunkt, den TLB zu invalidieren.
+        // FIXME: Im moment auch wenn es sich nicht um das aktuelle PD handelt,
+        // aber das sauber zu machen ist zu aufwaendig, da kernel eh ersetzt
+        // wird.
+        __asm__ __volatile__("invlpg %0" : : "m" (* (char*) vaddr));
 
         return TRUE;
     }
-- 
1.6.0.6