summaryrefslogtreecommitdiffstats
path: root/sys/ia64
diff options
context:
space:
mode:
authormarcel <marcel@FreeBSD.org>2009-07-11 22:27:20 +0000
committermarcel <marcel@FreeBSD.org>2009-07-11 22:27:20 +0000
commit1a5c501f6673720ab13716879f0e5ac3677615ea (patch)
tree1569f7266a8f3624283551218fa8be38adbeedd8 /sys/ia64
parentccb66bdf1d7bed0d4b913727dc591bd5dc7f119f (diff)
downloadFreeBSD-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.c3
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);
}
}
OpenPOWER on IntegriCloud