diff options
author | Ingo Molnar <mingo@elte.hu> | 2010-04-30 03:56:41 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2010-04-30 03:56:44 -0400 |
commit | 3ca50496c2677a2b3fdd3ede86660fd1433beac6 (patch) | |
tree | 97a76d8479a8d8a96e04ed0694b8dbf89457bfcc /arch/x86/kernel | |
parent | 462b04e28a7ec1339c892117c3f20a40e55d0e83 (diff) | |
parent | 66f41d4c5c8a5deed66fdcc84509376c9a0bf9d8 (diff) |
Merge commit 'v2.6.34-rc6' into perf/core
Merge reason: update to the latest -rc.
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/x86/kernel')
-rw-r--r-- | arch/x86/kernel/apb_timer.c | 2 | ||||
-rw-r--r-- | arch/x86/kernel/cpu/intel.c | 21 | ||||
-rw-r--r-- | arch/x86/kernel/cpu/vmware.c | 2 | ||||
-rw-r--r-- | arch/x86/kernel/process_64.c | 4 |
4 files changed, 26 insertions, 3 deletions
diff --git a/arch/x86/kernel/apb_timer.c b/arch/x86/kernel/apb_timer.c index ff469e470059..a35347501d36 100644 --- a/arch/x86/kernel/apb_timer.c +++ b/arch/x86/kernel/apb_timer.c | |||
@@ -429,7 +429,7 @@ static int apbt_cpuhp_notify(struct notifier_block *n, | |||
429 | 429 | ||
430 | static __init int apbt_late_init(void) | 430 | static __init int apbt_late_init(void) |
431 | { | 431 | { |
432 | if (disable_apbt_percpu) | 432 | if (disable_apbt_percpu || !apb_timer_block_enabled) |
433 | return 0; | 433 | return 0; |
434 | /* This notifier should be called after workqueue is ready */ | 434 | /* This notifier should be called after workqueue is ready */ |
435 | hotcpu_notifier(apbt_cpuhp_notify, -20); | 435 | hotcpu_notifier(apbt_cpuhp_notify, -20); |
diff --git a/arch/x86/kernel/cpu/intel.c b/arch/x86/kernel/cpu/intel.c index d72377c41c76..f5e5390d3459 100644 --- a/arch/x86/kernel/cpu/intel.c +++ b/arch/x86/kernel/cpu/intel.c | |||
@@ -46,6 +46,27 @@ static void __cpuinit early_init_intel(struct cpuinfo_x86 *c) | |||
46 | (c->x86 == 0x6 && c->x86_model >= 0x0e)) | 46 | (c->x86 == 0x6 && c->x86_model >= 0x0e)) |
47 | set_cpu_cap(c, X86_FEATURE_CONSTANT_TSC); | 47 | set_cpu_cap(c, X86_FEATURE_CONSTANT_TSC); |
48 | 48 | ||
49 | /* | ||
50 | * Atom erratum AAE44/AAF40/AAG38/AAH41: | ||
51 | * | ||
52 | * A race condition between speculative fetches and invalidating | ||
53 | * a large page. This is worked around in microcode, but we | ||
54 | * need the microcode to have already been loaded... so if it is | ||
55 | * not, recommend a BIOS update and disable large pages. | ||
56 | */ | ||
57 | if (c->x86 == 6 && c->x86_model == 0x1c && c->x86_mask <= 2) { | ||
58 | u32 ucode, junk; | ||
59 | |||
60 | wrmsr(MSR_IA32_UCODE_REV, 0, 0); | ||
61 | sync_core(); | ||
62 | rdmsr(MSR_IA32_UCODE_REV, junk, ucode); | ||
63 | |||
64 | if (ucode < 0x20e) { | ||
65 | printk(KERN_WARNING "Atom PSE erratum detected, BIOS microcode update recommended\n"); | ||
66 | clear_cpu_cap(c, X86_FEATURE_PSE); | ||
67 | } | ||
68 | } | ||
69 | |||
49 | #ifdef CONFIG_X86_64 | 70 | #ifdef CONFIG_X86_64 |
50 | set_cpu_cap(c, X86_FEATURE_SYSENTER32); | 71 | set_cpu_cap(c, X86_FEATURE_SYSENTER32); |
51 | #else | 72 | #else |
diff --git a/arch/x86/kernel/cpu/vmware.c b/arch/x86/kernel/cpu/vmware.c index 1cbed97b59cf..dfdb4dba2320 100644 --- a/arch/x86/kernel/cpu/vmware.c +++ b/arch/x86/kernel/cpu/vmware.c | |||
@@ -22,6 +22,7 @@ | |||
22 | */ | 22 | */ |
23 | 23 | ||
24 | #include <linux/dmi.h> | 24 | #include <linux/dmi.h> |
25 | #include <linux/module.h> | ||
25 | #include <asm/div64.h> | 26 | #include <asm/div64.h> |
26 | #include <asm/vmware.h> | 27 | #include <asm/vmware.h> |
27 | #include <asm/x86_init.h> | 28 | #include <asm/x86_init.h> |
@@ -101,6 +102,7 @@ int vmware_platform(void) | |||
101 | 102 | ||
102 | return 0; | 103 | return 0; |
103 | } | 104 | } |
105 | EXPORT_SYMBOL(vmware_platform); | ||
104 | 106 | ||
105 | /* | 107 | /* |
106 | * VMware hypervisor takes care of exporting a reliable TSC to the guest. | 108 | * VMware hypervisor takes care of exporting a reliable TSC to the guest. |
diff --git a/arch/x86/kernel/process_64.c b/arch/x86/kernel/process_64.c index cc4258f2beb5..50cc84ac0a0d 100644 --- a/arch/x86/kernel/process_64.c +++ b/arch/x86/kernel/process_64.c | |||
@@ -275,12 +275,12 @@ int copy_thread(unsigned long clone_flags, unsigned long sp, | |||
275 | 275 | ||
276 | set_tsk_thread_flag(p, TIF_FORK); | 276 | set_tsk_thread_flag(p, TIF_FORK); |
277 | 277 | ||
278 | p->thread.fs = me->thread.fs; | ||
279 | p->thread.gs = me->thread.gs; | ||
280 | p->thread.io_bitmap_ptr = NULL; | 278 | p->thread.io_bitmap_ptr = NULL; |
281 | 279 | ||
282 | savesegment(gs, p->thread.gsindex); | 280 | savesegment(gs, p->thread.gsindex); |
281 | p->thread.gs = p->thread.gsindex ? 0 : me->thread.gs; | ||
283 | savesegment(fs, p->thread.fsindex); | 282 | savesegment(fs, p->thread.fsindex); |
283 | p->thread.fs = p->thread.fsindex ? 0 : me->thread.fs; | ||
284 | savesegment(es, p->thread.es); | 284 | savesegment(es, p->thread.es); |
285 | savesegment(ds, p->thread.ds); | 285 | savesegment(ds, p->thread.ds); |
286 | 286 | ||