Skip to content

Commit

Permalink
[PATCH] FPU context corrupted after resume
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Shaohua Li authored and Linus Torvalds committed Oct 31, 2005
1 parent 8896fab commit 08967f9
Showing 2 changed files with 10 additions and 13 deletions.
12 changes: 5 additions & 7 deletions arch/i386/power/cpu.c
Original file line number Diff line number Diff line change
@@ -51,16 +51,14 @@ void save_processor_state(void)
__save_processor_state(&saved_context);
}

static void
do_fpu_end(void)
static void do_fpu_end(void)
{
/* restore FPU regs if necessary */
/* Do it out of line so that gcc does not move cr0 load to some stupid place */
kernel_fpu_end();
mxcsr_feature_mask_init();
/*
* Restore FPU regs if necessary.
*/
kernel_fpu_end();
}


static void fix_processor_context(void)
{
int cpu = smp_processor_id();
11 changes: 5 additions & 6 deletions arch/x86_64/kernel/suspend.c
Original file line number Diff line number Diff line change
@@ -63,13 +63,12 @@ void save_processor_state(void)
__save_processor_state(&saved_context);
}

static void
do_fpu_end(void)
static void do_fpu_end(void)
{
/* restore FPU regs if necessary */
/* Do it out of line so that gcc does not move cr0 load to some stupid place */
kernel_fpu_end();
mxcsr_feature_mask_init();
/*
* Restore FPU regs if necessary
*/
kernel_fpu_end();
}

void __restore_processor_state(struct saved_context *ctxt)

0 comments on commit 08967f9

Please sign in to comment.