diff options
-rw-r--r-- | arch/x86_64/kernel/suspend.c | 3 | ||||
-rw-r--r-- | include/asm-x86_64/suspend.h | 1 |
2 files changed, 3 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)); |
diff --git a/include/asm-x86_64/suspend.h b/include/asm-x86_64/suspend.h index bc7f81715e5e..a42306c220d6 100644 --- a/include/asm-x86_64/suspend.h +++ b/include/asm-x86_64/suspend.h | |||
@@ -17,6 +17,7 @@ struct saved_context { | |||
17 | u16 ds, es, fs, gs, ss; | 17 | u16 ds, es, fs, gs, ss; |
18 | unsigned long gs_base, gs_kernel_base, fs_base; | 18 | unsigned long gs_base, gs_kernel_base, fs_base; |
19 | unsigned long cr0, cr2, cr3, cr4, cr8; | 19 | unsigned long cr0, cr2, cr3, cr4, cr8; |
20 | unsigned long efer; | ||
20 | u16 gdt_pad; | 21 | u16 gdt_pad; |
21 | u16 gdt_limit; | 22 | u16 gdt_limit; |
22 | unsigned long gdt_base; | 23 | unsigned long gdt_base; |