Fix smp cpu detect on gcc 4.5.
authorKevin O'Connor <kevin@koconnor.net>
Thu, 11 Mar 2010 03:32:26 +0000 (22:32 -0500)
committerKevin O'Connor <kevin@koconnor.net>
Sat, 13 Mar 2010 23:39:40 +0000 (18:39 -0500)
Bruce Rogers <brogers@novell.com> observed new compiler optimizing
away memory assign in smp detect.  Add barrier() to code to ensure gcc
knows the SIPI can read/write memory.

src/smp.c

index dac95bf41cff333079b3359d0462d03d79e39bf5..f989ec129d023f85d651e255e61662454e25c524 100644 (file)
--- a/src/smp.c
+++ b/src/smp.c
@@ -103,6 +103,7 @@ smp_probe(void)
     }
 
     // broadcast SIPI
+    barrier();
     writel(APIC_ICR_LOW, 0x000C4500);
     u32 sipi_vector = BUILD_AP_BOOT_ADDR >> 12;
     writel(APIC_ICR_LOW, 0x000C4600 | sipi_vector);
@@ -113,7 +114,7 @@ smp_probe(void)
     } else {
         u8 cmos_smp_count = inb_cmos(CMOS_BIOS_SMP_COUNT);
         while (cmos_smp_count + 1 != readl(&CountCPUs))
-             ;
+            yield();
     }
 
     // Restore memory.