Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 23 Aug 2016 16:12:25 +0000 (UTC)
From:      Andrew Turner <andrew@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r304687 - head/sys/arm64/arm64
Message-ID:  <201608231612.u7NGCPi3052791@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: andrew
Date: Tue Aug 23 16:12:25 2016
New Revision: 304687
URL: https://svnweb.freebsd.org/changeset/base/304687

Log:
  If we find we have a superpage in pmap_enter_quick_locked return without
  trying to add a new level 3 page.
  
  Obtained from:	ABT Systems Ltd
  MFC after:	1 month
  Sponsored by:	The FreeBSD Foundation

Modified:
  head/sys/arm64/arm64/pmap.c

Modified: head/sys/arm64/arm64/pmap.c
==============================================================================
--- head/sys/arm64/arm64/pmap.c	Tue Aug 23 15:49:31 2016	(r304686)
+++ head/sys/arm64/arm64/pmap.c	Tue Aug 23 16:12:25 2016	(r304687)
@@ -2696,7 +2696,7 @@ pmap_enter_quick_locked(pmap_t pmap, vm_
 {
 	struct spglist free;
 	pd_entry_t *pde;
-	pt_entry_t *l3;
+	pt_entry_t *l2, *l3;
 	vm_paddr_t pa;
 	int lvl;
 
@@ -2731,6 +2731,12 @@ pmap_enter_quick_locked(pmap_t pmap, vm_
 			 * attempt to allocate a page table page.  If this
 			 * attempt fails, we don't retry.  Instead, we give up.
 			 */
+			if (lvl == 1) {
+				l2 = pmap_l1_to_l2(pde, va);
+				if ((pmap_load(l2) & ATTR_DESCR_MASK) ==
+				    L2_BLOCK)
+					return (NULL);
+			}
 			if (lvl == 2 && pmap_load(pde) != 0) {
 				mpte =
 				    PHYS_TO_VM_PAGE(pmap_load(pde) & ~ATTR_MASK);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201608231612.u7NGCPi3052791>