From 4e683d7252ee777ba05a9eb71d2be7fd9acf7ce0 Mon Sep 17 00:00:00 2001 From: Kip Macy Date: Thu, 21 Aug 2008 02:57:02 +0000 Subject: [PATCH] Fix boot time pmap_growkernel panic for case where vm is allocated >= 768M MFC after: 1 month --- sys/i386/xen/pmap.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sys/i386/xen/pmap.c b/sys/i386/xen/pmap.c index e838de41883..919921861db 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;