summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authoralc <alc@FreeBSD.org>2004-06-26 19:10:12 +0000
committeralc <alc@FreeBSD.org>2004-06-26 19:10:12 +0000
commit11da9eaee1fdbe9e6c047dd1d81374f90e0359b3 (patch)
tree47ce3d43e3a1dc123fb287870baf58fce5f8e75f /sys
parent49e32d12eb7f48f207cced3b3b9ddca3db9c8599 (diff)
downloadFreeBSD-src-11da9eaee1fdbe9e6c047dd1d81374f90e0359b3.zip
FreeBSD-src-11da9eaee1fdbe9e6c047dd1d81374f90e0359b3.tar.gz
In case pmap_extract_and_hold() is ever performed on a different pmap than
the current one, we need to pin the current thread to its CPU. Submitted by: tegge@
Diffstat (limited to 'sys')
-rw-r--r--sys/i386/i386/pmap.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/sys/i386/i386/pmap.c b/sys/i386/i386/pmap.c
index 756f5dd6..8b6e040 100644
--- a/sys/i386/i386/pmap.c
+++ b/sys/i386/i386/pmap.c
@@ -878,12 +878,14 @@ pmap_extract_and_hold(pmap_t pmap, vm_offset_t va, vm_prot_t prot)
vm_page_hold(m);
}
} else {
+ sched_pin();
pte = *pmap_pte_quick(pmap, va);
if (pte != 0 &&
((pte & PG_RW) || (prot & VM_PROT_WRITE) == 0)) {
m = PHYS_TO_VM_PAGE(pte & PG_FRAME);
vm_page_hold(m);
}
+ sched_unpin();
}
}
vm_page_unlock_queues();
OpenPOWER on IntegriCloud