diff options
| -rw-r--r-- | arch/x86/power/hibernate_asm_32.S | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/arch/x86/power/hibernate_asm_32.S b/arch/x86/power/hibernate_asm_32.S index b641388d8286..ad47daeafa4e 100644 --- a/arch/x86/power/hibernate_asm_32.S +++ b/arch/x86/power/hibernate_asm_32.S | |||
| @@ -27,10 +27,17 @@ ENTRY(swsusp_arch_suspend) | |||
| 27 | ret | 27 | ret |
| 28 | 28 | ||
| 29 | ENTRY(restore_image) | 29 | ENTRY(restore_image) |
| 30 | movl mmu_cr4_features, %ecx | ||
| 30 | movl resume_pg_dir, %eax | 31 | movl resume_pg_dir, %eax |
| 31 | subl $__PAGE_OFFSET, %eax | 32 | subl $__PAGE_OFFSET, %eax |
| 32 | movl %eax, %cr3 | 33 | movl %eax, %cr3 |
| 33 | 34 | ||
| 35 | jecxz 1f # cr4 Pentium and higher, skip if zero | ||
| 36 | andl $~(X86_CR4_PGE), %ecx | ||
| 37 | movl %ecx, %cr4; # turn off PGE | ||
| 38 | movl %cr3, %eax; # flush TLB | ||
| 39 | movl %eax, %cr3 | ||
| 40 | 1: | ||
| 34 | movl restore_pblist, %edx | 41 | movl restore_pblist, %edx |
| 35 | .p2align 4,,7 | 42 | .p2align 4,,7 |
| 36 | 43 | ||
| @@ -54,16 +61,8 @@ done: | |||
| 54 | movl $swapper_pg_dir, %eax | 61 | movl $swapper_pg_dir, %eax |
| 55 | subl $__PAGE_OFFSET, %eax | 62 | subl $__PAGE_OFFSET, %eax |
| 56 | movl %eax, %cr3 | 63 | movl %eax, %cr3 |
| 57 | /* Flush TLB, including "global" things (vmalloc) */ | ||
| 58 | movl mmu_cr4_features, %ecx | 64 | movl mmu_cr4_features, %ecx |
| 59 | jecxz 1f # cr4 Pentium and higher, skip if zero | 65 | jecxz 1f # cr4 Pentium and higher, skip if zero |
| 60 | movl %ecx, %edx | ||
| 61 | andl $~(X86_CR4_PGE), %edx | ||
| 62 | movl %edx, %cr4; # turn off PGE | ||
| 63 | 1: | ||
| 64 | movl %cr3, %eax; # flush TLB | ||
| 65 | movl %eax, %cr3 | ||
| 66 | jecxz 1f # cr4 Pentium and higher, skip if zero | ||
| 67 | movl %ecx, %cr4; # turn PGE back on | 66 | movl %ecx, %cr4; # turn PGE back on |
| 68 | 1: | 67 | 1: |
| 69 | 68 | ||
