Skip to content

Commit

Permalink
[PATCH] x86_64: Increase the maximum number of local APICs to the max…
Browse files Browse the repository at this point in the history
…imum

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: Andi Kleen <ak@suse.de>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
  • Loading branch information
Andi Kleen authored and Linus Torvalds committed Nov 15, 2005
1 parent 9e43e1b commit 8893166
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 6 deletions.
11 changes: 7 additions & 4 deletions arch/x86_64/kernel/mpparse.c
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ int acpi_found_madt;
* Various Linux-internal data structures created from the
* 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 };
int mp_bus_id_to_pci_bus [MAX_MP_BUSSES] = { [0 ... MAX_MP_BUSSES-1] = -1 };

Expand Down Expand Up @@ -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)
{
int ver, cpu;
int cpu;
unsigned char ver;
static int found_bsp=0;

if (!(m->mpc_cpuflag & CPU_ENABLED)) {
Expand All @@ -133,12 +134,14 @@ static void __init MP_processor_info (struct mpc_config_processor *m)
}

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",
m->mpc_apicid, MAX_APICS);
return;
}
#endif
ver = m->mpc_apicver;

physid_set(m->mpc_apicid, phys_cpu_present_map);
Expand Down
4 changes: 2 additions & 2 deletions include/asm-x86_64/mpspec.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
/*
* A maximum of 255 APICs with the current APIC ID architecture.
*/
#define MAX_APICS 128
#define MAX_APICS 255

struct intel_mp_floating
{
Expand Down Expand Up @@ -173,7 +173,7 @@ extern int smp_found_config;
extern void find_smp_config (void);
extern void get_smp_config (void);
extern int nr_ioapics;
extern int apic_version [MAX_APICS];
extern unsigned char apic_version [MAX_APICS];
extern int mp_irq_entries;
extern struct mpc_config_intsrc mp_irqs [MAX_IRQ_SOURCES];
extern int mpc_default_type;
Expand Down

0 comments on commit 8893166

Please sign in to comment.