diff options
Diffstat (limited to 'arch/x86_64')
-rw-r--r-- | arch/x86_64/kernel/process.c | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/arch/x86_64/kernel/process.c b/arch/x86_64/kernel/process.c index de10cb8a2c97..5e95b257ee26 100644 --- a/arch/x86_64/kernel/process.c +++ b/arch/x86_64/kernel/process.c | |||
@@ -615,6 +615,9 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p) | |||
615 | prev->gsindex = gsindex; | 615 | prev->gsindex = gsindex; |
616 | } | 616 | } |
617 | 617 | ||
618 | /* Must be after DS reload */ | ||
619 | unlazy_fpu(prev_p); | ||
620 | |||
618 | /* | 621 | /* |
619 | * Switch the PDA and FPU contexts. | 622 | * Switch the PDA and FPU contexts. |
620 | */ | 623 | */ |
@@ -622,10 +625,6 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p) | |||
622 | write_pda(oldrsp, next->userrsp); | 625 | write_pda(oldrsp, next->userrsp); |
623 | write_pda(pcurrent, next_p); | 626 | write_pda(pcurrent, next_p); |
624 | 627 | ||
625 | /* This must be here to ensure both math_state_restore() and | ||
626 | kernel_fpu_begin() work consistently. | ||
627 | And the AMD workaround requires it to be after DS reload. */ | ||
628 | unlazy_fpu(prev_p); | ||
629 | write_pda(kernelstack, | 628 | write_pda(kernelstack, |
630 | (unsigned long)task_stack_page(next_p) + THREAD_SIZE - PDA_STACKOFFSET); | 629 | (unsigned long)task_stack_page(next_p) + THREAD_SIZE - PDA_STACKOFFSET); |
631 | #ifdef CONFIG_CC_STACKPROTECTOR | 630 | #ifdef CONFIG_CC_STACKPROTECTOR |