Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[S390] hibernation: reset system after resume

Force system into defined state after resume.

Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>

authored by

Heiko Carstens and committed by
Martin Schwidefsky
2583d1ef 846955c8

+40 -2
+40 -2
arch/s390/kernel/swsusp_asm64.S
··· 108 108 #ifdef CONFIG_SMP 109 109 /* Save boot cpu number */ 110 110 brasl %r14,smp_get_phys_cpu_id 111 - lgr %r10,%r2 111 + larl %r1,saved_cpu_id 112 + st %r2,0(%r1) 112 113 #endif 113 114 /* Deactivate DAT */ 114 115 stnsm __SF_EMPTY(%r15),0xfb ··· 136 135 jnz 0b 137 136 2: 138 137 ptlb /* flush tlb */ 138 + 139 + /* Reset System */ 140 + larl %r1,restart_entry 141 + larl %r2,restart_psw 142 + og %r1,0(%r2) 143 + stg %r1,0(%r0) 144 + larl %r1,saved_pgm_check_psw 145 + mvc 0(16,%r1),__LC_PGM_NEW_PSW(%r0) 146 + larl %r1,new_pgm_check_psw 147 + epsw %r2,%r3 148 + stm %r2,%r3,0(%r1) 149 + mvc __LC_PGM_NEW_PSW(16,%r0),0(%r1) 150 + lghi %r0,0 151 + diag %r0,%r0,0x308 152 + restart_entry: 153 + lhi %r1,1 154 + sigp %r1,%r0,0x12 155 + sam64 156 + larl %r1,new_pgm_check_psw 157 + lpswe 0(%r1) 158 + pgm_check_entry: 159 + larl %r1,saved_pgm_check_psw 160 + mvc __LC_PGM_NEW_PSW(16,%r0),0(%r1) 139 161 140 162 /* Restore registers */ 141 163 lghi %r13,0x1000 /* %r1 = pointer to save arae */ ··· 195 171 196 172 #ifdef CONFIG_SMP 197 173 /* Switch CPUs */ 198 - lgr %r2,%r10 /* get cpu id */ 174 + larl %r1,saved_cpu_id 175 + llgf %r2,0(%r1) 199 176 llgf %r3,0x318(%r13) 200 177 brasl %r14,smp_switch_boot_cpu_in_resume 201 178 #endif ··· 214 189 lmg %r6,%r15,STACK_FRAME_OVERHEAD + __SF_GPRS(%r15) 215 190 lghi %r2,0 216 191 br %r14 192 + 193 + .section .data.nosave,"aw",@progbits 194 + .align 8 195 + restart_psw: 196 + .long 0x00080000,0x80000000 197 + new_pgm_check_psw: 198 + .quad 0,pgm_check_entry 199 + saved_pgm_check_psw: 200 + .quad 0,0 201 + #ifdef CONFIG_SMP 202 + saved_cpu_id: 203 + .long 0 204 + #endif