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:
parent
e4da41f932
commit
1d3423d914
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user