kernel: use x2apic on hypervisor, or if already enabled.
* this can be disabled per safe mode setting.
This commit is contained in:
@@ -11,7 +11,7 @@
|
||||
#define B_SAFEMODE_DISABLE_IOAPIC "disable_ioapic"
|
||||
#define B_SAFEMODE_DISABLE_ACPI "disable_acpi"
|
||||
#define B_SAFEMODE_DISABLE_APIC "disable_apic"
|
||||
#define B_SAFEMODE_ENABLE_X2APIC "enable_x2apic"
|
||||
#define B_SAFEMODE_DISABLE_X2APIC "disable_x2apic"
|
||||
#define B_SAFEMODE_DISABLE_SMEP_SMAP "disable_smep_smap"
|
||||
#define B_SAFEMODE_DISABLE_APM "disable_apm"
|
||||
#define B_SAFEMODE_DISABLE_SMP "disable_smp"
|
||||
|
||||
@@ -583,17 +583,10 @@ smp_add_safemode_menus(Menu *menu)
|
||||
cpuid_info info;
|
||||
if (get_current_cpuid(&info, 1, 0) == B_OK
|
||||
&& (info.regs.ecx & IA32_FEATURE_EXT_X2APIC) != 0) {
|
||||
#if 0
|
||||
menu->AddItem(item = new(nothrow) MenuItem("Disable X2APIC"));
|
||||
item->SetType(MENU_ITEM_MARKABLE);
|
||||
item->SetData(B_SAFEMODE_DISABLE_X2APIC);
|
||||
item->SetHelpText("Disables using X2APIC.");
|
||||
#else
|
||||
menu->AddItem(item = new(nothrow) MenuItem("Enable X2APIC"));
|
||||
item->SetType(MENU_ITEM_MARKABLE);
|
||||
item->SetData(B_SAFEMODE_ENABLE_X2APIC);
|
||||
item->SetHelpText("Enables using X2APIC.");
|
||||
#endif
|
||||
}
|
||||
|
||||
if (get_current_cpuid(&info, 7, 0) == B_OK
|
||||
|
||||
@@ -397,17 +397,10 @@ smp_add_safemode_menus(Menu *menu)
|
||||
cpuid_info info;
|
||||
if (get_current_cpuid(&info, 1, 0) == B_OK
|
||||
&& (info.regs.ecx & IA32_FEATURE_EXT_X2APIC) != 0) {
|
||||
#if 0
|
||||
menu->AddItem(item = new(nothrow) MenuItem("Disable X2APIC"));
|
||||
item->SetType(MENU_ITEM_MARKABLE);
|
||||
item->SetData(B_SAFEMODE_DISABLE_X2APIC);
|
||||
item->SetHelpText("Disables using X2APIC.");
|
||||
#else
|
||||
menu->AddItem(item = new(nothrow) MenuItem("Enable X2APIC"));
|
||||
item->SetType(MENU_ITEM_MARKABLE);
|
||||
item->SetData(B_SAFEMODE_ENABLE_X2APIC);
|
||||
item->SetHelpText("Enables using X2APIC.");
|
||||
#endif
|
||||
}
|
||||
|
||||
if (get_current_cpuid(&info, 7, 0) == B_OK
|
||||
|
||||
@@ -265,23 +265,19 @@ apic_init(kernel_args *args)
|
||||
if (args->arch_args.apic == NULL)
|
||||
return B_NO_INIT;
|
||||
|
||||
if (x86_check_feature(IA32_FEATURE_EXT_X2APIC, FEATURE_EXT)) {
|
||||
uint64 apic_base = x86_read_msr(IA32_MSR_APIC_BASE);
|
||||
|
||||
if (x86_check_feature(IA32_FEATURE_EXT_X2APIC, FEATURE_EXT)
|
||||
&& (x86_check_feature(IA32_FEATURE_EXT_HYPERVISOR, FEATURE_EXT)
|
||||
|| ((apic_base & IA32_MSR_APIC_BASE_X2APIC) != 0))) {
|
||||
dprintf("found x2apic\n");
|
||||
#if 0
|
||||
if (!get_safemode_boolean(B_SAFEMODE_DISABLE_X2APIC, false)) {
|
||||
|
||||
if (get_safemode_boolean(B_SAFEMODE_DISABLE_X2APIC, false)) {
|
||||
dprintf("x2apic disabled per safemode setting\n");
|
||||
} else {
|
||||
sX2APIC = true;
|
||||
return B_OK;
|
||||
}
|
||||
|
||||
dprintf("x2apic disabled per safemode setting\n");
|
||||
#else
|
||||
if (get_safemode_boolean(B_SAFEMODE_ENABLE_X2APIC, false)) {
|
||||
sX2APIC = true;
|
||||
|
||||
dprintf("x2apic enabled per safemode setting\n");
|
||||
return B_OK;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
sLocalAPIC = args->arch_args.apic;
|
||||
|
||||
Reference in New Issue
Block a user