فهرست منبع

change(mm): remove extra memory fences

greatbridf 1 سال پیش
والد
کامیت
b2d19e6ff6
3فایلهای تغییر یافته به همراه1 افزوده شده و 10 حذف شده
  1. 1 3
      include/kernel/mm.hpp
  2. 0 3
      src/kernel/interrupt.cpp
  3. 0 4
      src/kernel/mem.cpp

+ 1 - 3
include/kernel/mm.hpp

@@ -15,13 +15,11 @@
 #include <types/status.h>
 #include <types/types.h>
 
-#define invalidate_tlb(addr) asm("invlpg (%0)" \
+#define invalidate_tlb(addr) asm volatile("invlpg (%0)" \
                                  :             \
                                  : "r"(addr)   \
                                  : "memory")
 
-#define memory_fence asm volatile("" ::: "memory")
-
 constexpr size_t THREAD_KERNEL_STACK_SIZE = 2 * PAGE_SIZE;
 
 constexpr uint32_t PAGE_COW = (1 << 0);

+ 0 - 3
src/kernel/interrupt.cpp

@@ -261,7 +261,6 @@ extern "C" void int14_handler(int14_data* d)
             pte->in.p = 1;
             pte->in.a = 0;
             pte->in.rw = mm_area->attr.write;
-            memory_fence;
             return;
         }
         // duplicate the page
@@ -278,7 +277,6 @@ extern "C" void int14_handler(int14_data* d)
         pte->in.page = new_page;
         pte->in.rw = mm_area->attr.write;
         pte->in.a = 0;
-        memory_fence;
 
         --*page->ref_count;
 
@@ -289,7 +287,6 @@ extern "C" void int14_handler(int14_data* d)
 
     if (page->attr & PAGE_MMAP) {
         pte->in.p = 1;
-        memory_fence;
 
         size_t offset = align_down<12>((uint32_t)d->l_addr);
         offset -= (uint32_t)mm_area->start;

+ 0 - 4
src/kernel/mem.cpp

@@ -371,7 +371,6 @@ void mm::append_page(pd_t pd, const page& pg, uint32_t attr, bool priv)
         assert(pt);
         pte = *pt;
     }
-    memory_fence;
 
     // map the page in the page table
     int pti = v_to_pti(addr);
@@ -384,7 +383,6 @@ void mm::append_page(pd_t pd, const page& pg, uint32_t attr, bool priv)
         false,
         priv);
 
-    memory_fence;
     kernel::pfree(pt_pg);
 
     if (unlikely((attr & PAGE_COW) && !(pg.attr & PAGE_COW))) {
@@ -398,9 +396,7 @@ void mm::append_page(pd_t pd, const page& pg, uint32_t attr, bool priv)
         invalidate_tlb(addr);
     }
 
-    memory_fence;
     ++*pg.ref_count;
-    memory_fence;
 
     this->pgs->emplace_back(pg);
     auto& emplaced = this->pgs->back();