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 " projects" 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;