aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/suspend_asm_64.S
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/kernel/suspend_asm_64.S')
-rw-r--r--arch/x86/kernel/suspend_asm_64.S8
1 files changed, 5 insertions, 3 deletions
diff --git a/arch/x86/kernel/suspend_asm_64.S b/arch/x86/kernel/suspend_asm_64.S
index 40a209e0525c..48344b666d2c 100644
--- a/arch/x86/kernel/suspend_asm_64.S
+++ b/arch/x86/kernel/suspend_asm_64.S
@@ -39,6 +39,9 @@ ENTRY(swsusp_arch_suspend)
39 /* save the address of restore_registers */ 39 /* save the address of restore_registers */
40 movq $restore_registers, %rax 40 movq $restore_registers, %rax
41 movq %rax, restore_jump_address(%rip) 41 movq %rax, restore_jump_address(%rip)
42 /* save cr3 */
43 movq %cr3, %rax
44 movq %rax, restore_cr3(%rip)
42 45
43 call swsusp_save 46 call swsusp_save
44 ret 47 ret
@@ -60,6 +63,7 @@ ENTRY(restore_image)
60 63
61 /* prepare to jump to the image kernel */ 64 /* prepare to jump to the image kernel */
62 movq restore_jump_address(%rip), %rax 65 movq restore_jump_address(%rip), %rax
66 movq restore_cr3(%rip), %rbx
63 67
64 /* prepare to copy image data to their original locations */ 68 /* prepare to copy image data to their original locations */
65 movq restore_pblist(%rip), %rdx 69 movq restore_pblist(%rip), %rdx
@@ -98,9 +102,7 @@ done:
98 102
99ENTRY(restore_registers) 103ENTRY(restore_registers)
100 /* go back to the original page tables */ 104 /* go back to the original page tables */
101 movq $(init_level4_pgt - __START_KERNEL_map), %rax 105 movq %rbx, %cr3
102 addq phys_base(%rip), %rax
103 movq %rax, %cr3
104 106
105 /* Flush TLB, including "global" things (vmalloc) */ 107 /* Flush TLB, including "global" things (vmalloc) */
106 movq mmu_cr4_features(%rip), %rax 108 movq mmu_cr4_features(%rip), %rax