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
This commit is contained in:
Alan Cox 2019-06-26 21:43:41 +00:00
parent e4da41f932
commit 1d3423d914

View File

@ -3758,7 +3758,15 @@ pmap_enter_quick_locked(pmap_t pmap, vm_offset_t va, vm_page_t m,
cpu_icache_sync_range(PHYS_TO_DMAP(pa), PAGE_SIZE); cpu_icache_sync_range(PHYS_TO_DMAP(pa), PAGE_SIZE);
pmap_load_store(l3, l3_val); 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); return (mpte);
} }