svn commit: r209369 - head/sys/powerpc/aim
Nathan Whitehorn
nwhitehorn at FreeBSD.org
Sun Jun 20 16:56:49 UTC 2010
Author: nwhitehorn
Date: Sun Jun 20 16:56:48 2010
New Revision: 209369
URL: http://svn.freebsd.org/changeset/base/209369
Log:
Temporarily disable instruction relocation while setting up the kernel's
IBAT entry in early boot in order to prevent possible faults from races
between the instruction cache and the MMU.
PR: powerpc/148003
MFC after: 3 days
Modified:
head/sys/powerpc/aim/mmu_oea.c
Modified: head/sys/powerpc/aim/mmu_oea.c
==============================================================================
--- head/sys/powerpc/aim/mmu_oea.c Sun Jun 20 16:24:22 2010 (r209368)
+++ head/sys/powerpc/aim/mmu_oea.c Sun Jun 20 16:56:48 2010 (r209369)
@@ -672,6 +672,7 @@ moea_bootstrap(mmu_t mmup, vm_offset_t k
vm_size_t size, physsz, hwphyssz;
vm_offset_t pa, va, off;
void *dpcpu;
+ register_t msr;
/*
* Set up BAT0 to map the lowest 256 MB area
@@ -702,12 +703,16 @@ moea_bootstrap(mmu_t mmup, vm_offset_t k
/*
* Use an IBAT and a DBAT to map the bottom segment of memory
- * where we are.
+ * where we are. Turn off instruction relocation temporarily
+ * to prevent faults while reprogramming the IBAT.
*/
+ msr = mfmsr();
+ mtmsr(msr & ~PSL_IR);
__asm (".balign 32; \n"
"mtibatu 0,%0; mtibatl 0,%1; isync; \n"
"mtdbatu 0,%0; mtdbatl 0,%1; isync"
:: "r"(battable[0].batu), "r"(battable[0].batl));
+ mtmsr(msr);
/* map pci space */
__asm __volatile("mtdbatu 1,%0" :: "r"(battable[8].batu));
More information about the svn-src-head
mailing list