[LinuxBIOS] PATCH: nested spinlock hang when initializing x86 sibling CPUs

Lu, Yinghai yinghai.lu at amd.com
Fri Sep 9 22:10:48 CEST 2005


Please do not touch SERIAL_CPU_INIT. That doesn't hurt.

YH

-----Original Message-----
From: Steven J. Magnani [mailto:steve at digidescorp.com] 
Sent: Friday, September 09, 2005 12:59 PM
To: Lu, Yinghai; yinghailu at gmail.com
Cc: linuxbios at openbios.org
Subject: RE: [LinuxBIOS] PATCH: nested spinlock hang when initializing
x86 sibling CPUs

Here is a revised patch which works in the Intel world. Let me know if
this causes any problems in the AMD world.

I'm still planning on making the comment changes to
src/config/Options.lb, unless someone thinks I've made things more
confusing.


PATCH:

--- src/cpu/x86/lapic/lapic_cpu_init.c.orig	2005-09-09
09:29:25.156250000 -0500
+++ src/cpu/x86/lapic/lapic_cpu_init.c	2005-09-09 14:54:51.218750000
-0500
@@ -227,20 +227,26 @@
 }
 
 /* C entry point of secondary cpus */
+
+// secondary_cpu_lock is used to serialize initialization of secondary
CPUs
+// This can be used to avoid interleaved debugging messages.
+
+static spinlock_t secondary_cpu_lock = SPIN_LOCK_UNLOCKED;
+
 void secondary_cpu_init(void)
 {
 	atomic_inc(&active_cpus);
+
 #if SERIAL_CPU_INIT == 1
-  #if CONFIG_MAX_CPUS>2
-	spin_lock(&start_cpu_lock);
-  #endif
+	spin_lock(&secondary_cpu_lock);
 #endif
+
 	cpu_initialize();
+
 #if SERIAL_CPU_INIT == 1
-  #if CONFIG_MAX_CPUS>2
-	spin_unlock(&start_cpu_lock);
-  #endif
+	spin_unlock(&secondary_cpu_lock);
 #endif
+
 	atomic_dec(&active_cpus);
 	stop_this_cpu();
 }
------------------------------------------------------------------------
 Steven J. Magnani               "I claim this network for MARS!
 www.digidescorp.com              Earthling, return my space modulator!"

 #include <standard.disclaimer>









More information about the coreboot mailing list