From: Greg Kroah-Hartman Date: Fri, 22 Mar 2019 11:11:22 +0000 (+0100) Subject: 4.19-stable patches X-Git-Tag: v3.18.137~3 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f8b25bdb7aa147bbc7517b14b20b0cad4cee6235;p=thirdparty%2Fkernel%2Fstable-queue.git 4.19-stable patches added patches: s390-setup-fix-boot-crash-for-machine-without-edat-1.patch --- diff --git a/queue-4.19/s390-setup-fix-boot-crash-for-machine-without-edat-1.patch b/queue-4.19/s390-setup-fix-boot-crash-for-machine-without-edat-1.patch new file mode 100644 index 00000000000..3b2e1630828 --- /dev/null +++ b/queue-4.19/s390-setup-fix-boot-crash-for-machine-without-edat-1.patch @@ -0,0 +1,50 @@ +From 86a86804e4f18fc3880541b3d5a07f4df0fe29cb Mon Sep 17 00:00:00 2001 +From: Martin Schwidefsky +Date: Mon, 18 Feb 2019 18:10:08 +0100 +Subject: s390/setup: fix boot crash for machine without EDAT-1 + +From: Martin Schwidefsky + +commit 86a86804e4f18fc3880541b3d5a07f4df0fe29cb upstream. + +The fix to make WARN work in the early boot code created a problem +on older machines without EDAT-1. The setup_lowcore_dat_on function +uses the pointer from lowcore_ptr[0] to set the DAT bit in the new +PSWs. That does not work if the kernel page table is set up with +4K pages as the prefix address maps to absolute zero. + +To make this work the PSWs need to be changed with via address 0 in +form of the S390_lowcore definition. + +Reported-by: Guenter Roeck +Tested-by: Cornelia Huck +Fixes: 94f85ed3e2f8 ("s390/setup: fix early warning messages") +Signed-off-by: Martin Schwidefsky +Signed-off-by: Greg Kroah-Hartman + +--- + arch/s390/kernel/setup.c | 13 ++++++------- + 1 file changed, 6 insertions(+), 7 deletions(-) + +--- a/arch/s390/kernel/setup.c ++++ b/arch/s390/kernel/setup.c +@@ -387,13 +387,12 @@ static void __init setup_lowcore_dat_off + + static void __init setup_lowcore_dat_on(void) + { +- struct lowcore *lc; +- +- lc = lowcore_ptr[0]; +- lc->external_new_psw.mask |= PSW_MASK_DAT; +- lc->svc_new_psw.mask |= PSW_MASK_DAT; +- lc->program_new_psw.mask |= PSW_MASK_DAT; +- lc->io_new_psw.mask |= PSW_MASK_DAT; ++ __ctl_clear_bit(0, 28); ++ S390_lowcore.external_new_psw.mask |= PSW_MASK_DAT; ++ S390_lowcore.svc_new_psw.mask |= PSW_MASK_DAT; ++ S390_lowcore.program_new_psw.mask |= PSW_MASK_DAT; ++ S390_lowcore.io_new_psw.mask |= PSW_MASK_DAT; ++ __ctl_set_bit(0, 28); + } + + static struct resource code_resource = { diff --git a/queue-4.19/series b/queue-4.19/series index 356811a3ad7..6db421ea9f2 100644 --- a/queue-4.19/series +++ b/queue-4.19/series @@ -277,3 +277,4 @@ kvm-nvmx-sign-extend-displacements-of-vmx-instr-s-mem-operands.patch kvm-nvmx-apply-addr-size-mask-to-effective-address-for-vmx-instructions.patch kvm-nvmx-ignore-limit-checks-on-vmx-instructions-using-flat-segments.patch bcache-use-req_meta-req_prio-to-indicate-bio-for-metadata.patch +s390-setup-fix-boot-crash-for-machine-without-edat-1.patch