Index: sys/vm/vm_fault.c =================================================================== --- sys/vm/vm_fault.c +++ sys/vm/vm_fault.c @@ -442,6 +442,7 @@ vm_offset_t vaddr; vm_page_t m; vm_pindex_t map_first, map_last, pager_first, pager_last, pidx; + u_int pmap_flags; int bdry_idx, i, npages, psind, rv; enum fault_status res; @@ -598,20 +599,24 @@ if (__predict_false(psind > 0 && rv == KERN_PROTECTION_FAILURE)) { for (i = 0; i < npages; i++) { + pmap_flags = fs->fault_type | (fs->wired && + m[i].pindex == fs->first_pindex ? + PMAP_ENTER_WIRED : 0); rv = pmap_enter(fs->map->pmap, vaddr + ptoa(i), - &m[i], fs->prot, fs->fault_type | - (fs->wired ? PMAP_ENTER_WIRED : 0), 0); + &m[i], fs->prot, pmap_flags, 0); MPASS(rv == KERN_SUCCESS); } } VM_OBJECT_WLOCK(fs->first_object); for (i = 0; i < npages; i++) { - if ((fs->fault_flags & VM_FAULT_WIRE) != 0) + if ((fs->fault_flags & VM_FAULT_WIRE) != 0 && + m[i].pindex == fs->first_pindex) vm_page_wire(&m[i]); else vm_page_activate(&m[i]); - if (fs->m_hold != NULL && m[i].pindex == fs->first_pindex) { + if (fs->m_hold != NULL && + m[i].pindex == fs->first_pindex) { (*fs->m_hold) = &m[i]; vm_page_wire(&m[i]); }