Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 6971
b: refs/heads/master
c: 911a62d
h: refs/heads/master
i:
  6969: 124b053
  6967: 74f2008
v: v3
  • Loading branch information
Venkatesh Pallipadi authored and Linus Torvalds committed Sep 5, 2005
1 parent 65bd2e7 commit 95da6a9
Show file tree
Hide file tree
Showing 9 changed files with 48 additions and 3 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 484b90c4b965d54037ff99b198d84cdf144f8a35
refs/heads/master: 911a62d42365076209e2c327e7688db296e35d62
3 changes: 3 additions & 0 deletions trunk/arch/i386/kernel/acpi/boot.c
Original file line number Diff line number Diff line change
Expand Up @@ -833,6 +833,9 @@ acpi_process_madt(void)
if (!error) {
acpi_lapic = 1;

#ifdef CONFIG_X86_GENERICARCH
generic_bigsmp_probe();
#endif
/*
* Parse MADT IO-APIC entries
*/
Expand Down
9 changes: 9 additions & 0 deletions trunk/arch/i386/kernel/mpparse.c
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,8 @@ int nr_ioapics;
int pic_mode;
unsigned long mp_lapic_addr;

unsigned int def_to_bigsmp = 0;

/* Processor that is doing the boot up */
unsigned int boot_cpu_physical_apicid = -1U;
/* Internal processor count */
Expand Down Expand Up @@ -213,6 +215,13 @@ static void __init MP_processor_info (struct mpc_config_processor *m)
ver = 0x10;
}
apic_version[m->mpc_apicid] = ver;
if ((num_processors > 8) &&
APIC_XAPIC(ver) &&
(boot_cpu_data.x86_vendor == X86_VENDOR_INTEL))
def_to_bigsmp = 1;
else
def_to_bigsmp = 0;

bios_cpu_apicid[num_processors - 1] = m->mpc_apicid;
}

Expand Down
8 changes: 7 additions & 1 deletion trunk/arch/i386/kernel/setup.c
Original file line number Diff line number Diff line change
Expand Up @@ -1585,8 +1585,14 @@ void __init setup_arch(char **cmdline_p)
*/
acpi_boot_table_init();
acpi_boot_init();
#endif

#if defined(CONFIG_SMP) && defined(CONFIG_X86_PC)
if (def_to_bigsmp)
printk(KERN_WARNING "More than 8 CPUs detected and "
"CONFIG_X86_PC cannot handle it.\nUse "
"CONFIG_X86_GENERICARCH or CONFIG_X86_BIGSMP.\n");
#endif
#endif
#ifdef CONFIG_X86_LOCAL_APIC
if (smp_found_config)
get_smp_config();
Expand Down
5 changes: 4 additions & 1 deletion trunk/arch/i386/mach-generic/bigsmp.c
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,10 @@ static struct dmi_system_id __initdata bigsmp_dmi_table[] = {

static __init int probe_bigsmp(void)
{
dmi_check_system(bigsmp_dmi_table);
if (def_to_bigsmp)
dmi_bigsmp = 1;
else
dmi_check_system(bigsmp_dmi_table);
return dmi_bigsmp;
}

Expand Down
20 changes: 20 additions & 0 deletions trunk/arch/i386/mach-generic/probe.c
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,25 @@ struct genapic *apic_probe[] __initdata = {
NULL,
};

static int cmdline_apic;

void __init generic_bigsmp_probe(void)
{
/*
* This routine is used to switch to bigsmp mode when
* - There is no apic= option specified by the user
* - generic_apic_probe() has choosen apic_default as the sub_arch
* - we find more than 8 CPUs in acpi LAPIC listing with xAPIC support
*/

if (!cmdline_apic && genapic == &apic_default)
if (apic_bigsmp.probe()) {
genapic = &apic_bigsmp;
printk(KERN_INFO "Overriding APIC driver with %s\n",
genapic->name);
}
}

void __init generic_apic_probe(char *command_line)
{
char *s;
Expand All @@ -52,6 +71,7 @@ void __init generic_apic_probe(char *command_line)
if (!changed)
printk(KERN_ERR "Unknown genapic `%s' specified.\n", s);
*p = old;
cmdline_apic = changed;
}
for (i = 0; !changed && apic_probe[i]; i++) {
if (apic_probe[i]->probe()) {
Expand Down
1 change: 1 addition & 0 deletions trunk/include/asm-i386/apicdef.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
#define GET_APIC_VERSION(x) ((x)&0xFF)
#define GET_APIC_MAXLVT(x) (((x)>>16)&0xFF)
#define APIC_INTEGRATED(x) ((x)&0xF0)
#define APIC_XAPIC(x) ((x) >= 0x14)
#define APIC_TASKPRI 0x80
#define APIC_TPRI_MASK 0xFF
#define APIC_ARBPRI 0x90
Expand Down
2 changes: 2 additions & 0 deletions trunk/include/asm-i386/mach-generic/mach_apic.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,6 @@
#define enable_apic_mode (genapic->enable_apic_mode)
#define phys_pkg_id (genapic->phys_pkg_id)

extern void generic_bigsmp_probe(void);

#endif /* __ASM_MACH_APIC_H */
1 change: 1 addition & 0 deletions trunk/include/asm-i386/mpspec.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ extern int mp_bus_id_to_local [MAX_MP_BUSSES];
extern int quad_local_to_mp_bus_id [NR_CPUS/4][4];
extern int mp_bus_id_to_pci_bus [MAX_MP_BUSSES];

extern unsigned int def_to_bigsmp;
extern unsigned int boot_cpu_physical_apicid;
extern int smp_found_config;
extern void find_smp_config (void);
Expand Down

0 comments on commit 95da6a9

Please sign in to comment.