From owner-svn-src-projects@FreeBSD.ORG Fri Nov 13 09:24:09 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id AE84A1065670; Fri, 13 Nov 2009 09:24:09 +0000 (UTC) (envelope-from neel@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 9ED998FC1A; Fri, 13 Nov 2009 09:24:09 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id nAD9O9bN060657; Fri, 13 Nov 2009 09:24:09 GMT (envelope-from neel@svn.freebsd.org) Received: (from neel@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id nAD9O9U2060655; Fri, 13 Nov 2009 09:24:09 GMT (envelope-from neel@svn.freebsd.org) Message-Id: <200911130924.nAD9O9U2060655@svn.freebsd.org> From: Neel Natu Date: Fri, 13 Nov 2009 09:24:09 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r199246 - projects/mips/sys/mips/mips X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 13 Nov 2009 09:24:09 -0000 Author: neel Date: Fri Nov 13 09:24:09 2009 New Revision: 199246 URL: http://svn.freebsd.org/changeset/base/199246 Log: Make pmap_copy_page() L2-cache friendly by doing the copy through the cacheable window on physical memory (KSEG0). On the Sibyte processor going through the uncacheable window (KSEG1) bypasses both L1 and L2 caches so we may end up with stale contents in the L2 cache. This also makes it consistent with the rest of the function that uses cacheable mappings to copy pages. Approved by: imp (mentor) Modified: projects/mips/sys/mips/mips/pmap.c Modified: projects/mips/sys/mips/mips/pmap.c ============================================================================== --- projects/mips/sys/mips/mips/pmap.c Fri Nov 13 09:07:33 2009 (r199245) +++ projects/mips/sys/mips/mips/pmap.c Fri Nov 13 09:24:09 2009 (r199246) @@ -2415,7 +2415,7 @@ pmap_copy_page(vm_page_t src, vm_page_t #endif { if ((phy_src < MIPS_KSEG0_LARGEST_PHYS) && (phy_dst < MIPS_KSEG0_LARGEST_PHYS)) { - /* easy case, all can be accessed via KSEG1 */ + /* easy case, all can be accessed via KSEG0 */ /* * Flush all caches for VA that are mapped to this page * to make sure that data in SDRAM is up to date @@ -2423,9 +2423,10 @@ pmap_copy_page(vm_page_t src, vm_page_t pmap_flush_pvcache(src); mips_dcache_wbinv_range_index( MIPS_PHYS_TO_CACHED(phy_dst), NBPG); - va_src = MIPS_PHYS_TO_UNCACHED(phy_src); - va_dst = MIPS_PHYS_TO_UNCACHED(phy_dst); + va_src = MIPS_PHYS_TO_CACHED(phy_src); + va_dst = MIPS_PHYS_TO_CACHED(phy_dst); bcopy((caddr_t)va_src, (caddr_t)va_dst, PAGE_SIZE); + mips_dcache_wbinv_range(va_dst, PAGE_SIZE); } else { int cpu; struct local_sysmaps *sysm;