Module Name: src Committed By: skrll Date: Mon Mar 31 18:33:21 UTC 2014
Modified Files: src/sys/arch/arm/include/arm32: pmap.h Log Message: Deal with large page mappings in l2pte_set. Now the RPI can get passed setting the new TTB. ok matt@ To generate a diff of this commit: cvs rdiff -u -r1.128 -r1.129 src/sys/arch/arm/include/arm32/pmap.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/arm/include/arm32/pmap.h diff -u src/sys/arch/arm/include/arm32/pmap.h:1.128 src/sys/arch/arm/include/arm32/pmap.h:1.129 --- src/sys/arch/arm/include/arm32/pmap.h:1.128 Mon Mar 31 01:48:37 2014 +++ src/sys/arch/arm/include/arm32/pmap.h Mon Mar 31 18:33:21 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.h,v 1.128 2014/03/31 01:48:37 matt Exp $ */ +/* $NetBSD: pmap.h,v 1.129 2014/03/31 18:33:21 skrll Exp $ */ /* * Copyright (c) 2002, 2003 Wasabi Systems, Inc. @@ -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 < L2_L_SIZE / L2_S_SIZE; 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)