svn commit: r268655 - head/sys/arm/arm

Alan Cox alc at FreeBSD.org
Tue Jul 15 05:34:28 UTC 2014


Author: alc
Date: Tue Jul 15 05:34:27 2014
New Revision: 268655
URL: http://svnweb.freebsd.org/changeset/base/268655

Log:
  Eliminate repeated calculation of next_bucket in pmap_protect() and
  pmap_remove().  Eliminate an unnecessary variable from pmap_remove() and
  pmap_advise().

Modified:
  head/sys/arm/arm/pmap-v6.c

Modified: head/sys/arm/arm/pmap-v6.c
==============================================================================
--- head/sys/arm/arm/pmap-v6.c	Tue Jul 15 05:32:53 2014	(r268654)
+++ head/sys/arm/arm/pmap-v6.c	Tue Jul 15 05:34:27 2014	(r268655)
@@ -2842,8 +2842,8 @@ pmap_protect(pmap_t pmap, vm_offset_t sv
 			 * Are we protecting the entire large page? If not,
 			 * demote the mapping and fall through.
 			 */
-			if (sva + L1_S_SIZE == L2_NEXT_BUCKET(sva) &&
-			    eva >= L2_NEXT_BUCKET(sva)) {
+			if (sva + L1_S_SIZE == next_bucket &&
+			    eva >= next_bucket) {
 				l1pd &= ~(L1_S_PROT_MASK | L1_S_XN);
 				if (!(prot & VM_PROT_EXECUTE))
 					*pl1pd |= L1_S_XN;
@@ -4305,7 +4305,7 @@ pmap_remove(pmap_t pmap, vm_offset_t sva
 {
 	struct l2_bucket *l2b;
 	vm_offset_t next_bucket;
-	pd_entry_t *pl1pd, l1pd;
+	pd_entry_t l1pd;
 	pt_entry_t *ptep;
 	u_int total;
 	u_int mappings, is_exec, is_refd;
@@ -4320,11 +4320,12 @@ pmap_remove(pmap_t pmap, vm_offset_t sva
 	PMAP_LOCK(pmap);
 	total = 0;
 	while (sva < eva) {
+		next_bucket = L2_NEXT_BUCKET(sva);
+
 		/*
 		 * Check for large page.
 		 */
-		pl1pd = &pmap->pm_l1->l1_kva[L1_IDX(sva)];
-		l1pd = *pl1pd;
+		l1pd = pmap->pm_l1->l1_kva[L1_IDX(sva)];
 		if ((l1pd & L1_TYPE_MASK) == L1_S_PROTO) {
 			KASSERT((l1pd & L1_S_DOM_MASK) !=
 			    L1_S_DOM(PMAP_DOMAIN_KERNEL), ("pmap_remove: "
@@ -4333,21 +4334,20 @@ pmap_remove(pmap_t pmap, vm_offset_t sva
 			 * Are we removing the entire large page?  If not,
 			 * demote the mapping and fall through.
 			 */
-			if (sva + L1_S_SIZE == L2_NEXT_BUCKET(sva) &&
-			    eva >= L2_NEXT_BUCKET(sva)) {
+			if (sva + L1_S_SIZE == next_bucket &&
+			    eva >= next_bucket) {
 				pmap_remove_section(pmap, sva);
-				sva = L2_NEXT_BUCKET(sva);
+				sva = next_bucket;
 				continue;
 			} else if (!pmap_demote_section(pmap, sva)) {
 				/* The large page mapping was destroyed. */
-				sva = L2_NEXT_BUCKET(sva);
+				sva = next_bucket;
 				continue;
 			}
 		}
 		/*
 		 * Do one L2 bucket's worth at a time.
 		 */
-		next_bucket = L2_NEXT_BUCKET(sva);
 		if (next_bucket > eva)
 			next_bucket = eva;
 
@@ -4846,7 +4846,7 @@ pmap_advise(pmap_t pmap, vm_offset_t sva
 {
 	struct l2_bucket *l2b;
 	struct pv_entry *pve;
-	pd_entry_t *pl1pd, l1pd;
+	pd_entry_t l1pd;
 	pt_entry_t *ptep, opte, pte;
 	vm_offset_t next_bucket;
 	vm_page_t m;
@@ -4859,8 +4859,7 @@ pmap_advise(pmap_t pmap, vm_offset_t sva
 		next_bucket = L2_NEXT_BUCKET(sva);
 		if (next_bucket < sva)
 			next_bucket = eva;
-		pl1pd = &pmap->pm_l1->l1_kva[L1_IDX(sva)];
-		l1pd = *pl1pd;
+		l1pd = pmap->pm_l1->l1_kva[L1_IDX(sva)];
 		if ((l1pd & L1_TYPE_MASK) == L1_S_PROTO) {
 			if (pmap == pmap_kernel())
 				continue;


More information about the svn-src-head mailing list