Merge branches 'x86-detect-hyper-for-linus', 'x86-fpu-for-linus', 'x86-kexec-for-linus', 'x86-platform-for-linus', 'x86-quirks-for-linus', 'x86-tsc-for-linus' and 'x86-smpboot-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip

* 'x86-detect-hyper-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
  x86, hyper: Change hypervisor detection order

* 'x86-fpu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
  x86-32, fpu: Fix DNA exception during check_fpu()

* 'x86-kexec-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
  kexec, x86: Fix incorrect jump back address if not preserving context

* 'x86-platform-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
  x86, config: Introduce an INTEL_MID configuration

* 'x86-quirks-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
  x86, quirks: Use pci_dev->revision

* 'x86-tsc-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
  x86: tsc: Remove unneeded DMI-based blacklisting

* 'x86-smpboot-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
  x86, boot: Wait for boot cpu to show up if nr_cpus limit is about to hit
This commit is contained in:
Linus Torvalds 2011-07-23 10:38:21 -07:00
8 changed files with 45 additions and 33 deletions

View File

@ -390,12 +390,21 @@ config X86_INTEL_CE
This option compiles in support for the CE4100 SOC for settop This option compiles in support for the CE4100 SOC for settop
boxes and media devices. boxes and media devices.
config X86_INTEL_MID
bool "Intel MID platform support"
depends on X86_32
depends on X86_EXTENDED_PLATFORM
---help---
Select to build a kernel capable of supporting Intel MID platform
systems which do not have the PCI legacy interfaces (Moorestown,
Medfield). If you are building for a PC class system say N here.
if X86_INTEL_MID
config X86_MRST config X86_MRST
bool "Moorestown MID platform" bool "Moorestown MID platform"
depends on PCI depends on PCI
depends on PCI_GOANY depends on PCI_GOANY
depends on X86_32
depends on X86_EXTENDED_PLATFORM
depends on X86_IO_APIC depends on X86_IO_APIC
select APB_TIMER select APB_TIMER
select I2C select I2C
@ -410,6 +419,8 @@ config X86_MRST
nor standard legacy replacement devices/features. e.g. Moorestown does nor standard legacy replacement devices/features. e.g. Moorestown does
not contain i8259, i8254, HPET, legacy BIOS, most of the io ports. not contain i8259, i8254, HPET, legacy BIOS, most of the io ports.
endif
config X86_RDC321X config X86_RDC321X
bool "RDC R-321x SoC" bool "RDC R-321x SoC"
depends on X86_32 depends on X86_32

View File

@ -1944,10 +1944,28 @@ void disconnect_bsp_APIC(int virt_wire_setup)
void __cpuinit generic_processor_info(int apicid, int version) void __cpuinit generic_processor_info(int apicid, int version)
{ {
int cpu; int cpu, max = nr_cpu_ids;
bool boot_cpu_detected = physid_isset(boot_cpu_physical_apicid,
phys_cpu_present_map);
/*
* If boot cpu has not been detected yet, then only allow upto
* nr_cpu_ids - 1 processors and keep one slot free for boot cpu
*/
if (!boot_cpu_detected && num_processors >= nr_cpu_ids - 1 &&
apicid != boot_cpu_physical_apicid) {
int thiscpu = max + disabled_cpus - 1;
pr_warning(
"ACPI: NR_CPUS/possible_cpus limit of %i almost"
" reached. Keeping one slot for boot cpu."
" Processor %d/0x%x ignored.\n", max, thiscpu, apicid);
disabled_cpus++;
return;
}
if (num_processors >= nr_cpu_ids) { if (num_processors >= nr_cpu_ids) {
int max = nr_cpu_ids;
int thiscpu = max + disabled_cpus; int thiscpu = max + disabled_cpus;
pr_warning( pr_warning(

View File

@ -62,6 +62,8 @@ static void __init check_fpu(void)
return; return;
} }
kernel_fpu_begin();
/* /*
* trap_init() enabled FXSR and company _before_ testing for FP * trap_init() enabled FXSR and company _before_ testing for FP
* problems here. * problems here.
@ -80,6 +82,8 @@ static void __init check_fpu(void)
: "=m" (*&fdiv_bug) : "=m" (*&fdiv_bug)
: "m" (*&x), "m" (*&y)); : "m" (*&x), "m" (*&y));
kernel_fpu_end();
boot_cpu_data.fdiv_bug = fdiv_bug; boot_cpu_data.fdiv_bug = fdiv_bug;
if (boot_cpu_data.fdiv_bug) if (boot_cpu_data.fdiv_bug)
printk(KERN_WARNING "Hmm, FPU with FDIV bug.\n"); printk(KERN_WARNING "Hmm, FPU with FDIV bug.\n");

View File

@ -32,11 +32,11 @@
*/ */
static const __initconst struct hypervisor_x86 * const hypervisors[] = static const __initconst struct hypervisor_x86 * const hypervisors[] =
{ {
&x86_hyper_vmware,
&x86_hyper_ms_hyperv,
#ifdef CONFIG_XEN_PVHVM #ifdef CONFIG_XEN_PVHVM
&x86_hyper_xen_hvm, &x86_hyper_xen_hvm,
#endif #endif
&x86_hyper_vmware,
&x86_hyper_ms_hyperv,
}; };
const struct hypervisor_x86 *x86_hyper; const struct hypervisor_x86 *x86_hyper;

View File

@ -10,7 +10,7 @@
static void __devinit quirk_intel_irqbalance(struct pci_dev *dev) static void __devinit quirk_intel_irqbalance(struct pci_dev *dev)
{ {
u8 config, rev; u8 config;
u16 word; u16 word;
/* BIOS may enable hardware IRQ balancing for /* BIOS may enable hardware IRQ balancing for
@ -18,8 +18,7 @@ static void __devinit quirk_intel_irqbalance(struct pci_dev *dev)
* based platforms. * based platforms.
* Disable SW irqbalance/affinity on those platforms. * Disable SW irqbalance/affinity on those platforms.
*/ */
pci_read_config_byte(dev, PCI_CLASS_REVISION, &rev); if (dev->revision > 0x9)
if (rev > 0x9)
return; return;
/* enable access to config space*/ /* enable access to config space*/

View File

@ -97,6 +97,8 @@ relocate_kernel:
ret ret
identity_mapped: identity_mapped:
/* set return address to 0 if not preserving context */
pushl $0
/* store the start address on the stack */ /* store the start address on the stack */
pushl %edx pushl %edx

View File

@ -100,6 +100,8 @@ relocate_kernel:
ret ret
identity_mapped: identity_mapped:
/* set return address to 0 if not preserving context */
pushq $0
/* store the start address on the stack */ /* store the start address on the stack */
pushq %rdx pushq %rdx

View File

@ -5,7 +5,6 @@
#include <linux/timer.h> #include <linux/timer.h>
#include <linux/acpi_pmtmr.h> #include <linux/acpi_pmtmr.h>
#include <linux/cpufreq.h> #include <linux/cpufreq.h>
#include <linux/dmi.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/clocksource.h> #include <linux/clocksource.h>
#include <linux/percpu.h> #include <linux/percpu.h>
@ -800,27 +799,6 @@ void mark_tsc_unstable(char *reason)
EXPORT_SYMBOL_GPL(mark_tsc_unstable); EXPORT_SYMBOL_GPL(mark_tsc_unstable);
static int __init dmi_mark_tsc_unstable(const struct dmi_system_id *d)
{
printk(KERN_NOTICE "%s detected: marking TSC unstable.\n",
d->ident);
tsc_unstable = 1;
return 0;
}
/* List of systems that have known TSC problems */
static struct dmi_system_id __initdata bad_tsc_dmi_table[] = {
{
.callback = dmi_mark_tsc_unstable,
.ident = "IBM Thinkpad 380XD",
.matches = {
DMI_MATCH(DMI_BOARD_VENDOR, "IBM"),
DMI_MATCH(DMI_BOARD_NAME, "2635FA0"),
},
},
{}
};
static void __init check_system_tsc_reliable(void) static void __init check_system_tsc_reliable(void)
{ {
#ifdef CONFIG_MGEODE_LX #ifdef CONFIG_MGEODE_LX
@ -1010,8 +988,6 @@ void __init tsc_init(void)
lpj_fine = lpj; lpj_fine = lpj;
use_tsc_delay(); use_tsc_delay();
/* Check and install the TSC clocksource */
dmi_check_system(bad_tsc_dmi_table);
if (unsynchronized_tsc()) if (unsynchronized_tsc())
mark_tsc_unstable("TSCs unsynchronized"); mark_tsc_unstable("TSCs unsynchronized");