diff options
author | Alexander Gordeev <agordeev@linux.ibm.com> | 2021-06-18 08:17:16 +0200 |
---|---|---|
committer | Vasily Gorbik <gor@linux.ibm.com> | 2021-07-05 12:44:23 +0200 |
commit | d35925b34996196d22a4357dc5212ab03af75151 (patch) | |
tree | a2e4001cb410ce8e71cc8f93b333e1304170bd69 /arch/s390/kernel/nmi.c | |
parent | s390/mcck: always enter C handler with DAT enabled (diff) | |
download | linux-d35925b34996196d22a4357dc5212ab03af75151.tar.xz linux-d35925b34996196d22a4357dc5212ab03af75151.zip |
s390/mcck: move storage error checks to assembler
The current storage errors tackling is wrong - the DAT is
enabled in assembler code before the actual storage checks
in C half are executed. In case the page tables themselves
are damaged such approach is not going to work.
With this update unrecoverable storage errors are not
passed to C code for handling, but rather the machine
is stopped right away. The only exception to this flow
is when a machine check occurred in KVM guest - in this
case the errors are reinjected by the handler.
Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
Reviewed-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
Diffstat (limited to 'arch/s390/kernel/nmi.c')
-rw-r--r-- | arch/s390/kernel/nmi.c | 15 |
1 files changed, 0 insertions, 15 deletions
diff --git a/arch/s390/kernel/nmi.c b/arch/s390/kernel/nmi.c index a424f6e69b95..fdb5d23ac995 100644 --- a/arch/s390/kernel/nmi.c +++ b/arch/s390/kernel/nmi.c @@ -399,21 +399,6 @@ int notrace s390_do_machine_check(struct pt_regs *regs) mcck_pending = 1; } - /* - * Reinject storage related machine checks into the guest if they - * happen when the guest is running. - */ - if (!test_cpu_flag(CIF_MCCK_GUEST)) { - if (mci.se) - /* Storage error uncorrected */ - s390_handle_damage(); - if (mci.ke) - /* Storage key-error uncorrected */ - s390_handle_damage(); - if (mci.ds && mci.fa) - /* Storage degradation */ - s390_handle_damage(); - } if (mci.cp) { /* Channel report word pending */ mcck->channel_report = 1; |