summaryrefslogtreecommitdiffstats
path: root/sys/i386/xen/pmap.c
diff options
context:
space:
mode:
authorkmacy <kmacy@FreeBSD.org>2008-08-21 02:57:02 +0000
committerkmacy <kmacy@FreeBSD.org>2008-08-21 02:57:02 +0000
commit698d908d7bd6650136452b1668101c063161c2f7 (patch)
tree5d41fb9ef6c512578fba597e2b03478a7a546bba /sys/i386/xen/pmap.c
parentebff248b6601167f233e48eaec2a494a770bc2ed (diff)
downloadFreeBSD-src-698d908d7bd6650136452b1668101c063161c2f7.zip
FreeBSD-src-698d908d7bd6650136452b1668101c063161c2f7.tar.gz
Fix boot time pmap_growkernel panic for case where vm is allocated >= 768M
MFC after: 1 month
Diffstat (limited to 'sys/i386/xen/pmap.c')
-rw-r--r--sys/i386/xen/pmap.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/sys/i386/xen/pmap.c b/sys/i386/xen/pmap.c
index e838de4..9199218 100644
--- a/sys/i386/xen/pmap.c
+++ b/sys/i386/xen/pmap.c
@@ -1910,13 +1910,15 @@ pmap_growkernel(vm_offset_t addr)
pmap_zero_page(nkpg);
ptppaddr = VM_PAGE_TO_PHYS(nkpg);
newpdir = (pd_entry_t) (ptppaddr | PG_V | PG_RW | PG_A | PG_M);
+ vm_page_lock_queues();
PD_SET_VA(kernel_pmap, (kernel_vm_end >> PDRSHIFT), newpdir, TRUE);
-
mtx_lock_spin(&allpmaps_lock);
LIST_FOREACH(pmap, &allpmaps, pm_list)
PD_SET_VA(pmap, (kernel_vm_end >> PDRSHIFT), newpdir, TRUE);
mtx_unlock_spin(&allpmaps_lock);
+ vm_page_unlock_queues();
+
kernel_vm_end = (kernel_vm_end + PAGE_SIZE * NPTEPG) & ~(PAGE_SIZE * NPTEPG - 1);
if (kernel_vm_end - 1 >= kernel_map->max_offset) {
kernel_vm_end = kernel_map->max_offset;
OpenPOWER on IntegriCloud