mirror of
https://github.com/torvalds/linux.git
synced 2024-11-07 12:41:55 +00:00
911a62d423
i386 generic subarchitecture requires explicit dmi strings or command line to enable bigsmp mode. The patch below removes that restriction, and uses bigsmp as soon as it finds more than 8 logical CPUs, Intel processors and xAPIC support. Signed-off-by: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
58 lines
1.4 KiB
C
58 lines
1.4 KiB
C
/*
|
|
* APIC driver for "bigsmp" XAPIC machines with more than 8 virtual CPUs.
|
|
* Drives the local APIC in "clustered mode".
|
|
*/
|
|
#define APIC_DEFINITION 1
|
|
#include <linux/config.h>
|
|
#include <linux/threads.h>
|
|
#include <linux/cpumask.h>
|
|
#include <asm/mpspec.h>
|
|
#include <asm/genapic.h>
|
|
#include <asm/fixmap.h>
|
|
#include <asm/apicdef.h>
|
|
#include <linux/kernel.h>
|
|
#include <linux/smp.h>
|
|
#include <linux/init.h>
|
|
#include <linux/dmi.h>
|
|
#include <asm/mach-bigsmp/mach_apic.h>
|
|
#include <asm/mach-bigsmp/mach_apicdef.h>
|
|
#include <asm/mach-bigsmp/mach_ipi.h>
|
|
#include <asm/mach-default/mach_mpparse.h>
|
|
|
|
static int dmi_bigsmp; /* can be set by dmi scanners */
|
|
|
|
static __init int hp_ht_bigsmp(struct dmi_system_id *d)
|
|
{
|
|
#ifdef CONFIG_X86_GENERICARCH
|
|
printk(KERN_NOTICE "%s detected: force use of apic=bigsmp\n", d->ident);
|
|
dmi_bigsmp = 1;
|
|
#endif
|
|
return 0;
|
|
}
|
|
|
|
|
|
static struct dmi_system_id __initdata bigsmp_dmi_table[] = {
|
|
{ hp_ht_bigsmp, "HP ProLiant DL760 G2", {
|
|
DMI_MATCH(DMI_BIOS_VENDOR, "HP"),
|
|
DMI_MATCH(DMI_BIOS_VERSION, "P44-"),
|
|
}},
|
|
|
|
{ hp_ht_bigsmp, "HP ProLiant DL740", {
|
|
DMI_MATCH(DMI_BIOS_VENDOR, "HP"),
|
|
DMI_MATCH(DMI_BIOS_VERSION, "P47-"),
|
|
}},
|
|
{ }
|
|
};
|
|
|
|
|
|
static __init int probe_bigsmp(void)
|
|
{
|
|
if (def_to_bigsmp)
|
|
dmi_bigsmp = 1;
|
|
else
|
|
dmi_check_system(bigsmp_dmi_table);
|
|
return dmi_bigsmp;
|
|
}
|
|
|
|
struct genapic apic_bigsmp = APIC_INIT("bigsmp", probe_bigsmp);
|