Since .data isn't reset on a reboot, it's confusing to reset .bss.
Fixup all places that assumed .bss variables were reset.
dprintf(1, "No room for e820 map!\n");
return;
}
+ e820_count = 0;
e820_list = (void*)bios_table_cur_addr;
bios_table_cur_addr += msize;
}
mathcp_setup();
pci_bus_setup();
+ smp_probe_setup();
memmap_setup();
ram_probe();
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()
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();
return smp_cpus;
}
+
+// Reset smp_cpus to zero (forces a recheck on reboots).
+void
+smp_probe_setup(void)
+{
+ smp_cpus = 0;
+}
// smpdetect.c
int smp_probe(void);
+void smp_probe_setup(void);
// mptable.c
void mptable_init(void);