diff options
author | Vivek Goyal <vgoyal@in.ibm.com> | 2007-05-02 13:27:07 -0400 |
---|---|---|
committer | Andi Kleen <andi@basil.nowhere.org> | 2007-05-02 13:27:07 -0400 |
commit | 3c321bceb4a626639ab43a5a24d884930e511826 (patch) | |
tree | eba7e14b27ee28bf2b2415fa43563aed9b0538a6 /arch | |
parent | 30f472895401fbe8e64f861a2569bc9acb098741 (diff) |
[PATCH] x86-64: Add EFER to the register set saved by save_processor_state
EFER varies like %cr4 depending on the cpu capabilities, and which cpu
capabilities we want to make use of. So save/restore it make certain
we have the same EFER value when we are done.
Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
Signed-off-by: Vivek Goyal <vgoyal@in.ibm.com>
Signed-off-by: Andi Kleen <ak@suse.de>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/x86_64/kernel/suspend.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/arch/x86_64/kernel/suspend.c b/arch/x86_64/kernel/suspend.c index 91f7e678bae7..fe865ea4df52 100644 --- a/arch/x86_64/kernel/suspend.c +++ b/arch/x86_64/kernel/suspend.c | |||
@@ -33,7 +33,6 @@ void __save_processor_state(struct saved_context *ctxt) | |||
33 | asm volatile ("str %0" : "=m" (ctxt->tr)); | 33 | asm volatile ("str %0" : "=m" (ctxt->tr)); |
34 | 34 | ||
35 | /* XMM0..XMM15 should be handled by kernel_fpu_begin(). */ | 35 | /* XMM0..XMM15 should be handled by kernel_fpu_begin(). */ |
36 | /* EFER should be constant for kernel version, no need to handle it. */ | ||
37 | /* | 36 | /* |
38 | * segment registers | 37 | * segment registers |
39 | */ | 38 | */ |
@@ -50,6 +49,7 @@ void __save_processor_state(struct saved_context *ctxt) | |||
50 | /* | 49 | /* |
51 | * control registers | 50 | * control registers |
52 | */ | 51 | */ |
52 | rdmsrl(MSR_EFER, ctxt->efer); | ||
53 | asm volatile ("movq %%cr0, %0" : "=r" (ctxt->cr0)); | 53 | asm volatile ("movq %%cr0, %0" : "=r" (ctxt->cr0)); |
54 | asm volatile ("movq %%cr2, %0" : "=r" (ctxt->cr2)); | 54 | asm volatile ("movq %%cr2, %0" : "=r" (ctxt->cr2)); |
55 | asm volatile ("movq %%cr3, %0" : "=r" (ctxt->cr3)); | 55 | asm volatile ("movq %%cr3, %0" : "=r" (ctxt->cr3)); |
@@ -75,6 +75,7 @@ void __restore_processor_state(struct saved_context *ctxt) | |||
75 | /* | 75 | /* |
76 | * control registers | 76 | * control registers |
77 | */ | 77 | */ |
78 | wrmsrl(MSR_EFER, ctxt->efer); | ||
78 | asm volatile ("movq %0, %%cr8" :: "r" (ctxt->cr8)); | 79 | asm volatile ("movq %0, %%cr8" :: "r" (ctxt->cr8)); |
79 | asm volatile ("movq %0, %%cr4" :: "r" (ctxt->cr4)); | 80 | asm volatile ("movq %0, %%cr4" :: "r" (ctxt->cr4)); |
80 | asm volatile ("movq %0, %%cr3" :: "r" (ctxt->cr3)); | 81 | asm volatile ("movq %0, %%cr3" :: "r" (ctxt->cr3)); |