Don't reset .bss on reboots.
authorKevin O'Connor <kevin@koconnor.net>
Sat, 29 Nov 2008 16:19:19 +0000 (11:19 -0500)
committerKevin O'Connor <kevin@koconnor.net>
Sat, 29 Nov 2008 16:19:19 +0000 (11:19 -0500)
Since .data isn't reset on a reboot, it's confusing to reset .bss.
Fixup all places that assumed .bss variables were reset.

src/memmap.c
src/post.c
src/smpdetect.c
src/util.h

index f74f4f2672480d9b19e6a48202066e953ed4584a..16c57ac1a06ad142d58146e529f9981f92c536b6 100644 (file)
@@ -142,6 +142,7 @@ memmap_setup()
         dprintf(1, "No room for e820 map!\n");
         return;
     }
+    e820_count = 0;
     e820_list = (void*)bios_table_cur_addr;
     bios_table_cur_addr += msize;
 }
index 03049ee1fb82d7c87395437fc7aa8a810626dbc4..68a473ce7e1469f5b82dec0c38e16a5aa0473442 100644 (file)
@@ -196,6 +196,7 @@ post()
     mathcp_setup();
 
     pci_bus_setup();
+    smp_probe_setup();
 
     memmap_setup();
     ram_probe();
@@ -219,15 +220,6 @@ post()
     optionrom_setup();
 }
 
-// Clear .bss section for C code.
-static void
-clear_bss()
-{
-    dprintf(3, "clearing .bss section\n");
-    extern char __bss_start[], __bss_end[];
-    memset(__bss_start, 0, __bss_end - __bss_start);
-}
-
 // Reset DMA controller
 static void
 init_dma()
@@ -278,9 +270,8 @@ _start()
     debug_serial_setup();
     dprintf(1, "Start bios\n");
 
-    // Setup for .bss and .data sections
+    // Allow writes to modify bios area (0xf0000)
     make_bios_writable();
-    clear_bss();
 
     // Perform main setup code.
     post();
index eda0ecfd87ea6be7866eef9188c48eedbd47d5a3..56069df729f31ac0de5d5e40c9501a31112b4852 100644 (file)
@@ -105,3 +105,10 @@ smp_probe(void)
 
     return smp_cpus;
 }
+
+// Reset smp_cpus to zero (forces a recheck on reboots).
+void
+smp_probe_setup(void)
+{
+    smp_cpus = 0;
+}
index dadc517fdd52bab2816455b17aa02a8426b63f7f..b356c4ed31e556283d54ab81885b1daaebce9ffe 100644 (file)
@@ -148,6 +148,7 @@ void smm_init();
 
 // smpdetect.c
 int smp_probe(void);
+void smp_probe_setup(void);
 
 // mptable.c
 void mptable_init(void);