diff options
| -rw-r--r-- | arch/x86/Kconfig | 15 | ||||
| -rw-r--r-- | arch/x86/kernel/apic/apic.c | 22 | ||||
| -rw-r--r-- | arch/x86/kernel/cpu/bugs.c | 4 | ||||
| -rw-r--r-- | arch/x86/kernel/cpu/hypervisor.c | 4 | ||||
| -rw-r--r-- | arch/x86/kernel/quirks.c | 5 | ||||
| -rw-r--r-- | arch/x86/kernel/relocate_kernel_32.S | 2 | ||||
| -rw-r--r-- | arch/x86/kernel/relocate_kernel_64.S | 2 | ||||
| -rw-r--r-- | arch/x86/kernel/tsc.c | 24 |
8 files changed, 45 insertions, 33 deletions
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index c3e03e46bc64..b2127544fbe7 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig | |||
| @@ -390,12 +390,21 @@ config X86_INTEL_CE | |||
| 390 | This option compiles in support for the CE4100 SOC for settop | 390 | This option compiles in support for the CE4100 SOC for settop |
| 391 | boxes and media devices. | 391 | boxes and media devices. |
| 392 | 392 | ||
| 393 | config X86_INTEL_MID | ||
| 394 | bool "Intel MID platform support" | ||
| 395 | depends on X86_32 | ||
| 396 | depends on X86_EXTENDED_PLATFORM | ||
| 397 | ---help--- | ||
| 398 | Select to build a kernel capable of supporting Intel MID platform | ||
| 399 | systems which do not have the PCI legacy interfaces (Moorestown, | ||
| 400 | Medfield). If you are building for a PC class system say N here. | ||
| 401 | |||
| 402 | if X86_INTEL_MID | ||
| 403 | |||
| 393 | config X86_MRST | 404 | config X86_MRST |
| 394 | bool "Moorestown MID platform" | 405 | bool "Moorestown MID platform" |
| 395 | depends on PCI | 406 | depends on PCI |
| 396 | depends on PCI_GOANY | 407 | depends on PCI_GOANY |
| 397 | depends on X86_32 | ||
| 398 | depends on X86_EXTENDED_PLATFORM | ||
| 399 | depends on X86_IO_APIC | 408 | depends on X86_IO_APIC |
| 400 | select APB_TIMER | 409 | select APB_TIMER |
| 401 | select I2C | 410 | select I2C |
| @@ -410,6 +419,8 @@ config X86_MRST | |||
| 410 | nor standard legacy replacement devices/features. e.g. Moorestown does | 419 | nor standard legacy replacement devices/features. e.g. Moorestown does |
| 411 | not contain i8259, i8254, HPET, legacy BIOS, most of the io ports. | 420 | not contain i8259, i8254, HPET, legacy BIOS, most of the io ports. |
| 412 | 421 | ||
| 422 | endif | ||
| 423 | |||
| 413 | config X86_RDC321X | 424 | config X86_RDC321X |
| 414 | bool "RDC R-321x SoC" | 425 | bool "RDC R-321x SoC" |
| 415 | depends on X86_32 | 426 | depends on X86_32 |
diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c index 9498b8445186..b24be38c8cf8 100644 --- a/arch/x86/kernel/apic/apic.c +++ b/arch/x86/kernel/apic/apic.c | |||
| @@ -1944,10 +1944,28 @@ void disconnect_bsp_APIC(int virt_wire_setup) | |||
| 1944 | 1944 | ||
| 1945 | void __cpuinit generic_processor_info(int apicid, int version) | 1945 | void __cpuinit generic_processor_info(int apicid, int version) |
| 1946 | { | 1946 | { |
| 1947 | int cpu; | 1947 | int cpu, max = nr_cpu_ids; |
| 1948 | bool boot_cpu_detected = physid_isset(boot_cpu_physical_apicid, | ||
| 1949 | phys_cpu_present_map); | ||
| 1950 | |||
| 1951 | /* | ||
| 1952 | * If boot cpu has not been detected yet, then only allow upto | ||
| 1953 | * nr_cpu_ids - 1 processors and keep one slot free for boot cpu | ||
| 1954 | */ | ||
| 1955 | if (!boot_cpu_detected && num_processors >= nr_cpu_ids - 1 && | ||
| 1956 | apicid != boot_cpu_physical_apicid) { | ||
| 1957 | int thiscpu = max + disabled_cpus - 1; | ||
| 1958 | |||
| 1959 | pr_warning( | ||
| 1960 | "ACPI: NR_CPUS/possible_cpus limit of %i almost" | ||
| 1961 | " reached. Keeping one slot for boot cpu." | ||
| 1962 | " Processor %d/0x%x ignored.\n", max, thiscpu, apicid); | ||
| 1963 | |||
| 1964 | disabled_cpus++; | ||
| 1965 | return; | ||
| 1966 | } | ||
| 1948 | 1967 | ||
| 1949 | if (num_processors >= nr_cpu_ids) { | 1968 | if (num_processors >= nr_cpu_ids) { |
| 1950 | int max = nr_cpu_ids; | ||
| 1951 | int thiscpu = max + disabled_cpus; | 1969 | int thiscpu = max + disabled_cpus; |
| 1952 | 1970 | ||
| 1953 | pr_warning( | 1971 | pr_warning( |
diff --git a/arch/x86/kernel/cpu/bugs.c b/arch/x86/kernel/cpu/bugs.c index 525514cf33c3..46674fbb62ba 100644 --- a/arch/x86/kernel/cpu/bugs.c +++ b/arch/x86/kernel/cpu/bugs.c | |||
| @@ -62,6 +62,8 @@ static void __init check_fpu(void) | |||
| 62 | return; | 62 | return; |
| 63 | } | 63 | } |
| 64 | 64 | ||
| 65 | kernel_fpu_begin(); | ||
| 66 | |||
| 65 | /* | 67 | /* |
| 66 | * trap_init() enabled FXSR and company _before_ testing for FP | 68 | * trap_init() enabled FXSR and company _before_ testing for FP |
| 67 | * problems here. | 69 | * problems here. |
| @@ -80,6 +82,8 @@ static void __init check_fpu(void) | |||
| 80 | : "=m" (*&fdiv_bug) | 82 | : "=m" (*&fdiv_bug) |
| 81 | : "m" (*&x), "m" (*&y)); | 83 | : "m" (*&x), "m" (*&y)); |
| 82 | 84 | ||
| 85 | kernel_fpu_end(); | ||
| 86 | |||
| 83 | boot_cpu_data.fdiv_bug = fdiv_bug; | 87 | boot_cpu_data.fdiv_bug = fdiv_bug; |
| 84 | if (boot_cpu_data.fdiv_bug) | 88 | if (boot_cpu_data.fdiv_bug) |
| 85 | printk(KERN_WARNING "Hmm, FPU with FDIV bug.\n"); | 89 | printk(KERN_WARNING "Hmm, FPU with FDIV bug.\n"); |
diff --git a/arch/x86/kernel/cpu/hypervisor.c b/arch/x86/kernel/cpu/hypervisor.c index 8095f8611f8a..755f64fb0743 100644 --- a/arch/x86/kernel/cpu/hypervisor.c +++ b/arch/x86/kernel/cpu/hypervisor.c | |||
| @@ -32,11 +32,11 @@ | |||
| 32 | */ | 32 | */ |
| 33 | static const __initconst struct hypervisor_x86 * const hypervisors[] = | 33 | static const __initconst struct hypervisor_x86 * const hypervisors[] = |
| 34 | { | 34 | { |
| 35 | &x86_hyper_vmware, | ||
| 36 | &x86_hyper_ms_hyperv, | ||
| 37 | #ifdef CONFIG_XEN_PVHVM | 35 | #ifdef CONFIG_XEN_PVHVM |
| 38 | &x86_hyper_xen_hvm, | 36 | &x86_hyper_xen_hvm, |
| 39 | #endif | 37 | #endif |
| 38 | &x86_hyper_vmware, | ||
| 39 | &x86_hyper_ms_hyperv, | ||
| 40 | }; | 40 | }; |
| 41 | 41 | ||
| 42 | const struct hypervisor_x86 *x86_hyper; | 42 | const struct hypervisor_x86 *x86_hyper; |
diff --git a/arch/x86/kernel/quirks.c b/arch/x86/kernel/quirks.c index 8bbe8c56916d..b78643d0f9a5 100644 --- a/arch/x86/kernel/quirks.c +++ b/arch/x86/kernel/quirks.c | |||
| @@ -10,7 +10,7 @@ | |||
| 10 | 10 | ||
| 11 | static void __devinit quirk_intel_irqbalance(struct pci_dev *dev) | 11 | static void __devinit quirk_intel_irqbalance(struct pci_dev *dev) |
| 12 | { | 12 | { |
| 13 | u8 config, rev; | 13 | u8 config; |
| 14 | u16 word; | 14 | u16 word; |
| 15 | 15 | ||
| 16 | /* BIOS may enable hardware IRQ balancing for | 16 | /* BIOS may enable hardware IRQ balancing for |
| @@ -18,8 +18,7 @@ static void __devinit quirk_intel_irqbalance(struct pci_dev *dev) | |||
| 18 | * based platforms. | 18 | * based platforms. |
| 19 | * Disable SW irqbalance/affinity on those platforms. | 19 | * Disable SW irqbalance/affinity on those platforms. |
| 20 | */ | 20 | */ |
| 21 | pci_read_config_byte(dev, PCI_CLASS_REVISION, &rev); | 21 | if (dev->revision > 0x9) |
| 22 | if (rev > 0x9) | ||
| 23 | return; | 22 | return; |
| 24 | 23 | ||
| 25 | /* enable access to config space*/ | 24 | /* enable access to config space*/ |
diff --git a/arch/x86/kernel/relocate_kernel_32.S b/arch/x86/kernel/relocate_kernel_32.S index 41235531b11c..36818f8ec2be 100644 --- a/arch/x86/kernel/relocate_kernel_32.S +++ b/arch/x86/kernel/relocate_kernel_32.S | |||
| @@ -97,6 +97,8 @@ relocate_kernel: | |||
| 97 | ret | 97 | ret |
| 98 | 98 | ||
| 99 | identity_mapped: | 99 | identity_mapped: |
| 100 | /* set return address to 0 if not preserving context */ | ||
| 101 | pushl $0 | ||
| 100 | /* store the start address on the stack */ | 102 | /* store the start address on the stack */ |
| 101 | pushl %edx | 103 | pushl %edx |
| 102 | 104 | ||
diff --git a/arch/x86/kernel/relocate_kernel_64.S b/arch/x86/kernel/relocate_kernel_64.S index 4de8f5b3d476..7a6f3b3be3cf 100644 --- a/arch/x86/kernel/relocate_kernel_64.S +++ b/arch/x86/kernel/relocate_kernel_64.S | |||
| @@ -100,6 +100,8 @@ relocate_kernel: | |||
| 100 | ret | 100 | ret |
| 101 | 101 | ||
| 102 | identity_mapped: | 102 | identity_mapped: |
| 103 | /* set return address to 0 if not preserving context */ | ||
| 104 | pushq $0 | ||
| 103 | /* store the start address on the stack */ | 105 | /* store the start address on the stack */ |
| 104 | pushq %rdx | 106 | pushq %rdx |
| 105 | 107 | ||
diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c index 56c633a5db72..db483369f10b 100644 --- a/arch/x86/kernel/tsc.c +++ b/arch/x86/kernel/tsc.c | |||
| @@ -5,7 +5,6 @@ | |||
| 5 | #include <linux/timer.h> | 5 | #include <linux/timer.h> |
| 6 | #include <linux/acpi_pmtmr.h> | 6 | #include <linux/acpi_pmtmr.h> |
| 7 | #include <linux/cpufreq.h> | 7 | #include <linux/cpufreq.h> |
| 8 | #include <linux/dmi.h> | ||
| 9 | #include <linux/delay.h> | 8 | #include <linux/delay.h> |
| 10 | #include <linux/clocksource.h> | 9 | #include <linux/clocksource.h> |
| 11 | #include <linux/percpu.h> | 10 | #include <linux/percpu.h> |
| @@ -800,27 +799,6 @@ void mark_tsc_unstable(char *reason) | |||
| 800 | 799 | ||
| 801 | EXPORT_SYMBOL_GPL(mark_tsc_unstable); | 800 | EXPORT_SYMBOL_GPL(mark_tsc_unstable); |
| 802 | 801 | ||
| 803 | static int __init dmi_mark_tsc_unstable(const struct dmi_system_id *d) | ||
| 804 | { | ||
| 805 | printk(KERN_NOTICE "%s detected: marking TSC unstable.\n", | ||
| 806 | d->ident); | ||
| 807 | tsc_unstable = 1; | ||
| 808 | return 0; | ||
| 809 | } | ||
| 810 | |||
| 811 | /* List of systems that have known TSC problems */ | ||
| 812 | static struct dmi_system_id __initdata bad_tsc_dmi_table[] = { | ||
| 813 | { | ||
| 814 | .callback = dmi_mark_tsc_unstable, | ||
| 815 | .ident = "IBM Thinkpad 380XD", | ||
| 816 | .matches = { | ||
| 817 | DMI_MATCH(DMI_BOARD_VENDOR, "IBM"), | ||
| 818 | DMI_MATCH(DMI_BOARD_NAME, "2635FA0"), | ||
| 819 | }, | ||
| 820 | }, | ||
| 821 | {} | ||
| 822 | }; | ||
| 823 | |||
| 824 | static void __init check_system_tsc_reliable(void) | 802 | static void __init check_system_tsc_reliable(void) |
| 825 | { | 803 | { |
| 826 | #ifdef CONFIG_MGEODE_LX | 804 | #ifdef CONFIG_MGEODE_LX |
| @@ -1010,8 +988,6 @@ void __init tsc_init(void) | |||
| 1010 | lpj_fine = lpj; | 988 | lpj_fine = lpj; |
| 1011 | 989 | ||
| 1012 | use_tsc_delay(); | 990 | use_tsc_delay(); |
| 1013 | /* Check and install the TSC clocksource */ | ||
| 1014 | dmi_check_system(bad_tsc_dmi_table); | ||
| 1015 | 991 | ||
| 1016 | if (unsynchronized_tsc()) | 992 | if (unsynchronized_tsc()) |
| 1017 | mark_tsc_unstable("TSCs unsynchronized"); | 993 | mark_tsc_unstable("TSCs unsynchronized"); |
