diff options
Diffstat (limited to 'arch/s390/kernel/swsusp_asm64.S')
-rw-r--r-- | arch/s390/kernel/swsusp_asm64.S | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/arch/s390/kernel/swsusp_asm64.S b/arch/s390/kernel/swsusp_asm64.S index acb78cdee896..dd70ef046058 100644 --- a/arch/s390/kernel/swsusp_asm64.S +++ b/arch/s390/kernel/swsusp_asm64.S | |||
@@ -42,7 +42,7 @@ ENTRY(swsusp_arch_suspend) | |||
42 | lghi %r1,0x1000 | 42 | lghi %r1,0x1000 |
43 | 43 | ||
44 | /* Save CPU address */ | 44 | /* Save CPU address */ |
45 | stap __LC_CPU_ADDRESS(%r0) | 45 | stap __LC_EXT_CPU_ADDR(%r0) |
46 | 46 | ||
47 | /* Store registers */ | 47 | /* Store registers */ |
48 | mvc 0x318(4,%r1),__SF_EMPTY(%r15) /* move prefix to lowcore */ | 48 | mvc 0x318(4,%r1),__SF_EMPTY(%r15) /* move prefix to lowcore */ |
@@ -173,15 +173,15 @@ pgm_check_entry: | |||
173 | larl %r1,.Lresume_cpu /* Resume CPU address: r2 */ | 173 | larl %r1,.Lresume_cpu /* Resume CPU address: r2 */ |
174 | stap 0(%r1) | 174 | stap 0(%r1) |
175 | llgh %r2,0(%r1) | 175 | llgh %r2,0(%r1) |
176 | llgh %r1,__LC_CPU_ADDRESS(%r0) /* Suspend CPU address: r1 */ | 176 | llgh %r1,__LC_EXT_CPU_ADDR(%r0) /* Suspend CPU address: r1 */ |
177 | cgr %r1,%r2 | 177 | cgr %r1,%r2 |
178 | je restore_registers /* r1 = r2 -> nothing to do */ | 178 | je restore_registers /* r1 = r2 -> nothing to do */ |
179 | larl %r4,.Lrestart_suspend_psw /* Set new restart PSW */ | 179 | larl %r4,.Lrestart_suspend_psw /* Set new restart PSW */ |
180 | mvc __LC_RST_NEW_PSW(16,%r0),0(%r4) | 180 | mvc __LC_RST_NEW_PSW(16,%r0),0(%r4) |
181 | 3: | 181 | 3: |
182 | sigp %r9,%r1,__SIGP_INITIAL_CPU_RESET | 182 | sigp %r9,%r1,11 /* sigp initial cpu reset */ |
183 | brc 8,4f /* accepted */ | 183 | brc 8,4f /* accepted */ |
184 | brc 2,3b /* busy, try again */ | 184 | brc 2,3b /* busy, try again */ |
185 | 185 | ||
186 | /* Suspend CPU not available -> panic */ | 186 | /* Suspend CPU not available -> panic */ |
187 | larl %r15,init_thread_union | 187 | larl %r15,init_thread_union |
@@ -196,10 +196,10 @@ pgm_check_entry: | |||
196 | lpsw 0(%r3) | 196 | lpsw 0(%r3) |
197 | 4: | 197 | 4: |
198 | /* Switch to suspend CPU */ | 198 | /* Switch to suspend CPU */ |
199 | sigp %r9,%r1,__SIGP_RESTART /* start suspend CPU */ | 199 | sigp %r9,%r1,6 /* sigp restart to suspend CPU */ |
200 | brc 2,4b /* busy, try again */ | 200 | brc 2,4b /* busy, try again */ |
201 | 5: | 201 | 5: |
202 | sigp %r9,%r2,__SIGP_STOP /* stop resume (current) CPU */ | 202 | sigp %r9,%r2,5 /* sigp stop to current resume CPU */ |
203 | brc 2,5b /* busy, try again */ | 203 | brc 2,5b /* busy, try again */ |
204 | 6: j 6b | 204 | 6: j 6b |
205 | 205 | ||
@@ -207,7 +207,7 @@ restart_suspend: | |||
207 | larl %r1,.Lresume_cpu | 207 | larl %r1,.Lresume_cpu |
208 | llgh %r2,0(%r1) | 208 | llgh %r2,0(%r1) |
209 | 7: | 209 | 7: |
210 | sigp %r9,%r2,__SIGP_SENSE /* Wait for resume CPU */ | 210 | sigp %r9,%r2,1 /* sigp sense, wait for resume CPU */ |
211 | brc 8,7b /* accepted, status 0, still running */ | 211 | brc 8,7b /* accepted, status 0, still running */ |
212 | brc 2,7b /* busy, try again */ | 212 | brc 2,7b /* busy, try again */ |
213 | tmll %r9,0x40 /* Test if resume CPU is stopped */ | 213 | tmll %r9,0x40 /* Test if resume CPU is stopped */ |
@@ -257,6 +257,9 @@ restore_registers: | |||
257 | lghi %r2,0 | 257 | lghi %r2,0 |
258 | brasl %r14,arch_set_page_states | 258 | brasl %r14,arch_set_page_states |
259 | 259 | ||
260 | /* Log potential guest relocation */ | ||
261 | brasl %r14,lgr_info_log | ||
262 | |||
260 | /* Reinitialize the channel subsystem */ | 263 | /* Reinitialize the channel subsystem */ |
261 | brasl %r14,channel_subsystem_reinit | 264 | brasl %r14,channel_subsystem_reinit |
262 | 265 | ||