diff options
author | marcel <marcel@FreeBSD.org> | 2009-07-11 22:27:20 +0000 |
---|---|---|
committer | marcel <marcel@FreeBSD.org> | 2009-07-11 22:27:20 +0000 |
commit | 1a5c501f6673720ab13716879f0e5ac3677615ea (patch) | |
tree | 1569f7266a8f3624283551218fa8be38adbeedd8 /sys/ia64 | |
parent | ccb66bdf1d7bed0d4b913727dc591bd5dc7f119f (diff) | |
download | FreeBSD-src-1a5c501f6673720ab13716879f0e5ac3677615ea.zip FreeBSD-src-1a5c501f6673720ab13716879f0e5ac3677615ea.tar.gz |
On exec(2), when loading the ELF image, pmap_enter_object() is
called to prefault pages. This is an obvious place for making
sure the I-cache is coherent. It was missing though. As such,
execution over NFS and ZFS file systems was failing. NFS was
fixed the wrong way (by flushing the D-cache as part of the
NFS code) in a previous commit. ZFS problems were encountered
after that and indicated that something else was wrong...
Approved by: re (kib)
Diffstat (limited to 'sys/ia64')
-rw-r--r-- | sys/ia64/ia64/pmap.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/sys/ia64/ia64/pmap.c b/sys/ia64/ia64/pmap.c index 355aa71..5363771 100644 --- a/sys/ia64/ia64/pmap.c +++ b/sys/ia64/ia64/pmap.c @@ -1733,6 +1733,9 @@ pmap_enter_quick_locked(pmap_t pmap, vm_offset_t va, vm_page_t m, pmap_pte_prot(pmap, pte, prot & (VM_PROT_READ | VM_PROT_EXECUTE)); pmap_set_pte(pte, va, VM_PAGE_TO_PHYS(m), FALSE, managed); + + if (prot & VM_PROT_EXECUTE) + ia64_sync_icache(va, PAGE_SIZE); } } |