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)

Reply via email to