svn commit: r338996 - head/sys/amd64/amd64
Konstantin Belousov
kib at FreeBSD.org
Fri Sep 28 14:08:21 UTC 2018
Author: kib
Date: Fri Sep 28 14:08:20 2018
New Revision: 338996
URL: https://svnweb.freebsd.org/changeset/base/338996
Log:
Revert part of the r338891 which reordered local invalidation and IPI.
For PCID case, there is a dependency between pm_gen zeroing and
reading pm_active for IPI target selection, to ensure that the
invalidation is not missed.
Reported and tested by: mjg
Sponsored by: The FreeBSD Foundation
Approved by: re (gjb)
Modified:
head/sys/amd64/amd64/pmap.c
Modified: head/sys/amd64/amd64/pmap.c
==============================================================================
--- head/sys/amd64/amd64/pmap.c Fri Sep 28 12:29:53 2018 (r338995)
+++ head/sys/amd64/amd64/pmap.c Fri Sep 28 14:08:20 2018 (r338996)
@@ -1807,7 +1807,6 @@ pmap_invalidate_page(pmap_t pmap, vm_offset_t va)
("pmap_invalidate_page: invalid type %d", pmap->pm_type));
sched_pin();
- smp_masked_invlpg(pmap_invalidate_cpu_mask(pmap), va, pmap);
if (pmap == kernel_pmap) {
invlpg(va);
} else {
@@ -1815,6 +1814,7 @@ pmap_invalidate_page(pmap_t pmap, vm_offset_t va)
invlpg(va);
pmap_invalidate_page_mode(pmap, va);
}
+ smp_masked_invlpg(pmap_invalidate_cpu_mask(pmap), va, pmap);
sched_unpin();
}
@@ -1910,7 +1910,6 @@ pmap_invalidate_range(pmap_t pmap, vm_offset_t sva, vm
("pmap_invalidate_range: invalid type %d", pmap->pm_type));
sched_pin();
- smp_masked_invlpg_range(pmap_invalidate_cpu_mask(pmap), sva, eva, pmap);
if (pmap == kernel_pmap) {
for (addr = sva; addr < eva; addr += PAGE_SIZE)
invlpg(addr);
@@ -1921,6 +1920,7 @@ pmap_invalidate_range(pmap_t pmap, vm_offset_t sva, vm
}
pmap_invalidate_range_mode(pmap, sva, eva);
}
+ smp_masked_invlpg_range(pmap_invalidate_cpu_mask(pmap), sva, eva, pmap);
sched_unpin();
}
@@ -2021,8 +2021,8 @@ pmap_invalidate_all(pmap_t pmap)
("pmap_invalidate_all: invalid type %d", pmap->pm_type));
sched_pin();
- smp_masked_invltlb(pmap_invalidate_cpu_mask(pmap), pmap);
pmap_invalidate_all_mode(pmap);
+ smp_masked_invltlb(pmap_invalidate_cpu_mask(pmap), pmap);
sched_unpin();
}
More information about the svn-src-all
mailing list