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-head mailing list