Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 28 Jan 2010 14:09:17 +0000 (UTC)
From:      Randall Stewart <rrs@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r203115 - head/sys/mips/mips
Message-ID:  <201001281409.o0SE9HJH060769@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: rrs
Date: Thu Jan 28 14:09:16 2010
New Revision: 203115
URL: http://svn.freebsd.org/changeset/base/203115

Log:
  Fix two of the extended memory hacks. The copy pages
  routine in one place was setting the valid2 bit to
  2 not 1. This meant the PTE was NOT valid and so
  you would crash.
  
  In Zero Page there was a incorrect setting of
  the valid bit AFTER the actual zero (opps)..
  
  Hopefully this will fix the 0xc0000000 crashes
  that I have been seeing (unless of course there are
  other problems with these old hacks of mine to get
  to memory above 512Meg)

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

Modified: head/sys/mips/mips/pmap.c
==============================================================================
--- head/sys/mips/mips/pmap.c	Thu Jan 28 14:03:06 2010	(r203114)
+++ head/sys/mips/mips/pmap.c	Thu Jan 28 14:09:16 2010	(r203115)
@@ -2273,8 +2273,8 @@ pmap_zero_page(vm_page_t m)
 		PMAP_LGMEM_LOCK(sysm);
 		sched_pin();
 		sysm->CMAP1 = mips_paddr_to_tlbpfn(phys) | PTE_RW | PTE_V | PTE_G | PTE_W | PTE_CACHE;
-		pmap_TLB_update_kernel((vm_offset_t)sysm->CADDR1, sysm->CMAP1);
 		sysm->valid1 = 1;
+		pmap_TLB_update_kernel((vm_offset_t)sysm->CADDR1, sysm->CMAP1);
 		bzero(sysm->CADDR1, PAGE_SIZE);
 		pmap_TLB_invalidate_kernel((vm_offset_t)sysm->CADDR1);
 		sysm->CMAP1 = 0;
@@ -2446,7 +2446,7 @@ pmap_copy_page(vm_page_t src, vm_page_t 
 				va_src = MIPS_PHYS_TO_CACHED(phy_src);
 				sysm->CMAP2 = mips_paddr_to_tlbpfn(phy_dst) | PTE_RW | PTE_V | PTE_G | PTE_W | PTE_CACHE;
 				pmap_TLB_update_kernel((vm_offset_t)sysm->CADDR2, sysm->CMAP2);
-				sysm->valid2 = 2;
+				sysm->valid2 = 1;
 				va_dst = (vm_offset_t)sysm->CADDR2;
 			} else if (phy_dst < MIPS_KSEG0_LARGEST_PHYS) {
 				/* one side needs mapping - src */



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