提交 6db7f437 创建 作者: Silas Boyd-Wickizer's avatar Silas Boyd-Wickizer

Merge branch 'scale-amd64' of git+ssh://amsterdam.csail.mit.edu/home/am0/6.828/xv6 into scale-amd64

...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
#include "kmtrace.hh" #include "kmtrace.hh"
enum { vm_debug = 0 }; enum { vm_debug = 0 };
enum { tlb_shootdown = 1 };
enum { tlb_lazy = 1 }; enum { tlb_lazy = 1 };
/* /*
...@@ -320,8 +321,14 @@ vmap::copy(int share) ...@@ -320,8 +321,14 @@ vmap::copy(int share)
#endif #endif
} }
if (share) if (share) {
tlbflush(); // Reload hardware page table // Reload hardware page table
if (tlb_shootdown) {
tlbflush();
} else {
lcr3(rcr3());
}
}
nm->brk_ = brk_; nm->brk_ = brk_;
...@@ -434,11 +441,13 @@ again: ...@@ -434,11 +441,13 @@ again:
} }
} }
}); });
if (needtlb && dotlb) if (tlb_shootdown) {
tlbflush(); if (needtlb && dotlb)
else tlbflush();
if (tlb_lazy) else
tlbflush(myproc()->unmap_tlbreq_); if (tlb_lazy)
tlbflush(myproc()->unmap_tlbreq_);
}
return vma_start; return vma_start;
} }
...@@ -488,7 +497,7 @@ vmap::remove(uptr vma_start, uptr len) ...@@ -488,7 +497,7 @@ vmap::remove(uptr vma_start, uptr len)
} }
} }
}); });
if (needtlb) { if (tlb_shootdown && needtlb) {
if (tlb_lazy) { if (tlb_lazy) {
myproc()->unmap_tlbreq_ = tlbflush_req++; myproc()->unmap_tlbreq_ = tlbflush_req++;
} else { } else {
...@@ -578,7 +587,11 @@ vmap::pagefault(uptr va, u32 err) ...@@ -578,7 +587,11 @@ vmap::pagefault(uptr va, u32 err)
if (pagefault_wcow(m) < 0) if (pagefault_wcow(m) < 0)
return -1; return -1;
tlbflush(); if (tlb_shootdown) {
tlbflush();
} else {
lcr3(rcr3());
}
goto retry; goto retry;
} }
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论