]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blame - arch/x86/power/hibernate_asm_32.S
x86, cpa: remove cpa pool code
[mirror_ubuntu-bionic-kernel.git] / arch / x86 / power / hibernate_asm_32.S
CommitLineData
1da177e4
LT
1.text
2
c5759124 3/*
1da177e4
LT
4 * This may not use any stack, nor any variable that is not "NoSave":
5 *
6 * Its rewriting one kernel image with another. What is stack in "old"
7 * image could very well be data page in "new" image, and overwriting
8 * your own stack under you is bad idea.
9 */
10
11#include <linux/linkage.h>
12#include <asm/segment.h>
13#include <asm/page.h>
86feeaa8 14#include <asm/asm-offsets.h>
1da177e4
LT
15
16 .text
17
18ENTRY(swsusp_arch_suspend)
19
20 movl %esp, saved_context_esp
21 movl %ebx, saved_context_ebx
22 movl %ebp, saved_context_ebp
23 movl %esi, saved_context_esi
24 movl %edi, saved_context_edi
25 pushfl ; popl saved_context_eflags
26
27 call swsusp_save
28 ret
29
2d4a34c9 30ENTRY(restore_image)
e532c06f
DF
31 movl resume_pg_dir, %eax
32 subl $__PAGE_OFFSET, %eax
33 movl %eax, %cr3
1da177e4 34
75534b50 35 movl restore_pblist, %edx
1da177e4
LT
36 .p2align 4,,7
37
38copy_loop:
39 testl %edx, %edx
40 jz done
41
42 movl pbe_address(%edx), %esi
43 movl pbe_orig_address(%edx), %edi
44
45 movl $1024, %ecx
46 rep
47 movsl
48
49 movl pbe_next(%edx), %edx
50 jmp copy_loop
51 .p2align 4,,7
52
53done:
2d4a34c9 54 /* go back to the original page tables */
e532c06f
DF
55 movl $swapper_pg_dir, %eax
56 subl $__PAGE_OFFSET, %eax
57 movl %eax, %cr3
1da177e4 58 /* Flush TLB, including "global" things (vmalloc) */
e532c06f
DF
59 movl mmu_cr4_features, %ecx
60 jecxz 1f # cr4 Pentium and higher, skip if zero
61 movl %ecx, %edx
1da177e4
LT
62 andl $~(1<<7), %edx; # PGE
63 movl %edx, %cr4; # turn off PGE
e532c06f
DF
641:
65 movl %cr3, %eax; # flush TLB
66 movl %eax, %cr3
67 jecxz 1f # cr4 Pentium and higher, skip if zero
68 movl %ecx, %cr4; # turn PGE back on
691:
1da177e4
LT
70
71 movl saved_context_esp, %esp
72 movl saved_context_ebp, %ebp
73 movl saved_context_ebx, %ebx
74 movl saved_context_esi, %esi
75 movl saved_context_edi, %edi
76
77 pushl saved_context_eflags ; popfl
78
79 xorl %eax, %eax
80
81 ret