|
@@ -36,8 +36,8 @@ ENTRY(swsusp_arch_suspend)
|
|
|
/* Store prefix register on stack */
|
|
|
stpx __SF_EMPTY(%r15)
|
|
|
|
|
|
- /* Save prefix register contents for lowcore */
|
|
|
- llgf %r4,__SF_EMPTY(%r15)
|
|
|
+ /* Save prefix register contents for lowcore copy */
|
|
|
+ llgf %r10,__SF_EMPTY(%r15)
|
|
|
|
|
|
/* Get pointer to save area */
|
|
|
lghi %r1,0x1000
|
|
@@ -91,7 +91,18 @@ ENTRY(swsusp_arch_suspend)
|
|
|
xc __SF_EMPTY(4,%r15),__SF_EMPTY(%r15)
|
|
|
spx __SF_EMPTY(%r15)
|
|
|
|
|
|
+ /* Save absolute zero pages */
|
|
|
+ larl %r2,suspend_zero_pages
|
|
|
+ lg %r2,0(%r2)
|
|
|
+ lghi %r4,0
|
|
|
+ lghi %r3,2*PAGE_SIZE
|
|
|
+ lghi %r5,2*PAGE_SIZE
|
|
|
+1: mvcle %r2,%r4,0
|
|
|
+ jo 1b
|
|
|
+
|
|
|
+ /* Copy lowcore to absolute zero lowcore */
|
|
|
lghi %r2,0
|
|
|
+ lgr %r4,%r10
|
|
|
lghi %r3,2*PAGE_SIZE
|
|
|
lghi %r5,2*PAGE_SIZE
|
|
|
1: mvcle %r2,%r4,0
|
|
@@ -248,8 +259,20 @@ restore_registers:
|
|
|
/* Load old stack */
|
|
|
lg %r15,0x2f8(%r13)
|
|
|
|
|
|
+ /* Save prefix register */
|
|
|
+ mvc __SF_EMPTY(4,%r15),0x318(%r13)
|
|
|
+
|
|
|
+ /* Restore absolute zero pages */
|
|
|
+ lghi %r2,0
|
|
|
+ larl %r4,suspend_zero_pages
|
|
|
+ lg %r4,0(%r4)
|
|
|
+ lghi %r3,2*PAGE_SIZE
|
|
|
+ lghi %r5,2*PAGE_SIZE
|
|
|
+1: mvcle %r2,%r4,0
|
|
|
+ jo 1b
|
|
|
+
|
|
|
/* Restore prefix register */
|
|
|
- spx 0x318(%r13)
|
|
|
+ spx __SF_EMPTY(%r15)
|
|
|
|
|
|
/* Activate DAT */
|
|
|
stosm __SF_EMPTY(%r15),0x04
|