linux/arch/s390/kernel
Gerald Schaefer 55a5542a54 s390/hibernate: fix error handling when suspend cpu != resume cpu
The resume code checks if the resume cpu is the same as the suspend cpu.
If not, and if it is also not possible to switch to the suspend cpu, an
error message should be printed and the resume process should be stopped
by loading a disabled wait psw.

The current logic is broken in multiple ways, the message is never printed,
and the disabled wait psw never loaded because the kernel panics before that:
- sam31 and SIGP_SET_ARCHITECTURE to ESA mode is wrong, this will break
  on the first 64bit instruction in sclp_early_printk().
- The init stack should be used, but the stack pointer is not set up correctly
  (missing aghi %r15,-STACK_FRAME_OVERHEAD).
- __sclp_early_printk() checks the sclp_init_state. If it is not
  sclp_init_state_uninitialized, it simply returns w/o printing anything.
  In the resumed kernel however, sclp_init_state will never be uninitialized.

This patch fixes those issues by removing the sam31/ESA logic, adding a
correct init stack pointer, and also introducing sclp_early_printk_force()
to allow using sclp_early_printk() even when sclp_init_state is not
uninitialized.

Reviewed-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Gerald Schaefer <gerald.schaefer@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
2018-09-20 13:20:23 +02:00
..
syscalls kbuild: do not redirect the first prerequisite for filechk 2018-07-28 10:34:10 +09:00
vdso32 s390/vdso: revise CFI annotations of vDSO functions 2017-12-13 10:51:36 +01:00
vdso64 s390/vdso: revise CFI annotations of vDSO functions 2017-12-13 10:51:36 +01:00
.gitignore s390: add various .gitignore files. 2012-05-16 14:42:41 +02:00
Makefile s390/boot: make head.S and als.c be part of the decompressor only 2018-06-25 10:14:38 +02:00
alternative.c s390: add automatic detection of the spectre defense 2018-03-28 08:38:24 +02:00
asm-offsets.c s390: remove gcc version check (4.3 or newer) 2018-08-21 15:57:58 +02:00
audit.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
audit.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
base.S s390/kernel: use expoline for indirect branches 2018-05-07 21:12:39 +02:00
cache.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
compat_audit.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
compat_linux.c mm: add ksys_readahead() helper; remove in-kernel calls to sys_readahead() 2018-04-02 20:16:12 +02:00
compat_linux.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
compat_ptrace.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
compat_signal.c s390/compat: fix setup_frame32 2018-04-10 07:38:54 +02:00
compat_wrapper.c s390: wire up rseq system call 2018-07-04 08:35:18 +02:00
cpcmd.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
crash_dump.c s390/kdump: Remove kzalloc_panic 2018-08-16 14:49:15 +02:00
debug.c treewide: kmalloc() -> kmalloc_array() 2018-06-12 16:19:22 -07:00
diag.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
dis.c s390: kernel: add SPDX identifiers to the remaining files 2017-11-24 15:37:12 +01:00
dumpstack.c s390: kernel: add SPDX identifiers to the remaining files 2017-11-24 15:37:12 +01:00
early.c s390/boot: block uncompressed vmlinux booting attempts 2018-07-02 11:25:05 +02:00
early_nobss.c s390/early: move functions which may not access bss section to extra file 2018-05-09 10:55:01 +02:00
early_printk.c s390/hibernate: fix error handling when suspend cpu != resume cpu 2018-09-20 13:20:23 +02:00
ebcdic.c s390: ebcdic: convert comments to UTF-8 2018-08-23 18:48:43 -07:00
entry.S s390: wire up rseq system call 2018-07-04 08:35:18 +02:00
entry.h s390/boot: make head.S and als.c be part of the decompressor only 2018-06-25 10:14:38 +02:00
fpu.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
ftrace.c s390/ftrace: Add -mfentry and -mnop-mcount support 2018-08-15 22:39:53 -04:00
guarded_storage.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux 2017-11-13 11:47:01 -08:00
head64.S s390: correct _stext offset 2018-07-02 11:24:59 +02:00
idle.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
ipl.c s390/ipl: remove reipl_method and dump_method 2018-04-10 07:39:00 +02:00
irq.c s390: remove indirect branch from do_softirq_own_stack 2018-05-07 21:12:42 +02:00
jump_label.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
kdebugfs.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
kexec_elf.c s390/kexec_file: Add ELF loader 2018-04-16 09:10:23 +02:00
kexec_image.c s390/kexec_file: Add crash support to image loader 2018-04-16 09:10:22 +02:00
kprobes.c bpf/error-inject/kprobes: Clear current_kprobe and enable preempt in kprobe 2018-06-21 12:33:19 +02:00
lgr.c s390: kernel: add SPDX identifiers to the remaining files 2017-11-24 15:37:12 +01:00
machine_kexec.c s390/ipl: correct kdump reipl block checksum calculation 2018-04-10 07:39:00 +02:00
machine_kexec_file.c s390/kexec_file: Add ELF loader 2018-04-16 09:10:23 +02:00
mcount.S s390/ftrace: Add -mfentry and -mnop-mcount support 2018-08-15 22:39:53 -04:00
module.c treewide: Use array_size() in vmalloc() 2018-06-12 16:19:22 -07:00
nmi.c headers: untangle kmemleak.h from mm.h 2018-04-05 21:36:27 -07:00
nospec-branch.c s390: detect etoken facility 2018-07-18 08:32:17 +02:00
nospec-sysfs.c s390: detect etoken facility 2018-07-18 08:32:17 +02:00
os_info.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
perf_cpum_cf.c s390: kernel: Remove redundant license text 2017-11-24 15:37:20 +01:00
perf_cpum_cf_events.c treewide: kmalloc() -> kmalloc_array() 2018-06-12 16:19:22 -07:00
perf_cpum_sf.c Merge branch 'siginfo-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace 2018-08-21 13:47:29 -07:00
perf_event.c s390: kernel: Remove redundant license text 2017-11-24 15:37:20 +01:00
perf_regs.c s390/perf: fix gcc 8 array-bounds warning 2018-07-02 11:24:54 +02:00
pgm_check.S License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
process.c s390: update sampling tag after task pid change 2018-04-23 07:57:17 +02:00
processor.c s390: run user space and KVM guests with modified branch prediction 2018-02-05 14:48:50 +01:00
ptrace.c s390/gs: add compat regset for the guarded storage broadcast control block 2017-11-28 17:33:15 +01:00
reipl.S s390/kernel: use expoline for indirect branches 2018-05-07 21:12:39 +02:00
relocate_kernel.S s390: assume diag308 set always works 2018-04-10 07:38:59 +02:00
runtime_instr.c s390/runtime_instrumentation: re-add signum system call parameter 2018-02-05 07:34:50 +01:00
setup.c s390/setup: do not reserve the decompressor code 2018-06-25 10:14:41 +02:00
signal.c s390: wire up rseq system call 2018-07-04 08:35:18 +02:00
smp.c headers: untangle kmemleak.h from mm.h 2018-04-05 21:36:27 -07:00
stacktrace.c s390: kernel: add SPDX identifiers to the remaining files 2017-11-24 15:37:12 +01:00
sthyi.c treewide: Use array_size() in vmalloc() 2018-06-12 16:19:22 -07:00
suspend.c s390: unify linker symbols usage 2018-02-27 08:05:23 +01:00
swsusp.S s390/hibernate: fix error handling when suspend cpu != resume cpu 2018-09-20 13:20:23 +02:00
sys_s390.c mm: add ksys_mmap_pgoff() helper; remove in-kernel calls to sys_mmap_pgoff() 2018-04-02 20:16:11 +02:00
sysinfo.c s390/sysinfo: add missing #ifdef CONFIG_PROC_FS 2018-07-02 12:32:20 +02:00
time.c s390/time: Remove read_boot_clock64() 2018-07-20 00:02:41 +02:00
topology.c s390/topology: correct topology mode proc handler 2018-07-06 08:47:53 +02:00
trace.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
traps.c signal/s390: Use force_sig_fault where appropriate 2018-04-25 10:44:08 -05:00
uprobes.c s390/uprobes: implement arch_uretprobe_is_alive() 2018-04-23 07:57:16 +02:00
vdso.c s390: vdso_fault return type 2018-07-23 13:49:57 +02:00
vmlinux.lds.S s390: move _text to an actual .text start 2018-07-02 11:25:00 +02:00
vtime.c s390: kernel: add SPDX identifiers to the remaining files 2017-11-24 15:37:12 +01:00