Disabling the local APIC also means disabling SMP, as the APIC is the base for
all inter-CPU messaging. The previously described timekeeping is just an extra function of local APICs. Before, if you'd select "disable local APIC" it would still blindly write to invalid memory (targetting the non-mapped local APIC) and then just hang waiting for the other CPUs (that were obviously not responding to the init sequence that wasn't programmed). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41504 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
ba0c232abb
commit
192bc027ea
@ -399,8 +399,9 @@ smp_init_other_cpus(void)
|
||||
}
|
||||
|
||||
if (get_safemode_boolean(B_SAFEMODE_DISABLE_APIC, false)) {
|
||||
TRACE(("local apic disabled per safemode setting\n"));
|
||||
TRACE(("local apic disabled per safemode setting, disabling smp\n"));
|
||||
gKernelArgs.arch_args.apic_phys = 0;
|
||||
gKernelArgs.num_cpus = 1;
|
||||
}
|
||||
|
||||
if (gKernelArgs.arch_args.apic_phys == 0)
|
||||
@ -593,10 +594,10 @@ smp_add_safemode_menus(Menu *menu)
|
||||
}
|
||||
|
||||
if (gKernelArgs.arch_args.apic_phys != 0) {
|
||||
menu->AddItem(item = new(nothrow) MenuItem("Disable LOCAL APIC"));
|
||||
menu->AddItem(item = new(nothrow) MenuItem("Disable local APIC"));
|
||||
item->SetType(MENU_ITEM_MARKABLE);
|
||||
item->SetData(B_SAFEMODE_DISABLE_APIC);
|
||||
item->SetHelpText("Disables using the LOCAL APIC for timekeeping.");
|
||||
item->SetHelpText("Disables using the local APIC, also disables SMP.");
|
||||
}
|
||||
|
||||
if (gKernelArgs.num_cpus < 2)
|
||||
|
Loading…
Reference in New Issue
Block a user