|
@@ -20,18 +20,19 @@ static int set_x2apic_phys_mode(char *arg)
|
|
|
}
|
|
|
early_param("x2apic_phys", set_x2apic_phys_mode);
|
|
|
|
|
|
-static int x2apic_acpi_madt_oem_check(char *oem_id, char *oem_table_id)
|
|
|
+static bool x2apic_fadt_phys(void)
|
|
|
{
|
|
|
- if (x2apic_phys)
|
|
|
- return x2apic_enabled();
|
|
|
- else if ((acpi_gbl_FADT.header.revision >= FADT2_REVISION_ID) &&
|
|
|
- (acpi_gbl_FADT.flags & ACPI_FADT_APIC_PHYSICAL) &&
|
|
|
- x2apic_enabled()) {
|
|
|
+ if ((acpi_gbl_FADT.header.revision >= FADT2_REVISION_ID) &&
|
|
|
+ (acpi_gbl_FADT.flags & ACPI_FADT_APIC_PHYSICAL)) {
|
|
|
printk(KERN_DEBUG "System requires x2apic physical mode\n");
|
|
|
- return 1;
|
|
|
+ return true;
|
|
|
}
|
|
|
- else
|
|
|
- return 0;
|
|
|
+ return false;
|
|
|
+}
|
|
|
+
|
|
|
+static int x2apic_acpi_madt_oem_check(char *oem_id, char *oem_table_id)
|
|
|
+{
|
|
|
+ return x2apic_enabled() && (x2apic_phys || x2apic_fadt_phys());
|
|
|
}
|
|
|
|
|
|
static void
|
|
@@ -82,7 +83,7 @@ static void init_x2apic_ldr(void)
|
|
|
|
|
|
static int x2apic_phys_probe(void)
|
|
|
{
|
|
|
- if (x2apic_mode && x2apic_phys)
|
|
|
+ if (x2apic_mode && (x2apic_phys || x2apic_fadt_phys()))
|
|
|
return 1;
|
|
|
|
|
|
return apic == &apic_x2apic_phys;
|