diff options
author | Shaohua Li <shaohua.li@intel.com> | 2005-10-30 17:59:28 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-10-30 20:37:11 -0500 |
commit | 08967f941ad897b2f7c2f99e886c75d6319e5087 (patch) | |
tree | 7277fe5fee546f5d94debfc479f81bdc4af895a4 /arch | |
parent | 8896fab35e62aa748a5ce62ac773508e51f10be1 (diff) |
[PATCH] FPU context corrupted after resume
mxcsr_feature_mask_init isn't needed in suspend/resume time (we can use
boot time mask). And actually it's harmful, as it clear task's saved
fxsave in resume. This bug is widely seen by users using zsh.
(akpm: my eyes. Fixed some surrounding whitespace mess)
Signed-off-by: Shaohua Li<shaohua.li@intel.com>
Cc: Pavel Machek <pavel@ucw.cz>
Cc: Andi Kleen <ak@muc.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/i386/power/cpu.c | 12 | ||||
-rw-r--r-- | arch/x86_64/kernel/suspend.c | 11 |
2 files changed, 10 insertions, 13 deletions
diff --git a/arch/i386/power/cpu.c b/arch/i386/power/cpu.c index b27c5acc79d0..1f1572692e0b 100644 --- a/arch/i386/power/cpu.c +++ b/arch/i386/power/cpu.c | |||
@@ -51,16 +51,14 @@ void save_processor_state(void) | |||
51 | __save_processor_state(&saved_context); | 51 | __save_processor_state(&saved_context); |
52 | } | 52 | } |
53 | 53 | ||
54 | static void | 54 | static void do_fpu_end(void) |
55 | do_fpu_end(void) | ||
56 | { | 55 | { |
57 | /* restore FPU regs if necessary */ | 56 | /* |
58 | /* Do it out of line so that gcc does not move cr0 load to some stupid place */ | 57 | * Restore FPU regs if necessary. |
59 | kernel_fpu_end(); | 58 | */ |
60 | mxcsr_feature_mask_init(); | 59 | kernel_fpu_end(); |
61 | } | 60 | } |
62 | 61 | ||
63 | |||
64 | static void fix_processor_context(void) | 62 | static void fix_processor_context(void) |
65 | { | 63 | { |
66 | int cpu = smp_processor_id(); | 64 | int cpu = smp_processor_id(); |
diff --git a/arch/x86_64/kernel/suspend.c b/arch/x86_64/kernel/suspend.c index f066c6ab3618..02516823f514 100644 --- a/arch/x86_64/kernel/suspend.c +++ b/arch/x86_64/kernel/suspend.c | |||
@@ -63,13 +63,12 @@ void save_processor_state(void) | |||
63 | __save_processor_state(&saved_context); | 63 | __save_processor_state(&saved_context); |
64 | } | 64 | } |
65 | 65 | ||
66 | static void | 66 | static void do_fpu_end(void) |
67 | do_fpu_end(void) | ||
68 | { | 67 | { |
69 | /* restore FPU regs if necessary */ | 68 | /* |
70 | /* Do it out of line so that gcc does not move cr0 load to some stupid place */ | 69 | * Restore FPU regs if necessary |
71 | kernel_fpu_end(); | 70 | */ |
72 | mxcsr_feature_mask_init(); | 71 | kernel_fpu_end(); |
73 | } | 72 | } |
74 | 73 | ||
75 | void __restore_processor_state(struct saved_context *ctxt) | 74 | void __restore_processor_state(struct saved_context *ctxt) |