[SeaBIOS] [PATCH] add volatile to code that gets optimized out

Bruce Rogers brogers at novell.com
Wed Mar 10 04:36:11 CET 2010


The gcc 4.5 compiler is optimizing out some code used to bring up auxillary processors. Adding volatile to the auxillary processor jump trampoline memory references gets the bios able to boot with -smp >1 again. 

Signed-off-by: Bruce Rogers <brogers at novell.com> 

smp.c |    6 +++--- 
1 file changed, 3 insertions(+), 3 deletions(-) 

diff --git a/src/smp.c b/src/smp.c 
index dac95bf..ce7c81c 100644 
--- a/src/smp.c 
+++ b/src/smp.c 
@@ -84,11 +84,11 @@ smp_probe(void) 
     writel(&CountCPUs, 1); 

     // Setup jump trampoline to counter code. 
-    u64 old = *(u64*)BUILD_AP_BOOT_ADDR; 
+    u64 old = *(volatile u64*)BUILD_AP_BOOT_ADDR; 
     // ljmpw $SEG_BIOS, $(smp_ap_boot_code - BUILD_BIOS_ADDR) 
     u64 new = (0xea | ((u64)SEG_BIOS<<24) 
                | (((u32)smp_ap_boot_code - BUILD_BIOS_ADDR) << 8)); 
-    *(u64*)BUILD_AP_BOOT_ADDR = new; 
+    *(volatile u64*)BUILD_AP_BOOT_ADDR = new; 

     // enable local APIC 
     u32 val = readl(APIC_SVR); 
@@ -117,7 +117,7 @@ smp_probe(void) 
     } 

     // Restore memory. 
-    *(u64*)BUILD_AP_BOOT_ADDR = old; 
+    *(volatile u64*)BUILD_AP_BOOT_ADDR = old; 

     MaxCountCPUs = qemu_cfg_get_max_cpus(); 
     if (!MaxCountCPUs || MaxCountCPUs < CountCPUs) 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.seabios.org/pipermail/seabios/attachments/20100309/a4c935d0/attachment.htm>


More information about the SeaBIOS mailing list