Index: sys/arch/arm/include/arm32/pmap.h =================================================================== RCS file: /cvsroot/src/sys/arch/arm/include/arm32/pmap.h,v retrieving revision 1.128 diff -u -p -r1.128 pmap.h --- sys/arch/arm/include/arm32/pmap.h 31 Mar 2014 01:48:37 -0000 1.128 +++ sys/arch/arm/include/arm32/pmap.h 31 Mar 2014 18:19:58 -0000 @@ -545,14 +545,20 @@ l1pte_set(pt_entry_t *pdep, pt_entry_t p static inline void l2pte_set(pt_entry_t *ptep, pt_entry_t pte, pt_entry_t opte) { - for (size_t k = 0; k < PAGE_SIZE / L2_S_SIZE; k++) { - KASSERTMSG(*ptep == opte, "%#x [*%p] != %#x", *ptep, ptep, opte); - *ptep++ = pte; - pte += L2_S_SIZE; - if (opte) - opte += L2_S_SIZE; + if (l1pte_lpage_p(pte)) { + for (size_t k = 0; k < 16; k++) { + *ptep++ = pte; + } + } else { + for (size_t k = 0; k < PAGE_SIZE / L2_S_SIZE; k++) { + KASSERTMSG(*ptep == opte, "%#x [*%p] != %#x", *ptep, ptep, opte); + *ptep++ = pte; + pte += L2_S_SIZE; + if (opte) + opte += L2_S_SIZE; + } } -} +} static inline void l2pte_reset(pt_entry_t *ptep)