Переглянути джерело

fix(k_map): invalidate tlb cache when mapping cow

greatbridf 2 роки тому
батько
коміт
ab67740b4f
2 змінених файлів з 6 додано та 0 видалено
  1. 5 0
      include/kernel/mm.hpp
  2. 1 0
      src/kernel/mem.cpp

+ 5 - 0
include/kernel/mm.hpp

@@ -10,6 +10,11 @@
 #include <types/types.h>
 #include <types/vector.hpp>
 
+#define invalidate_tlb(addr) asm("invlpg (%0)" \
+                                 :             \
+                                 : "r"(addr)   \
+                                 : "memory")
+
 constexpr size_t THREAD_KERNEL_STACK_SIZE = 2 * PAGE_SIZE;
 
 struct page {

+ 1 - 0
src/kernel/mem.cpp

@@ -419,6 +419,7 @@ int k_map(
     if (cow && !page->attr.in.cow) {
         page->attr.in.cow = 1;
         page->pte->in.rw = 0;
+        invalidate_tlb(addr);
     }
     ++*page->ref_count;