diff options
| -rw-r--r-- | arch/x86/include/asm/apic.h | 2 | ||||
| -rw-r--r-- | arch/x86/include/asm/x2apic.h | 5 | ||||
| -rw-r--r-- | arch/x86/kernel/acpi/boot.c | 2 | ||||
| -rw-r--r-- | arch/x86/kernel/apic/apic_numachip.c | 3 | ||||
| -rw-r--r-- | arch/x86/kernel/apic/x2apic_cluster.c | 2 | ||||
| -rw-r--r-- | arch/x86/kernel/apic/x2apic_phys.c | 2 | ||||
| -rw-r--r-- | arch/x86/kernel/apic/x2apic_uv_x.c | 7 | ||||
| -rw-r--r-- | arch/x86/mm/srat.c | 2 |
8 files changed, 17 insertions, 8 deletions
diff --git a/arch/x86/include/asm/apic.h b/arch/x86/include/asm/apic.h index a9371c91718c..d3eaac44860a 100644 --- a/arch/x86/include/asm/apic.h +++ b/arch/x86/include/asm/apic.h | |||
| @@ -535,7 +535,7 @@ static inline unsigned int read_apic_id(void) | |||
| 535 | 535 | ||
| 536 | static inline int default_apic_id_valid(int apicid) | 536 | static inline int default_apic_id_valid(int apicid) |
| 537 | { | 537 | { |
| 538 | return x2apic_mode || (apicid < 255); | 538 | return (apicid < 255); |
| 539 | } | 539 | } |
| 540 | 540 | ||
| 541 | extern void default_setup_apic_routing(void); | 541 | extern void default_setup_apic_routing(void); |
diff --git a/arch/x86/include/asm/x2apic.h b/arch/x86/include/asm/x2apic.h index 6bf5b8e478c0..92e54abf89e0 100644 --- a/arch/x86/include/asm/x2apic.h +++ b/arch/x86/include/asm/x2apic.h | |||
| @@ -18,6 +18,11 @@ static const struct cpumask *x2apic_target_cpus(void) | |||
| 18 | return cpu_online_mask; | 18 | return cpu_online_mask; |
| 19 | } | 19 | } |
| 20 | 20 | ||
| 21 | static int x2apic_apic_id_valid(int apicid) | ||
| 22 | { | ||
| 23 | return 1; | ||
| 24 | } | ||
| 25 | |||
| 21 | static int x2apic_apic_id_registered(void) | 26 | static int x2apic_apic_id_registered(void) |
| 22 | { | 27 | { |
| 23 | return 1; | 28 | return 1; |
diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c index 406ed77216d0..0f42c2f44311 100644 --- a/arch/x86/kernel/acpi/boot.c +++ b/arch/x86/kernel/acpi/boot.c | |||
| @@ -239,7 +239,7 @@ acpi_parse_x2apic(struct acpi_subtable_header *header, const unsigned long end) | |||
| 239 | * to not preallocating memory for all NR_CPUS | 239 | * to not preallocating memory for all NR_CPUS |
| 240 | * when we use CPU hotplug. | 240 | * when we use CPU hotplug. |
| 241 | */ | 241 | */ |
| 242 | if (!cpu_has_x2apic && (apic_id >= 0xff) && enabled) | 242 | if (!apic->apic_id_valid(apic_id) && enabled) |
| 243 | printk(KERN_WARNING PREFIX "x2apic entry ignored\n"); | 243 | printk(KERN_WARNING PREFIX "x2apic entry ignored\n"); |
| 244 | else | 244 | else |
| 245 | acpi_register_lapic(apic_id, enabled); | 245 | acpi_register_lapic(apic_id, enabled); |
diff --git a/arch/x86/kernel/apic/apic_numachip.c b/arch/x86/kernel/apic/apic_numachip.c index d9ea5f331ac5..899803e03214 100644 --- a/arch/x86/kernel/apic/apic_numachip.c +++ b/arch/x86/kernel/apic/apic_numachip.c | |||
| @@ -229,11 +229,10 @@ static int __init numachip_system_init(void) | |||
| 229 | } | 229 | } |
| 230 | early_initcall(numachip_system_init); | 230 | early_initcall(numachip_system_init); |
| 231 | 231 | ||
| 232 | static int __cpuinit numachip_acpi_madt_oem_check(char *oem_id, char *oem_table_id) | 232 | static int numachip_acpi_madt_oem_check(char *oem_id, char *oem_table_id) |
| 233 | { | 233 | { |
| 234 | if (!strncmp(oem_id, "NUMASC", 6)) { | 234 | if (!strncmp(oem_id, "NUMASC", 6)) { |
| 235 | numachip_system = 1; | 235 | numachip_system = 1; |
| 236 | setup_force_cpu_cap(X86_FEATURE_X2APIC); | ||
| 237 | return 1; | 236 | return 1; |
| 238 | } | 237 | } |
| 239 | 238 | ||
diff --git a/arch/x86/kernel/apic/x2apic_cluster.c b/arch/x86/kernel/apic/x2apic_cluster.c index 9193713060a9..48f3103b3c93 100644 --- a/arch/x86/kernel/apic/x2apic_cluster.c +++ b/arch/x86/kernel/apic/x2apic_cluster.c | |||
| @@ -213,7 +213,7 @@ static struct apic apic_x2apic_cluster = { | |||
| 213 | .name = "cluster x2apic", | 213 | .name = "cluster x2apic", |
| 214 | .probe = x2apic_cluster_probe, | 214 | .probe = x2apic_cluster_probe, |
| 215 | .acpi_madt_oem_check = x2apic_acpi_madt_oem_check, | 215 | .acpi_madt_oem_check = x2apic_acpi_madt_oem_check, |
| 216 | .apic_id_valid = default_apic_id_valid, | 216 | .apic_id_valid = x2apic_apic_id_valid, |
| 217 | .apic_id_registered = x2apic_apic_id_registered, | 217 | .apic_id_registered = x2apic_apic_id_registered, |
| 218 | 218 | ||
| 219 | .irq_delivery_mode = dest_LowestPrio, | 219 | .irq_delivery_mode = dest_LowestPrio, |
diff --git a/arch/x86/kernel/apic/x2apic_phys.c b/arch/x86/kernel/apic/x2apic_phys.c index bcd1db6eaca9..8a778db45e3a 100644 --- a/arch/x86/kernel/apic/x2apic_phys.c +++ b/arch/x86/kernel/apic/x2apic_phys.c | |||
| @@ -119,7 +119,7 @@ static struct apic apic_x2apic_phys = { | |||
| 119 | .name = "physical x2apic", | 119 | .name = "physical x2apic", |
| 120 | .probe = x2apic_phys_probe, | 120 | .probe = x2apic_phys_probe, |
| 121 | .acpi_madt_oem_check = x2apic_acpi_madt_oem_check, | 121 | .acpi_madt_oem_check = x2apic_acpi_madt_oem_check, |
| 122 | .apic_id_valid = default_apic_id_valid, | 122 | .apic_id_valid = x2apic_apic_id_valid, |
| 123 | .apic_id_registered = x2apic_apic_id_registered, | 123 | .apic_id_registered = x2apic_apic_id_registered, |
| 124 | 124 | ||
| 125 | .irq_delivery_mode = dest_Fixed, | 125 | .irq_delivery_mode = dest_Fixed, |
diff --git a/arch/x86/kernel/apic/x2apic_uv_x.c b/arch/x86/kernel/apic/x2apic_uv_x.c index fc4771425852..87bfa69e216e 100644 --- a/arch/x86/kernel/apic/x2apic_uv_x.c +++ b/arch/x86/kernel/apic/x2apic_uv_x.c | |||
| @@ -266,6 +266,11 @@ static void uv_send_IPI_all(int vector) | |||
| 266 | uv_send_IPI_mask(cpu_online_mask, vector); | 266 | uv_send_IPI_mask(cpu_online_mask, vector); |
| 267 | } | 267 | } |
| 268 | 268 | ||
| 269 | static int uv_apic_id_valid(int apicid) | ||
| 270 | { | ||
| 271 | return 1; | ||
| 272 | } | ||
| 273 | |||
| 269 | static int uv_apic_id_registered(void) | 274 | static int uv_apic_id_registered(void) |
| 270 | { | 275 | { |
| 271 | return 1; | 276 | return 1; |
| @@ -351,7 +356,7 @@ static struct apic __refdata apic_x2apic_uv_x = { | |||
| 351 | .name = "UV large system", | 356 | .name = "UV large system", |
| 352 | .probe = uv_probe, | 357 | .probe = uv_probe, |
| 353 | .acpi_madt_oem_check = uv_acpi_madt_oem_check, | 358 | .acpi_madt_oem_check = uv_acpi_madt_oem_check, |
| 354 | .apic_id_valid = default_apic_id_valid, | 359 | .apic_id_valid = uv_apic_id_valid, |
| 355 | .apic_id_registered = uv_apic_id_registered, | 360 | .apic_id_registered = uv_apic_id_registered, |
| 356 | 361 | ||
| 357 | .irq_delivery_mode = dest_Fixed, | 362 | .irq_delivery_mode = dest_Fixed, |
diff --git a/arch/x86/mm/srat.c b/arch/x86/mm/srat.c index 1c1c4f46a7c1..efb5b4b93711 100644 --- a/arch/x86/mm/srat.c +++ b/arch/x86/mm/srat.c | |||
| @@ -70,7 +70,7 @@ acpi_numa_x2apic_affinity_init(struct acpi_srat_x2apic_cpu_affinity *pa) | |||
| 70 | return; | 70 | return; |
| 71 | pxm = pa->proximity_domain; | 71 | pxm = pa->proximity_domain; |
| 72 | apic_id = pa->apic_id; | 72 | apic_id = pa->apic_id; |
| 73 | if (!cpu_has_x2apic && (apic_id >= 0xff)) { | 73 | if (!apic->apic_id_valid(apic_id)) { |
| 74 | printk(KERN_INFO "SRAT: PXM %u -> X2APIC 0x%04x ignored\n", | 74 | printk(KERN_INFO "SRAT: PXM %u -> X2APIC 0x%04x ignored\n", |
| 75 | pxm, apic_id); | 75 | pxm, apic_id); |
| 76 | return; | 76 | return; |
