提交 8893166f 编写于 作者: A Andi Kleen 提交者: Linus Torvalds

[PATCH] x86_64: Increase the maximum number of local APICs to the maximum

This is needed for large multinode IBM systems which have a sparse
APIC space in clustered mode, fully covering the available 8 bits.

The previous kernels would limit the local APIC number to 127,
which caused it to reject some of the CPUs at boot.

I increased the maximum and shrunk the apic_version array a bit
to make up for that (the version is only 8 bit, so don't need
an full int to store)

Cc:  Chris McDermott <lcm@us.ibm.com>
Signed-off-by: NAndi Kleen <ak@suse.de>
Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
上级 9e43e1b7
...@@ -42,7 +42,7 @@ int acpi_found_madt; ...@@ -42,7 +42,7 @@ int acpi_found_madt;
* Various Linux-internal data structures created from the * Various Linux-internal data structures created from the
* MP-table. * MP-table.
*/ */
int apic_version [MAX_APICS]; unsigned char apic_version [MAX_APICS];
unsigned char mp_bus_id_to_type [MAX_MP_BUSSES] = { [0 ... MAX_MP_BUSSES-1] = -1 }; unsigned char mp_bus_id_to_type [MAX_MP_BUSSES] = { [0 ... MAX_MP_BUSSES-1] = -1 };
int mp_bus_id_to_pci_bus [MAX_MP_BUSSES] = { [0 ... MAX_MP_BUSSES-1] = -1 }; int mp_bus_id_to_pci_bus [MAX_MP_BUSSES] = { [0 ... MAX_MP_BUSSES-1] = -1 };
...@@ -108,7 +108,8 @@ static int __init mpf_checksum(unsigned char *mp, int len) ...@@ -108,7 +108,8 @@ static int __init mpf_checksum(unsigned char *mp, int len)
static void __init MP_processor_info (struct mpc_config_processor *m) static void __init MP_processor_info (struct mpc_config_processor *m)
{ {
int ver, cpu; int cpu;
unsigned char ver;
static int found_bsp=0; static int found_bsp=0;
if (!(m->mpc_cpuflag & CPU_ENABLED)) { if (!(m->mpc_cpuflag & CPU_ENABLED)) {
...@@ -134,11 +135,13 @@ static void __init MP_processor_info (struct mpc_config_processor *m) ...@@ -134,11 +135,13 @@ static void __init MP_processor_info (struct mpc_config_processor *m)
cpu = num_processors++; cpu = num_processors++;
if (m->mpc_apicid > MAX_APICS) { #if MAX_APICS < 255
if ((int)m->mpc_apicid > MAX_APICS) {
printk(KERN_ERR "Processor #%d INVALID. (Max ID: %d).\n", printk(KERN_ERR "Processor #%d INVALID. (Max ID: %d).\n",
m->mpc_apicid, MAX_APICS); m->mpc_apicid, MAX_APICS);
return; return;
} }
#endif
ver = m->mpc_apicver; ver = m->mpc_apicver;
physid_set(m->mpc_apicid, phys_cpu_present_map); physid_set(m->mpc_apicid, phys_cpu_present_map);
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
/* /*
* A maximum of 255 APICs with the current APIC ID architecture. * A maximum of 255 APICs with the current APIC ID architecture.
*/ */
#define MAX_APICS 128 #define MAX_APICS 255
struct intel_mp_floating struct intel_mp_floating
{ {
...@@ -173,7 +173,7 @@ extern int smp_found_config; ...@@ -173,7 +173,7 @@ extern int smp_found_config;
extern void find_smp_config (void); extern void find_smp_config (void);
extern void get_smp_config (void); extern void get_smp_config (void);
extern int nr_ioapics; extern int nr_ioapics;
extern int apic_version [MAX_APICS]; extern unsigned char apic_version [MAX_APICS];
extern int mp_irq_entries; extern int mp_irq_entries;
extern struct mpc_config_intsrc mp_irqs [MAX_IRQ_SOURCES]; extern struct mpc_config_intsrc mp_irqs [MAX_IRQ_SOURCES];
extern int mpc_default_type; extern int mpc_default_type;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册