From owner-svn-src-projects@FreeBSD.ORG  Fri Aug 29 08:55:45 2014
Return-Path: <owner-svn-src-projects@FreeBSD.ORG>
Delivered-To: svn-src-projects@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115])
 (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits))
 (No client certificate requested)
 by hub.freebsd.org (Postfix) with ESMTPS id 0AB09565;
 Fri, 29 Aug 2014 08:55:45 +0000 (UTC)
Received: from svn.freebsd.org (svn.freebsd.org
 [IPv6:2001:1900:2254:2068::e6a:0])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id D11781B2D;
 Fri, 29 Aug 2014 08:55:44 +0000 (UTC)
Received: from svn.freebsd.org ([127.0.1.70])
 by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id s7T8tiAG023155;
 Fri, 29 Aug 2014 08:55:44 GMT (envelope-from andrew@FreeBSD.org)
Received: (from andrew@localhost)
 by svn.freebsd.org (8.14.9/8.14.9/Submit) id s7T8tiuj023154;
 Fri, 29 Aug 2014 08:55:44 GMT (envelope-from andrew@FreeBSD.org)
Message-Id: <201408290855.s7T8tiuj023154@svn.freebsd.org>
X-Authentication-Warning: svn.freebsd.org: andrew set sender to
 andrew@FreeBSD.org using -f
From: Andrew Turner <andrew@FreeBSD.org>
Date: Fri, 29 Aug 2014 08:55:44 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject: svn commit: r270790 - projects/arm64/sys/arm64/arm64
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.18-1
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 29 Aug 2014 08:55:45 -0000

Author: andrew
Date: Fri Aug 29 08:55:44 2014
New Revision: 270790
URL: http://svnweb.freebsd.org/changeset/base/270790

Log:
  Implemenet more of pmap_enter

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

Modified: projects/arm64/sys/arm64/arm64/pmap.c
==============================================================================
--- projects/arm64/sys/arm64/arm64/pmap.c	Fri Aug 29 08:42:20 2014	(r270789)
+++ projects/arm64/sys/arm64/arm64/pmap.c	Fri Aug 29 08:55:44 2014	(r270790)
@@ -1472,6 +1472,7 @@ pmap_update_pde_invalidate(pmap_t pmap, 
 		invltlb_globpcid();
 	}
 }
+#endif /* 0 */
 
 /*
  * Normal, non-SMP, invalidation functions.
@@ -1481,19 +1482,13 @@ PMAP_INLINE void
 pmap_invalidate_page(pmap_t pmap, vm_offset_t va)
 {
 
-	switch (pmap->pm_type) {
-	case PT_X86:
-		if (pmap == kernel_pmap || !CPU_EMPTY(&pmap->pm_active))
-			invlpg(va);
-		break;
-	case PT_EPT:
-		pmap->pm_eptgen++;
-		break;
-	default:
-		panic("pmap_invalidate_page: unknown type: %d", pmap->pm_type);
-	}
+	__asm __volatile(
+	    "dsb  sy		\n"
+	    "tlbi vae1, %0	\n"
+	    "dsb  sy		\n"
+	    "isb		\n"
+	    : : "r"(va));
 }
-#endif /* 0 */
 
 PMAP_INLINE void
 pmap_invalidate_range(pmap_t pmap, vm_offset_t sva, vm_offset_t eva)
@@ -3954,26 +3949,31 @@ pmap_enter(pmap_t pmap, vm_offset_t va, 
 	 */
 	if ((orig_l3 & ATTR_AF) != 0) {
 validate:
-		panic("pmap_enter: Update l3");
-#if 0
-		origpte = pte_load_store(pte, newpte);
-		opa = origpte & PG_FRAME;
+		orig_l3 = *l3;
+		*l3 = new_l3;
+		opa = orig_l3 & ~ATTR_MASK;
+
 		if (opa != pa) {
-			if ((origpte & PG_MANAGED) != 0) {
+			if ((orig_l3 & ATTR_SW_MANAGED) != 0) {
 				om = PHYS_TO_VM_PAGE(opa);
+#if 0
 				if ((origpte & (PG_M | PG_RW)) == (PG_M |
 				    PG_RW))
 					vm_page_dirty(om);
 				if ((origpte & PG_A) != 0)
 					vm_page_aflag_set(om, PGA_REFERENCED);
+#endif
 				CHANGE_PV_LIST_LOCK_TO_PHYS(&lock, opa);
 				pmap_pvh_free(&om->md, pmap, va);
+#if 0
 				if ((om->aflags & PGA_WRITEABLE) != 0 &&
 				    TAILQ_EMPTY(&om->md.pv_list) &&
 				    ((om->flags & PG_FICTITIOUS) != 0 ||
 				    TAILQ_EMPTY(&pa_to_pvh(opa)->pv_list)))
 					vm_page_aflag_clear(om, PGA_WRITEABLE);
+#endif
 			}
+#if 0
 		} else if ((newpte & PG_M) == 0 && (origpte & (PG_M |
 		    PG_RW)) == (PG_M | PG_RW)) {
 			if ((origpte & PG_MANAGED) != 0)
@@ -3989,10 +3989,12 @@ validate:
 			 * This PTE change does not require TLB invalidation.
 			 */
 			goto unchanged;
+#endif
 		}
+#if 0
 		if ((origpte & PG_A) != 0)
-			pmap_invalidate_page(pmap, va);
 #endif
+			pmap_invalidate_page(pmap, va);
 	} else
 		*l3 = new_l3;