]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.14-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 22 Mar 2019 11:11:03 +0000 (12:11 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 22 Mar 2019 11:11:03 +0000 (12:11 +0100)
added patches:
s390-setup-fix-boot-crash-for-machine-without-edat-1.patch

queue-4.14/s390-setup-fix-boot-crash-for-machine-without-edat-1.patch [new file with mode: 0644]
queue-4.14/series

diff --git a/queue-4.14/s390-setup-fix-boot-crash-for-machine-without-edat-1.patch b/queue-4.14/s390-setup-fix-boot-crash-for-machine-without-edat-1.patch
new file mode 100644 (file)
index 0000000..b35c255
--- /dev/null
@@ -0,0 +1,50 @@
+From 86a86804e4f18fc3880541b3d5a07f4df0fe29cb Mon Sep 17 00:00:00 2001
+From: Martin Schwidefsky <schwidefsky@de.ibm.com>
+Date: Mon, 18 Feb 2019 18:10:08 +0100
+Subject: s390/setup: fix boot crash for machine without EDAT-1
+
+From: Martin Schwidefsky <schwidefsky@de.ibm.com>
+
+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 <linux@roeck-us.net>
+Tested-by: Cornelia Huck <cohuck@redhat.com>
+Fixes: 94f85ed3e2f8 ("s390/setup: fix early warning messages")
+Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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
+@@ -390,13 +390,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 = {
index ae220d6ddcc94307ff2d5954e77c07bded8726a7..63d59b68f9bf879a70f4c65aebd96285d1b18970 100644 (file)
@@ -180,3 +180,4 @@ kvm-x86-mmu-do-not-cache-mmio-accesses-while-memslots-are-in-flux.patch
 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
+s390-setup-fix-boot-crash-for-machine-without-edat-1.patch