svn commit: r205497 - head/sys/powerpc/aim
Nathan Whitehorn
nwhitehorn at FreeBSD.org
Tue Mar 23 01:11:10 UTC 2010
Author: nwhitehorn
Date: Tue Mar 23 01:11:10 2010
New Revision: 205497
URL: http://svn.freebsd.org/changeset/base/205497
Log:
Open Firmware on powerpc is generally non-reetrant, so serialize all
OF calls with a mutex.
Modified:
head/sys/powerpc/aim/ofw_machdep.c
Modified: head/sys/powerpc/aim/ofw_machdep.c
==============================================================================
--- head/sys/powerpc/aim/ofw_machdep.c Tue Mar 23 01:09:45 2010 (r205496)
+++ head/sys/powerpc/aim/ofw_machdep.c Tue Mar 23 01:11:10 2010 (r205497)
@@ -63,6 +63,8 @@ __FBSDID("$FreeBSD$");
static struct mem_region OFmem[OFMEM_REGIONS + 1], OFavail[OFMEM_REGIONS + 3];
static struct mem_region OFfree[OFMEM_REGIONS + 3];
+static struct mtx ofw_mutex;
+
struct mem_region64 {
vm_offset_t mr_start_hi;
vm_offset_t mr_start_lo;
@@ -281,6 +283,8 @@ OF_bootstrap()
{
boolean_t status = FALSE;
+ mtx_init(&ofw_mutex, "open firmware", NULL, MTX_DEF);
+
if (ofwcall != NULL) {
if (ofw_real_mode)
status = OF_install(OFW_STD_REAL, 0);
@@ -314,6 +318,8 @@ openfirmware(void *args)
if (pmap_bootstrapped && ofw_real_mode)
args = (void *)pmap_kextract((vm_offset_t)args);
+ mtx_lock(&ofw_mutex);
+
__asm __volatile( "\t"
"sync\n\t"
"mfmsr %0\n\t"
@@ -366,6 +372,8 @@ openfirmware(void *args)
: : "r" (oldmsr)
);
+ mtx_unlock(&ofw_mutex);
+
return (result);
}
More information about the svn-src-all
mailing list