diff options
author | Jan Beulich <jbeulich@suse.com> | 2013-02-22 11:56:54 +0100 |
---|---|---|
committer | Jan Beulich <jbeulich@suse.com> | 2013-02-22 11:56:54 +0100 |
commit | 992fdf6f46252a459c6b1b8d971b2c71f01460f8 (patch) | |
tree | 060afbc1a832d4ab407effd8fc21ad31e05498e8 /xen/arch/x86/genapic | |
parent | f74556693bca2ff61e3e0c103f90e1d552d795b6 (diff) | |
download | xen-992fdf6f46252a459c6b1b8d971b2c71f01460f8.tar.gz xen-992fdf6f46252a459c6b1b8d971b2c71f01460f8.tar.bz2 xen-992fdf6f46252a459c6b1b8d971b2c71f01460f8.zip |
honor ACPI v4 FADT flags
- force use of physical APIC mode if indicated so (as we don't support
xAPIC cluster mode, the respective flag is taken to force physical
mode too)
- don't use MSI if indicated so (implies no IOMMU)
Both can be overridden on the command line, for the MSI case this at
once adds a new command line option allowing to turn off PCI MSI (IOMMU
and HPET are unaffected by this).
Signed-off-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Keir Fraser <keir@xen.org>
Diffstat (limited to 'xen/arch/x86/genapic')
-rw-r--r-- | xen/arch/x86/genapic/bigsmp.c | 9 | ||||
-rw-r--r-- | xen/arch/x86/genapic/x2apic.c | 9 |
2 files changed, 14 insertions, 4 deletions
diff --git a/xen/arch/x86/genapic/bigsmp.c b/xen/arch/x86/genapic/bigsmp.c index 62d255eb65..96b23d6a2b 100644 --- a/xen/arch/x86/genapic/bigsmp.c +++ b/xen/arch/x86/genapic/bigsmp.c @@ -40,7 +40,14 @@ static struct dmi_system_id __initdata bigsmp_dmi_table[] = { static __init int probe_bigsmp(void) { - if (!def_to_bigsmp) + /* + * We don't implement cluster mode, so force use of + * physical mode in both cases. + */ + if (acpi_gbl_FADT.flags & + (ACPI_FADT_APIC_CLUSTER | ACPI_FADT_APIC_PHYSICAL)) + def_to_bigsmp = 1; + else if (!def_to_bigsmp) dmi_check_system(bigsmp_dmi_table); return def_to_bigsmp; } diff --git a/xen/arch/x86/genapic/x2apic.c b/xen/arch/x86/genapic/x2apic.c index 3616011d37..d4c91495ac 100644 --- a/xen/arch/x86/genapic/x2apic.c +++ b/xen/arch/x86/genapic/x2apic.c @@ -30,9 +30,6 @@ #include <xen/smp.h> #include <asm/mach-default/mach_mpparse.h> -static bool_t __initdata x2apic_phys; /* By default we use logical cluster mode. */ -boolean_param("x2apic_phys", x2apic_phys); - static DEFINE_PER_CPU_READ_MOSTLY(u32, cpu_2_logical_apicid); static DEFINE_PER_CPU_READ_MOSTLY(cpumask_t *, cluster_cpus); static cpumask_t *cluster_cpus_spare; @@ -223,8 +220,14 @@ static struct notifier_block x2apic_cpu_nfb = { .notifier_call = update_clusterinfo }; +static s8 __initdata x2apic_phys = -1; /* By default we use logical cluster mode. */ +boolean_param("x2apic_phys", x2apic_phys); + const struct genapic *__init apic_x2apic_probe(void) { + if ( x2apic_phys < 0 ) + x2apic_phys = !!(acpi_gbl_FADT.flags & ACPI_FADT_APIC_PHYSICAL); + if ( x2apic_phys ) return &apic_x2apic_phys; |