summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/amd64/amd64/pmap.c8
-rw-r--r--sys/i386/i386/pmap.c8
2 files changed, 14 insertions, 2 deletions
diff --git a/sys/amd64/amd64/pmap.c b/sys/amd64/amd64/pmap.c
index 9434ce5..760539d 100644
--- a/sys/amd64/amd64/pmap.c
+++ b/sys/amd64/amd64/pmap.c
@@ -1731,7 +1731,13 @@ pmap_remove(pmap_t pmap, vm_offset_t sva, vm_offset_t eva)
sva += PAGE_SIZE) {
if (*pte == 0)
continue;
- anyvalid = 1;
+
+ /*
+ * The TLB entry for a PG_G mapping is invalidated
+ * by pmap_remove_pte().
+ */
+ if ((*pte & PG_G) == 0)
+ anyvalid = 1;
if (pmap_remove_pte(pmap, pte, sva, ptpaddr))
break;
}
diff --git a/sys/i386/i386/pmap.c b/sys/i386/i386/pmap.c
index 143881c..b4c9027 100644
--- a/sys/i386/i386/pmap.c
+++ b/sys/i386/i386/pmap.c
@@ -1719,7 +1719,13 @@ pmap_remove(pmap_t pmap, vm_offset_t sva, vm_offset_t eva)
sva += PAGE_SIZE) {
if (*pte == 0)
continue;
- anyvalid = 1;
+
+ /*
+ * The TLB entry for a PG_G mapping is invalidated
+ * by pmap_remove_pte().
+ */
+ if ((*pte & PG_G) == 0)
+ anyvalid = 1;
if (pmap_remove_pte(pmap, pte, sva))
break;
}
OpenPOWER on IntegriCloud