s390/kdump: Use real mode for PSW restart and kexec
authorMichael Holzheu <holzheu@linux.vnet.ibm.com>
Mon, 21 May 2012 09:30:30 +0000 (11:30 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Wed, 23 May 2012 15:06:51 +0000 (17:06 +0200)
commitfa7c0043425624ed65b94a6fabe750c7b0af8719
tree8e21c28d65b56a0bd22af1b9a196083233341b3c
parenta9fbf1a53836d4105f95df947ac00e22311dff33
s390/kdump: Use real mode for PSW restart and kexec

Currently the PSW restart handler and kexec are executed in real
mode with DAT=off. For kexec/kdump the function setup_regs() is
called that uses the per-cpu variable "crash_notes". Because
there are situations when the per-cpu implementation uses vmalloc
memory, calling setup_regs() in real mode can cause a program
check interrupt.

To fix that problem this patch changes the following:

* Ensure that diag308_reset() does not change PSW bits to real mode
* Enable DAT in __do_restart() after we switched to an online CPU
* Enable DAT in __machine_kexec() after we switched to the IPL CPU
* Call setup_regs() before we switch to real mode and call purgatory

Reviewed-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Signed-off-by: Michael Holzheu <holzheu@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/kernel/base.S
arch/s390/kernel/ipl.c
arch/s390/kernel/machine_kexec.c