svn commit: r349442 - head/sys/arm64/arm64
Alan Cox
alc at FreeBSD.org
Wed Jun 26 21:43:42 UTC 2019
Author: alc
Date: Wed Jun 26 21:43:41 2019
New Revision: 349442
URL: https://svnweb.freebsd.org/changeset/base/349442
Log:
Revert one of the changes from r349323. Specifically, undo the change
that replaced a pmap_invalidate_page() with a dsb(ishst) in
pmap_enter_quick_locked(). Even though this change is in principle
correct, I am seeing occasional, spurious bus errors that are only
reproducible without this pmap_invalidate_page(). (None of adding an
isb, "upgrading" the dsb to wait on loads as well as stores, or
disabling superpage mappings eliminates the bus errors.) Add an XXX
comment explaining why the pmap_invalidate_page() is being performed.
Discussed with: andrew, markj
Modified:
head/sys/arm64/arm64/pmap.c
Modified: head/sys/arm64/arm64/pmap.c
==============================================================================
--- head/sys/arm64/arm64/pmap.c Wed Jun 26 21:19:43 2019 (r349441)
+++ head/sys/arm64/arm64/pmap.c Wed Jun 26 21:43:41 2019 (r349442)
@@ -3758,7 +3758,15 @@ pmap_enter_quick_locked(pmap_t pmap, vm_offset_t va, v
cpu_icache_sync_range(PHYS_TO_DMAP(pa), PAGE_SIZE);
pmap_load_store(l3, l3_val);
- dsb(ishst);
+
+ /*
+ * XXX In principle, because this L3 entry was invalid, we should not
+ * need to perform a TLB invalidation here. However, in practice,
+ * when simply performing a "dsb ishst" here, processes are being
+ * terminated due to bus errors and segmentation violations.
+ */
+ pmap_invalidate_page(pmap, va);
+
return (mpte);
}
More information about the svn-src-all
mailing list