Skip to content

Commit

Permalink
[PATCH] x86: default to physical mode on hotplug CPU kernels
Browse files Browse the repository at this point in the history
Default to physical mode on hotplug CPU kernels.  Furher simplify and clean up
the APIC initialization code.

Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Andi Kleen <ak@suse.de>
Cc: Suresh Siddha <suresh.b.siddha@intel.com>
Cc: Andi Kleen <ak@suse.de>
Cc: "Li, Shaohua" <shaohua.li@intel.com>
Cc: "Eric W. Biederman" <ebiederm@xmission.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
  • Loading branch information
Ingo Molnar authored and Andi Kleen committed May 2, 2007
1 parent 424df39 commit 3c43f03
Show file tree
Hide file tree
Showing 13 changed files with 16 additions and 26 deletions.
2 changes: 1 addition & 1 deletion arch/i386/kernel/acpi/boot.c
Original file line number Diff line number Diff line change
Expand Up @@ -874,7 +874,7 @@ static void __init acpi_process_madt(void)
acpi_ioapic = 1;

smp_found_config = 1;
clustered_apic_check();
setup_apic_routing();
}
}
if (error == -EINVAL) {
Expand Down
2 changes: 1 addition & 1 deletion arch/i386/kernel/mpparse.c
Original file line number Diff line number Diff line change
Expand Up @@ -477,7 +477,7 @@ static int __init smp_read_mpc(struct mp_config_table *mpc)
}
++mpc_record;
}
clustered_apic_check();
setup_apic_routing();
if (!num_processors)
printk(KERN_ERR "SMP mptable: no processors registered!\n");
return num_processors;
Expand Down
16 changes: 3 additions & 13 deletions arch/x86_64/kernel/genapic.c
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,8 @@ struct genapic __read_mostly *genapic = &apic_flat;
/*
* Check the APIC IDs in bios_cpu_apicid and choose the APIC mode.
*/
void __init clustered_apic_check(void)
void __init setup_apic_routing(void)
{
unsigned int i, max_apic = 0;
u8 id;

#ifdef CONFIG_ACPI
/*
* Quirk: some x86_64 machines can only use physical APIC mode
Expand All @@ -49,17 +46,10 @@ void __init clustered_apic_check(void)
if (acpi_gbl_FADT.header.revision > FADT2_REVISION_ID &&
(acpi_gbl_FADT.flags & ACPI_FADT_APIC_PHYSICAL))
genapic = &apic_physflat;
else
#endif

for (i = 0; i < NR_CPUS; i++) {
id = bios_cpu_apicid[i];
if (id == BAD_APICID)
continue;
if (id > max_apic)
max_apic = id;
}

if (max_apic < 8)
if (cpus_weight(cpu_possible_map) <= 8)
genapic = &apic_flat;
else
genapic = &apic_physflat;
Expand Down
2 changes: 1 addition & 1 deletion arch/x86_64/kernel/mpparse.c
Original file line number Diff line number Diff line change
Expand Up @@ -300,7 +300,7 @@ static int __init smp_read_mpc(struct mp_config_table *mpc)
}
}
}
clustered_apic_check();
setup_apic_routing();
if (!num_processors)
printk(KERN_ERR "MPTABLE: no processors registered!\n");
return num_processors;
Expand Down
4 changes: 2 additions & 2 deletions include/asm-i386/genapic.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ struct genapic {
void (*init_apic_ldr)(void);
physid_mask_t (*ioapic_phys_id_map)(physid_mask_t map);

void (*clustered_apic_check)(void);
void (*setup_apic_routing)(void);
int (*multi_timer_check)(int apic, int irq);
int (*apicid_to_node)(int logical_apicid);
int (*cpu_to_logical_apicid)(int cpu);
Expand Down Expand Up @@ -99,7 +99,7 @@ struct genapic {
APICFUNC(check_apicid_present) \
APICFUNC(init_apic_ldr) \
APICFUNC(ioapic_phys_id_map) \
APICFUNC(clustered_apic_check) \
APICFUNC(setup_apic_routing) \
APICFUNC(multi_timer_check) \
APICFUNC(apicid_to_node) \
APICFUNC(cpu_to_logical_apicid) \
Expand Down
2 changes: 1 addition & 1 deletion include/asm-i386/mach-bigsmp/mach_apic.h
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ static inline void init_apic_ldr(void)
apic_write_around(APIC_LDR, val);
}

static inline void clustered_apic_check(void)
static inline void setup_apic_routing(void)
{
printk("Enabling APIC mode: %s. Using %d I/O APICs\n",
"Physflat", nr_ioapics);
Expand Down
2 changes: 1 addition & 1 deletion include/asm-i386/mach-default/mach_apic.h
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ static inline physid_mask_t ioapic_phys_id_map(physid_mask_t phys_map)
return phys_map;
}

static inline void clustered_apic_check(void)
static inline void setup_apic_routing(void)
{
printk("Enabling APIC mode: %s. Using %d I/O APICs\n",
"Flat", nr_ioapics);
Expand Down
2 changes: 1 addition & 1 deletion include/asm-i386/mach-es7000/mach_apic.h
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ static inline void enable_apic_mode(void)
}

extern int apic_version [MAX_APICS];
static inline void clustered_apic_check(void)
static inline void setup_apic_routing(void)
{
int apic = bios_cpu_apicid[smp_processor_id()];
printk("Enabling APIC mode: %s. Using %d I/O APICs, target cpus %lx\n",
Expand Down
2 changes: 1 addition & 1 deletion include/asm-i386/mach-generic/mach_apic.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
#define apic_id_registered (genapic->apic_id_registered)
#define init_apic_ldr (genapic->init_apic_ldr)
#define ioapic_phys_id_map (genapic->ioapic_phys_id_map)
#define clustered_apic_check (genapic->clustered_apic_check)
#define setup_apic_routing (genapic->setup_apic_routing)
#define multi_timer_check (genapic->multi_timer_check)
#define apicid_to_node (genapic->apicid_to_node)
#define cpu_to_logical_apicid (genapic->cpu_to_logical_apicid)
Expand Down
2 changes: 1 addition & 1 deletion include/asm-i386/mach-numaq/mach_apic.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ static inline void init_apic_ldr(void)
/* Already done in NUMA-Q firmware */
}

static inline void clustered_apic_check(void)
static inline void setup_apic_routing(void)
{
printk("Enabling APIC mode: %s. Using %d I/O APICs\n",
"NUMA-Q", nr_ioapics);
Expand Down
2 changes: 1 addition & 1 deletion include/asm-i386/mach-summit/mach_apic.h
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ static inline int apic_id_registered(void)
return 1;
}

static inline void clustered_apic_check(void)
static inline void setup_apic_routing(void)
{
printk("Enabling APIC mode: Summit. Using %d I/O APICs\n",
nr_ioapics);
Expand Down
2 changes: 1 addition & 1 deletion include/asm-i386/mach-visws/mach_apic.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ static inline void summit_check(char *oem, char *productid)
{
}

static inline void clustered_apic_check(void)
static inline void setup_apic_routing(void)
{
}

Expand Down
2 changes: 1 addition & 1 deletion include/asm-x86_64/apic.h
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ extern void setup_secondary_APIC_clock (void);
extern int APIC_init_uniprocessor (void);
extern void disable_APIC_timer(void);
extern void enable_APIC_timer(void);
extern void clustered_apic_check(void);
extern void setup_apic_routing(void);

extern void setup_APIC_extened_lvt(unsigned char lvt_off, unsigned char vector,
unsigned char msg_type, unsigned char mask);
Expand Down

0 comments on commit 3c43f03

Please sign in to comment.