Index: sys/arm/arm/pmap-v6.c =================================================================== --- sys/arm/arm/pmap-v6.c +++ sys/arm/arm/pmap-v6.c @@ -1633,11 +1633,11 @@ } /* - * Zero L2 page table page. + * Sync L2 page table page. * Use same KVA as in pmap_zero_page(). */ static __inline vm_paddr_t -pmap_pt2pg_zero(vm_page_t m) +pmap_pt2pg_sync(vm_page_t m) { pt2_entry_t *cmap2_pte2p; vm_paddr_t pa; @@ -1657,9 +1657,6 @@ panic("%s: CMAP2 busy", __func__); pte2_store(cmap2_pte2p, PTE2_KERN_NG(pa, PTE2_AP_KRW, vm_page_pte2_attr(m))); - /* Even VM_ALLOC_ZERO request is only advisory. */ - if ((m->flags & PG_ZERO) == 0) - pagezero(pc->pc_cmap2_addr); pte2_sync_range((pt2_entry_t *)pc->pc_cmap2_addr, PAGE_SIZE); pte2_clear(cmap2_pte2p); tlb_flush((vm_offset_t)pc->pc_cmap2_addr); @@ -1689,8 +1686,8 @@ if (m->md.pat_mode != pt_memattr) pmap_page_set_memattr(m, pt_memattr); - /* Zero page and init wire counts. */ - pa = pmap_pt2pg_zero(m); + /* Sync page and init wire counts. */ + pa = pmap_pt2pg_sync(m); pt2_wirecount_init(m); /* @@ -3713,7 +3710,8 @@ */ if ((opte1 & PTE1_A) == 0 || (m = vm_page_alloc(NULL, pte1_index(va) & ~PT2PG_MASK, VM_ALLOC_NOOBJ | - VM_ALLOC_NORMAL | VM_ALLOC_WIRED)) == NULL) { + VM_ALLOC_NORMAL | VM_ALLOC_WIRED | VM_ALLOC_ZERO)) == + NULL) { SLIST_INIT(&free); pmap_remove_pte1(pmap, pte1p, pte1_trunc(va), &free); vm_page_free_pages_toq(&free, false);